diff --git a/.properties b/.properties index 5d3c4765cf7..3400f621a17 100644 --- a/.properties +++ b/.properties @@ -1,6 +1,6 @@ id=com.silabs.sdk.stack.super -version=4.2.1 +version=4.2.2 label=Gecko SDK Suite description=Gecko SDK Suite diff --git a/app/amazon/amazon_bluetooth_experimental_templates.xml b/app/amazon/amazon_bluetooth_experimental_templates.xml index ec14e6cd6d1..00c1d7ab0d6 100644 --- a/app/amazon/amazon_bluetooth_experimental_templates.xml +++ b/app/amazon/amazon_bluetooth_experimental_templates.xml @@ -6,7 +6,7 @@ - + @@ -21,7 +21,7 @@ - + @@ -36,9 +36,9 @@ - + - + diff --git a/app/amazon/amazon_platform_experimental_templates.xml b/app/amazon/amazon_platform_experimental_templates.xml index 3bc3fb5554b..f7c504e8d75 100644 --- a/app/amazon/amazon_platform_experimental_templates.xml +++ b/app/amazon/amazon_platform_experimental_templates.xml @@ -7,8 +7,8 @@ - - + + diff --git a/app/bluetooth/bluetooth_experimental_templates.xml b/app/bluetooth/bluetooth_experimental_templates.xml index ee9f5b61db0..d6662c6795f 100644 --- a/app/bluetooth/bluetooth_experimental_templates.xml +++ b/app/bluetooth/bluetooth_experimental_templates.xml @@ -1,14 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -21,9 +53,9 @@ - - - + + + @@ -36,9 +68,9 @@ - + - + @@ -51,9 +83,24 @@ - - - + + + + + + + + + + + + + + + + + + diff --git a/app/bluetooth/bluetooth_production_demos.xml b/app/bluetooth/bluetooth_production_demos.xml index 0cf5a54c53e..476535c5be2 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. 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. @@ -18,11 +18,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. @@ -30,11 +30,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. @@ -42,11 +42,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. @@ -54,11 +54,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. @@ -66,11 +66,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. @@ -78,11 +78,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. @@ -90,11 +90,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. @@ -102,11 +102,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. @@ -114,11 +114,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. @@ -126,11 +126,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. @@ -138,11 +138,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. @@ -150,11 +150,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. @@ -162,11 +162,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. @@ -174,11 +174,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. @@ -186,11 +186,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. @@ -198,11 +198,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. @@ -210,11 +210,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. @@ -222,11 +222,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. @@ -234,11 +234,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. @@ -246,11 +246,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. @@ -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 @@ - + - + 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. @@ -294,11 +294,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. @@ -306,11 +306,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. @@ -318,11 +318,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. @@ -330,11 +330,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. @@ -342,11 +342,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. @@ -354,11 +354,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. @@ -366,11 +366,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. @@ -378,11 +378,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. @@ -390,11 +390,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. @@ -402,11 +402,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. @@ -414,11 +414,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. @@ -426,11 +426,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. @@ -438,11 +438,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. @@ -450,11 +450,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. @@ -462,11 +462,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. @@ -474,11 +474,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. @@ -486,11 +486,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. @@ -498,11 +498,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. @@ -510,11 +510,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. @@ -522,11 +522,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. @@ -534,11 +534,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. @@ -546,11 +546,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. @@ -558,11 +558,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. @@ -570,11 +570,11 @@ - + - + Demonstrates the features of the EFR32xG24 Dev Kit Board. This can be tested with the EFR Connect mobile app. @@ -582,11 +582,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. @@ -594,11 +594,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. @@ -606,11 +606,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. @@ -618,11 +618,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. @@ -630,11 +630,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. @@ -642,11 +642,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. @@ -654,11 +654,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. @@ -666,11 +666,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. @@ -678,11 +678,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. @@ -690,11 +690,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. @@ -702,11 +702,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. @@ -714,11 +714,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. @@ -726,11 +726,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. @@ -738,11 +738,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. @@ -750,11 +750,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. @@ -762,11 +762,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. @@ -774,11 +774,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. @@ -786,11 +786,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. @@ -798,11 +798,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. @@ -810,11 +810,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. @@ -822,11 +822,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. @@ -834,11 +834,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. @@ -846,11 +846,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. @@ -858,11 +858,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. @@ -870,11 +870,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. @@ -882,11 +882,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. @@ -894,11 +894,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. @@ -906,11 +906,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. @@ -918,11 +918,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. @@ -930,11 +930,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. @@ -942,11 +942,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. @@ -954,11 +954,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. @@ -966,11 +966,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. @@ -978,11 +978,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. @@ -990,11 +990,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. @@ -1002,11 +1002,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. @@ -1014,11 +1014,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. @@ -1026,11 +1026,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. @@ -1038,11 +1038,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. @@ -1050,11 +1050,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. @@ -1062,11 +1062,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. @@ -1074,11 +1074,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. @@ -1086,11 +1086,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. @@ -1098,11 +1098,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. @@ -1110,11 +1110,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. @@ -1122,11 +1122,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. @@ -1134,11 +1134,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. @@ -1146,11 +1146,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. @@ -1158,11 +1158,11 @@ - + - + Demonstrates the features of the Thunderboard EFR32BG22 Kit. This can be tested with the EFR Connect mobile app. @@ -1170,11 +1170,11 @@ - + - + Demonstrates the features of the Thunderboard EFR32BG22 Kit. This can be tested with the EFR Connect mobile app. @@ -1182,11 +1182,11 @@ - + - + Demonstrates the features of the Thunderboard Sense 2 Kit. This can be tested with the EFR Connect mobile app. @@ -1194,11 +1194,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. @@ -1206,11 +1206,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. @@ -1218,11 +1218,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. @@ -1230,11 +1230,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. @@ -1242,7 +1242,7 @@ - + @@ -1253,7 +1253,7 @@ - + @@ -1264,7 +1264,7 @@ - + @@ -1275,7 +1275,7 @@ - + @@ -1286,7 +1286,7 @@ - + @@ -1297,7 +1297,7 @@ - + @@ -1308,7 +1308,7 @@ - + @@ -1319,7 +1319,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1341,7 +1341,7 @@ - + @@ -1352,7 +1352,7 @@ - + @@ -1363,7 +1363,7 @@ - + @@ -1374,7 +1374,7 @@ - + @@ -1385,7 +1385,7 @@ - + @@ -1396,7 +1396,7 @@ - + @@ -1407,7 +1407,7 @@ - + @@ -1418,7 +1418,7 @@ - + @@ -1429,7 +1429,7 @@ - + @@ -1440,7 +1440,7 @@ - + @@ -1451,7 +1451,7 @@ - + @@ -1462,7 +1462,7 @@ - + @@ -1473,7 +1473,7 @@ - + @@ -1484,7 +1484,7 @@ - + @@ -1495,7 +1495,7 @@ - + @@ -1506,7 +1506,7 @@ - + @@ -1517,7 +1517,7 @@ - + @@ -1528,7 +1528,7 @@ - + @@ -1539,11 +1539,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. @@ -1551,11 +1551,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). @@ -1563,11 +1563,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). @@ -1575,11 +1575,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). @@ -1587,11 +1587,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. @@ -1599,11 +1599,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. @@ -1611,11 +1611,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. @@ -1623,11 +1623,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). @@ -1635,11 +1635,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). @@ -1647,11 +1647,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. @@ -1659,10 +1659,10 @@ - + - + diff --git a/app/bluetooth/bluetooth_production_templates.xml b/app/bluetooth/bluetooth_production_templates.xml index be5fe8fc099..adf66ddb123 100644 --- a/app/bluetooth/bluetooth_production_templates.xml +++ b/app/bluetooth/bluetooth_production_templates.xml @@ -7,8 +7,8 @@ - - + + @@ -21,9 +21,9 @@ - - - + + + @@ -36,9 +36,9 @@ - - - + + + @@ -52,8 +52,8 @@ - - + + @@ -66,9 +66,9 @@ - + - + @@ -83,7 +83,7 @@ - + @@ -96,9 +96,9 @@ - + - + @@ -111,9 +111,9 @@ - + - + @@ -126,9 +126,9 @@ - + - + @@ -141,9 +141,9 @@ - + - + @@ -156,9 +156,9 @@ - + - + @@ -173,7 +173,7 @@ - + @@ -188,7 +188,7 @@ - + @@ -203,7 +203,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -231,9 +231,9 @@ - + - + @@ -246,9 +246,9 @@ - + - + @@ -263,7 +263,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -293,7 +293,7 @@ - + @@ -308,7 +308,7 @@ - + @@ -321,9 +321,9 @@ - + - + @@ -336,9 +336,9 @@ - + - + @@ -351,9 +351,9 @@ - + - + @@ -366,9 +366,9 @@ - + - + @@ -383,7 +383,7 @@ - + @@ -396,9 +396,9 @@ - + - + @@ -413,7 +413,7 @@ - + @@ -428,7 +428,7 @@ - + @@ -441,9 +441,9 @@ - + - + @@ -458,7 +458,7 @@ - + @@ -471,9 +471,9 @@ - + - + @@ -486,9 +486,9 @@ - + - + @@ -501,9 +501,9 @@ - + - + @@ -518,7 +518,7 @@ - + @@ -531,9 +531,9 @@ - + - + @@ -548,7 +548,7 @@ - + @@ -563,7 +563,7 @@ - + @@ -578,7 +578,7 @@ - + @@ -593,7 +593,7 @@ - + @@ -608,7 +608,7 @@ - + @@ -623,7 +623,7 @@ - + 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 4fd4b1df103..9e8ac306b47 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:eb6f92796a7b3f5722372086df7d5b43717c318d8f60b1432e370281ceb8c4fe +oid sha256:10fdeca23d37aa5a1b0e3395a4876d68a335d6b0062346fd3fed0799600441b7 size 5322 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 42860830f74..89122569035 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:03a2be66479f457d460e73ef2907dfb6e4430c92ae1baadd1cbc2ab0e5ed8c62 +oid sha256:4c03f166fa7e54e175a14e76bc6f8249a0dc39c2cfd7ed1358995f3685abd7ea size 10542 diff --git a/app/bluetooth/common_host/cpc/cpc.c b/app/bluetooth/common_host/cpc/cpc.c index fa91e91fdc9..38f32eef72b 100644 --- a/app/bluetooth/common_host/cpc/cpc.c +++ b/app/bluetooth/common_host/cpc/cpc.c @@ -49,6 +49,9 @@ static cpc_handle_t lib_handle; static cpc_endpoint_t endpoint; +// cpc endpoint fd +static int ep_sock_fd; + // temporary rx buffer typedef struct { int32_t len; @@ -62,7 +65,7 @@ static uint8_t handshake_msg[4] = { 0x20, 0x00, 0x01, 0x00 }; // end the receiving loop if signal is received. static volatile bool run = true; // signal if the controller was reset -static volatile bool has_reset = false; +static volatile sig_atomic_t has_reset = false; // two worker threads static pthread_t sv; @@ -80,52 +83,71 @@ static void reset_callback(void); int32_t cpc_open(void *handle, char *cpc_instance, bool reset_on_start) { + (void)handle; int ret; - uint8_t retry = 0; + ssize_t size; + uint8_t retry; // Initialize CPC communication + retry = 0; do { ret = cpc_init(&lib_handle, cpc_instance, false, reset_callback); if (ret == 0) { - // speed up boot process if everything seems ok break; } nanosleep((const struct timespec[]){ { 0, CPC_RETRY_SLEEP_NS } }, NULL); retry++; - } while ((ret != 0) && (retry < RETRY_COUNT)); + } while (retry < RETRY_COUNT); if (ret < 0) { - perror("cpc_init: "); + perror("Failed to cpc_init "); return ret; } - // Start Bluetooth endpoint - ret = cpc_open_endpoint(lib_handle, - &endpoint, - SL_CPC_ENDPOINT_BLUETOOTH, - CPC_TRANSMIT_WINDOW); + // Open Bluetooth endpoint + retry = 0; + do { + ret = cpc_open_endpoint(lib_handle, + &endpoint, + SL_CPC_ENDPOINT_BLUETOOTH, + CPC_TRANSMIT_WINDOW); + if (ret > 0) { + ep_sock_fd = ret; + break; + } + nanosleep((const struct timespec[]){ { 0, CPC_RETRY_SLEEP_NS } }, NULL); + retry++; + } while (retry < RETRY_COUNT); + if (ret < 0) { - perror("cpc_open_endpoint "); + perror("Failed to cpc_open_endpoint "); return ret; } // Create supervisory thread ret = pthread_create(&sv, NULL, supervisor, NULL); if (ret) { - perror("Couldn't create thread "); + perror("Failed to create thread "); return ret; } - handle = endpoint.ptr; - // Send handshake msg - (void)cpc_write_endpoint(endpoint, &handshake_msg[0], 4, CPC_ENDPOINT_WRITE_FLAG_NONE); + size = cpc_write_endpoint(endpoint, &handshake_msg[0], 4, CPC_ENDPOINT_WRITE_FLAG_NONE); + if (size < 0) { + perror("Failed to send handshake msg "); + return (int)size; + } if (reset_on_start) { // Discard response - (void)cpc_read_endpoint(endpoint, &buf_rx.buf, FROM_CPC_BUF_SIZE, CPC_ENDPOINT_READ_FLAG_NONE); - buf_rx.len = 0; - memset(buf_rx.buf, 0, FROM_CPC_BUF_SIZE); + size = cpc_read_endpoint(endpoint, &buf_rx.buf, FROM_CPC_BUF_SIZE, CPC_ENDPOINT_READ_FLAG_NONE); + if (size < 0) { + perror("Failed to discard response msg "); + return (int)size; + } else { + buf_rx.len = 0; + memset(buf_rx.buf, 0, FROM_CPC_BUF_SIZE); + } } return ret; @@ -138,6 +160,9 @@ int32_t cpc_tx(void *handle, uint32_t data_length, uint8_t *data) if (!has_reset) { size = cpc_write_endpoint(endpoint, &data[0], data_length, CPC_ENDPOINT_WRITE_FLAG_NONE); + if (size < 0) { + perror("Failed to cpc_write_endpoint "); + } } else { // In case of reset we don't care if send was succesfull or not size = data_length; @@ -149,6 +174,7 @@ int32_t cpc_tx(void *handle, uint32_t data_length, uint8_t *data) int32_t cpc_rx(void *handle, uint32_t data_length, uint8_t *data) { (void)handle; + (void)data_length; if (buf_rx.len > 0) { memcpy(data, buf_rx.buf, buf_rx.len); @@ -160,24 +186,48 @@ int32_t cpc_rx(void *handle, uint32_t data_length, uint8_t *data) int32_t cpc_rx_peek(void *handle) { (void)handle; + ssize_t size; if (!has_reset) { + // Return if the endpoint has not been reopened after the reset + if (ep_sock_fd <= 0) { + return 0; + } + // Make read blocking - possible because threaded structure in host_comm - buf_rx.len = (int32_t)cpc_read_endpoint(endpoint, &buf_rx.buf, - FROM_CPC_BUF_SIZE, CPC_ENDPOINT_READ_FLAG_NONE); + size = cpc_read_endpoint(endpoint, &buf_rx.buf, + FROM_CPC_BUF_SIZE, CPC_ENDPOINT_READ_FLAG_NONE); + + if (size < 0) { + // Swallow EBADF and ECONNRESET because the fd will be invalid while the device is starting up after the reset + if (size != -EBADF && size != -ECONNRESET) { + perror("Failed to cpc_read_endpoint "); + } + buf_rx.len = 0; + } else { + buf_rx.len = (int32_t)size; + } } else { // If in reset, don't try to read buf_rx.len = 0; } - if (buf_rx.len < 0) { - buf_rx.len = 0; - } + return buf_rx.len; } int32_t cpc_close(void *handle) { - return cpc_close_endpoint(&endpoint); + (void)handle; + int ret; + + ret = cpc_close_endpoint(&endpoint); + if (ret == 0) { + ep_sock_fd = -1; + } else { + perror("Failed to cpc_close_endpoint "); + } + + return ret; } // ----------------------------------------------------------------------------- @@ -197,39 +247,65 @@ static void reset_callback(void) int reset_cpc(void) { int ret; - uint8_t retry = 0; + uint8_t retry; + ssize_t size; app_log_debug("RESET" APP_LOG_NL); - // Restart cpp communication + // Close previously opened Bluetooth endpoint + if (ep_sock_fd > 0) { + ret = cpc_close_endpoint(&endpoint); + if (ret == 0) { + ep_sock_fd = -1; + } else { + perror("Failed to cpc_close_endpoint "); + return ret; + } + } + + // Restart connection to CPCd + retry = 0; do { ret = cpc_restart(&lib_handle); if (ret == 0) { - // speed up boot process if everything seems ok break; } nanosleep((const struct timespec[]){ { 0, CPC_RETRY_SLEEP_NS } }, NULL); retry++; - } while ((ret != 0) && (retry < RETRY_COUNT)); + } while (retry < RETRY_COUNT); if (ret < 0) { - perror("cpc restart "); + perror("Failed to cpc_restart "); return ret; } // Open Bluetooth endpoint - ret = cpc_open_endpoint(lib_handle, - &endpoint, - SL_CPC_ENDPOINT_BLUETOOTH, - CPC_TRANSMIT_WINDOW); + retry = 0; + do { + ret = cpc_open_endpoint(lib_handle, + &endpoint, + SL_CPC_ENDPOINT_BLUETOOTH, + CPC_TRANSMIT_WINDOW); + if (ret > 0) { + ep_sock_fd = ret; + break; + } + nanosleep((const struct timespec[]){ { 0, CPC_RETRY_SLEEP_NS } }, NULL); + retry++; + } while (retry < RETRY_COUNT); + if (ret < 0) { - perror(" open endpoint "); + perror("Failed to cpc_open_endpoint "); return ret; } // Send handshake msg, but don't discard the answer, as upper layers need it. - cpc_write_endpoint(endpoint, &handshake_msg[0], 4, CPC_ENDPOINT_WRITE_FLAG_NONE); - has_reset = false; + size = cpc_write_endpoint(endpoint, &handshake_msg[0], 4, CPC_ENDPOINT_WRITE_FLAG_NONE); + if (size < 0) { + perror("Failed to send handshake msg "); + return (int)size; + } + return ret; } @@ -238,19 +314,20 @@ int reset_cpc(void) *****************************************************************************/ void *supervisor(void *ptr) { - // unused variable (void)ptr; int ret; while (run) { if (has_reset) { + has_reset = false; ret = reset_cpc(); if (ret < 0) { - perror("reset "); - // better to die here than continue to work falsely + perror("Failed to reset_cpc "); + // Better to die here than continue to work falsely exit(EXIT_FAILURE); } } + nanosleep((const struct timespec[]){ { 0, CPC_RESET_SLEEP_NS } }, NULL); } return NULL; diff --git a/app/bluetooth/common_host/cpc/cpc.h b/app/bluetooth/common_host/cpc/cpc.h index fd7821a9eeb..adef13770a0 100644 --- a/app/bluetooth/common_host/cpc/cpc.h +++ b/app/bluetooth/common_host/cpc/cpc.h @@ -38,7 +38,7 @@ * @param[out] handle eventually it's a socket handle * @param[in] cpc_instance Instance name of CPCd * @param[in] reset_on_start Indicates if a reset should be performed on start - * @return 0 on success, -1 on failure. + * @return 0 on success, negative value on failure. *****************************************************************************/ int32_t cpc_open(void *handle, char *cpc_instance, bool reset_on_start); @@ -48,7 +48,7 @@ int32_t cpc_open(void *handle, char *cpc_instance, bool reset_on_start); * @param[in] handle Socket handle * @param[in] data_length The amount of bytes to write. * @param[in] data Buffer used for storing the data. - * @return The amount of bytes written or -1 on failure. + * @return The amount of bytes written or negative value on failure. *****************************************************************************/ int32_t cpc_tx(void *handle, uint32_t data_length, uint8_t *data); @@ -58,7 +58,7 @@ int32_t cpc_tx(void *handle, uint32_t data_length, uint8_t *data); * @param[in] handle Socket handle * @param[in] data_length The amount of bytes to read. * @param[out] data Buffer used for storing the data. - * @return The amount of bytes read or -1 on failure. + * @return The amount of bytes read or negative value on failure. *****************************************************************************/ int32_t cpc_rx(void *handle, uint32_t data_length, uint8_t *data); @@ -66,14 +66,14 @@ int32_t cpc_rx(void *handle, uint32_t data_length, uint8_t *data); * Return the number of bytes in the input buffer. This call will block until * there's data in the buffer. * @param[in] handle Socket handle - * @return The number of bytes in the input buffer or -1 on failure. + * @return The number of bytes in the input buffer or negative value on failure. *****************************************************************************/ int32_t cpc_rx_peek(void *handle); /**************************************************************************//** * Close the CPC connection. * @param[in] handle Socket handle - * @return 0 on success, -1 on failure. + * @return 0 on success, negative value on failure. *****************************************************************************/ int32_t cpc_close(void *handle); diff --git a/app/bluetooth/documentation/slBluetooth_docContent.xml b/app/bluetooth/documentation/slBluetooth_docContent.xml index e34584ee7c7..096971684d7 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,84 +184,92 @@ - + 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. + + + + + + + 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. - + 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 using the Simplicity Studio 5 IDE and tools for application development with Bluetooth SDK 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. @@ -269,7 +277,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. @@ -277,7 +285,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. @@ -285,7 +293,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. @@ -293,14 +301,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. @@ -308,7 +316,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. @@ -316,14 +324,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. @@ -331,7 +339,7 @@ - + Describes how and when to use Simplicity Commander's Command-Line Interface. @@ -339,7 +347,7 @@ - + Describes how to implement a dynamic multiprotocol solution. @@ -347,14 +355,14 @@ - + Covers the Bluetooth stack v3.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. @@ -362,7 +370,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. @@ -370,7 +378,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 eca0412b185..8e8014831f3 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=5.1.0.0 -prop.subLabel=Bluetooth\\ 5.1.0 +version=5.1.1.0 +prop.subLabel=Bluetooth\\ 5.1.1 # Default compatibility of the BLE SDK prop.boardCompatibility=.* diff --git a/app/bluetooth/example/bt_soc_blinky/app.c b/app/bluetooth/example/bt_soc_blinky/app.c index ed57e31edb9..92d22a6fa5f 100644 --- a/app/bluetooth/example/bt_soc_blinky/app.c +++ b/app/bluetooth/example/bt_soc_blinky/app.c @@ -166,7 +166,7 @@ void sl_bt_on_event(sl_bt_msg_t *evt) // database was changed by a remote GATT client. case sl_bt_evt_gatt_server_attribute_value_id: // The value of the gattdb_led_control characteristic was changed. - if (gattdb_led_control == evt->data.evt_gatt_server_characteristic_status.characteristic) { + if (gattdb_led_control == evt->data.evt_gatt_server_attribute_value.attribute) { uint8_t data_recv; size_t data_recv_len; diff --git a/app/bluetooth/example/bt_soc_cbap/bt_soc_cbap.slcp b/app/bluetooth/example/bt_soc_cbap/bt_soc_cbap.slcp index 8556222f376..105f547eb1b 100644 --- a/app/bluetooth/example/bt_soc_cbap/bt_soc_cbap.slcp +++ b/app/bluetooth/example/bt_soc_cbap/bt_soc_cbap.slcp @@ -88,7 +88,7 @@ requires: tag: - hardware:rf:band:2400 - hardware:device:flash:512 - - hardware:device:ram:32 + - hardware:device:ram:64 - hardware:component:led:1+ ui_hints: diff --git a/app/bluetooth/example/bt_soc_cbap/bt_soc_cbap_tz.slcw b/app/bluetooth/example/bt_soc_cbap/bt_soc_cbap_tz.slcw new file mode 100644 index 00000000000..08677fab8a7 --- /dev/null +++ b/app/bluetooth/example/bt_soc_cbap/bt_soc_cbap_tz.slcw @@ -0,0 +1,20 @@ +label: bt_soc_cbap_tz_workspace +description: > + Demonstrates Certificate Based Authentication and Pairing over BLE. + This example utilizes TrustZone for storing keys. +quality: experimental +project: + - path: ../bt_soc_tz_secure_application/bt_soc_tz_secure_application.slcp + id: bt_soc_tz_secure_application + output: bt_soc_tz_secure_application + - path: bt_soc_cbap_tz_ns.slcp + id: bt_soc_tz_nonsecure_application + output: bt_soc_cbap_tz_ns + - path: ../../../../platform/bootloader/sample-apps/workspaces/bootloader-apploader/bootloader-apploader-secure.slcp + id: bootloader-apploader-secure + output: bootloader-apploader-secure + - path: ../../../../platform/bootloader/sample-apps/workspaces/bootloader-apploader/bootloader-apploader-nonsecure.slcp + id: bootloader-apploader-nonsecure + output: bootloader-apploader-nonsecure +post_build: + profile: bt_tz_workspace diff --git a/app/bluetooth/example/bt_soc_cbap/bt_soc_cbap_tz_ns.slcp b/app/bluetooth/example/bt_soc_cbap/bt_soc_cbap_tz_ns.slcp index 4fde740eb45..f1542df802b 100644 --- a/app/bluetooth/example/bt_soc_cbap/bt_soc_cbap_tz_ns.slcp +++ b/app/bluetooth/example/bt_soc_cbap/bt_soc_cbap_tz_ns.slcp @@ -39,7 +39,8 @@ component: - led0 - id: simple_timer - id: cbap - - id: bt_post_build + - id: trustzone_nonsecure + - id: tz_secure_key_library source: - path: main.c @@ -66,6 +67,10 @@ other_file: - path: image/readme_img1.png - path: image/readme_img2.png +import: + # Import the config files from the TZ Secure application + - id: bt_soc_tz_secure_application + configuration: - name: SL_STACK_SIZE value: "6200" @@ -82,17 +87,41 @@ configuration: - name: APP_LOG_LEVEL_FILTER_THRESHOLD value: APP_LOG_LEVEL_INFO +template_contribution: + # Offset secure application if bootloader is used + - name: memory_flash_start + value: 0x2C000 + condition: [device_sdid_200] + - name: memory_flash_start + value: 0x2C000 + condition: [device_sdid_205] + - name: memory_flash_start + value: 0x802C000 + unless: [device_sdid_200, device_sdid_205] + + - name: memory_flash_size + value: 0x64000 # 400k + + - name: memory_ram_start + value: 0x20003000 + - name: memory_ram_size + value: 0x8000 # 32k + requires: - name: armv8m.main # Armv8-M Supports TrustZone +post_build: + profile: tz_nonsecure_application + conflicts: - name: device_security_vault # For secure devices use the other slcp variant tag: - hardware:rf:band:2400 - - hardware:device:flash:512 - - hardware:device:ram:32 + - hardware:device:flash:576 + - hardware:device:ram:64 - hardware:component:led:1+ + - companion:secure_app # Needs a companion app and cannot be built alone ui_hints: highlight: diff --git a/app/bluetooth/example/bt_soc_csr_generator/bt_soc_csr_generator.slcp b/app/bluetooth/example/bt_soc_csr_generator/bt_soc_csr_generator.slcp index 5a0eb86d30e..7e265b6eacb 100644 --- a/app/bluetooth/example/bt_soc_csr_generator/bt_soc_csr_generator.slcp +++ b/app/bluetooth/example/bt_soc_csr_generator/bt_soc_csr_generator.slcp @@ -104,7 +104,7 @@ requires: tag: - hardware:device:flash:512 - - hardware:device:ram:32 + - hardware:device:ram:64 ui_hints: highlight: diff --git a/app/bluetooth/example/bt_soc_csr_generator/bt_soc_csr_generator_tz.slcw b/app/bluetooth/example/bt_soc_csr_generator/bt_soc_csr_generator_tz.slcw new file mode 100644 index 00000000000..f9fbbbc7a93 --- /dev/null +++ b/app/bluetooth/example/bt_soc_csr_generator/bt_soc_csr_generator_tz.slcw @@ -0,0 +1,22 @@ +label: bt_soc_csr_generator_tz_workspace +description: > + Certificate generating firmware workspace. 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. + This example utilizes TrustZone for storing keys. +quality: experimental +project: + - path: ../bt_soc_tz_secure_application/bt_soc_tz_secure_application.slcp + id: bt_soc_tz_secure_application + output: bt_soc_tz_secure_application + - path: bt_soc_csr_generator_tz_ns.slcp + id: bt_soc_tz_nonsecure_application + output: bt_soc_csr_generator_tz_ns + - path: ../../../../platform/bootloader/sample-apps/workspaces/bootloader-apploader/bootloader-apploader-secure.slcp + id: bootloader-apploader-secure + output: bootloader-apploader-secure + - path: ../../../../platform/bootloader/sample-apps/workspaces/bootloader-apploader/bootloader-apploader-nonsecure.slcp + id: bootloader-apploader-nonsecure + output: bootloader-apploader-nonsecure +post_build: + profile: bt_tz_workspace diff --git a/app/bluetooth/example/bt_soc_csr_generator/bt_soc_csr_generator_tz_ns.slcp b/app/bluetooth/example/bt_soc_csr_generator/bt_soc_csr_generator_tz_ns.slcp index 83201954931..d77ed8f6701 100644 --- a/app/bluetooth/example/bt_soc_csr_generator/bt_soc_csr_generator_tz_ns.slcp +++ b/app/bluetooth/example/bt_soc_csr_generator/bt_soc_csr_generator_tz_ns.slcp @@ -33,6 +33,8 @@ component: - id: mpu - id: nvm3_lib - id: nvm3_default + - id: trustzone_nonsecure + - id: tz_secure_key_library - id: psa_crypto - id: psa_crypto_cmac - id: psa_crypto_ccm @@ -46,7 +48,6 @@ component: - id: psa_crypto_sha1 - id: sl_system - id: sleeptimer - - id: bt_post_build source: - path: app.c @@ -72,6 +73,10 @@ other_file: - path: image/readme_img1.png - path: image/readme_img2.png +import: + # Import the config files from the TZ Secure application + - id: bt_soc_tz_secure_application + configuration: - name: SL_STACK_SIZE value: "6200" @@ -98,16 +103,40 @@ configuration: condition: - psa_crypto +template_contribution: + # Offset flash after bootloader and secure app + - name: memory_flash_start + value: 0x2C000 + condition: [device_sdid_200] + - name: memory_flash_start + value: 0x2C000 + condition: [device_sdid_205] + - name: memory_flash_start + value: 0x802C000 + unless: [device_sdid_200, device_sdid_205] + + - name: memory_flash_size + value: 0x64000 # 400k + + - name: memory_ram_start + value: 0x20003000 + - name: memory_ram_size + value: 0x8000 # 32k + requires: - name: device_supports_bluetooth - name: armv8m.main # Armv8-M Supports TrustZone +post_build: + profile: tz_nonsecure_application + conflicts: - name: device_security_vault # For secure devices use the other slcp variant tag: - - hardware:device:flash:512 - - hardware:device:ram:32 + - hardware:device:flash:576 + - hardware:device:ram:64 + - companion:secure_app # Needs a companion app and cannot be built alone ui_hints: highlight: diff --git a/app/bluetooth/example/bt_soc_csr_generator/config/csr_generator_config.h b/app/bluetooth/example/bt_soc_csr_generator/config/csr_generator_config.h index 5a42d959ece..7543a592e68 100644 --- a/app/bluetooth/example/bt_soc_csr_generator/config/csr_generator_config.h +++ b/app/bluetooth/example/bt_soc_csr_generator/config/csr_generator_config.h @@ -53,9 +53,9 @@ #define CSR_GENERATOR_CONFIG_CERTIFICATE_ON_DEVICE 1 // Certificate Request RAM address -// Default: 0x20010000 +// Default: 0x2000FC00 // The RAM address where the Certificate Request is stored. -#define CSR_GENERATOR_CSR_RAM_ADDRESS 0x20010000 +#define CSR_GENERATOR_CSR_RAM_ADDRESS 0x2000FC00 // NVM3 key region to use // Default: 0x60000 diff --git a/app/bluetooth/example/bt_soc_tz_secure_application/bt_soc_tz_secure_application.slcp b/app/bluetooth/example/bt_soc_tz_secure_application/bt_soc_tz_secure_application.slcp new file mode 100644 index 00000000000..a0860c44946 --- /dev/null +++ b/app/bluetooth/example/bt_soc_tz_secure_application/bt_soc_tz_secure_application.slcp @@ -0,0 +1,81 @@ +project_name: bt_soc_tz_secure_application +package: Bluetooth +label: Sample project for TrustZone Secure Key Library +description: >- + This project can be used as a reference implementation + for creating secure applications with TrustZone for bluetooth products. + + This project makes a TrustZone secure library for running PSA libraries + in the secure world. +category: Bluetooth Examples +quality: experimental + +filter: + - name: "Wireless Technology" + value: ["Bluetooth"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +provides: + - name: bt_soc_tz_secure_application + +requires: + - name: tz_secure_key_library_s + - name: armv8m.main # Armv8-M Supports TrustZone + +conflicts: + - name: device_security_vault # Don't use TrustZone with secure devices + +define: + # PSA Crypto configuration: + - name: TFM_CRYPTO_CONC_OPER_NUM + value: 2 + +template_contribution: + - name: application_type + value: "APPLICATION_TYPE_MCU" + condition: + - bootloader_app_properties + + # Offset flash after bootloader + - name: memory_flash_start + value: 0x14000 + condition: [device_sdid_200] + - name: memory_flash_start + value: 0x14000 + condition: [device_sdid_205] + - name: memory_flash_start + value: 0x8014000 + unless: [device_sdid_200, device_sdid_205] + + - name: memory_flash_size + value: 0x18000 # 96k + + - name: memory_ram_start + value: 0x20000000 + - name: memory_ram_size + value: 0x3000 # 12k + +configuration: + - name: SL_STACK_SIZE + value: '3072' + - name: SL_HEAP_SIZE + value: '3072' + - name: BOOTLOADER_DISABLE_OLD_BOOTLOADER_MITIGATION + value: '1' + +tag: + - companion:nonsecure_app # Needs a companion app and cannot be built alone + +import: + # Import the config files from the TZ Non-Secure application + - id: bt_soc_tz_nonsecure_application + +export: + library: + - path: artifact/trustzone_secure_library.o + +post_build: + profile: tz_secure_application diff --git a/app/bluetooth/example_host/bt_host_cpc_hci_bridge/bridge.c b/app/bluetooth/example_host/bt_host_cpc_hci_bridge/bridge.c index 44a3dc5e1cb..cd6c9f9e05b 100644 --- a/app/bluetooth/example_host/bt_host_cpc_hci_bridge/bridge.c +++ b/app/bluetooth/example_host/bt_host_cpc_hci_bridge/bridge.c @@ -81,7 +81,7 @@ static int ep_sock_fd; // end the receiving loop if signal is received. static volatile bool run = true; // signal if the controller was reset -static volatile bool has_reset = false; +static volatile sig_atomic_t has_reset = false; static void reset_callback(void); static int cpc_poll_fds(void); @@ -101,34 +101,43 @@ static void signal_handler(int sig) uint32_t startup(void) { int ret; - uint8_t retry = 0; + uint8_t retry; // Initialize CPC communication + retry = 0; do { ret = cpc_init(&lib_handle, cpc_instance, false, reset_callback); if (ret == 0) { - // speed up boot process if everything seems ok break; } nanosleep((const struct timespec[]){ { 0, CPC_RETRY_SLEEP_NS } }, NULL); retry++; - } while ((ret != 0) && (retry < RETRY_COUNT)); + } while (retry < RETRY_COUNT); if (ret < 0) { - perror("cpc_init: "); - return ret; + perror("Failed to cpc_init "); + return (uint32_t)ret; } - // Start Bluetooth endpoint - ret = cpc_open_endpoint(lib_handle, - &endpoint, - SL_CPC_ENDPOINT_BLUETOOTH_RCP, - CPC_TRANSMIT_WINDOW); + // Open Bluetooth endpoint + retry = 0; + do { + ret = cpc_open_endpoint(lib_handle, + &endpoint, + SL_CPC_ENDPOINT_BLUETOOTH_RCP, + CPC_TRANSMIT_WINDOW); + if (ret > 0) { + ep_sock_fd = ret; + break; + } + nanosleep((const struct timespec[]){ { 0, CPC_RETRY_SLEEP_NS } }, NULL); + retry++; + } while (retry < RETRY_COUNT); + if (ret < 0) { - perror("cpc_open_endpoint "); - return ret; + perror("Failed to cpc_open_endpoint "); + return (uint32_t)ret; } - ep_sock_fd = ret; // Open virtual UART device ret = openpty(&pty_m, &pty_s, NULL, NULL, NULL); @@ -146,7 +155,8 @@ uint32_t startup(void) strerror(errno)); } } - return ret; + + return (uint32_t)ret; } /**************************************************************************//** @@ -163,40 +173,58 @@ static void reset_callback(void) int reset_cpc(void) { int ret; - uint8_t retry = 0; + uint8_t retry; if (DEBUG) { printf("\n\nRESET\n\n"); } - // Restart cpp communication + // Close previously opened Bluetooth endpoint + if (ep_sock_fd > 0) { + ret = cpc_close_endpoint(&endpoint); + if (ret == 0) { + ep_sock_fd = -1; + } else { + perror("Failed to cpc_close_endpoint "); + return ret; + } + } + + // Restart connection to CPCd + retry = 0; do { ret = cpc_restart(&lib_handle); if (ret == 0) { - // speed up boot process if everything seems ok break; } nanosleep((const struct timespec[]){ { 0, CPC_RETRY_SLEEP_NS } }, NULL); retry++; - } while ((ret != 0) && (retry < RETRY_COUNT)); - has_reset = false; + } while (retry < RETRY_COUNT); if (ret < 0) { - perror("cpc restart "); + perror("Failed to cpc_restart "); return ret; } // Open Bluetooth endpoint - ret = cpc_open_endpoint(lib_handle, - &endpoint, - SL_CPC_ENDPOINT_BLUETOOTH_RCP, - CPC_TRANSMIT_WINDOW); + retry = 0; + do { + ret = cpc_open_endpoint(lib_handle, + &endpoint, + SL_CPC_ENDPOINT_BLUETOOTH_RCP, + CPC_TRANSMIT_WINDOW); + if (ret > 0) { + ep_sock_fd = ret; + break; + } + nanosleep((const struct timespec[]){ { 0, CPC_RETRY_SLEEP_NS } }, NULL); + retry++; + } while (retry < RETRY_COUNT); if (ret < 0) { - perror(" open endpoint "); + perror("Failed to cpc_open_endpoint "); } - ep_sock_fd = ret; return ret; } @@ -226,9 +254,10 @@ int main(int argc, char *argv[]) // Reset cpc communication if daemon signals while (run) { if (has_reset) { + has_reset = false; ret = reset_cpc(); if (ret < 0) { - perror("reset "); + perror("Failed to reset_cpc "); exit(EXIT_FAILURE); } } else { @@ -301,6 +330,7 @@ int cpc_poll_fds(void) int ret; int max_fd; ssize_t size = 0; + ssize_t size2 = 0; uint8_t *hci_packet_buf; ssize_t hci_packet_len; struct timeval tv; @@ -332,8 +362,11 @@ int cpc_poll_fds(void) printf("data_to_cpc="); print_buffer(data_to_cpc, hci_packet_len); } - cpc_write_endpoint(endpoint, hci_packet_buf, hci_packet_len, 0); - + size2 = cpc_write_endpoint(endpoint, hci_packet_buf, hci_packet_len, 0); + if (size2 < 0) { + perror("Failed to cpc_write_endpoint"); + return FAILURE; + } size -= hci_packet_len; hci_packet_buf += hci_packet_len; } while (size >= hci_packet_len); diff --git a/platform/security/postbuild_profile/tz_secure_application.slpb b/app/bluetooth/postbuild_profile/bt_tz_non_secure_application.slpb similarity index 80% rename from platform/security/postbuild_profile/tz_secure_application.slpb rename to app/bluetooth/postbuild_profile/bt_tz_non_secure_application.slpb index 4fe0dd47584..9da83359cd2 100644 --- a/platform/security/postbuild_profile/tz_secure_application.slpb +++ b/app/bluetooth/postbuild_profile/bt_tz_non_secure_application.slpb @@ -4,4 +4,4 @@ steps: - task: copy input: "{{build_dir}}/{{project_name}}.s37" output: "artifact/{{project_name}}.s37" - export: trustzone_secure_binary + export: tz_nonsecure_binary diff --git a/app/bluetooth/postbuild_profile/bt_tz_secure_application.slpb b/app/bluetooth/postbuild_profile/bt_tz_secure_application.slpb new file mode 100644 index 00000000000..f40e6cdaad4 --- /dev/null +++ b/app/bluetooth/postbuild_profile/bt_tz_secure_application.slpb @@ -0,0 +1,7 @@ +parameters: + - name: build_dir +steps: + - task: copy + input: "{{build_dir}}/{{project_name}}.s37" + output: "artifact/{{project_name}}.s37" + export: tz_secure_binary diff --git a/app/bluetooth/postbuild_profile/bt_tz_workspace.slpb b/app/bluetooth/postbuild_profile/bt_tz_workspace.slpb new file mode 100644 index 00000000000..2f6994508c2 --- /dev/null +++ b/app/bluetooth/postbuild_profile/bt_tz_workspace.slpb @@ -0,0 +1,20 @@ +parameters: [] +constants: + - name: workspace_name + value: bt_soc_trustzone_workspace +steps: + - task: convert + input: + - "{{trustzone_secure_binary}}" + - "{{trustzone_nonsecure_binary}}" + output: artifact/{{workspace_name}}-app-only.s37 + - task: convert + input: + - "{{bootloader_secure_app}}" + - "{{bootloader_nonsecure_app}}" + - "{{trustzone_secure_binary}}" + - "{{trustzone_nonsecure_binary}}" + output: artifact/{{workspace_name}}-full.s37 + - task: create_gbl + app: "artifact/{{workspace_name}}-app-only.s37" + output: artifact/{{workspace_name}}-app-only.gbl diff --git a/app/bluetooth/script/certificate_authorities/production_line_tool.py b/app/bluetooth/script/certificate_authorities/production_line_tool.py index cd83db2557c..b3f287d4a17 100644 --- a/app/bluetooth/script/certificate_authorities/production_line_tool.py +++ b/app/bluetooth/script/certificate_authorities/production_line_tool.py @@ -89,7 +89,7 @@ def main(level, validity, serial, ip, protocol): if 'xg22' in family.lower(): ram_start = 0x20000000 # The CSR allocation is different for xG22 devices. else: - ram_start = 0x20010000 + ram_start = 0x2000FC00 # Paths if level == 0: diff --git a/app/btmesh/btmesh.properties b/app/btmesh/btmesh.properties new file mode 100644 index 00000000000..5ef5309966c --- /dev/null +++ b/app/btmesh/btmesh.properties @@ -0,0 +1,23 @@ +# This file provides metadata for the stack directory, as part of ESF. +id=com.silabs.stack.btMesh +label=Bluetooth Mesh SDK +description=Bluetooth Mesh Software Development Kit +version=4.2.0.0 +prop.subLabel=Bluetooth\\ Mesh\\ 4.2.0 + +# Default compatibility of the BT Mesh SDK (This is needed for the documentation only) +prop.boardCompatibility=.* +prop.partCompatibility=.*efr32bg2(1|2.*f512|4).* .*efr32mg2[1247].* .*efr32[mb]g1[23]p.* .*mgm(1[23]|2[124]).* .*bgm(13|21|22.*hna|24).* + +# General properties are prepended with "prop." +prop.file.templatesFile=btmesh_production_templates.xml btmesh_alpha_templates.xml btmesh_beta_templates.xml btmesh_test_templates.xml btmesh_internal_templates.xml btmesh_srtest_internal_templates.xml btmesh_long_packets_test_internal_templates.xml +prop.file.docsFile=documentation/slBtMesh_docContent.xml +prop.file.demosFile= btmesh_production_demos.xml btmesh_alpha_demos.xml btmesh_beta_demos.xml btmesh_test_demos.xml btmesh_internal_demos.xml +#prop.file.modulesFile=modules.xml +#prop.file.docsFile=docs.xml + +prop.file.bleSDK.bgbuildLocation=../../protocol/bluetooth/bin +prop.bgbuildToolchain=true +prop.file.adapterPacks=../../protocol/bluetooth/bin/gatt script/generator +prop.file.btconfGattItemSourcePath=gatt_xml +prop.btConfGattItemDatabases=mesh diff --git a/app/btmesh/btmesh_internal_demos.xml b/app/btmesh/btmesh_internal_demos.xml new file mode 100644 index 00000000000..5da246a06b5 --- /dev/null +++ b/app/btmesh/btmesh_internal_demos.xml @@ -0,0 +1,159 @@ + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + Proxy example for IOP test. This node forwards/relays messages between GATT and advertising bearers in the network. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + diff --git a/app/btmesh/btmesh_production_demos.xml b/app/btmesh/btmesh_production_demos.xml new file mode 100644 index 00000000000..3eb87cca982 --- /dev/null +++ b/app/btmesh/btmesh_production_demos.xml @@ -0,0 +1,2355 @@ + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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. + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + 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). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature, people count, and illuminance, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature, people count, and illuminance, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature, people count, and illuminance, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature, people count, and illuminance, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and people count, and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + A Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD. Button presses (only PB0 is functional) can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + A Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD. Button presses (only PB0 is functional) can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + A Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD. Button presses (only PB0 is functional) can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + A Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD. Button presses (only PB0 is functional) can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + A Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD. Button presses (only PB0 is functional) can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD.Push Button presses can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + A Software Demo where the device acts as a switch. It is optimized for low current consumption with disabled CLI, logging, and LCD. Button presses (only PB0 is functional) can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses (only PB0 is functional) or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses (only PB0 is functional) or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses (only PB0 is functional) or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses (only PB0 is functional) or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses (only PB0 is functional) or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + + An out-of-the-box Software Demo where the device acts as a switch. Push Button presses (only PB0 is functional) or CLI commands can control the state, lightness, and color temperature of the LEDs and scenes on a remote device. + + + + + + + + + + + diff --git a/app/btmesh/btmesh_production_templates.xml b/app/btmesh/btmesh_production_templates.xml new file mode 100644 index 00000000000..bfeef64cd80 --- /dev/null +++ b/app/btmesh/btmesh_production_templates.xml @@ -0,0 +1,708 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/btmesh/btmesh_upgrade_fail.lua b/app/btmesh/btmesh_upgrade_fail.lua deleted file mode 100644 index d16c3f413ae..00000000000 --- a/app/btmesh/btmesh_upgrade_fail.lua +++ /dev/null @@ -1,3 +0,0 @@ -if slc.is_selected("btmesh_stack") == true then - error("Because the BT Mesh SDK is not in this GSDK release, upgrading your project would remove the BT Mesh stack from it. Please cancel.") -end \ No newline at end of file diff --git a/app/btmesh/common/app_btmesh_util/app_btmesh_util.c b/app/btmesh/common/app_btmesh_util/app_btmesh_util.c new file mode 100644 index 00000000000..4edf44f5c12 --- /dev/null +++ b/app/btmesh/common/app_btmesh_util/app_btmesh_util.c @@ -0,0 +1,205 @@ +/***************************************************************************//** + * @file + * @brief App BT Mesh Utility + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include "nvm3.h" +#include "sl_status.h" +#include "app_btmesh_util.h" + +/// Handler for NVM3, use default +#define SL_BTMESH_NVM3 nvm3_defaultHandle +/// Start of the BT mesh NVM3 region keys +#define SL_BTMESH_NVM3_REGION 0 +/// The maximum LSBs of the BT mesh NVM3 region keys +#define SL_BTMESH_NVM3_END 0xFFFF + +/** + * Converts @ref Ecode_t to @ref sl_status_t + * + * @param ec Error code coming from NVM3 API calls + * @return The appropriate value the input is converted to. Some cases that + * would be hard to make sense of in higher layers are merged into + * @ref SL_STATUS_FAIL. + */ +static sl_status_t ecode2sc(Ecode_t ec); + +sl_status_t app_btmesh_nvm_init(void) +{ + return ecode2sc(nvm3_initDefault()); +} + +sl_status_t app_btmesh_nvm_read(uint16_t key, void *buf, size_t *len) +{ + uint32_t nvm3_objecttype; + // Store input buffer length temporarily + size_t tmp = *len; + // Read length of the data + Ecode_t nvm3_ec = nvm3_getObjectInfo(SL_BTMESH_NVM3, + SL_BTMESH_NVM3_REGION | (uint32_t)key, + &nvm3_objecttype, + len); + + // If would be too long, fail + if (*len > tmp) { + return SL_STATUS_WOULD_OVERFLOW; + } + + // If failure has occurred, return proper error code + if (ECODE_NVM3_OK != nvm3_ec) { + return ecode2sc(nvm3_ec); + } + + // Read the data into the buffer based on the read length + nvm3_ec = nvm3_readData(SL_BTMESH_NVM3, + SL_BTMESH_NVM3_REGION | (uint32_t)key, + buf, + *len); + + return ecode2sc(nvm3_ec); +} + +sl_status_t app_btmesh_nvm_write(uint16_t key, + const void *buf, + size_t len) +{ + Ecode_t nvm3_ec = nvm3_writeData(SL_BTMESH_NVM3, + SL_BTMESH_NVM3_REGION | (uint32_t)key, + buf, len); + + return ecode2sc(nvm3_ec); +} + +sl_status_t app_btmesh_nvm_erase(uint16_t key) +{ + Ecode_t nvm3_ec = nvm3_deleteObject(SL_BTMESH_NVM3, + SL_BTMESH_NVM3_REGION | key); + + return ecode2sc(nvm3_ec); +} + +sl_status_t app_btmesh_nvm_erase_all(void) +{ + Ecode_t nvm3_ec = nvm3_eraseAll(SL_BTMESH_NVM3); + + return ecode2sc(nvm3_ec); +} + +static sl_status_t ecode2sc(Ecode_t ec) +{ + switch (ec) { + case ECODE_NVM3_OK: + return SL_STATUS_OK; + case ECODE_NVM3_ERR_SIZE_TOO_SMALL: + case ECODE_NVM3_ERR_NO_VALID_PAGES: + case ECODE_NVM3_ERR_RESIZE_NOT_ENOUGH_SPACE: + return SL_STATUS_NO_MORE_RESOURCE; + case ECODE_NVM3_ERR_PAGE_SIZE_NOT_SUPPORTED: + case ECODE_NVM3_ERR_PARAMETER: + case ECODE_NVM3_ERR_WRITE_DATA_SIZE: + case ECODE_NVM3_ERR_OBJECT_SIZE_NOT_SUPPORTED: + case ECODE_NVM3_ERR_RESIZE_PARAMETER: + case ECODE_NVM3_ERR_ADDRESS_RANGE: + return SL_STATUS_INVALID_PARAMETER; + case ECODE_NVM3_ERR_STORAGE_FULL: + return SL_STATUS_FULL; + case ECODE_NVM3_ERR_NOT_OPENED: + return SL_STATUS_INVALID_STATE; + case ECODE_NVM3_ERR_OPENED_WITH_OTHER_PARAMETERS: + return SL_STATUS_ALREADY_INITIALIZED; + case ECODE_NVM3_ERR_KEY_INVALID: + case ECODE_NVM3_ERR_INT_KEY_MISMATCH: + return SL_STATUS_INVALID_KEY; + case ECODE_NVM3_ERR_KEY_NOT_FOUND: + return SL_STATUS_NOT_FOUND; + case ECODE_NVM3_ERR_ERASE_FAILED: + return SL_STATUS_FLASH_ERASE_FAILED; + case ECODE_NVM3_ERR_WRITE_FAILED: + return SL_STATUS_FLASH_PROGRAM_FAILED; + default: + return SL_STATUS_FAIL; + } +} + +const char *app_btmesh_uuid_64_to_string(char *buffer, + uint32_t buffer_size, + const sl_bt_uuid_64_t *uuid_64, + char separator, + bool uppercase) +{ + return app_btmesh_bytes_to_hex(buffer, + buffer_size, + uuid_64->data, + sizeof(uuid_64->data), + separator, + uppercase); +} + +const char *app_btmesh_bytes_to_hex(char *buffer, + uint32_t buffer_size, + const uint8_t *bytes, + uint32_t bytes_size, + char separator, + bool uppercase) +{ + const char hex_char_uppercase[] = { '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + const char hex_char_lowercase[] = { '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; + + const char *hex_char = uppercase ? hex_char_uppercase : hex_char_lowercase; + uint32_t total_size, total_separator_size; + const char *hex_str = "INVALID"; + + // If no input array is provided or the length of the input array is zero then + // an empty string is returned unless the output buffer is invalid (e.g. NULL) + bytes_size = (bytes != NULL) ? bytes_size : 0; + + // If the separator is set the null character then no separator is used so + // the multiplication by zero results in zero total separator size. + // There is a separator after each two hex characters except for the last two. + total_separator_size = ((0 < bytes_size) ? (bytes_size - 1) : 0) + * (separator != '\0'); + + // One character shall be reserved for the terminating null character + total_size = 2 * bytes_size + total_separator_size + 1; + + if ((buffer != NULL) && (total_size <= buffer_size)) { + uint32_t out_idx = 0; + for (uint32_t in_idx = 0; in_idx < bytes_size; in_idx++) { + buffer[out_idx++] = hex_char[(bytes[in_idx] >> 4) & 0xF]; + buffer[out_idx++] = hex_char[(bytes[in_idx] >> 0) & 0xF]; + if (separator != '\0' && (in_idx + 1) < bytes_size) { + buffer[out_idx++] = separator; + } + } + buffer[out_idx] = '\0'; + hex_str = buffer; + } + return hex_str; +} diff --git a/app/btmesh/common/app_btmesh_util/app_btmesh_util.h b/app/btmesh/common/app_btmesh_util/app_btmesh_util.h new file mode 100644 index 00000000000..907829fc33c --- /dev/null +++ b/app/btmesh/common/app_btmesh_util/app_btmesh_util.h @@ -0,0 +1,412 @@ +/***************************************************************************//** + * @file + * @brief App BT Mesh Utility + ******************************************************************************* + * # License + * Copyright 2021 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 APP_BTMESH_UTIL_H +#define APP_BTMESH_UTIL_H + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#include "app_btmesh_util_config.h" +#include "sl_status.h" +#include "sl_btmesh_api.h" + +/***************************************************************************//** + * @addtogroup App BT Mesh Utility + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @def app_btmesh_util_log_status_f + * @brief Logs the btmesh API failures + * + * There are two special errors which are related to missing model configuration. + * If the BT Mesh configurator (e.g. mobile app) does not bind application key + * to the model or does not configure the model publication data then publish + * or other API calls which leads to message sending fails. + * From the BT Mesh node perspective it can't be determined if the configurator + * missed these configuration steps on purpose or not so these errors are logged + * at a less severe log level. + ******************************************************************************/ +#if defined(SL_CATALOG_APP_LOG_PRESENT) +#define app_btmesh_util_log_status_f(sc, ...) \ + do { \ + switch (sc) { \ + case SL_STATUS_OK: \ + break; \ + case SL_STATUS_BT_MESH_APP_KEY_NOT_BOUND: \ + app_log_status_level_f(APP_BTMESH_UTIL_LOG_LEVEL_APP_KEY_NOT_BOUND, \ + sc, \ + __VA_ARGS__); \ + break; \ + case SL_STATUS_BT_MESH_PUBLISH_NOT_CONFIGURED: \ + app_log_status_level_f(APP_BTMESH_UTIL_LOG_LEVEL_PUBLISH_NOT_CONF, \ + sc, \ + __VA_ARGS__); \ + break; \ + default: \ + app_log_status_level_f(APP_LOG_LEVEL_ERROR, sc, __VA_ARGS__); \ + break; \ + } \ + } while (0) +#else +#define app_btmesh_util_log_status_f(sc, ...) (void)(sc) +#endif + +// This macro calculates the number of precompile logging enable request in the +// specific c file where the this header file is included from +#define APP_BTMESH_UTIL_COMPONENT_LOGGING \ + (SL_BTMESH_BLOB_STORAGE_LOGGING_CFG_VAL \ + + SL_BTMESH_BLOB_TRANSFER_CLIENT_LOGGING_CFG_VAL \ + + SL_BTMESH_BLOB_TRANSFER_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_CTL_CLIENT_LOGGING_CFG_VAL \ + + SL_BTMESH_CTL_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_FRIEND_LOGGING_CFG_VAL \ + + SL_BTMESH_FW_DIST_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_FW_UPDATE_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_GENERIC_ONOFF_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_HSL_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_IV_UPDATE_LOGGING_CFG_VAL \ + + SL_BTMESH_LC_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_LIGHTING_CLIENT_LOGGING_CFG_VAL \ + + SL_BTMESH_LIGHTING_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_LPN_LOGGING_CFG_VAL \ + + SL_BTMESH_PROVISIONEE_LOGGING_CFG_VAL \ + + SL_BTMESH_PROVISIONING_DECORATOR_LOGGING_CFG_VAL \ + + SL_BTMESH_REMOTE_PROVISIONING_CLIENT_LOGGING_CFG_VAL \ + + SL_BTMESH_REMOTE_PROVISIONING_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_SCENE_CLIENT_LOGGING_CFG_VAL \ + + SL_BTMESH_SCHEDULER_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_SELF_PROVISIONING_CLI_LOGGING_CFG_VAL \ + + SL_BTMESH_SENSOR_CLIENT_LOGGING_CFG_VAL \ + + SL_BTMESH_SENSOR_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_TIME_SERVER_LOGGING_CFG_VAL \ + + SL_BTMESH_VENDOR_LOOPBACK_LOGGING_CFG_VAL) +// Component A shall not include the config file of another component B because +// _LOGGING macro of component B could turn on the logging in the +// component A unnecessarily. This is important in case of components with log. +// Warning is emitted to notify the developer to resolve the include problem. +#if (1 < APP_BTMESH_UTIL_COMPONENT_LOGGING) +#warning "Multiple BT Mesh component logging macros are defined in one file." +#endif + +// Defines the local log macros for components based on the component configuration. +// The app_btmesh_util.h file shall be included after the component configuration +// header file include which defines the _LOGGING macro. +// Warning! The app_btmesh_util.h header file is context sensitive so it behaves +// differently in different c files based on the file specific value of +// the _LOGGING macros so this header shall not be included +// from other header files. +#if defined(SL_CATALOG_APP_LOG_PRESENT) && (APP_BTMESH_UTIL_COMPONENT_LOGGING != 0) +#define log_nl() app_log_nl() +#define log(...) app_log(__VA_ARGS__) +#define log_level(level, ...) app_log_level(level, __VA_ARGS__) +#define log_debug(...) app_log_debug(__VA_ARGS__) +#define log_info(...) app_log_info(__VA_ARGS__) +#define log_warning(...) app_log_warning(__VA_ARGS__) +#define log_error(...) app_log_error(__VA_ARGS__) +#define log_critical(...) app_log_critical(__VA_ARGS__) +#define log_append(...) app_log_append(__VA_ARGS__) +#define log_append_level(level, ...) app_log_append_level(level, __VA_ARGS__) +#define log_append_debug(...) app_log_append_debug(__VA_ARGS__) +#define log_append_info(...) app_log_append_info(__VA_ARGS__) +#define log_append_warning(...) app_log_append_warning(__VA_ARGS__) +#define log_append_error(...) app_log_append_error(__VA_ARGS__) +#define log_append_critical(...) app_log_append_critical(__VA_ARGS__) +#define log_status_debug(sc) app_log_status_debug(sc) +#define log_status_info(sc) app_log_status_info(sc) +#define log_status_warning(sc) app_log_status_warning(sc) +#define log_status_error(sc) app_log_status_error(sc) +#define log_status_critical(sc) app_log_status_critical(sc) +#define log_status_debug_f(sc, ...) app_log_status_debug_f(sc, __VA_ARGS__) +#define log_status_info_f(sc, ...) app_log_status_info_f(sc, __VA_ARGS__) +#define log_status_warning_f(sc, ...) app_log_status_warning_f(sc, __VA_ARGS__) +#define log_status_error_f(sc, ...) app_log_status_error_f(sc, __VA_ARGS__) +#define log_status_critical_f(sc, ...) app_log_status_critical_f(sc, __VA_ARGS__) +#define log_status(sc) app_log_status(sc) +#define log_status_level(level, sc) app_log_status_level(level, sc) +#define log_status_f(sc, ...) app_log_status_f(sc, __VA_ARGS__) +#define log_status_level_f(level, sc, ...) app_log_status_level_f(level, sc, __VA_ARGS__) +#define log_btmesh_status_f(sc, ...) app_btmesh_util_log_status_f(sc, __VA_ARGS__) +#define log_hexdump_debug(p_data, len) app_log_hexdump_debug(p_data, len) +#define log_hexdump_info(p_data, len) app_log_hexdump_info(p_data, len) +#define log_hexdump_warning(p_data, len) app_log_hexdump_warning(p_data, len) +#define log_hexdump_error(p_data, len) app_log_hexdump_error(p_data, len) +#define log_hexdump_critical(p_data, len) app_log_hexdump_critical(p_data, len) +#define log_hexdump_level(level, p_data, len) app_log_hexdump_level(level, p_data, len) +#define log_hexdump_debug_s(separator, p_data, len) app_log_hexdump_debug_s(separator, p_data, len) +#define log_hexdump_info_s(separator, p_data, len) app_log_hexdump_info_s(separator, p_data, len) +#define log_hexdump_warning_s(separator, p_data, len) app_log_hexdump_warning_s(separator, p_data, len) +#define log_hexdump_error_s(separator, p_data, len) app_log_hexdump_error_s(separator, p_data, len) +#define log_hexdump_critical_s(separator, p_data, len) app_log_hexdump_critical_s(separator, p_data, len) +#define log_hexdump_level_s(level, separator, p_data, len) app_log_hexdump_level_s(level, separator, p_data, len) +#else +#define log_nl() +#define log(...) +#define log_level(level, ...) +#define log_debug(...) +#define log_info(...) +#define log_warning(...) +#define log_error(...) +#define log_critical(...) +#define log_append(...) +#define log_append_level(level, ...) +#define log_append_debug(...) +#define log_append_info(...) +#define log_append_warning(...) +#define log_append_error(...) +#define log_append_critical(...) +#define log_status_debug(sc) (void)(sc) +#define log_status_info(sc) (void)(sc) +#define log_status_warning(sc) (void)(sc) +#define log_status_error(sc) (void)(sc) +#define log_status_critical(sc) (void)(sc) +#define log_status_debug_f(sc, ...) (void)(sc) +#define log_status_info_f(sc, ...) (void)(sc) +#define log_status_warning_f(sc, ...) (void)(sc) +#define log_status_error_f(sc, ...) (void)(sc) +#define log_status_critical_f(sc, ...) (void)(sc) +#define log_status(sc) (void)(sc) +#define log_status_level(level, sc) (void)(sc) +#define log_status_f(sc, ...) (void)(sc) +#define log_status_level_f(level, sc, ...) (void)(sc) +#define log_btmesh_status_f(sc, ...) (void)(sc) +#define log_hexdump_debug(p_data, len) +#define log_hexdump_info(p_data, len) +#define log_hexdump_warning(p_data, len) +#define log_hexdump_error(p_data, len) +#define log_hexdump_critical(p_data, len) +#define log_hexdump_level(level, p_data, len) +#define log_hexdump_debug_s(separator, p_data, len) +#define log_hexdump_info_s(separator, p_data, len) +#define log_hexdump_warning_s(separator, p_data, len) +#define log_hexdump_error_s(separator, p_data, len) +#define log_hexdump_critical_s(separator, p_data, len) +#define log_hexdump_level_s(level, separator, p_data, len) +#endif // defined(SL_CATALOG_APP_LOG_PRESENT) && (APP_BTMESH_UTIL_COMPONENT_LOGGING != 0) + +/// Maximum size of UUID64 string representation with separators (including null char) +#define APP_BTMESH_UUID_64_STR_MAX_SIZE 24 + +// Log new line shortcut definition +#define NL APP_LOG_NL + +/***************************************************************************//** + * Provides string representation of UUID64 in a compound literal + * + * It is guaranteed that this macro returns a valid string even in case of + * invalid parameters. + * + * @warning This macro calls @ref app_btmesh_uuid_64_to_string function with a + * compound literal which means the lifetime of returned string representation + * is the same as the enclosing block so the return value shall not be referenced + * outside of the most enclosing block where this macro is called from. + * For example the macro value shall not be returned from the caller function. + * + * This macro can be used in printf-like calls (e.g. log calls) directly because + * it returns a string under every circumstances and the lifetime of compound + * literal is not problematic if the value is passed as a parameter directly + * to another function. + * + * @param[in] uuid_64 Input UUID64 which shall be converted to string + * @param[in] separator Separator character to be used between two hex characters. + * If the separator is the null character then the no separator is used. + * @param[in] uppercase If true hex characters are upper case otherwise lower case + * + * @return String representation of UUID64 which has enclosing block lifetime + * @retval "INVALID" if an error occurs due to invalid parameters + ******************************************************************************/ +#define APP_BTMESH_UUID_64_TO_STRING(uuid_64, separator, uppercase) \ + app_btmesh_uuid_64_to_string((char[APP_BTMESH_UUID_64_STR_MAX_SIZE]){ 0 }, \ + sizeof((char[APP_BTMESH_UUID_64_STR_MAX_SIZE]){ 0 }), \ + uuid_64, \ + separator, \ + uppercase) + +/***************************************************************************//** + * Convert progress into percentage, based on target and current values + * + * @param _target Target value + * @param _progress Current value + * @retval Float percentage of the progress + ******************************************************************************/ +#define SL_PROG_TO_PCT(_target, _progress) \ + (((float)(_progress)) / ((float)(_target)) * 100.0f) + +/***************************************************************************//** + * Convert progress into percentage, based on target and current values + * + * @param _target Target value + * @param _progress Current value + * @retval Integer percentage of the progress + ******************************************************************************/ +#define SL_PROG_TO_PCT_INT(_target, _progress) \ + (((_progress) * 100) / (_target) ) + +/***************************************************************************//** + * Silicon Laboratories Company ID as integer + ******************************************************************************/ +#define SLI_SILABS_CID_INT 0x02FF + +/***************************************************************************//** + * Silicon Laboratories Company ID as little-endian string + ******************************************************************************/ +#define SLI_SILABS_CID_STR_LE "\xFF\x02" + +/***************************************************************************//** + * Silicon Laboratories Company ID as big-endian string + ******************************************************************************/ +#define SLI_SILABS_CID_STR_BE "\x02\xFF" + +/***************************************************************************//** + * Initializes the NVM interface. + * + * Calls the default initializer of NVM3. + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_ALREADY_INITIALIZED In case it was initialized earlier + * with parameters different from default + * + ******************************************************************************/ +sl_status_t app_btmesh_nvm_init(void); + +/***************************************************************************//** + * Reads data from NVM. + * + * @param[in] key Identifier of the data. + * @param[out] buf Buffer to the data to read. + * @param[inout] len Pointer to the length of the read data. As in input it + * takes the length of buffer. As an output it contains the + * length of the read data. + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_STATE In case NVM has not been initialized + * @retval SL_STATUS_INVALID_KEY In case key is invalid + * @retval SL_STATUS_NOT_FOUND In case key has not been found + * @retval SL_STATUS_INVALID_PARAMETER In case any of the input parameters is + * invalid + ******************************************************************************/ +sl_status_t app_btmesh_nvm_read(uint16_t key, void *buf, size_t *len); + +/***************************************************************************//** + * Writes data into the NVM. + * + * @param[in] key Identifier of the data. + * @param[in] buf Buffer to the data to write. + * @param[in] len Length of the data in the buffer. + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_STATE In case NVM has not been initialized + * @retval SL_STATUS_FULL In case NVM is full + * @retval SL_STATUS_NO_MORE_RESOURCE In case NVM doesn't have the resources + * to store the data + * @retval SL_STATUS_FLASH_PROGRAM_FAILED In case writing to NVM has failed + * @retval SL_STATUS_INVALID_PARAMETER In case any of the input parameters is + * invalid + ******************************************************************************/ +sl_status_t app_btmesh_nvm_write(uint16_t key, const void *buf, size_t len); + +/***************************************************************************//** + * Erases data from NVM. + * + * @param[in] key Identifier of the data. + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_STATE In case NVM has not been initialized + * @retval SL_STATUS_INVALID_KEY In case key is invalid + * @retval SL_STATUS_NOT_FOUND In case key has not been found + * @retval SL_STATUS_FLASH_PROGRAM_FAILED In case writing to NVM has failed + * @retval SL_STATUS_INVALID_PARAMETER In case any of the input parameters is + * invalid + ******************************************************************************/ +sl_status_t app_btmesh_nvm_erase(uint16_t key); + +/***************************************************************************//** + * Erases all NVM data. + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_STATE In case NVM has not been initialized + * @retval SL_STATUS_INVALID_PARAMETER In case any of the input parameters is + * invalid + ******************************************************************************/ +sl_status_t app_btmesh_nvm_erase_all(void); + +/***************************************************************************//** + * Provides string representation of UUID64 + * + * It is guaranteed that this function returns a valid string even in case of + * invalid parameters. + * + * @param[out] buffer Output buffer where the string representation is written + * @param[in] buffer_size Size of output buffer + * @param[in] uuid_64 Input UUID64 which shall be converted to string + * @param[in] separator Separator character to be used between two hex characters. + * If the separator is the null character then no separator is used. + * @param[in] uppercase If true hex characters are upper case otherwise lower case + * + * @return Output buffer which contains the string representation of UUID64 + * @retval "INVALID" if an error occurs due to invalid parameters + ******************************************************************************/ +const char *app_btmesh_uuid_64_to_string(char *buffer, + uint32_t buffer_size, + const sl_bt_uuid_64_t *uuid_64, + char separator, + bool uppercase); + +/***************************************************************************//** + * Provides hex representation of byte array as a string + * + * It is guaranteed that this function returns a valid string even in case of + * invalid parameters. + * + * @param[out] buffer Output buffer where the hex representation is written + * @param[in] buffer_size Size of output buffer + * @param[in] bytes Input byte array which shall be converted to hex + * @param[in] bytes_size Size of input byte array + * @param[in] separator Separator character to be used between two hex characters. + * If the separator is the null character then no separator is used. + * @param[in] uppercase If true hex characters are upper case otherwise lower case + * + * @return Output buffer which contains the hex representation of byte array + * @retval "INVALID" if an error occurs due to invalid parameters + ******************************************************************************/ +const char *app_btmesh_bytes_to_hex(char *buffer, + uint32_t buffer_size, + const uint8_t *bytes, + uint32_t bytes_size, + char separator, + bool uppercase); + +/** @} (end addtogroup App BT Mesh Utility) */ + +#endif /* APP_BTMESH_UTIL_H */ diff --git a/app/btmesh/common/app_btmesh_util/config/app_btmesh_util_config.h b/app/btmesh/common/app_btmesh_util/config/app_btmesh_util_config.h new file mode 100644 index 00000000000..610452c292b --- /dev/null +++ b/app/btmesh/common/app_btmesh_util/config/app_btmesh_util_config.h @@ -0,0 +1,59 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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 APP_BTMESH_UTIL_CONFIG_H +#define APP_BTMESH_UTIL_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// App BT Mesh Utility configuration + +// Log Level of not bound appkey BT Mesh error +// DEBUG +// INFO +// WARNING +// ERROR +// CRITICAL +// Default: DEBUG +#define APP_BTMESH_UTIL_LOG_LEVEL_APP_KEY_NOT_BOUND APP_LOG_LEVEL_DEBUG + +// Log Level of not configured publish BT Mesh error +// DEBUG +// INFO +// WARNING +// ERROR +// CRITICAL +// Default: DEBUG +#define APP_BTMESH_UTIL_LOG_LEVEL_PUBLISH_NOT_CONF APP_LOG_LEVEL_DEBUG + +// + +// <<< end of configuration section >>> + +#endif // APP_BTMESH_UTIL_CONFIG_H diff --git a/app/btmesh/common/btmesh_ae_client/btmesh_ae_client.dcd b/app/btmesh/common/btmesh_ae_client/btmesh_ae_client.dcd new file mode 100644 index 00000000000..21cd29d9d4f --- /dev/null +++ b/app/btmesh/common/btmesh_ae_client/btmesh_ae_client.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "vendor_models" : [ + {"cid": "0x02ff", "mid": "0xfffc", "name": "Silabs Configuration Client"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_ae_client/sl_btmesh_ae_client.c b/app/btmesh/common/btmesh_ae_client/sl_btmesh_ae_client.c new file mode 100644 index 00000000000..b73d6a044a8 --- /dev/null +++ b/app/btmesh/common/btmesh_ae_client/sl_btmesh_ae_client.c @@ -0,0 +1,62 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Advertisement Extension Client + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#include "app_assert.h" + +#include "sl_btmesh_ae_client.h" + +/***************************************************************************//** + * @addtogroup ae_client BT Mesh Advertisement Extension Client + * @{ + ******************************************************************************/ +void sl_btmesh_ae_client_on_event(const sl_btmesh_msg_t *const evt) +{ + sl_status_t sc; + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_provisioned_id: { + sc = sl_btmesh_silabs_config_client_init(); + app_assert_status_f(sc, "Failed to init AE client"); + break; + } + case sl_btmesh_evt_node_initialized_id: { + if (0 != evt->data.evt_node_initialized.provisioned) { + sc = sl_btmesh_silabs_config_client_init(); + app_assert_status_f(sc, "Failed to init AE client"); + } + break; + } + } +} + +/** @} end ae_client */ diff --git a/app/btmesh/common/btmesh_ae_client/sl_btmesh_ae_client.h b/app/btmesh/common/btmesh_ae_client/sl_btmesh_ae_client.h new file mode 100644 index 00000000000..3d2292a7116 --- /dev/null +++ b/app/btmesh/common/btmesh_ae_client/sl_btmesh_ae_client.h @@ -0,0 +1,60 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Advertisement Extension Client + ******************************************************************************* + * # 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_BTMESH_AE_CLIENT_H +#define SL_BTMESH_AE_CLIENT_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * @addtogroup ae_client BT Mesh Advertisement Extension Client + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Handle Advertisement Extension Client events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + * + ******************************************************************************/ +void sl_btmesh_ae_client_on_event(const sl_btmesh_msg_t *const evt); + +/** @} end ae_client */ + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif // SL_BTMESH_AE_CLIENT_H diff --git a/app/btmesh/common/btmesh_ae_server/btmesh_ae_server.dcd b/app/btmesh/common/btmesh_ae_server/btmesh_ae_server.dcd new file mode 100644 index 00000000000..8b00d7a7c02 --- /dev/null +++ b/app/btmesh/common/btmesh_ae_server/btmesh_ae_server.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "vendor_models" : [ + {"cid": "0x02ff", "mid": "0xfffd", "name": "Silabs Configuration Server"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_ae_server/sl_btmesh_ae_server.c b/app/btmesh/common/btmesh_ae_server/sl_btmesh_ae_server.c new file mode 100644 index 00000000000..67636362b8d --- /dev/null +++ b/app/btmesh/common/btmesh_ae_server/sl_btmesh_ae_server.c @@ -0,0 +1,62 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Advertisement Extension Server + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#include "app_assert.h" + +#include "sl_btmesh_ae_server.h" + +/***************************************************************************//** + * @addtogroup ae_server BT Mesh Advertisement Extension Server + * @{ + ******************************************************************************/ +void sl_btmesh_ae_server_on_event(const sl_btmesh_msg_t *const evt) +{ + sl_status_t sc; + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_provisioned_id: { + sc = sl_btmesh_silabs_config_server_init(); + app_assert_status_f(sc, "Failed to init AE server"); + break; + } + case sl_btmesh_evt_node_initialized_id: { + if (0 != evt->data.evt_node_initialized.provisioned) { + sc = sl_btmesh_silabs_config_server_init(); + app_assert_status_f(sc, "Failed to init AE server"); + } + break; + } + } +} + +/** @} end ae_server */ diff --git a/app/btmesh/common/btmesh_ae_server/sl_btmesh_ae_server.h b/app/btmesh/common/btmesh_ae_server/sl_btmesh_ae_server.h new file mode 100644 index 00000000000..ce0327da446 --- /dev/null +++ b/app/btmesh/common/btmesh_ae_server/sl_btmesh_ae_server.h @@ -0,0 +1,60 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Advertisement Extension Server + ******************************************************************************* + * # 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_BTMESH_AE_SERVER_H +#define SL_BTMESH_AE_SERVER_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * @addtogroup ae_server BT Mesh Advertisement Extension Server + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Handle Advertisement Extension Server events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + * + ******************************************************************************/ +void sl_btmesh_ae_server_on_event(const sl_btmesh_msg_t *const evt); + +/** @} end ae_server */ + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif // SL_BTMESH_AE_SERVER_H diff --git a/app/btmesh/common/btmesh_blob_storage/config/sl_btmesh_blob_storage_config.h b/app/btmesh/common/btmesh_blob_storage/config/sl_btmesh_blob_storage_config.h new file mode 100644 index 00000000000..af8cdaeb941 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_storage/config/sl_btmesh_blob_storage_config.h @@ -0,0 +1,29 @@ +#ifndef SL_BTMESH_BLOB_STORAGE_CONFIG_H +#define SL_BTMESH_BLOB_STORAGE_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Logging +#define SL_BTMESH_BLOB_STORAGE_LOGGING_CFG_VAL 0 + +// Alignment +// <1=> Byte (1) +// <2=> Word (2) +// <4=> Double Word (4) +// <8=> Quad Word (8) +#define SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL 8 + +// Data check interval <1-255> +// When checking whether a slot is empty, occupied, or corrupted, use this interval to jump ahead in memory. +// Higher value results in faster operation, but there's a probability of it yielding false results. +#define SL_BTMESH_BLOB_STORAGE_DATA_CHECK_JUMP_CFG_VAL 255 + +// Async delete separation time (ms) <0-1000> +// Separation time between two asynchronous delete steps in milliseconds. +// The BLOB storage async delete is performed in multiple steps and each delete step blocks the code execution. +// If delete steps are executed too often then it could starve other timing sensitive SW components. +#define SL_BTMESH_BLOB_STORAGE_ASYNC_DELETE_SEPARATION_TIME_MS_CFG_VAL 10 + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_BLOB_STORAGE_CONFIG_H diff --git a/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage.c b/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage.c new file mode 100644 index 00000000000..339258c111d --- /dev/null +++ b/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage.c @@ -0,0 +1,1203 @@ +/***************************************************************************//** + * @file + * @brief Implementation of BLOB storage component + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include +#include + +#include "sl_common.h" + +#include "sl_malloc.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT +#include "app_assert.h" + +#include "btl_interface.h" +#include "btl_interface_storage.h" +#include "sl_bgapi.h" +#include "sl_status.h" + +#include "sl_btmesh_blob_storage.h" +#include "sl_btmesh_blob_storage_app_id.h" +#include "sl_btmesh_blob_storage_config.h" +#include "sli_btmesh_blob_storage.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup blob_storage BLOB Storage + * @{ + ******************************************************************************/ + +/// Align the input value to the following word barrier +#define sli_blob_storage_align_to_next_word(_val) \ + (((_val) + SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL - 1) \ + & (~(SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL - 1))) +/// Align the input value to the previous word barrier +#define sli_blob_storage_align_to_prev_word(_val) \ + ((_val) & (~(SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL - 1))) +/// Calculates the number of bytes over alignment +#define sli_blob_storage_word_align_remainder(_val) \ + ((_val) % SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL) +/// Calculates the number of bytes remaining until the next aligned value +#define sli_blob_storage_word_align_pad_length(_val) \ + (SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL \ + - sli_blob_storage_word_align_remainder(_val)) + +#define sli_calc_max_blob_size(slot_size) \ + (sizeof(blob_storage_footer_t) < (slot_size)) \ + ? ((slot_size) - sizeof(blob_storage_footer_t)) : 0 + +/// Version of the storage implementation, stored in footer as validity flag +#define STORAGE_VERSION 2 +/// Value to be used as padding for application specific footers +#define APP_FOOTER_PADDING_PATTERN 0xAA +/// Buffer size for @ref blob_storage_compare +#define COMPARE_BUFFER_SIZE 64 +/// The biggest alignment supported +#define MAX_ALIGNMENT 8 + +/// Structure of the application specific footer metadata +PACKSTRUCT(typedef struct { + /// Application identifier to identify footer user + uint16_t app_id; + /// Length of the footer and this metadata + uint16_t length; +}) blob_storage_app_footer_metadata_t; + +/// Footer of a BLOB stored at the end of the slot +PACKSTRUCT(typedef struct { + /// Validity flag + uint8_t validity_flag[MAX_ALIGNMENT]; + /// Identifier of BLOB in storage slot + sl_bt_uuid_64_t blob_id; + /// Size of BLOB in storage slot + uint32_t blob_size; + /// Reserved + uint8_t rfu0; + /// Reserved + uint8_t rfu1; + /// Reserved + uint8_t rfu2; + /// Footer version + uint8_t version; +}) blob_storage_footer_t; + +static struct { + /// Index of the currently written slot (i.e. Slot ID) + uint32_t current_index; + /// Number of bytes written during the current write process + uint32_t written_bytes; + /// Flag indicating whether padding has already been done + /// + /// Padding is used to align written data to needed length. Can occur only once + /// during writing into one slot. + bool padding; + /// Length of the cache + uint32_t cache_length; + /// Pointer to the slot data cache + sl_btmesh_blob_storage_slot_metadata_cache_t *slot_cache; +} blob_storage = { .slot_cache = NULL }; ///< Storage API state representation + +/***************************************************************************//** + * Check the current status of a slot identified by Slot ID + * + * @param[in] slot_id The ID of the slot inquired about + * + * @return Status of the slot + * @retval EMPTY In case the slot doesn't have any data + * @retval CORRUPTED In case data is present but footer is invalid or data is + * not present, but footer is not empty. + * @retval OCCUPIED In case data is present and footer is valid. + * @retval INTERNAL_ERROR In case of error in underlying API + ******************************************************************************/ +static sl_btmesh_blob_storage_status_t blob_storage_check_slot_status(uint32_t slot_id); + +/***************************************************************************//** + * Read the footer into the buffer. + * + * @note The footer need not be valid for the function to return with a valid + * footer position. + * + * @param[out] footer Buffer for the footer + * @param[in] slot_id The ID of the slot holding the footer + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FAIL In case of internal error + * @retval SL_STATUS_INVALID_SIGNATURE In case version is invalid + ******************************************************************************/ +static sl_status_t blob_storage_get_footer(blob_storage_footer_t *footer, + uint32_t slot_id); + +/***************************************************************************//** + * Retrieve a pointer to the footer metadata contained in the slot identified + * and having the given application identifier. + * + * @param[in] slot_id The ID of a BLOB corresponding to the footer + * @param[in] app_id The ID of the application corresponding to the footer + * @param[out] metadata Buffer for the metadata + * @param[out] offset Offset of the metadata + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NOT_FOUND If app_id and slot_id doesn't identify any footer + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +static sl_status_t blob_storage_get_app_footer_metadata(uint32_t slot_id, + uint16_t app_id, + blob_storage_app_footer_metadata_t *metadata, + uint32_t *offset); + +/***************************************************************************//** + * Provide the supported maximum BLOB size in the slot + * + * @param[in] slot_id The ID of the slot inquired about + * + * @return Maximum supported BLOB size in the slot + ******************************************************************************/ +static uint32_t blob_storage_get_max_blob_size_in_slot(uint32_t slot_id); + +/***************************************************************************//** + * Compare specific part of a bootloader storage slot with a RAM buffer + * + * @param[in] slot_id Identifier of the storage slot to be compared + * @param[in] slot_offset Offset in the slot where the comparison shall be started + * @param[in] expected_data Expected data which shall be compared to storage slot data + * @param[in] length Number of compared bytes + * @param[out] comparison_result Comparison result shall be interpreted as memcmp + * + * @return Status of the comparison + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +static sl_status_t blob_storage_compare(uint32_t slot_id, + uint32_t slot_offset, + uint8_t const *expected_data, + uint32_t length, + int32_t *comparison_result); + +void sl_btmesh_blob_storage_init(void) +{ + BootloaderStorageInformation_t info; + // Initialize Bootloader + int32_t bootloader_status = bootloader_init(); + app_assert(bootloader_status == BOOTLOADER_OK, + "Bootloader initialization failed, error code %ld!", + bootloader_status); + // Read storage information from Bootloader + bootloader_getStorageInfo(&info); + + // Extract number of slots + blob_storage.cache_length = info.numStorageSlots; + + if (NULL == blob_storage.slot_cache) { + // Allocate memory to store cached data about slots + blob_storage.slot_cache = + sl_calloc(blob_storage.cache_length, + sizeof(sl_btmesh_blob_storage_slot_metadata_cache_t)); + } else { + // Free and reallocate + // Using free and calloc instead of realloc, because calloc clears memory + sl_free(blob_storage.slot_cache); + blob_storage.slot_cache = + sl_calloc(blob_storage.cache_length, + sizeof(sl_btmesh_blob_storage_slot_metadata_cache_t)); + } + + app_assert(blob_storage.slot_cache != NULL, "Allocation error!"); + + // Set write related status parameters to unknown, i.e. 0xFFFFFFFF + blob_storage.current_index = UINT32_MAX; + blob_storage.written_bytes = UINT32_MAX; + + // Sync + sli_btmesh_blob_storage_sync(); + + sli_btmesh_blob_storage_erase_init(); +} + +void sl_btmesh_blob_storage_deinit(void) +{ + // Free allocated memory + sl_free(blob_storage.slot_cache); + // Clear status variables + memset(&blob_storage, 0, sizeof(blob_storage)); +} + +sl_status_t sl_btmesh_blob_storage_write_start(sl_bt_uuid_64_t const *blob_id, + uint32_t size) +{ + if (sl_btmesh_blob_storage_get_erase_error_code() + == SL_BTMESH_BLOB_STORAGE_DELETE_BUSY) { + return SL_STATUS_BUSY; + } + + sl_status_t ret_val = SL_STATUS_NO_MORE_RESOURCE; + + // Check if BLOB with same ID exists + if (UINT32_MAX != sli_btmesh_blob_storage_get_slot_id(blob_id)) { + return SL_STATUS_ALREADY_EXISTS; + } + + BootloaderStorageSlot_t slot; + for (uint32_t i = 0; i < blob_storage.cache_length; ++i) { + if (SL_BTMESH_BLOB_STORAGE_STATUS_EMPTY + == blob_storage.slot_cache[i].status) { + bootloader_getStorageSlotInfo(i, &slot); + // Check if footer and data would fit + if (size > (slot.length - sizeof(blob_storage_footer_t))) { + ret_val = SL_STATUS_WOULD_OVERFLOW; + continue; + } + // Copy BLOB ID into cache + memcpy(&blob_storage.slot_cache[i].blob_id, + blob_id, + sizeof(sl_bt_uuid_64_t)); + // Store BLOB size + blob_storage.slot_cache[i].blob_size = size; + // Initialize write variables + blob_storage.written_bytes = 0; + blob_storage.current_index = i; + blob_storage.padding = false; + ret_val = SL_STATUS_OK; + log_debug("BLOB Storage write start; slot %lu, address 0x%08lX, " + "length 0x%08lX" NL, + blob_storage.current_index, + slot.address, + slot.length); + break; + } + } + if (ret_val != SL_STATUS_OK) { + log_warning("BLOB Storage write start, empty slot not available"NL); + } + + return ret_val; +} + +sl_status_t sl_btmesh_blob_storage_write(uint32_t offset, + uint32_t len, + void *data) +{ + log_debug("BLOB Storage write; offset 0x%08lX, " + "length %lu cache status %d" NL, + offset, + len, blob_storage.slot_cache[blob_storage.current_index].status); + // Write data into flash + if (BOOTLOADER_OK + != bootloader_writeStorage(blob_storage.current_index, + offset, + data, + // Truncate length to alignment (if needed) + sli_blob_storage_align_to_prev_word(len))) { + return SL_STATUS_FLASH_PROGRAM_FAILED; + } + // Check whether length had to be truncated + if (0 != sli_blob_storage_word_align_remainder(len)) { + uint8_t buffer[SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL]; + // Padding is only done once at the end of a BLOB. If already padded, + // inputs are wrong. + app_assert_s(!blob_storage.padding); + // Indicate padding + blob_storage.padding = true; + // Fill buffer with padding + memset(buffer, UINT8_MAX, SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL); + // Copy remainder data into buffer + memcpy(buffer, + &((uint8_t *)data)[sli_blob_storage_align_to_prev_word(len)], + sli_blob_storage_word_align_remainder(len)); + // Write (padded) data into flash + if (BOOTLOADER_OK + != bootloader_writeStorage(blob_storage.current_index, + offset + + sli_blob_storage_align_to_prev_word(len), + buffer, + SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL)) { + return SL_STATUS_FLASH_PROGRAM_FAILED; + } + } + blob_storage.written_bytes += len; + blob_storage.slot_cache[blob_storage.current_index].status = SL_BTMESH_BLOB_STORAGE_STATUS_CORRUPTED; + return SL_STATUS_OK; +} + +void sl_btmesh_blob_storage_get_cache(sl_btmesh_blob_storage_slot_metadata_cache_t const **cache, + uint32_t *len) +{ + *cache = blob_storage.slot_cache; + *len = blob_storage.cache_length; +} + +sl_status_t sl_btmesh_blob_storage_verify(void) +{ + if (UINT32_MAX == blob_storage.current_index) { + return SL_STATUS_INVALID_STATE; + } + // Check whether written length equals the received size of BLOB + if (blob_storage.written_bytes + != blob_storage.slot_cache[blob_storage.current_index].blob_size) { + return SL_STATUS_INVALID_STATE; + } + + blob_storage_footer_t footer; + memset(&footer, UINT8_MAX, sizeof(blob_storage_footer_t)); + + // Copy BLOB ID into footer + memcpy(&footer.blob_id, + &blob_storage.slot_cache[blob_storage.current_index].blob_id, + sizeof(sl_bt_uuid_64_t)); + + footer.blob_size = + blob_storage.slot_cache[blob_storage.current_index].blob_size; + footer.version = STORAGE_VERSION; + + BootloaderStorageSlot_t slot; + if (BOOTLOADER_OK + != bootloader_getStorageSlotInfo(blob_storage.current_index, &slot)) { + return SL_STATUS_FAIL; + } + + if (BOOTLOADER_OK != bootloader_writeStorage(blob_storage.current_index, + slot.length - sizeof(blob_storage_footer_t), + (uint8_t*)&footer, + sizeof(blob_storage_footer_t)) ) { + return SL_STATUS_FLASH_PROGRAM_FAILED; + } + // Resync + sli_btmesh_blob_storage_sync(); + log_debug("BLOB Storage write verified status: %d"NL, blob_storage.slot_cache[blob_storage.current_index].status); + // Clear status + blob_storage.current_index = UINT32_MAX; + blob_storage.written_bytes = UINT32_MAX; + return SL_STATUS_OK; +} + +bool sl_btmesh_blob_storage_is_present(sl_bt_uuid_64_t const *blob_id) +{ + return (UINT32_MAX != sli_btmesh_blob_storage_get_slot_id(blob_id)); +} + +sl_status_t sl_btmesh_blob_storage_get_blob_size(sl_bt_uuid_64_t const *blob_id, + uint32_t *blob_size) +{ + uint32_t slot_id = sli_btmesh_blob_storage_get_slot_id(blob_id); + if (UINT32_MAX == slot_id) { + return SL_STATUS_NOT_FOUND; + } + + *blob_size = blob_storage.slot_cache[slot_id].blob_size; + + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_blob_storage_read(sl_bt_uuid_64_t const *blob_id, + uint32_t offset, + uint32_t *len, + void *buffer) +{ + uint32_t slot_id = sli_btmesh_blob_storage_get_slot_id(blob_id); + int32_t r; // Bootloader result + + // If read operation would read over BLOB data, truncate length + if (blob_storage.slot_cache[slot_id].blob_size < offset + *len) { + *len = blob_storage.slot_cache[slot_id].blob_size - offset; + } + + r = bootloader_readStorage(slot_id, offset, buffer, *len); + + switch (r) { + case BOOTLOADER_OK: + return SL_STATUS_OK; + case BOOTLOADER_ERROR_STORAGE_INVALID_SLOT: + return SL_STATUS_NOT_FOUND; + default: + return SL_STATUS_FAIL; + } +} + +sl_status_t sl_btmesh_blob_storage_invalidate(sl_bt_uuid_64_t const *blob_id) +{ + uint32_t slot_id; + sl_status_t sc; + slot_id = sli_btmesh_blob_storage_get_slot_id(blob_id); + + if (UINT32_MAX == slot_id) { + return SL_STATUS_NOT_FOUND; + } + + sc = sli_blob_storage_invalidate_slot(slot_id, false); + + return sc; +} + +sl_status_t sl_btmesh_blob_storage_invalidate_by_owner(uint16_t owner_id) +{ + sl_btmesh_blob_storage_status_t slot_status; + sl_status_t sc_all = SL_STATUS_OK; + + for (uint32_t slot_id = 0; slot_id < blob_storage.cache_length; ++slot_id) { + slot_status = blob_storage.slot_cache[slot_id].status; + if (SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED == slot_status) { + sl_bt_uuid_64_t *blob_id = &blob_storage.slot_cache[slot_id].blob_id; + // Invalidate only those BLOBs which belongs to the specific owner + if (sl_btmesh_blob_storage_is_managed_by_owner(blob_id, owner_id)) { + sl_status_t sc = sli_blob_storage_invalidate_slot(slot_id, false); + // The first error code is returned but all storage slot invalidation + // is requested because other slot invalidation might succeed + if ((SL_STATUS_OK != sc) && (SL_STATUS_OK == sc_all)) { + sc_all = sc; + } + } + } + } + return sc_all; +} + +sl_status_t sl_btmesh_blob_storage_invalidate_all(void) +{ + sl_btmesh_blob_storage_status_t slot_status; + sl_status_t sc_all = SL_STATUS_OK; + + for (uint32_t slot_id = 0; slot_id < blob_storage.cache_length; ++slot_id) { + slot_status = blob_storage.slot_cache[slot_id].status; + if (SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED == slot_status) { + sl_status_t sc = sli_blob_storage_invalidate_slot(slot_id, false); + // The first error code is returned but all storage slot invalidation + // is requested because other slot invalidation might succeed + if ((SL_STATUS_OK != sc) && (SL_STATUS_OK == sc_all)) { + sc_all = sc; + } + } + } + return sc_all; +} + +uint32_t sl_btmesh_blob_storage_calc_app_footer_size(uint16_t footer_data_length) +{ + return sli_blob_storage_align_to_next_word((uint32_t) footer_data_length + + sizeof(blob_storage_app_footer_metadata_t)); +} + +sl_status_t sl_btmesh_blob_storage_write_app_footer(sl_bt_uuid_64_t const * blob_id, + void const * footer, + uint16_t app_id, + uint16_t length) +{ + uint32_t slot_id = sli_btmesh_blob_storage_get_slot_id(blob_id); + BootloaderStorageSlot_t slot; + uint32_t offset; + SL_ATTRIBUTE_ALIGN(SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL) blob_storage_app_footer_metadata_t metadata; + uint16_t write_length; + const uint16_t remainder_length = + sli_blob_storage_word_align_remainder(length); + const uint16_t aligned_length = sli_blob_storage_align_to_prev_word(length); + const uint16_t padded_length = sli_blob_storage_align_to_next_word(length); + + // Buffer to be used for padding the data, so no allocation is required + SL_ATTRIBUTE_ALIGN(SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL) uint8_t buffer[SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL]; + + if (length == UINT16_MAX) { + return SL_STATUS_INVALID_PARAMETER; + } + + if (BOOTLOADER_OK != bootloader_getStorageSlotInfo(slot_id, &slot)) { + return SL_STATUS_FAIL; + } + + // Get offset of first possible footer metadata + offset = slot.length + - sizeof(blob_storage_footer_t) + - sizeof(blob_storage_app_footer_metadata_t); + + bootloader_readStorage(slot_id, + offset, + (uint8_t*)&metadata, + sizeof(blob_storage_app_footer_metadata_t)); + + // Length is at the end of the footer. If flash is clear it'll be all ones. + while (metadata.length != UINT16_MAX) { + // Offset must be word aligned + offset -= sl_btmesh_blob_storage_calc_app_footer_size(metadata.length); + // Read out footer metadata + bootloader_readStorage(slot_id, + offset, + (uint8_t*)&metadata, + sizeof(blob_storage_app_footer_metadata_t)); + // Check if we happen to venture into the BLOB itself + if (offset < blob_storage.slot_cache[slot_id].blob_size) { + return SL_STATUS_WOULD_OVERFLOW; + } + } + + // Calculate full length of data to be written + write_length = sl_btmesh_blob_storage_calc_app_footer_size(length); + + // Calculate offset relative to the start of the empty footer metadata slot + offset -= write_length - sizeof(blob_storage_app_footer_metadata_t); + + // If write start offset is inside BLOB + if (offset < blob_storage.slot_cache[slot_id].blob_size) { + return SL_STATUS_WOULD_OVERFLOW; + } + + // Assemble footer metadata + metadata.app_id = app_id; + metadata.length = length; + + // If pointer is aligned, write it right away + if (((uintptr_t)footer) % SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL == 0) { + if (BOOTLOADER_OK + != bootloader_writeStorage(slot_id, offset, (uint8_t*)footer, aligned_length)) { + return SL_STATUS_FLASH_PROGRAM_FAILED; + } + } else { + // If pointer is unaligned, use intermediary buffer, which is aligned + for (uint32_t written = 0; written < aligned_length; written += + SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL) { + memcpy(buffer, + &((uint8_t*)footer)[written], + SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL); + + if (BOOTLOADER_OK + != bootloader_writeStorage(slot_id, offset + written, buffer, + SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL)) { + return SL_STATUS_FLASH_PROGRAM_FAILED; + } + } + } + + // Initialize padded buffer + memset(buffer, + APP_FOOTER_PADDING_PATTERN, + SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL); + + // Copy data into padded buffer + memcpy(buffer, + ((uint8_t *)footer) + aligned_length, + remainder_length); + + // If alignment is shorter than the metadata, just write the padded data + if ((SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL + < sizeof(blob_storage_app_footer_metadata_t)) + // If metadata wouldn't fit into the padded buffer, write padded data + || (remainder_length > SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL + - sizeof(blob_storage_app_footer_metadata_t))) { + if (BOOTLOADER_OK != bootloader_writeStorage(slot_id, + offset + aligned_length, + buffer, + SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL)) { + return SL_STATUS_FLASH_PROGRAM_FAILED; + } + + // Reinitialize padded buffer + memset(buffer, + APP_FOOTER_PADDING_PATTERN, + SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL); + } + + // If metadata wouldn't fit into the buffer, it's sure to be aligned, just write it + if (SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL + <= sizeof(blob_storage_app_footer_metadata_t)) { + if (BOOTLOADER_OK != bootloader_writeStorage(slot_id, + offset + padded_length, + (uint8_t *)&metadata, + sizeof(blob_storage_app_footer_metadata_t))) { + return SL_STATUS_FLASH_PROGRAM_FAILED; + } + } else { + memcpy(&buffer[SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL + - sizeof(blob_storage_app_footer_metadata_t)], + &metadata, + sizeof(blob_storage_app_footer_metadata_t)); + + if (BOOTLOADER_OK != bootloader_writeStorage(slot_id, + offset + (padded_length == write_length ? aligned_length : padded_length), + buffer, + SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL)) { + return SL_STATUS_FLASH_PROGRAM_FAILED; + } + } + + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_blob_storage_set_managed(sl_bt_uuid_64_t const *blob_id, uint16_t owner_id) +{ + return sl_btmesh_blob_storage_write_app_footer(blob_id, + &owner_id, + BLOB_STORAGE_APP_ID_MANAGED_FLAG, + sizeof(owner_id)); +} + +bool sl_btmesh_blob_storage_is_managed(sl_bt_uuid_64_t const *blob_id) +{ + uint16_t owner_id; + uint16_t length = sizeof(owner_id); + + sl_status_t sc = sl_btmesh_blob_storage_get_app_footer(blob_id, + BLOB_STORAGE_APP_ID_MANAGED_FLAG, + &owner_id, + &length); + (void) length; + if (SL_STATUS_OK == sc) { + return true; + } + return false; +} + +bool sli_btmesh_blob_storage_is_managed(uint32_t slot_id) +{ + uint16_t owner_id; + uint16_t length = sizeof(owner_id); + + sl_status_t sc = sli_btmesh_blob_storage_get_app_footer(slot_id, + BLOB_STORAGE_APP_ID_MANAGED_FLAG, + &owner_id, + &length); + (void) length; + if (SL_STATUS_OK == sc) { + return true; + } + return false; +} + +bool sl_btmesh_blob_storage_is_managed_by_owner(sl_bt_uuid_64_t const *blob_id, + uint16_t owner_id) +{ + uint16_t blob_owner_id; + uint16_t length = sizeof(blob_owner_id); + sl_status_t sc = sl_btmesh_blob_storage_get_app_footer(blob_id, + BLOB_STORAGE_APP_ID_MANAGED_FLAG, + &blob_owner_id, + &length); + + if ((SL_STATUS_OK == sc) && (length == sizeof(blob_owner_id))) { + return (blob_owner_id == owner_id); + } + return false; +} + +bool sli_btmesh_blob_storage_is_managed_by_owner(uint32_t slot_id, + uint16_t owner_id) +{ + uint16_t blob_owner_id; + uint16_t length = sizeof(blob_owner_id); + sl_status_t sc = sli_btmesh_blob_storage_get_app_footer(slot_id, + BLOB_STORAGE_APP_ID_MANAGED_FLAG, + &blob_owner_id, + &length); + + if ((SL_STATUS_OK == sc) && (length == sizeof(blob_owner_id))) { + return (blob_owner_id == owner_id); + } + return false; +} + +uint32_t sl_btmesh_blob_storage_get_managed_flag_size(void) +{ + return sl_btmesh_blob_storage_calc_app_footer_size(sizeof(uint16_t)); +} + +sl_status_t sl_btmesh_blob_storage_get_blob_id_by_owner(uint16_t owner_id, + uint32_t occurrence_idx, + sl_bt_uuid_64_t *blob_id) +{ + sl_status_t sc = SL_STATUS_NOT_FOUND; + uint32_t current_occurrence_idx = 0; + uint32_t cache_length = blob_storage.cache_length; + + for (uint32_t slot_id = 0; slot_id < cache_length; ++slot_id) { + sl_btmesh_blob_storage_status_t slot_status = + blob_storage.slot_cache[slot_id].status; + if (SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED == slot_status + && sli_btmesh_blob_storage_is_managed_by_owner(slot_id, owner_id)) { + if (occurrence_idx <= current_occurrence_idx) { + sc = SL_STATUS_OK; + memcpy(blob_id, + &blob_storage.slot_cache[slot_id].blob_id, + sizeof(sl_bt_uuid_64_t)); + break; + } else { + current_occurrence_idx++; + } + } + } + return sc; +} + +sl_status_t sl_btmesh_blob_storage_get_app_footer_length(sl_bt_uuid_64_t const *blob_id, + uint16_t app_id, + uint16_t *length) +{ + blob_storage_app_footer_metadata_t metadata; + uint32_t slot_id, offset; + sl_status_t sc; + + // Retrieve slot ID belonging to BLOB + slot_id = sli_btmesh_blob_storage_get_slot_id(blob_id); + sc = blob_storage_get_app_footer_metadata(slot_id, + app_id, + &metadata, + &offset); + if (sc == SL_STATUS_OK) { + *length = metadata.length; + } + return sc; +} + +sl_status_t sl_btmesh_blob_storage_get_app_footer(sl_bt_uuid_64_t const *blob_id, + uint16_t app_id, + void *buffer, + uint16_t *length) +{ + uint32_t slot_id; + // Retrieve slot ID belonging to BLOB + slot_id = sli_btmesh_blob_storage_get_slot_id(blob_id); + return sli_btmesh_blob_storage_get_app_footer(slot_id, app_id, buffer, length); +} + +sl_status_t sli_btmesh_blob_storage_get_app_footer(uint32_t slot_id, + uint16_t app_id, + void *buffer, + uint16_t *length) +{ + blob_storage_app_footer_metadata_t metadata; + uint32_t offset; + sl_status_t sc; + sc = blob_storage_get_app_footer_metadata(slot_id, + app_id, + &metadata, + &offset); + if (SL_STATUS_OK != sc) { + return sc; + } + // Buffer is too short for this footer + if (metadata.length > *length) { + return SL_STATUS_INVALID_PARAMETER; + } + *length = metadata.length; + if (BOOTLOADER_OK + != bootloader_readStorage(slot_id, offset, buffer, *length)) { + return SL_STATUS_FAIL; + } + + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_blob_storage_get_blob_id_by_footer(uint16_t app_id, + const void *expected_footer, + uint16_t length, + sl_bt_uuid_64_t *blob_id) +{ + sl_status_t sc; + blob_storage_app_footer_metadata_t metadata = { UINT16_MAX, UINT16_MAX }; + uint32_t offset; + + for (uint32_t slot_id = 0; slot_id < blob_storage.cache_length; ++slot_id) { + if (SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED + == blob_storage.slot_cache[slot_id].status) { + sc = blob_storage_get_app_footer_metadata(slot_id, + app_id, + &metadata, + &offset); + + // Nothing is found or the length of the footer is different then expected + // continue with the next slot + if ((SL_STATUS_NOT_FOUND == sc) || (metadata.length != length)) { + continue; + } else if (SL_STATUS_OK != sc) { + // Return with error code in case other error occurs + return sc; + } + + int32_t comparison_result; + sc = blob_storage_compare(slot_id, + offset, + expected_footer, + length, + &comparison_result); + if (SL_STATUS_OK != sc) { + // If comparison operation failed, return error code + return sc; + } + + if (0 == comparison_result) { + memcpy(blob_id, + &blob_storage.slot_cache[slot_id].blob_id, + sizeof(sl_bt_uuid_64_t)); + return SL_STATUS_OK; + } + } + } + return SL_STATUS_NOT_FOUND; +} + +uint32_t sl_btmesh_blob_storage_get_total_space(void) +{ + uint32_t total_space = 0; + + for (uint32_t i = 0; i < blob_storage.cache_length; ++i) { + total_space += blob_storage_get_max_blob_size_in_slot(i); + } + return total_space; +} + +uint32_t sl_btmesh_blob_storage_get_remaining_space(bool include_unmanaged_blobs) +{ + sl_btmesh_blob_storage_status_t slot_status; + uint32_t max_blob_size_in_slot; + uint32_t remaining_space = 0; + + for (uint32_t i = 0; i < blob_storage.cache_length; ++i) { + slot_status = blob_storage.slot_cache[i].status; + bool is_slot_available = false; + + if ((SL_BTMESH_BLOB_STORAGE_STATUS_EMPTY == slot_status) + || (SL_BTMESH_BLOB_STORAGE_STATUS_CORRUPTED == slot_status)) { + // If the slot is empty or corrupted then it can be used to store BLOBs + // without any restrictions + is_slot_available = true; + } else if (SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED == slot_status) { + // The unmanaged BLOBs can be deleted on demand when space is required + // for new BLOBs which makes it necessary to include it in the remaining + // space calculation in some cases (application dependent) + is_slot_available = include_unmanaged_blobs + && !sli_btmesh_blob_storage_is_managed(i); + } + + if (is_slot_available) { + max_blob_size_in_slot = blob_storage_get_max_blob_size_in_slot(i); + remaining_space += max_blob_size_in_slot; + } + } + return remaining_space; +} + +uint32_t sl_btmesh_blob_storage_get_max_blob_size(void) +{ + uint32_t max_blob_size = 0; + uint32_t max_blob_size_in_slot; + + for (uint32_t i = 0; i < blob_storage.cache_length; ++i) { + max_blob_size_in_slot = blob_storage_get_max_blob_size_in_slot(i); + if (max_blob_size < max_blob_size_in_slot) { + max_blob_size = max_blob_size_in_slot; + } + } + return max_blob_size; +} + +uint32_t sl_btmesh_blob_storage_get_max_blob_size_free(bool include_unmanaged_blobs) +{ + sl_btmesh_blob_storage_status_t slot_status; + uint32_t max_blob_size_in_slot; + uint32_t max_blob_size_free = 0; + + for (uint32_t i = 0; i < blob_storage.cache_length; ++i) { + slot_status = blob_storage.slot_cache[i].status; + bool is_slot_available = false; + + if ((SL_BTMESH_BLOB_STORAGE_STATUS_EMPTY == slot_status) + || (SL_BTMESH_BLOB_STORAGE_STATUS_CORRUPTED == slot_status)) { + // If the slot is empty or corrupted then it can be used to store BLOBs + // without any restrictions + is_slot_available = true; + } else if (SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED == slot_status) { + // The unmanaged BLOBs can be deleted on demand when space is required + // for new BLOBs which makes it necessary to include it in the maximum + // free BLOB size calculation in some cases (application dependent) + is_slot_available = include_unmanaged_blobs + && !sli_btmesh_blob_storage_is_managed(i); + } + + if (is_slot_available) { + max_blob_size_in_slot = blob_storage_get_max_blob_size_in_slot(i); + if (max_blob_size_free < max_blob_size_in_slot) { + max_blob_size_free = max_blob_size_in_slot; + } + } + } + return max_blob_size_free; +} + +uint32_t sl_btmesh_blob_storage_get_max_blob_count(void) +{ + return blob_storage.cache_length; +} + +sl_btmesh_blob_storage_status_t sli_btmesh_blob_storage_get_slot_status(uint32_t slot_id) +{ + return blob_storage.slot_cache[slot_id].status; +} + +void sli_btmesh_blob_storage_sync(void) +{ + for (uint32_t i = 0; i < blob_storage.cache_length; ++i) { + blob_storage.slot_cache[i].status = blob_storage_check_slot_status(i); + if (SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED + == blob_storage.slot_cache[i].status) { + blob_storage_footer_t footer; + sl_status_t sc = blob_storage_get_footer(&footer, i); + if (SL_STATUS_OK == sc) { + memcpy(&blob_storage.slot_cache[i].blob_id, + &footer.blob_id, + sizeof(sl_bt_uuid_64_t)); + blob_storage.slot_cache[i].blob_size = footer.blob_size; + } else { + // This should not happen because this code is executed only if the same + // blob_storage_get_footer call was successful in blob_storage_check_slot_status + // function but to be on the safe side it is handled here. + blob_storage.slot_cache[i].status = + SL_BTMESH_BLOB_STORAGE_STATUS_INTERNAL_ERROR; + } + } + } +} + +static sl_status_t blob_storage_get_footer(blob_storage_footer_t *footer, + uint32_t slot_id) +{ + BootloaderStorageSlot_t slot; + if (BOOTLOADER_OK != bootloader_getStorageSlotInfo(slot_id, &slot)) { + return SL_STATUS_FAIL; + } + + // Read footer from the end of slot + if (BOOTLOADER_OK + != bootloader_readStorage(slot_id, + slot.length - sizeof(blob_storage_footer_t), + (uint8_t*)footer, + sizeof(blob_storage_footer_t))) { + return SL_STATUS_FAIL; + } + + if (footer->version != STORAGE_VERSION) { + return SL_STATUS_INVALID_SIGNATURE; + } + + return SL_STATUS_OK; +} + +static sl_btmesh_blob_storage_status_t blob_storage_check_slot_status(uint32_t slot_id) +{ + BootloaderStorageSlot_t slot; + sl_btmesh_blob_storage_status_t ret_val = SL_BTMESH_BLOB_STORAGE_STATUS_EMPTY; + blob_storage_footer_t footer; + + if (BOOTLOADER_OK != bootloader_getStorageSlotInfo(slot_id, &slot)) { + return SL_BTMESH_BLOB_STORAGE_STATUS_INTERNAL_ERROR; + } + + // Read footer associated with slot + if (SL_STATUS_FAIL == blob_storage_get_footer(&footer, slot_id)) { + return SL_BTMESH_BLOB_STORAGE_STATUS_INTERNAL_ERROR; + } + + // Check validity flag. It's enough to check the first byte, since it's + // written as a whole. + if (footer.validity_flag[0] != UINT8_MAX) { + return SL_BTMESH_BLOB_STORAGE_STATUS_CORRUPTED; + } + + // Check if non-footer data is empty. + // Since checking every byte would take long, use a heuristic approach of + // checking only certain bytes. + for (uint32_t i = 0; i < (slot.length - sizeof(blob_storage_footer_t)); + i += SL_BTMESH_BLOB_STORAGE_DATA_CHECK_JUMP_CFG_VAL) { + uint8_t check; + if (BOOTLOADER_OK != bootloader_readStorage(slot_id, i, &check, 1)) { + return SL_BTMESH_BLOB_STORAGE_STATUS_INTERNAL_ERROR; + } + if (UINT8_MAX != check) { + ret_val = SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED; + break; + } + } + + // If data is found, check validity by reading the version + if (SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED == ret_val) { + if (STORAGE_VERSION != footer.version) { + ret_val = SL_BTMESH_BLOB_STORAGE_STATUS_CORRUPTED; + } + } else { + // Check if footer is empty + for (uint32_t i = 0; i < sizeof(blob_storage_footer_t); ++i) { + uint8_t check = *(((uint8_t*)&footer) + i); + if (UINT8_MAX != check) { + ret_val = SL_BTMESH_BLOB_STORAGE_STATUS_CORRUPTED; + break; + } + } + } + + return ret_val; +} + +uint32_t sli_btmesh_blob_storage_get_slot_id(sl_bt_uuid_64_t const *blob_id) +{ + for (uint32_t i = 0; i < blob_storage.cache_length; ++i) { + // Don't bother with invalid or empty slots + if (blob_storage.slot_cache[i].status + != SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED) { + continue; + } + // Compare BLOB ID + if (0 == memcmp(blob_id, + &blob_storage.slot_cache[i].blob_id, + sizeof(sl_bt_uuid_64_t))) { + // Return slot ID + return i; + } + } + return UINT32_MAX; +} + +sl_status_t sli_blob_storage_invalidate_slot(uint32_t slot_id, bool force) +{ + if ((force == false) + && (sl_btmesh_blob_storage_get_erase_error_code() + == SL_BTMESH_BLOB_STORAGE_DELETE_BUSY)) { + return SL_STATUS_BUSY; + } + + BootloaderStorageSlot_t slot; + uint8_t invalid_flag[MAX_ALIGNMENT]; + + // Clear all fields which results in invalid footer + memset(invalid_flag, 0, MAX_ALIGNMENT); + if (BOOTLOADER_OK != bootloader_getStorageSlotInfo(slot_id, &slot)) { + return SL_STATUS_FAIL; + } + // Write invalidity flag at the start of the footer + if (BOOTLOADER_OK + != bootloader_writeStorage(slot_id, + slot.length - sizeof(blob_storage_footer_t), + invalid_flag, + MAX_ALIGNMENT)) { + return SL_STATUS_FLASH_PROGRAM_FAILED; + } + blob_storage.slot_cache[slot_id].status = SL_BTMESH_BLOB_STORAGE_STATUS_CORRUPTED; + return SL_STATUS_OK; +} + +static sl_status_t blob_storage_get_app_footer_metadata(uint32_t slot_id, + uint16_t app_id, + blob_storage_app_footer_metadata_t *metadata, + uint32_t *offset) +{ + BootloaderStorageSlot_t slot; + if (BOOTLOADER_OK != bootloader_getStorageSlotInfo(slot_id, &slot)) { + return SL_STATUS_FAIL; + } + // Set offset to the first possible position for footer metadata + *offset = slot.length + - sizeof(blob_storage_footer_t) + - sizeof(blob_storage_app_footer_metadata_t); + + do { + if (BOOTLOADER_OK != bootloader_readStorage(slot_id, + *offset, + (uint8_t*)metadata, + sizeof(blob_storage_app_footer_metadata_t))) { + return SL_STATUS_FAIL; + } + if (app_id == metadata->app_id) { + // Point to footer start + *offset -= sl_btmesh_blob_storage_calc_app_footer_size(metadata->length) + - sizeof(blob_storage_app_footer_metadata_t); + + return SL_STATUS_OK; + } + // Try to find next metadata + *offset -= sl_btmesh_blob_storage_calc_app_footer_size(metadata->length); + } while (metadata->length != UINT16_MAX); // Length of 0xFFFF signifies invalid field + return SL_STATUS_NOT_FOUND; +} + +static uint32_t blob_storage_get_max_blob_size_in_slot(uint32_t slot_id) +{ + BootloaderStorageSlot_t slot; + + // If it is not possible to query the storage slot then no blob can be stored + // in it therefore 0 is returned as the supported max blob size in the slot. + if (BOOTLOADER_OK != bootloader_getStorageSlotInfo(slot_id, &slot)) { + return 0; + } + + return sli_calc_max_blob_size(slot.length); +} + +static sl_status_t blob_storage_compare(uint32_t slot_id, + uint32_t slot_offset, + uint8_t const * expected_data, + uint32_t length, + int32_t *comparison_result) +{ + uint8_t compare_chunk_buf[COMPARE_BUFFER_SIZE]; + uint32_t remaining_length = length; + uint32_t chunk_offset = 0; + int chunk_compare_result; + + while (0 < remaining_length) { + uint32_t chunk_size = (remaining_length < COMPARE_BUFFER_SIZE) + ? remaining_length : COMPARE_BUFFER_SIZE; + + if (BOOTLOADER_OK != bootloader_readStorage(slot_id, + slot_offset + chunk_offset, + &compare_chunk_buf[0], + chunk_size)) { + return SL_STATUS_FAIL; + } + + chunk_compare_result = memcmp(&compare_chunk_buf[0], + &expected_data[chunk_offset], + chunk_size); + + if (0 != chunk_compare_result) { + *comparison_result = chunk_compare_result; + return SL_STATUS_OK; + } + + remaining_length -= chunk_size; + chunk_offset += chunk_size; + } + + *comparison_result = 0; + return SL_STATUS_OK; +} + +/** @} end blob_storage */ diff --git a/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage.h b/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage.h new file mode 100644 index 00000000000..e9cb6f69741 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage.h @@ -0,0 +1,629 @@ +/***************************************************************************//** + * @file + * @brief Interface header for BLOB storage component intended for general use + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_BLOB_STORAGE_H +#define SL_BTMESH_BLOB_STORAGE_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * @addtogroup blob_storage BLOB Storage + * @{ + ******************************************************************************/ + +typedef enum sl_btmesh_blob_storage_status_e { + /// Slot is empty + SL_BTMESH_BLOB_STORAGE_STATUS_EMPTY, + /// Slot data is corrupted + /// + /// \li Data present, but no footer + /// \li Footer present, but no data + /// \li Footer invalid + SL_BTMESH_BLOB_STORAGE_STATUS_CORRUPTED, + /// Slot has data and is valid + SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED, + /// Internal API error + SL_BTMESH_BLOB_STORAGE_STATUS_INTERNAL_ERROR +} sl_btmesh_blob_storage_status_t; + +typedef enum sl_btmesh_blob_storage_delete_state_e { + /// Asynchronous delete inactive + SL_BTMESH_BLOB_STORAGE_DELETE_INACTIVE, + /// Asynchronous delete active and busy + SL_BTMESH_BLOB_STORAGE_DELETE_BUSY, + /// Asynchronous delete has failed + SL_BTMESH_BLOB_STORAGE_DELETE_FAILED, + /// Asynchronous delete has succeeded + SL_BTMESH_BLOB_STORAGE_DELETE_SUCCESS +} sl_btmesh_blob_storage_delete_state_t; + +/// Cached data about a certain slot +typedef struct { + /// BLOB ID contained in the slot + sl_bt_uuid_64_t blob_id; + /// Size of the BLOB residing in the slot + uint32_t blob_size; + /// Status of the slot (empty or otherwise) + sl_btmesh_blob_storage_status_t status; +} sl_btmesh_blob_storage_slot_metadata_cache_t; + +/***************************************************************************//** + * Initializes the storage wrapper + ******************************************************************************/ +void sl_btmesh_blob_storage_init(void); + +/***************************************************************************//** + * Deinitializes the storage wrapper + ******************************************************************************/ +void sl_btmesh_blob_storage_deinit(void); + +/***************************************************************************//** + * Reads data from the identified BLOB into a buffer + * + * @param[in] blob_id Identifier of the BLOB + * @param[in] offset Offset relative to BLOB start, where read should start + * @param[inout] len Length of the buffer; modified if there's less data then + * buffer could fit + * @param[out] buffer Buffer in which data is read + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NOT_FOUND In case BLOB has not been find + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_read(sl_bt_uuid_64_t const *blob_id, + uint32_t offset, + uint32_t *len, + void *buffer); + +/***************************************************************************//** + * Starts writing procedure + * + * Sets internal state variables to correspond to writing a BLOB. + * @param[in] blob_id Identifier of the BLOB about to be written into storage + * @param[in] size Size of the BLOB about to be written into storage + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_ALREADY_EXISTS In case BLOB ID already exists in storage + * @retval SL_STATUS_WOULD_OVERFLOW In case BLOB is too big to fit + * @retval SL_STATUS_NO_MORE_RESOURCE In case no slot is available + * @retval SL_STATUS_BUSY In case BLOB Storage is processing an async. request + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_write_start(sl_bt_uuid_64_t const *blob_id, + uint32_t size); + +/***************************************************************************//** + * Writes data into storage. + * + * @pre @ref sl_btmesh_blob_storage_write_start must be called first. + * @param[in] offset Offset of the data inside the BLOB. Must be + * @ref SL_BTMESH_BLOB_STORAGE_ALIGNMENT_CFG_VAL aligned. + * @param[in] len Length of the data + * @param[in] data Pointer to the data + * + * @return Result of write operation + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FLASH_WRITE_INHIBITED In case of non-word aligned offset + * @retval SL_STATUS_FLASH_PROGRAM_FAILED In case storage programming failed + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_write(uint32_t offset, + uint32_t len, + void *data); + +/***************************************************************************//** + * Retrieves a pointer to the cache + * + * @param cache[out] Pointer to the buffer of a pointer for cache start + * @param len[out] Pointer to the length cache + ******************************************************************************/ +void sl_btmesh_blob_storage_get_cache(sl_btmesh_blob_storage_slot_metadata_cache_t const **cache, + uint32_t *len); + +/***************************************************************************//** + * Verifies the BLOB to be considered consistent + * + * @return Verification result + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_STATE In case less data has been written than + * indicated with + * @ref sl_btmesh_blob_storage_write_start or + * writing has not been started properly + * @retval SL_STATUS_FAIL In case of internal API error + * @retval SL_STATUS_FLASH_PROGRAM_FAILED In case writing validity info into + * storage has failed + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_verify(void); + +/***************************************************************************//** + * Invalidates BLOB footer + * + * @param[in] blob_id Identifier of the BLOB to invalidate + * + * @return Result code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NOT_FOUND In case BLOB identifier is not found + * @retval SL_STATUS_FAIL In case of internal API error + * @retval SL_STATUS_FLASH_PROGRAM_FAILED In case storage writing has failed + * @retval SL_STATUS_BUSY In case BLOB Storage is processing an async. request + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_invalidate(sl_bt_uuid_64_t const *blob_id); + +/***************************************************************************//** + * Invalidates all valid BLOB footer which belongs to a specific owner + * + * @see sl_btmesh_blob_storage_set_managed + * + * @param[in] owner_id Identifier of owner + * + * @return Result code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FAIL In case of internal API error + * @retval SL_STATUS_FLASH_PROGRAM_FAILED In case storage writing has failed + * @retval SL_STATUS_BUSY In case BLOB Storage is processing an async. request + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_invalidate_by_owner(uint16_t owner_id); + +/***************************************************************************//** + * Invalidates all valid BLOB footer + * + * @return Result code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FAIL In case of internal API error + * @retval SL_STATUS_FLASH_PROGRAM_FAILED In case storage writing has failed + * @retval SL_STATUS_BUSY In case BLOB Storage is processing an async. request + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_invalidate_all(void); + +/***************************************************************************//** + * Deletes a BLOB from storage + * + * @param[in] blob_id Identifier of the BLOB to be deleted + * + * @return Result of erase + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NOT_FOUND In case no BLOB has been identified in storage + * @retval SL_STATUS_FLASH_ERASE_FAILED In case erase has failed + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_delete(sl_bt_uuid_64_t const *blob_id); + +/***************************************************************************//** + * Start asynchronous delete of a BLOB + * + * @param[in] blob_id Identifier of the BLOB to be deleted + * + * @see sl_btmesh_blob_storage_get_erase_error_code + * + * @return Request status + * @retval SL_BTMESH_OK Request successful + * @retval SL_BTMESH_BUSY Erase handler busy + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_delete_start(sl_bt_uuid_64_t const *blob_id); + +/***************************************************************************//** + * Deletes all BLOB from storage which belongs to a specific owner + * + * @see sl_btmesh_blob_storage_set_managed + * + * @param[in] owner_id Identifier of owner + * + * @return Result of erase + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NOT_FOUND No managed slot was found which belongs to the owner + * @retval SL_STATUS_FLASH_ERASE_FAILED In case erase has failed + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_delete_managed_by_owner(uint16_t owner_id); + +/***************************************************************************//** + * Start asynchronous delete of BLOBs that are unmanaged + * + * @see sl_btmesh_blob_storage_get_erase_error_code + * @see sl_btmesh_blob_storage_set_managed + * + * @param[in] owner_id Identifier of owner + * + * @return Request status + * @retval SL_BTMESH_OK Request successful + * @retval SL_BTMESH_BUSY Erase handler busy + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_delete_managed_by_owner_start(uint16_t owner_id); + +/***************************************************************************//** + * Deletes all BLOBs from storage + * + * @return Result of erase + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FLASH_ERASE_FAILED In case erase has failed + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_delete_all(void); + +/***************************************************************************//** + * Start asynchronous delete of all BLOBs + * + * @see sl_btmesh_blob_storage_get_erase_error_code + * + * @return Request status + * @retval SL_BTMESH_OK Request successful + * @retval SL_BTMESH_BUSY Erase handler busy + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_delete_all_start(void); + +/***************************************************************************//** + * Clear slots with invalid data + * + * @return Result of erase + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NOT_FOUND No invalid slot was found + * @retval SL_STATUS_FLASH_ERASE_FAILED In case erase has failed + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_delete_invalid_slots(void); + +/***************************************************************************//** + * Start asynchronous delete of invalid BLOBs + * + * @see sl_btmesh_blob_storage_get_erase_error_code + * + * @return Request status + * @retval SL_BTMESH_OK Request successful + * @retval SL_BTMESH_BUSY Erase handler busy + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_delete_invalid_slots_start(void); + +/***************************************************************************//** + * Clear slots that are unmanaged + * + * @see sl_btmesh_blob_storage_set_managed + * + * @return Result of erase + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NOT_FOUND No unmanaged slot was found + * @retval SL_STATUS_FLASH_ERASE_FAILED In case erase has failed + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_delete_unmanaged_slots(void); + +/***************************************************************************//** + * Start asynchronous delete of BLOBs that are unmanaged + * + * @see sl_btmesh_blob_storage_get_erase_error_code + * @see sl_btmesh_blob_storage_set_managed + * + * @return Request status + * @retval SL_BTMESH_OK Request successful + * @retval SL_BTMESH_BUSY Erase handler busy + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_delete_unmanaged_slots_start(void); + +/***************************************************************************//** + * Set asynchronous delete separation time + * + * Asynchronous delete separation time is measured in milliseconds between two + * asynchronous delete steps. The BLOB storage async delete is performed in + * multiple steps and each delete step blocks the code execution. + * If delete steps are executed too often then it could starve other timing + * sensitive SW components so delete separation time feature can be used to + * prevent this scenario. + * + * @param[in] separation_time_ms Separation time between two async erase steps + * + * @return Request status + * @retval SL_STATUS_OK In case of success + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_set_delete_separation_time(uint16_t separation_time_ms); + +/***************************************************************************//** + * Checks whether BLOB identified is present in storage + * + * @param[in] blob_id + * + * @return Boolean value + * @retval true BLOB is present + * @retval false BLOB is not present + ******************************************************************************/ +bool sl_btmesh_blob_storage_is_present(sl_bt_uuid_64_t const *blob_id); + +/***************************************************************************//** + * Queries the BLOB size + * + * @param[in] blob_id Identifier of the BLOB inquired about + * @param[out] blob_size Length of the BLOB + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NOT_FOUND In case no BLOB has been identified + * @retval SL_STATUS_INVALID_SIGNATURE In case invalid internal BLOB signature + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_get_blob_size(sl_bt_uuid_64_t const *blob_id, + uint32_t *blob_size); + +/***************************************************************************//** + * Calculates the size of application specific footer on BLOB storage medium. + * + * @note BLOB storage stores some additional metadata (id, length) with the + * footer data and it takes into consideration the alignment requirements of + * the underlying medium. + * + * @param[in] footer_data_length Length of the application specific footer data + * + * @return Size of application specific footer on BLOB storage medium. + ******************************************************************************/ +uint32_t sl_btmesh_blob_storage_calc_app_footer_size(uint16_t footer_data_length); + +/***************************************************************************//** + * Writes application specific footer into storage belonging to identified the + * BLOB and application + * + * @param[in] blob_id Identifier of the BLOB + * @param[in] footer Footer data + * @param[in] app_id Identifier of the application data. Must be unique to the + * application layer user in the compiled software. Used to + * identify footer. + * @param[in] length Length of the data + * + * @return Result of footer write + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FLASH_PROGRAM_FAILED In case write failed + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_write_app_footer(sl_bt_uuid_64_t const *blob_id, + void const *footer, + uint16_t app_id, + uint16_t length); + +/***************************************************************************//** + * Queries footer information length assigned to a given BLOB, belonging to an + * application identifier. + * + * @param[in] blob_id Identifier of the BLOB + * @param[in] app_id Identifier of the application data + * @param[out] length Length of application data in case of success + * + * @return Status code + * @retval SL_STATUS_OK In case of successful query + * @retval SL_STATUS_NOT_FOUND If app_id and blob_id don't identify a footer + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_get_app_footer_length(sl_bt_uuid_64_t const *blob_id, + uint16_t app_id, + uint16_t *length); + +/***************************************************************************//** + * Extracts footer information assigned to a given BLOB, belonging to an + * application identifier. + * + * @param[in] blob_id Identifier of the BLOB + * @param[in] app_id Identifier of the application data + * @param[out] buffer Pointer to footer buffer + * @param[inout] length Length of the buffer; contains the length of the data + * read in case of success + * + * @return Status code + * @retval SL_STATUS_OK In case of successful reading + * @retval SL_STATUS_NOT_FOUND If app_id and blob_id don't identify a footer + * @retval SL_STATUS_INVALID_PARAMETER If buffer is too short + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_get_app_footer(sl_bt_uuid_64_t const *blob_id, + uint16_t app_id, + void *buffer, + uint16_t *length); + +/***************************************************************************//** + * Set BLOB to be managed, meaning it won't be deleted. + * + * Each managed BLOB is managed by a specific owner which is stored with BLOB. + * Unmanaged BLOBs will be deleted when out of available space. + * + * @param[in] blob_id Identifier of the BLOB + * @param[in] owner_id Identifier of owner which the BLOB belongs to + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FLASH_PROGRAM_FAILED In case write failed + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_set_managed(sl_bt_uuid_64_t const *blob_id, + uint16_t owner_id); + +/***************************************************************************//** + * Check if BLOB is managed. + * + * @see sl_btmesh_blob_storage_set_managed + * + * @param[in] blob_id Identifier of the BLOB + * + * @return Boolean value + * @retval true BLOB is managed + * @retval false BLOB isn't managed or BLOB does not exist + ******************************************************************************/ +bool sl_btmesh_blob_storage_is_managed(sl_bt_uuid_64_t const *blob_id); + +/***************************************************************************//** + * Check if BLOB is managed by a specific owner. + * + * @see sl_btmesh_blob_storage_set_managed + * + * @param[in] blob_id Identifier of the BLOB + * @param[in] owner_id Identifier of expected owner + * + * @return Boolean value + * @retval true BLOB belongs to the specified owner + * @retval false BLOB belongs to another owner or BLOB is not managed or + * BLOB does not exist + ******************************************************************************/ +bool sl_btmesh_blob_storage_is_managed_by_owner(sl_bt_uuid_64_t const *blob_id, + uint16_t owner_id); + +/***************************************************************************//** + * Return the size of managed flag on BLOB storage medium. + * + * BLOB storage needs to distinguish managed and unmanaged BLOBs so it marks + * managed BLOBs as such which requires some space on the medium. + * + * @return Size of managed flag on BLOB storage medium + ******************************************************************************/ +uint32_t sl_btmesh_blob_storage_get_managed_flag_size(void); + +/***************************************************************************//** + * Searches BLOBs managed by a specific owner and provides the BLOB ID of the + * requested occurrence. + * + * The search order for managed BLOBs of an owner is not specified but it is + * guaranteed that the order does not change unless new BLOB is added or an + * existing BLOB of the same owner is removed (delete, invalidate) from the + * BLOB storage. + * + * When a managed BLOB belonging to an owner is removed from BLOB storage then + * occurrence_idx of BLOBs with same owner is decremented if the occurrence_idx + * of the BLOB was greater than the occurrence_idx of the removed BLOB otherwise + * the occurrence_idx does not change. In other words the BLOBs are shifted to + * lower indexes. + * + * If a new managed BLOB is added by an owner to the BLOB storage then the + * search order of BLOBs with the same owner may change arbitrarily because + * it is not guaranteed which occurrence_idx the added BLOB is assigned to. + * + * @see sl_btmesh_blob_storage_set_managed + * + * @param[in] owner_id Identifier of owner which the BLOB belongs to + * @param[in] occurrence_idx Selects a BLOB from BLOBs managed by the same owner. + * Zero means the first BLOB with matching owner found during the search. + * @param[out] blob_id Identifier of the BLOB + * + * @return Result of managed BLOB ID get operation + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NOT_FOUND If no BLOBs are found with owner_id or the + * occurrence_idx is greater or equal to the number of BLOBs managed by owner + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_get_blob_id_by_owner(uint16_t owner_id, + uint32_t occurrence_idx, + sl_bt_uuid_64_t *blob_id); + +/***************************************************************************//** + * Searches for a specific app_id and data in the footer of each valid BLOB and + * returns the BLOB ID of the first match + * + * @param[in] app_id Identifier of the application data + * @param[in] expected_footer Expected footer data for comparison + * @param[in] length Length of the data + * @param[out] blob_id Identifier of the BLOB of the first match + * + * @return Result of footer based BLOB ID query (propagates other internal + * errors) + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NOT_FOUND If app_id is not found or the data is different + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +sl_status_t sl_btmesh_blob_storage_get_blob_id_by_footer(uint16_t app_id, + const void *expected_footer, + uint16_t length, + sl_bt_uuid_64_t *blob_id); + +/***************************************************************************//** + * Queries total space for BLOB data storage in bytes (used + empty) + * + * @return Total space in bytes + ******************************************************************************/ +uint32_t sl_btmesh_blob_storage_get_total_space(void); + +/***************************************************************************//** + * Queries remaining empty bytes in the BLOB storage + * + * @param[in] include_unmanaged_blobs If true then unmanaged blobs are calculated + * into the remaining empty space. + * + * @return Remaining empty bytes + ******************************************************************************/ +uint32_t sl_btmesh_blob_storage_get_remaining_space(bool include_unmanaged_blobs); + +/***************************************************************************//** + * Queries maximum BLOB size which can be stored if the whole BLOB storage is + * empty + * + * @note This might not be available even if one BLOB is stored + * + * @return Maximum BLOB size + ******************************************************************************/ +uint32_t sl_btmesh_blob_storage_get_max_blob_size(void); + +/***************************************************************************//** + * Queries maximum BLOB size which can be stored in the free space of BLOB + * storage + * + * @param[in] include_unmanaged_blobs If true then unmanaged blobs are calculated + * into the maximum free BLOB size. + * + * @return Maximum supported BLOB size in free part of the BLOB storage + ******************************************************************************/ +uint32_t sl_btmesh_blob_storage_get_max_blob_size_free(bool include_unmanaged_blobs); + +/***************************************************************************//** + * Queries maximum number of BLOBs which can be stored + * + * @return Maximum number of BLOBs + ******************************************************************************/ +uint32_t sl_btmesh_blob_storage_get_max_blob_count(void); + +/***************************************************************************//** + * Queries the error code/state of the asynchronous erase + * + * @return State of asynchronous erase + * @retval SL_BTMESH_BLOB_STORAGE_DELETE_INACTIVE If erase is inactive + * @retval SL_BTMESH_BLOB_STORAGE_DELETE_BUSY If erase is ongoing + * @retval SL_BTMESH_BLOB_STORAGE_DELETE_FAILED If erase has failed + * @retval SL_BTMESH_BLOB_STORAGE_DELETE_SUCCESS If erase is successful + ******************************************************************************/ +sl_btmesh_blob_storage_delete_state_t sl_btmesh_blob_storage_get_erase_error_code(void); + +/***************************************************************************//** + * Handles the asynchronous erase state machine + ******************************************************************************/ +void sl_btmesh_blob_storage_delete_step_handle(void); + +/***************************************************************************//** + * Check if BLOB Storage allows the system to sleep + * + * @return If it is ok to sleep + * @retval true The system is allowed to sleep + * @retval false The system shall be kept awake + * + * Asynchronous erase requires the device to stay awake to finish. + ******************************************************************************/ +bool sl_btmesh_blob_storage_is_ok_to_sleep(); + +/** @} end blob_storage */ + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif //SL_BTMESH_BLOB_STORAGE_H diff --git a/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage_app_id.h b/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage_app_id.h new file mode 100644 index 00000000000..f2d17040cb6 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage_app_id.h @@ -0,0 +1,59 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh BLOB Storage Application Identifiers + * + * This file contains the list of reserved application identifiers (app_id) of + * Silicon Laboratories software components. If the application needs to store + * additional data in app footer then the usage of these application identifiers + * shall be avoided. + * + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_BLOB_STORAGE_APP_ID_H +#define SL_BTMESH_BLOB_STORAGE_APP_ID_H + +/***************************************************************************//** + * @addtogroup blob_storage + * @{ + ******************************************************************************/ + +/// Reserved BLOB Storage owner ID of FW Distribution Server +#define BLOB_STORAGE_OWNER_ID_FW_DIST_SERVER 0x1000 + +/// Reserved BLOB Storage app ID of Firmware ID (BT Mesh DFU) +#define BLOB_STORAGE_APP_ID_DFU_FWID 0x1001 + +/// Reserved BLOB Storage app ID of Metadata (BT Mesh DFU) +#define BLOB_STORAGE_APP_ID_DFU_METADATA 0x1002 + +/// Reserved BLOB Storage app ID of managed flag +#define BLOB_STORAGE_APP_ID_MANAGED_FLAG 0x8000 + +/** @} end blob_storage */ + +#endif // SL_BTMESH_BLOB_STORAGE_APP_ID_H diff --git a/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage_erase.c b/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage_erase.c new file mode 100644 index 00000000000..f86bcc9abed --- /dev/null +++ b/app/btmesh/common/btmesh_blob_storage/sl_btmesh_blob_storage_erase.c @@ -0,0 +1,478 @@ +/***************************************************************************//** + * @file + * @brief Implementation of BLOB storage component erase functionality + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include "btl_interface.h" +#include "sl_status.h" +#include "sl_bgapi.h" + +#include "app_assert.h" +#include "sl_simple_timer.h" + +#include "sl_btmesh_blob_storage.h" +#include "sl_btmesh_blob_storage_config.h" +#include "sli_btmesh_blob_storage.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +struct { + struct sl_simple_timer timer; ///< Timer to separate two erase steps (chunk) + BootloaderEraseStatus_t status; ///< Erase status for chunked erase + uint32_t slot_id; ///< Currently erasing slot's identifier + int32_t error_code; ///< Bootloader error code + uint16_t owner; ///< Erase by Owner flag and owner identifier + uint16_t separation_time_ms; ///< Separation time between two erase steps (chunk) + bool separation_time_elapsed : 1; ///< Separation time elapsed flag + bool erasing : 1; ///< Erasing state flag + bool erase_started : 1; ///< Erase started state flag + bool invalid : 1; ///< Erase Invalid Slots state flag + bool unmanaged : 1; ///< Erase Unmanaged Slots state flag + bool all : 1; ///< Erase All Slots state flag +} blob_storage_erase; + +/***************************************************************************//** + * Starts erase separation timer + ******************************************************************************/ +static void blob_storage_start_delete_separation_timer(void); + +/***************************************************************************//** + * Erase separation time elapsed callback + ******************************************************************************/ +static void blob_storage_on_delete_separation_time_elapsed(sl_simple_timer_t *timer, + void *data); + +/***************************************************************************//** + * Forcibly delete a erase data from slot identified + * + * @param[in] slot_id Identifier of the slot to be erased + * + * @return Result of erase + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NOT_FOUND Slot identifier invalid + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +static sl_status_t blob_storage_force_delete_slot(uint32_t slot_id); + +/***************************************************************************//** + * Starts deleting slot identified + * + * @param[in] slot_id Identifier of the slot to be erased + ******************************************************************************/ +static void blob_storage_force_delete_slot_start(uint32_t slot_id); + +/***************************************************************************//** + * Helper function for delete functions to reduce code duplication + * + * @param[in] slot_id Identifier of the slot to be erased + * @param[inout] status Status of the earlier erases. Should be initialized to + * SL_STATUS_NOT_FOUND + ******************************************************************************/ +static inline void blob_storage_delete_helper(uint32_t slot_id, + sl_status_t *status); + +void sli_btmesh_blob_storage_erase_init(void) +{ + blob_storage_erase.erasing = false; + blob_storage_erase.erase_started = false; + blob_storage_erase.invalid = false; + blob_storage_erase.unmanaged = false; + blob_storage_erase.all = false; + blob_storage_erase.error_code = INT32_MAX; + blob_storage_erase.owner = UINT16_MAX; + blob_storage_erase.separation_time_elapsed = true; + blob_storage_erase.separation_time_ms = + SL_BTMESH_BLOB_STORAGE_ASYNC_DELETE_SEPARATION_TIME_MS_CFG_VAL; +} + +sl_status_t sl_btmesh_blob_storage_delete(sl_bt_uuid_64_t const *blob_id) +{ + sl_status_t sc; + uint32_t slot_id = sli_btmesh_blob_storage_get_slot_id(blob_id); + + sc = blob_storage_force_delete_slot(slot_id); + return sc; +} + +sl_status_t sl_btmesh_blob_storage_delete_invalid_slots(void) +{ + sl_status_t sc = SL_STATUS_NOT_FOUND; + for (uint32_t slot_id = 0; + slot_id < sl_btmesh_blob_storage_get_max_blob_count(); + ++slot_id) { + if (SL_BTMESH_BLOB_STORAGE_STATUS_CORRUPTED + == sli_btmesh_blob_storage_get_slot_status(slot_id)) { + blob_storage_delete_helper(slot_id, &sc); + } + } + return sc; +} + +sl_status_t sl_btmesh_blob_storage_delete_unmanaged_slots(void) +{ + sl_status_t sc = SL_STATUS_NOT_FOUND; + sl_btmesh_blob_storage_slot_metadata_cache_t const *cache; + uint32_t cache_length; + sl_btmesh_blob_storage_get_cache(&cache, &cache_length); + for (uint32_t slot_id = 0; slot_id < cache_length; ++slot_id) { + if (SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED == cache[slot_id].status + && !sl_btmesh_blob_storage_is_managed(&cache[slot_id].blob_id)) { + blob_storage_delete_helper(slot_id, &sc); + } + } + return sc; +} + +sl_status_t sl_btmesh_blob_storage_delete_managed_by_owner(uint16_t owner_id) +{ + sl_status_t sc = SL_STATUS_NOT_FOUND; + sl_btmesh_blob_storage_slot_metadata_cache_t const *cache; + uint32_t cache_length; + sl_btmesh_blob_storage_get_cache(&cache, &cache_length); + + for (uint32_t slot_id = 0; slot_id < cache_length; ++slot_id) { + // Only attempt erase when slot is not empty + if (SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED == cache[slot_id].status + && sl_btmesh_blob_storage_is_managed_by_owner(&cache[slot_id].blob_id, + owner_id)) { + blob_storage_delete_helper(slot_id, &sc); + } + } + return sc; +} + +sl_status_t sl_btmesh_blob_storage_delete_all(void) +{ + sl_status_t sc = SL_STATUS_NOT_FOUND; + uint32_t slot_cnt = sl_btmesh_blob_storage_get_max_blob_count(); + for (uint32_t slot_id = 0; slot_id < slot_cnt; ++slot_id) { + blob_storage_delete_helper(slot_id, &sc); + } + return sc; +} + +sl_status_t sl_btmesh_blob_storage_delete_start(sl_bt_uuid_64_t const *blob_id) +{ + if (blob_storage_erase.erasing) { + return SL_STATUS_BUSY; + } + + blob_storage_erase.erasing = true; + blob_storage_erase.slot_id = sli_btmesh_blob_storage_get_slot_id(blob_id); + blob_storage_force_delete_slot_start(blob_storage_erase.slot_id); + log_debug("Starting BLOB erase in slot %lu!" NL, blob_storage_erase.slot_id); + + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_blob_storage_delete_invalid_slots_start(void) +{ + if (blob_storage_erase.erasing) { + return SL_STATUS_BUSY; + } + + blob_storage_erase.invalid = true; + blob_storage_erase.erasing = true; + blob_storage_erase.slot_id = 0; + blob_storage_erase.error_code = INT32_MAX; + + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_blob_storage_delete_unmanaged_slots_start(void) +{ + if (blob_storage_erase.erasing) { + return SL_STATUS_BUSY; + } + + blob_storage_erase.unmanaged = true; + blob_storage_erase.erasing = true; + blob_storage_erase.slot_id = 0; + blob_storage_erase.error_code = INT32_MAX; + + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_blob_storage_delete_managed_by_owner_start(uint16_t owner_id) +{ + if (blob_storage_erase.erasing) { + return SL_STATUS_BUSY; + } + + blob_storage_erase.owner = owner_id; + blob_storage_erase.erasing = true; + blob_storage_erase.slot_id = 0; + blob_storage_erase.error_code = INT32_MAX; + + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_blob_storage_delete_all_start(void) +{ + if (blob_storage_erase.erasing) { + return SL_STATUS_BUSY; + } + + blob_storage_erase.all = true; + blob_storage_erase.erasing = true; + blob_storage_erase.slot_id = 0; + blob_storage_erase.error_code = INT32_MAX; + + return SL_STATUS_OK; +} + +sl_btmesh_blob_storage_delete_state_t sl_btmesh_blob_storage_get_erase_error_code(void) +{ + if (!blob_storage_erase.erasing) { + if (INT32_MAX == blob_storage_erase.error_code) { + return SL_BTMESH_BLOB_STORAGE_DELETE_INACTIVE; + } + if (BOOTLOADER_OK == blob_storage_erase.error_code) { + return SL_BTMESH_BLOB_STORAGE_DELETE_SUCCESS; + } else { + return SL_BTMESH_BLOB_STORAGE_DELETE_FAILED; + } + } + return SL_BTMESH_BLOB_STORAGE_DELETE_BUSY; +} + +void sl_btmesh_blob_storage_delete_step_handle(void) +{ + if (!blob_storage_erase.erasing) { + return; + } + if (blob_storage_erase.erase_started) { + if (BOOTLOADER_ERROR_STORAGE_CONTINUE == blob_storage_erase.error_code) { + if (blob_storage_erase.separation_time_elapsed) { + blob_storage_erase.error_code = + bootloader_chunkedEraseStorageSlot(&blob_storage_erase.status); + // The async delete separation timer shall be started to introduce a + // delay between two consecutive async delete steps. It is important to + // start the timer even if the last chunk of the storage slot is erased + // because other slots may be deleted as well after this one. + if ((BOOTLOADER_ERROR_STORAGE_CONTINUE == blob_storage_erase.error_code) + || (BOOTLOADER_OK == blob_storage_erase.error_code)) { + blob_storage_start_delete_separation_timer(); + } + } + } + if (BOOTLOADER_ERROR_STORAGE_CONTINUE != blob_storage_erase.error_code) { + blob_storage_erase.erase_started = false; + // Resync + sli_btmesh_blob_storage_sync(); + } + } else { + if (blob_storage_erase.invalid) { + if (sl_btmesh_blob_storage_get_max_blob_count() + == blob_storage_erase.slot_id) { + // clear flags + blob_storage_erase.erasing = false; + blob_storage_erase.invalid = false; + } else if (SL_BTMESH_BLOB_STORAGE_STATUS_CORRUPTED + == sli_btmesh_blob_storage_get_slot_status(blob_storage_erase.slot_id)) { + blob_storage_force_delete_slot_start(blob_storage_erase.slot_id++); + } else { + blob_storage_erase.slot_id++; + } + } else if (blob_storage_erase.unmanaged) { + if (sl_btmesh_blob_storage_get_max_blob_count() + == blob_storage_erase.slot_id) { + // clear flags + blob_storage_erase.erasing = false; + blob_storage_erase.unmanaged = false; + } else if (!sli_btmesh_blob_storage_is_managed(blob_storage_erase.slot_id)) { + blob_storage_force_delete_slot_start(blob_storage_erase.slot_id++); + } else { + blob_storage_erase.slot_id++; + } + } else if (blob_storage_erase.owner != UINT16_MAX) { + if (sl_btmesh_blob_storage_get_max_blob_count() + == blob_storage_erase.slot_id) { + // clear flags + blob_storage_erase.erasing = false; + blob_storage_erase.owner = UINT16_MAX; + } else if (sli_btmesh_blob_storage_is_managed_by_owner(blob_storage_erase.slot_id, + blob_storage_erase.owner)) { + blob_storage_force_delete_slot_start(blob_storage_erase.slot_id++); + } else { + blob_storage_erase.slot_id++; + } + } else if (blob_storage_erase.all) { + if (sl_btmesh_blob_storage_get_max_blob_count() + == blob_storage_erase.slot_id) { + // clear flags + blob_storage_erase.erasing = false; + blob_storage_erase.all = false; + } else { + blob_storage_force_delete_slot_start(blob_storage_erase.slot_id++); + } + } else { + blob_storage_erase.erasing = false; + } + } +} + +bool sl_btmesh_blob_storage_is_ok_to_sleep() +{ + return !blob_storage_erase.erasing; +} + +sl_status_t sl_btmesh_blob_storage_set_delete_separation_time(uint16_t separation_time_ms) +{ + blob_storage_erase.separation_time_ms = separation_time_ms; + return SL_STATUS_OK; +} + +static void blob_storage_start_delete_separation_timer(void) +{ + blob_storage_erase.separation_time_elapsed = false; + if (blob_storage_erase.separation_time_ms == 0) { + // If the delete separation time is zero then the timer elapses immediately + // so the timer callback shall be called directly + blob_storage_on_delete_separation_time_elapsed(&blob_storage_erase.timer, NULL); + } else { + sl_status_t sc; + sc = sl_simple_timer_start(&blob_storage_erase.timer, + blob_storage_erase.separation_time_ms, + blob_storage_on_delete_separation_time_elapsed, + NULL, + false); + app_assert_status(sc); + } +} + +static void blob_storage_on_delete_separation_time_elapsed(sl_simple_timer_t *timer, + void *data) +{ + (void) timer; + (void) data; + blob_storage_erase.separation_time_elapsed = true; +} + +static sl_status_t blob_storage_force_delete_slot(uint32_t slot_id) +{ + sl_btmesh_blob_storage_status_t slot_status; + + // If the slot is occupied then it shall be invalidated first because the + // bootloader_eraseStorageSlot erases the pages of the storage slot from + // lower address to higher address which means the data is erased sooner than + // the footer. This is essential because the BLOB in the slot would appear + // valid due to the intact footer while the BLOB data was deleted partially + // without invalidation. + slot_status = sli_btmesh_blob_storage_get_slot_status(slot_id); + + if (slot_status == SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED) { + // The invalidation shall be forced because the invalidated slot will be + // deleted immediately so an ongoing erase should not cause any issues. + sl_status_t sc_invalidate = sli_blob_storage_invalidate_slot(slot_id, true); + + // If the invalidation fails then it does not mean that an error will occur + // during the storage slot erase. An issue may occur with failed invalidation + // if there is a reset during erase. + // If the invalidation fails then a warning is logged and the storage slot + // is erased anyway because it might have more negative consequences if a + // storage slot is not erased. (e.g. no new BLOB can be written) + log_status_warning_f(sc_invalidate, + "Failed to invalidate occupied slot before delete (slot=%lu)" NL, + (unsigned long) slot_id); + } + + switch (bootloader_eraseStorageSlot(slot_id)) { + case BOOTLOADER_ERROR_STORAGE_INVALID_SLOT: + return SL_STATUS_NOT_FOUND; + case BOOTLOADER_OK: + break; + default: + return SL_STATUS_FAIL; + } + // Resync + sli_btmesh_blob_storage_sync(); + return SL_STATUS_OK; +} + +static void blob_storage_force_delete_slot_start(uint32_t slot_id) +{ + sl_btmesh_blob_storage_status_t slot_status; + + // If the slot is occupied then it shall be invalidated first because the + // bootloader_initChunkedEraseStorageSlot and bootloader_chunkedEraseStorageSlot + // erase the pages of the storage slot from lower address to higher address + // which means the data is erased sooner than the footer. + // This is essential because the BLOB in the slot would appear valid due to the + // intact footer while the BLOB data was deleted partially without invalidation. + slot_status = sli_btmesh_blob_storage_get_slot_status(slot_id); + + if (slot_status == SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED) { + // The invalidation shall be forced because this function is also called when + // multiple storage slots are deleted one by one. + // For example: sl_btmesh_blob_storage_delete_all_start + sl_status_t sc_invalidate = sli_blob_storage_invalidate_slot(slot_id, true); + + // If the invalidation fails then it does not mean that an error will occur + // during the storage slot erase. An issue may occur with failed invalidation + // if there is a reset during erase or the BLOB data in the storage slot is + // read while it is being erased. + // If the invalidation fails then a warning is logged and the storage slot + // is erased anyway because it might have more negative consequences if a + // storage slot is not erased. (e.g. no new BLOB can be written) + log_status_warning_f(sc_invalidate, + "Failed to invalidate occupied slot before delete (slot=%lu)" NL, + (unsigned long) slot_id); + } + + blob_storage_erase.error_code = + bootloader_initChunkedEraseStorageSlot(slot_id, + &blob_storage_erase.status); + if (BOOTLOADER_OK == blob_storage_erase.error_code) { + // Signal ongoing erase + blob_storage_erase.error_code = BOOTLOADER_ERROR_STORAGE_CONTINUE; + blob_storage_erase.erase_started = true; + } +} + +static inline void blob_storage_delete_helper(uint32_t slot_id, + sl_status_t *status) +{ + sl_status_t temp_sc = blob_storage_force_delete_slot(slot_id); + + app_assert(temp_sc != SL_STATUS_NOT_FOUND, "Invalid slot ID!"); + + // status should point to a value of SL_STATUS_NOT_FOUND initially + if (*status == SL_STATUS_NOT_FOUND && SL_STATUS_OK == temp_sc) { + *status = SL_STATUS_OK; + } + + if (SL_STATUS_OK != temp_sc) { + // Erase is requested for all storage slots even if the erase of previous + // storage slots have failed. However, if at least one erase fails then + // the return value is set to SL_STATUS_FLASH_ERASE_FAILED. + *status = SL_STATUS_FLASH_ERASE_FAILED; + } +} diff --git a/app/btmesh/common/btmesh_blob_storage/sli_btmesh_blob_storage.h b/app/btmesh/common/btmesh_blob_storage/sli_btmesh_blob_storage.h new file mode 100644 index 00000000000..506f261cb54 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_storage/sli_btmesh_blob_storage.h @@ -0,0 +1,140 @@ +/***************************************************************************//** + * @file + * @brief Interface header for BLOB storage component internal interfaces + ******************************************************************************* + * # License + * Copyright 2021 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 SLI_BTMESH_BLOB_STORAGE_H +#define SLI_BTMESH_BLOB_STORAGE_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * Initializes the storage erase functionality + ******************************************************************************/ +void sli_btmesh_blob_storage_erase_init(void); + +/***************************************************************************//** + * Read data from bootloader and stores it in the cache + ******************************************************************************/ +void sli_btmesh_blob_storage_sync(void); + +/***************************************************************************//** + * Query status of the slot + * + * @param[in] slot_id Index of the slot + * + * @return Status of the slot + * @retval SL_BTMESH_BLOB_STORAGE_STATUS_EMPTY If slot is empty + * @retval SL_BTMESH_BLOB_STORAGE_STATUS_CORRUPTED If data is present and invalid + * @retval SL_BTMESH_BLOB_STORAGE_STATUS_OCCUPIED If data is present and valid + * @retval SL_BTMESH_BLOB_STORAGE_STATUS_INTERNAL_ERROR Some internal error occurred + */ +sl_btmesh_blob_storage_status_t sli_btmesh_blob_storage_get_slot_status(uint32_t slot_id); + +/***************************************************************************//** + * Check if BLOB ID is stored in any of the slots and identifies it. + * + * @param[in] blob_id BLOB ID inquired about + * + * @return Identifier of the slot containing the identified BLOB + * @retval UINT32_MAX In case no slot is found + ******************************************************************************/ +uint32_t sli_btmesh_blob_storage_get_slot_id(sl_bt_uuid_64_t const *blob_id); + +/***************************************************************************//** + * Extracts footer information assigned to a given slot, belonging to an + * application identifier. + * + * @param slot_id Index of the slot + * @param[in] app_id Identifier of the application layer user + * @param[out] buffer Pointer to footer buffer + * @param[inout] length Length of the buffer; contains the length of the data + * read in case of success + * + * @return Status code + * @retval SL_STATUS_OK In case of successful reading + * @retval SL_STATUS_NOT_FOUND If app_id and blob_id don't identify a footer + * @retval SL_STATUS_INVALID_PARAMETER If buffer is too short + * @retval SL_STATUS_FAIL In case of internal API error + ******************************************************************************/ +sl_status_t sli_btmesh_blob_storage_get_app_footer(uint32_t slot_id, + uint16_t app_id, + void *buffer, + uint16_t *length); +/***************************************************************************//** + * Check if BLOB is managed. + * + * @see sl_btmesh_blob_storage_set_managed + * + * @param[in] slot_id Index of the slot + * + * @return Boolean value + * @retval true BLOB is managed + * @retval false Slot isn't managed + ******************************************************************************/ +bool sli_btmesh_blob_storage_is_managed(uint32_t slot_id); + +/***************************************************************************//** + * Check if slot is managed by a specific owner. + * + * @see sl_btmesh_blob_storage_set_managed + * + * @param[in] slot_id Index of the slot + * @param[in] owner_id Identifier of expected owner + * + * @return Boolean value + * @retval true BLOB belongs to the specified owner + * @retval false Slot belongs to another owner or Slot is not managed or + * BLOB does not exist + ******************************************************************************/ +bool sli_btmesh_blob_storage_is_managed_by_owner(uint32_t slot_id, + uint16_t owner_id); + +/***************************************************************************//** + * Invalidate BLOB footer in the requested slot + * + * @param[in] slot_id Identifier of slot where BLOB footer shall be invalidated + * @param[in] force If false then invalidation fails in case of any active + * asynchronous delete operation otherwise it is executed unconditionally. + * + * @return Result code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_BUSY In case of active delete operation (if force is false) + * @retval SL_STATUS_FAIL In case of internal API error + * @retval SL_STATUS_FLASH_PROGRAM_FAILED In case storage writing has failed + ******************************************************************************/ +sl_status_t sli_blob_storage_invalidate_slot(uint32_t slot_id, + bool force); + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif /* SLI_BTMESH_BLOB_STORAGE_H */ diff --git a/app/btmesh/common/btmesh_blob_transfer_client/btmesh_blob_transfer_client.dcd b/app/btmesh/common/btmesh_blob_transfer_client/btmesh_blob_transfer_client.dcd new file mode 100644 index 00000000000..3e3728598a9 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_transfer_client/btmesh_blob_transfer_client.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1401", "name":"BLOB Transfer Client"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_blob_transfer_client/config/sl_btmesh_blob_transfer_client_config.h b/app/btmesh/common/btmesh_blob_transfer_client/config/sl_btmesh_blob_transfer_client_config.h new file mode 100644 index 00000000000..8fabbb19839 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_transfer_client/config/sl_btmesh_blob_transfer_client_config.h @@ -0,0 +1,136 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh BLOB Transfer Client Configuration + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_BLOB_TRANSFER_CLIENT_CONFIG_H +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// BT Mesh BLOB Transfer Client Configuration + +// Enable Logging +// Default: 1 +// Enable / disable logging of BLOB Transfer Client model specific messages +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_LOGGING_CFG_VAL (1) + +// Text prepended to every log message +// Default: "BLOB Transfer" +// Every log message in the component is started with this text. +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_LOG_PREFIX_CFG_VAL "BlobTfClient" + +// Log BLOB Status messages +// Default: 1 +// Log the content of BT Mesh BLOB status messages. +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_LOG_BLOB_STATUS_MSG_CFG_VAL 1 + +// + +// BLOB Transfer Limits + +// Max number of servers +// <1-1008:1> +// Default: 8 +// Maximum number of BLOB transfer servers which can be serviced in a transfer (affects BT Mesh stack memory usage) +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_SERVERS_CFG_VAL 8 + +// Max number of blocks +// <1-1888:1> +// Default: 1850 +// Maximum number of blocks supported in a BLOB Transfer (affects BT Mesh stack memory usage) +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_BLOCKS_CFG_VAL 1850 + +// Max number of chunks per block +// <1-2000:1> +// Default: 128 +// Maximum number of chunks per block supported in a BLOB Transfer (affects BT Mesh stack memory usage) +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_CHUNKS_PER_BLOCK_CFG_VAL 128 + +// Max chunk size +// <1-241:1> +// Default: 241 +// Maximum chunk size which can be selected during BLOB Transfer +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_CHUNK_SIZE_CFG_VAL 241 + +// Preferred chunk size +// <1-241:1> +// Default: 53 +// If the preferred chunk size is supported by all BLOB Transfer Servers then the default chunk size calculation +// algorithm tries to select it as chunk size of the block otherwise the chunk size is set to the closest value +// which fills all segments of the chunk. There is a tradeoff between small and large chunks. +// The normal (non-AE) segmented chunks are able to transfer 12 bytes per advertisement minus the 1 byte +// opcode and 2 byte chunk number and 4 bytes of MIC. This means N regular advertisements are able to +// transfer 12 x N - 7 bytes of chunk data. If N is a big number then the payload per message converges +// to 12 but if N is low then the fixed 7 byte protocol overhead penalty becomes significant. +// If there is noise and at least one segment is lost then the whole chunk needs to be retransmitted. +// Probability of transfer failure is higher for long segmented chunks and it takes more time to retransmit +// a long chunk. The chunk size can't be arbitrarily low because the max number of chunks per block multiplied +// by the chunk size shall be greater than or equal to block size. A low chunk size leads to more chunks per +// block which has negative effects when the number of chunks per block exceeds 40, because the BLOB Block Status +// message becomes segmented, which means all servers starts to respond with segmented messages. This might have +// significant impact on the transfer speed. +// Chunk size with 5 full segments is used as default preferred chunk size because in this case the +// (12 x N - 7) / (12 x N) = 88% of the ideal (non-noisy) transfer speed is preserved and +// 40 x (12 x N - 7) = 2120 -> 2048 (2^N) byte blocks can be used without BLOB Block Status +// message segmentation. +// If BT Mesh over Advertisement Extension Silabs proprietary feature is turned on then the default chunk +// calculation algorithm selects the chunk size to fill the AE packet completely with chunk data based on +// the network PDU size if the chunk size is supported by the BLOB Transfer Servers, otherwise it falls back +// to the preferred chunk size calculation. (see Advertisement Extension Server component for details) +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_PREF_CHUNK_SIZE_CFG_VAL 53 + +// + +// Retry and Separation parameters + +// Default separation time between chunks +// <0-65535:1> +// Default: 0 +// Default minimum separation time between two chunks in the same block +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_SEPARATION_TIME_MS_DEFAULT_CFG_VAL 0 + +// Default max retry of message transmissions +// <0-1000:1> +// Default: 50 +// Default max retries of message transmissions (query info, transfer start, block start, block query) +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_RETRY_MAX_DEFAULT_CFG_VAL 50 + +// Default retry time of message transmissions +// <0-65535:1> +// Default: 2000 +// Default retry time of message transmissions (query info, transfer start, block start, block query) +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_RETRY_TIME_MS_DEFAULT_CFG_VAL 2000 + +// + +// + +// <<< end of configuration section >>> + + #endif // SL_BTMESH_BLOB_TRANSFER_CLIENT_CONFIG_H diff --git a/app/btmesh/common/btmesh_blob_transfer_client/sl_btmesh_blob_transfer_client.c b/app/btmesh/common/btmesh_blob_transfer_client/sl_btmesh_blob_transfer_client.c new file mode 100644 index 00000000000..5c53c8e2921 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_transfer_client/sl_btmesh_blob_transfer_client.c @@ -0,0 +1,1954 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh BLOB Transfer Client + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include +#include "sl_status.h" +#include "em_device.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" +#include "sl_btmesh_model_specification_v1_1_defs.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "app_assert.h" +#include "sl_simple_timer.h" +#include "sl_btmesh_blob_storage.h" + +#include "sl_btmesh_blob_transfer_client.h" +#include "sl_btmesh_blob_transfer_client_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +// ----------------------------------------------------------------------------- +// Macros +// ----------------------------------------------------------------------------- + +// Shortcut to add log prefix to log messages +#define LOG_PREFIX SL_BTMESH_BLOB_TRANSFER_CLIENT_LOG_PREFIX_CFG_VAL " " + +// Shortcut for Invalid Block Size Log constant +#define INVALID_BLOCK_SIZE_LOG SL_BTMESH_BLOB_TRANSFER_CLIENT_INVALID_BLOCK_SIZE_LOG + +// Logs non-temporary procedure errors +#define log_procedure_status_error(sc, procedure, elem_index) \ + do { \ + if ((SL_STATUS_BUSY != (sc)) && (SL_STATUS_NO_MORE_RESOURCE != (sc))) { \ + log_status_error_f(sc, \ + LOG_PREFIX procedure " failed (elem=%d)" NL, \ + elem_index); \ + } \ + } while (0) + +// Suppress compiler warning of unused static function +#define SL_UNUSED __attribute__((unused)) + +// Returns the string representation of BLOB ID in a compound literal. +// WARNING! This macro shall be used as a parameter of log calls only due to the +// lifetime of underlying compound literal in APP_BTMESH_UUID_64_TO_STRING. +#define BLOB_ID_TO_STRING(blob_id) APP_BTMESH_UUID_64_TO_STRING(blob_id, ' ', true) + +// Vendor ID of Bluetooth SIG model +#define SIG_VENDOR_ID 0xFFFF + +// The BT Mesh standard network PDU size belonging to non-connectable +// non-scannable advertisements +#define STANDARD_NETWORK_PDU_SIZE 29 + +// Provides string representation of MBT phase +#define mbt_phase_to_string(mbt_phase) \ + sl_btmesh_blob_transfer_client_mbt_phase_to_string((sl_btmesh_mbt_server_phase_t) mbt_phase) + +// Provides string representation of MBT status +#define mbt_status_to_string(mbt_status) \ + sl_btmesh_blob_transfer_client_mbt_status_to_string((sl_btmesh_mbt_server_status_t) mbt_status) + +/***************************************************************************//** + * @addtogroup blob_transfer_client BT Mesh BLOB Transfer Client + * @{ + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Type definitions +// ----------------------------------------------------------------------------- + +/// BLOB Transfer Client state constants +typedef enum { + /// Uninitialized state + STATE_UNINIT, + /// Inactive state + STATE_INACTIVE, + /// All BLOB transfer failed (error or timeout on every server) + STATE_TRANSFER_FAILED, + /// At least one BLOB Transfer Server received the BLOB successfully + STATE_TRANSFER_COMPLETED, + /// Last BLOB transfer was canceled by upper layer + STATE_TRANSFER_CANCELED, + /// Send BLOB information get message to servers until they respond or timeout + STATE_SEND_QUERY_INFO, + /// Send BLOB transfer start message to servers until they respond or timeout + STATE_SEND_TRANSFER_START, + /// Send BLOB block start message to servers until they respond or timeout + STATE_SEND_BLOCK_START, + /// Send BLOB chunk transfer messages to servers + STATE_SEND_CHUNKS, + /// Send BLOB block query message to servers until they respond or timeout + STATE_SEND_BLOCK_QUERY, + /// Send cancel message to servers until they respond or timeout + STATE_CANCELING, + /// Current BLOB transfer is suspended + STATE_SUSPENDED, + /// Total number of BLOB Transfer Client states + STATE_COUNT +} blob_transfer_client_state_t; + +/// BLOB Data Provider type determines how the data is provided for the chunk +/// transfer. Based on this information the BLOB Transfer Client is able to +/// provide the data for the chunk transfers automatically. +typedef enum { + /// No BLOB data provider is configured + BLOB_DATA_PROVIDER_NONE, + /// The BLOB data is provided in a continuous memory location (array) + BLOB_DATA_PROVIDER_ARRAY, + /// The BLOB data is provided in the BLOB storage component + BLOB_DATA_PROVIDER_BLOB_STORAGE +} blob_data_provider_type_t; + +/// Each @ref blob_transfer_client_state_t has its own state flags which +/// makes it possible to categorize certain states from different aspects +typedef struct { + /// If idle state flag is set, then no BLOB Transfer is active and the BLOB + /// Transfer Client is able to start a new transfer + uint8_t idle : 1; + /// If retry state flag is set, then it means the current state supports + /// retry. + /// + /// In retry states the BLOB Transfer Client sends messages to the BLOB + /// Transfer Servers and waits for their responses. It might happen that + /// the request or the response message is lost which means it could be + /// necessary to sends these messages multiple times until every active + /// BLOB Transfer Server responds or times out. + /// + /// The @ref blob_transfer_client_t::retry_time_ms is measured from the + /// reception of the BT Mesh stack event + /// @ref sl_btmesh_evt_mbt_client_tx_complete_id. If the retry timer elapses + /// and maximum number of retries (@ref blob_transfer_client_t::retry_max) is + /// not yet reached, then the current state is entered again + /// (self-transition), which executes the proper state entry and exit actions. + /// + /// The Mesh Model 1.1 Specification refers to these retries as: + /// "The number of request repetitions is implementation specific" + uint8_t retry : 1; + /// Separation flag is set for chunk transfer and it keeps + /// @ref blob_transfer_client_t::separation_time_ms between two chunks to + /// spare the bandwidth in the Mesh network. + /// + /// By default 0ms is the separation time to achieve the highest possible + /// throughput. + uint8_t separation : 1; +} blob_transfer_client_state_flags_t; + +typedef struct { + /// BLOB Data Provider type determines how data is provided for chunk transfer + blob_data_provider_type_t type; + /// Union of Data Provider descriptors + union { + struct { + sl_bt_uuid_64_t blob_id; + } blob_storage; + struct { + const uint8_t *data; + uint32_t length; + } array; + } descriptor; +} blob_data_provider_t; + +typedef struct { + struct sl_simple_timer retry_timer; + struct sl_simple_timer separation_timer; + sl_btmesh_blob_transfer_client_notify_cb_t notify; + blob_data_provider_t data_provider; + uint32_t blob_size; + uint32_t current_chunk_offset; + uint16_t current_chunk_length; + uint16_t current_block_chunk_size; + uint16_t current_block_number; + uint16_t elem_index; + uint16_t separation_time_ms; + uint16_t retry_time_ms; + uint16_t retry_max; + uint16_t retry_counter; + uint16_t max_chunk_size_min; + uint16_t max_chunks_min; + uint8_t block_size_log; + blob_transfer_client_state_t state; + sl_btmesh_mbt_client_transfer_mode_t transfer_mode; + bool retry_time_elapsed : 1; + bool separation_time_elapsed : 1; + bool chunk_requested : 1; + uint8_t chunk_data[SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_CHUNK_SIZE_CFG_VAL]; + const uint8_t *chunk_data_ptr; +} blob_transfer_client_t; + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Translates BLOB Transfer Client result and notifies the user + * + * @param self BLOB Transfer Client descriptor structure + * @param result BLOB Transfer Client result parameter + ******************************************************************************/ +static void notify_transfer_result(blob_transfer_client_t *const self, + sl_btmesh_blob_transfer_client_result_t result); + +/***************************************************************************//** + * Notifies user about BLOB Transfer progress + * + * @param self BLOB Transfer Client descriptor structure + * @param confirmed_tx_bytes Number of transmitted bytes confirmed + ******************************************************************************/ +static void notify_progress(blob_transfer_client_t *const self, + uint32_t confirmed_tx_bytes); + +/***************************************************************************//** + * Notifies user that server has failed + * + * @param self BLOB Transfer Client descriptor structure + * @param server_address Address of the server that failed + * @param timeout Timout flag + * @param error Error code of failure + ******************************************************************************/ +static void notify_server_failed(blob_transfer_client_t *const self, + uint16_t server_address, + uint8_t timeout, + uint8_t error); + +/***************************************************************************//** + * Notifies user that transfer has failed + * + * @param self BLOB Transfer Client descriptor structure + ******************************************************************************/ +static void process_transfer_failed(blob_transfer_client_t *const self); + +/***************************************************************************//** + * Transitions the BLOB Transfer Client state machine into the selected state + * + * @param self Pointer to the BLOB Transfer Client descriptor structure + * @param target_state State to transfer into + ******************************************************************************/ +static void state_transition(blob_transfer_client_t *const self, + blob_transfer_client_state_t target_state); + +/***************************************************************************//** + * Handles Transfer Complete event + * + * The event is received when the transfer has completed, either successfully or + * unsuccessfully. Success depends on the state of servers. + * + * @param self Pointer to the BLOB Transfer Client descriptor structure + ******************************************************************************/ +static void handle_transfer_complete(blob_transfer_client_t *const self); + +/***************************************************************************//** + * Callback for retry timer + * + * @param timer Timer handler + * @param data Callback data + ******************************************************************************/ +static void retry_timer_cb(sl_simple_timer_t *timer, void *data); + +/***************************************************************************//** + * Callback for separation timer + * + * @param timer Timer handler + * @param data Callback data + ******************************************************************************/ +static void separation_timer_cb(sl_simple_timer_t *timer, void *data); + +/***************************************************************************//** + * Callback for chunk request response retry timer + * + * @param timer Timer handler + * @param data Callback data + ******************************************************************************/ +static void send_chunk_request_response(sl_simple_timer_t *timer, void *data); + +// ----------------------------------------------------------------------------- +// Static Inline Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Calculates the number of blocks for the BLOB being transferred + * + * @param self Pointer to the BLOB Transfer Client descriptor structure + * @return Number of blocks in BLOB + ******************************************************************************/ +__STATIC_INLINE uint16_t calc_total_block_count(blob_transfer_client_t *const self) +{ + uint32_t block_count = (self->blob_size >> self->block_size_log); + + // Check if there's a partial block at the end + if (0 != (self->blob_size & ((1UL << self->block_size_log) - 1))) { + // If so increment block count to include the partial last block + block_count++; + } + return block_count; +} + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- + +static const blob_transfer_client_state_flags_t state_flags[STATE_COUNT] = { + [STATE_UNINIT] = { .idle = 0, .retry = 0, .separation = 0 }, + [STATE_INACTIVE] = { .idle = 1, .retry = 0, .separation = 0 }, + [STATE_TRANSFER_FAILED] = { .idle = 1, .retry = 0, .separation = 0 }, + [STATE_TRANSFER_COMPLETED] = { .idle = 1, .retry = 0, .separation = 0 }, + [STATE_TRANSFER_CANCELED] = { .idle = 1, .retry = 0, .separation = 0 }, + [STATE_SEND_QUERY_INFO] = { .idle = 0, .retry = 1, .separation = 0 }, + [STATE_SEND_TRANSFER_START] = { .idle = 0, .retry = 1, .separation = 0 }, + [STATE_SEND_BLOCK_START] = { .idle = 0, .retry = 1, .separation = 0 }, + [STATE_SEND_CHUNKS] = { .idle = 0, .retry = 0, .separation = 1 }, + [STATE_SEND_BLOCK_QUERY] = { .idle = 0, .retry = 1, .separation = 0 }, + [STATE_CANCELING] = { .idle = 0, .retry = 1, .separation = 0 }, + [STATE_SUSPENDED] = { .idle = 0, .retry = 0, .separation = 0 } +}; + +static blob_transfer_client_t blob_tf_client; + +// ----------------------------------------------------------------------------- +// Public Function Definitions +// ----------------------------------------------------------------------------- + +// Set up a new BLOB transfer +sl_status_t sl_btmesh_blob_transfer_client_setup(uint16_t elem_index, + sl_bt_uuid_64_t blob_id, + uint32_t blob_size, + uint16_t appkey_index, + uint8_t ttl, + uint32_t timeout_base, + uint16_t group_address, + uuid_128 virtual_address, + uint16_t multicast_threshold, + size_t servers_len, + const uint8_t* servers) +{ + sl_status_t sc; + blob_transfer_client_t *const self = &blob_tf_client; + + if (0 == state_flags[self->state].idle) { + log_error(LOG_PREFIX + "Setup call in non-idle state (elem=%d)" NL, + elem_index); + return SL_STATUS_INVALID_STATE; + } + + self->blob_size = blob_size; + + // The BLOB Transfer Server component supports both transfer mode so the mbt + // client stack model setup function is called accordingly and the transfer + // mode is selected when the BLOB transfer is started + sc = sl_btmesh_mbt_client_setup(elem_index, + blob_id, + blob_size, + appkey_index, + ttl, + timeout_base, + (uint8_t) sl_btmesh_mbt_client_mbt_transfer_mode_both, + group_address, + virtual_address, + multicast_threshold, + servers_len, + servers); + log_status_error_f(sc, + LOG_PREFIX "Setup has failed (elem=%d)" NL, + elem_index); + return sc; +} + +sl_status_t sl_btmesh_blob_transfer_client_set_params(uint16_t elem_index, + uint16_t separation_time_ms, + uint16_t retry_time_ms, + uint16_t retry_max) +{ + (void) elem_index; + blob_transfer_client_t *const self = &blob_tf_client; + + if (0 == state_flags[self->state].idle) { + log_error(LOG_PREFIX + "set Params call in non-idle state (elem=%d)" NL, + elem_index); + return SL_STATUS_INVALID_STATE; + } + + self->separation_time_ms = separation_time_ms; + self->retry_time_ms = retry_time_ms; + self->retry_max = retry_max; + + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_blob_transfer_client_setup_data_provider_array(uint16_t elem_index, + const uint8_t *array, + uint32_t length) +{ + (void)elem_index; + blob_transfer_client_t *const self = &blob_tf_client; + + app_assert(NULL != array, "BLOB Transfer array is null."); + app_assert(0 != length, "BLOB Transfer array length is zero."); + + if (0 == state_flags[self->state].idle) { + log_error(LOG_PREFIX + "Data Provider call in non-idle state (elem=%d)" NL, + elem_index); + return SL_STATUS_INVALID_STATE; + } + + // If the upper layer is NOT the distribution server, then the BLOB size + // parameter of sl_btmesh_blob_transfer_client_setup shall be consistent with + // data size parameter of data provider + // Note: if the upper layer is the btmesh_fw_distribution_server then the + // sl_btmesh_blob_transfer_client_setup is not called as the setup + // process is executed automatically in the BT Mesh stack + if (0 == self->blob_size) { + self->blob_size = length; + } else if (self->blob_size != length) { + return SL_STATUS_INVALID_PARAMETER; + } + + self->data_provider.type = BLOB_DATA_PROVIDER_ARRAY; + self->data_provider.descriptor.array.data = array; + self->data_provider.descriptor.array.length = length; + + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_blob_transfer_client_setup_data_provider_blob_storage(uint16_t elem_index, + const sl_bt_uuid_64_t *blob_id) +{ + (void)elem_index; + blob_transfer_client_t *const self = &blob_tf_client; + uint32_t blob_size; + + app_assert(NULL != blob_id, "BLOB id is null."); + + if (0 == state_flags[self->state].idle) { + log_error(LOG_PREFIX + "Data Provider call in non-idle state (elem=%d)" NL, + elem_index); + return SL_STATUS_INVALID_STATE; + } + + // Check if the BLOB id exists at all in the BLOB storage + sl_status_t sc = sl_btmesh_blob_storage_get_blob_size(blob_id, + &blob_size); + if (SL_STATUS_OK != sc) { + log_status_error_f(sc, + LOG_PREFIX "Data Provider setup failed (elem=%d)" NL, + elem_index); + return sc; + } + // If the upper layer is NOT the distribution server then BLOB size parameter + // of sl_btmesh_blob_transfer_client_setup shall be consistent with data size + // parameter of data provider + // Note: if the upper layer is the btmesh_fw_distribution_server then the + // sl_btmesh_blob_transfer_client_setup is not called as the setup + // process is executed automatically in the BT Mesh stack + if (0 == self->blob_size) { + self->blob_size = blob_size; + } else if (self->blob_size != blob_size) { + return SL_STATUS_INVALID_PARAMETER; + } + + self->data_provider.type = BLOB_DATA_PROVIDER_BLOB_STORAGE; + memcpy(&self->data_provider.descriptor.blob_storage.blob_id, + blob_id, + sizeof(self->data_provider.descriptor.blob_storage.blob_id)); + + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_blob_transfer_client_start(uint16_t elem_index, + sl_btmesh_mbt_client_transfer_mode_t transfer_mode, + sl_btmesh_blob_transfer_client_notify_cb_t notify) +{ + (void)elem_index; + blob_transfer_client_t *const self = &blob_tf_client; + + if (transfer_mode == sl_btmesh_mbt_client_mbt_transfer_mode_none) { + return SL_STATUS_INVALID_PARAMETER; + } + + if (0 == state_flags[self->state].idle) { + log_error(LOG_PREFIX + "Start call in non-idle state (elem=%d)" NL, + elem_index); + return SL_STATUS_INVALID_STATE; + } + + if (BLOB_DATA_PROVIDER_NONE == self->data_provider.type) { + return SL_STATUS_INVALID_CONFIGURATION; + } + + self->elem_index = elem_index; + self->transfer_mode = transfer_mode; + self->notify = notify; + + state_transition(self, STATE_SEND_QUERY_INFO); + + if (STATE_SEND_QUERY_INFO != self->state) { + // The state transition might not be successful, if the query information + // BT Mesh stack API call fails (sl_btmesh_mbt_client_query_information) + // however this should not happen. + log_error(LOG_PREFIX + "Start call state transition failed (elem=%d,state=%d)" NL, + elem_index, + self->state); + return SL_STATUS_INVALID_STATE; + } + + return SL_STATUS_OK; +} + +void sl_btmesh_blob_transfer_client_cancel(uint16_t elem_index) +{ + (void) elem_index; + blob_transfer_client_t *const self = &blob_tf_client; + + state_transition(self, STATE_CANCELING); +} + +sl_status_t sl_btmesh_blob_transfer_client_abort(uint16_t elem_index) +{ + (void) elem_index; + blob_transfer_client_t *const self = &blob_tf_client; + + state_transition(self, STATE_INACTIVE); + + return sl_btmesh_mbt_client_abort(self->elem_index); +} + +sl_status_t sl_btmesh_blob_transfer_client_on_aborted(uint16_t elem_index) +{ + (void) elem_index; + sl_status_t sc; + + blob_transfer_client_t *const self = &blob_tf_client; + + if (STATE_INACTIVE != self->state) { + state_transition(self, STATE_INACTIVE); + sc = SL_STATUS_OK; + } else { + sc = SL_STATUS_INVALID_STATE; + } + + return sc; +} + +sl_status_t sl_btmesh_blob_transfer_client_on_suspended(uint16_t elem_index) +{ + (void) elem_index; + sl_status_t sc = SL_STATUS_FAIL; + blob_transfer_client_t *const self = &blob_tf_client; + + if (0 == state_flags[self->state].idle) { + state_transition(self, STATE_SUSPENDED); + sc = SL_STATUS_OK; + } else { + sc = SL_STATUS_INVALID_STATE; + } + + return sc; +} + +sl_status_t sl_btmesh_blob_transfer_client_on_resumed(uint16_t elem_index) +{ + (void) elem_index; + sl_status_t sc = SL_STATUS_FAIL; + blob_transfer_client_t *const self = &blob_tf_client; + + if (STATE_SUSPENDED == self->state) { + state_transition(self, STATE_SEND_TRANSFER_START); + sc = SL_STATUS_OK; + } else { + sc = SL_STATUS_INVALID_STATE; + } + + return sc; +} + +SL_WEAK uint8_t +sl_btmesh_blob_transfer_client_calculate_block_size_log(uint32_t blob_size, + uint8_t block_size_log_min, + uint8_t block_size_log_max, + uint16_t block_count_max, + uint16_t max_chunk_size_min, + uint16_t max_chunks_min) +{ + uint32_t block_size_min_limit, block_size_max_limit; + uint8_t block_size_log = block_size_log_max; + uint32_t block_size = 1UL << block_size_log_max; + + // Block size can't be greater than the product of the maximum chunk size and + // the maximum number of chunks per block + block_size_max_limit = + (uint32_t) max_chunk_size_min * max_chunks_min; + // Minimum block size is limited by the maximum number of blocks, because + // high BLOB size with small blocks leads to too many blocks. + block_size_min_limit = (blob_size + block_count_max - 1) / block_count_max; + + // The default block size calculation prefers the maximum possible block size, + // which leads to the highest transfer speed due to fewer BLOB Block Start + // Block Get and Block Status messages. BLOB Transfer Client has to wait for + // the status message of every BLOB Transfer Server which can add up quite + // fast in a multicast scenario, where there are tens or hundreds of nodes. + // Note: It is unlikely, but possible, that the block_size_log_max is smaller + // than block_size_log_min because the block size log ranges of the + // different BLOB Transfer Servers have no intersection. In this case it + // is not possible to transfer the BLOB to all servers at the same time + // so the implementation chooses the block_size_log_max to send the BLOB + // at least to a subset of servers. + // In general this should not happen in case of firmware image transfer + // because the same kind of updating nodes are updated with the same + // firmware so their capabilities should match. + for (block_size_log = block_size_log_max; + block_size_log_min <= block_size_log; + block_size_log--) { + block_size = 1UL << block_size_log; + if (block_size <= block_size_max_limit) { + break; + } + } + + if ((block_size < block_size_min_limit) + && (block_size_max_limit < block_size)) { + return SL_BTMESH_BLOB_TRANSFER_CLIENT_INVALID_BLOCK_SIZE_LOG; + } + + return block_size_log; +} + +SL_WEAK uint16_t +sl_btmesh_blob_transfer_client_calculate_chunk_size(uint8_t block_size_log, + uint16_t max_chunk_size_min, + uint16_t max_chunks_min, + uint16_t nw_pdu_size) +{ + const uint16_t LOTP_PAYLOAD_PER_SEG_MSG = 12; + const uint16_t LOTP_PAYLOAD_PER_NON_SEG_MSG = 15; + // Protocol overhead of Network Layer + // (IVI+NID) + (CTL+TTL) + SEQ + SRC + DST + NetMIC = 13 bytes + // 1 + 1 + 3 + 2 + 2 + 4 = 13 bytes + const uint16_t NW_MSG_PROT_OVERHEAD = 13; + // Protocol overhead of Lower Transport Layer + // (SEG+AID+AKF) = 1 byte + const uint16_t LOTP_UNSEG_MSG_PROT_OVERHEAD = 1; + // Protocol overhead of Upper Transport Layer: TransMIC (4 bytes) + const uint16_t UPTP_PROT_OVERHEAD = 4; + // BLOB Chunk Transfer access message: Opcode (1byte) + Chunk number (2 byte) + const uint16_t ACCESS_CHUNK_PROT_OVERHEAD = 3; + // Total protocol overhead of upper transport layer and access layer + const uint16_t UPTP_ACCESS_PROT_OVERHEAD = + UPTP_PROT_OVERHEAD + ACCESS_CHUNK_PROT_OVERHEAD; + // BLOB Chunk Transfer unsegmented access message data size + const uint16_t ACCESS_CHUNK_DATA_PER_NON_SEG_MSG = + LOTP_PAYLOAD_PER_NON_SEG_MSG - UPTP_ACCESS_PROT_OVERHEAD; + // Total protocol overhead in NW PDU (unsegmented) + const uint16_t TOTAL_UNSEG_PROT_OVERHEAD = NW_MSG_PROT_OVERHEAD + + LOTP_UNSEG_MSG_PROT_OVERHEAD + + UPTP_PROT_OVERHEAD + + ACCESS_CHUNK_PROT_OVERHEAD; + + uint32_t block_size = 1 << block_size_log; + // The block size and maximum number of chunks limits the chunk size (minimum) + uint16_t min_chunk_size = (block_size + max_chunks_min - 1) / max_chunks_min; + uint16_t chunk_size; + + if (SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_CHUNK_SIZE_CFG_VAL < max_chunk_size_min) { + max_chunk_size_min = SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_CHUNK_SIZE_CFG_VAL; + } + + if (max_chunk_size_min < min_chunk_size) { + // This should not happen if the BLOB transfer servers are configured properly. + // The max_chunk_size_min is returned because it might work for some servers + // when the configurations of BLOB transfer servers are different. + return max_chunk_size_min; + } + + if (STANDARD_NETWORK_PDU_SIZE < nw_pdu_size) { + // The Silicon Labs BT Mesh over Advertisement Extensions proprietary feature + // is enabled so the chunk size is calculated to fit into a single AE packet + // unless the calculated chunk size is not in the allowed chunk size range. + chunk_size = nw_pdu_size - TOTAL_UNSEG_PROT_OVERHEAD; + if (min_chunk_size <= chunk_size && chunk_size <= max_chunk_size_min) { + return chunk_size; + } else if (max_chunk_size_min < chunk_size) { + return max_chunk_size_min; + } else { + // If AE packet can't be used then the chunk size calculation falls back + // to standard BT Mesh 1.0 advertisements. + } + } + + if (max_chunk_size_min <= (2 * LOTP_PAYLOAD_PER_SEG_MSG - UPTP_ACCESS_PROT_OVERHEAD)) { + if (max_chunk_size_min <= ACCESS_CHUNK_DATA_PER_NON_SEG_MSG) { + // If max_chunk_size_min is less than chunk data size which fits into a + // single segment then the max_chunk_size_min is used as the chunk size. + chunk_size = max_chunk_size_min; + } else { + // If the max chunk size does not make it possible to fill two segments + // completely with data then it is not efficient to send segmented messages + // so unsegmented chunks are used if min_chunk_size makes it possible. + if (min_chunk_size <= ACCESS_CHUNK_DATA_PER_NON_SEG_MSG) { + chunk_size = ACCESS_CHUNK_DATA_PER_NON_SEG_MSG; + } else { + chunk_size = max_chunk_size_min; + } + } + } else if (SL_BTMESH_BLOB_TRANSFER_CLIENT_PREF_CHUNK_SIZE_CFG_VAL < min_chunk_size) { + // If the preferred chunk size is less than the min_chunk_size then chunk + // size is set to the closest value which results in full chunk segments. + chunk_size = ((min_chunk_size + UPTP_ACCESS_PROT_OVERHEAD + LOTP_PAYLOAD_PER_SEG_MSG - 1) + / LOTP_PAYLOAD_PER_SEG_MSG) * LOTP_PAYLOAD_PER_SEG_MSG + - UPTP_ACCESS_PROT_OVERHEAD; + if (chunk_size < min_chunk_size || max_chunk_size_min < chunk_size) { + // If selected chunk size does not fit into the allowed chunk size range + // then min_chunk_size is selected. + chunk_size = min_chunk_size; + } + } else if (max_chunk_size_min < SL_BTMESH_BLOB_TRANSFER_CLIENT_PREF_CHUNK_SIZE_CFG_VAL) { + // If the preferred chunk size is greater than the max_chunk_size_min then + // chunk size is set to the closest value which results in full chunk segments. + chunk_size = ((max_chunk_size_min + UPTP_ACCESS_PROT_OVERHEAD) + / LOTP_PAYLOAD_PER_SEG_MSG) * LOTP_PAYLOAD_PER_SEG_MSG + - UPTP_ACCESS_PROT_OVERHEAD; + if (chunk_size < min_chunk_size || max_chunk_size_min < chunk_size) { + // If selected chunk size does not fit into the allowed chunk size range + // then max_chunk_size_min is selected. + chunk_size = max_chunk_size_min; + } + } else { + // The preferred chunk size is selected if it fits into the allowed + // chunk size range. + chunk_size = SL_BTMESH_BLOB_TRANSFER_CLIENT_PREF_CHUNK_SIZE_CFG_VAL; + } + + return chunk_size; +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions +// ----------------------------------------------------------------------------- + +static void notify_transfer_result(blob_transfer_client_t *const self, + sl_btmesh_blob_transfer_client_result_t result) +{ + if (NULL != self->notify) { + sl_btmesh_blob_transfer_client_notification_t notification; + notification.kind = SL_BTMESH_BLOB_TRANSFER_CLIENT_KIND_TRANSFER_RESULT; + notification.elem_index = self->elem_index; + notification.params.transfer_result = result; + self->notify(¬ification); + } +} + +static void notify_progress(blob_transfer_client_t *const self, + uint32_t confirmed_tx_bytes) +{ + if (NULL != self->notify) { + sl_btmesh_blob_transfer_client_notification_t notification; + notification.kind = SL_BTMESH_BLOB_TRANSFER_CLIENT_KIND_PROGRESS; + notification.elem_index = self->elem_index; + notification.params.progress.confirmed_tx_bytes = confirmed_tx_bytes; + notification.params.progress.blob_size = self->blob_size; + self->notify(¬ification); + } +} + +static void notify_server_failed(blob_transfer_client_t *const self, + uint16_t server_address, + uint8_t timeout, + uint8_t error) +{ + if (NULL != self->notify) { + sl_btmesh_blob_transfer_client_notification_t notification; + notification.kind = SL_BTMESH_BLOB_TRANSFER_CLIENT_KIND_SERVER_FAILED; + notification.elem_index = self->elem_index; + notification.params.server_failed.server_address = server_address; + notification.params.server_failed.timeout = timeout; + notification.params.server_failed.error = error; + self->notify(¬ification); + } +} + +static void process_transfer_failed(blob_transfer_client_t *const self) +{ + notify_transfer_result(self, + SL_BTMESH_BLOB_TRANSFER_CLIENT_RESULT_FAILED); + state_transition(self, STATE_TRANSFER_FAILED); +} + +static void start_retry_timer(blob_transfer_client_t *const self) +{ + sl_status_t sc; + + if (0 == self->retry_time_ms) { + // If the retry time is zero then it means that the retry shall be performed + // immediately after the current messages are sent to the server. + // (tx complete) + retry_timer_cb(&self->retry_timer, self); + } else { + // Wait for the retry time to provide some time for the servers to respond + // This also spares bandwidth, because the BLOB transfer client does not + // flood the mesh network with messages + sc = sl_simple_timer_start(&self->retry_timer, + self->retry_time_ms, + retry_timer_cb, + self, + false); + app_assert_status_f(sc, + "Failed to start retry timer (elem=%d)", + self->elem_index); + } +} + +static void restart_retry_timer(blob_transfer_client_t *const self) +{ + // In case in the meantime the state-machine transitioned into a state without + // retry, to avoid unintended behavior. + if (!state_flags[self->state].retry) { + return; + } + start_retry_timer(self); +} + +static void stop_retry_timer(blob_transfer_client_t *const self) +{ + // It is not considered an error, if stop is requested for a timer which is + // not running therefore stop is always called here to be safe + sl_status_t sc = sl_simple_timer_stop(&self->retry_timer); + + app_assert_status_f(sc, + "Failed to stop retry timer (elem=%d)", + self->elem_index); +} + +static void start_separation_timer(blob_transfer_client_t *const self) +{ + sl_status_t sc; + + if (0 == self->separation_time_ms) { + /* + * If the separation time is zero then the callback function shall be called + * immediately and it is not necessary to start the timer at all + */ + separation_timer_cb(&self->separation_timer, self); + } else { + /* + * Wait the separation time to have some idle time between mesh messages + * to avoid flooding the mesh network with messages + */ + sc = sl_simple_timer_start(&self->separation_timer, + self->separation_time_ms, + separation_timer_cb, + self, + false); + app_assert_status_f(sc, + "Failed to start separation timer (elem=%d)", + self->elem_index); + } +} + +static void stop_separation_timer(blob_transfer_client_t *const self) +{ + // It is not considered an error, if stop is requested for a timer which is + // not running therefore stop is always called here to be safe + sl_status_t sc = sl_simple_timer_stop(&self->separation_timer); + + app_assert_status_f(sc, + "Failed to stop separation timer (elem=%d)", + self->elem_index); +} + +static void sl_btmesh_blob_transfer_client_element_init(uint16_t elem_index) +{ + sl_status_t sc; + blob_transfer_client_t *const self = &blob_tf_client; + + self->data_provider.type = BLOB_DATA_PROVIDER_NONE; + self->elem_index = elem_index; + self->state = STATE_UNINIT; + + sc = sl_btmesh_mbt_client_init(elem_index, + SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_SERVERS_CFG_VAL, + SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_BLOCKS_CFG_VAL, + SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_CHUNKS_PER_BLOCK_CFG_VAL); + + app_assert_status_f(sc, "Failed to init BLOB Transfer Client"); + + state_transition(self, STATE_INACTIVE); +} + +static void sl_btmesh_blob_transfer_client_init(void) +{ + sl_btmesh_blob_transfer_client_element_init(BTMESH_BLOB_TRANSFER_CLIENT_MAIN); +} + +// Process the return value of MBT procedure BT Mesh stack API calls in retry state +static void process_mbt_procedure_status(blob_transfer_client_t *const self, + sl_status_t sc) +{ + if (SL_STATUS_OK != sc) { + if ((SL_STATUS_BUSY == sc) || (SL_STATUS_NO_MORE_RESOURCE == sc)) { + // The retry counter is not incremented here, because the message was not + // sent at all due to busy transport layer or not enough memory but the + // current operation shall be retried later + start_retry_timer(self); + } else { + // The retry counter is incremented to reduce number of retries in case + // of unrecoverable errors but the retry timer is started for additional + // robustness in case of unexpected temporary errors + if ((self->retry_counter + 1) < self->retry_max) { + // The retry counter is incremented by 2 overall (other in state_transition) + self->retry_counter++; + start_retry_timer(self); + } + } + } +} + +static void super_state_idle_entry(blob_transfer_client_t *const self) +{ + self->data_provider.type = BLOB_DATA_PROVIDER_NONE; + self->separation_time_ms = SL_BTMESH_BLOB_TRANSFER_CLIENT_SEPARATION_TIME_MS_DEFAULT_CFG_VAL; + self->retry_max = SL_BTMESH_BLOB_TRANSFER_CLIENT_RETRY_MAX_DEFAULT_CFG_VAL; + self->retry_time_ms = SL_BTMESH_BLOB_TRANSFER_CLIENT_RETRY_TIME_MS_DEFAULT_CFG_VAL; + self->blob_size = 0; +} + +static void state_send_query_info_entry(blob_transfer_client_t *const self) +{ + sl_status_t sc; + + // Send the BLOB Information Get messages to the BLOB Transfer servers. + // Based on the multicast threshold multiple messages could be sent. + // Multiple BLOB transfer server can receive the messages + sc = sl_btmesh_mbt_client_query_information(self->elem_index); + + log_info(LOG_PREFIX "Query Info procedure %s%s(elem=%d)" NL, + (0 < self->retry_counter) ? "retry " : "", + (SL_STATUS_BUSY == sc) ? "busy " + : ((SL_STATUS_NO_MORE_RESOURCE == sc) ? "no memory " : ""), + self->elem_index); + + process_mbt_procedure_status(self, sc); + log_procedure_status_error(sc, "Query Info", self->elem_index); +} + +static void state_send_transfer_start_entry(blob_transfer_client_t *const self) +{ + sl_status_t sc; + + // Send the BLOB Transfer Start messages to the BLOB Transfer servers. + // Based on the multicast threshold multiple messages could be sent. + // Multiple BLOB transfer server can receive the messages + sc = sl_btmesh_mbt_client_start_transfer(self->elem_index, + self->block_size_log, + self->transfer_mode); + + log_info(LOG_PREFIX "Start procedure %s%s(elem=%d,blk_log=%d,tf_mode=%s)" NL, + (0 < self->retry_counter) ? "retry " : "", + (SL_STATUS_BUSY == sc) ? "busy " + : ((SL_STATUS_NO_MORE_RESOURCE == sc) ? "no memory " : ""), + self->elem_index, + self->block_size_log, + sl_btmesh_blob_transfer_client_transfer_mode_to_string(self->transfer_mode)); + + process_mbt_procedure_status(self, sc); + log_procedure_status_error(sc, "Start", self->elem_index); +} + +static void state_send_start_block_entry(blob_transfer_client_t *const self) +{ + sl_status_t sc; + uint16_t block_number = 0; + uint32_t block_size = 0; + + // Send the BLOB Transfer Block Start messages to the BLOB Transfer servers. + // Based on the multicast threshold multiple messages could be sent. + // Multiple BLOB transfer server can receive the messages + // Note: the block number and block size are not used here, because those are + // set in the block start complete event. + sc = sl_btmesh_mbt_client_start_block(self->elem_index, + self->current_block_chunk_size, + &block_number, + &block_size); + + log_info(LOG_PREFIX "Block Start procedure %s%s(elem=%d,chunk_size=%d)" NL, + (0 < self->retry_counter) ? "retry " : "", + (SL_STATUS_BUSY == sc) ? "busy " + : ((SL_STATUS_NO_MORE_RESOURCE == sc) ? "no memory " : ""), + self->elem_index, + self->current_block_chunk_size); + + process_mbt_procedure_status(self, sc); + log_procedure_status_error(sc, "Block Start", self->elem_index); +} + +static void state_send_block_query_entry(blob_transfer_client_t *const self) +{ + sl_status_t sc; + + sc = sl_btmesh_mbt_client_query_block_status(self->elem_index); + + log_info(LOG_PREFIX "Block Query procedure %s%s(elem=%d)" NL, + (0 < self->retry_counter) ? "retry " : "", + (SL_STATUS_BUSY == sc) ? "busy " + : ((SL_STATUS_NO_MORE_RESOURCE == sc) ? "no memory " : ""), + self->elem_index); + + process_mbt_procedure_status(self, sc); + log_procedure_status_error(sc, "Block Query", self->elem_index); +} + +static void state_send_cancel(blob_transfer_client_t *const self) +{ + sl_status_t sc; + + sc = sl_btmesh_mbt_client_cancel_transfer(self->elem_index); + + log_info(LOG_PREFIX "Transfer Cancel procedure %s%s(elem=%d)" NL, + (0 < self->retry_counter) ? "retry " : "", + (SL_STATUS_BUSY == sc) ? "busy " + : ((SL_STATUS_NO_MORE_RESOURCE == sc) ? "no memory " : ""), + self->elem_index); + + process_mbt_procedure_status(self, sc); + log_procedure_status_error(sc, "Cancel", self->elem_index); +} + +static void send_chunk(blob_transfer_client_t *const self) +{ + // This is a sanity check to avoid buffer overflow, but this should not happen + // due to the max chunk size saturation in handle_query_information_complete + if (SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_CHUNK_SIZE_CFG_VAL < self->current_chunk_length) { + log_error(LOG_PREFIX "chunk length is too high (elem=%d," + "chunk_len=0x%04X,chunk_len_max=0x%04X)" NL, + self->elem_index, + self->current_chunk_length, + SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_CHUNK_SIZE_CFG_VAL); + process_transfer_failed(self); + return; + } + + self->chunk_requested = false; + self->separation_time_elapsed = false; + + if (BLOB_DATA_PROVIDER_ARRAY == self->data_provider.type) { + self->chunk_data_ptr = + &self->data_provider.descriptor.array.data[self->current_chunk_offset]; + const uint32_t array_length = self->data_provider.descriptor.array.length; + + if (array_length < self->current_chunk_offset + self->current_chunk_length) { + log_error(LOG_PREFIX + "length mismatch when read from array provider " + "(elem=%d,offset=0x%08lX,chunk_len=0x%04X,array_len=0x%08lX)" NL, + self->elem_index, + self->current_chunk_offset, + self->current_chunk_length, + array_length); + process_transfer_failed(self); + return; + } + } else if (BLOB_DATA_PROVIDER_BLOB_STORAGE == self->data_provider.type) { + sl_status_t sc; + uint32_t chunk_length = self->current_chunk_length; + const sl_bt_uuid_64_t *blob_id = + &self->data_provider.descriptor.blob_storage.blob_id; + self->chunk_data_ptr = &self->chunk_data[0]; + + sc = sl_btmesh_blob_storage_read(blob_id, + self->current_chunk_offset, + &chunk_length, + &self->chunk_data[0]); + if (SL_STATUS_OK != sc) { + log_status_error_f(sc, + LOG_PREFIX + "failed to read from BLOB storage " + "(elem=%d,blobid=%s,offset=0x%08lX,chunk_len=0x%04X)" NL, + self->elem_index, + BLOB_ID_TO_STRING(blob_id), + self->current_chunk_offset, + self->current_chunk_length); + process_transfer_failed(self); + return; + } else if (chunk_length != self->current_chunk_length) { + // The length of the read data is less than the requested + log_error(LOG_PREFIX + "BLOB storage read length mismatch (elem=%d,blobid=%s," + "offset=0x%08lX,req_chunk_len=0x%04X,is_chunk_len=0x%04lX)" NL, + self->elem_index, + BLOB_ID_TO_STRING(blob_id), + self->current_chunk_offset, + self->current_chunk_length, + chunk_length); + process_transfer_failed(self); + return; + } + } else { + // This is an unexpected error, as previous state machine state makes sure + // this should not happen so the transfer is stopped and a log message + // is emitted + log_error(LOG_PREFIX "invalid data provider" NL); + process_transfer_failed(self); + return; + } + + // Chunk request has its own retry mechanism + send_chunk_request_response(&self->retry_timer, self); +} + +static void handle_server_information_status(blob_transfer_client_t *const self, + const sl_btmesh_evt_mbt_client_server_information_status_t *const evt) +{ + (void)evt; // To suppress the warning if the logging is disabled + + // Restart the timer since we know in case this event is handled, that the + // message was sent out properly. However, we don't stop the retry timer, + // since if any node doesn't respond, we still need to retry. + restart_retry_timer(self); + +#if (SL_BTMESH_BLOB_TRANSFER_CLIENT_LOG_BLOB_STATUS_MSG_CFG_VAL != 0) + // This event is triggered, if one BLOB Information Status message is received + // from a specific server. The BT Mesh stack waits for the status message of + // every server and triggers the query information complete event with the + // block and chunk parameters supported by every server. + // This means that it is not necessary to store the information about every + // server as the stack aggregates them and provides it in another event. + // The individual information could be useful for analysis and diagnostics + // so it is logged. + log_info(LOG_PREFIX + "Info received (elem=%d,addr=0x%04X,blk_log=%d-%d," + "max_chunk_size=0x%04X,max_chunks=%d)" NL, + evt->elem_index, + evt->server_address, + evt->min_block_size_log, + evt->max_block_size_log, + evt->max_chunk_size, + evt->max_chunks); +#endif // SL_BTMESH_BLOB_TRANSFER_CLIENT_LOG_BLOB_STATUS_MSG_CFG_VAL +} + +static void handle_server_transfer_status(blob_transfer_client_t *const self, + const sl_btmesh_evt_mbt_client_server_transfer_status_t *const evt) +{ + (void)evt; // To suppress the warning if the logging is disabled + + // Restart the timer since we know in case this event is handled, that the + // message was sent out properly. However, we don't stop the retry timer, + // since if any node doesn't respond, we still need to retry. + restart_retry_timer(self); + +#if (SL_BTMESH_BLOB_TRANSFER_CLIENT_LOG_BLOB_STATUS_MSG_CFG_VAL != 0) + log_info(LOG_PREFIX + "Transfer Status received (elem=%d,addr=0x%04X,status=%s," + "phase=%s,blobid=%s,blob_size=0x%08lX,blk_log=%d", + evt->elem_index, + evt->server_address, + mbt_status_to_string(evt->status), + mbt_phase_to_string(evt->phase), + BLOB_ID_TO_STRING(&evt->blob_id), + evt->blob_size, + evt->block_size_log); + if (0 < evt->blocks_not_received.len) { + log_append_info(",miss_blks="); + log_hexdump_info(evt->blocks_not_received.data, evt->blocks_not_received.len); + } + log_append_info(")" NL); +#endif // SL_BTMESH_BLOB_TRANSFER_CLIENT_LOG_BLOB_STATUS_MSG_CFG_VAL +} + +static void handle_server_block_status(blob_transfer_client_t *const self, + const sl_btmesh_evt_mbt_client_server_block_status_t *const evt) +{ + (void)evt; // To suppress the warning if the logging is disabled + + // Restart the timer since we know in case this event is handled, that the + // message was sent out properly. However, we don't stop the retry timer, + // since if any node doesn't respond, we still need to retry. + restart_retry_timer(self); + +#if (SL_BTMESH_BLOB_TRANSFER_CLIENT_LOG_BLOB_STATUS_MSG_CFG_VAL != 0) + log_info(LOG_PREFIX "Block Status received (elem=%d,addr=0x%04X,status=%s", + evt->elem_index, + evt->server_address, + mbt_status_to_string(evt->status)); + if (0 < evt->missing_chunks.len) { + log_append_info(",miss_chunks="); + log_hexdump_info(evt->missing_chunks.data, evt->missing_chunks.len); + } + log_append_info(")" NL); +#endif // SL_BTMESH_BLOB_TRANSFER_CLIENT_LOG_BLOB_STATUS_MSG_CFG_VAL +} + +static void handle_server_partial_block_report(blob_transfer_client_t *const self, + const sl_btmesh_evt_mbt_client_server_partial_block_report_t *const evt) +{ + (void)self; + (void)evt; // To suppress the warning if the logging is disabled + +#if (SL_BTMESH_BLOB_TRANSFER_CLIENT_LOG_BLOB_STATUS_MSG_CFG_VAL != 0) + log_info(LOG_PREFIX "Partial Block Report received (elem=%d,addr=0x%04X", + evt->elem_index, + evt->server_address); + if (0 < evt->missing_chunks.len) { + log_append_info(",miss_chunks="); + log_hexdump_info(evt->missing_chunks.data, evt->missing_chunks.len); + } + log_append_info(")" NL); +#endif // SL_BTMESH_BLOB_TRANSFER_CLIENT_LOG_BLOB_STATUS_MSG_CFG_VAL +} + +static void handle_query_information_complete(blob_transfer_client_t *const self, + const sl_btmesh_evt_mbt_client_query_information_complete_t *const evt) +{ + if (STATE_SEND_QUERY_INFO == self->state) { + self->max_chunks_min = evt->max_chunks_min; + + if (SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_CHUNK_SIZE_CFG_VAL < evt->max_chunk_size_min) { + self->max_chunk_size_min = SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_CHUNK_SIZE_CFG_VAL; + } else { + self->max_chunk_size_min = evt->max_chunk_size_min; + } + + self->block_size_log = + sl_btmesh_blob_transfer_client_calculate_block_size_log(self->blob_size, + evt->block_size_log_min, + evt->block_size_log_max, + SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_BLOCKS_CFG_VAL, + self->max_chunk_size_min, + evt->max_chunks_min); + if (INVALID_BLOCK_SIZE_LOG == self->block_size_log) { + self->block_size_log = evt->block_size_log_max; + log_error(LOG_PREFIX + "Block Size Calculation failed defaults to Block Size Log Max" + "(elem=%d,blob_size=0x%08lX,blk_log=%d-%d,blk_cnt_max=%d," + "max_chunk_size=0x%04X,max_chunks=%d)" NL, + evt->elem_index, + self->blob_size, + evt->block_size_log_min, + evt->block_size_log_max, + SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_BLOCKS_CFG_VAL, + evt->max_chunk_size_min, + evt->max_chunks_min); + } + + sl_btmesh_mbt_client_transfer_mode_t supported_transfer_modes = + (sl_btmesh_mbt_client_transfer_mode_t) evt->supported_transfer_modes; + sl_btmesh_mbt_client_transfer_mode_t common_transfer_modes = + (sl_btmesh_mbt_client_transfer_mode_t) evt->common_transfer_modes; + + // The supported_transfer_modes is used for logging only + (void) supported_transfer_modes; + + log_info(LOG_PREFIX + "Query Info Complete " + "(elem=%d,blk_log=%d-%d,max_chunk_size=0x%04X,max_chunks=%d," + "sup_tf_mode=%s,com_tf_mode=%s)" NL, + evt->elem_index, + evt->block_size_log_min, + evt->block_size_log_max, + evt->max_chunk_size_min, + evt->max_chunks_min, + sl_btmesh_blob_transfer_client_transfer_mode_to_string(supported_transfer_modes), + sl_btmesh_blob_transfer_client_transfer_mode_to_string(common_transfer_modes)); + + if (sl_btmesh_mbt_client_mbt_transfer_mode_both == self->transfer_mode) { + // The transfer mode shall be set by the query info completely + switch (common_transfer_modes) { + case sl_btmesh_mbt_client_mbt_transfer_mode_push: + case sl_btmesh_mbt_client_mbt_transfer_mode_pull: + self->transfer_mode = common_transfer_modes; + break; + case sl_btmesh_mbt_client_mbt_transfer_mode_both: + // Push mode shall be the default if both transfer modes are supported + case sl_btmesh_mbt_client_mbt_transfer_mode_none: + // Subset of updating nodes can participate in the BLOB transfer because + // neither transfer mode is supported by all nodes (defaults to push) + // Note: it is not necessary to check the supported_transfer_modes in + // the event because it must have "both" value otherwise the + // common_transfer_modes would not be "none" + default: + self->transfer_mode = sl_btmesh_mbt_client_mbt_transfer_mode_push; + break; + } + } + state_transition(self, STATE_SEND_TRANSFER_START); + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX + "unexpected Query Info Complete event " + "(elem=%d,state=%d)" NL, + self->elem_index, + self->state); + } +} + +static void handle_start_transfer_complete(blob_transfer_client_t *const self, + const sl_btmesh_evt_mbt_client_start_transfer_complete_t *const evt) +{ + (void)evt; // To suppress the warning if the logging is disabled + uint16_t nw_pdu_size = STANDARD_NETWORK_PDU_SIZE; + + if (STATE_SEND_TRANSFER_START == self->state) { + log_info(LOG_PREFIX "Start Transfer Complete (elem=%d)" NL, + evt->elem_index); + +#ifdef SL_CATALOG_BTMESH_AE_SERVER_PRESENT + sl_status_t sc_nw, sc_mdl; + uint16_t configured_nw_pdu_size = STANDARD_NETWORK_PDU_SIZE; + uint16_t blob_transfer_client_ae_enabled = false; + sc_nw = sl_btmesh_silabs_config_server_get_network_pdu(&configured_nw_pdu_size); + sc_mdl = sl_btmesh_silabs_config_server_get_model_enable(self->elem_index, + SIG_VENDOR_ID, + MESH_MBT_SERVER_MODEL_ID, + &blob_transfer_client_ae_enabled); + if (sc_nw == SL_STATUS_OK && sc_mdl == SL_STATUS_OK) { + if (blob_transfer_client_ae_enabled) { + nw_pdu_size = configured_nw_pdu_size; + } else { + nw_pdu_size = STANDARD_NETWORK_PDU_SIZE; + } + } else { + log_status_error_f(sc_nw, + LOG_PREFIX + "failed to query network PDU size (elem=%d)" NL, + self->elem_index); + log_status_error_f(sc_nw, + LOG_PREFIX + "failed to query BLOB Transfer Client model AE status " + "(elem=%d)" NL, + self->elem_index); + } +#endif // SL_CATALOG_BTMESH_AE_SERVER_PRESENT + + self->current_block_chunk_size = + sl_btmesh_blob_transfer_client_calculate_chunk_size(self->block_size_log, + self->max_chunk_size_min, + self->max_chunks_min, + nw_pdu_size); + + // This is last event handler before the transfer of the blocks is started + // therefore the progress notification with zero confirmed tx bytes shall + // be emitted here + notify_progress(self, 0); + + state_transition(self, STATE_SEND_BLOCK_START); + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX + "unexpected Start Transfer Complete event " + "(elem=%d,state=%d)" NL, + self->elem_index, + self->state); + } +} + +static void handle_start_block_complete(blob_transfer_client_t *const self, + const sl_btmesh_evt_mbt_client_start_block_complete_t *const evt) +{ + (void)evt; // To suppress the warning if the logging is disabled + + if (STATE_SEND_BLOCK_START == self->state) { + self->current_block_number = evt->block_number; + log_info(LOG_PREFIX + "Start Block Complete (elem=%d,blk_idx=%d,blk_num=%d,blk_size=%lu)" NL, + evt->elem_index, + evt->block_number, + calc_total_block_count(self), + evt->block_size); + + state_transition(self, STATE_SEND_CHUNKS); + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX "unexpected Start Block Complete event " + "(elem=%d,state=%d)" NL, + self->elem_index, + self->state); + } +} + +static void handle_send_chunk_request(blob_transfer_client_t *const self, + const sl_btmesh_evt_mbt_client_send_chunk_request_t *const evt) +{ + if (STATE_SEND_CHUNKS == self->state) { + self->chunk_requested = true; + self->current_chunk_offset = evt->offset; + self->current_chunk_length = evt->length; + + if (false != self->separation_time_elapsed) { + // The chunk data is transmitted at the first chunk of the block, because + // separation time is measured between chunks of the same block therefore + // the first chunk shall be sent in this event handler. + // + // If the separation time is zero then the handle_tx_complete sets the + // separation_time_elapsed flag therefore this event handler sends the + // chunk immediately. + send_chunk(self); + } + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX + "unexpected Send Chunk Request event (elem=%d,state=%d)" NL, + self->elem_index, + self->state); + } +} + +static void handle_send_chunks_complete(blob_transfer_client_t *const self, + const sl_btmesh_evt_mbt_client_send_chunks_complete_t *const evt) +{ + (void)evt; + if (STATE_SEND_CHUNKS == self->state) { + state_transition(self, STATE_SEND_BLOCK_QUERY); + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX + "unexpected Send Chunks Complete event (elem=%d,state=%d)" NL, + self->elem_index, + self->state); + } +} + +static void handle_query_block_status_complete(blob_transfer_client_t *const self, + const sl_btmesh_evt_mbt_client_query_block_status_complete_t *const evt) +{ + if (STATE_SEND_BLOCK_QUERY == self->state) { + uint32_t confirmed_tx_bytes; + uint16_t completed_block_count = self->current_block_number + + (0 != evt->block_complete); + + if (completed_block_count < calc_total_block_count(self)) { + confirmed_tx_bytes = completed_block_count + * (1UL << self->block_size_log); + } else { + confirmed_tx_bytes = self->blob_size; + } + + log_info(LOG_PREFIX + "Query Block Status Complete " + "(elem=%d,blk_done=%d,transfer_done=%d,progress=%u%%)" NL, + evt->elem_index, + evt->block_complete, + evt->transfer_complete, + (unsigned) (100 * confirmed_tx_bytes / self->blob_size)); + + if (0 != evt->transfer_complete) { + notify_progress(self, self->blob_size); + } else if (0 != evt->block_complete) { + notify_progress(self, confirmed_tx_bytes); + state_transition(self, STATE_SEND_BLOCK_START); + } else { + state_transition(self, STATE_SEND_CHUNKS); + } + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX + "unexpected Query Block Status Complete event (elem=%d,state=%d)" NL, + self->elem_index, + self->state); + } +} + +static void handle_tx_complete(blob_transfer_client_t *const self) +{ + // If the state supports retry, then it shall start the retry timer if the max + // number of retries is not reached. + // If the maximum number of retries is reached, then the state machine waits + // in the current state until the BT Mesh stack drops the nonresponding BLOB + // servers and continues with the active servers. (BT Mesh stack event) + if (0 != state_flags[self->state].retry) { + if (self->retry_counter < self->retry_max) { + start_retry_timer(self); + } + } + + // If multiple consecutive mesh messages need to be sent (send chunks), then + // the separation time feature makes it possible to introduce a separation + // time between these messages in order to spare the bandwidth for another + // nodes + if (0 != state_flags[self->state].separation) { + // The separation time is started after the last message as well, because + // this component is not able to determine which message is the last. + // For example in case of push mode BLOB transfer the chunks are not sent + // in order especially when the missing chunks are sent. + // The timer is started after the last chunk, however it will be stopped by + // the state exit code when the state transition occurs due to the send + // chunks complete event. Even if the timer elapses only a flag is set and + // the send chunk function won't be called because the chunk_requested flag + // is not set. + start_separation_timer(self); + } +} + +static void handle_server_failed(blob_transfer_client_t *const self, + const sl_btmesh_evt_mbt_client_server_failed_t *const evt) +{ + if (0 == state_flags[self->state].idle) { + log_info(LOG_PREFIX + "Server Failed received (elem=%d,addr=0x%04X,timeout=%d,err=%s)" NL, + evt->elem_index, + evt->server_address, + evt->timeout, + mbt_status_to_string(evt->error)); + + // Send notification to the upper layer about the BLOB Transfer Server failure + notify_server_failed(self, evt->server_address, evt->timeout, evt->error); + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX + "unexpected Server Failed event (elem=%d,state=%d)" NL, + self->elem_index, + self->state); + } +} + +static void handle_transfer_complete(blob_transfer_client_t *const self) +{ + const uint16_t max_server_count = SL_BTMESH_BLOB_TRANSFER_CLIENT_MAX_SERVERS_CFG_VAL; + uint16_t server_count = 0, failed_server_count = 0; + uint16_t server_address = 0, rx_blocks = 0, rx_chunks = 0; + uint8_t current_procedure_status; + bool all_server_failed = false; + sl_status_t sc; + + if (0 == state_flags[self->state].idle) { + // Iterate over the BLOB transfer servers to check their status + // The number of servers in the BLOB transfer is not known but the maximum + // server count is known because that is an initialization parameter of the + // BT Mesh stack MBT client model. The server count can be determined by + // checking the return value of sl_btmesh_mbt_client_get_server_status. + for (uint16_t server_idx = 0; server_idx < max_server_count; server_idx++) { + sc = sl_btmesh_mbt_client_get_server_status(self->elem_index, + server_idx, + &server_address, + ¤t_procedure_status, + &rx_blocks, + &rx_chunks); + if (sc == SL_STATUS_OK) { + sl_btmesh_mbt_client_server_status_t server_status; + server_status = (sl_btmesh_mbt_client_server_status_t) current_procedure_status; + server_count++; + if (server_status == sl_btmesh_mbt_client_server_status_error) { + failed_server_count++; + } + } else if ((sc == SL_STATUS_BT_MESH_DOES_NOT_EXIST) && (server_idx != 0)) { + // The BT Mesh stack returns SL_STATUS_BT_MESH_DOES_NOT_EXIST when the + // server index does not exists so it is possible to determine the number + // of servers by checking this return value. + // The server with zero index shall exist because a BLOB transfer shall + // have at least one BLOB transfer server, and consequently the first + // sl_btmesh_mbt_client_get_server_status BT Mesh stack call can return + // the SL_STATUS_BT_MESH_DOES_NOT_EXIST return value because of an error. + break; + } else { + // Unexpected error so the BLOB transfer is considered to be failed + all_server_failed = true; + log_status_error_f(sc, + LOG_PREFIX "failed to get server status " + "(elem=%d,server_idx=%u)" NL, + self->elem_index, + server_idx); + break; + } + } + + all_server_failed = (server_count == failed_server_count); + + if (all_server_failed) { + process_transfer_failed(self); + } else if (self->state == STATE_CANCELING) { + notify_transfer_result(self, + SL_BTMESH_BLOB_TRANSFER_CLIENT_RESULT_CANCELED); + state_transition(self, STATE_TRANSFER_CANCELED); + } else { + notify_transfer_result(self, + SL_BTMESH_BLOB_TRANSFER_CLIENT_RESULT_COMPLETED); + state_transition(self, STATE_TRANSFER_COMPLETED); + } + } +} + +static void retry_timer_cb(sl_simple_timer_t *timer, void *data) +{ + (void) timer; + blob_transfer_client_t *const self = data; + + app_assert(NULL != data, "The data is NULL in retry timer callback"); + + // Register that the retry timer elapsed which is important in states which + // support retries because it clears the retry counter only if the state is + // entered the first time and not as the result of a retry (self transition). + self->retry_time_elapsed = true; + + // If the retry time elapsed then a self transition is executed in order to + // run the state actions again. The current state is left and entered again + // which means the entry and exit functions are called again therefore this + // implements the retry. + state_transition(self, self->state); +} + +static void separation_timer_cb(sl_simple_timer_t *timer, void *data) +{ + (void) timer; + blob_transfer_client_t *const self = data; + + app_assert(NULL != data, "The data is NULL in retry timer callback"); + + self->separation_time_elapsed = true; + + if (false != self->chunk_requested) { + send_chunk(self); + } +} + +static void send_chunk_request_response(sl_simple_timer_t *timer, void *data) +{ + sl_status_t sc; + + blob_transfer_client_t *const self = data; + + sc = sl_btmesh_mbt_client_send_chunk_request_rsp(self->elem_index, + self->current_chunk_length, + self->chunk_data_ptr); + + switch (sc) { + default: + log_status_error_f(sc, + LOG_PREFIX "Send Chunk failed (elem=%d,chunk_len=0x%04X)" NL, + self->elem_index, + self->current_chunk_length); + process_transfer_failed(self); + break; + case SL_STATUS_BUSY: + case SL_STATUS_NO_MORE_RESOURCE: + // In these two cases, start the retry timer with this callback function + sc = sl_simple_timer_start(timer, + self->retry_time_ms, + send_chunk_request_response, + &data, + false); + app_assert_status_f(sc, + "Failed to start chunk request response retry timer (elem=%d)", + self->elem_index); + break; + case SL_STATUS_OK: + // The chunk request is frequent so it is logged only in debug mode + log_debug(LOG_PREFIX "Send Chunk (elem=%d,offset=0x%08lX,chunk_len=0x%04X)" NL, + self->elem_index, + self->current_chunk_offset, + self->current_chunk_length); + break; + } +} + +void sl_btmesh_blob_transfer_client_on_event(const sl_btmesh_msg_t * const evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_provisioned_id: { + sl_btmesh_blob_transfer_client_init(); + break; + } + case sl_btmesh_evt_node_initialized_id: { + if (0 != evt->data.evt_node_initialized.provisioned) { + sl_btmesh_blob_transfer_client_init(); + } + break; + } + case sl_btmesh_evt_mbt_client_server_information_status_id: { + handle_server_information_status( + &blob_tf_client, + &evt->data.evt_mbt_client_server_information_status); + break; + } + case sl_btmesh_evt_mbt_client_server_transfer_status_id: { + handle_server_transfer_status( + &blob_tf_client, + &evt->data.evt_mbt_client_server_transfer_status); + break; + } + case sl_btmesh_evt_mbt_client_server_block_status_id: { + handle_server_block_status( + &blob_tf_client, + &evt->data.evt_mbt_client_server_block_status); + break; + } + case sl_btmesh_evt_mbt_client_server_partial_block_report_id: { + handle_server_partial_block_report( + &blob_tf_client, + &evt->data.evt_mbt_client_server_partial_block_report); + break; + } + case sl_btmesh_evt_mbt_client_query_information_complete_id: { + handle_query_information_complete( + &blob_tf_client, + &evt->data.evt_mbt_client_query_information_complete); + break; + } + case sl_btmesh_evt_mbt_client_start_transfer_complete_id: { + handle_start_transfer_complete( + &blob_tf_client, + &evt->data.evt_mbt_client_start_transfer_complete); + break; + } + case sl_btmesh_evt_mbt_client_start_block_complete_id: { + handle_start_block_complete( + &blob_tf_client, + &evt->data.evt_mbt_client_start_block_complete); + break; + } + case sl_btmesh_evt_mbt_client_send_chunk_request_id: { + handle_send_chunk_request( + &blob_tf_client, + &evt->data.evt_mbt_client_send_chunk_request); + break; + } + case sl_btmesh_evt_mbt_client_send_chunks_complete_id: { + handle_send_chunks_complete( + &blob_tf_client, + &evt->data.evt_mbt_client_send_chunks_complete); + break; + } + case sl_btmesh_evt_mbt_client_query_block_status_complete_id: { + handle_query_block_status_complete( + &blob_tf_client, + &evt->data.evt_mbt_client_query_block_status_complete); + break; + } + case sl_btmesh_evt_mbt_client_tx_complete_id: { + handle_tx_complete(&blob_tf_client); + break; + } + case sl_btmesh_evt_mbt_client_server_failed_id: { + handle_server_failed(&blob_tf_client, + &evt->data.evt_mbt_client_server_failed); + break; + } + case sl_btmesh_evt_mbt_client_transfer_complete_id: { + handle_transfer_complete(&blob_tf_client); + break; + } + } +} + +static void state_transition(blob_transfer_client_t *const self, + blob_transfer_client_state_t target_state) +{ + blob_transfer_client_state_flags_t source_state_flags, target_state_flags; + + app_assert_s(target_state < STATE_COUNT); + + source_state_flags = state_flags[self->state]; + target_state_flags = state_flags[target_state]; + + // No state can support the separation and retry at the same time because + // only one simple timer data structure is allocated, therefore only one timer + // can run at any point of time in the BLOB Transfer Client + app_assert_s((0 == source_state_flags.retry) + || (0 == source_state_flags.separation)); + + // If a state with the retry feature is exited, then the retry timer shall + // be stopped, even in case of a retry self-transition, because in this case + // the retry timer is started again by the tx complete event handler + // Note: it is not considered as an error if a non-running timer is stopped + // in the simple timer component + stop_retry_timer(self); + + // If a state with separation feature is exited, then the separation timer + // shall be stopped + // Note: it is not considered an error, if a non-running timer is stopped + // in the simple timer component + stop_separation_timer(self); + + self->state = target_state; + + if ((0 == source_state_flags.idle) + && (0 != target_state_flags.idle)) { + // If any of the idle sub-states are entered from a non-idle state, then + // the idle entry function is called. + super_state_idle_entry(self); + } + + if (0 != target_state_flags.retry) { + // If a state with retry feature is entered the first time during the + // transfer and not as a result of a retry self-transition then the retry + // counter shall be cleared. + if (false == self->retry_time_elapsed) { + self->retry_counter = 0; + } else { + self->retry_counter++; + self->retry_time_elapsed = false; + } + } + + if (0 != target_state_flags.separation) { + // It is not necessary to respect the separation time when the first chunk + // is sent, because the separation time is measured between chunks + self->separation_time_elapsed = true; + } + + switch (target_state) { + case STATE_SEND_QUERY_INFO: { + state_send_query_info_entry(self); + break; + } + case STATE_SEND_TRANSFER_START: { + state_send_transfer_start_entry(self); + break; + } + case STATE_SEND_BLOCK_START: { + state_send_start_block_entry(self); + break; + } + case STATE_SEND_BLOCK_QUERY: { + state_send_block_query_entry(self); + break; + } + case STATE_CANCELING: { + state_send_cancel(self); + break; + } + default: + // Suppress the switch warnings + break; + } +} + +const char *sl_btmesh_blob_transfer_client_transfer_mode_to_string(sl_btmesh_mbt_client_transfer_mode_t transfer_mode) +{ + switch (transfer_mode) { + case sl_btmesh_mbt_client_mbt_transfer_mode_none: + return "None"; + case sl_btmesh_mbt_client_mbt_transfer_mode_push: + return "Push"; + case sl_btmesh_mbt_client_mbt_transfer_mode_pull: + return "Pull"; + case sl_btmesh_mbt_client_mbt_transfer_mode_both: + return "Both"; + default: + return "INVALID"; + } +} + +const char *sl_btmesh_blob_transfer_client_mbt_phase_to_string(sl_btmesh_mbt_server_phase_t mbt_phase) +{ + // The string representation is set based on the latest specification + switch (mbt_phase) { + case sl_btmesh_mbt_server_phase_inactive: + return "Inactive"; + case sl_btmesh_mbt_server_phase_idle: + return "Wait Start"; + case sl_btmesh_mbt_server_phase_waiting_for_block: + return "Wait Block"; + case sl_btmesh_mbt_server_phase_waiting_for_chunks: + return "Wait Chunk"; + case sl_btmesh_mbt_server_phase_complete: + return "Complete"; + case sl_btmesh_mbt_server_phase_suspended: + return "Suspended"; + default: + return "INVALID"; + } +} + +const char *sl_btmesh_blob_transfer_client_mbt_status_to_string(sl_btmesh_mbt_server_status_t mbt_status) +{ + switch (mbt_status) { + case sl_btmesh_mbt_server_status_success: + return "Success"; + case sl_btmesh_mbt_server_status_invalid_block_number: + return "Invalid Block Number"; + case sl_btmesh_mbt_server_status_wrong_block_size: + return "Invalid Block Size"; + case sl_btmesh_mbt_server_status_wrong_chunk_size: + return "Invalid Chunk Size"; + case sl_btmesh_mbt_server_status_invalid_state: + return "Wrong Phase"; + case sl_btmesh_mbt_server_status_invalid_parameter: + return "Invalid Parameter"; + case sl_btmesh_mbt_server_status_wrong_object_id: + return "Wrong BLOB ID"; + case sl_btmesh_mbt_server_status_storage_limit: + return "BLOB Too Large"; + case sl_btmesh_mbt_server_status_unsupported_transfer_mode: + return "Unsupported Transfer Mode"; + case sl_btmesh_mbt_server_status_internal_error: + return "Internal Error"; + case sl_btmesh_mbt_server_status_information_unavailable: + return "Information Unavailable"; + case sl_btmesh_mbt_server_status_malformed_message: + return "Malformed Message"; + case sl_btmesh_mbt_server_status_timeout: + return "Timeout"; + default: + return "INVALID"; + } +} + +/** @} end blob_transfer_client */ diff --git a/app/btmesh/common/btmesh_blob_transfer_client/sl_btmesh_blob_transfer_client.h b/app/btmesh/common/btmesh_blob_transfer_client/sl_btmesh_blob_transfer_client.h new file mode 100644 index 00000000000..68edbe8bf02 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_transfer_client/sl_btmesh_blob_transfer_client.h @@ -0,0 +1,503 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh BLOB Transfer Client + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_BLOB_TRANSFER_CLIENT_H +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_H + +#include "sl_enum.h" +#include "sl_status.h" +#include "em_common.h" + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * @addtogroup blob_transfer_client BT Mesh BLOB Transfer Client + * @{ + ******************************************************************************/ + +/// Invalid value for the binary logarithm of the block size +#define SL_BTMESH_BLOB_TRANSFER_CLIENT_INVALID_BLOCK_SIZE_LOG 0xFF + +/// BLOB Transfer Client Kind +SL_ENUM(sl_btmesh_blob_transfer_client_notification_kind_t) { + /// BLOB Transfer Result Notification + /// + /// This notification is triggered at the end of BLOB Transfer + SL_BTMESH_BLOB_TRANSFER_CLIENT_KIND_TRANSFER_RESULT, + + /// BLOB Transfer Progress Notification + /// + /// The progress is reported at the end of each block because at the end of + /// the block it is sure that all active BLOB Transfer Servers have received + /// the whole block (every chunk). + /// + /// @note If some BLOB Transfer Servers didn't receive certain chunks then + /// those chunk would be retransmitted in case of Push and Pull transfers + /// as well, therefore the transmitted chunks are not a good indicator of + /// the overall transfer progress. + SL_BTMESH_BLOB_TRANSFER_CLIENT_KIND_PROGRESS, + + /// BLOB Transfer Server Failed Notification + /// + /// @note If one BLOB Transfer Server fails but at least one other BLOB + /// Transfer Server remains active then the BLOB Transfer is continued + SL_BTMESH_BLOB_TRANSFER_CLIENT_KIND_SERVER_FAILED +}; + +/// BLOB Transfer Client Result +SL_ENUM(sl_btmesh_blob_transfer_client_result_t) { + /// At least one BLOB Transfer Server received the BLOB successfully. + /// The other servers might have failed due to error or timeout. + SL_BTMESH_BLOB_TRANSFER_CLIENT_RESULT_COMPLETED, + /// All BLOB Transfer Servers have failed due to timeout or various kinds of + /// errors (e.g. internal error, out of resources see Mesh Model specification + /// 1.1) + SL_BTMESH_BLOB_TRANSFER_CLIENT_RESULT_FAILED, + /// Last BLOB transfer was canceled by upper layer + SL_BTMESH_BLOB_TRANSFER_CLIENT_RESULT_CANCELED +}; + +/// BLOB Transfer progress +/// +/// This structure represent the progress of the active BLOB Transfer Servers +/// +/// @note Some servers could fail with error or timeout, but if there is at least +/// one active BLOB Transfer Server then the transfer continues +typedef struct { + /// Number of BLOB bytes which have been received by every active BLOB Transfer + /// Server + /// + /// @note The progress is calculated at the end of the blocks because in the + /// block, chunks could be retransmitted multiple times + uint32_t confirmed_tx_bytes; + /// BLOB size in bytes + uint32_t blob_size; +} sl_btmesh_blob_transfer_client_progress_t; + +/// BLOB Transfer Server Failed Notification +typedef struct { + /// Address of the BLOB Transfer Server + uint16_t server_address; + /// If a BLOB Transfer Server doesn't respond until a specified time then + /// the timeout is set to 1 + uint8_t timeout; + /// The error is set only if the timeout is zero and a BLOB Transfer Server has + /// responded with non-zero status code (error) in BLOB Transfer Status or BLOB + /// Block Status message + uint8_t error; +} sl_btmesh_blob_transfer_client_server_failed_t; + +/// Notification data for upper layers +typedef struct { + /// Identifies the notification type + sl_btmesh_blob_transfer_client_notification_kind_t kind; + /// Index of the element which triggered the notification + uint16_t elem_index; + /// Notification specific parameters + union { + /// Status of the active BLOB transfer on the element + sl_btmesh_blob_transfer_client_result_t transfer_result; + /// Progress of the active BLOB Transfer on the element + sl_btmesh_blob_transfer_client_progress_t progress; + /// Reason of BLOB Transfer Server failure during the active BLOB Transfer + sl_btmesh_blob_transfer_client_server_failed_t server_failed; + } params; +} sl_btmesh_blob_transfer_client_notification_t; + +typedef void (*sl_btmesh_blob_transfer_client_notify_cb_t)( + const sl_btmesh_blob_transfer_client_notification_t *const notification); + +/***************************************************************************//** + * + * Set up a new BLOB transfer. + * + * @note This shall not be called when the Distribution Server initiates the + * BLOB transfer because BT Mesh stack sets up the BLOB transfer inside the BT + * Mesh stack automatically. + * + * @param[in] elem_index The client model element index. + * @param[in] blob_id The ID of the BLOB. + * @param[in] blob_size The size of the BLOB. + * @param[in] appkey_index Index of the application key to be used for + * communicating with the servers + * @param[in] ttl The TTL to use when communicating with the servers. + * @param[in] timeout_base If a Server does not respond within this time frame, + * it will be marked as inactive. + * @param[in] group_address The group address to used if the + * @ref sl_btmesh_blob_transfer_client_setup::multicast_threshold is exceeded. + * Zero to only use unicast. + * @param[in] virtual_address Virtual address in case virtual addresses are used + * @param[in] multicast_threshold If the number of servers for any step exceeds + * this number, the group address will be used. Otherwise, servers will be + * looped through one by one. + * @param[in] servers_len Length of data in servers + * @param[in] servers List of MBT server addresses, represented as little endian + * two byte sequences. + * + * @return Result of the BLOB Transfer setup + * @retval SL_STATUS_OK if successful. Error code otherwise. + * @retval SL_STATUS_INVALID_STATE if not Idle + * + ******************************************************************************/ +sl_status_t sl_btmesh_blob_transfer_client_setup(uint16_t elem_index, + sl_bt_uuid_64_t blob_id, + uint32_t blob_size, + uint16_t appkey_index, + uint8_t ttl, + uint32_t timeout_base, + uint16_t group_address, + uuid_128 virtual_address, + uint16_t multicast_threshold, + size_t servers_len, + const uint8_t* servers); + +/***************************************************************************//** + * + * Set up an array data provider for a new BLOB transfer. + * + * The BLOB transfer client reads the BLOB data from this array during chunk + * transfer. + * + * @param[in] elem_index Client model element index + * @param[in] array Pointer to an array which stores the BLOB data + * @param[in] length Length of the array + * + * @return Result of the Data Provider setup + * @retval SL_STATUS_OK if successful + * @retval SL_STATUS_INVALID_STATE Data Provider setup called in non-idle state + * @retval SL_STATUS_INVALID_PARAMETER BLOB size inconsistency between the + * @ref sl_btmesh_blob_transfer_client_setup and this Data Provider setup call + * + ******************************************************************************/ +sl_status_t +sl_btmesh_blob_transfer_client_setup_data_provider_array(uint16_t elem_index, + const uint8_t *array, + uint32_t length); + +/***************************************************************************//** + * + * Set up a BLOB storage data provider for a new BLOB transfer. + * + * The BLOB Transfer Client reads the BLOB data from the BLOB storage based on + * the passed BLOB id. + * + * @note The BLOB id used to identify the BLOB data in the BLOB storage (on the + * client side) is likely not the same as the BLOB id used during the BLOB + * transfer to the servers. + * + * @param[in] elem_index Client model element index + * @param[in] blob_id Pointer to the BLOB id + * + * @return Result of the Data Provider setup + * @retval SL_STATUS_OK if successful + * @retval SL_STATUS_INVALID_STATE Data Provider setup called in non-idle state + * @retval SL_STATUS_NOT_FOUND BLOB is not found in the BLOB storage + * @retval SL_STATUS_INVALID_PARAMETER BLOB size inconsistency between the + * @ref sl_btmesh_blob_transfer_client_setup and this Data Provider setup call + * + ******************************************************************************/ +sl_status_t +sl_btmesh_blob_transfer_client_setup_data_provider_blob_storage(uint16_t elem_index, + const sl_bt_uuid_64_t *blob_id); + +/***************************************************************************//** + * + * Set up additional parameters for a new BLOB transfer + * + * @note This function is separated from @ref sl_btmesh_blob_transfer_client_setup + * because the @ref sl_btmesh_blob_transfer_client_setup shall not be called + * when @ref sl_btmesh_fw_distribution_server initiates the BLOB transfer + * because BT Mesh stack sets up the BLOB transfer inside the BT Mesh stack + * automatically. + * + * @param[in] elem_index Client model element index + * @param[in] separation_time_ms Minimum separation time between two chunks + * in the same block, in milliseconds + * @param[in] retry_time_ms Retry time of message transmissions in milliseconds + * (query info, transfer start, block start, block query) + * @param[in] retry_max Maximum number of retries of message transmissions + * (query info, transfer start, block start, block query) + * + * @return Result of the parameter setup + * @retval SL_STATUS_OK if successful + * @retval SL_STATUS_INVALID_STATE Parameter setup called in non-idle state + * + ******************************************************************************/ +sl_status_t sl_btmesh_blob_transfer_client_set_params(uint16_t elem_index, + uint16_t separation_time_ms, + uint16_t retry_time_ms, + uint16_t retry_max); + +/***************************************************************************//** + * + * Starts a previously set up BLOB Transfer. + * + * @param[in] elem_index Client model element index + * @param[in] transfer_mode Allowed transfer mode + * @param[in] notify Function pointer to a notification callback function which + * is called in the following cases: + * \li BLOB Transfer completed + * \li BLOB Transfer failed + * \li BLOB Transfer canceled + * \li BLOB Transfer progress changes + * \li BLOB Transfer Server failed + * + * It is valid to pass NULL as notify parameter. If the callback function is + * null then no notification is initiated. + * If @p transfer_mode is set to @p sl_btmesh_mbt_client_mbt_transfer_mode_both + * then the BLOB transfer client selects the transfer mode based on the result + * of query information. If one transfer mode is supported by all receiving nodes + * only then that transfer mode is selected otherwise push mode is selected. + * If @p transfer_mode is set to @p sl_btmesh_mbt_client_mbt_transfer_mode_push + * or @p sl_btmesh_mbt_client_mbt_transfer_mode_pull then that is used as + * transfer mode. + * + * @return SL_STATUS_OK if successful. Error code otherwise + * @retval SL_STATUS_INVALID_PARAMETER Invalid transfer mode + * @retval SL_STATUS_INVALID_STATE BLOB Transfer Client busy with another transfer + * @retval SL_STATUS_INVALID_CONFIGURATION No data provider was specified + * + ******************************************************************************/ +sl_status_t +sl_btmesh_blob_transfer_client_start(uint16_t elem_index, + sl_btmesh_mbt_client_transfer_mode_t transfer_mode, + sl_btmesh_blob_transfer_client_notify_cb_t notify); + +/***************************************************************************//** + * + * Cancels an ongoing BLOB Transfer. + * + * @param[in] elem_index Client model element index + * + ******************************************************************************/ +void sl_btmesh_blob_transfer_client_cancel(uint16_t elem_index); + +/***************************************************************************//** + * + * Aborts an ongoing BLOB Transfer. + * + * @param[in] elem_index Client model element index + * + * @note This function is not to be used when the MBT client is interfaced + * by a higher layer component (e.g. distribution server). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_blob_transfer_client_abort(uint16_t elem_index); + +/***************************************************************************//** + * + * Informs BLOB Transfer Client SDK component that the transfer in MBT Client + * model of BT Mesh stack was aborted. + * + * @param[in] elem_index Client model element index + * + * @note This function shall be used only when the MBT client is interfaced + * by a higher layer component (e.g. distribution server). + * The MBT Client model can be aborted by higher layer models in the BT + * Mesh stack which is not reported in MBT Client model events so it shall + * be reported by calling this API. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_blob_transfer_client_on_aborted(uint16_t elem_index); + +/***************************************************************************//** + * + * Informs BLOB Transfer Client SDK component that the transfer in MBT Client + * model of BT Mesh stack was suspended. + * + * @param[in] elem_index Client model element index + * + * @note This function shall be used only when the MBT client is interfaced + * by a higher layer component (e.g. distribution server). + * The MBT Client model can be suspended by higher layer models in the BT + * Mesh stack which is not reported in MBT Client model events so it shall + * be reported by calling this API. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_blob_transfer_client_on_suspended(uint16_t elem_index); + +/***************************************************************************//** + * + * Informs BLOB Transfer Client SDK component that the transfer in MBT Client + * model of BT Mesh stack was resumed. + * + * @param[in] elem_index Client model element index + * + * @note This function shall be used only when the MBT client is interfaced + * by a higher layer component (e.g. distribution server). + * The MBT Client model can be resumed by higher layer models in the BT + * Mesh stack which is not reported in MBT Client model events so it shall + * be reported by calling this API. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_blob_transfer_client_on_resumed(uint16_t elem_index); + +/***************************************************************************//** + * Handle BLOB Transfer Client events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + * + ******************************************************************************/ +void sl_btmesh_blob_transfer_client_on_event(const sl_btmesh_msg_t * const evt); + +// ----------------------------------------------------------------------------- +// Overridable Callback Functions +// ----------------------------------------------------------------------------- +/***************************************************************************//** + * Calculates the binary logarithm of the block size for the current BLOB + * transfer from the provided parameters which are the result of the Retrieve + * Capabilities procedure of the BLOB Transfer. + * + * The parameters passed represent the aggregated capabilities of the BLOB + * transfer client and every BLOB transfer server which participates in the + * current transfer. + * + * The default implementation calculates the greatest possible block size from + * the parameters. If another implementation is required then the strong symbol + * definition shall be provided for this function with the implementation in the + * application code. + * + * @param[in] blob_size Size of the BLOB + * @param[in] block_size_log_min Min allowed binary logarithm of the block size + * @param[in] block_size_log_max Max allowed binary logarithm of the block size + * @param[in] block_count_max Max allowed number of blocks + * @param[in] max_chunk_size_min Max allowed chunk size in the current transfer + * @param[in] max_chunks_min Max allowed number of chunks per block in the + * current transfer + * + * @return Binary logarithm of the selected block size for the current transfer + * @retval SL_BTMESH_BLOB_TRANSFER_CLIENT_INVALID_BLOCK_SIZE_LOG Invalid parameters + * + ******************************************************************************/ +uint8_t +sl_btmesh_blob_transfer_client_calculate_block_size_log(uint32_t blob_size, + uint8_t block_size_log_min, + uint8_t block_size_log_max, + uint16_t block_count_max, + uint16_t max_chunk_size_min, + uint16_t max_chunks_min); + +/***************************************************************************//** + * Calculates the chunk size for the next block in the current BLOB transfer + * from the previously selected binary logarithm of the block size and from + * the result of the Retrieve Capabilities procedure of the BLOB Transfer. + * + * If the configurable preferred chunk size is supported by all BLOB Transfer + * Servers then the default chunk size calculation algorithm selects it as chunk + * size of the block otherwise the chunk size is set to the closest value which + * fills all segments of the chunk. + * If another implementation is required then the strong symbol definition shall + * be provided for this function with the implementation in the application code. + * + * @param[in] block_size_log The selected binary logarithm of the block size + * during previous phase of the BLOB transfer + * @param[in] max_chunk_size_min Max allowed chunk size in the current transfer + * @param[in] max_chunks_min Max allowed number of chunks per block in the + * current transfer + * @param[in] nw_pdu_size Size of Network PDU. If the Silicon Labs BT Mesh + * over advertisement extension proprietary feature + * is turned on then it can be greater than 29 bytes. + * + * @return Chunk size for next block in the current BLOB transfer + * + ******************************************************************************/ +uint16_t +sl_btmesh_blob_transfer_client_calculate_chunk_size(uint8_t block_size_log, + uint16_t max_chunk_size_min, + uint16_t max_chunks_min, + uint16_t nw_pdu_size); + +/***************************************************************************//** + * Provides string representation of transfer mode + * + * It is guaranteed that this function returns a valid string even in case of + * invalid transfer mode. + * + * @param[in] transfer_mode transfer mode + * + * @note The to_string functions are used for log calls only in this component. + * If the logging is disabled then the linker can eliminate these functions. + * + * @return String representation of transfer mode + * @retval "INVALID" if the transfer mode is invalid + ******************************************************************************/ +const char *sl_btmesh_blob_transfer_client_transfer_mode_to_string(sl_btmesh_mbt_client_transfer_mode_t transfer_mode); + +/***************************************************************************//** + * Provides string representation of MBT phase + * + * It is guaranteed that this function returns a valid string even in case of + * invalid MBT phase. + * + * @param[in] mbt_phase MBT phase + * + * @note The to_string functions are used for log calls only in this component. + * If the logging is disabled then the linker can eliminate these functions. + * + * @return String representation of MBT phase + * @retval "INVALID" if the MBT phase is invalid + ******************************************************************************/ +const char *sl_btmesh_blob_transfer_client_mbt_phase_to_string(sl_btmesh_mbt_server_phase_t mbt_phase); + +/***************************************************************************//** + * Provides string representation of MBT status + * + * It is guaranteed that this function returns a valid string even in case of + * invalid MBT status. + * + * @param[in] mbt_status MBT status + * + * @note The to_string functions are used for log calls only in this component. + * If the logging is disabled then the linker can eliminate these functions. + * + * @return String representation of MBT status + * @retval "INVALID" if the MBT status is invalid + ******************************************************************************/ +const char *sl_btmesh_blob_transfer_client_mbt_status_to_string(sl_btmesh_mbt_server_status_t mbt_status); + +/** @} end blob_transfer_client */ + +#ifdef __cplusplus +} +#endif // __cplusplus + + #endif // SL_BTMESH_BLOB_TRANSFER_CLIENT_H diff --git a/app/btmesh/common/btmesh_blob_transfer_server/btmesh_blob_transfer_server.dcd b/app/btmesh/common/btmesh_blob_transfer_server/btmesh_blob_transfer_server.dcd new file mode 100644 index 00000000000..aeb9e6d32f9 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_transfer_server/btmesh_blob_transfer_server.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1400", "name":"BLOB Transfer Server"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_blob_transfer_server/btmesh_blob_transfer_server_validation.lua b/app/btmesh/common/btmesh_blob_transfer_server/btmesh_blob_transfer_server_validation.lua new file mode 100644 index 00000000000..f63d9c18149 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_transfer_server/btmesh_blob_transfer_server_validation.lua @@ -0,0 +1,261 @@ +-- Log function to add prefix to log messages +local LOG_LVL_INFO = 3 +local LOG_LVL_WARNING = 2 +local LOG_LVL_ERROR = 1 +local LOG_PREFIX = "btmesh_blob_transfer_server_validation: " +local VALIDATION_PREFIX = "BLOB Transfer Server: " +local log_level = LOG_LVL_INFO + +-- Status code definitions +local STATUS = { + OK = 0, + CONFIG_DOES_NOT_EXIST = -1, + CONFIG_TYPE_MISMATCH = -2 +} + +local function log_info(message) + if LOG_LVL_INFO <= log_level then + logit("[I] " .. LOG_PREFIX .. message) + end +end + +local function log_warning(message) + if LOG_LVL_WARNING <= log_level then + logit("[W] " .. LOG_PREFIX .. message) + end +end + +local function log_error(message) + if LOG_LVL_ERROR <= log_level then + logit("[E] " .. LOG_PREFIX .. message) + end +end + +local function report_error(problem, target, description, quickfix) + log_error(problem .. " - " .. description) + validation.error(VALIDATION_PREFIX .. problem, + target, + description, + quickfix) +end + +local function report_warning(problem, target, description, quickfix) + log_warning(problem .. " - " .. description) + validation.warning(VALIDATION_PREFIX .. problem, + target, + description, + quickfix) +end + +-- automatic conversion of input parameters +local function autonumber(input) + local base = 10 + local orig_input = input + if (type(input) == "string") then + input = input:gsub("[\(\)\"uUlL]", "") + if string.find(input,"[bxhBXH]") ~= nil then + if string.find(string.lower(input), "0b") == 1 then + input = input:gsub("[bB]","") + base = 2 + elseif string.find(string.lower(input), "0x") == 1 then + input = input:gsub("[xXhH]","") + base = 16 + end + elseif string.find(input, "0") == 1 then + base = 8 + end + elseif (type(input) == "number") then + return input + else + log_error("autonumber() expects either a string or a number!") + return nil + end + local result = tonumber(input, base) + if result == nil then + log_error("Configured value is not valid: \"" .. tostring(orig_input) .. "\" - modify it to a numeric value!") + end + return result +end + +-- Iterate over the configuration name and descriptor pairs from config_schema +-- and checks if the configuration exists (for required config names) and +-- converts it to the descriptor value type. +-- If the configuration name does not exist or type conversion is not successful +-- then error is reported in the log and on the user interface of Simplicity +-- Studio. The preprocessed config is written to preprocessed_config parameter. +local function preprocess_config(preprocessed_config, config_schema) + local status = STATUS.OK + for name, descriptor in pairs(config_schema) do + if slc.config(name) == nil then + if descriptor.required then + local problem = "Configuration missing" + local description = "Configuration constant does not exist: " .. name + report_error(problem, validation.target_for_project(), description, nil) + if status == STATUS.OK then + -- Store the status code of the first error + status = STATUS.CONFIG_DOES_NOT_EXIST + end + end + else + if (descriptor.value_type == "number") or (descriptor.value_type == "boolean") then + local num = autonumber(slc.config(name).value) + if num ~= nil then + if (descriptor.value_type == "boolean") then + preprocessed_config[name] = (num ~= 0) + else + preprocessed_config[name] = num + end + end + else + preprocessed_config[name] = slc.config(name).value + end + + -- If the number or boolean conversion fails then the name doesn't + -- exist in the config table so the preprocessed_config[name] is nil + -- which has nil type + if type(preprocessed_config[name]) ~= descriptor.value_type then + local problem = "Configuration type mismatch" + local description = + string.format("The %s constant is not a %s (value: %s)", + name, + descriptor.value_type, + tostring(slc.config(name).value)) + report_error(problem, validation.target_for_defines({name}), description, nil) + if status == STATUS.OK then + -- Store the status code of the first error + status = STATUS.CONFIG_TYPE_MISMATCH + end + end + end + end + return status +end + +local function chunk_size_to_message_count(chunk_size) + local MAX_UNSEGMENTED_PAYLOAD = 11 + local MAX_PAYLOAD_PER_SEGMENT = 12 + local CHUNK_SIZE_HEADER_MIN_SIZE = 3 -- Opcode (1) + Chunk Number (2) + local TRANSMIC_MIN_SIZE = 4 + local MAX_UNSEGMENTED_CHUNK_SIZE = MAX_UNSEGMENTED_PAYLOAD + - CHUNK_SIZE_HEADER_MIN_SIZE + if MAX_UNSEGMENTED_CHUNK_SIZE < chunk_size then + return math.ceil((CHUNK_SIZE_HEADER_MIN_SIZE + chunk_size + TRANSMIC_MIN_SIZE) + / MAX_PAYLOAD_PER_SEGMENT) + else + return 1 + end +end + +local min_block_size_log = "SL_BTMESH_BLOB_TRANSFER_SERVER_MIN_BLOCK_SIZE_LOG_CFG_VAL" +local max_block_size_log = "SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL" +local max_chunks_per_block = "SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK_CFG_VAL" +local max_chunk_size = "SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNK_SIZE_CFG_VAL" +local push_mode = "SL_BTMESH_BLOB_TRANSFER_SERVER_PUSH_MODE_CFG_VAL" +local pull_mode = "SL_BTMESH_BLOB_TRANSFER_SERVER_PULL_MODE_CFG_VAL" +local pull_chunk_request_cnt = "SL_BTMESH_BLOB_TRANSFER_SERVER_PULL_CHUNK_REQUEST_CNT_CFG_VAL" +local lpn_mode = "SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_MODE_CFG_VAL" +local lpn_min_queue_length = "SL_BTMESH_LPN_MIN_QUEUE_LENGTH_CFG_VAL" + +local config_schema = { + [min_block_size_log] = {value_type = "number", required = true}, + [max_block_size_log] = {value_type = "number", required = true}, + [max_chunks_per_block] = {value_type = "number", required = true}, + [max_chunk_size] = {value_type = "number", required = true}, + [push_mode] = {value_type = "boolean", required = true}, + [pull_mode] = {value_type = "boolean", required = true}, + [pull_chunk_request_cnt] = {value_type = "number", required = true}, + [lpn_mode] = {value_type = "boolean", required = true}, + [lpn_min_queue_length] = {value_type = "number", required = false} +} + +local config = {} +local lpn_component_selected = slc.is_selected("btmesh_lpn") + +if lpn_component_selected then + log_info("Node with low power feature") + config_schema[lpn_min_queue_length].required = true +end + +local status = preprocess_config(config, config_schema) + +if status == STATUS.OK then + -- It is guaranteed that all required config parameters exist and these are + -- converted to the proper type + + -- Commented due to max 1000 instruction per lua script limit + -- for name, value in pairs(config) do + -- -- Log the converted configuration parameters + -- log_info(name .. ": " .. tostring(value) .. " (type: " .. type(value) .. ")") + -- end + + if config[max_block_size_log] < config[min_block_size_log] then + local problem = "Block size configuration invalid" + local description = + string.format("Min Block Size Log (%i) shall not be greater than " .. + "Max Block Size Log (%i)", + config[min_block_size_log], + config[max_block_size_log]) + report_error(problem, + validation.target_for_defines({min_block_size_log, + max_block_size_log}), + description, + nil) + end + + if (config[max_chunks_per_block] * config[max_chunk_size]) < (2 ^ config[max_block_size_log]) then + local problem = "Block and chunk configuration inconsistent" + local description = + string.format("Max Block Size (%i) shall not be greater than product of " .. + "max chunk size (%i) and max number of chunks per block (%i)", + 2 ^ config[max_block_size_log], + config[max_chunk_size], + config[max_chunks_per_block]) + report_error(problem, + validation.target_for_defines({max_block_size_log, + max_chunk_size, + max_chunks_per_block}), + description, + nil) + end + + if config[lpn_mode] ~= lpn_component_selected then + local problem = "LPN mode and LPN component consistency issue" + local description = "The LPN mode configuration option shall be turned on " .. + "if and only if the Low Power Node component is present" + report_error(problem, + validation.target_for_defines({lpn_mode}), + description, + nil) + elseif config[lpn_mode] then + -- LPN mode is turned on and the LPN component exists in the project + + if config[push_mode] or not config[pull_mode] then + local problem = "Transfer mode inconsistency" + local description = "Pull transfer mode is recommended for low power nodes" + report_warning(problem, + validation.target_for_defines({push_mode, pull_mode}), + description, + nil) + end + + local chunk_message_count = chunk_size_to_message_count(config[max_chunk_size]) + if (config[lpn_min_queue_length] < config[pull_chunk_request_cnt] * chunk_message_count) + and config[pull_mode] then + local problem = "Requested chunks greater than friend queue size" + local description = + string.format("The %i max chunk size fits into %i message and " .. + "%i chunks requested at the same time which does " .. + "not fit into min lpn queue size (%i message)", + config[max_chunk_size], + chunk_message_count, + config[pull_chunk_request_cnt], + config[lpn_min_queue_length]) + report_error(problem, + validation.target_for_defines({max_chunk_size, + pull_chunk_request_cnt, + lpn_min_queue_length}), + description, + nil) + end + end +end \ No newline at end of file diff --git a/app/btmesh/common/btmesh_blob_transfer_server/config/sl_btmesh_blob_transfer_server_config.h b/app/btmesh/common/btmesh_blob_transfer_server/config/sl_btmesh_blob_transfer_server_config.h new file mode 100644 index 00000000000..d93dae1a243 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_transfer_server/config/sl_btmesh_blob_transfer_server_config.h @@ -0,0 +1,125 @@ +/***************************************************************************//** + * @file + * @brief BLOB Transfer Server Configuration + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_BLOB_TRANSFER_SERVER_CONFIG_H +#define SL_BTMESH_BLOB_TRANSFER_SERVER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Min Block Size Log <0x6-0x20> +// Please note, that decreasing the minimum block size will result in increased heap usage. +// Block states need to be monitored. The smaller the blocks, the bigger the state storage. +// Change this value with care. +#define SL_BTMESH_BLOB_TRANSFER_SERVER_MIN_BLOCK_SIZE_LOG_CFG_VAL 0x9 + +// Max Block Size Log <0x6-0x20> +// Please note, that increasing the maximum block size will result in increased heap usage. +// Blocks are cached on heap before being written into NVM. +// Change this value with care. +// The maximum block size shall be less than or equal to the product of max chunks per block and chunk size. +#define SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL 0x9 + +// Maximum of number of chunks per block <8-64:8> +#define SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK_CFG_VAL 16 + +// Maximum chunk size <8-241:1> +// If the max chunk size is 8 then the chunk data fits into a single BT Mesh advertisement message. +// If the chunk data is segmented then N segments is able to transfer (N*12)-7 byte data. +// The advantage of higher chunk size is the higher throughput in low noise environment. +// The advantage of lower chunk size is that fewer messages are retransmitted in high noise environment due to lost chunk messages. +// LPN only: the number of chunk messages (segments) multiplied by requested chunk count in partial block report shall fit into the friend queue. +#define SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNK_SIZE_CFG_VAL 241 + +// Logging +#define SL_BTMESH_BLOB_TRANSFER_SERVER_LOGGING_CFG_VAL 1 + +// Transfer Start user callback +// Enable/disable callback function when BLOB transfer starts. +#define SL_BTMESH_BLOB_TRANSFER_START_CALLBACK_CFG_VAL 1 + +// Transfer Progress user callback +// Enable/disable callback function when block transfer is finished. +#define SL_BTMESH_BLOB_TRANSFER_PROGRESS_CALLBACK_CFG_VAL 1 + +// Transfer Done user callback +// Enable/disable callback function when BLOB transfer is finished. +#define SL_BTMESH_BLOB_TRANSFER_SERVER_TRANSFER_DONE_CALLBACK_CFG_VAL 1 + +// Supported Transfer Modes + +// Push Mode +#define SL_BTMESH_BLOB_TRANSFER_SERVER_PUSH_MODE_CFG_VAL 1 + +// + +// Pull Mode +#define SL_BTMESH_BLOB_TRANSFER_SERVER_PULL_MODE_CFG_VAL 1 + +// Number of chunks requested in Block Status or Partial Block Report <1-32> +#define SL_BTMESH_BLOB_TRANSFER_SERVER_PULL_CHUNK_REQUEST_CNT_CFG_VAL 4 + +// Interval, in milliseconds, between Partial Block Reports, if nothing is received <1000-30000:100> +#define SL_BTMESH_BLOB_TRANSFER_SERVER_PULL_RETRY_INTERVAL_MS_CFG_VAL 1000 + +// Number of retries sending the same Partial Block Report, before giving up <1-10> +#define SL_BTMESH_BLOB_TRANSFER_SERVER_PULL_RETRY_CNT_CFG_VAL 8 + +// LPN Mode +// Only pull transfer mode can be used on LPN nodes. +#define SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_MODE_CFG_VAL 0 + +// LPN high throughput mode +// In high throughput mode the LPN node polls the friend node more frequently to increase the throughput at the expense of power consumption. +#define SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_HIGH_THROUGHPUT_MODE_CFG_VAL 1 + +// LPN poll delay in milliseconds <100-30000:100> +// The delay of first LPN poll when the BLOB Transfer Server expects messages from the client after an event. +// The major part of BLOB transfer to LPN is the waiting for the poll timeout to elapse in order to poll the friend node for BLOB Transfer messages. +// The maximum number of messages can be transferred per polling equals to friend queue size during BLOB transfer to LPN. +// This poll delay configuration parameter value makes the polling more frequent when BLOB Transfer messages are expected to increase the throughput. +// The LPN poll delay shall be less than SL_BTMESH_LPN_POLL_TIMEOUT_CFG_VAL in sl_btmesh_lpn_config.h file. +#define SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_POLL_DELAY_MS_CFG_VAL 500 + +// LPN poll logging +#define SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_POLL_LOGGING_CFG_VAL 0 + +// +// +// + +// + +// <<< end of configuration section >>> + +#if SL_BTMESH_BLOB_TRANSFER_SERVER_MIN_BLOCK_SIZE_LOG_CFG_VAL > SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL +#error The Max Block Size Log value shall be equal to or greater than the Min Block Size Log value. +#endif + +#endif // SL_BTMESH_BLOB_TRANSFER_SERVER_CONFIG_H diff --git a/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server.c b/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server.c new file mode 100644 index 00000000000..235d008986b --- /dev/null +++ b/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server.c @@ -0,0 +1,537 @@ +/***************************************************************************//** + * @file + * @brief BLOB Transfer Server application level functionality + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ +#include +#include + +#include "sl_bt_api.h" +#include "sl_btmesh.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" +#include "sl_malloc.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#include "app_assert.h" + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_simple_timer.h" + +#include "sl_btmesh_blob_storage.h" + +#ifdef SL_CATALOG_BTMESH_STACK_LPN_PRESENT +#include "sl_btmesh_lpn.h" +#endif // SL_CATALOG_BTMESH_STACK_LPN_PRESENT + +#include "sl_btmesh_blob_transfer_server.h" +#include "sl_btmesh_blob_transfer_server_api.h" +#include "sl_btmesh_blob_transfer_server_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup mesh_blob_transfer_server + * @{ + ******************************************************************************/ + +/// In high throughput mode the LPN node polls the friend node more frequently +/// to increase the throughput at the expense of power consumption +/// @note LPN high throughput mode can be active only in LPN mode +#define LPN_HIGH_THROUGHPUT_MODE_ACTIVE \ + SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_MODE_CFG_VAL \ + && SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_HIGH_THROUGHPUT_MODE_CFG_VAL + +// Returns the string representation of BLOB ID in a compound literal. +// WARNING! This macro shall be used as a parameter of log calls only due to the +// lifetime of underlying compound literal in APP_BTMESH_UUID_64_TO_STRING. +#define BLOB_ID_TO_STRING(blob_id) APP_BTMESH_UUID_64_TO_STRING(blob_id, ' ', true) + +#if SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_POLL_LOGGING_CFG_VAL +#define blob_lpn_poll_log(...) log_debug(__VA_ARGS__) +#else +#define blob_lpn_poll_log(...) +#endif + +typedef enum { + /// The BLOB server is idle + IDLE, + /// BLOB server is active + ACTIVE, + /*************************************************************************//** + * @addtogroup activesubstates Active Sub-states + * @{ + ****************************************************************************/ + /// BLOBs are being erased + ACTIVE_ERASING, + /// Invalid BLOBs are being erased + ACTIVE_ERASING_INVALID, + /// Unamanged BLOBs are being erased + ACTIVE_ERASING_UNMANAGED, + /// Transfer is ongoing + ACTIVE_TRANSFER, + /** @} end activesubstates */ + /*************************************************************************//** + * @addtogroup idlesubstates Idle Sub-states + * @{ + ****************************************************************************/ + /// The state machine is either initialized or the transfer is canceled + IDLE_INACTIVE, + /// The transfer has been completed + IDLE_DONE + /** @} end idlesubstates */ +} blob_transfer_server_state_t; + +struct { +#if LPN_HIGH_THROUGHPUT_MODE_ACTIVE + /// Handler for the LPN high throughput timer + sl_btmesh_lpn_high_throughput_timer_t high_throughput_timer; +#endif // LPN_HIGH_THROUGHPUT_MODE_ACTIVE + /// ID of the BLOB being transferred + sl_bt_uuid_64_t blob_id; + /// Size of the BLOB being transferred + uint32_t blob_size; + /// Current progress of the current transfer in bytes + uint32_t progress; + /// Block size calculated based on the log value received at transfer start + uint32_t blob_block_size; + /// Buffer for blocks + uint8_t * block_buffer; + /// State of the current transfer + union { + struct { + uint16_t idle : 1; ///< Idle state + uint16_t inactive : 1; ///< Idle/Inactive state + uint16_t done : 1; ///< Idle/Done state + uint16_t active : 1; ///< Active state + uint16_t suspended : 1; ///< Active/Suspended state + uint16_t erasing : 1; ///< Active/Erasing state + uint16_t erasing_invalid : 1; ///< Active/Erasing Invalid state + uint16_t erasing_unmanaged : 1; ///< Active/Erasing Unmanaged state + uint16_t transfer : 1; ///< Active/Transfer state + }; + uint16_t raw; ///< raw data for quick access + } state; +} blob_transfer_server; + +/***************************************************************************//** + * Handler for state change + * + * Takes care of entry actions. + * + * @param state State to transfer into + ******************************************************************************/ +static void blob_transfer_server_state_change(blob_transfer_server_state_t state); + +void sl_btmesh_blob_transfer_server_init(void) +{ + uint32_t max_blob_size = sl_btmesh_blob_storage_get_max_blob_size(); + if (max_blob_size == 0) { + log_warning("No available flash for BLOB Transfer. " + "Consider removing the component." NL); + } else { + sl_status_t sc = + sl_btmesh_mbt_server_init(BTMESH_BLOB_TRANSFER_SERVER_MAIN, + SL_BTMESH_BLOB_TRANSFER_SERVER_MIN_BLOCK_SIZE_LOG_CFG_VAL, + SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL, + SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK_CFG_VAL, + SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNK_SIZE_CFG_VAL, + max_blob_size, + SL_BTMESH_BLOB_TRANSFER_SERVER_PUSH_MODE_CFG_VAL + | (SL_BTMESH_BLOB_TRANSFER_SERVER_PULL_MODE_CFG_VAL << 1), + SL_BTMESH_BLOB_TRANSFER_SERVER_PULL_CHUNK_REQUEST_CNT_CFG_VAL, + SL_BTMESH_BLOB_TRANSFER_SERVER_PULL_RETRY_INTERVAL_MS_CFG_VAL, + SL_BTMESH_BLOB_TRANSFER_SERVER_PULL_RETRY_CNT_CFG_VAL); + app_assert_status(sc); + + // Initial state is Idle + blob_transfer_server_state_change(IDLE); + } +} + +inline sl_status_t sl_btmesh_blob_transfer_server_start(sl_bt_uuid_64_t const *const blob_id, + const uint16_t timeout_10s, + const uint8_t ttl) +{ + // This function essentially wraps the call below + return sl_btmesh_mbt_server_start(BTMESH_BLOB_TRANSFER_SERVER_MAIN, + *blob_id, + timeout_10s, + ttl); +} + +sl_status_t sl_btmesh_blob_transfer_server_set_pull_mode_parameters(uint16_t pull_mode_retry_interval_ms, + uint16_t pull_mode_retry_count) +{ + // This function essentially wraps the call below + return sl_btmesh_mbt_server_set_pull_mode_parameters(BTMESH_BLOB_TRANSFER_SERVER_MAIN, + pull_mode_retry_interval_ms, + pull_mode_retry_count); +} + +void sl_btmesh_blob_transfer_server_on_event(sl_btmesh_msg_t const *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_blob_transfer_server_init(); + break; + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_blob_transfer_server_init(); + } + break; + case sl_btmesh_evt_mbt_server_transfer_start_req_id: { + sl_btmesh_evt_mbt_server_transfer_start_req_t const *msg = + &evt->data.evt_mbt_server_transfer_start_req; + // If suspended, there are two cases we can move forward + if (blob_transfer_server.state.suspended == 1) { + if (0 + == memcmp(&blob_transfer_server.blob_id, + &msg->blob_id, + sizeof(sl_bt_uuid_64_t))) { + // If it's the same blob, resume. + blob_transfer_server.state.suspended = 0; + sl_btmesh_mbt_server_transfer_start_rsp(BTMESH_BLOB_TRANSFER_SERVER_MAIN, + sl_btmesh_mbt_server_status_success); + return; + } + // If it's a different BLOB, treat it as regular start message + } + // If BLOB already present ignore + if (sl_btmesh_blob_storage_is_present(&msg->blob_id)) { + log_error("BLOB (%s) already present!" NL, + BLOB_ID_TO_STRING(&msg->blob_id)); + sl_btmesh_mbt_server_transfer_start_rsp(BTMESH_BLOB_TRANSFER_SERVER_MAIN, + sl_btmesh_mbt_server_status_internal_error); + return; + } + memcpy(&blob_transfer_server.blob_id, + &msg->blob_id, + sizeof(sl_bt_uuid_64_t)); + // Set progress target + blob_transfer_server.blob_size = msg->blob_size; + // Set expected block size + blob_transfer_server.blob_block_size = 1 << msg->block_size_log; + blob_transfer_server.block_buffer = + sl_malloc(blob_transfer_server.blob_block_size); + // Check allocation result + if (blob_transfer_server.block_buffer == NULL) { + log_critical("Block buffer allocation failed!" NL); + sl_btmesh_mbt_server_transfer_start_rsp(BTMESH_BLOB_TRANSFER_SERVER_MAIN, + sl_btmesh_mbt_server_status_internal_error); + // State change + blob_transfer_server_state_change(IDLE_INACTIVE); + } else { + log_info("BLOB Transfer Start received, id: %s\t" + "size: %lu B" NL, + BLOB_ID_TO_STRING(&blob_transfer_server.blob_id), + blob_transfer_server.blob_size); + + // State change + blob_transfer_server_state_change(ACTIVE); + } + break; + } + case sl_btmesh_evt_mbt_server_block_start_id: { + // If not in Active/Transfer state, ignore message + if (blob_transfer_server.state.transfer == 0) { + return; + } + sl_btmesh_evt_mbt_server_block_start_t const *msg = + &evt->data.evt_mbt_server_block_start; + // Check whether received block is related to BLOB being received + if (memcmp(&msg->blob_id, + &blob_transfer_server.blob_id, + sizeof(sl_bt_uuid_64_t)) + != 0) { + return; + } + blob_transfer_server.progress = msg->block_number + * blob_transfer_server.blob_block_size; + + log_debug("Block %d start" NL, msg->block_number); + break; + } + case sl_btmesh_evt_mbt_server_block_complete_id: { + sl_btmesh_evt_mbt_server_block_complete_t const *msg = + &evt->data.evt_mbt_server_block_complete; + // If not in Active/Transfer state, ignore message + if (blob_transfer_server.state.transfer == 0) { + return; + } +#if SL_BTMESH_BLOB_TRANSFER_PROGRESS_CALLBACK_CFG_VAL + // User callback for progress at block end + sl_btmesh_blob_transfer_server_transfer_progress(&blob_transfer_server.blob_id, + SL_PROG_TO_PCT(blob_transfer_server.blob_size, + blob_transfer_server.progress)); +#endif // SL_BTMESH_BLOB_TRANSFER_PROGRESS_CALLBACK_CFG_VAL + // Calculate offset of block to be received; since the last block can be + // smaller than the rest, use the size received in Transfer Start to + // calculate offset + uint32_t write_offset = blob_transfer_server.blob_block_size + * msg->block_number; + // Write data using wrapper + sl_status_t sc = + sl_btmesh_blob_storage_write(write_offset, + msg->block_size, + blob_transfer_server.block_buffer); + app_assert_status_f(sc, "Storage writing failed!"); + log_info("Block %d complete (%s), progress %u%%" NL, + msg->block_number, + BLOB_ID_TO_STRING(&blob_transfer_server.blob_id), + // Calculate progress in percent + (unsigned) SL_PROG_TO_PCT_INT(blob_transfer_server.blob_size, + blob_transfer_server.progress)); + + if (blob_transfer_server.progress == blob_transfer_server.blob_size) { + // State change + blob_transfer_server_state_change(IDLE_DONE); + } + break; + } +#if LPN_HIGH_THROUGHPUT_MODE_ACTIVE + case sl_btmesh_evt_mbt_server_partial_block_report_tx_complete_id: + { + // Start polling after partial block report is sent out, because + // the next messages are sent out quickly by the client. + sl_btmesh_lpn_high_throughput_register(&blob_transfer_server.high_throughput_timer, + SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_POLL_DELAY_MS_CFG_VAL, + SL_BTMESH_LPN_HIGH_THROUGHPUT_SLOWING); + blob_lpn_poll_log("Start slowing poll delay %dms (partial block)" NL, + SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_POLL_DELAY_MS_CFG_VAL); + break; + } +#endif // LPN_HIGH_THROUGHPUT_MODE_ACTIVE + case sl_btmesh_evt_mbt_server_state_changed_id: { + sl_btmesh_evt_mbt_server_state_changed_t const *msg = + &evt->data.evt_mbt_server_state_changed; + log_debug("MBT Server state changed to %d" NL, msg->new_state); + switch (msg->new_state) { + case sl_btmesh_mbt_server_phase_suspended: + blob_transfer_server.state.suspended = 1; + break; + case sl_btmesh_mbt_server_phase_inactive: + if (blob_transfer_server.state.idle == 0) { + log_error("BLOB Transfer (%s) aborted" NL, + BLOB_ID_TO_STRING(&blob_transfer_server.blob_id)); + // Notify user that transfer is aborted + sl_btmesh_blob_transfer_server_transfer_abort(&blob_transfer_server.blob_id); + blob_transfer_server_state_change(IDLE_INACTIVE); + } +#if LPN_HIGH_THROUGHPUT_MODE_ACTIVE + // intentional fall-through + case sl_btmesh_mbt_server_phase_waiting_for_block: + // Start poll delay to poll for expected BLOB transfer messages: + // BLOB Transfer Start, BLOB Block Start + // Note: sl_btmesh_mbt_server_phase_idle means that the expected BLOB ID + // is set but the BLOB Transfer Start message is not received yet + sl_btmesh_lpn_high_throughput_register(&blob_transfer_server.high_throughput_timer, + SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_POLL_DELAY_MS_CFG_VAL, + SL_BTMESH_LPN_HIGH_THROUGHPUT_SLOWING); + blob_lpn_poll_log("Start slowing poll delay %dms (state change)" NL, + SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_POLL_DELAY_MS_CFG_VAL); +#endif // LPN_HIGH_THROUGHPUT_MODE_ACTIVE + break; + default: +#if LPN_HIGH_THROUGHPUT_MODE_ACTIVE + // If the BLOB transfer is no longer active then the LPN high throughput + // request shall be unregistered. + sl_btmesh_lpn_high_throughput_unregister(&blob_transfer_server.high_throughput_timer); +#endif // LPN_HIGH_THROUGHPUT_MODE_ACTIVE + break; + } + // sl_btmesh_evt_mbt_server_state_changed_id + break; + } + case sl_btmesh_evt_mbt_server_chunk_id: { + // If not in Active state, ignore message + if (blob_transfer_server.state.active == 0) { + return; + } + sl_btmesh_evt_mbt_server_chunk_t const *msg = + &evt->data.evt_mbt_server_chunk; + // Increment progress + blob_transfer_server.progress += msg->data.len; + // Buffer data according to block offset + memcpy(&blob_transfer_server.block_buffer[msg->block_offset], + msg->data.data, + msg->data.len); + // Calculate progress in percent + float prog = SL_PROG_TO_PCT(blob_transfer_server.blob_size, + blob_transfer_server.progress); + log_debug("BLOB Transfer (%s) %3d.%02d%%" NL, + BLOB_ID_TO_STRING(&blob_transfer_server.blob_id), + (int)prog, + (int)(prog * 100) % 100); + (void)prog; + break; + } + case sl_btmesh_evt_mbt_server_transfer_cancel_id: { + if (blob_transfer_server.state.active == 0) { + return; + } + sl_btmesh_evt_mbt_server_transfer_cancel_t const *msg = + &evt->data.evt_mbt_server_transfer_cancel; + // Compare ID's + if (0 == memcmp(&msg->blob_id, + &blob_transfer_server.blob_id, + sizeof(sl_bt_uuid_64_t))) { + // State change + blob_transfer_server_state_change(IDLE_INACTIVE); + // Log cancellation + log_info("BLOB Transfer (%s) Canceled" NL, + BLOB_ID_TO_STRING(&blob_transfer_server.blob_id)); + } + break; + } + default: + // empty + break; + } +} + +static void blob_transfer_server_state_change(blob_transfer_server_state_t state) +{ + // Clear state flags + blob_transfer_server.state.raw = 0; + switch (state) { + case IDLE: + // Idle has an initial state transition to Idle/Inactive: fall through + case IDLE_INACTIVE: + blob_transfer_server.state.idle = 1; + blob_transfer_server.state.inactive = 1; + // Set the BLOB ID to Unknown, i.e. 0xFFFFFFFFFFFFFFFF + memset(&blob_transfer_server.blob_id, UINT8_MAX, sizeof(sl_bt_uuid_64_t)); + // Set BLOB Size to Unknown, i.e. 0xFFFFFFFF + blob_transfer_server.blob_size = UINT32_MAX; + // Set progress to Unknown, i.e. 0xFFFFFFFF + blob_transfer_server.progress = UINT32_MAX; + sl_free(blob_transfer_server.block_buffer); + blob_transfer_server.block_buffer = NULL; + break; + case IDLE_DONE: { + blob_transfer_server.state.idle = 1; + blob_transfer_server.state.done = 1; + // Log finished transfer + log_info("BLOB Transfer (%s) Done" NL, + BLOB_ID_TO_STRING(&blob_transfer_server.blob_id)); + sl_status_t sc = sl_btmesh_blob_storage_verify(); + log_status_critical_f(sc, "BLOB signing failed!" NL); +#if SL_BTMESH_BLOB_TRANSFER_SERVER_TRANSFER_DONE_CALLBACK_CFG_VAL + // Notify user that transfer has completed + sl_btmesh_blob_transfer_server_transfer_done(&blob_transfer_server.blob_id); +#endif // SL_BTMESH_BLOB_TRANSFER_SERVER_TRANSFER_DONE_CALLBACK_CFG_VAL + sl_free(blob_transfer_server.block_buffer); + break; + } + case ACTIVE: + case ACTIVE_TRANSFER: { + sl_status_t s; + blob_transfer_server.state.active = 1; + // Reset progress + blob_transfer_server.progress = 0; + + // Notify storage wrapper about write start + s = sl_btmesh_blob_storage_write_start(&blob_transfer_server.blob_id, + blob_transfer_server.blob_size); + + if (SL_STATUS_NO_MORE_RESOURCE == s) { + log_info("No more slots available, attempting erase." NL); + blob_transfer_server_state_change(ACTIVE_ERASING); + break; + } + + switch (s) { + case SL_STATUS_OK: + sl_btmesh_mbt_server_transfer_start_rsp(BTMESH_BLOB_TRANSFER_SERVER_MAIN, + sl_btmesh_mbt_server_status_success); +#if SL_BTMESH_BLOB_TRANSFER_START_CALLBACK_CFG_VAL + // Notify user about transfer start + sl_btmesh_blob_transfer_server_transfer_start(&blob_transfer_server.blob_id); +#endif // SL_BTMESH_BLOB_TRANSFER_START_CALLBACK_CFG_VAL + blob_transfer_server.state.transfer = 1; + break; + + default: + sl_btmesh_mbt_server_transfer_start_rsp(BTMESH_BLOB_TRANSFER_SERVER_MAIN, + sl_btmesh_mbt_server_status_internal_error); + blob_transfer_server_state_change(IDLE_INACTIVE); + break; + } + break; + case ACTIVE_ERASING: + case ACTIVE_ERASING_INVALID: + blob_transfer_server.state.active = 1; + blob_transfer_server.state.erasing = 1; + blob_transfer_server.state.erasing_invalid = 1; + sl_btmesh_blob_storage_delete_invalid_slots_start(); + break; + case ACTIVE_ERASING_UNMANAGED: + blob_transfer_server.state.active = 1; + blob_transfer_server.state.erasing = 1; + blob_transfer_server.state.erasing_unmanaged = 1; + sl_btmesh_blob_storage_delete_unmanaged_slots_start(); + break; + } + } +} + +void sl_btmesh_blob_transfer_server_step_handle(void) +{ + if (1 == blob_transfer_server.state.erasing) { + switch (sl_btmesh_blob_storage_get_erase_error_code()) { + case SL_BTMESH_BLOB_STORAGE_DELETE_SUCCESS: + blob_transfer_server_state_change(ACTIVE_TRANSFER); + break; + case SL_BTMESH_BLOB_STORAGE_DELETE_FAILED: + case SL_BTMESH_BLOB_STORAGE_DELETE_INACTIVE: + // If the delete failed or the last delete operation didn't find any + // invalid or unmanaged slot to delete + if (blob_transfer_server.state.erasing_invalid == 1) { + blob_transfer_server_state_change(ACTIVE_ERASING_UNMANAGED); + } else if (blob_transfer_server.state.erasing_unmanaged == 1) { + sl_btmesh_mbt_server_transfer_start_rsp(BTMESH_BLOB_TRANSFER_SERVER_MAIN, + sl_btmesh_mbt_server_status_storage_limit); + blob_transfer_server_state_change(IDLE_INACTIVE); + } + break; + default: + // empty + break; + } + } +} + +/** @} end mesh_blob_transfer_server */ diff --git a/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server.h b/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server.h new file mode 100644 index 00000000000..002ed416d26 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server.h @@ -0,0 +1,107 @@ +/***************************************************************************//** + * @file + * @brief Definition of BLOB Transfer Server interface + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_BLOB_TRANSFER_SERVER_H +#define SL_BTMESH_BLOB_TRANSFER_SERVER_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * @addtogroup mesh_blob_transfer_server BT Mesh BLOB Transfer Server + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Initializes the BLOB Transfer Server application + ******************************************************************************/ +extern void sl_btmesh_blob_transfer_server_init(void); + +/***************************************************************************//** + * Processes BT Mesh stack events related to BLOB Trasnfer Server + * + * @param[in] evt BT Mesh stack event + ******************************************************************************/ +extern void sl_btmesh_blob_transfer_server_on_event(sl_btmesh_msg_t const *evt); + +/***************************************************************************//** + * Let BLOB Transfer Server accept an incoming BLOB with given ID + * + * This function needs to be called from other application components, that can + * determine incoming BLOB ID's, before any transfer can be done. + * + * @note Firmware Update Server automatically handles this operation when it + * receives a firmware update start message + * (@ref sl_btmesh_evt_fw_update_server_update_start_req_id). + * + * @param blob_id Identifier of BLOB to be received + * @param timeout_10s Timeout of reception in 10 seconds. If no data is received + * for this time, the transfer will be suspended. The actual + * timeout is calculated as (1 + @p timeout_10s) × 10 s + * @param ttl The TTL used for communicating with the client + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_STATE In case transmission is already ongoing + ******************************************************************************/ +extern sl_status_t sl_btmesh_blob_transfer_server_start(sl_bt_uuid_64_t const * const blob_id, + const uint16_t timeout_10s, + const uint8_t ttl); + +/***************************************************************************//** + * Set PULL transfer retry parameters + * + * The new values will take effect at the next transfer start. The command does + * not modify parameters of the ongoing transfer. + * + * @param pull_mode_retry_interval_ms Retry interval in milliseconds + * @param pull_mode_retry_count Number of times to retry + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_STATE In case state is invalid + ******************************************************************************/ +extern sl_status_t sl_btmesh_blob_transfer_server_set_pull_mode_parameters(uint16_t pull_mode_retry_interval_ms, + uint16_t pull_mode_retry_count); + +/***************************************************************************//** + * Handles the BLOB transfer state machine + * + * Used for asynchronously erasing BLOBs + ******************************************************************************/ +void sl_btmesh_blob_transfer_server_step_handle(void); + +/** @} end mesh_blob_transfer_server */ + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif // SL_BTMESH_BLOB_TRANSFER_SERVER_H diff --git a/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server_api.c b/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server_api.c new file mode 100644 index 00000000000..f6d2e4794ee --- /dev/null +++ b/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server_api.c @@ -0,0 +1,105 @@ +/***************************************************************************//** + * @file + * @brief Weak implementation of user API functions + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ +#include "sl_btmesh.h" + +#include "sl_btmesh_blob_transfer_server_api.h" +#include "sl_btmesh_blob_storage.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#include "sl_btmesh_wstk_lcd.h" +#include +// First block flag +static bool first_block; +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +SL_WEAK void sl_btmesh_blob_transfer_server_transfer_start(sl_bt_uuid_64_t const *const blob_id) +{ + (void)blob_id; +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + sl_btmesh_LCD_write("BLOB Transfer Start", SL_BTMESH_WSTK_LCD_ROW_BLOB_STATUS_CFG_VAL); + char blob_id_buff[3 * 8] = { 0 }; + sprintf(blob_id_buff, + "0x%02X%02X%02X%02X%02X%02X%02X%02X", + blob_id->data[0], + blob_id->data[1], + blob_id->data[2], + blob_id->data[3], + blob_id->data[4], + blob_id->data[5], + blob_id->data[6], + blob_id->data[7]); + sl_btmesh_LCD_write(blob_id_buff, SL_BTMESH_WSTK_LCD_ROW_BLOB_ID_CFG_VAL); + first_block = true; +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +} + +SL_WEAK void sl_btmesh_blob_transfer_server_transfer_progress(sl_bt_uuid_64_t const *const blob_id, + float progress) +{ + (void)blob_id; + (void)progress; +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + if (first_block) { + sl_btmesh_LCD_write("BLOB Transfer Prog.", + SL_BTMESH_WSTK_LCD_ROW_BLOB_STATUS_CFG_VAL); + first_block = false; + } + char prog_buff[8] = { 0 }; + sprintf(prog_buff, "%3u.%01u %%", (uint8_t)progress, (uint8_t)(((uint16_t)(progress * 10)) % 10)); + sl_btmesh_LCD_write(prog_buff, SL_BTMESH_WSTK_LCD_ROW_BLOB_PROGRESS_CFG_VAL); +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +} + +SL_WEAK void sl_btmesh_blob_transfer_server_transfer_done(sl_bt_uuid_64_t const *const blob_id) +{ + (void)blob_id; +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + sl_btmesh_LCD_write("BLOB Transfer Done", SL_BTMESH_WSTK_LCD_ROW_BLOB_STATUS_CFG_VAL); +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +} + +SL_WEAK void sl_btmesh_blob_transfer_server_transfer_abort(sl_bt_uuid_64_t const *const blob_id) +{ + (void)blob_id; +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + sl_btmesh_LCD_write("BLOB Transfer Aborted", SL_BTMESH_WSTK_LCD_ROW_BLOB_STATUS_CFG_VAL); +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +} + +SL_WEAK void sl_btmesh_blob_transfer_server_storage_full(void) +{ +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + sl_btmesh_LCD_write("BLOB Storage Full", SL_BTMESH_WSTK_LCD_ROW_BLOB_STATUS_CFG_VAL); +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +} diff --git a/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server_api.h b/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server_api.h new file mode 100644 index 00000000000..6a990a9a112 --- /dev/null +++ b/app/btmesh/common/btmesh_blob_transfer_server/sl_btmesh_blob_transfer_server_api.h @@ -0,0 +1,96 @@ +/***************************************************************************//** + * @file + * @brief User API header for BLOB Transfer Server component + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_BLOB_TRANSFER_SERVER_API_H +#define SL_BTMESH_BLOB_TRANSFER_SERVER_API_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * @addtogroup mesh_blob_transfer_server + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup mesh_blob_transfer_server_api + * + * BT Mesh BLOB Transfer Server user-overridable API + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Called when starting BLOB transfer + * + * @param[in] blob_id Identifier of BLOB to be transferred + ******************************************************************************/ +extern void sl_btmesh_blob_transfer_server_transfer_start(sl_bt_uuid_64_t const *const blob_id); + +/***************************************************************************//** + * Called when new block is started + * + * @note Progress is incremented on a chunk basis, but user callback is called + * on block basis to avoid too frequent calls. + * + * @param[in] blob_id Identifier of the BLOB being transferred + * @param[in] progress Progress in floating point percentage + ******************************************************************************/ +extern void sl_btmesh_blob_transfer_server_transfer_progress(sl_bt_uuid_64_t const *const blob_id, + float progress); + +/***************************************************************************//** + * Called when BLOB transfer is done + * + * @param[in] blob_id Identifier of BLOB transferred + ******************************************************************************/ +extern void sl_btmesh_blob_transfer_server_transfer_done(sl_bt_uuid_64_t const *const blob_id); + +/***************************************************************************//** + * Called when BLOB transfer is aborted + * + * @param[in] blob_id Identifier of BLOB being transferred + ******************************************************************************/ +extern void sl_btmesh_blob_transfer_server_transfer_abort(sl_bt_uuid_64_t const *const blob_id); + +/***************************************************************************//** + * Called when BLOB storage signals it's full + ******************************************************************************/ +extern void sl_btmesh_blob_transfer_server_storage_full(void); + +/** @} end mesh_blob_transfer_server_api */ + +/** @} end mesh_blob_transfer_server */ + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif // SL_BTMESH_BLOB_TRANSFER_SERVER_API_H diff --git a/app/btmesh/common/btmesh_ctl_client/btmesh_ctl_client.dcd b/app/btmesh/common/btmesh_ctl_client/btmesh_ctl_client.dcd new file mode 100644 index 00000000000..86ef9c7acdd --- /dev/null +++ b/app/btmesh/common/btmesh_ctl_client/btmesh_ctl_client.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1305", "name":"Light CTL Client"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_ctl_client/config/sl_btmesh_ctl_client_config.h b/app/btmesh/common/btmesh_ctl_client/config/sl_btmesh_ctl_client_config.h new file mode 100644 index 00000000000..f8758ac675a --- /dev/null +++ b/app/btmesh/common/btmesh_ctl_client/config/sl_btmesh_ctl_client_config.h @@ -0,0 +1,63 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_CTL_CLIENT_CONFIG_H +#define SL_BTMESH_CTL_CLIENT_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// CTL Client configuration + +// CTL model retransmission count +// Default: 3 +// CTL model retransmission count (How many times CTL model messages are to be sent out for reliability). +#define SL_BTMESH_CTL_CLIENT_RETRANSMISSION_COUNT_CFG_VAL (3) + +// CTL model retransmission timeout [ms] <0-1275:5> +// Default: 50 +// CTL model retransmission timeout. +#define SL_BTMESH_CTL_CLIENT_RETRANSMISSION_TIMEOUT_CFG_VAL (50) + +// Enable color temperature wraparound +// Default: 0 +// If the color temperature reaches the max or min value then it wraps around. +#define SL_BTMESH_CTL_CLIENT_TEMPERATURE_WRAP_ENABLED_CFG_VAL (0) + +// Enable Logging +// Default: 1 +// Enable / disable Logging for CTL Client model specific messages for this component. +#define SL_BTMESH_CTL_CLIENT_LOGGING_CFG_VAL (1) + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_CTL_CLIENT_CONFIG_H diff --git a/app/btmesh/common/btmesh_ctl_client/sl_btmesh_ctl_client.c b/app/btmesh/common/btmesh_ctl_client/sl_btmesh_ctl_client.c new file mode 100644 index 00000000000..84c3fa9ccc6 --- /dev/null +++ b/app/btmesh/common/btmesh_ctl_client/sl_btmesh_ctl_client.c @@ -0,0 +1,259 @@ +/***************************************************************************//** + * @file + * @brief Bt Mesh CTL Client module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include +#include "em_common.h" +#include "sl_status.h" + +#include "sl_btmesh_api.h" +#include "sl_bt_api.h" +#include "sl_btmesh_dcd.h" + +#include "sl_btmesh_generic_model_capi_types.h" +#include "sl_btmesh_lib.h" + +#include "app_assert.h" +#include "sl_simple_timer.h" +#include "sl_btmesh_lighting_client.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_ctl_client_config.h" +#include "sl_btmesh_ctl_client.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup Lighting + * @{ + ******************************************************************************/ + +/// No flags used for message +#define NO_FLAGS 0 +/// Immediate transition time is 0 seconds +#define IMMEDIATE 0 +/// Callback has not parameters +#define NO_CALLBACK_DATA (void *)NULL +/// High Priority +#define HIGH_PRIORITY 0 +/// Minimum color temperature 800K +#define TEMPERATURE_MIN 0x0320 +/// Maximum color temperature 20000K +#define TEMPERATURE_MAX 0x4e20 +/// Scale factor for temperature calculations +#define TEMPERATURE_SCALE_FACTOR 100 +/// Delta UV is hardcoded to 0 +#define DELTA_UV 0 +/// Initial temperature percentage value +#define TEMPERATURE_PCT_INIT 50 +/// Maximum temperature percentage value +#define TEMPERATURE_PCT_MAX 100 +/// Temperature level initial value @ref temperature_level +#define TEMPERATURE_LEVEL_INIT 0 +/// Delay unit value for request for ctl messages in millisecond +#define REQ_DELAY_MS 50 + +/// periodic timer handle +static sl_simple_timer_t ctl_retransmission_timer; + +/// periodic timer callback +static void ctl_retransmission_timer_cb(sl_simple_timer_t *handle, + void *data); + +/// temperature level percentage +static uint8_t temperature_percent = TEMPERATURE_PCT_INIT; +/// temperature level converted from percentage to actual value, range 0..65535 +static uint16_t temperature_level = TEMPERATURE_LEVEL_INIT; +/// number of ctl requests to be sent +static uint8_t ctl_request_count = 0; +/// ctl transaction identifier +static uint8_t ctl_trid = 0; + +/***************************************************************************//** + * This function publishes one light CTL request to change the temperature level + * of light(s) in the group. Global variable temperature_level holds the latest + * desired light temperature level. + * The CTL request also send lightness_level which holds the latest desired light + * lightness level and Delta UV which is hardcoded to 0 for this application. + * + * param[in] retrans Indicates if this is the first request or a retransmission, + * possible values are 0 = first request, 1 = retransmission. + * + * @note This application sends multiple ctl requests for each + * medium button press to improve reliability. + * The transaction ID is not incremented in case of a retransmission. + ******************************************************************************/ +static void send_ctl_request(uint8_t retrans) +{ + struct mesh_generic_request req; + sl_status_t sc; + + req.kind = mesh_lighting_request_ctl; + req.ctl.lightness = sl_btmesh_get_lightness(); + req.ctl.temperature = temperature_level; + req.ctl.deltauv = DELTA_UV; //hardcoded delta uv + + // Increment transaction ID for each request, unless it's a retransmission + if (retrans == 0) { + ctl_trid++; + } + + // Delay for the request is calculated so that the last request will have + // a zero delay and each of the previous request have delay that increases + // in 50 ms steps. For example, when using three ctl requests + // per button press the delays are set as 100, 50, 0 ms + uint16_t delay = (ctl_request_count - 1) * REQ_DELAY_MS; + + sc = mesh_lib_generic_client_publish(MESH_LIGHTING_CTL_CLIENT_MODEL_ID, + BTMESH_CTL_CLIENT_MAIN, + ctl_trid, + &req, + IMMEDIATE, // transition + delay, + NO_FLAGS // flags + ); + + if (sc == SL_STATUS_OK) { + log_info("CTL request sent, trid = %u, delay = %u" NL, ctl_trid, delay); + } else { + log_btmesh_status_f(sc, "CTL Client Publish failed" NL); + } + + // Keep track of how many requests has been sent + if (ctl_request_count > 0) { + ctl_request_count--; + } +} + +/******************************************************************************* + * This function change the color temperature and sends it to the server. + * + * @param[in] change_percentage Defines the color temperature percentage change, + * possible values are -100% - + 100%. + * + ******************************************************************************/ +void sl_btmesh_change_temperature(int8_t change_percentage) +{ + // Adjust light brightness, using Light Lightness model + if (change_percentage > 0) { + temperature_percent += change_percentage; + if (temperature_percent > TEMPERATURE_PCT_MAX) { +#if (SL_BTMESH_CTL_CLIENT_TEMPERATURE_WRAP_ENABLED_CFG_VAL != 0) + temperature_percent = 0; +#else + temperature_percent = TEMPERATURE_PCT_MAX; +#endif + } + } else { + if (temperature_percent < (-change_percentage)) { +#if (SL_BTMESH_CTL_CLIENT_TEMPERATURE_WRAP_ENABLED_CFG_VAL != 0) + temperature_percent = TEMPERATURE_PCT_MAX; +#else + temperature_percent = 0; +#endif + } else { + temperature_percent += change_percentage; + } + } + + sl_btmesh_set_temperature(temperature_percent); +} + +/******************************************************************************* + * This function change the temperature and send it to the server. + * + * @param[in] new_color_temperature_percentage Defines new color temperature + * value as percentage. + * Valid values 0-100 % + * + ******************************************************************************/ +void sl_btmesh_set_temperature(uint8_t new_color_temperature_percentage) +{ + // Adjust light temperature, using Light CTL model + if (new_color_temperature_percentage <= TEMPERATURE_PCT_MAX) { + temperature_percent = new_color_temperature_percentage; + } else { + return; + } + + // Using square of percentage to change temperature more uniformly + // just for demonstration + temperature_level = TEMPERATURE_MIN \ + + (temperature_percent * temperature_percent \ + / TEMPERATURE_PCT_MAX) \ + * (TEMPERATURE_MAX - TEMPERATURE_MIN) \ + / TEMPERATURE_SCALE_FACTOR; + log("Set temperature to %u %% / level %u K" NL, + temperature_percent * temperature_percent / TEMPERATURE_PCT_MAX, + temperature_level); + + // Request is sent multiple times to improve reliability + ctl_request_count = SL_BTMESH_CTL_CLIENT_RETRANSMISSION_COUNT_CFG_VAL; + + send_ctl_request(0); //Send the first request + + // If there are more requests to send, start a repeating soft timer + // to trigger retransmission of the request after 50 ms delay + if (ctl_request_count > 0) { + sl_status_t sc = sl_simple_timer_start(&ctl_retransmission_timer, + SL_BTMESH_CTL_CLIENT_RETRANSMISSION_TIMEOUT_CFG_VAL, + ctl_retransmission_timer_cb, + NO_CALLBACK_DATA, + true); + app_assert_status_f(sc, "Failed to start periodic timer"); + } +} + +/***************************************************************************//** + * Timer Callbacks + * @param[in] handle pointer to handle instance + * @param[in] data pointer to input data + ******************************************************************************/ +static void ctl_retransmission_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + + send_ctl_request(1); // Retransmit ctl message + // Stop retransmission timer if it was the last attempt + if (ctl_request_count == 0) { + sl_status_t sc = sl_simple_timer_stop(&ctl_retransmission_timer); + app_assert_status_f(sc, "Failed to stop periodic timer"); + } +} +/** @} (end addtogroup Lighting) */ diff --git a/app/btmesh/common/btmesh_ctl_client/sl_btmesh_ctl_client.h b/app/btmesh/common/btmesh_ctl_client/sl_btmesh_ctl_client.h new file mode 100644 index 00000000000..bb767361876 --- /dev/null +++ b/app/btmesh/common/btmesh_ctl_client/sl_btmesh_ctl_client.h @@ -0,0 +1,53 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_ctl_client.h + ******************************************************************************* + * # 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_BTMESH_CTL_CLIENT_H +#define SL_BTMESH_CTL_CLIENT_H + +/******************************************************************************* + * This function change the color temperature and sends it to the server. + * + * @param[in] change_percentage Defines the color temperature percentage change, + * possible values are -100% - + 100%. + * + ******************************************************************************/ +void sl_btmesh_change_temperature(int8_t change_percentage); + +/******************************************************************************* + * This function change the temperature and send it to the server. + * + * @param[in] new_color_temperature_percentage Defines new color temperature + * value as percentage. + * Valid values 0-100 % + * + ******************************************************************************/ +void sl_btmesh_set_temperature(uint8_t new_color_temperature_percentage); + +#endif // SL_BTMESH_CTL_CLIENT_H diff --git a/app/btmesh/common/btmesh_ctl_server/btmesh_ctl_server.dcd b/app/btmesh/common/btmesh_ctl_server/btmesh_ctl_server.dcd new file mode 100644 index 00000000000..3a5fbb56bb0 --- /dev/null +++ b/app/btmesh/common/btmesh_ctl_server/btmesh_ctl_server.dcd @@ -0,0 +1,18 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1303", "name":"Light CTL Server"}, + {"mid":"0x1304", "name":"Light CTL Setup Server"} + ] + }, + { + "name": "Temperature", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1002", "name":"Generic Level Server"}, + {"mid":"0x1306", "name":"Light CTL Temperature Server"} + ] + } +] \ No newline at end of file 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 new file mode 100644 index 00000000000..6b766004a42 --- /dev/null +++ b/app/btmesh/common/btmesh_ctl_server/config/sl_btmesh_ctl_server_config.h @@ -0,0 +1,93 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_CTL_SERVER_CONFIG_H +#define SL_BTMESH_CTL_SERVER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// CTL Server configuration + +// Timeout [ms] for saving States of the model to NVM. +// Default: 5000 +// Timeout [ms] for saving States of the model to NVM. +#define SL_BTMESH_CTL_SERVER_NVM_SAVE_TIME_CFG_VAL (5000) + +// PS Key for NVM Page where the States of the Lighting Model are saved. +// Default: 0x4005 +// PS Key for NVM Page where the States of the Lighting Model are saved. +#define SL_BTMESH_CTL_SERVER_PS_KEY_CFG_VAL (0x4005) + +// Periodicity [ms] for updating the PWM duty cycle during a transition. +// Default: 1 +// Periodicity [ms] for updating the PWM duty cycle during a transition. +#define SL_BTMESH_CTL_SERVER_PWM_UPDATE_PERIOD_CFG_VAL (1) + +// Periodicity [ms] for updating the UI with temperature & delta UV during a transition. +// Default: 100 +// Periodicity [ms] for updating the temperature & delta UV values on the UI. +#define SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL (100) + +// Default Color Temperature +// Default: 6500 +// Default Color Temperature value. +#define SL_BTMESH_CTL_SERVER_DEFAULT_TEMPERATURE_CFG_VAL (6500) + +// Default Delta UV +// Default: 0 +// Default Delta UV. +#define SL_BTMESH_CTL_SERVER_DEFAULT_DELTAUV_CFG_VAL (0) + +// Minimum Color Temperature +// Default: 800 +// Minimum Color Temperature. +#define SL_BTMESH_CTL_SERVER_MINIMUM_TEMPERATURE_CFG_VAL (800) + +// Maximum Color Temperature +// Default: 800 +// Maximum Color Temperature. +#define SL_BTMESH_CTL_SERVER_MAXIMUM_TEMPERATURE_CFG_VAL (20000) + +// Enable Logging +// Default: 1 +// Enable / disable Logging for Lighting Server model specific messages for this component. +#define SL_BTMESH_CTL_SERVER_LOGGING_CFG_VAL (1) + +// + +// + +// <<< end of configuration section >>> + +// The PWM update period shall not be greater than the UI update period +#if (SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL) < (SL_BTMESH_CTL_SERVER_PWM_UPDATE_PERIOD_CFG_VAL) +#error "The SL_BTMESH_CTL_SERVER_PWM_UPDATE_PERIOD_CFG_VAL shall be less than SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL." +#endif + +#endif // SL_BTMESH_CTL_SERVER_CONFIG_H 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 new file mode 100644 index 00000000000..dc8fd3a9a6e --- /dev/null +++ b/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_server.c @@ -0,0 +1,2364 @@ +/***************************************************************************//** + * @file + * @brief Bt Mesh Lighting Client module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +// C Standard Library headers +#include +#include +#include + +#include +#include "em_common.h" +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" + +#include "sl_btmesh_generic_model_capi_types.h" +#include "sl_btmesh_lib.h" + +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_ctl_server_config.h" +#include "sl_btmesh_ctl_server.h" +#include "sl_btmesh_lighting_server.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup CTL_Server + * @{ + ******************************************************************************/ + +#ifdef SL_CATALOG_BTMESH_SCENE_SERVER_PRESENT +#define scene_server_reset_register(elem_index) \ + scene_server_reset_register_impl(elem_index) +#else +#define scene_server_reset_register(elem_index) +#endif + +#define NO_FLAGS 0 ///< No flags used for message +#define IMMEDIATE 0 ///< Immediate transition time is 0 seconds +#define NO_CALLBACK_DATA (void *)NULL ///< Callback has no parameters +#define HIGH_PRIORITY 0 ///< High Priority +/// Values greater than max 37200000 are treated as unknown remaining time +#define UNKNOWN_REMAINING_TIME 40000000 + +/// Lightbulb state +static PACKSTRUCT(struct lightbulb_state { + // Temperature server + uint16_t temperature_current; ///< Current temperature value + uint16_t temperature_target; ///< Target temperature value + uint16_t temperature_default; ///< Default temperature value + uint16_t temperature_min; ///< Minimum temperature value + uint16_t temperature_max; ///< Maximum temperature value + + // Delta UV + int16_t deltauv_current; ///< Current delta UV value + int16_t deltauv_target; ///< Target delta UV value + int16_t deltauv_default; ///< Default delta UV value + + // Secondary Generic Level + int16_t sec_level_current; ///< Current secondary generic level value + int16_t sec_level_target; ///< Target secondary generic level value +}) lightbulb_state; + +static sl_status_t ctl_temperature_update(uint16_t element_index, + uint32_t remaining_ms); + +/// copy of transition delay parameter, needed for delayed ctl request +static uint32_t delayed_ctl_trans = 0; +/// copy of transition delay parameter, needed for delayed temperature request +static uint32_t delayed_ctl_temperature_trans = 0; +/// copy of transition delay parameter, needed for +/// delayed secondary generic level request +static uint32_t delayed_sec_level_trans = 0; +/// copy of generic request kind, needed for delayed secondary generic request +static mesh_generic_request_t sec_level_request_kind = mesh_generic_request_level; +/// copy of move transition parameter for secondary generic request +static uint32_t move_sec_level_trans = 0; +/// copy of move delta parameter for secondary generic request +static int16_t move_sec_level_delta = 0; + +// Timer handles +static sl_simple_timer_t ctl_sec_level_move_timer; +static sl_simple_timer_t ctl_sec_level_transition_timer; +static sl_simple_timer_t ctl_temp_transition_timer; +static sl_simple_timer_t ctl_transition_complete_timer; +static sl_simple_timer_t ctl_delayed_sec_level_timer; +static sl_simple_timer_t ctl_delayed_ctl_temperature_timer; +static sl_simple_timer_t ctl_delayed_ctl_request_timer; +static sl_simple_timer_t ctl_state_store_timer; + +// Timer callbacks +static void ctl_sec_level_move_timer_cb(sl_simple_timer_t *handle, + void *data); +static void ctl_sec_level_transition_timer_cb(sl_simple_timer_t *handle, + void *data); +static void ctl_temp_transition_timer_cb(sl_simple_timer_t *handle, + void *data); +static void ctl_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data); +static void ctl_delayed_sec_level_timer_cb(sl_simple_timer_t *handle, + void *data); +static void ctl_delayed_ctl_temperature_timer_cb(sl_simple_timer_t *handle, + void *data); +static void ctl_delayed_ctl_request_timer_cb(sl_simple_timer_t *handle, + void *data); +static void ctl_state_store_timer_cb(sl_simple_timer_t *handle, + void *data); + +/***************************************************************************//** + * This function loads the saved light state from Persistent Storage and + * copies the data in the global variable lightbulb_state. + * If PS key with ID SL_BTMESH_CTL_SERVER_PS_KEY_CFG_VAL does not exist or loading failed, + * lightbulb_state is set to zero and some default values are written to it. + * + * @return Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightbulb_state_load(void); + +/***************************************************************************//** + * This function validates the lighbulb_state and change it if it is against + * the specification. + ******************************************************************************/ +static void lightbulb_state_validate_and_correct(void); + +/***************************************************************************//** + * This function is called each time the lightbulb state in RAM is changed. + * It sets up a soft timer that will save the state in flash after small delay. + * The purpose is to reduce amount of unnecessary flash writes. + ******************************************************************************/ +static void lightbulb_state_changed(void); + +/***************************************************************************//** + * This function validates the lighbulb_state and change it if it is against + * the specification. + ******************************************************************************/ +static void lightbulb_state_validate_and_correct(void); + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_respond to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_respond(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms, + uint8_t response_flags); + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_update to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_update(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms); + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_publish to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_publish(uint16_t model_id, + uint16_t element_index, + mesh_generic_state_t kind); + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_register_handler with an assert which + * detects if the Btmesh API call results in error. The parameters of the two + * functions are the same but the wrapper does not have return value. + ******************************************************************************/ +static void generic_server_register_handler(uint16_t model_id, + uint16_t elem_index, + mesh_lib_generic_server_client_request_cb cb, + mesh_lib_generic_server_change_cb ch, + mesh_lib_generic_server_recall_cb recall); + +#ifdef SL_CATALOG_BTMESH_SCENE_SERVER_PRESENT +/***************************************************************************//** + * Wrapper for sl_btmesh_scene_server_reset_register with an assert which + * detects if the Btmesh API call results in error. The parameters of the two + * functions are the same but the wrapper does not have return value. + * The scene server register shall be reset if the state of the model changes in + * order to clear the current scene. + * This function is available only if the btmesh_scene_server component is added + * to the project. + ******************************************************************************/ +static void scene_server_reset_register_impl(uint16_t elem_index); +#endif + +/***************************************************************************//** + * \defgroup LightCTL + * \brief Light CTL Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup LightCTL + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to light CTL request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t ctl_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_lighting_state_ctl; + current.ctl.lightness = sl_btmesh_get_lightness_current(); + current.ctl.temperature = lightbulb_state.temperature_current; + current.ctl.deltauv = lightbulb_state.deltauv_current; + + target.kind = mesh_lighting_state_ctl; + target.ctl.lightness = sl_btmesh_get_lightness_target(); + target.ctl.temperature = lightbulb_state.temperature_target; + target.ctl.deltauv = lightbulb_state.deltauv_target; + + return generic_server_respond(MESH_LIGHTING_CTL_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + 0x00); +} + +/***************************************************************************//** + * Update light CTL state. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t ctl_update(uint16_t element_index, uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_lighting_state_ctl; + current.ctl.lightness = sl_btmesh_get_lightness_current(); + current.ctl.temperature = lightbulb_state.temperature_current; + current.ctl.deltauv = lightbulb_state.deltauv_current; + + target.kind = mesh_lighting_state_ctl; + target.ctl.lightness = sl_btmesh_get_lightness_target(); + target.ctl.temperature = lightbulb_state.temperature_target; + target.ctl.deltauv = lightbulb_state.deltauv_target; + + return generic_server_update(MESH_LIGHTING_CTL_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); +} + +/***************************************************************************//** + * Update light CTL state and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t ctl_update_and_publish(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t e; + (void)element_index; + + e = ctl_update(BTMESH_LIGHTING_SERVER_MAIN, remaining_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_LIGHTING_CTL_SERVER_MODEL_ID, + BTMESH_LIGHTING_SERVER_MAIN, + mesh_lighting_state_ctl); + } + + return e; +} + +/***************************************************************************//** + * This function process the requests for the light CTL model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void ctl_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)element_index; + (void)server_addr; + + log_info("ctl_request: lightness=%u, color temperature=%u, delta_uv=%d, " + "transition=%lu, delay=%u" NL, + request->ctl.lightness, + request->ctl.temperature, + request->ctl.deltauv, + transition_ms, + delay_ms); + + if ((sl_btmesh_get_lightness_current() == request->ctl.lightness) + && (lightbulb_state.temperature_current == request->ctl.temperature) + && (lightbulb_state.deltauv_current == request->ctl.deltauv)) { + log_info("Request for current state received; no op" NL); + } else { + if (sl_btmesh_get_lightness_current() != request->ctl.lightness) { + log_info("Setting lightness to <%u>" NL, request->ctl.lightness); + } + if (lightbulb_state.temperature_current != request->ctl.temperature) { + log_info("Setting color temperature to <%u>" NL, request->ctl.temperature); + } + if (lightbulb_state.deltauv_current != request->ctl.deltauv) { + log_info("Setting delta UV to <%d>" NL, request->ctl.deltauv); + } + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + sl_btmesh_set_lightness_current(request->ctl.lightness); + sl_btmesh_set_lightness_target(request->ctl.lightness); + if (request->ctl.lightness != 0) { + sl_btmesh_set_lightness_last(request->ctl.lightness); + } + + // update LED PWM duty cycle + sl_btmesh_lighting_set_level(sl_btmesh_get_lightness_current(), + IMMEDIATE); + + lightbulb_state.temperature_current = request->ctl.temperature; + lightbulb_state.temperature_target = request->ctl.temperature; + lightbulb_state.deltauv_current = request->ctl.deltauv; + lightbulb_state.deltauv_target = request->ctl.deltauv; + + // update LED color temperature + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_current, + lightbulb_state.deltauv_current, + IMMEDIATE); + } else if (delay_ms > 0) { + // a delay has been specified for the light change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + sl_btmesh_set_lightness_target(request->ctl.lightness); + lightbulb_state.temperature_target = request->ctl.temperature; + lightbulb_state.deltauv_target = request->ctl.deltauv; + sl_status_t sc = sl_simple_timer_start(&ctl_delayed_ctl_request_timer, + delay_ms, + ctl_delayed_ctl_request_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed CTL Request timer"); + // store transition parameter for later use + delayed_ctl_trans = transition_ms; + } else { + // no delay but transition time has been set. + sl_btmesh_set_lightness_target(request->ctl.lightness); + lightbulb_state.temperature_target = request->ctl.temperature; + lightbulb_state.deltauv_target = request->ctl.deltauv; + + sl_btmesh_lighting_set_level(sl_btmesh_get_lightness_target(), + transition_ms); + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_target, + lightbulb_state.deltauv_target, + transition_ms); + + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&ctl_transition_complete_timer, + transition_ms, + ctl_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start CTL Transition Complete timer"); + } + lightbulb_state_changed(); + + // State has changed, so the current scene number is reset + scene_server_reset_register(BTMESH_LIGHTING_SERVER_MAIN); + } + + uint32_t remaining_ms = delay_ms + transition_ms; + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + ctl_response(BTMESH_LIGHTING_SERVER_MAIN, client_addr, appkey_index, remaining_ms); + } + ctl_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN, remaining_ms); + // publish to bound states + generic_server_publish(MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + BTMESH_LIGHTING_SERVER_MAIN, + mesh_lighting_state_lightness_actual); + generic_server_publish(MESH_LIGHTING_CTL_TEMPERATURE_SERVER_MODEL_ID, + BTMESH_CTL_SERVER_TEMPERATURE, + mesh_lighting_state_ctl_temperature); +} + +/***************************************************************************//** + * This function is a handler for light CTL change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void ctl_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (current->kind != mesh_lighting_state_ctl) { + // if kind is not 'ctl' then just report the change here + log_info("ctl_change, kind %u" NL, current->kind); + return; + } + + if (sl_btmesh_get_lightness_current() != current->ctl.lightness) { + log_info("Lightness update: from %u to %u" NL, + lightbulb_state.temperature_current, + current->ctl.lightness); + sl_btmesh_set_lightness_current(current->ctl.lightness); + lightbulb_state_changed(); + } else { + log_info("Lightness update -same value (%u)" NL, current->ctl.lightness); + } + + if (lightbulb_state.temperature_current != current->ctl.temperature) { + log_info("Color temperature update: from %u to %u" NL, + lightbulb_state.temperature_current, + current->ctl.temperature); + lightbulb_state.temperature_current = current->ctl.temperature; + lightbulb_state_changed(); + } else { + log_info("Color temperature update -same value (%u)" NL, + lightbulb_state.temperature_current); + } + + if (lightbulb_state.deltauv_current != current->ctl.deltauv) { + log_info("Delta UV update: from %d to %d" NL, + lightbulb_state.deltauv_current, current->ctl.deltauv); + lightbulb_state.deltauv_current = current->ctl.deltauv; + lightbulb_state_changed(); + } else { + log_info("Delta UV update -same value (%d)" NL, + lightbulb_state.deltauv_current); + } +} + +/***************************************************************************//** + * This function is a handler for light CTL recall event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void ctl_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + (void)element_index; + + log_info("Light CTL recall" NL); + if (transition_ms == IMMEDIATE) { + sl_btmesh_set_lightness_target(current->ctl.lightness); + lightbulb_state.temperature_target = current->ctl.temperature; + lightbulb_state.deltauv_target = current->ctl.deltauv; + } else { + sl_btmesh_set_lightness_target(target->ctl.lightness); + lightbulb_state.temperature_target = target->ctl.temperature; + lightbulb_state.deltauv_target = target->ctl.deltauv; + } + + // Lightness server is mandatory for CTL, so lightness change is handled + // in lightness_recall function and here we handle temperature and deltauv + if ((sl_btmesh_get_lightness_current() + == sl_btmesh_get_lightness_target()) + && (lightbulb_state.temperature_current + == lightbulb_state.temperature_target) + && (lightbulb_state.deltauv_current + == lightbulb_state.deltauv_target)) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall CTL lightness to %u, color temperature to %u, delta UV to %d " + "with transition=%lu ms" NL, + sl_btmesh_get_lightness_target(), + lightbulb_state.temperature_target, + lightbulb_state.deltauv_target, + transition_ms); + if (sl_btmesh_get_lightness_current() + != sl_btmesh_get_lightness_target()) { + sl_btmesh_lighting_set_level(sl_btmesh_get_lightness_target(), + transition_ms); + } + if ((lightbulb_state.temperature_current + != lightbulb_state.temperature_target) + || (lightbulb_state.deltauv_current + != lightbulb_state.deltauv_target)) { + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_target, + lightbulb_state.deltauv_target, + transition_ms); + } + if (transition_ms == IMMEDIATE) { + sl_btmesh_set_lightness_current(current->ctl.lightness); + lightbulb_state.temperature_current = current->ctl.temperature; + lightbulb_state.deltauv_current = current->ctl.deltauv; + } else { + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&ctl_transition_complete_timer, + transition_ms, + ctl_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start CTL Transition Complete timer"); + } + lightbulb_state_changed(); + } + + // Lightness substate is updated in lightness_recall, here only temperature + // substate is updated, it is needed also for LC recall to not set LC mode + // to zero by bindings + sl_status_t e; + e = ctl_temperature_update(BTMESH_CTL_SERVER_TEMPERATURE, transition_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_LIGHTING_CTL_SERVER_MODEL_ID, + BTMESH_LIGHTING_SERVER_MAIN, + mesh_lighting_state_ctl); + } +} + +/***************************************************************************//** + * This function is called when a light CTL request + * with non-zero transition time has completed. + ******************************************************************************/ +static void ctl_transition_complete(void) +{ + // transition done -> set state, update and publish + sl_btmesh_set_lightness_current(sl_btmesh_get_lightness_target()); + lightbulb_state.temperature_current = lightbulb_state.temperature_target; + lightbulb_state.deltauv_current = lightbulb_state.deltauv_target; + + log_info("Transition complete. New lightness is %u, " + "new color temperature is %u and new deltauv is %d" NL, + sl_btmesh_get_lightness_current(), + lightbulb_state.temperature_current, + lightbulb_state.deltauv_current); + + lightbulb_state_changed(); + ctl_update_and_publish(BTMESH_CTL_SERVER_MAIN, IMMEDIATE); +} + +/***************************************************************************//** + * This function is called when delay for light CTL request has completed. + ******************************************************************************/ +static void delayed_ctl_request(void) +{ + log_info("Starting delayed CTL request: lightness %u -> %u, color temperature %u -> %u, " + "delta UV %d -> %d, %lu ms" NL, + sl_btmesh_get_lightness_current(), + sl_btmesh_get_lightness_target(), + lightbulb_state.temperature_current, + lightbulb_state.temperature_target, + lightbulb_state.deltauv_current, + lightbulb_state.deltauv_target, + delayed_ctl_trans); + + sl_btmesh_lighting_set_level(sl_btmesh_get_lightness_target(), + delayed_ctl_trans); + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_target, + lightbulb_state.deltauv_target, + delayed_ctl_trans); + + if (delayed_ctl_trans == 0) { + // no transition delay, update state immediately + sl_btmesh_set_lightness_current(sl_btmesh_get_lightness_target()); + lightbulb_state.temperature_current = lightbulb_state.temperature_target; + lightbulb_state.deltauv_current = lightbulb_state.deltauv_target; + + lightbulb_state_changed(); + ctl_update_and_publish(BTMESH_CTL_SERVER_MAIN, delayed_ctl_trans); + } else { + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&ctl_transition_complete_timer, + delayed_ctl_trans, + ctl_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start CTL Transition Complete timer"); + } +} + +/** @} (end addtogroup LightCTL) */ + +/***************************************************************************//** + * \defgroup LightCTLSetup + * \brief Light CTL Setup Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup LightCTLSetup + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to light CTL setup request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] kind Type of state used in light CTL setup response. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t ctl_setup_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + mesh_generic_state_t kind) +{ + struct mesh_generic_state current; + + current.kind = kind; + + switch (kind) { + case mesh_lighting_state_ctl_default: + current.ctl.lightness = sl_btmesh_get_lightness_default(); + current.ctl.temperature = lightbulb_state.temperature_default; + current.ctl.deltauv = lightbulb_state.deltauv_default; + break; + case mesh_lighting_state_ctl_temperature_range: + current.ctl_temperature_range.min = lightbulb_state.temperature_min; + current.ctl_temperature_range.max = lightbulb_state.temperature_max; + break; + default: + break; + } + + return generic_server_respond(MESH_LIGHTING_CTL_SETUP_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + NULL, + 0, + 0x00); +} + +/***************************************************************************//** + * Update light CTL setup state. + * + * @param[in] element_index Server model element index. + * @param[in] kind Type of state used in light CTL setup update. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t ctl_setup_update(uint16_t element_index, + mesh_generic_state_t kind) +{ + struct mesh_generic_state current; + + current.kind = kind; + + switch (kind) { + case mesh_lighting_state_ctl_default: + current.ctl.lightness = sl_btmesh_get_lightness_default(); + current.ctl.temperature = lightbulb_state.temperature_default; + current.ctl.deltauv = lightbulb_state.deltauv_default; + break; + case mesh_lighting_state_ctl_temperature_range: + current.ctl_temperature_range.min = lightbulb_state.temperature_min; + current.ctl_temperature_range.max = lightbulb_state.temperature_max; + break; + default: + break; + } + + return generic_server_update(MESH_LIGHTING_CTL_SERVER_MODEL_ID, + element_index, + ¤t, + NULL, + 0); +} + +/***************************************************************************//** + * This function process the requests for the light CTL setup model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void ctl_setup_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + (void)transition_ms; + (void)delay_ms; + + mesh_generic_state_t kind = mesh_generic_state_last; + switch (request->kind) { + case mesh_lighting_request_ctl_default: + kind = mesh_lighting_state_ctl_default; + log_info("ctl_setup_request: state=ctl_default, default lightness=%u, " + "default color temperature=%u, default delta UV=%d" NL, + request->ctl.lightness, + request->ctl.temperature, + request->ctl.deltauv); + + if ((sl_btmesh_get_lightness_default() == request->ctl.lightness) + && (lightbulb_state.temperature_default == request->ctl.temperature) + && (lightbulb_state.deltauv_default == request->ctl.deltauv)) { + log_info("Request for current state received; no op" NL); + } else { + if (sl_btmesh_get_lightness_default() != request->ctl.lightness) { + log_info("Setting default lightness to <%u>" NL, request->ctl.lightness); + sl_btmesh_set_lightness_default(request->ctl.lightness); + } + if (lightbulb_state.temperature_default != request->ctl.temperature) { + log_info("Setting default color temperature to <%u>" NL, + request->ctl.temperature); + lightbulb_state.temperature_default = request->ctl.temperature; + } + if (lightbulb_state.deltauv_default != request->ctl.deltauv) { + log_info("Setting default delta UV to <%d>" NL, request->ctl.deltauv); + lightbulb_state.deltauv_default = request->ctl.deltauv; + } + lightbulb_state_changed(); + } + break; + + case mesh_lighting_request_ctl_temperature_range: + kind = mesh_lighting_state_ctl_temperature_range; + log_info("ctl_setup_request: state=ctl_temperature_range, " + "min color temperature=%u, max color temperature=%u" NL, + request->ctl_temperature_range.min, + request->ctl_temperature_range.max); + + if ((lightbulb_state.temperature_min + == request->ctl_temperature_range.min) + && (lightbulb_state.temperature_max + == request->ctl_temperature_range.max)) { + log_info("Request for current state received; no op" NL); + } else { + if (lightbulb_state.temperature_min + != request->ctl_temperature_range.min) { + log_info("Setting min color temperature to <%u>" NL, + request->ctl_temperature_range.min); + lightbulb_state.temperature_min = request->ctl_temperature_range.min; + } + if (lightbulb_state.temperature_max + != request->ctl_temperature_range.max) { + log_info("Setting max color temperature to <%u>" NL, + request->ctl_temperature_range.max); + lightbulb_state.temperature_max = request->ctl_temperature_range.max; + } + lightbulb_state_changed(); + } + break; + + default: + break; + } + + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + ctl_setup_response(element_index, client_addr, appkey_index, kind); + } else { + ctl_setup_update(element_index, kind); + } +} + +/***************************************************************************//** + * This function is a handler for light CTL setup change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void ctl_setup_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + switch (current->kind) { + case mesh_lighting_state_ctl_default: + if (sl_btmesh_get_lightness_default() != current->ctl.lightness) { + log_info("Default lightness update: from %u to %u" NL, + sl_btmesh_get_lightness_default(), + current->ctl.lightness); + sl_btmesh_set_lightness_default(current->ctl.lightness); + lightbulb_state_changed(); + } else { + log_info("Default lightness update -same value (%u)" NL, + sl_btmesh_get_lightness_default()); + } + + if (lightbulb_state.temperature_default != current->ctl.temperature) { + log_info("Default color temperature change: from %u to %u" NL, + lightbulb_state.temperature_default, + current->ctl.temperature); + lightbulb_state.temperature_default = current->ctl.temperature; + lightbulb_state_changed(); + } else { + log_info("Default color temperature update -same value (%u)" NL, + lightbulb_state.temperature_default); + } + + if (lightbulb_state.deltauv_default != current->ctl.deltauv) { + log_info("Default delta UV change: from %d to %d" NL, + lightbulb_state.deltauv_default, + current->ctl.deltauv); + lightbulb_state.deltauv_default = current->ctl.deltauv; + lightbulb_state_changed(); + } else { + log_info("Default delta UV update -same value (%d)" NL, + lightbulb_state.deltauv_default); + } + + break; + + case mesh_lighting_state_ctl_temperature_range: + if (lightbulb_state.temperature_min + != current->ctl_temperature_range.min) { + log_info("Min color temperature update: from %u to %u" NL, + lightbulb_state.temperature_min, + current->ctl_temperature_range.min); + lightbulb_state.temperature_min = current->ctl_temperature_range.min; + lightbulb_state_changed(); + } else { + log_info("Min color temperature update -same value (%u)" NL, + lightbulb_state.temperature_min); + } + + if (lightbulb_state.temperature_max + != current->ctl_temperature_range.max) { + log_info("Max color temperature update: from %u to %u" NL, + lightbulb_state.temperature_max, + current->ctl_temperature_range.max); + lightbulb_state.temperature_max = current->ctl_temperature_range.max; + lightbulb_state_changed(); + } else { + log_info("Max color temperature update -same value (%u)" NL, + lightbulb_state.temperature_max); + } + + break; + + default: + break; + } +} + +/** @} (end addtogroup LightCTLSetup) */ + +/***************************************************************************//** + * \defgroup LightCTLTemperature + * \brief Light CTL Temperature Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup LightCTLTemperature + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to light CTL temperature request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t ctl_temperature_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_lighting_state_ctl_temperature; + current.ctl_temperature.temperature = lightbulb_state.temperature_current; + current.ctl_temperature.deltauv = lightbulb_state.deltauv_current; + + target.kind = mesh_lighting_state_ctl_temperature; + target.ctl_temperature.temperature = lightbulb_state.temperature_target; + target.ctl_temperature.deltauv = lightbulb_state.deltauv_target; + + return generic_server_respond(MESH_LIGHTING_CTL_TEMPERATURE_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + 0x00); +} + +/***************************************************************************//** + * Update light CTL temperature state. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t ctl_temperature_update(uint16_t element_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_lighting_state_ctl_temperature; + current.ctl_temperature.temperature = lightbulb_state.temperature_current; + current.ctl_temperature.deltauv = lightbulb_state.deltauv_current; + + target.kind = mesh_lighting_state_ctl_temperature; + target.ctl_temperature.temperature = lightbulb_state.temperature_target; + target.ctl_temperature.deltauv = lightbulb_state.deltauv_target; + + return generic_server_update(MESH_LIGHTING_CTL_TEMPERATURE_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); +} + +/***************************************************************************//** + * Update light CTL temperature state and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t ctl_temperature_update_and_publish(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t e; + (void)element_index; + + e = ctl_temperature_update(BTMESH_CTL_SERVER_TEMPERATURE, remaining_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_LIGHTING_CTL_TEMPERATURE_SERVER_MODEL_ID, + BTMESH_CTL_SERVER_TEMPERATURE, + mesh_lighting_state_ctl_temperature); + } + + return e; +} + +/***************************************************************************//** + * This function process the requests for the light CTL temperature model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void ctl_temperature_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)element_index; + (void)server_addr; + + log_info("ctl_temperature_request: color temperature=%u, delta UV=%d, " + "transition=%lu, delay=%u" NL, + request->ctl_temperature.temperature, + request->ctl_temperature.deltauv, + transition_ms, delay_ms); + + if ((lightbulb_state.temperature_current + == request->ctl_temperature.temperature) + && (lightbulb_state.deltauv_current + == request->ctl_temperature.deltauv)) { + log_info("Request for current state received; no op" NL); + } else { + if (lightbulb_state.temperature_current + != request->ctl_temperature.temperature) { + log_info("Setting color temperature to <%u>" NL, + request->ctl_temperature.temperature); + } + if (lightbulb_state.deltauv_current != request->ctl_temperature.deltauv) { + log_info("Setting delta UV to <%d>" NL, + request->ctl_temperature.deltauv); + } + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + lightbulb_state.temperature_current = request->ctl_temperature.temperature; + lightbulb_state.temperature_target = request->ctl_temperature.temperature; + lightbulb_state.deltauv_current = request->ctl_temperature.deltauv; + lightbulb_state.deltauv_target = request->ctl_temperature.deltauv; + + // update LED color temperature + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_current, + lightbulb_state.deltauv_current, + IMMEDIATE); + } else if (delay_ms > 0) { + // a delay has been specified for the temperature change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + lightbulb_state.temperature_target = request->ctl_temperature.temperature; + lightbulb_state.deltauv_target = request->ctl_temperature.deltauv; + sl_status_t sc = sl_simple_timer_start(&ctl_delayed_ctl_temperature_timer, + delay_ms, + ctl_delayed_ctl_temperature_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Temperature timer"); + // store transition parameter for later use + delayed_ctl_temperature_trans = transition_ms; + } else { + // no delay but transition time has been set. + lightbulb_state.temperature_target = request->ctl_temperature.temperature; + lightbulb_state.deltauv_target = request->ctl_temperature.deltauv; + + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_target, + lightbulb_state.deltauv_target, + transition_ms); + + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&ctl_temp_transition_timer, + transition_ms, + ctl_temp_transition_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Temp Transition timer"); + } + lightbulb_state_changed(); + + // State has changed, so the current scene number is reset + scene_server_reset_register(BTMESH_CTL_SERVER_TEMPERATURE); + } + + uint32_t remaining_ms = delay_ms + transition_ms; + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + ctl_temperature_response(BTMESH_CTL_SERVER_TEMPERATURE, + client_addr, + appkey_index, + remaining_ms); + } + ctl_temperature_update_and_publish(BTMESH_CTL_SERVER_TEMPERATURE, remaining_ms); + // publish to bound states + generic_server_publish(MESH_LIGHTING_CTL_SERVER_MODEL_ID, + BTMESH_LIGHTING_SERVER_MAIN, + mesh_lighting_state_ctl); + generic_server_publish(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + BTMESH_CTL_SERVER_TEMPERATURE, + mesh_generic_state_level); +} + +/***************************************************************************//** + * This function is a handler for light CTL temperature change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void ctl_temperature_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (lightbulb_state.temperature_current + != current->ctl_temperature.temperature) { + log_info("Color temperature update: from %u to %u" NL, + lightbulb_state.temperature_current, + current->ctl_temperature.temperature); + lightbulb_state.temperature_current = current->ctl_temperature.temperature; + lightbulb_state_changed(); + } else { + log_info("Color temperature update -same value (%u)" NL, + lightbulb_state.temperature_current); + } + + if (lightbulb_state.deltauv_current != current->ctl_temperature.deltauv) { + log_info("Delta UV update: from %d to %d" NL, + lightbulb_state.deltauv_current, + current->ctl_temperature.deltauv); + lightbulb_state.deltauv_current = current->ctl_temperature.deltauv; + lightbulb_state_changed(); + } else { + log_info("Delta UV update -same value (%d)" NL, lightbulb_state.deltauv_current); + } +} + +/***************************************************************************//** + * This function is a handler for light CTL temperature recall event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void ctl_temperature_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + (void)element_index; + + log_info("CTL color temperature recall" NL); + if (transition_ms == IMMEDIATE) { + lightbulb_state.temperature_target = current->ctl_temperature.temperature; + lightbulb_state.deltauv_target = current->ctl_temperature.deltauv; + } else { + lightbulb_state.temperature_target = target->ctl_temperature.temperature; + lightbulb_state.deltauv_target = target->ctl_temperature.deltauv; + } + + if ((lightbulb_state.temperature_current + == lightbulb_state.temperature_target) + && (lightbulb_state.deltauv_current + == lightbulb_state.deltauv_target)) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall CTL color temperature to %u, delta UV to %d with " + "transition=%lu ms" NL, + lightbulb_state.temperature_target, + lightbulb_state.deltauv_target, + transition_ms); + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_target, + lightbulb_state.deltauv_target, + transition_ms); + + if (transition_ms == IMMEDIATE) { + lightbulb_state.temperature_current = current->ctl_temperature.temperature; + lightbulb_state.deltauv_current = current->ctl_temperature.deltauv; + } else { + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&ctl_temp_transition_timer, + transition_ms, + ctl_temp_transition_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Temp Transition timer"); + } + lightbulb_state_changed(); + } + + ctl_temperature_update_and_publish(BTMESH_CTL_SERVER_TEMPERATURE, transition_ms); +} + +/***************************************************************************//** + * This function is called when a light CTL temperature request + * with non-zero transition time has completed. + ******************************************************************************/ +static void ctl_temperature_transition_complete(void) +{ + // transition done -> set state, update and publish + lightbulb_state.temperature_current = lightbulb_state.temperature_target; + lightbulb_state.deltauv_current = lightbulb_state.deltauv_target; + + log_info("Transition complete. New color temperature is %u " + "and new delta UV is %d" NL, + lightbulb_state.temperature_current, + lightbulb_state.deltauv_current); + + lightbulb_state_changed(); + ctl_temperature_update_and_publish(BTMESH_CTL_SERVER_TEMPERATURE, IMMEDIATE); +} + +/***************************************************************************//** + * This function is called when delay for light CTL temperature request + * has completed. + ******************************************************************************/ +static void delayed_ctl_temperature_request(void) +{ + log_info("Starting delayed CTL color temperature request: " + "color temperature %u -> %u, delta UV %d -> %d, %lu ms" NL, + lightbulb_state.temperature_current, + lightbulb_state.temperature_target, + lightbulb_state.deltauv_current, + lightbulb_state.deltauv_target, + delayed_ctl_temperature_trans); + + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_target, + lightbulb_state.deltauv_target, + delayed_ctl_temperature_trans); + + if (delayed_ctl_temperature_trans == 0) { + // no transition delay, update state immediately + lightbulb_state.temperature_current = lightbulb_state.temperature_target; + lightbulb_state.deltauv_current = lightbulb_state.deltauv_target; + + lightbulb_state_changed(); + ctl_temperature_update_and_publish(BTMESH_CTL_SERVER_TEMPERATURE, + delayed_ctl_temperature_trans); + } else { + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&ctl_temp_transition_timer, + delayed_ctl_temperature_trans, + ctl_temp_transition_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Temp Transition timer"); + } +} + +/** @} (end addtogroup LightCTLTemperature) */ + +/***************************************************************************//** + * \defgroup SecGenericLevel + * \brief Generic Level Server model on secondary element. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup SecGenericLevel + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Convert level to temperature. + * + * @param[in] level Level to convert. + * + * @return Temperature converted from level. + ******************************************************************************/ +static uint16_t level_to_temperature(int16_t level) +{ + return lightbulb_state.temperature_min + + (uint32_t)(level + (int32_t)32768) + * (lightbulb_state.temperature_max - lightbulb_state.temperature_min) + / 65535; +} + +/***************************************************************************//** + * Convert temperature to level. + * + * @param[in] temperature Temperature to convert. + * + * @return Level converted from temperature. + ******************************************************************************/ +static int16_t temperature_to_level(uint16_t temperature) +{ + return (temperature - lightbulb_state.temperature_min) + * (uint32_t)65535 + / (lightbulb_state.temperature_max - lightbulb_state.temperature_min) + - (int32_t)32768; +} + +/***************************************************************************//** + * Response to generic level request on secondary element. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t sec_level_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_level; + current.level.level = lightbulb_state.sec_level_current; + + target.kind = mesh_generic_state_level; + target.level.level = lightbulb_state.sec_level_target; + + return generic_server_respond(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + 0x00); +} + +/***************************************************************************//** + * Update generic level state on secondary element. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t sec_level_update(uint16_t element_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_level; + current.level.level = lightbulb_state.sec_level_current; + + target.kind = mesh_generic_state_level; + target.level.level = lightbulb_state.sec_level_target; + + return generic_server_update(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); +} + +/***************************************************************************//** + * Update generic level state on secondary element + * and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t sec_level_update_and_publish(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t e; + + e = sec_level_update(element_index, remaining_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + mesh_generic_state_level); + } + + return e; +} + +/***************************************************************************//** + * Schedule next generic level move request on secondary element. + * + * @param[in] remaining_delta The remaining level delta to the target state. + ******************************************************************************/ +static void sec_level_move_schedule_next_request(int32_t remaining_delta) +{ + uint32_t transition_ms = 0; + if (abs(remaining_delta) < abs(move_sec_level_delta)) { + transition_ms = (uint32_t)(((int64_t)move_sec_level_trans * remaining_delta) + / move_sec_level_delta); + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_target, + lightbulb_state.deltauv_current, + transition_ms); + } else { + int16_t next_level = lightbulb_state.sec_level_current + + move_sec_level_delta; + transition_ms = move_sec_level_trans; + sl_btmesh_ctl_set_temperature_deltauv_level(level_to_temperature(next_level), + lightbulb_state.deltauv_current, + move_sec_level_trans); + } + sl_status_t sc = sl_simple_timer_start(&ctl_sec_level_move_timer, + transition_ms, + ctl_sec_level_move_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Sec Level timer"); +} + +/***************************************************************************//** + * Handle generic level move request on secondary element. + ******************************************************************************/ +static void sec_level_move_request(void) +{ + log_info("Secondary level move: level %d -> %d, delta %d in %lu ms" NL, + lightbulb_state.sec_level_current, + lightbulb_state.sec_level_target, + move_sec_level_delta, + move_sec_level_trans); + + int32_t remaining_delta = (int32_t)lightbulb_state.sec_level_target + - lightbulb_state.sec_level_current; + + 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); + } +} + +/***************************************************************************//** + * Stop generic level move on secondary element. + ******************************************************************************/ +static void sec_level_move_stop(void) +{ + // Cancel timers + sl_status_t sc = sl_simple_timer_stop(&ctl_delayed_sec_level_timer); + app_assert_status_f(sc, "Failed to stop Delayed Sec Level timer"); + sc = sl_simple_timer_stop(&ctl_sec_level_move_timer); + app_assert_status_f(sc, "Failed to stop Sec Level Move timer"); + //Reset move parameters + move_sec_level_delta = 0; + move_sec_level_trans = 0; +} + +/***************************************************************************//** + * This function process the requests for the generic level model + * on secondary element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void sec_level_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + + uint16_t temperature; + uint32_t remaining_ms = UNKNOWN_REMAINING_TIME; + + switch (request->kind) { + case mesh_generic_request_level: + log_info("sec_level_request (generic): level=%d, transition=%lu, delay=%u" NL, + request->level, transition_ms, delay_ms); + + sec_level_move_stop(); + if (lightbulb_state.sec_level_current == request->level) { + log_info("Request for current state received; no op" NL); + lightbulb_state.sec_level_target = request->level; + } else { + log_info("Setting secondary level to <%d>" NL, request->level); + + temperature = level_to_temperature(request->level); + + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + lightbulb_state.sec_level_current = request->level; + lightbulb_state.sec_level_target = request->level; + lightbulb_state.temperature_current = temperature; + lightbulb_state.temperature_target = temperature; + + // update LED Temperature + sl_btmesh_ctl_set_temperature_deltauv_level(temperature, + lightbulb_state.deltauv_current, + IMMEDIATE); + } else if (delay_ms > 0) { + // a delay has been specified for the change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + lightbulb_state.sec_level_target = request->level; + lightbulb_state.temperature_target = temperature; + sec_level_request_kind = mesh_generic_request_level; + sl_status_t sc = sl_simple_timer_start(&ctl_delayed_sec_level_timer, + delay_ms, + ctl_delayed_sec_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Sec Level timer"); + // store transition parameter for later use + delayed_sec_level_trans = transition_ms; + } else { + // no delay but transition time has been set. + lightbulb_state.sec_level_target = request->level; + lightbulb_state.temperature_target = temperature; + sl_btmesh_ctl_set_temperature_deltauv_level(temperature, + lightbulb_state.deltauv_current, + transition_ms); + + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&ctl_sec_level_transition_timer, + delayed_sec_level_trans, + ctl_sec_level_transition_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Sec Level Transition timer"); + } + + // State has changed, so the current scene number is reset + scene_server_reset_register(element_index); + } + + remaining_ms = delay_ms + transition_ms; + break; + + case mesh_generic_request_level_move: { + log_info("sec_level_request (move): delta=%d, transition=%lu, delay=%u" NL, + request->level, transition_ms, delay_ms); + // Store move parameters + move_sec_level_delta = request->level; + move_sec_level_trans = transition_ms; + + int16_t requested_level = 0; + if (move_sec_level_delta > 0) { + requested_level = 0x7FFF; // Max level value + } else if (move_sec_level_delta < 0) { + requested_level = 0x8000; // Min level value + } + + if (lightbulb_state.sec_level_current == requested_level) { + log_info("Request for current state received; no op" NL); + lightbulb_state.sec_level_target = requested_level; + remaining_ms = IMMEDIATE; + } else { + log_info("Setting secondary level to <%d>" NL, requested_level); + + temperature = level_to_temperature(requested_level); + + if (delay_ms > 0) { + // a delay has been specified for the move. Start a soft timer + // that will trigger the move after the given delay + // Current state remains as is for now + lightbulb_state.sec_level_target = requested_level; + lightbulb_state.temperature_target = temperature; + sec_level_request_kind = mesh_generic_request_level_move; + sl_status_t sc = sl_simple_timer_start(&ctl_delayed_sec_level_timer, + delay_ms, + ctl_delayed_sec_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Sec Level timer"); + } else { + // no delay so start move + lightbulb_state.sec_level_target = requested_level; + lightbulb_state.temperature_target = temperature; + + int32_t remaining_delta = (int32_t)lightbulb_state.sec_level_target + - lightbulb_state.sec_level_current; + sec_level_move_schedule_next_request(remaining_delta); + } + remaining_ms = UNKNOWN_REMAINING_TIME; + + // State has changed, so the current scene number is reset + scene_server_reset_register(element_index); + } + break; + } + + case mesh_generic_request_level_halt: + log_info("sec_level_request (halt)" NL); + + // Set current state + lightbulb_state.temperature_current = sl_btmesh_get_temperature(); + lightbulb_state.temperature_target = lightbulb_state.temperature_current; + lightbulb_state.sec_level_current = temperature_to_level(lightbulb_state.temperature_current); + lightbulb_state.sec_level_target = lightbulb_state.sec_level_current; + if (delay_ms > 0) { + // a delay has been specified for the move halt. Start a soft timer + // that will trigger the move halt after the given delay + // Current state remains as is for now + remaining_ms = delay_ms; + sec_level_request_kind = mesh_generic_request_level_halt; + sl_status_t sc = sl_simple_timer_start(&ctl_delayed_sec_level_timer, + delay_ms, + ctl_delayed_sec_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Sec Level timer"); + } else { + sec_level_move_stop(); + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_current, + lightbulb_state.deltauv_current, + IMMEDIATE); + remaining_ms = IMMEDIATE; + } + break; + + default: + break; + } + + lightbulb_state_changed(); + + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + sec_level_response(element_index, client_addr, appkey_index, remaining_ms); + } + sec_level_update_and_publish(element_index, remaining_ms); + // publish to bound states + generic_server_publish(MESH_LIGHTING_CTL_TEMPERATURE_SERVER_MODEL_ID, + element_index, + mesh_lighting_state_ctl_temperature); +} + +/***************************************************************************//** + * This function is a handler for generic level change event + * on secondary element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void sec_level_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (lightbulb_state.sec_level_current != current->level.level) { + log_info("Secondary level update: from %d to %d" NL, + lightbulb_state.sec_level_current, + current->level.level); + lightbulb_state.sec_level_current = current->level.level; + lightbulb_state_changed(); + sec_level_move_stop(); + } else { + log_info("Secondary level update -same value (%d)" NL, + lightbulb_state.sec_level_current); + } +} + +/***************************************************************************//** + * This function is a handler for generic level recall event + * on secondary element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void sec_level_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + (void)element_index; + + log_info("Secondary Generic Level recall" NL); + if (transition_ms == IMMEDIATE) { + lightbulb_state.sec_level_target = current->level.level; + } else { + lightbulb_state.sec_level_target = target->level.level; + } + + if (lightbulb_state.sec_level_current == lightbulb_state.sec_level_target) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall secondary level to %d with transition=%lu ms" NL, + lightbulb_state.sec_level_target, + transition_ms); + if (transition_ms == IMMEDIATE) { + lightbulb_state.sec_level_current = current->level.level; + } else { + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&ctl_sec_level_transition_timer, + transition_ms, + ctl_sec_level_transition_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Sec Level Transition timer"); + } + lightbulb_state_changed(); + } +} + +/***************************************************************************//** + * This function is called when a generic level request on secondary element + * with non-zero transition time has completed. + ******************************************************************************/ +static void sec_level_transition_complete(void) +{ + // transition done -> set state, update and publish + lightbulb_state.sec_level_current = lightbulb_state.sec_level_target; + lightbulb_state.temperature_current = lightbulb_state.temperature_target; + + log_info("Transition complete. New secondary level is %d" NL, + lightbulb_state.sec_level_current); + + lightbulb_state_changed(); + sec_level_update_and_publish(BTMESH_CTL_SERVER_TEMPERATURE, IMMEDIATE); +} + +/***************************************************************************//** + * This function is called when delay for generic level request + * on secondary element has completed. + ******************************************************************************/ +static void delayed_sec_level_request(void) +{ + log_info("Starting delayed secondary level request: level %d -> %d, %lu ms" NL, + lightbulb_state.sec_level_current, + lightbulb_state.sec_level_target, + delayed_sec_level_trans); + + switch (sec_level_request_kind) { + case mesh_generic_request_level: + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_target, + lightbulb_state.deltauv_current, + delayed_sec_level_trans); + + if (delayed_sec_level_trans == 0) { + // no transition delay, update state immediately + lightbulb_state.sec_level_current = lightbulb_state.sec_level_target; + lightbulb_state.temperature_current = lightbulb_state.temperature_target; + + lightbulb_state_changed(); + sec_level_update_and_publish(BTMESH_CTL_SERVER_TEMPERATURE, + delayed_sec_level_trans); + } else { + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&ctl_sec_level_transition_timer, + delayed_sec_level_trans, + ctl_sec_level_transition_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Sec Level Transition timer"); + } + break; + + case mesh_generic_request_level_move: + sec_level_move_schedule_next_request((int32_t)lightbulb_state.sec_level_target + - lightbulb_state.sec_level_current); + sec_level_update_and_publish(BTMESH_CTL_SERVER_TEMPERATURE, + UNKNOWN_REMAINING_TIME); + break; + + case mesh_generic_request_level_halt: + // Set current state + lightbulb_state.temperature_current = sl_btmesh_get_temperature(); + lightbulb_state.temperature_target = lightbulb_state.temperature_current; + lightbulb_state.sec_level_current = temperature_to_level(lightbulb_state.temperature_current); + lightbulb_state.sec_level_target = lightbulb_state.sec_level_current; + sec_level_move_stop(); + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_current, + lightbulb_state.deltauv_current, + IMMEDIATE); + sec_level_update_and_publish(BTMESH_CTL_SERVER_TEMPERATURE, IMMEDIATE); + break; + + default: + break; + } +} + +/** @} (end addtogroup SecGenericLevel) */ + +/***************************************************************************//** + * Initialization of the models supported by this node. + * This function registers callbacks for each of the supported models. + ******************************************************************************/ +static void init_ctl_models(void) +{ + generic_server_register_handler(MESH_LIGHTING_CTL_SERVER_MODEL_ID, + BTMESH_CTL_SERVER_MAIN, + ctl_request, + ctl_change, + ctl_recall); + + generic_server_register_handler(MESH_LIGHTING_CTL_SETUP_SERVER_MODEL_ID, + BTMESH_CTL_SERVER_MAIN, + ctl_setup_request, + ctl_setup_change, + NULL); + + generic_server_register_handler(MESH_LIGHTING_CTL_TEMPERATURE_SERVER_MODEL_ID, + BTMESH_CTL_SERVER_TEMPERATURE, + ctl_temperature_request, + ctl_temperature_change, + ctl_temperature_recall); + + generic_server_register_handler(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + BTMESH_CTL_SERVER_TEMPERATURE, + sec_level_request, + sec_level_change, + sec_level_recall); +} + +/***************************************************************************//** + * This function loads the saved light state from Persistent Storage and + * copies the data in the global variable lightbulb_state. + * If PS key with ID SL_BTMESH_CTL_SERVER_PS_KEY_CFG_VAL does not exist or loading failed, + * lightbulb_state is set to zero and some default values are written to it. + * + * @return Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightbulb_state_load(void) +{ + sl_status_t sc; + size_t ps_len = 0; + struct lightbulb_state ps_data; + + sc = sl_bt_nvm_load(SL_BTMESH_CTL_SERVER_PS_KEY_CFG_VAL, + sizeof(ps_data), + &ps_len, + (uint8_t *)&ps_data); + + // Set default values if ps_load fail or size of lightbulb_state has changed + if ((sc != SL_STATUS_OK) || (ps_len != sizeof(struct lightbulb_state))) { + memset(&lightbulb_state, 0, sizeof(struct lightbulb_state)); + lightbulb_state.temperature_default = SL_BTMESH_CTL_SERVER_DEFAULT_TEMPERATURE_CFG_VAL; + lightbulb_state.temperature_min = SL_BTMESH_CTL_SERVER_MINIMUM_TEMPERATURE_CFG_VAL; + lightbulb_state.temperature_max = SL_BTMESH_CTL_SERVER_MAXIMUM_TEMPERATURE_CFG_VAL; + lightbulb_state.deltauv_default = SL_BTMESH_CTL_SERVER_DEFAULT_DELTAUV_CFG_VAL; + + // Check if default values are valid and correct them if needed + lightbulb_state_validate_and_correct(); + + if (sc == SL_STATUS_OK) { + // The sl_bt_nvm_load call was successful but the size of the loaded data + // differs from the expected size therefore error code shall be set + sc = SL_STATUS_INVALID_STATE; + log_error("CTL server lightbulb state loaded from PS with invalid size, " + "use defaults. (expected=%zd,actual=%zd)" NL, + sizeof(struct lightbulb_state), + ps_len); + } else { + log_status_error_f(sc, + "CTL server lightbulb state load from PS failed " + "or nvm is empty, use defaults." NL); + } + } else { + memcpy(&lightbulb_state, &ps_data, ps_len); + } + + return sc; +} + +/***************************************************************************//** + * This function saves the current light state in Persistent Storage so that + * the data is preserved over reboots and power cycles. + * The light state is hold in a global variable lightbulb_state. + * A PS key with ID SL_BTMESH_CTL_SERVER_PS_KEY_CFG_VAL is used to store the whole struct. + * + * @return Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightbulb_state_store(void) +{ + sl_status_t sc; + + sc = sl_bt_nvm_save(SL_BTMESH_CTL_SERVER_PS_KEY_CFG_VAL, + sizeof(struct lightbulb_state), + (const uint8_t *)&lightbulb_state); + + log_status_error_f(sc, "CTL server lightbulb state store in PS failed." NL); + + return sc; +} + +/***************************************************************************//** + * This function is called each time the lightbulb state in RAM is changed. + * It sets up a soft timer that will save the state in flash after small delay. + * The purpose is to reduce amount of unnecessary flash writes. + ******************************************************************************/ +static void lightbulb_state_changed(void) +{ + sl_status_t sc = sl_simple_timer_start(&ctl_state_store_timer, + SL_BTMESH_CTL_SERVER_NVM_SAVE_TIME_CFG_VAL, + ctl_state_store_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start State Store timer"); +} + +/***************************************************************************//** + * This function validates the lighbulb_state and change it if it is against + * the specification. + ******************************************************************************/ +static void lightbulb_state_validate_and_correct(void) +{ + if (lightbulb_state.temperature_min < SL_BTMESH_CTL_SERVER_MINIMUM_TEMPERATURE_CFG_VAL) { + lightbulb_state.temperature_min = SL_BTMESH_CTL_SERVER_MINIMUM_TEMPERATURE_CFG_VAL; + } + if (lightbulb_state.temperature_min > SL_BTMESH_CTL_SERVER_MAXIMUM_TEMPERATURE_CFG_VAL) { + lightbulb_state.temperature_min = SL_BTMESH_CTL_SERVER_MAXIMUM_TEMPERATURE_CFG_VAL; + } + if (lightbulb_state.temperature_min > lightbulb_state.temperature_max) { + lightbulb_state.temperature_min = lightbulb_state.temperature_max; + } + if (lightbulb_state.temperature_default < lightbulb_state.temperature_min) { + lightbulb_state.temperature_default = lightbulb_state.temperature_min; + } + if (lightbulb_state.temperature_default > lightbulb_state.temperature_max) { + lightbulb_state.temperature_default = lightbulb_state.temperature_max; + } + if (lightbulb_state.temperature_current < lightbulb_state.temperature_min) { + lightbulb_state.temperature_current = lightbulb_state.temperature_min; + } + if (lightbulb_state.temperature_current > lightbulb_state.temperature_max) { + lightbulb_state.temperature_current = lightbulb_state.temperature_max; + } + if (lightbulb_state.temperature_target < lightbulb_state.temperature_min) { + lightbulb_state.temperature_target = lightbulb_state.temperature_min; + } + if (lightbulb_state.temperature_target > lightbulb_state.temperature_max) { + lightbulb_state.temperature_target = lightbulb_state.temperature_max; + } +} + +/******************************************************************************* + * Lightbulb state initialization. + * This is called at each boot if provisioning is already done. + * Otherwise this function is called after provisioning is completed. + ******************************************************************************/ +void sl_btmesh_ctl_server_init(void) +{ + memset(&lightbulb_state, 0, sizeof(struct lightbulb_state)); + + lightbulb_state_load(); + + // Handle on power up behavior + uint32_t transition_ms = sl_btmesh_get_default_transition_time(); + switch (sl_btmesh_get_lightness_onpowerup()) { + case MESH_GENERIC_ON_POWER_UP_STATE_OFF: + lightbulb_state.temperature_current = lightbulb_state.temperature_default; + lightbulb_state.temperature_target = lightbulb_state.temperature_default; + lightbulb_state.deltauv_current = lightbulb_state.deltauv_default; + lightbulb_state.deltauv_target = lightbulb_state.deltauv_default; + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_default, + lightbulb_state.deltauv_default, + IMMEDIATE); + break; + + case MESH_GENERIC_ON_POWER_UP_STATE_ON: + lightbulb_state.temperature_current = lightbulb_state.temperature_default; + lightbulb_state.temperature_target = lightbulb_state.temperature_default; + lightbulb_state.deltauv_current = lightbulb_state.deltauv_default; + lightbulb_state.deltauv_target = lightbulb_state.deltauv_default; + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_default, + lightbulb_state.deltauv_default, + IMMEDIATE); + break; + + case MESH_GENERIC_ON_POWER_UP_STATE_RESTORE: + if (transition_ms > 0 + && ((lightbulb_state.temperature_target + != lightbulb_state.temperature_default) + || (lightbulb_state.deltauv_target + != lightbulb_state.deltauv_default))) { + lightbulb_state.temperature_current = lightbulb_state.temperature_default; + lightbulb_state.deltauv_current = lightbulb_state.deltauv_default; + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_current, + lightbulb_state.deltauv_current, + IMMEDIATE); + sl_status_t sc = sl_simple_timer_start(&ctl_temp_transition_timer, + transition_ms, + ctl_temp_transition_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Temp Transition timer"); + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_target, + lightbulb_state.deltauv_target, + transition_ms); + } else { + lightbulb_state.temperature_current = lightbulb_state.temperature_target; + lightbulb_state.deltauv_current = lightbulb_state.deltauv_target; + sl_btmesh_ctl_set_temperature_deltauv_level(lightbulb_state.temperature_current, + lightbulb_state.deltauv_current, + IMMEDIATE); + } + break; + + default: + break; + } + + lightbulb_state_changed(); + init_ctl_models(); + ctl_setup_update(BTMESH_CTL_SERVER_MAIN, mesh_lighting_state_ctl_default); + ctl_setup_update(BTMESH_CTL_SERVER_MAIN, + mesh_lighting_state_ctl_temperature_range); + ctl_temperature_update_and_publish(BTMESH_CTL_SERVER_TEMPERATURE, IMMEDIATE); +} + +/******************************************************************************* + * Handle CTL Server events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_ctl_server_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_ctl_server_init(); + break; + + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_ctl_server_init(); + } + break; + + case sl_btmesh_evt_node_reset_id: + sl_bt_nvm_erase(SL_BTMESH_CTL_SERVER_PS_KEY_CFG_VAL); + break; + } +} + +/***************************************************************************//** + * @addtogroup BtmeshWrappers + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_respond to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_respond(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms, + uint8_t response_flags) +{ + sl_status_t sc = mesh_lib_generic_server_respond(model_id, + element_index, + client_addr, + appkey_index, + current, + target, + remaining_ms, + response_flags); + log_status_error_f(sc, + "CTL server respond failed" + "(claddr=0x%04x,mdl=0x%04x,elem=%d,state=0x%04x)" NL, + client_addr, + model_id, + element_index, + current->kind); + return sc; +} + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_update to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_update(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + sl_status_t sc = mesh_lib_generic_server_update(model_id, + element_index, + current, + target, + remaining_ms); + + log_status_error_f(sc, + "CTL server state update failed " + "(mdl=0x%04x,elem=%d,state=0x%04x)" NL, + model_id, + element_index, + current->kind); + return sc; +} + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_publish to log if the Btmesh API call + * results in error. The parameters and the return value of the two functions + * are the same. + ******************************************************************************/ +static sl_status_t generic_server_publish(uint16_t model_id, + uint16_t element_index, + mesh_generic_state_t kind) +{ + sl_status_t sc; + + sc = mesh_lib_generic_server_publish(model_id, element_index, kind); + + log_btmesh_status_f(sc, + "CTL server state publish failed " + "(mdl=0x%04x,elem=%d,state=0x%04x)" NL, + model_id, + element_index, + kind); + return sc; +} + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_register_handler with an assert which + * detects if the Btmesh API call results in error. The parameters of the two + * functions are the same but the wrapper does not have return value. + ******************************************************************************/ +static void generic_server_register_handler(uint16_t model_id, + uint16_t elem_index, + mesh_lib_generic_server_client_request_cb cb, + mesh_lib_generic_server_change_cb ch, + mesh_lib_generic_server_recall_cb recall) +{ + sl_status_t sc = mesh_lib_generic_server_register_handler(model_id, + elem_index, + cb, + ch, + recall); + + app_assert_status_f(sc, + "CTL server failed to register handlers " + "(mdl=0x%04x,elem=%d)", + model_id, + elem_index); +} + +#ifdef SL_CATALOG_BTMESH_SCENE_SERVER_PRESENT +/***************************************************************************//** + * Wrapper for sl_btmesh_scene_server_reset_register with an assert which + * detects if the Btmesh API call results in error. The parameters of the two + * functions are the same but the wrapper does not have return value. + * The scene server register shall be reset if the state of the model changes in + * order to clear the current scene. + * This function is available only if the btmesh_scene_server component is added + * to the project. + ******************************************************************************/ +static void scene_server_reset_register_impl(uint16_t elem_index) +{ + sl_status_t sc = sl_btmesh_scene_server_reset_register(elem_index); + + // The function can fail if there is no scene server model in the element or + // the btmesh_stack_scene_server component is not present. Both of these + // are configuration issues so assert can be used. + app_assert_status_f(sc, "CTL server failed to reset scene register."); +} +#endif + +/** @} (end addtogroup BtmeshWrappers) */ + +/**************************************************************************//** + * Timer Callbacks + *****************************************************************************/ +static void ctl_sec_level_move_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // handling of generic level move, update the lightbulb state + sec_level_move_request(); +} + +static void ctl_sec_level_transition_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for a secondary generic level request has completed, + //update the lightbulb state + sec_level_transition_complete(); +} + +static void ctl_temp_transition_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for a ctl temperature request has completed, + // update the lightbulb state + ctl_temperature_transition_complete(); +} + +static void ctl_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for a ctl request has completed, update the lightbulb state + ctl_transition_complete(); +} + +static void ctl_delayed_sec_level_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for a secondary generic level request has passed, + // now process the request + delayed_sec_level_request(); +} + +static void ctl_delayed_ctl_temperature_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for a ctl temperature request has passed, now process the request + delayed_ctl_temperature_request(); +} + +static void ctl_delayed_ctl_request_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for a ctl request has passed, now process the request + delayed_ctl_request(); +} + +static void ctl_state_store_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // save the lightbulb state + lightbulb_state_store(); +} + +/** @} (end addtogroup CTL_SERVER) */ diff --git a/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_server.h b/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_server.h new file mode 100644 index 00000000000..e45be17ca3b --- /dev/null +++ b/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_server.h @@ -0,0 +1,61 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_ctl_server.h + ******************************************************************************* + * # 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_BTMESH_CTL_SERVER_H +#define SL_BTMESH_CTL_SERVER_H + +#include "sl_btmesh_api.h" +#include "sl_btmesh_ctl_signal_transition_handler.h" + +// ----------------------------------------------------------------------------- +// Functions which are automatically called when the component is selected + +/***************************************************************************//** + * Handle CTL Server events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_ctl_server_on_event(sl_btmesh_msg_t *evt); + +/***************************************************************************//** + * CTL Server initialization. + * This should be called at each boot if provisioning is already done. + * Otherwise this function should be called after provisioning is completed. + * It is called automatically by the Universal Configurator Framework + * + * @return Status of the initialization operation. + * Returns bg_err_success (0) if succeed, non-zero otherwise. + ******************************************************************************/ +void sl_btmesh_ctl_server_init(void); + +#endif // SL_BTMESH_CTL_SERVER_H 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 new file mode 100644 index 00000000000..2d3327555f0 --- /dev/null +++ b/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_signal_transition_handler.c @@ -0,0 +1,314 @@ +/***************************************************************************//** + * @file + * @brief Lighting Level Transition Handler Module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +/* C Standard Library headers */ +#include +#include + +#include "em_common.h" +#include "sl_status.h" + +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#include "sl_btmesh_ctl_server.h" +#include "sl_btmesh_ctl_signal_transition_handler.h" +#include "sl_btmesh_ctl_server_config.h" + +#define SIGNED_INT_16BIT_MAX_POSITIVE (0x7FFF) +#define FIXED_POINT_Q15_FRAC_BITS (15) +#define DELTA_UV_SIGNIFICANT_DIGITS_MUL (100) + +/***************************************************************************//** + * @addtogroup Lighting Level Transition Handler + * @{ + ******************************************************************************/ + +#define NO_FLAGS 0 ///< No flags used for message +#define IMMEDIATE 0 ///< Immediate transition time is 0 seconds +#define NO_CALLBACK_DATA (void *)NULL // Callback has not parameters +#define HIGH_PRIORITY 0 // High Priority + +/// current temperature level +static uint16_t current_temperature = SL_BTMESH_CTL_SERVER_DEFAULT_TEMPERATURE_CFG_VAL; +/// starting level of temperature transition +static uint16_t start_temperature; +/// target level of temperature transition +static uint16_t target_temperature; + +/// current delta UV level +static int16_t current_deltauv; +/// starting level of delta UV transition +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; +/// time elapsed from temperature transition start +static uint32_t temp_transtime_elapsed; +/// non-zero if temperature transition is active +static uint8_t temp_transitioning; + +static sl_simple_timer_t transition_timer; + +// Timer callbacks +static void transition_timer_cb(sl_simple_timer_t *timer, void *data); + +//////////////////////////////////////////////////////////////////////////////// +// Lighting Callbacks // +//////////////////////////////////////////////////////////////////////////////// + +SL_WEAK void sl_btmesh_lighting_color_pwm_cb(uint16_t color) +{ + (void)color; +} + +SL_WEAK void sl_btmesh_ctl_on_ui_update(uint16_t temperature, + uint16_t deltauv) +{ + (void)temperature; + (void)deltauv; +} + +/***************************************************************************//** + * Handler for Transition Timer, which manages LEDs transitions. + ******************************************************************************/ +static void transition_timer_cb(sl_simple_timer_t *timer, void *data) +{ + (void)data; + (void)timer; + // 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; + + if (!temp_transitioning) { + sl_status_t sc = sl_simple_timer_stop(&transition_timer); + app_assert_status_f(sc, "Failed to stop Periodic Level Transition Timer\n"); + return; + } else { + temp_transtime_elapsed++; + + if (temp_transtime_elapsed >= temp_transtime_ticks) { + // transition complete + temp_transitioning = 0; + current_temperature = target_temperature; + current_deltauv = target_deltauv; + + // Set the variable to UI update period in order to trigger a UI update + // at the beginning of the next transition. + time_elapsed_since_ui_update = SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL; + + // Trigger a UI update in order to provide the target values at the end + // of the current transition + sl_btmesh_ctl_on_ui_update(current_temperature, current_deltauv); + } else { + // calculate current temperature based on elapsed transition time + if (target_temperature >= start_temperature) { + current_temperature = start_temperature + + (target_temperature - start_temperature) + * (uint64_t)temp_transtime_elapsed + / temp_transtime_ticks; + } else { + current_temperature = start_temperature + - (start_temperature - target_temperature) + * (uint64_t)temp_transtime_elapsed + / temp_transtime_ticks; + } + + if (target_deltauv >= start_deltauv) { + current_deltauv = start_deltauv + + (target_deltauv - start_deltauv) + * (uint64_t)temp_transtime_elapsed + / temp_transtime_ticks; + } else { + current_deltauv = start_deltauv + - (start_deltauv - target_deltauv) + * (uint64_t)temp_transtime_elapsed + / temp_transtime_ticks; + } + + // When transition is ongoing generate an event to application once every + // SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL ms because the event is used to update + // display status and therefore the rate should not be too high + time_elapsed_since_ui_update += SL_BTMESH_CTL_SERVER_PWM_UPDATE_PERIOD_CFG_VAL; + + if (SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL <= time_elapsed_since_ui_update) { + time_elapsed_since_ui_update -= SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL; + sl_btmesh_ctl_on_ui_update(current_temperature, current_deltauv); + } + } + } + + sl_btmesh_lighting_color_pwm_cb(current_temperature); +} + +/******************************************************************************* + * Set LED temperature and delta UV in given transition time. + * + * @param[in] temperature Temperature of color. + * @param[in] deltauv Delta UV value. + * @param[in] transition_ms Transition time in milliseconds. + ******************************************************************************/ +void sl_btmesh_ctl_set_temperature_deltauv_level(uint16_t temperature, + int16_t deltauv, + uint32_t transition_ms) +{ + if (temperature < SL_BTMESH_CTL_SERVER_MINIMUM_TEMPERATURE_CFG_VAL) { + temperature = SL_BTMESH_CTL_SERVER_MINIMUM_TEMPERATURE_CFG_VAL; + } else if (temperature > SL_BTMESH_CTL_SERVER_MAXIMUM_TEMPERATURE_CFG_VAL) { + temperature = SL_BTMESH_CTL_SERVER_MAXIMUM_TEMPERATURE_CFG_VAL; + } + + if (transition_ms == 0) { + current_temperature = temperature; + current_deltauv = deltauv; + + sl_btmesh_lighting_color_pwm_cb(current_temperature); + + /* if a transition was in progress, cancel it */ + if (temp_transitioning) { + temp_transitioning = 0; + sl_status_t sc = sl_simple_timer_stop(&transition_timer); + app_assert_status_f(sc, "Failed to stop Periodic Level Transition Timer\n"); + } + sl_btmesh_ctl_on_ui_update(current_temperature, current_deltauv); + return; + } + + temp_transtime_ticks = transition_ms; + + start_temperature = current_temperature; + target_temperature = temperature; + + start_deltauv = current_deltauv; + target_deltauv = deltauv; + + temp_transtime_elapsed = 0; + temp_transitioning = 1; + + // enabling timer IRQ -> the temperature is adjusted in timer interrupt + // gradually until target temperature is reached. + sl_status_t sc = sl_simple_timer_start(&transition_timer, + SL_BTMESH_CTL_SERVER_PWM_UPDATE_PERIOD_CFG_VAL, + transition_timer_cb, + NO_CALLBACK_DATA, + true); + app_assert_status_f(sc, "Failed to start periodic Transition Timer\n"); + + return; +} + +/***************************************************************************//** + * Utility function to print the delta UV raw value into the passed character + * buffer in the X.XX format. + * + * @param[out] buffer Character buffer where the formatted delta UV + * is stored + * @param[in] buffer_size Size of the character buffer + * @param[in] deltauv_raw Raw value of the Delta UV CTL parameter + * + * @return same as snprintf + ******************************************************************************/ +int sl_btmesh_ctl_server_snprint_deltauv(char *buffer, + uint16_t buffer_size, + uint16_t deltauv_raw) +{ + // Additive variable for rounding to 0.01 precision (2^15 / 100 / 2) + const uint32_t round_value = ((1UL << FIXED_POINT_Q15_FRAC_BITS) / 2) + / DELTA_UV_SIGNIFICANT_DIGITS_MUL; + uint32_t raw = deltauv_raw; + uint16_t integer_part, fractional_part; + char sign_char; + + // The deltauv_raw is a 2s complement signed fixed point value 16bit (Q15) + // which uses 15 bit to code the fractional part therefore: + // delta UV raw: 0x8000 => delta UV: -1.0000000 --> -1.00 + // delta UV raw: 0x7fff => delta UV: +0,9999695 --> ~ +1.00 + + if (SIGNED_INT_16BIT_MAX_POSITIVE < raw) { + // Convert the negative value to positive and round it + raw = ( (1UL << 16) - raw) + round_value; + + // Store that the value was negative + sign_char = '-'; + } else { + // Round the raw value to 0.01 precision + raw += round_value; + + // Store that the value was not negative + sign_char = ' '; + } + + // Division by 2^15 to calculate the integer part + integer_part = raw >> FIXED_POINT_Q15_FRAC_BITS; + + // Calculate the significant number of fractional decimal digits + fractional_part = DELTA_UV_SIGNIFICANT_DIGITS_MUL + * (raw & SIGNED_INT_16BIT_MAX_POSITIVE) + >> FIXED_POINT_Q15_FRAC_BITS; + + // Handle the corner case when a negative value was rounded to zero + if ((integer_part == 0) && (fractional_part == 0)) { + sign_char = ' '; + } + + // Print the formatted delta UV value to the character buffer + return snprintf(buffer, buffer_size, "%c%d.%02d", + sign_char, + integer_part, + fractional_part); +} + +/******************************************************************************* + * Function for retrieving actual temperature. + * + * @return Actual temperature level. + ******************************************************************************/ +uint16_t sl_btmesh_get_temperature(void) +{ + return(current_temperature); +} + +/******************************************************************************* + * Function for retrieving actual delta UV. + * + * @return Actual delta UV level. + ******************************************************************************/ +uint16_t sl_btmesh_get_deltauv(void) +{ + return(current_deltauv); +} + +/** @} (end addtogroup Lighting Level Transition Handler) */ diff --git a/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_signal_transition_handler.h b/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_signal_transition_handler.h new file mode 100644 index 00000000000..94680daf5df --- /dev/null +++ b/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_signal_transition_handler.h @@ -0,0 +1,96 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_ctl_signal_transition_handler.h + ******************************************************************************* + * # 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_BTMESH_CTL_SIGNAL_TRANSITION_H +#define SL_BTMESH_CTL_SIGNAL_TRANSITION_H + +/******************************************************************************* + * Function for retrieving actual temperature. + * + * @return Actual temperature level. + ******************************************************************************/ +uint16_t sl_btmesh_get_temperature(void); + +/******************************************************************************* + * Function for retrieving actual delta UV. + * + * @return Actual delta UV level. + ******************************************************************************/ +uint16_t sl_btmesh_get_deltauv(void); + +/******************************************************************************* + * Set LED temperature and delta UV in given transition time. + * + * @param[in] temperature Temperature of color. + * @param[in] deltauv Delta UV value. + * @param[in] transition_ms Transition time in milliseconds. + ******************************************************************************/ +void sl_btmesh_ctl_set_temperature_deltauv_level(uint16_t temperature, + int16_t deltauv, + uint32_t transition_ms); + +/**************************************************************************//** + * Utility function to print the delta UV raw value into the passed character + * buffer in the X.XX format. + * + * @param[out] buffer Character buffer where the formatted delta UV + * is stored + * @param[in] buffer_size Size of the character buffer + * @param[in] deltauv_raw Raw value of the Delta UV CTL parameter + * + * @return same as snprintf + *****************************************************************************/ +int sl_btmesh_ctl_server_snprint_deltauv(char *buffer, + uint16_t buffer_size, + uint16_t deltauv_raw); + +/******************************************************************************* + * Callback for setting Light Color by PWM level (0x0001 - FFFE) + * + * @param[in] Desired light color PWM level. + ******************************************************************************/ +void sl_btmesh_lighting_color_pwm_cb(uint16_t color); + +/***************************************************************************//** + * Called when the UI shall be updated with the changed CTL Model state during + * a transition. The rate of this callback can be controlled by changing the + * SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] temperature Temperature of color. + * @param[in] deltauv Delta UV value. + ******************************************************************************/ +void sl_btmesh_ctl_on_ui_update(uint16_t temperature, + uint16_t deltauv); + +#endif // SL_BTMESH_CTL_SIGNAL_TRANSITION_H diff --git a/app/btmesh/common/btmesh_dcd_configuration/dcd_config.btmeshconf b/app/btmesh/common/btmesh_dcd_configuration/dcd_config.btmeshconf new file mode 100644 index 00000000000..06539fb2391 --- /dev/null +++ b/app/btmesh/common/btmesh_dcd_configuration/dcd_config.btmeshconf @@ -0,0 +1,17 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0xffff", + "vid": "0x0420", + "elements": [ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0000", "name":"Configuration Server"}, + {"mid":"0x0002", "name":"Health Server"} + ] + } + ] + } +} diff --git a/app/btmesh/common/btmesh_event_log/config/sl_btmesh_event_log_config.h b/app/btmesh/common/btmesh_event_log/config/sl_btmesh_event_log_config.h new file mode 100644 index 00000000000..4ed0d1b99d0 --- /dev/null +++ b/app/btmesh/common/btmesh_event_log/config/sl_btmesh_event_log_config.h @@ -0,0 +1,46 @@ +/***************************************************************************//** + * @file + * @brief Mesh events logging 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_BTMESH_EVENT_LOG_CONFIG_H +#define SL_BTMESH_EVENT_LOG_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Enable linear output events logging +// Enables logging of linear output events. +#define SL_BTMESH_LC_LINEAR_OUTPUT_LOG_ENABLE_CFG_VAL 0 + +// Enable unknown events logging +// Enables logging of unknown events. +#define SL_BTMESH_UNKNOWN_EVENTS_LOG_ENABLE_CFG_VAL 0 + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_EVENT_LOG_CONFIG_H diff --git a/app/btmesh/common/btmesh_event_log/sl_btmesh_event_log.c b/app/btmesh/common/btmesh_event_log/sl_btmesh_event_log.c new file mode 100644 index 00000000000..d76cfd6d393 --- /dev/null +++ b/app/btmesh/common/btmesh_event_log/sl_btmesh_event_log.c @@ -0,0 +1,341 @@ +/***************************************************************************//** + * @file + * @brief Bt Mesh Event Logging module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_btmesh_api.h" +#include "sl_bt_api.h" + +#include "app_log.h" + +#include "sl_btmesh_event_log_config.h" +#include "sl_btmesh_event_log.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup BtMeshEventLog + * @{ + ******************************************************************************/ + +/******************************************************************************* + * Handling of sensor client stack events. Both BLuetooth LE and Bluetooth mesh + * events are handled here. + * @param[in] evt_id Incoming event ID. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_handle_btmesh_logging_events(sl_btmesh_msg_t *evt) +{ + if (NULL == evt) { + return; + } + + uint32_t evt_id = SL_BT_MSG_ID(evt->header); + + // Handle events + switch (evt_id) { + /* Node */ + case sl_bt_evt_connection_opened_id: + app_log("evt:le_connection_opened_id" NL); + break; + + /* Connection */ + case sl_bt_evt_connection_parameters_id: + app_log("evt:le_connection_parameters_id: " + "interval %u, latency %u, timeout %u" NL, + ((sl_bt_msg_t *)(evt))->data.evt_connection_parameters.interval, + ((sl_bt_msg_t *)(evt))->data.evt_connection_parameters.latency, + ((sl_bt_msg_t *)(evt))->data.evt_connection_parameters.timeout); + break; + case sl_bt_evt_connection_closed_id: + app_log("evt:conn closed, reason 0x%x" NL, + ((sl_bt_msg_t *)(evt))->data.evt_connection_closed.reason); + break; + case sl_btmesh_evt_node_reset_id: + app_log("evt:mesh_node_reset" NL); + break; + case sl_btmesh_evt_node_initialized_id: + app_log("evt:mesh_node_initialized" NL); + break; + + /* Provisioning */ + case sl_btmesh_evt_node_provisioning_started_id: + app_log("evt:mesh_node_provisioning_started" NL); + break; + + case sl_btmesh_evt_node_provisioned_id: + app_log("evt:mesh_node_node_provisioned" NL); + break; + + case sl_btmesh_evt_node_provisioning_failed_id: + app_log("evt:mesh_node_provisioning_failed, code %x" NL, + evt->data.evt_node_provisioning_failed.result); + break; + + /* Sensor Client */ + case sl_btmesh_evt_sensor_client_descriptor_status_id: + app_log("evt:mesh_sensor_client_descriptor_status" NL); + break; + case sl_btmesh_evt_sensor_client_status_id: + app_log("evt:mesh_sensor_client_status %s" NL, + (evt->data.evt_sensor_client_status.client_address & 0xC000) + == 0xC000 ? "(group broadcast)" + : (evt->data.evt_sensor_client_status.client_address & 0x1000) + == 0 ? "(unicast)" : "(virtual)"); + break; + + /* Sensor Server */ + case sl_btmesh_evt_sensor_server_get_request_id: + app_log("evt:mesh_sensor_server_get_request (from: 0x%04x)" NL, + evt->data.evt_sensor_server_get_request.client_address); + break; + + case sl_btmesh_evt_sensor_server_get_column_request_id: + app_log("evt:mesh_sensor_server_get_column_request" NL); + break; + + case sl_btmesh_evt_sensor_server_get_series_request_id: + app_log("evt:mesh_sensor_server_get_series_request" NL); + break; + + case sl_btmesh_evt_sensor_server_publish_id: + app_log("evt:mesh_sensor_server_publish" NL); + break; + + case sl_btmesh_evt_sensor_setup_server_get_cadence_request_id: + app_log("evt:mesh_sensor_setup_server_get_cadence_request" NL); + break; + + case sl_btmesh_evt_sensor_setup_server_set_cadence_request_id: + app_log("evt:mesh_sensor_setup_server_set_cadence_request" NL); + break; + + case sl_btmesh_evt_sensor_setup_server_get_settings_request_id: + app_log("evt:mesh_sensor_setup_server_get_settings_request" NL); + break; + + case sl_btmesh_evt_sensor_setup_server_get_setting_request_id: + app_log("evt:mesh_sensor_setup_server_get_setting_request" NL); + break; + + case sl_btmesh_evt_sensor_setup_server_set_setting_request_id: + app_log("evt:mesh_sensor_setup_server_set_setting_request" NL); + break; + + /* Node Configuration */ + case sl_btmesh_evt_node_config_set_id: + app_log("evt:mesh_node_config_set id=0x%04x" NL, + evt->data.evt_node_config_set.id); + break; + + case sl_btmesh_evt_node_model_config_changed_id: { + uint8_t conf_state = + evt->data.evt_node_model_config_changed.node_config_state; + app_log("evt:mesh_node_model_config_changed " + "vid=%x, model=%x, conf_state=%s" NL, + evt->data.evt_node_model_config_changed.vendor_id, evt->data + .evt_node_model_config_changed.model_id, + conf_state == 0 ? "application key bindings" + : conf_state == 1 + ? "publication parameters" : "subscription list"); + (void)conf_state; + } + break; + + case sl_btmesh_evt_node_key_added_id: + app_log("evt:mesh_node_key_added" NL + "Got new %s key with index 0x%x" NL, + evt->data.evt_node_key_added.type == 0 + ? "network" : "application", + evt->data.evt_node_key_added.index); + break; + + /* Friendship - Friend Node */ + case sl_btmesh_evt_friend_friendship_established_id: + app_log("evt:mesh_friend_friendship_established " + "netkey_index=%d, lpn_address=0x%04x" NL, + evt->data.evt_friend_friendship_established.netkey_index, + evt->data.evt_friend_friendship_established.lpn_address); + break; + + case sl_btmesh_evt_friend_friendship_terminated_id: + app_log("evt:mesh_friend_friendship_terminated " + "netkey_index=%d, lpn_address=0x%04x, reason=0x%04x" NL, + evt->data.evt_friend_friendship_terminated.netkey_index, + evt->data.evt_friend_friendship_terminated.lpn_address, + evt->data.evt_friend_friendship_terminated.reason); + break; + + /* Friendship - Low Power Node*/ + case sl_btmesh_evt_lpn_friendship_failed_id: + app_log("evt:mesh_lpn_friendship_failed " + "netkey_index=%d, reason=0x%04x" NL, + evt->data.evt_lpn_friendship_failed.netkey_index, + evt->data.evt_lpn_friendship_failed.reason); + break; + + case sl_btmesh_evt_lpn_friendship_established_id: + app_log("evt:mesh_lpn_friendship_established " + "netkey_index=%d, addr=0x%04x" NL, + evt->data.evt_lpn_friendship_established.netkey_index, + evt->data.evt_lpn_friendship_established.friend_address); + break; + + case sl_btmesh_evt_lpn_friendship_terminated_id: + app_log("evt:mesh_lpn_friendship_terminated " + "netkey_index=%d, reason=0x%04x" NL, + evt->data.evt_lpn_friendship_terminated.netkey_index, + evt->data.evt_lpn_friendship_terminated.reason); + break; + + /* Proxy */ + case sl_btmesh_evt_proxy_connected_id: + app_log("evt:mesh_proxy_connected_id" NL); + break; + + case sl_btmesh_evt_proxy_disconnected_id: + app_log("evt:mesh_proxy_disconnected_id" NL); + break; + + /* Scene Server */ + case sl_btmesh_evt_scene_server_get_id: + app_log("evt:sl_btmesh_evt_scene_server_get_id, " + "client_address=%u, appkey_index=%u" NL, + evt->data.evt_scene_server_get.client_address, + evt->data.evt_scene_server_get.appkey_index); + break; + + case sl_btmesh_evt_scene_server_register_get_id: + app_log("evt:sl_btmesh_evt_scene_server_register_get_id, " + "client_address=%u, appkey_index=%u" NL, + evt->data.evt_scene_server_register_get.client_address, + evt->data.evt_scene_server_register_get.appkey_index); + break; + + case sl_btmesh_evt_scene_server_recall_id: + app_log("evt:sl_btmesh_evt_scene_server_recall_id, client_address=%u, " + "appkey_index=%u, selected_scene=%u, transition_time=%lu" NL, + evt->data.evt_scene_server_recall.client_address, + evt->data.evt_scene_server_recall.appkey_index, + evt->data.evt_scene_server_recall.selected_scene, + evt->data.evt_scene_server_recall.transition_time_ms); + break; + + case sl_btmesh_evt_scene_server_publish_id: + app_log("evt:sl_btmesh_evt_scene_server_publish_id, period_ms=%lu" NL, + evt->data.evt_scene_server_publish.period_ms); + break; + + case sl_btmesh_evt_scene_setup_server_store_id: + app_log("evt:sl_btmesh_evt_scene_setup_server_store_id, " + "client_address=%u, appkey_index=%u, scene_id=%u" NL, + evt->data.evt_scene_setup_server_store.client_address, + evt->data.evt_scene_setup_server_store.appkey_index, + evt->data.evt_scene_setup_server_store.scene_id); + break; + + case sl_btmesh_evt_scene_setup_server_delete_id: + app_log("evt:sl_btmesh_evt_scene_setup_server_delete_id, " + "client_address=%u, appkey_index=%u, scene_id=%u" NL, + evt->data.evt_scene_setup_server_delete.client_address, + evt->data.evt_scene_setup_server_delete.appkey_index, + evt->data.evt_scene_setup_server_delete.scene_id); + break; + + case sl_btmesh_evt_scene_setup_server_publish_id: + app_log("evt:sl_btmesh_evt_scene_setup_server_publish_id, " + "period_ms=%lu" NL, + evt->data.evt_scene_setup_server_publish.period_ms); + break; + /* Generic Server Events */ + case sl_btmesh_evt_generic_server_client_request_id: + app_log("evt:sl_btmesh_evt_generic_server_client_request_id" NL); + break; + + case sl_btmesh_evt_generic_server_state_recall_id: + app_log("evt:sl_btmesh_evt_generic_server_state_recall_id" NL); + break; + + /* LC Events */ + case sl_btmesh_evt_lc_server_mode_updated_id: + app_log("evt:sl_btmesh_evt_lc_server_mode_updated_id, mode=%u" NL, + evt->data.evt_lc_server_mode_updated.mode_value); + break; + + case sl_btmesh_evt_lc_server_om_updated_id: + app_log("evt:sl_btmesh_evt_lc_server_om_updated_id, om=%u" NL, + evt->data.evt_lc_server_om_updated.om_value); + break; + + case sl_btmesh_evt_lc_server_light_onoff_updated_id: + app_log("evt:sl_btmesh_evt_lc_server_light_onoff_updated_id, " + "lc_onoff=%u, transtime=%lu" NL, + evt->data.evt_lc_server_light_onoff_updated.onoff_state, + evt->data.evt_lc_server_light_onoff_updated.onoff_trans_time_ms); + break; + + case sl_btmesh_evt_lc_server_occupancy_updated_id: + app_log("evt:sl_btmesh_evt_lc_server_occupancy_updated_id, " + "occupancy=%u" NL, + evt->data.evt_lc_server_occupancy_updated.occupancy_value); + break; + + case sl_btmesh_evt_lc_server_ambient_lux_level_updated_id: + app_log("evt:sl_btmesh_evt_lc_server_ambient_lux_level_updated_id, " + "lux_level=%lu" NL, + evt->data.evt_lc_server_ambient_lux_level_updated.ambient_lux_level_value); + break; + + case sl_btmesh_evt_lc_server_linear_output_updated_id: +#if defined(SL_BTMESH_LC_LINEAR_OUTPUT_LOG_ENABLE_CFG_VAL) && SL_BTMESH_LC_LINEAR_OUTPUT_LOG_ENABLE_CFG_VAL + app_log("evt:sl_btmesh_evt_lc_server_linear_output_updated_id, " + "linear_output=%u" NL, + evt->data.evt_lc_server_linear_output_updated.linear_output_value); +#endif // SL_BTMESH_LC_LINEAR_OUTPUT_LOG_ENABLE_CFG_VAL + break; + + case sl_btmesh_evt_lc_setup_server_set_property_id: + app_log("evt:sl_btmesh_evt_lc_setup_server_property_set_id, " + "property=0x%4.4x, value=0x" NL, + evt->data.evt_lc_setup_server_set_property.property_id); + break; + + default: +#if defined(SL_BTMESH_UNKNOWN_EVENTS_LOG_ENABLE_CFG_VAL) && SL_BTMESH_UNKNOWN_EVENTS_LOG_ENABLE_CFG_VAL + app_log("unknown evt: %8.8x class %2.2x method %2.2x" NL, + evt_id, + (evt_id >> 16) & 0xFF, + (evt_id >> 24) & 0xFF); +#endif // SL_BTMESH_UNKNOWN_EVENTS_LOG_ENABLE_CFG_VAL + break; + } +} + +/** @} (end addtogroup BtMeshEventLog) */ diff --git a/app/btmesh/common/btmesh_event_log/sl_btmesh_event_log.h b/app/btmesh/common/btmesh_event_log/sl_btmesh_event_log.h new file mode 100644 index 00000000000..97cf99d2d9c --- /dev/null +++ b/app/btmesh/common/btmesh_event_log/sl_btmesh_event_log.h @@ -0,0 +1,42 @@ +/***************************************************************************//** + * @file + * @brief btmesh_event_log.h + ******************************************************************************* + * # 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_BTMESH_EVENT_LOG +#define SL_BTMESH_EVENT_LOG + +/***************************************************************************//** + * Handling of sensor client stack events. Both BLuetooth LE and Bluetooth mesh + * events are handled here. + * @param[in] evt_id Incoming event ID. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_handle_btmesh_logging_events(sl_btmesh_msg_t *evt); + +#endif // SL_BTMESH_EVENT_LOG diff --git a/app/btmesh/common/btmesh_factory_reset/sl_btmesh_factory_reset.c b/app/btmesh/common/btmesh_factory_reset/sl_btmesh_factory_reset.c new file mode 100644 index 00000000000..2b723f6befc --- /dev/null +++ b/app/btmesh/common/btmesh_factory_reset/sl_btmesh_factory_reset.c @@ -0,0 +1,182 @@ +/***************************************************************************//** + * @file + * @brief Factory Reset module + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "em_common.h" +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_CLI_PRESENT +#include "sl_cli.h" +#endif // SL_CATALOG_CLI_PRESENT + +#include "sl_btmesh_factory_reset.h" + +/***************************************************************************//** + * @addtogroup FactoryReset + * @{ + ******************************************************************************/ + +/// Callback has no parameters +#define NO_CALLBACK_DATA (void *)NULL +/// timeout for factory init +#define FACTORY_RESET_TIMEOUT 2000 + +/// timer callback +static sl_simple_timer_t factory_reset_timer; + +///timer callback prototype +static void factory_reset_timer_cb(sl_simple_timer_t *handle, void *data); + +/******************************************************************************* + * This function is called to initiate node reset. + ******************************************************************************/ +void sl_btmesh_initiate_node_reset() +{ + sl_status_t sc = SL_STATUS_OK; + // Perform a factory reset of the node. This removes all the keys + // and other settings that have been configured for this node + sc = sl_btmesh_node_reset(); + app_assert_status_f(sc, "Failed to reset node"); + + // Application callback on node reset + sl_btmesh_factory_reset_on_node_reset(); + + // Reboot after a small delay + sc = sl_simple_timer_start(&factory_reset_timer, + FACTORY_RESET_TIMEOUT, + factory_reset_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Factory reset timer"); +} + +/******************************************************************************* + * This function is called to initiate full reset. + ******************************************************************************/ +void sl_btmesh_initiate_full_reset() +{ + sl_status_t sc = SL_STATUS_OK; + // Perform a factory reset of the node. This removes all the keys + // and other settings that have been configured for this node + sc = sl_btmesh_node_reset(); + app_assert_status_f(sc, "Failed to reset node"); + // Perform a full reset by erasing PS storage. + sc = sl_bt_nvm_erase_all(); + app_assert_status_f(sc, "Failed to erase NVM"); + + // Application callback on full reset + sl_btmesh_factory_reset_on_full_reset(); + + // Reboot after a small delay + sc = sl_simple_timer_start(&factory_reset_timer, + FACTORY_RESET_TIMEOUT, + factory_reset_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Factory reset timer"); +} + +/******************************************************************************* + * Handling of node reset event. + * + * @param[in] evt Pointer to incoming time event. + ******************************************************************************/ +void sl_btmesh_factory_reset_on_event(sl_btmesh_msg_t *evt) +{ + sl_status_t sc = SL_STATUS_OK; + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_reset_id: + // Application callback on node reset + sl_btmesh_factory_reset_on_node_reset(); + + // Reboot after a small delay + sc = sl_simple_timer_start(&factory_reset_timer, + FACTORY_RESET_TIMEOUT, + factory_reset_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Factory reset timer"); + break; + + default: + break; + } +} + +/***************************************************************************//** + * Timer Callback + ******************************************************************************/ +static void factory_reset_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + sl_bt_system_reset(0); +} + +/***************************************************************************//** + * CLI Callback + * @param[in] arguments pointer to CLI arguments + ******************************************************************************/ +#ifdef SL_CATALOG_CLI_PRESENT +void factory_reset_from_cli(sl_cli_command_arg_t *arguments) +{ + (void)arguments; + sl_btmesh_initiate_full_reset(); +} + +void node_reset_from_cli(sl_cli_command_arg_t *arguments) +{ + (void)arguments; + sl_btmesh_initiate_node_reset(); +} +#endif // SL_CATALOG_CLI_PRESENT + +/***************************************************************************//** + * Weak implementation of node reset callback + ******************************************************************************/ +SL_WEAK void sl_btmesh_factory_reset_on_node_reset(void) +{ +} + +/***************************************************************************//** + * Weak implementation of full reset callback + ******************************************************************************/ +SL_WEAK void sl_btmesh_factory_reset_on_full_reset(void) +{ +} + +/** @} (end addtogroup FactoryReset) */ diff --git a/app/btmesh/common/btmesh_factory_reset/sl_btmesh_factory_reset.h b/app/btmesh/common/btmesh_factory_reset/sl_btmesh_factory_reset.h new file mode 100644 index 00000000000..c850c43d94e --- /dev/null +++ b/app/btmesh/common/btmesh_factory_reset/sl_btmesh_factory_reset.h @@ -0,0 +1,67 @@ +/***************************************************************************//** + * @file + * @brief factory_reset.h + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_FACTORY_RESET_H +#define SL_BTMESH_FACTORY_RESET_H + +/***************************************************************************//** + * This function is called to initiate node reset. + ******************************************************************************/ +void sl_btmesh_initiate_node_reset(void); + +/***************************************************************************//** + * This function is called to initiate full reset. + ******************************************************************************/ +void sl_btmesh_initiate_full_reset(void); + +/***************************************************************************//** + * Handling of node reset event. + * + * @param[in] evt Pointer to incoming time event. + ******************************************************************************/ +void sl_btmesh_factory_reset_on_event(sl_btmesh_msg_t *evt); + +/***************************************************************************//** + * Called during the factory reset of the node. + * @note If no implementation is provided in the application then a default weak + * implementation if provided which is a no-operation. (empty function) + * + ******************************************************************************/ +void sl_btmesh_factory_reset_on_node_reset(void); + +/***************************************************************************//** + * Called during the factory reset of the device. + * @note If no implementation is provided in the application then a default weak + * implementation if provided which is a no-operation. (empty function) + * + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void); + +#endif // SL_BTMESH_FACTORY_RESET_H diff --git a/app/btmesh/common/btmesh_firmware_update_client/btmesh_firmware_update_client.dcd b/app/btmesh/common/btmesh_firmware_update_client/btmesh_firmware_update_client.dcd new file mode 100644 index 00000000000..c1108851fe7 --- /dev/null +++ b/app/btmesh/common/btmesh_firmware_update_client/btmesh_firmware_update_client.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1403", "name":"Device Firmware Update Client"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_firmware_update_client/sl_btmesh_firmware_update_client.c b/app/btmesh/common/btmesh_firmware_update_client/sl_btmesh_firmware_update_client.c new file mode 100644 index 00000000000..5c2da6ac530 --- /dev/null +++ b/app/btmesh/common/btmesh_firmware_update_client/sl_btmesh_firmware_update_client.c @@ -0,0 +1,92 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Firmware Update Client + * + * The firmware update client application model performs the initialization only + * because the distributor stack class calls the necessary firmware update client + * stack class functions inside the BT Mesh stack therefore no additional logic + * is necessary at application level. + * + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#include "sl_btmesh_firmware_update_client.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup fw_upd_client BT Mesh Firmware Update Client + * @{ + ******************************************************************************/ +static void sl_btmesh_firmware_update_client_element_init(uint16_t elem_index) +{ + sl_status_t sc = sl_btmesh_fw_update_client_init(elem_index); + + app_assert_status_f(sc, "Failed to init Firmware Update Client"); +} + +static void sl_btmesh_firmware_update_client_init(void) +{ + sl_btmesh_firmware_update_client_element_init(BTMESH_FW_DISTRIBUTION_SERVER_MAIN); +} + +void sl_btmesh_firmware_update_client_on_event(const sl_btmesh_msg_t *const evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_provisioned_id: { + sl_btmesh_firmware_update_client_init(); + break; + } + case sl_btmesh_evt_node_initialized_id: { + if (0 != evt->data.evt_node_initialized.provisioned) { + sl_btmesh_firmware_update_client_init(); + } + break; + } + } +} + +/** @} end fw_upd_client */ diff --git a/app/btmesh/common/btmesh_firmware_update_client/sl_btmesh_firmware_update_client.h b/app/btmesh/common/btmesh_firmware_update_client/sl_btmesh_firmware_update_client.h new file mode 100644 index 00000000000..c010883543e --- /dev/null +++ b/app/btmesh/common/btmesh_firmware_update_client/sl_btmesh_firmware_update_client.h @@ -0,0 +1,60 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Firmware Update Client + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_FIRMWARE_UPDATE_CLIENT_H +#define SL_BTMESH_FIRMWARE_UPDATE_CLIENT_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * @addtogroup fw_upd_client BT Mesh Firmware Update Client + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Handle Firmware Update Client events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + * + ******************************************************************************/ +void sl_btmesh_firmware_update_client_on_event(const sl_btmesh_msg_t *const evt); + +/** @} end fw_upd_client */ + +#ifdef __cplusplus +} +#endif // __cplusplus + + #endif // SL_BTMESH_FIRMWARE_UPDATE_CLIENT_H diff --git a/app/btmesh/common/btmesh_firmware_update_server/btmesh_firmware_update_server.dcd b/app/btmesh/common/btmesh_firmware_update_server/btmesh_firmware_update_server.dcd new file mode 100644 index 00000000000..3e755a0d5ac --- /dev/null +++ b/app/btmesh/common/btmesh_firmware_update_server/btmesh_firmware_update_server.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1402", "name":"Firmware Update Server"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_firmware_update_server/btmesh_firmware_update_server_validation.lua b/app/btmesh/common/btmesh_firmware_update_server/btmesh_firmware_update_server_validation.lua new file mode 100644 index 00000000000..82f24d2bd42 --- /dev/null +++ b/app/btmesh/common/btmesh_firmware_update_server/btmesh_firmware_update_server_validation.lua @@ -0,0 +1,74 @@ +-- automatic conversion of input parameters +local function autonumber(input) + local base = 10 + local orig_input = input + if (type(input) == "string") then + input = input:gsub("[\(\)\"uUlL]", "") + if string.find(input,"[bxhBXH]") ~= nil then + if string.find(string.lower(input), "0b") == 1 then + input = input:gsub("[bB]","") + base = 2 + elseif string.find(string.lower(input), "0x") == 1 then + input = input:gsub("[xXhH]","") + base = 16 + end + elseif string.find(input, "0") == 1 then + base = 8 + end + elseif (type(input) == "number") then + return input + else + logit("autonumber() expects either a string or a number!") + return nil + end + local result = tonumber(input, base) + if result == nil then + logit("Configured value is not valid: \"" .. tostring(orig_input) .. "\" - modify it to a numeric value!") + end + return result +end + +-- Calculate maximum number of firmware update server rx message (segment) count +-- The Firmware Update Start and Firmware Update Firmware Metadata Check +-- messages contain metadata and these have variable length because of this. +-- The Firmware Update Start message is always longer in case of the same +-- metadata length because it has more fields. +-- Firmware Update Start message: Opcode (2) +-- + Update TTL (1) +-- + Update Timeout Base (2) +-- + Update BLOB ID (8) +-- + Update Firmware Image Index (1) +-- + Incoming Firmware Metadata (Opt:1-255) +-- The max length of an unsegmented access layer message is 11 however the +-- mandatory part of Firmware Update Start message is 13 bytes without any +-- metadata so it never fits into one BT Mesh message only. +local function calc_fw_update_server_max_message_count(metadata_length) + local TRANSMIC_MIN_SIZE = 4 + local FW_UPDATE_START_MIN_LENGTH = 13 + local fw_update_message_payload_size = FW_UPDATE_START_MIN_LENGTH + metadata_length + return math.ceil((fw_update_message_payload_size + TRANSMIC_MIN_SIZE) / 12) +end + +local metadata_length_name = "SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL" +local lpn_min_queue_length_name = "SL_BTMESH_LPN_MIN_QUEUE_LENGTH_CFG_VAL" +local lpn_component_selected = slc.is_selected("btmesh_lpn") + +if lpn_component_selected then + metadata_length = autonumber(slc.config(metadata_length_name).value) + lpn_min_queue_length = autonumber(slc.config(lpn_min_queue_length_name).value) + if lpn_min_queue_length < calc_fw_update_server_max_message_count(metadata_length) then + local problem = "LPN min queue length and max metadata length config inconsistent" + local description = + string.format("The maximum firmware update server message count (%i) " + .. "derived from max metadata length (%i) shall fit " + .. "into LPN min queue length (%i)", + calc_fw_update_server_max_message_count(metadata_length), + metadata_length, + lpn_min_queue_length) + validation.error(problem, + validation.target_for_defines({metadata_length_name, + lpn_min_queue_length_name}), + description, + nil) + end +end diff --git a/app/btmesh/common/btmesh_firmware_update_server/config/sl_btmesh_firmware_update_server_config.h b/app/btmesh/common/btmesh_firmware_update_server/config/sl_btmesh_firmware_update_server_config.h new file mode 100644 index 00000000000..cd27bbe8962 --- /dev/null +++ b/app/btmesh/common/btmesh_firmware_update_server/config/sl_btmesh_firmware_update_server_config.h @@ -0,0 +1,73 @@ +/***************************************************************************//** + * @file + * @brief Firmware Update Server Configuration + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_FIRMWARE_UPDATE_SERVER_CONFIG_H +#define SL_BTMESH_FIRMWARE_UPDATE_SERVER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Number of firmware on device <1-255> +#define SL_BTMESH_FW_UPDATE_SERVER_NUM_OF_FW_CFG_VAL 1 + +// Maximum length of metadata <0-255> +#define SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL 255 + +// Firmware Information +// Company Identifier +// CID MSB +// Hexadecimal string literal. +#define SL_BTMESH_FW_UPDATE_SERVER_CID_MSB_CFG_VAL "\x02" + +// CID LSB +// Hexadecimal string literal. +#define SL_BTMESH_FW_UPDATE_SERVER_CID_LSB_CFG_VAL "\xFF" + +// + +// Firmware identifier +#define SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL "fwid" + +// Update URI +#define SL_BTMESH_FW_UPDATE_SERVER_UPDATE_URI_CFG_VAL "https://example.com/upd_uri" + +// + +// Logging +#define SL_BTMESH_FW_UPDATE_SERVER_LOGGING_CFG_VAL 1 + +// Period of verification progress logs [ms] <0-2000:100> +// Setting it to 0 the user interface (log & display) is updated every time when progress is made. +#define SL_BTMESH_FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD_CFG_VAL 200 + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_FIRMWARE_UPDATE_SERVER_CONFIG_H diff --git a/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server.c b/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server.c new file mode 100644 index 00000000000..9f6b019b903 --- /dev/null +++ b/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server.c @@ -0,0 +1,616 @@ +/***************************************************************************//** + * @file + * @brief Definitions of Firmware Update Server functionality + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ +#include "sl_btmesh.h" +#include "sl_btmesh_dcd.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_log_PRESENT + +#ifdef SL_CATALOG_APP_ASSERT_PRESENT +#include "app_assert.h" +#endif // SL_CATALOG_APP_ASSERT_PRESENT + +#include "sl_simple_timer.h" + +#ifdef SL_CATALOG_BTMESH_STACK_FW_DISTRIBUTION_SERVER_PRESENT +#include "sli_btmesh_fw_distribution_server.h" +#endif // SL_CATALOG_BTMESH_STACK_FW_DISTRIBUTION_SERVER_PRESENT + +#include "sl_btmesh_blob_storage.h" +#include "sl_btmesh_blob_storage_app_id.h" + +#include "sl_btmesh_firmware_update_server.h" +#include "sl_btmesh_firmware_update_server_api.h" +#include "sl_btmesh_firmware_update_server_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup mesh_fw_update_server + * @{ + ******************************************************************************/ + +/// Returns the string representation of BLOB ID in a compound literal. +/// WARNING! This macro shall be used as a parameter of log calls only due to the +/// lifetime of underlying compound literal in APP_BTMESH_UUID_64_TO_STRING. +#define BLOB_ID_TO_STRING(blob_id) APP_BTMESH_UUID_64_TO_STRING(blob_id, ' ', true) + +/// Storage for internal state variables +static struct { + union { + /// State flags + struct { + /// Idle state + uint16_t idle : 1; + /// Idle/Inactive state + uint16_t inactive : 1; + /// Idle/Failed state + uint16_t failed : 1; + /// Idle/Failed/Transfer Failed state + uint16_t transfer_failed : 1; + /// Idle/Failed/Verification Failed state + uint16_t verification_failed : 1; + /// Active state + uint16_t active : 1; + /// Active/Transfer state + uint16_t transfer : 1; + /// Active/Verification state + uint16_t verification : 1; + /// Verification Successful state + uint16_t verification_success : 1; + }; + uint16_t raw; + } state; + /// Current status of verification (used in Active/Verification) + sl_btmesh_fw_update_server_verify_state_t verification_status; + /// Chunk storage for verification steps + uint8_t * verification_chunk_buffer; + /// Size of the chunks for verification + uint32_t verification_chunk_size; + /// Size of the BLOB being verified + uint32_t verification_size; + /// Current progress of verification + uint32_t verification_progress; + /// Verification log timer + sl_simple_timer_t verify_timer; + /// BLOB identifier being transferred + sl_bt_uuid_64_t blob_id; + + union { + /// Metadata check state machine state flags + struct { + /// Idle state flag + uint8_t idle : 1; + /// Active state flag + uint8_t active : 1; + /// Indicates that Update Start triggered the metadata check + uint8_t start_response : 1; + }; + uint8_t raw; + } metadata_check_state; + /// Used for distributor to indicate self update + bool self_update; + /// Current status of metadata check (used in Active) + sl_btmesh_fw_update_server_metadata_check_state_t metadata_check_status; + PACKSTRUCT(struct { + /// Firmware index of metadata being checked + uint8_t metadata_fw_index; + /// Metadata buffer + uint8_t metadata[SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL]; + }) + ; + /// Length of metadata + uint8_t metadata_len; + /// Metadata check response Additional Information + sl_btmesh_fw_update_server_additional_information_t additional_information; +} firmware_update_server; + +typedef enum { + /// Idle + IDLE, + /// Idle/Inactive + IDLE_INACTIVE, + /// Idle/Failed/Transfer Failed + IDLE_FAILED_TRANSFER_FAILED, + /// Idle/Failed/Verification Failed + IDLE_FAILED_VERIFICATION_FAILED, + /// Idle/Suspended + IDLE_SUSPENDED, + /// Active/Transfer + ACTIVE_TRANSFER, + /// Active/Verification + ACTIVE_VERIFICATION, + /// Verification Success + VERIFICATION_SUCCESS, + + /// Metadata check Idle + METADATA_IDLE, + /// Metadata check Active + METADATA_ACTIVE +} btmesh_firmware_udpate_state_t; + +/***************************************************************************//** + * Transitions state machine to a state with handling entry actions + * + * @param[in] state State to transition into + ******************************************************************************/ +static void btmesh_firmware_udpate_server_change_state(btmesh_firmware_udpate_state_t state); + +/***************************************************************************//** + * Logs verification progress + * + * @note Inputs are not used. + * + * @param[in] timer Timer structure + * @param[in] data Callback data + ******************************************************************************/ +static void btmesh_firmware_update_server_verify_progress_ui_update(sl_simple_timer_t *timer, + void *data); + +void sl_btmesh_firmware_update_server_init(void) +{ + sl_btmesh_fw_update_server_init(BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + SL_BTMESH_FW_UPDATE_SERVER_NUM_OF_FW_CFG_VAL, + SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL); + + // Initial state is Idle + btmesh_firmware_udpate_server_change_state(IDLE); + firmware_update_server.metadata_check_state.raw = 0; + firmware_update_server.metadata_check_state.idle = 1; +} + +void sl_btmesh_firmware_update_server_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_firmware_update_server_init(); + break; + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_firmware_update_server_init(); + } + break; + case sl_btmesh_evt_fw_update_server_check_fw_metadata_req_id: { + sl_btmesh_evt_fw_update_server_check_fw_metadata_req_t *msg = + &evt->data.evt_fw_update_server_check_fw_metadata_req; + log_debug("Received Metadata Check request." NL); + // Save FW index from message + firmware_update_server.metadata_fw_index = msg->fw_index; + firmware_update_server.metadata_len = msg->metadata.len; + firmware_update_server.metadata_check_state.start_response = 0; + memcpy(firmware_update_server.metadata, + msg->metadata.data, + firmware_update_server.metadata_len); + btmesh_firmware_udpate_server_change_state(METADATA_ACTIVE); + break; + } + case sl_btmesh_evt_fw_update_server_update_start_req_id: { + if (0 == firmware_update_server.state.idle) { + return; + } + sl_btmesh_evt_fw_update_server_update_start_req_t *msg = + &evt->data.evt_fw_update_server_update_start_req; + + // Store BLOB ID of incoming firmware + memcpy(&firmware_update_server.blob_id, + &msg->blob_id, + sizeof(sl_bt_uuid_64_t)); + + log_info("Update Start (BLOB ID: %s)" NL, + BLOB_ID_TO_STRING(&firmware_update_server.blob_id)); + + firmware_update_server.metadata_len = msg->metadata.len; + firmware_update_server.metadata_fw_index = msg->fw_index; + firmware_update_server.metadata_check_state.start_response = 1; + + // Store received metadata + memcpy(firmware_update_server.metadata, + msg->metadata.data, + firmware_update_server.metadata_len); + btmesh_firmware_udpate_server_change_state(METADATA_ACTIVE); + break; + } + case sl_btmesh_evt_mbt_server_state_changed_id: { + if (0 == firmware_update_server.state.transfer) { + return; + } + sl_btmesh_evt_mbt_server_state_changed_t *msg = + &evt->data.evt_mbt_server_state_changed; + // timed out + switch (msg->new_state) { + case sl_btmesh_mbt_server_phase_suspended: + if (firmware_update_server.state.active == 1 + && firmware_update_server.state.transfer == 1) { + btmesh_firmware_udpate_server_change_state(IDLE_SUSPENDED); + } + break; + case sl_btmesh_mbt_server_phase_inactive: + if (firmware_update_server.state.idle == 0) { + // If the MBT server goes inactive, and FW Update is not idle, it + // must've been an MBT abort, meaning update is aborted. + // Notify user about update abort + sl_btmesh_fw_update_server_update_aborted(); + log_error("Firmware Update aborted due BLOB Transfer is abort" NL); + } + btmesh_firmware_udpate_server_change_state(IDLE_INACTIVE); + break; + } + // sl_btmesh_evt_mbt_server_state_changed_id + break; + } + case sl_btmesh_evt_fw_update_server_update_cancelled_id: + if (0 == firmware_update_server.state.active) { + return; + } + log_info("Firmware Update Canceled" NL); + // Notify user about update cancelation + sl_btmesh_fw_update_server_update_canceled(); + btmesh_firmware_udpate_server_change_state(IDLE_INACTIVE); + break; + case sl_btmesh_evt_fw_update_server_verify_fw_req_id: { + if (0 == firmware_update_server.state.transfer && !firmware_update_server.self_update) { + return; + } + btmesh_firmware_udpate_server_change_state(ACTIVE_VERIFICATION); + break; + } + case sl_btmesh_evt_fw_update_server_apply_id: + if (0 == firmware_update_server.state.verification_success) { + return; + } + log_info("Applying Firmware." NL); + // User callback for FW apply + sl_btmesh_fw_update_server_apply(); + break; + case sl_btmesh_evt_fw_update_server_distributor_self_update_req_id: + if (0 == firmware_update_server.state.idle) { + return; + } else { +#ifdef SL_CATALOG_BTMESH_STACK_FW_DISTRIBUTION_SERVER_PRESENT + mesh_dfu_dist_server_fw_info_t info; + sl_btmesh_evt_fw_update_server_distributor_self_update_req_t *msg = + &evt->data.evt_fw_update_server_distributor_self_update_req; + sl_status_t sc = sli_btmesh_fw_dist_server_get_fw_by_index( + BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + msg->fw_index, + &info); + if (SL_STATUS_OK != sc) { + sl_btmesh_fw_update_server_distributor_self_update_rsp( + BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + sl_btmesh_fw_update_server_update_start_response_type_reject_internal_error, + (uint8_t)firmware_update_server.additional_information); + } else { + memcpy(&firmware_update_server.blob_id, + info.p_blob_id, + sizeof(sl_bt_uuid_64_t)); + memcpy(firmware_update_server.metadata, + info.p_metadata, + info.metadata_len); + firmware_update_server.self_update = true; + btmesh_firmware_udpate_server_change_state(METADATA_ACTIVE); + } +#else // SL_CATALOG_BTMESH_STACK_FW_DISTRIBUTION_SERVER_PRESENT + sl_btmesh_fw_update_server_distributor_self_update_rsp( + BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + sl_btmesh_fw_update_server_update_start_response_type_reject_internal_error, + (uint8_t)firmware_update_server.additional_information); +#endif + } + break; + default: + // empty + break; + } +} + +void sl_btmesh_firmware_update_server_verify_step_handle(void) +{ + if (1 == firmware_update_server.state.verification) { + switch (firmware_update_server.verification_status) { + case BTMESH_FW_UPDATE_SERVER_VERIFY_SUCCESS: + // In case of success, accept firmware + sl_btmesh_fw_update_server_verify_fw_rsp(BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + !0); + sl_simple_timer_stop(&firmware_update_server.verify_timer); +#if FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD > 0 + btmesh_firmware_update_server_verify_progress_ui_update(NULL, NULL); +#endif // FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD > 0 + btmesh_firmware_udpate_server_change_state(VERIFICATION_SUCCESS); + break; + case BTMESH_FW_UPDATE_SERVER_VERIFY_ERROR: + // In case of error, reject firmware + sl_btmesh_fw_update_server_verify_fw_rsp(BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + 0); + sl_simple_timer_stop(&firmware_update_server.verify_timer); +#if FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD > 0 + btmesh_firmware_update_server_verify_progress_ui_update(NULL, NULL); +#endif // FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD > 0 + btmesh_firmware_udpate_server_change_state(IDLE_FAILED_VERIFICATION_FAILED); + break; + case BTMESH_FW_UPDATE_SERVER_VERIFY_PENDING: + if (NULL != firmware_update_server.verification_chunk_buffer) { + // Read out data from flash to pass to user callback + // + // In the default implementation this data is not used. However, this + // way the user has the opportunity to implement their own verification. + sl_btmesh_blob_storage_read(&firmware_update_server.blob_id, + firmware_update_server.verification_progress, + &firmware_update_server.verification_chunk_size, + firmware_update_server.verification_chunk_buffer); + } + // If pending, call step + firmware_update_server.verification_status = + sl_btmesh_fw_update_server_verify_step(firmware_update_server.verification_chunk_buffer, + firmware_update_server.verification_chunk_size); + firmware_update_server.verification_progress += + firmware_update_server.verification_chunk_size; +#if SL_BTMESH_FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD_CFG_VAL == 0 + btmesh_firmware_update_server_verify_progress_ui_update(NULL, NULL); +#endif // SL_BTMESH_FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD_CFG_VAL == 0 + break; + } + } +} + +void sl_btmesh_firmware_update_server_metadata_check_step_handle(void) +{ + if (1 == firmware_update_server.metadata_check_state.active) { + switch (firmware_update_server.metadata_check_status) { + case BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_SUCCESS: + log_info("Metadata check successful" NL); + + // In case of success, accept metadata + if (firmware_update_server.self_update) { + sl_btmesh_fw_update_server_distributor_self_update_rsp( + BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + sl_btmesh_fw_update_server_update_start_response_type_accept, + (uint8_t)firmware_update_server.additional_information); + } else if (1 == firmware_update_server.metadata_check_state.start_response) { + sl_bt_uuid_64_t blob_id; + + // SL_STATUS_OK indicates, that the exact footer has been found + // blob_id is used as dummy storage + sl_status_t metadata_footer_check = + sl_btmesh_blob_storage_get_blob_id_by_footer( + BLOB_STORAGE_APP_ID_DFU_METADATA, + &firmware_update_server.metadata_fw_index, + firmware_update_server.metadata_len + 1, + &blob_id); + + if (metadata_footer_check == SL_STATUS_OK) { + // Set the BLOB ID to the one stored, so it identifies the already + // stored image + memcpy(&firmware_update_server.blob_id, + &blob_id, + sizeof(sl_bt_uuid_64_t)); + } + + sl_btmesh_fw_update_server_update_start_response_type_t response = + (metadata_footer_check == SL_STATUS_OK) + ? sl_btmesh_fw_update_server_update_start_response_type_fw_already_exists + : sl_btmesh_fw_update_server_update_start_response_type_accept; + + sl_btmesh_fw_update_server_update_start_rsp( + BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + (uint8_t)response, + (uint8_t)firmware_update_server.additional_information); + btmesh_firmware_udpate_server_change_state( + (metadata_footer_check == SL_STATUS_OK) + ? ACTIVE_VERIFICATION + : ACTIVE_TRANSFER); + } else { + sl_btmesh_fw_update_server_check_fw_metadata_rsp( + BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + sl_btmesh_fw_update_server_update_start_response_type_accept, + (uint8_t)firmware_update_server.additional_information, + firmware_update_server.metadata_fw_index); + } + // Notify user about update starting + sl_btmesh_fw_update_server_update_start(&firmware_update_server.blob_id); + // Switch to Idle state + btmesh_firmware_udpate_server_change_state(METADATA_IDLE); + break; + case BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_ERROR: + log_error("Metadata check error" NL); + // In case of error, reject metadata + if (firmware_update_server.self_update) { + sl_btmesh_fw_update_server_distributor_self_update_rsp( + BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + sl_btmesh_fw_update_server_update_start_response_type_reject_metadata_check_failed, + (uint8_t)firmware_update_server.additional_information); + } else if (1 == firmware_update_server.metadata_check_state.start_response) { + sl_btmesh_fw_update_server_update_start_rsp( + BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + sl_btmesh_fw_update_server_update_start_response_type_reject_metadata_check_failed, + (uint8_t)firmware_update_server.additional_information); + } else { + sl_btmesh_fw_update_server_check_fw_metadata_rsp( + BTMESH_FIRMWARE_UPDATE_SERVER_MAIN, + sl_btmesh_fw_update_server_update_start_response_type_reject_metadata_check_failed, + (uint8_t)firmware_update_server.additional_information, + firmware_update_server.metadata_fw_index); + } + // Switch to Idle state + btmesh_firmware_udpate_server_change_state(METADATA_IDLE); + break; + case BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_PENDING: + // If pending, call step + firmware_update_server.metadata_check_status = + sl_btmesh_firmware_update_server_metadata_check_step( + &firmware_update_server.additional_information); + break; + } + } +} + +bool sl_btmesh_firmware_update_server_is_ok_to_sleep(void) +{ + return (0 == firmware_update_server.metadata_check_state.active) + && (0 == firmware_update_server.state.verification); +} + +static void btmesh_firmware_udpate_server_change_state(btmesh_firmware_udpate_state_t state) +{ + if (state < METADATA_IDLE) { + firmware_update_server.state.raw = 0; + } + switch (state) { + case IDLE: + // Idle's initial substate is Idle/Inactive + case IDLE_INACTIVE: + firmware_update_server.state.idle = 1; + firmware_update_server.state.inactive = 1; + firmware_update_server.self_update = false; + break; + case IDLE_FAILED_TRANSFER_FAILED: + firmware_update_server.state.idle = 1; + firmware_update_server.state.failed = 1; + firmware_update_server.state.transfer_failed = 1; + log_error("Firmware Transfer Failed" NL); + break; + case IDLE_FAILED_VERIFICATION_FAILED: + firmware_update_server.state.idle = 1; + firmware_update_server.state.failed = 1; + firmware_update_server.state.verification_failed = 1; + log_error("Firmware Verification Failed" NL); + break; + case ACTIVE_TRANSFER: + firmware_update_server.state.active = 1; + firmware_update_server.state.transfer = 1; + log_info("Firmware Transfer Start" NL); + break; + case IDLE_SUSPENDED: + firmware_update_server.state.idle = 1; + firmware_update_server.state.transfer = 1; + log_info("Firmware Transfer Suspended" NL); + break; + case ACTIVE_VERIFICATION: + firmware_update_server.state.active = 1; + firmware_update_server.state.verification = 1; + log_info("Firmware Verification Start (BLOB ID: %s)" NL, + BLOB_ID_TO_STRING(&firmware_update_server.blob_id)); + sl_btmesh_blob_storage_slot_metadata_cache_t const * cache; + uint32_t len; + // Get BLOB size from cached BLOB table + sl_btmesh_blob_storage_get_cache(&cache, &len); + for (uint32_t i = 0; i < len; ++i) { + if (0 == memcmp(&cache[i].blob_id, + &firmware_update_server.blob_id, + sizeof(sl_bt_uuid_64_t))) { + firmware_update_server.verification_size = cache[i].blob_size; + break; + } + } + firmware_update_server.verification_progress = 0; + // Start verification with user callback + firmware_update_server.verification_status = + sl_btmesh_fw_update_server_verify_start(&firmware_update_server.blob_id, + &firmware_update_server.verification_chunk_buffer, + &firmware_update_server.verification_chunk_size, + firmware_update_server.verification_size); +#if SL_BTMESH_FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD_CFG_VAL > 0 + sl_simple_timer_start(&firmware_update_server.verify_timer, + SL_BTMESH_FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD_CFG_VAL, + btmesh_firmware_update_server_verify_progress_ui_update, + NULL, + true); +#else // SL_BTMESH_FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD_CFG_VAL > 0 + btmesh_firmware_update_server_verify_progress_ui_update(NULL, NULL); +#endif // FW_UPDATE_SERVER_LOGGING_VERIFY_PROGRESS_PERIOD > 0 + break; + case VERIFICATION_SUCCESS: { + firmware_update_server.state.verification_success = 1; + // Store metadata and FW index + sl_status_t sc = + sl_btmesh_blob_storage_write_app_footer(&firmware_update_server.blob_id, + &firmware_update_server.metadata_fw_index, + BLOB_STORAGE_APP_ID_DFU_METADATA, + firmware_update_server.metadata_len + + 1); + app_assert_status_f(sc, "BLOB Storage footer writing failed!"); + log_info("Firmware Verification Successful" NL); + break; + } + case METADATA_ACTIVE: { + firmware_update_server.metadata_check_state.idle = 0; + firmware_update_server.metadata_check_state.active = 1; + // Notify user application about metadata check starting + firmware_update_server.metadata_check_status = + sl_btmesh_fw_update_server_metadata_check_start(firmware_update_server.metadata, + firmware_update_server.metadata_len, + &firmware_update_server.additional_information); + log_info("Metadata check start." NL); + log_debug("Metadata length: %d, Add. Info: %d" NL, + firmware_update_server.metadata_len, + firmware_update_server.additional_information); + break; + } + case METADATA_IDLE: + firmware_update_server.metadata_check_state.active = 0; + firmware_update_server.metadata_check_state.idle = 1; + break; + } +} + +static void btmesh_firmware_update_server_verify_progress_ui_update(sl_simple_timer_t *timer, + void *data) +{ + (void)timer; + (void)data; + if (BTMESH_FW_UPDATE_SERVER_VERIFY_ERROR != firmware_update_server.verification_status) { + uint8_t pct = SL_PROG_TO_PCT_INT(firmware_update_server.verification_size, + firmware_update_server.verification_progress); +#if SL_BTMESH_FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD_CFG_VAL == 0 + static uint8_t prev; + if (firmware_update_server.verification_progress == 0) { + prev = 0; + } + if (pct > prev) { +#endif // SL_BTMESH_FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD_CFG_VAL == 0 + log_info("Firmware verification progress %d%%" NL, + pct); +#if SL_BTMESH_FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD_CFG_VAL == 0 + prev = pct; + } +#endif // SL_BTMESH_FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD_CFG_VAL == 0 + (void)pct; // In case logging is disabled, avoid warning. + } + sl_btmesh_fw_update_server_verify_progress_ui_update(firmware_update_server.verification_status, + firmware_update_server.verification_progress, + firmware_update_server.verification_size); +} + +/** @} mesh_fw_update_server */ diff --git a/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server.h b/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server.h new file mode 100644 index 00000000000..aaa8acc83ef --- /dev/null +++ b/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server.h @@ -0,0 +1,89 @@ +/***************************************************************************//** + * @file + * @brief Interface of Firmware Update Server + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_FIRMWARE_UPDATE_SERVER_H +#define SL_BTMESH_FIRMWARE_UPDATE_SERVER_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * @addtogroup mesh_fw_update_server BT Mesh Firmware Update Server + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Initializes the Firmware Update Server application layer component + ******************************************************************************/ +void sl_btmesh_firmware_update_server_init(void); + +/***************************************************************************//** + * Processes BT Mesh stack events for Firmware Update Server application + * + * @param[in] evt BT Mesh event + ******************************************************************************/ +void sl_btmesh_firmware_update_server_on_event(sl_btmesh_msg_t *evt); + +/***************************************************************************//** + * Executes a step of firmware verification + * + * @note Uses user API callouts. + ******************************************************************************/ +void sl_btmesh_firmware_update_server_verify_step_handle(void); + +/***************************************************************************//** + * Executes a step of metadata check + * + * @note Uses user API callouts. + ******************************************************************************/ +void sl_btmesh_firmware_update_server_metadata_check_step_handle(void); + +/***************************************************************************//** + * @} end mesh_fw_update_server + ******************************************************************************/ + +#ifdef __cplusplus +} +#endif // __cplusplus + +/***************************************************************************//** + * Check if BT Mesh Firmware Update Server allows the system to sleep + * + * @return If it is ok to sleep + * @retval true The system is allowed to sleep + * @retval false The system shall be kept awake + * + * The verification and metadata check runs in the main loop step by step and + * therefore the power manager shall not put the system into sleep mode while + * these operations are not completed. + ******************************************************************************/ +extern bool sl_btmesh_firmware_update_server_is_ok_to_sleep(void); + +#endif // SL_BTMESH_FIRMWARE_UPDATE_SERVER_H diff --git a/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server_api.c b/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server_api.c new file mode 100644 index 00000000000..29a27582936 --- /dev/null +++ b/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server_api.c @@ -0,0 +1,337 @@ +/***************************************************************************//** + * @file + * @brief Weak implementations of user API functions + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ +#include +#include "sl_btmesh.h" +#include "sl_malloc.h" +#include "app_assert.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#include "sl_btmesh_wstk_lcd.h" +#include +// No verification progress is written to the LCD +#define FW_VERIFY_PRG_KB_ON_LCD_UNKNOWN 0xFFFFFFFF +// Last verification progress written to the LCD +static uint32_t fw_verify_prg_kb_on_lcd = FW_VERIFY_PRG_KB_ON_LCD_UNKNOWN; +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +#include "sl_simple_timer.h" + +#include "btl_interface.h" +#include "sl_btmesh_blob_storage.h" + +#include "sl_btmesh_firmware_update_server_api.h" +#include "sl_btmesh_firmware_update_server_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/// Delay between NVM erase and node reset initiated by apply, +/// and installation of firmware +#define APPLY_DELAY 5 + +/// Verification chunk size of the bootloader implementation +#define BOOTLOADER_VERIFICATION_CHUNK_SIZE 128 + +/// Returns the string representation of BLOB ID in a compound literal. +/// WARNING! This macro shall be used as a parameter of log calls only due to the +/// lifetime of underlying compound literal in APP_BTMESH_UUID_64_TO_STRING. +#define BLOB_ID_TO_STRING(blob_id) APP_BTMESH_UUID_64_TO_STRING(blob_id, ' ', true) + +/// Context pointer for verification +static void *context; + +/// Countdown for apply delay +static uint8_t apply_cntdwn; + +/// Cache for the ID of the BLOB used for the update +/// +/// Initialized to all ones indicating unknown. +static sl_bt_uuid_64_t blob_id_cache = { .data = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF } }; + +/***************************************************************************//** + * Used to delay bootloader initiation, as NVM erase needs time. + * + * @param handle Timer handler + * @param data Callback data + ******************************************************************************/ +static void apply_step(sl_simple_timer_t *handle, void *data); + +SL_WEAK sl_btmesh_fw_update_server_verify_state_t +sl_btmesh_fw_update_server_verify_start(sl_bt_uuid_64_t const *const blob_id, + uint8_t ** const verify_chunk_buffer, + uint32_t *const verify_chunk_size, + const uint32_t blob_size) +{ + (void)blob_size; + uint32_t slot_id; + sl_btmesh_blob_storage_slot_metadata_cache_t const *cache; + uint32_t len; + + // No verification buffer is used + *verify_chunk_buffer = NULL; + // Progress calculation is based on chunk size + *verify_chunk_size = BOOTLOADER_VERIFICATION_CHUNK_SIZE; + sl_btmesh_blob_storage_get_cache(&cache, &len); + + for (slot_id = 0; slot_id < len; ++slot_id) { + if (0 == memcmp(blob_id, &cache->blob_id, sizeof(sl_bt_uuid_64_t))) { + break; + } + } +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + sl_btmesh_LCD_write("FW Update Verify", SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_STATUS_CFG_VAL); + fw_verify_prg_kb_on_lcd = FW_VERIFY_PRG_KB_ON_LCD_UNKNOWN; +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + + if (slot_id == len) { + return BTMESH_FW_UPDATE_SERVER_VERIFY_ERROR; + } + + context = sl_malloc(BOOTLOADER_STORAGE_VERIFICATION_CONTEXT_SIZE); + + app_assert(context != NULL, "No verification buffer could be allocated!"); + + if (BOOTLOADER_OK + != bootloader_initVerifyImage(slot_id, + context, + BOOTLOADER_STORAGE_VERIFICATION_CONTEXT_SIZE)) { + sl_free(context); + return BTMESH_FW_UPDATE_SERVER_VERIFY_ERROR; + } + return BTMESH_FW_UPDATE_SERVER_VERIFY_PENDING; +} + +SL_WEAK sl_btmesh_fw_update_server_verify_state_t +sl_btmesh_fw_update_server_verify_step(void const *data, + const uint32_t len) +{ + (void)data; + (void)len; + int32_t sc = bootloader_continueVerifyImage(context, NULL); + switch (sc) { + case BOOTLOADER_ERROR_PARSE_SUCCESS: + sl_free(context); + return BTMESH_FW_UPDATE_SERVER_VERIFY_SUCCESS; + case BOOTLOADER_ERROR_PARSE_CONTINUE: { + return BTMESH_FW_UPDATE_SERVER_VERIFY_PENDING; + } + default: + sl_free(context); + + bool blob_managed = sl_btmesh_blob_storage_is_managed(&blob_id_cache); + if (blob_managed == false) { + // Verification failed, unmanaged BLOB is not useful any more + sl_btmesh_blob_storage_invalidate(&blob_id_cache); + } else { + // If the node is a Distributor and an Updating Node as well then the + // BLOB shall not be invalidated because it is part of the firmware list + // of the Distributor and therefore it can be invalidated by the Initiator + // only (explicitly) + } + log_error("Verification failed (0x%lX)!" NL, sc); + return BTMESH_FW_UPDATE_SERVER_VERIFY_ERROR; + } +} + +SL_WEAK void sl_btmesh_fw_update_server_verify_progress_ui_update(sl_btmesh_fw_update_server_verify_state_t status, + uint32_t progress, + uint32_t size) +{ +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + switch (status) { + case BTMESH_FW_UPDATE_SERVER_VERIFY_PENDING: + { + char str[LCD_ROW_LEN] = { 0 }; + uint32_t fw_verify_prg_kb = (progress + 512) >> 10; + uint32_t fw_verify_size_kb = (size + 512) >> 10; + if ((FW_VERIFY_PRG_KB_ON_LCD_UNKNOWN == fw_verify_prg_kb_on_lcd) + || (fw_verify_size_kb == fw_verify_prg_kb) + || (fw_verify_prg_kb_on_lcd < fw_verify_prg_kb)) { + snprintf(str, + LCD_ROW_LEN, + "%u kB / %u kB", + (uint16_t)fw_verify_prg_kb, + (uint16_t)fw_verify_size_kb); + sl_btmesh_LCD_write(str, SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_MESSAGES_CFG_VAL); + fw_verify_prg_kb_on_lcd = fw_verify_prg_kb; + } + break; + } + + case BTMESH_FW_UPDATE_SERVER_VERIFY_SUCCESS: + sl_btmesh_LCD_write("Done", SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_MESSAGES_CFG_VAL); + break; + + default: + sl_btmesh_LCD_write("Error", SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_MESSAGES_CFG_VAL); + break; + } +#else + (void) status; + (void) progress; + (void) size; +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +} + +SL_WEAK sl_btmesh_fw_update_server_metadata_check_state_t +sl_btmesh_fw_update_server_metadata_check_start(void const *metadata, + const uint8_t len, + sl_btmesh_fw_update_server_additional_information_t *const additional_information) +{ + (void)metadata; + (void)len; + *additional_information = BTMESH_FW_UPDATE_SERVER_ADDITIONAL_INFORMATION_UNPROVISION; + return BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_PENDING; +} + +SL_WEAK sl_btmesh_fw_update_server_metadata_check_state_t +sl_btmesh_firmware_update_server_metadata_check_step(sl_btmesh_fw_update_server_additional_information_t *const additional_information) +{ + *additional_information = BTMESH_FW_UPDATE_SERVER_ADDITIONAL_INFORMATION_UNPROVISION; + return BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_SUCCESS; +} + +SL_WEAK void sl_btmesh_fw_update_server_update_start(sl_bt_uuid_64_t const *const blob_id) +{ +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + sl_btmesh_LCD_write("Firmware Update", SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_STATUS_CFG_VAL); + sl_btmesh_LCD_write("Started", SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_MESSAGES_CFG_VAL); +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + memcpy(&blob_id_cache, blob_id, sizeof(blob_id_cache)); + return; +} + +SL_WEAK void sl_btmesh_fw_update_server_update_canceled(void) +{ +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + sl_btmesh_LCD_write("Canceled", SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_MESSAGES_CFG_VAL); +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + return; +} + +SL_WEAK void sl_btmesh_fw_update_server_update_aborted(void) +{ +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + sl_btmesh_LCD_write("Aborted", SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_MESSAGES_CFG_VAL); +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + return; +} + +SL_WEAK void sl_btmesh_fw_update_server_apply(void) +{ + sl_btmesh_blob_storage_slot_metadata_cache_t const *cache; + uint32_t len; + uint32_t idx; + static sl_simple_timer_t timer; + + sl_btmesh_blob_storage_get_cache(&cache, &len); + + // Find index corresponding to input BLOB ID + for (idx = 0; + (idx < len) && (0 != memcmp(&blob_id_cache, + &cache[idx].blob_id, + sizeof(sl_bt_uuid_64_t))); + ++idx) { + ; + } + + if (idx != len) { + // Invalidate slot, as it's not useful anymore + sl_status_t sc = sl_btmesh_blob_storage_invalidate(&cache[idx].blob_id); + log_status_error_f(sc, + "Could not invalidate BLOB %s" NL, + BLOB_ID_TO_STRING(&cache[idx].blob_id)); + } + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + sl_btmesh_LCD_write("FW Update Applying", SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_STATUS_CFG_VAL); +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + if (BOOTLOADER_OK == bootloader_setImageToBootload(idx)) { + // Reset node + sl_btmesh_node_reset(); + // Erase NVM data + sl_bt_nvm_erase_all(); + // Delay install + sl_simple_timer_start(&timer, 1000, apply_step, NULL, true); + apply_cntdwn = APPLY_DELAY; + } +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + else { + sl_btmesh_LCD_write("Failed", SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_MESSAGES_CFG_VAL); + } +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +} + +static void apply_step(sl_simple_timer_t *handle, void *data) +{ + (void)handle; + (void)data; + if (--apply_cntdwn > 0) { + log_info("%d..." NL, apply_cntdwn); + return; + } + log_info("0" NL); +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + sl_btmesh_LCD_write("Restarting...", SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_MESSAGES_CFG_VAL); +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + // Initiate reboot with new firmware + bootloader_rebootAndInstall(); +} + +/******************************************************************************* + * Used to retrieve information about firmware stored on the device for DFU + ******************************************************************************/ +SL_WEAK sl_status_t mesh_platform_get_installed_firmware_information(uint8_t index, + uint8_t *fwid_len, + const uint8_t **fwid_ptr, + uint8_t *uri_len, + const uint8_t **uri_ptr) +{ + if (index > 0) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + *fwid_ptr = (const uint8_t*) SL_BTMESH_FW_UPDATE_SERVER_CID_LSB_CFG_VAL + SL_BTMESH_FW_UPDATE_SERVER_CID_MSB_CFG_VAL + SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL; + *fwid_len = strlen((char*)*fwid_ptr); + *uri_ptr = (const uint8_t*) SL_BTMESH_FW_UPDATE_SERVER_UPDATE_URI_CFG_VAL; + *uri_len = strlen((char*)*uri_ptr); + return SL_STATUS_OK; +} diff --git a/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server_api.h b/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server_api.h new file mode 100644 index 00000000000..44d6139dfc3 --- /dev/null +++ b/app/btmesh/common/btmesh_firmware_update_server/sl_btmesh_firmware_update_server_api.h @@ -0,0 +1,234 @@ +/***************************************************************************//** + * @file + * @brief Definitions of user API features + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_FIRMWARE_UPDATE_SERVER_API_H +#define SL_BTMESH_FIRMWARE_UPDATE_SERVER_API_H + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * @addtogroup mesh_fw_update_server + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup mesh_fw_update_server_api + * + * BT Mesh Firmware Update Server user-overridable API + * @{ + ******************************************************************************/ + +/// Verification step results +typedef enum sl_btmesh_fw_update_server_verify_state_e { + /// Verification pending + BTMESH_FW_UPDATE_SERVER_VERIFY_PENDING, + /// Verification error + BTMESH_FW_UPDATE_SERVER_VERIFY_ERROR, + /// Verification successful + BTMESH_FW_UPDATE_SERVER_VERIFY_SUCCESS +} sl_btmesh_fw_update_server_verify_state_t; + +/// Metadata check step result +typedef enum sl_btmesh_fw_update_server_metadata_check_state_e { + /// Metadata check pedning + BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_PENDING, + /// Metadata check error + BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_ERROR, + /// Metadata check successful + BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_SUCCESS +} sl_btmesh_fw_update_server_metadata_check_state_t; + +/// Definitions taken from BT Mesh Specification v1.1 +typedef enum sl_btmesh_fw_update_server_additional_information_e { + /// No changes to node composition data. + BTMESH_FW_UPDATE_SERVER_ADDITIONAL_INFORMATION_NO_CHANGE = 0x0, + /// Node composition data changed. The node does not support remote + /// provisioning. + BTMESH_FW_UPDATE_SERVER_ADDITIONAL_INFORMATION_COMP_DATA_CHANGE_NO_REMOTE_PROV = 0x1, + /// Node composition data changed, and remote provisioning is supported. The + /// node supports remote provisioning and composition data page 0x80. Page + /// 0x80 contains different composition data than page 0x0. + BTMESH_FW_UPDATE_SERVER_ADDITIONAL_INFORMATION_COMP_DATA_CHANGE_REMOTE_PROV = 0x2, + /// Node unprovisioned. The node is unprovisioned after successful application + /// of a verified firmware image. + BTMESH_FW_UPDATE_SERVER_ADDITIONAL_INFORMATION_UNPROVISION = 0x3, + /// Start of reserved values + BTMESH_FW_UPDATE_SERVER_ADDITIONAL_INFORMATION_RESERVED_START = 0x4 +} sl_btmesh_fw_update_server_additional_information_t; + +/***************************************************************************//** + * User callback for determining the maximum chunk size of verification + * + * Used to determine how big chunks can be for + * @ref sl_btmesh_fw_update_server_verify_step + * + * @param[in] blob_id Identifier of the BLOB to be verified + * @param[out] verify_chunk_buffer Verification buffer. User needs to pass the + * verification buffer to the framework. User + * also needs to free memory if it was allocated + * on heap, which could be done in + * @ref sl_btmesh_fw_update_server_apply. + * If it's set to NULL, than no data is read + * from storage automatically during + * verification. + * @param[out] verify_chunk_size Size of verification chunk. Progress + * calculation is based on this value. + * @param[in] blob_size Size of the BLOB to be verified + * + * @return Current state of verification + * @retval BTMESH_FW_UPDATE_SERVER_VERIFY_PENDING If further processing required + * @retval BTMESH_FW_UPDATE_SERVER_VERIFY_ERROR In case of an error + * @retval BTMESH_FW_UPDATE_SERVER_VERIFY_SUCCESS In case verification is done and + * successful + ******************************************************************************/ +sl_btmesh_fw_update_server_verify_state_t +sl_btmesh_fw_update_server_verify_start(sl_bt_uuid_64_t const *const blob_id, + uint8_t **const verify_chunk_buffer, + uint32_t *const verify_chunk_size, + const uint32_t blob_size); + +/***************************************************************************//** + * User callback to execute one step of the verification + * + * Receives a chunk of data equal to or less in size defined with + * @ref sl_btmesh_fw_update_server_verify_start + * + * @param[in] data Buffered data + * @param[in] len Length of the buffer + * + * @return Current state of verification + * @retval BTMESH_FW_UPDATE_SERVER_VERIFY_PENDING If further processing required + * @retval BTMESH_FW_UPDATE_SERVER_VERIFY_ERROR In case of an error + * @retval BTMESH_FW_UPDATE_SERVER_VERIFY_SUCCESS In case verification is done and + * successful + ******************************************************************************/ +sl_btmesh_fw_update_server_verify_state_t +sl_btmesh_fw_update_server_verify_step(void const *data, const uint32_t len); + +/***************************************************************************//** + * User callback to update the user interface with verification progress + * + * @param[in] status Verification status + * @param[in] progress Number of verified bytes + * @param[in] size Total number of bytes which shall be verified + * + * If @p FW_UPDATE_SERVER_VERIFY_PROGRESS_UI_UPDATE_PERIOD is not zero then it + * specifies the period of this function call in order to limit the user + * interface update rate. If the macro is zero then this function is called + * whenever verification is active and progress is made. + ******************************************************************************/ +extern void +sl_btmesh_fw_update_server_verify_progress_ui_update(sl_btmesh_fw_update_server_verify_state_t status, + uint32_t progress, + uint32_t size); + +/***************************************************************************//** + * User callback indicating start of metadata check + * + * @param[in] metadata Buffered metadata + * @param[in] len Metadata length + * @param[out] additional_information Used in BT Mesh response to metadata check + * + * @return Current state of metadata check + * @retval BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_PENDING If further processing required + * @retval BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_ERROR In case of an error + * @retval BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_SUCCESS In case metadata check is done + * and successful + ******************************************************************************/ +sl_btmesh_fw_update_server_metadata_check_state_t +sl_btmesh_fw_update_server_metadata_check_start(void const *metadata, + const uint8_t len, + sl_btmesh_fw_update_server_additional_information_t *const additional_information); + +/***************************************************************************//** + * User callback executing one step of metadata check + * + * @param[out] additional_information Used in BT Mesh response to metadata check + * + * @return Current state of metadata check + * @retval BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_PENDING If further processing required + * @retval BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_ERROR In case of an error + * @retval BTMESH_FW_UPDATE_SERVER_METADATA_CHECK_SUCCESS In case metadata check is done + * and successful + ******************************************************************************/ +sl_btmesh_fw_update_server_metadata_check_state_t +sl_btmesh_firmware_update_server_metadata_check_step(sl_btmesh_fw_update_server_additional_information_t *additional_information); + +/***************************************************************************//** + * User callback indicating update start + * + * Called after metadata check is done. + * + * Can be redefined to accommodate user application functionality. + * + * @param[in] blob_id Identifier of the BLOB containing firmware + ******************************************************************************/ +void sl_btmesh_fw_update_server_update_start(sl_bt_uuid_64_t const *const blob_id); + +/***************************************************************************//** + * User callback indicating update cancellation + * + * Can be redefined to accommodate user application functionality. + ******************************************************************************/ +void sl_btmesh_fw_update_server_update_canceled(void); + +/***************************************************************************//** + * User callback indicating update abort + * + * Can be redefined to accommodate user application functionality. + ******************************************************************************/ +void sl_btmesh_fw_update_server_update_aborted(void); + +/***************************************************************************//** + * User callback indicating firmware apply request + * + * Can be redefined to accommodate user application functionality. + ******************************************************************************/ +void sl_btmesh_fw_update_server_apply(void); + +/***************************************************************************//** + * Used to retrieve information about firmware stored on the device for DFU + ******************************************************************************/ +sl_status_t mesh_platform_get_installed_firmware_information(uint8_t index, + uint8_t *fwid_len, + const uint8_t **fwid_ptr, + uint8_t *uri_len, + const uint8_t **uri_ptr); + +/** @} end mesh_fw_update_server_api */ + +/** @} end mesh_fw_update_server */ + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif // SL_BTMESH_FIRMWARE_UPDATE_SERVER_API_H diff --git a/app/btmesh/common/btmesh_friend/config/sl_btmesh_friend_config.h b/app/btmesh/common/btmesh_friend/config/sl_btmesh_friend_config.h new file mode 100644 index 00000000000..6eaf0dd01bd --- /dev/null +++ b/app/btmesh/common/btmesh_friend/config/sl_btmesh_friend_config.h @@ -0,0 +1,48 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_FRIEND_CONFIG_H +#define SL_BTMESH_FRIEND_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Friend configuration + +// Enable Logging +// Default: 1 +// Enable or disable Logging for Friend specific messages for this component. +#define SL_BTMESH_FRIEND_LOGGING_CFG_VAL (1) + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_FRIEND_CONFIG_H diff --git a/app/btmesh/common/btmesh_friend/sl_btmesh_friend.c b/app/btmesh/common/btmesh_friend/sl_btmesh_friend.c new file mode 100644 index 00000000000..f529da56679 --- /dev/null +++ b/app/btmesh/common/btmesh_friend/sl_btmesh_friend.c @@ -0,0 +1,123 @@ +/***************************************************************************//** + * @file + * @brief Friend implementation + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include + +#include "em_common.h" +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_friend.h" +#include "sl_btmesh_friend_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup friend + * @{ + ******************************************************************************/ + +/******************************************************************************* + * Initialize LPN functionality with configuration and friendship establishment. + ******************************************************************************/ +void sl_btmesh_friend_feature_init(void) +{ + sl_status_t result = 0; + + //Initialize Friend functionality + log_info("Friend mode initialization" NL); + result = sl_btmesh_friend_init(); + log_status_error_f(result, "Friend initialization failed" NL); +} + +/******************************************************************************* + * Handling of mesh friend events. + * + * @param[in] evt Pointer to incoming friend event. + ******************************************************************************/ +void sl_btmesh_friend_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_friend_feature_init(); + } + break; + + case sl_btmesh_evt_friend_friendship_established_id: + sl_btmesh_friend_on_friendship_established( + evt->data.evt_friend_friendship_established.netkey_index, + evt->data.evt_friend_friendship_established.lpn_address); + break; + + case sl_btmesh_evt_friend_friendship_terminated_id: + sl_btmesh_friend_on_friendship_terminated( + evt->data.evt_friend_friendship_terminated.netkey_index, + evt->data.evt_friend_friendship_terminated.lpn_address, + evt->data.evt_friend_friendship_terminated.reason); + break; + + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_friend_feature_init(); + break; + + default: + break; + } +} + +// Weak implementation of Callbacks +SL_WEAK void sl_btmesh_friend_on_friendship_established(uint16_t netkey_index, + uint16_t lpn_address) +{ + (void) netkey_index; + (void) lpn_address; +} + +SL_WEAK void sl_btmesh_friend_on_friendship_terminated(uint16_t netkey_index, + uint16_t lpn_address, + uint16_t reason) +{ + (void) netkey_index; + (void) lpn_address; + (void) reason; +} + +/** @} (end addtogroup friend) */ diff --git a/app/btmesh/common/btmesh_friend/sl_btmesh_friend.h b/app/btmesh/common/btmesh_friend/sl_btmesh_friend.h new file mode 100644 index 00000000000..4951958dc27 --- /dev/null +++ b/app/btmesh/common/btmesh_friend/sl_btmesh_friend.h @@ -0,0 +1,90 @@ +/***************************************************************************//** + * @file + * @brief Friend feature header + ******************************************************************************* + * # 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_BTMESH_FRIEND_H +#define SL_BTMESH_FRIEND_H + +#include "sl_btmesh_api.h" + +/***************************************************************************//** + * @defgroup friend Friend Component + * @brief Friend feature Implementation + * This component implements Friend feature. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup friend + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Initialize FRIEND functionality. This function is called automatically by the + * FRIEND component. + * + ******************************************************************************/ +void sl_btmesh_friend_feature_init(void); + +/***************************************************************************//** + * Handling of mesh friend events. + * + * @param[in] evt Pointer to incoming friend event. + ******************************************************************************/ +void sl_btmesh_friend_on_event(sl_btmesh_msg_t *evt); + +/***************************************************************************//** + * Called when the Friend Node establishes friendship with another node. + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_established(uint16_t netkey_index, + uint16_t lpn_address); + +/***************************************************************************//** + * Called when the friendship that was successfully established with a Low Power + * Node has been terminated. + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + * @param[in] reason Reason for friendship termination + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_terminated(uint16_t netkey_index, + uint16_t lpn_address, + uint16_t reason); + +/** @} (end addtogroup friend) */ + +#endif /* SL_BTMESH_FRIEND_H */ diff --git a/app/btmesh/common/btmesh_fw_distribution_server/btmesh_fw_distribution_server.dcd b/app/btmesh/common/btmesh_fw_distribution_server/btmesh_fw_distribution_server.dcd new file mode 100644 index 00000000000..b69d67d9403 --- /dev/null +++ b/app/btmesh/common/btmesh_fw_distribution_server/btmesh_fw_distribution_server.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1404", "name":"Device Firmware Update Distributor Server"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_fw_distribution_server/config/sl_btmesh_fw_distribution_server_config.h b/app/btmesh/common/btmesh_fw_distribution_server/config/sl_btmesh_fw_distribution_server_config.h new file mode 100644 index 00000000000..85b23963630 --- /dev/null +++ b/app/btmesh/common/btmesh_fw_distribution_server/config/sl_btmesh_fw_distribution_server_config.h @@ -0,0 +1,91 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Firmware Distribution Server Configuration + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_FW_DISTRIBUTION_SERVER_CONFIG_H +#define SL_BTMESH_FW_DISTRIBUTION_SERVER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// BT Mesh Firmware Distribution Server Configuration + +// Enable Logging +// Default: 1 +// Enable / disable logging of Firmware Distribution Server model specific messages +#define SL_BTMESH_FW_DIST_SERVER_LOGGING_CFG_VAL (1) + +// Enable BT Mesh Stack Platform Callback Logging +// Default: 0 +// Enable / disable logging of BT Mesh Stack Firmware Distribution Server model platform callbacks. +// The FW Distribution Server model in BT Mesh stack calls platform callback functions to query the remaining space, firmware count and firmware information. +#define SL_BTMESH_FW_DIST_SERVER_PLATFORM_CALLBACK_LOGGING_CFG_VAL (0) + +// Fwid and metadata log format +// Hex format +// Text format +// Fwid and metada logging format, hex or text format is available +#define SL_BTMESH_FW_DIST_SERVER_FWID_METADATA_LOG_FORMAT_HEX false + +// Text prepended to every log message +// Default: "FwDistributor" +// Every log message in the component is started with this text. +#define SL_BTMESH_FW_DIST_SERVER_LOG_PREFIX_CFG_VAL "FwDistributor" + +// + +// Max node list size +// <1-65535:1> +// Default: 8 +// Maximum number of firmware update server nodes which can participate in the distribution +#define SL_BTMESH_FW_DIST_SERVER_MAX_NODE_LIST_SIZE_CFG_VAL (8) + +// Default Multicast Threshold +// <1-65535:1> +// Default: 1 +// If the number of servers for any step exceeds or is equal to this number then the group address will be used, +// otherwise servers will be looped through one by one. Value of 0 disables the feature. +#define SL_BTMESH_FW_DIST_SERVER_MULTICAST_THRESHOLD_DEFAULT_CFG_VAL (1) + +// Retry time of message transmissions +// <0-65535:1> +// Default: 3000 +// Retry time of firmware update message transmissions +#define SL_BTMESH_FW_DIST_SERVER_RETRY_TIME_MS_CFG_VAL (3000) + +// NVM key of the firmware list +// <0x0000-0xFFFF> +// Default: 0x4009 +// NVM key of the firmware list +#define SL_BTMESH_FW_DIST_SERVER_FW_LIST_NVM_KEY_CFG_VAL (0x4009) + +// + +// <<< end of configuration section >>> + + #endif // SL_BTMESH_FW_DISTRIBUTION_SERVER_CONFIG_H diff --git a/app/btmesh/common/btmesh_fw_distribution_server/sl_btmesh_fw_distribution_server.c b/app/btmesh/common/btmesh_fw_distribution_server/sl_btmesh_fw_distribution_server.c new file mode 100644 index 00000000000..39372558968 --- /dev/null +++ b/app/btmesh/common/btmesh_fw_distribution_server/sl_btmesh_fw_distribution_server.c @@ -0,0 +1,3543 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Firmware Distribution Server + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- + +#include + +#include "sl_status.h" +#include "em_common.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "app_assert.h" +#include "sl_simple_timer.h" +#include "sl_malloc.h" + +#include "sl_btmesh_blob_storage_app_id.h" +#include "sl_btmesh_blob_storage.h" + +#include "sl_btmesh_blob_transfer_client.h" + +#include "sl_btmesh_capi_types.h" +#include "sl_btmesh_dfu_platform_capi.h" +#include "sl_btmesh_model_specification_v1_1_defs.h" + +#include "sl_btmesh_fw_distribution_server.h" +#include "sl_btmesh_fw_distribution_server_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup dist_server BT Mesh Firmware Distribution Server + * @{ + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Macros +// ----------------------------------------------------------------------------- + +// Shortcut for the log prefix with space character separator +#define LOG_PREFIX SL_BTMESH_FW_DIST_SERVER_LOG_PREFIX_CFG_VAL " " + +#if (SL_BTMESH_FW_DIST_SERVER_PLATFORM_CALLBACK_LOGGING_CFG_VAL != 0) +#define log_btmesh_platform_cb(...) log_debug(__VA_ARGS__) +#else +#define log_btmesh_platform_cb(...) +#endif // (SL_BTMESH_FW_DIST_SERVER_PLATFORM_CALLBACK_LOGGING_CFG_VAL != 0) + +#if defined(SL_CATALOG_APP_LOG_PRESENT) && (APP_BTMESH_UTIL_COMPONENT_LOGGING != 0) +#define log_fwid_level(level, fwid, fwid_len, hex_format) \ + _log_fwid_level(level, fwid, fwid_len, hex_format) +#define log_metadata_level(level, metadata, metadata_len, hex_format) \ + _log_metadata_level(level, metadata, metadata_len, hex_format) +#define log_bytes_as_text(level, bytes, len, null_replacement_char) \ + _log_bytes_as_text(level, bytes, len, null_replacement_char) +#define log_check_level(level) \ + _app_log_check_level(level) +#else +#define log_fwid_level(level, fwid, fwid_len, hex_format) +#define log_metadata_level(level, metadata, metadata_len, hex_format) +#define log_bytes_as_text(level, bytes, len, null_replacement_char) +#define log_check_level(level) false +#endif // defined(SL_CATALOG_APP_LOG_PRESENT) && (APP_BTMESH_UTIL_COMPONENT_LOGGING != 0) + +// Temporary buffer to store byte array chunk +#define LOG_BYTES_AS_TEXT_CHUNK_SIZE 32 + +// Suppress compiler warning of unused static function +#define SL_UNUSED __attribute__((unused)) + +// Utility macro to calculate the length of an array (number of array elements) +#define ARRAY_LEN(a) (sizeof(a) / sizeof(a[0])) + +// Maximum length of the firmware metadata based on the Mesh Model specification +// +// See Firmware Distribution Upload Start message in the specification for more +// details +#define DFU_METADATA_MAX_LEN MESH_DFU_METADATA_MAX_LEN + +// Maximum length of firmware identifier based on the Mesh Model specification +// +// See Firmware ID format in the Firmware update states chapter of the +// specification. +// 2 bytes company ID + 0..106 bytes Version Information => Total of 108 bytes +#define DFU_FWID_MAX_LEN MESH_DFU_FWID_MAX_LEN + +// Minimum length of firmware identifier based on the Mesh Model specification +#define DFU_FWID_MIN_LEN MESH_DFU_FWID_MIN_LEN + +// The node address zero is invalid according to the BT Mesh specification so +// it can be used to initialize address variables +#define UNASSIGNED_ADDRESS 0x0000 + +// Size of the firmware list depends on the current number of stored firmwares +#define FW_LIST_NVM_SIZE(fw_list_len) (sizeof(fw_dist_server_fw_list_nvm_t) \ + + (fw_list_len) * sizeof(sl_bt_uuid_64_t)) + +// Size of the firmware descriptor depends on the FW identifier length +#define FW_DESCRIPTOR_SIZE(fwid_length) (sizeof(fw_dist_server_fw_descriptor_t) \ + + fwid_length) + +// Checks if given server is operational, and returns retval if not +#define SERVER_STATUS_CHECK(_srv, retval ...) \ + if (((_srv) == NULL) || (_srv)->init_failed) \ + return retval + +// Checks if given server is operational, and provides retval if not +#define SERVER_STATUS_GET(_srv, retval) \ + ((((_srv) == NULL) || ((_srv)->init_failed)) ? (retval) : SL_STATUS_OK) + +// Returns the string representation of BLOB ID in a compound literal. +// WARNING! This macro shall be used as a parameter of log calls only due to the +// lifetime of underlying compound literal in APP_BTMESH_UUID_64_TO_STRING. +#define BLOB_ID_TO_STRING(blob_id) APP_BTMESH_UUID_64_TO_STRING(blob_id, ' ', true) + +// ----------------------------------------------------------------------------- +// Type definitions +// ----------------------------------------------------------------------------- + +typedef enum { + FW_BLOB_SELECTOR_STORAGE, + FW_BLOB_SELECTOR_CURRENT +} fw_blob_selector_t; + +typedef enum { + UPLOAD_STATE_INACTIVE, + UPLOAD_STATE_TRANSFER_FAILED, + UPLOAD_STATE_TRANSFER_CANCELED, + UPLOAD_STATE_TRANSFER_SUCCESS, + UPLOAD_STATE_TRANSFER_ACTIVE, + UPLOAD_STATE_COUNT +} upload_state_t; + +typedef struct { + bool idle : 1; + bool execute_step : 1; + bool retry : 1; +} dist_state_flags_t; + +typedef struct { + bool idle : 1; +} upload_state_flags_t; + +typedef struct { + uint32_t size; + sl_bt_uuid_64_t blob_id; + uint8_t *metadata; + uint8_t metadata_length; + uint8_t fwid_length; + uint8_t fwid[]; +} fw_dist_server_fw_descriptor_t; + +/// Upload process data representation +typedef struct { + /// Status of the upload + upload_state_t state; + /// Firmware descriptor + fw_dist_server_fw_descriptor_t *fw_descriptor; + /// Metadata pointer (heap array) + uint8_t *temp_metadata; + /// Metadata length + uint8_t temp_metadata_length; + /// Metadata error flag + bool metadata_error : 1; + /// Managed flag error flag + bool managed_blob_error : 1; +} fw_dist_server_upload_t; + +/// Distribution process data representation +typedef struct { + /// Timer handler + struct sl_simple_timer timer; + /// Size of the FW being transferred + uint32_t fw_size; + /// Number of nodes currently distributing to + uint16_t node_count; + /// The number of active nodes. + /// Nodes the distributor currently distributes to, that haven't failed. + uint16_t num_active_nodes; + /// Index of the FW being transported + uint16_t fw_list_index; + /// Counter used for retriable operations + uint16_t retry_counter; + /// Current state of distribution + sl_btmesh_fw_dist_server_dist_step_t state; + /// BLOB ID of the distributed BLOB + /// + /// This ID is the ID which the distributor received the BLOB by. + /// @note Not the BLOB ID that's used during distribution. + sl_bt_uuid_64_t storage_blob_id; + /// Transfer mode for distribution specified by Initiator node + sl_btmesh_mbt_client_transfer_mode_t transfer_mode; + /// Flag indicating whether retry timer elapsed + bool retry_time_elapsed : 1; + /// Flag indicating whether BLOB transfer was started in current distribution + bool blob_transfer_started : 1; +} fw_dist_server_dist_t; + +/// Distribution Server capabilities data representation +typedef struct { + /// The size of the biggest image that could be stored on the device + uint32_t max_fw_image_size; + /// Sum of the available space in slots + uint32_t max_upload_space; + /// Maximum length of the FW list. + /// + /// The maximum number of possible FWs to store is the number of slots. + /// @see sl_btmesh_blob_storage_get_max_blob_count + uint16_t max_fw_list_length; +} fw_dist_server_capabilities_t; + +/// Firmware list representation +typedef PACKSTRUCT (struct { + /// Length of the list + uint16_t current_fw_list_length; + /// BLOB IDs of FW images + sl_bt_uuid_64_t blob_ids[]; +}) fw_dist_server_fw_list_nvm_t; + +/// Distributor Server data representation +typedef struct { + /// Element belonging to the represented Server model + uint16_t elem_index; + /// RAM mirror of Firmware List data which is stored in NVM + fw_dist_server_fw_list_nvm_t *fw_list_nvm; + /// Firmware List data + fw_dist_server_fw_descriptor_t **fw_list; + /// Capabilities of the Server + fw_dist_server_capabilities_t *capabilities; + /// Upload related status variables + fw_dist_server_upload_t upload; + /// Distribution related status variables + fw_dist_server_dist_t dist; + /// The address of the client requesting delete stored for async. response + uint16_t async_req_client_address; + /// FW ID length of current single image deletion + uint8_t deleting_fwid_len; + /// FW ID of current single image deletion + uint8_t * deleting_fwid; + /// Flag indicating initialization failure + bool init_failed : 1; + /// Flag indicating storage corruption + bool storage_corrupted : 1; + /// Ongoing single image delete + bool deleting : 1; + /// Ongoing delete of all images + bool deleting_all : 1; +} fw_dist_server_t; + +/// Linked list of distribution servers +typedef struct fw_dist_server_list_s { + /// Distribution server descriptor + fw_dist_server_t server; + /// Next list element + struct fw_dist_server_list_s *next; +} fw_dist_server_list_t; + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Log byte array as text + * + * The byte arrays might not be null terminated so it is not a valid C string + * and therefore it can't be used directly with log macros. This function adds + * null character termination and replaces zero bytes with the provided + * replacement character. + * + * @param level Log level + * @param bytes Pointer to the byte array which shall be logged + * @param len Length of byte array + * @param null_replacement_char Zero bytes are replaced with this character + * + ******************************************************************************/ +SL_UNUSED static void _log_bytes_as_text(uint8_t level, + const uint8_t *bytes, + uint16_t len, + char null_replacement_char); + +/***************************************************************************//** + * Log firmware identifier + * + * @param level Log level + * @param fwid Pointer to the FW id byte array + * @param fwid_len Length of FW id byte array + * @param hex_format If it is set to true then hex format is used otherwise it + * is logged as a string + * + ******************************************************************************/ +SL_UNUSED static void _log_fwid_level(uint8_t level, + const uint8_t *fwid, + uint8_t fwid_len, + bool hex_format); + +/***************************************************************************//** + * Log metadata + * + * @param level Log level + * @param metadata Pointer to the metadata byte array + * @param metadata_len Length of metadata byte array + * @param hex_format If it is set to true then hex format is used otherwise it + * is logged as a string + * + ******************************************************************************/ +SL_UNUSED static void _log_metadata_level(uint8_t level, + const uint8_t *metadata, + uint8_t metadata_len, + bool hex_format); + +/***************************************************************************//** + * Transition Upload state machine into selected state + * + * @param self Pointer to Distribution Server descriptor sturcture + * @param target_state State to transition into + ******************************************************************************/ +static void upload_state_transition(fw_dist_server_t *const self, + const upload_state_t target_state); + +/***************************************************************************//** + * Initializes the distributor state vaiables + * + * @param[in] self Pointer to the Distributor Server data representing the + * current Distributor + ******************************************************************************/ +static void dist_init(fw_dist_server_t *const self); + +/***************************************************************************//** + * Notification handler for BLOB Transfer Client API + * + * @param notification Notification data + ******************************************************************************/ +static void handle_blob_transfer_client_notification( + const sl_btmesh_blob_transfer_client_notification_t *const notification); + +/***************************************************************************//** + * Transition Distribution state machine into selected state + * + * @param self Pointer to Distribution Server descriptor structure + * @param target_state State to transition into + ******************************************************************************/ +static void dist_state_transition(fw_dist_server_t *const self, + const sl_btmesh_fw_dist_server_dist_step_t target_state); + +/***************************************************************************//** + * Finds server in linked list belonging to elem_index + * + * @see fw_dist_server_list_t, fw_dist_server_list + * + * @param[in] elem_index Element index for the server + * + * @returns Pointer to the server descriptor + ******************************************************************************/ +static fw_dist_server_t* find_server(uint16_t elem_index); + +/***************************************************************************//** + * Invalidates the FW list in BLOB storage and clears the FW list in NVM and RAM + * + * @param[in] self Pointer to the Distributor Server data representing the + * current Distributor + ******************************************************************************/ +static sl_status_t fw_invalidate_all(fw_dist_server_t *const self); + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- +static const upload_state_flags_t upload_state_flags[UPLOAD_STATE_COUNT] = { + [UPLOAD_STATE_INACTIVE] = { .idle = 1 }, + [UPLOAD_STATE_TRANSFER_FAILED] = { .idle = 1 }, + [UPLOAD_STATE_TRANSFER_CANCELED] = { .idle = 1 }, + [UPLOAD_STATE_TRANSFER_SUCCESS] = { .idle = 1 }, + [UPLOAD_STATE_TRANSFER_ACTIVE] = { .idle = 0 }, +}; + +static const dist_state_flags_t dist_state_flags[] = { + [sl_btmesh_fw_dist_server_dist_step_idle] = { .idle = 1, .execute_step = 0, .retry = 0 }, + [sl_btmesh_fw_dist_server_dist_step_starting_update] = { .idle = 0, .execute_step = 1, .retry = 1 }, + [sl_btmesh_fw_dist_server_dist_step_transferring_image] = { .idle = 0, .execute_step = 0, .retry = 0 }, + [sl_btmesh_fw_dist_server_dist_step_checking_verification] = { .idle = 0, .execute_step = 1, .retry = 1 }, + [sl_btmesh_fw_dist_server_dist_step_waiting_for_apply] = { .idle = 0, .execute_step = 0, .retry = 0 }, + [sl_btmesh_fw_dist_server_dist_step_applying_update] = { .idle = 0, .execute_step = 1, .retry = 1 }, + [sl_btmesh_fw_dist_server_dist_step_checking_update_result] = { .idle = 0, .execute_step = 1, .retry = 1 }, + [sl_btmesh_fw_dist_server_dist_step_completed] = { .idle = 1, .execute_step = 0, .retry = 0 }, + [sl_btmesh_fw_dist_server_dist_step_failed] = { .idle = 1, .execute_step = 0, .retry = 0 }, + [sl_btmesh_fw_dist_server_dist_step_cancelling] = { .idle = 0, .execute_step = 1, .retry = 1 }, + [sl_btmesh_fw_dist_server_dist_step_suspended] = { .idle = 0, .execute_step = 0, .retry = 0 }, +}; + +/// Linked list of available servers +static fw_dist_server_list_t *fw_dist_server_list = NULL; +/// Common storage capabilities descriptor +static fw_dist_server_capabilities_t fw_dist_server_capabilities = { 0 }; + +static void _log_bytes_as_text(uint8_t level, + const uint8_t *bytes, + uint16_t len, + char null_replacement_char) +{ + const uint16_t temp_str_size = LOG_BYTES_AS_TEXT_CHUNK_SIZE; + char temp_buffer[LOG_BYTES_AS_TEXT_CHUNK_SIZE + 1]; + + // If the logging is disabled then the buffer is not used so the compiler + // warning is suppressed because this function is not used at all in case of + // disabled logging + (void) temp_buffer; + + // There is no terminating zero character at the end of bytes and it might + // contain null characters which might terminate the logging early + if (log_check_level(level) && (bytes != NULL)) { + uint16_t remaining_len = len; + uint16_t offset = 0; + while (0 < remaining_len) { + uint16_t chunk_len = (remaining_len < temp_str_size) ? remaining_len : temp_str_size; + uint16_t idx; + for (idx = 0; idx < chunk_len; idx++) { + temp_buffer[idx] = (bytes[offset] != '\0') ? bytes[offset] : null_replacement_char; + offset++; + } + temp_buffer[idx] = '\0'; + log_append(temp_buffer); + remaining_len -= chunk_len; + } + } + (void)level; +} + +static void _log_fwid_level(uint8_t level, + const uint8_t *fwid, + uint8_t fwid_len, + bool hex_format) +{ + // This function is not used when the logging is turned off + (void) level; + + if ((fwid != NULL) && (fwid_len >= DFU_FWID_MIN_LEN)) { + if (hex_format) { + log_hexdump_level_s(level, "", fwid, fwid_len); + } else { + log_hexdump_level_s(level, "", fwid, DFU_FWID_MIN_LEN); + log_bytes_as_text(level, + &fwid[DFU_FWID_MIN_LEN], + fwid_len - DFU_FWID_MIN_LEN, + ' '); + } + } +} + +static void _log_metadata_level(uint8_t level, + const uint8_t *metadata, + uint8_t metadata_len, + bool hex_format) +{ + // This function is not used when the logging is turned off + (void) level; + (void) metadata_len; + + if (metadata != NULL) { + if (hex_format) { + log_hexdump_level(level, metadata, metadata_len); + } else { + log_bytes_as_text(level, metadata, metadata_len, ' '); + } + } +} + +static fw_dist_server_t* find_server(uint16_t elem_index) +{ + fw_dist_server_list_t *head = fw_dist_server_list; + if (head == NULL) { + return NULL; + } + do { + if (head->server.elem_index == elem_index) { + return &head->server; + } + } while (NULL != (head = head->next)); + return NULL; +} + +static void dist_retry_timer_cb(sl_simple_timer_t *timer, void *data) +{ + (void) timer; + fw_dist_server_t *const self = data; + + self->dist.retry_time_elapsed = true; + // If the retry timer elapses, then the current state shall be reentered to + // execute the state entry behavior again (self transition) + // Note: the retry timer is only started in states which supports retry, so it + // is not necessary to check that here + dist_state_transition(self, self->dist.state); + + app_assert(NULL != data, "The data is NULL in retry timer callback"); +} + +static void dist_start_retry_timer(fw_dist_server_t *const self) +{ + sl_status_t sc; + + // There is no tx complete event in the distributor which signals whether the + // mesh messages are sent or they are still in the message queue. Therefore it + // does not really make sense to send messages without waiting some time. + // + // Wait the retry time to provide some time for the servers to respond. This + // also spares bandwidth, because the Fw Distributor does not flood the mesh + // network with messages. + sc = sl_simple_timer_start(&self->dist.timer, + SL_BTMESH_FW_DIST_SERVER_RETRY_TIME_MS_CFG_VAL, + dist_retry_timer_cb, + self, + false); + app_assert_status_f(sc, + "Failed to dist start retry timer (elem=%d)", + self->elem_index); +} + +static void dist_stop_retry_timer(fw_dist_server_t *const self) +{ + // It is not considered an error if stop is requested for a timer which is not + // running, therefore stop is called here always to be safe. + sl_status_t sc = sl_simple_timer_stop(&self->dist.timer); + + app_assert_status_f(sc, + "Failed to stop dist retry timer (elem=%d)", + self->elem_index); +} + +static uint32_t calc_fw_storage_max_app_footer_size(void) +{ + // Max number of storage bytes used to store FWID in BLOB storage + uint32_t fwid_footer_size = + sl_btmesh_blob_storage_calc_app_footer_size(DFU_FWID_MAX_LEN); + + // Max number of storage bytes used to store metadata in BLOB storage + uint32_t metadata_footer_size = + sl_btmesh_blob_storage_calc_app_footer_size(DFU_METADATA_MAX_LEN); + + // Max number of storage bytes used to store managed flag in BLOB storage + uint32_t managed_flag_size = sl_btmesh_blob_storage_get_managed_flag_size(); + + // Max number of storage bytes used to store distribution server specific + // data in BLOB storage in case of a single BLOB + return fwid_footer_size + metadata_footer_size + managed_flag_size; +} + +static uint32_t calc_fw_storage_max_fw_image_size(void) +{ + uint32_t max_fw_image_size = sl_btmesh_blob_storage_get_max_blob_size(); + uint32_t max_app_footer_size = calc_fw_storage_max_app_footer_size(); + + if (max_app_footer_size < max_fw_image_size) { + max_fw_image_size -= max_app_footer_size; + } else { + max_fw_image_size = 0; + } + return max_fw_image_size; +} + +static uint32_t calc_fw_storage_max_fw_image_size_free(void) +{ + uint32_t max_fw_image_size_free = sl_btmesh_blob_storage_get_max_blob_size_free(true); + uint32_t max_app_footer_size = calc_fw_storage_max_app_footer_size(); + + if (max_app_footer_size < max_fw_image_size_free) { + max_fw_image_size_free -= max_app_footer_size; + } else { + max_fw_image_size_free = 0; + } + return max_fw_image_size_free; +} + +static uint32_t calc_fw_storage_max_upload_space(fw_dist_server_t *const self) +{ + uint32_t max_upload_space = sl_btmesh_blob_storage_get_total_space(); + uint32_t max_app_footer_size = calc_fw_storage_max_app_footer_size(); + + uint32_t max_fw_list_app_footer_size = + max_app_footer_size * self->capabilities->max_fw_list_length; + + if (max_fw_list_app_footer_size < max_upload_space) { + max_upload_space -= max_fw_list_app_footer_size; + } else { + max_upload_space = 0; + } + return max_upload_space; +} + +static uint32_t calc_fw_storage_remaining_upload_space(fw_dist_server_t *const self) +{ + uint32_t remaining_upload_space = sl_btmesh_blob_storage_get_remaining_space(true); + uint32_t max_app_footer_size = calc_fw_storage_max_app_footer_size(); + + if (NULL == self->fw_list_nvm) { + remaining_upload_space = 0; + } else { + // Some bytes shall be reserved to store app footers in BLOB storage for each + // free entry in the FW list so the remaining bytes shall be decreased by + // that amount. BLOB storage does not able to provide this information in the + // sl_btmesh_blob_storage_get_remaining_space API call because the number and + // length of the footer data depends on the distributor. + uint32_t max_fw_list_app_footer_size = max_app_footer_size + * (self->capabilities->max_fw_list_length + - self->fw_list_nvm->current_fw_list_length); + + if (max_fw_list_app_footer_size < remaining_upload_space) { + remaining_upload_space -= max_fw_list_app_footer_size; + } else { + remaining_upload_space = 0; + } + } + return remaining_upload_space; +} + +static void upload_init(fw_dist_server_t *const self) +{ + self->upload.state = UPLOAD_STATE_INACTIVE; + self->upload.metadata_error = false; + self->upload.managed_blob_error = false; +} + +static sl_status_t fw_storage_cleanup(fw_dist_server_t *const self) +{ + sl_status_t sc = SL_STATUS_OK, sc_cleanup = SL_STATUS_OK; + uint32_t occurrence_idx = 0; + sl_bt_uuid_64_t blob_id; + uint16_t fw_list_index; + + while (true) { + // Iterate each BLOB in BLOB storage which belongs to FW Distribution Server + // Note: the API returns SL_STATUS_NOT_FOUND if no BLOBs are found with + // owner_id or the occurrence_idx is greater or equal to the number of BLOBs + // managed by the owner + sc = sl_btmesh_blob_storage_get_blob_id_by_owner(BLOB_STORAGE_OWNER_ID_FW_DIST_SERVER, + occurrence_idx, + &blob_id); + if (sc != SL_STATUS_OK) { + if (sc != SL_STATUS_NOT_FOUND) { + // An unexpected error occurred in BLOB storage + log_status_error_f(sc, + LOG_PREFIX + "Failed to get BLOB by owner (elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(&blob_id)); + sc_cleanup = sc; + } + break; + } + + // Leaked BLOBs in BLOB storage are those BLOBs which belongs to the FW + // Distribution Server but they are not in the FW list. + // For example: Leaked BLOBs may occur when the NVM data is deleted + // externally but the BLOB storage remains intact. BLOB leak can happen also + // when a reset occurs after the BLOB is stored in the flash but before + // the fwid is written as an application footer to the BLOB. + bool blob_leaked = true; + + // Check if the BLOB is present in the FW list + for (fw_list_index = 0; + fw_list_index < self->fw_list_nvm->current_fw_list_length; + fw_list_index++) { + if (0 == memcmp(&self->fw_list[fw_list_index]->blob_id, + &blob_id, + sizeof(sl_bt_uuid_64_t))) { + blob_leaked = false; + break; + } + } + + if (blob_leaked) { + // Invalidate the leaked BLOB in BLOB storage + // BLOB storage guarantees that the BLOBs of FW Distribution Server with + // higher occurrence_idx than the invalidated BLOB are decremented by one + // when invalidation is executed so occurrence_idx shall not be modified + sl_status_t sc_invalidate = sl_btmesh_blob_storage_invalidate(&blob_id); + + log_warning(LOG_PREFIX + "BLOB storage cleanup (elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(&blob_id)); + + if (SL_STATUS_OK != sc_invalidate) { + // Invalidation failed so as a last resort try to delete the BLOB + // by erasing the medium + sl_status_t sc_delete = sl_btmesh_blob_storage_delete(&blob_id); + + if (SL_STATUS_OK != sc_delete) { + log_status_error_f(sc_delete, + LOG_PREFIX "BLOB storage cleanup failed" + "(elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(&blob_id)); + sc_cleanup = sc; + } + } + } else { + // Continue the iteration + occurrence_idx++; + } + } + return sc_cleanup; +} + +static sl_status_t fw_storage_get_fwid_length(fw_dist_server_t *const self, + const sl_bt_uuid_64_t *blob_id, + uint8_t *fwid_length) +{ + (void) self; + sl_status_t sc; + uint16_t length; + + sc = sl_btmesh_blob_storage_get_app_footer_length(blob_id, + BLOB_STORAGE_APP_ID_DFU_FWID, + &length); + // The mandatory firmware ID footer was not written in the BLOB storage, + // which means the BLOB storage shall be considered corrupted. + log_status_error_f(sc, + LOG_PREFIX + "Firmware ID is missing from BLOB storage " + "(elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(blob_id)); + + if (sc == SL_STATUS_OK) { + if ((length >= DFU_FWID_MIN_LEN) && (length <= DFU_FWID_MAX_LEN)) { + *fwid_length = length; + } else { + sc = SL_STATUS_INVALID_RANGE; + // The mandatory firmware ID footer has invalid length in the BLOB + // storage, which means the BLOB shall be considered corrupted. + log_error(LOG_PREFIX + "Firmware ID with invalid length in BLOB storage " + "(elem=%d,fwid_len=%u,blobid=%s)" NL, + self->elem_index, + length, + BLOB_ID_TO_STRING(blob_id)); + } + } + return sc; +} + +static sl_status_t fw_storage_get_metadata_length(fw_dist_server_t *const self, + const sl_bt_uuid_64_t *blob_id, + uint8_t *metadata_length) +{ + (void) self; + sl_status_t sc; + uint16_t length; + + sc = sl_btmesh_blob_storage_get_app_footer_length(blob_id, + BLOB_STORAGE_APP_ID_DFU_METADATA, + &length); + if (SL_STATUS_NOT_FOUND != sc) { + // The metadata is optional so it is not an error if it is missing + log_status_error_f(sc, + LOG_PREFIX + "Failed to read metadata from BLOB storage" + "(elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(blob_id)); + } + + if (sc == SL_STATUS_OK) { + // If the metadata exists then it shall be at least one byte long + if (length > 0 && length <= DFU_METADATA_MAX_LEN) { + *metadata_length = length; + } else { + sc = SL_STATUS_INVALID_RANGE; + log_error(LOG_PREFIX + "Metadata with invalid length in BLOB storage " + "(elem=%d,metadata_len=%u,blobid=%s)" NL, + self->elem_index, + length, + BLOB_ID_TO_STRING(blob_id)); + } + } + return sc; +} + +static sl_status_t fw_storage_fill_fw_descriptor(fw_dist_server_t *const self, + uint16_t fw_list_idx, + const sl_bt_uuid_64_t *blob_id, + uint32_t blob_size, + uint8_t fwid_length, + uint8_t metadata_length, + bool metadata_exists) +{ + sl_status_t sc; + sl_status_t sc_fwid_get = SL_STATUS_FAIL, sc_metadata_get = SL_STATUS_NOT_FOUND; + fw_dist_server_fw_descriptor_t *const fw_descriptor = self->fw_list[fw_list_idx]; + + // The fw_list_build allocates the necessary space for fwid and metadata based + // on the previous BLOB storage application footer length getter calls so the + // fwid and metadata should fit into these allocated dynamic memory buffers + uint16_t storage_fwid_length = fwid_length; + uint16_t storage_metadata_length = metadata_length; + + fw_descriptor->size = blob_size; + fw_descriptor->blob_id = *blob_id; + fw_descriptor->fwid_length = fwid_length; + sc_fwid_get = + sl_btmesh_blob_storage_get_app_footer(blob_id, + BLOB_STORAGE_APP_ID_DFU_FWID, + fw_descriptor->fwid, + &storage_fwid_length); + + // This error is really unexpected because fw_storage_get_fwid_length and + // fw_storage_get_metadata_length was successful so the BLOB has valid fwid + // and metadata which should be readable + log_status_error_f(sc_fwid_get, + LOG_PREFIX + "Firmware ID is missing from BLOB storage " + "(elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(blob_id)); + + if ((sc_fwid_get == SL_STATUS_OK) + && (fwid_length != storage_fwid_length)) { + log_error(LOG_PREFIX + "Unexpected fwid length in BLOB storage " + "(elem=%d,blobid=%s,fwid_len=%u[%u])" NL, + self->elem_index, + BLOB_ID_TO_STRING(blob_id), + storage_fwid_length, + fwid_length); + sc_fwid_get = SL_STATUS_INVALID_RANGE; + } + + if (metadata_exists) { + fw_descriptor->metadata_length = metadata_length; + sc_metadata_get = + sl_btmesh_blob_storage_get_app_footer(blob_id, + BLOB_STORAGE_APP_ID_DFU_METADATA, + fw_descriptor->metadata, + &storage_metadata_length); + + log_status_error_f(sc_metadata_get, + LOG_PREFIX + "Failed to read metadata from BLOB storage" + "(elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(blob_id)); + + if ((sc_metadata_get == SL_STATUS_OK) + && (metadata_length != storage_metadata_length)) { + log_error(LOG_PREFIX + "Unexpected metadata length in BLOB storage " + "(elem=%d,blobid=%s,metadata_len=%u[%u])" NL, + self->elem_index, + BLOB_ID_TO_STRING(blob_id), + storage_metadata_length, + metadata_length); + sc_metadata_get = SL_STATUS_INVALID_RANGE; + } + } else { + fw_descriptor->metadata = NULL; + fw_descriptor->metadata_length = 0; + } + + if (sc_fwid_get != SL_STATUS_OK) { + sc = sc_fwid_get; + } else if (metadata_exists && (sc_metadata_get != SL_STATUS_OK)) { + sc = sc_metadata_get; + } else { + sc = SL_STATUS_OK; + } + return sc; +} + +static void fw_list_handle_build_error(fw_dist_server_t *const self, + uint16_t fw_list_idx, + const sl_bt_uuid_64_t blob_id, + bool remove_from_blob_storage) +{ + // If the length query of fwid or metadata fails then the fw descriptor + // is not allocated so a NULL check is necessary here + if (self->fw_list[fw_list_idx] != NULL) { + sl_free(self->fw_list[fw_list_idx]->metadata); + sl_free(self->fw_list[fw_list_idx]); + self->fw_list[fw_list_idx] = NULL; + } + + // The complete NVM FW list was read from the NVM already so in order to remove + // the inconsistent BLOB from NVM FW list all following BLOB shall be shifted + // towards the position of the removed inconsistent BLOB. + for (uint16_t idx = fw_list_idx; + (idx + 1) < self->fw_list_nvm->current_fw_list_length; + idx++) { + self->fw_list_nvm->blob_ids[idx] = self->fw_list_nvm->blob_ids[idx + 1]; + } + // Inconsistent BLOB is removed so the FW list length is decremented + self->fw_list_nvm->current_fw_list_length--; + + log_warning(LOG_PREFIX + "Inconsistent BLOB is removed from FW list " + "(elem=%d,blob_id=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(&blob_id)); + + if (remove_from_blob_storage) { + // Invalidate the BLOB in BLOB storage because it is much faster than the + // delete operation which is important to have fast startup + sl_status_t sc_invalidate = sl_btmesh_blob_storage_invalidate(&blob_id); + + log_warning(LOG_PREFIX + "Incomplete BLOB removal from BLOB storage (elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(&blob_id)); + + if (SL_STATUS_OK != sc_invalidate) { + // Invalidation failed so as a last resort try to delete the BLOB + // by erasing the medium + sl_status_t sc_delete = sl_btmesh_blob_storage_delete(&blob_id); + + if (SL_STATUS_OK != sc_delete) { + log_status_error_f(sc_delete, + LOG_PREFIX + "Incomplete BLOB removal from BLOB storage failed " + "(elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(&blob_id)); + } + } + } +} + +static sl_status_t fw_list_build(fw_dist_server_t *const self) +{ + uint16_t fw_list_idx = 0; + bool fw_list_nvm_changed = false; + + while (fw_list_idx < self->fw_list_nvm->current_fw_list_length) { + sl_status_t sc_blob_size = SL_STATUS_FAIL; + sl_status_t sc_fwid_len = SL_STATUS_FAIL; + sl_status_t sc_metadata_len = SL_STATUS_NOT_FOUND; + sl_status_t sc_fill_fw_desc = SL_STATUS_FAIL; + uint32_t blob_size = 0; + uint8_t fwid_length = 0, metadata_length = 0; + bool fw_list_nvm_entry_invalid = false; + sl_bt_uuid_64_t *blob_id = &self->fw_list_nvm->blob_ids[fw_list_idx]; + + sc_blob_size = sl_btmesh_blob_storage_get_blob_size(blob_id, + &blob_size); + + if (SL_STATUS_OK == sc_blob_size) { + sc_fwid_len = fw_storage_get_fwid_length(self, blob_id, &fwid_length); + sc_metadata_len = fw_storage_get_metadata_length(self, blob_id, &metadata_length); + } else { + // This means that the passed BLOB ID is not stored in BLOB storage, + // which means that there is inconsistency between the NVM FW list + // and the BLOB storage. + log_status_error_f(sc_blob_size, + LOG_PREFIX + "BLOB from NVM FW list is not found in BLOB storage " + "(elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(blob_id)); + } + + // Metadata is not mandatory so it is not an error when it is missing. + // Note: During upload, the firmware ID is written after the metadata. + // If a reset occurs during writing the metadata, then it means that the + // firmware ID is not written as well, and the previous checks regarding + // the firmware ID would have failed. + bool fw_storage_data_valid = (sc_blob_size == SL_STATUS_OK) + && (sc_fwid_len == SL_STATUS_OK) + && ((sc_metadata_len == SL_STATUS_OK) + || (sc_metadata_len == SL_STATUS_NOT_FOUND)); + + if (fw_storage_data_valid == false) { + fw_list_nvm_entry_invalid = true; + } else { + bool metadata_exists = (sc_metadata_len == SL_STATUS_OK); + + // The fwid and metadata length is known so the the dynamic memory can + // be allocated and it can be used to store the fwid and metadata so + // no local variable is necessary during BLOB storage read. + self->fw_list[fw_list_idx] = sl_malloc(FW_DESCRIPTOR_SIZE(fwid_length)); + + if (self->fw_list[fw_list_idx] == NULL) { + log_critical(LOG_PREFIX + "FW info allocation failed (elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(blob_id)); + return SL_STATUS_ALLOCATION_FAILED; + } + + if (metadata_exists) { + self->fw_list[fw_list_idx]->metadata = sl_malloc(metadata_length); + if (self->fw_list[fw_list_idx]->metadata == NULL) { + log_critical(LOG_PREFIX + "Metadata allocation failed (elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(blob_id)); + sl_free(self->fw_list[fw_list_idx]); + self->fw_list[fw_list_idx] = NULL; + return SL_STATUS_ALLOCATION_FAILED; + } + } + + // Fill the allocated FW descriptor with available data like BLOB ID and + // size and fill the fwid and metadata from the BLOB storage directly + sc_fill_fw_desc = fw_storage_fill_fw_descriptor(self, + fw_list_idx, + blob_id, + blob_size, + fwid_length, + metadata_length, + metadata_exists); + if (sc_fill_fw_desc != SL_STATUS_OK) { + fw_list_nvm_entry_invalid = true; + } + } + + // If there is inconsistency between NVM FW list and BLOB storage content + // then the inconsistent BLOB shall removed from the FW list and from the + // NVM FW list and from BLOB storage. + if (fw_list_nvm_entry_invalid) { + // It is possible that the BLOB is stored in BLOB storage but there are + // some integrity failures like missing FWID so the BLOB shall be removed + // from the BLOB storage in this special case. + bool remove_from_blob_storage = (sc_blob_size == SL_STATUS_OK); + + // The FW list is being built in this function so in order to remove the + // BLOB from the FW list it is enough to avoid incrementing the fw_list_idx. + fw_list_handle_build_error(self, + fw_list_idx, + *blob_id, + remove_from_blob_storage); + + // The NVM FW list is changed in RAM so it shall be saved into the NVM but + // it might happen that multiple BLOBs are removed due to inconsistency + // during the iteration so it is better to save it once after the iteration + fw_list_nvm_changed = true; + } else { + // Valid entry is added to the FW list so the index shall be incremented + fw_list_idx++; + } + } + + if (fw_list_nvm_changed) { + sl_status_t sc; + sc = app_btmesh_nvm_write(SL_BTMESH_FW_DIST_SERVER_FW_LIST_NVM_KEY_CFG_VAL, + self->fw_list_nvm, + FW_LIST_NVM_SIZE(self->fw_list_nvm->current_fw_list_length)); + log_status_error_f(sc, + LOG_PREFIX "Failed to save NVM FW list (elem=%d)" NL, + self->elem_index); + } + return SL_STATUS_OK; +} + +static void fw_list_free_fw_descriptors(fw_dist_server_t *const self) +{ + // The NULL check guarantees that this API can be called at initialization time + if (NULL != self->fw_list) { + for (uint16_t fw_list_index = 0; + fw_list_index < self->fw_list_nvm->current_fw_list_length; + fw_list_index++) { + fw_dist_server_fw_descriptor_t *fw_descriptor = self->fw_list[fw_list_index]; + if (fw_descriptor != NULL) { + // The sl_free function handles null pointer like a no-operation + sl_free(fw_descriptor->metadata); + } + sl_free(fw_descriptor); + self->fw_list[fw_list_index] = NULL; + } + } +} + +static void fw_list_init(fw_dist_server_t *const self) +{ + sl_status_t sc; + self->fw_list_nvm = NULL; + + if (0 == self->capabilities->max_fw_list_length) { + // The BLOB storage is not able store any firmware image which makes the + // distributor useless which may occur when the bootloader storage slot + // configuration is not correct (BLOB storage stores FW in bootloader slots) + self->init_failed = true; + return; + } + + uint16_t max_fw_list_length = self->capabilities->max_fw_list_length; + + size_t max_fw_list_nvm_size = FW_LIST_NVM_SIZE(max_fw_list_length); + + // The RAM mirror for NVM firmware list is allocated for the maximum firmware + // list length at initialization time to avoid reallocation at runtime + self->fw_list_nvm = sl_calloc(1, max_fw_list_nvm_size); + + if (self->fw_list_nvm == NULL) { + self->init_failed = true; + log_critical(LOG_PREFIX "NVM FW list allocation failed (elem=%d)" NL, + self->elem_index); + return; + } + + // Allocate the array of pointers to FW list elements at initialization time + // to avoid reallocation at runtime + // Note: size of pointers are not significant compared to the elements + self->fw_list = sl_calloc(max_fw_list_length, sizeof(self->fw_list[0])); + + if (self->fw_list == NULL) { + self->init_failed = true; + log_critical(LOG_PREFIX "FW list allocation failed (elem=%d)" NL, + self->elem_index); + return; + } + + size_t fw_list_nvm_size = max_fw_list_nvm_size; + sc = app_btmesh_nvm_init(); + if (SL_STATUS_OK == sc) { + // The NVM provides the size of the read data which can be less than the + // maximum length of firmware list because only the actual firmware list + // elements are written into the NVM at upload + sc = app_btmesh_nvm_read(SL_BTMESH_FW_DIST_SERVER_FW_LIST_NVM_KEY_CFG_VAL, + self->fw_list_nvm, + &fw_list_nvm_size); + + if (SL_STATUS_WOULD_OVERFLOW == sc) { + log_error(LOG_PREFIX + "NVM FW list size is too high (elem=%d,fw_list_nvm_size=0x%X," + "max_fw_list_nvm_size=0x%X)" NL, + self->elem_index, + fw_list_nvm_size, + max_fw_list_nvm_size); + // The FW list could not be constructed so set the length to zero in order + // to execute fw_invalidate_all properly because there is no allocated entry + // in the FW list. + self->fw_list_nvm->current_fw_list_length = 0; + + // The NVM content could not fit into the allocated NVM FW list RAM object + // if a new bootloader is flashed (OTA or debugger) with less storage slots. + // The best strategy is to invalidate every firmware because the FW list + // can't be restored and it might happen that the storage slot sizes are + // modified as well. + // The initiator can expect that after a distributor FW update the + // firmware list might not be valid anymore. + // Note: It is important to use invalidate all instead of delete all because + // the former is faster (flash write vs erase). The Distribution Server + // SDK component is initialized when the device is provisioned or when + // the previously provisioned node is initialized (after reset). + // A delete all operation in the BLOB storage could lead to + // configuration timeout because a device is usually configured just + // after the provisioning was completed. + (void) fw_invalidate_all(self); + + // If the invalidation was successful then the FW list is empty so it does + // not make sense to continue the FW list initialization. If the invalidation + // failed then something went terribly wrong so the fw_invalidate_all sets the + // storage corrupted flag and the FW list initialization shall be terminated. + return; + } + } + + if (SL_STATUS_OK != sc) { + // This could be the correct behavior if no firmware was uploaded to the + // distributor since the last mass erase. + self->fw_list_nvm->current_fw_list_length = 0; + + log_status_info_f(sc, + LOG_PREFIX "No FW list found in NVM (elem=%d)" NL, + self->elem_index); + + // If the NVM data is deleted externally then some leaked BLOB might remain + // in the BLOB storage which belongs to the Distribution Server. + // If there isn't any NVM data then no BLOB shall remain in the BLOB storage + // so all BLOBs can be removed from BLOB storage which are owned by the + // Distribution Server SW component. + (void) fw_invalidate_all(self); + return; + } + + // Calculate the minimum size of firmware list in NVM based on the firmware + // list length information stored in the NVM object itself + size_t min_fw_list_nvm_size; + if (fw_list_nvm_size < sizeof(fw_dist_server_fw_list_nvm_t)) { + min_fw_list_nvm_size = sizeof(fw_dist_server_fw_list_nvm_t); + } else { + min_fw_list_nvm_size = sizeof(fw_dist_server_fw_list_nvm_t) + + self->fw_list_nvm->current_fw_list_length + * sizeof(sl_bt_uuid_64_t); + } + + // Check if the size of NVM object is consistent with the length of the + // firmware list stored in the NVM object itself + if ((max_fw_list_nvm_size < fw_list_nvm_size) + || (fw_list_nvm_size < min_fw_list_nvm_size)) { + log_error(LOG_PREFIX + "FW list is corrupted in NVM (elem=%d,fw_list_nvm_size=0x%X," + "min_fw_list_nvm_size=0x%X,max_fw_list_nvm_size=0x%X)" NL, + self->elem_index, + fw_list_nvm_size, + min_fw_list_nvm_size, + max_fw_list_nvm_size); + + // The FW list could not be constructed so set the length to zero in order + // to execute fw_invalidate_all properly because there is no allocated entry + // in the FW list. + self->fw_list_nvm->current_fw_list_length = 0; + + // This kind of NVM inconsistency should not occur. It could mean somehow + // the data is corrupted in NVM. + // Note: If the number of storage slots in the bootloader is decreased then + // the NVM read itself fails because the NVM data does not fit into the + // allocated NVM fw list buffer. + (void) fw_invalidate_all(self); + + // If the invalidation was successful then the FW list is empty so it does + // not make sense to continue the FW list initialization. If the invalidation + // failed then something went terribly wrong so the fw_invalidate_all sets the + // storage corrupted flag and the FW list initialization shall be terminated. + return; + } + + // FW list is built in RAM based on the NVM FW list and BLOB storage content. + // The FW Distribution Server checks the consistency between the NVM FW list + // and BLOB storage and the integrity of these persistent data. + // Inconsistency or integrity issues may occur when a BLOB id in the NVM list + // is not present in the BLOB storage or the BLOB is present in the BLOB + // storage but no FWID information is stored with the BLOB. + // This kind of inconsistency may occur if a new bootloader is flashed + // (OTA or debugger) with different storage slot configurations or the NVM + // content is deleted externally. + // The inconsistent data is removed from the NVM FW list and from the BLOB + // storage but the consistent BLOBs are kept and the FW list is built from + // these entries in RAM. + // Rationale: It takes long time to upload FW images to the distributor so + // it can make sense to save all valid entries. This means the the FW list is + // modified without the knowledge of the Initiator but this happens after a + // reset only and the initiator shall query the FW list before it starts the + // firmware distribution procedure. + // Note: the FW List fails only if allocation error occurs. + sc = fw_list_build(self); + + if (SL_STATUS_OK != sc) { + // If the allocation of existing firmware list entries is not possible then + // the distribution server can't operate + self->init_failed = true; + return; + } + + // Remove leaked BLOBs from BLOB storage to free space in BLOB storage. + // Note: The fw_storage_cleanup operation assumes that the FW list is valid. + (void) fw_storage_cleanup(self); + + // The FW list has been constructed successfully so the application shall be + // notified about the already existing firmware images on the distributor + for (uint16_t fw_list_idx = 0; + fw_list_idx < self->fw_list_nvm->current_fw_list_length; + ++fw_list_idx) { + fw_dist_server_fw_descriptor_t *fw_descriptor = self->fw_list[fw_list_idx]; + sl_btmesh_fw_distribution_server_on_firmware_added(self->elem_index, + UNASSIGNED_ADDRESS, + fw_descriptor->size, + fw_list_idx, + fw_list_idx + 1, + self->capabilities->max_fw_list_length, + fw_descriptor->fwid, + fw_descriptor->fwid_length); + } +} + +static sl_status_t fw_list_get_storage_blob_id_by_index(fw_dist_server_t *const self, + uint16_t fw_list_index, + sl_bt_uuid_64_t *storage_blob_id) +{ + if ((self->init_failed != false) || (self->storage_corrupted != false)) { + return SL_STATUS_INVALID_STATE; + } + + if (self->fw_list_nvm->current_fw_list_length <= fw_list_index) { + return SL_STATUS_NOT_FOUND; + } + + memcpy(storage_blob_id, + &self->fw_list_nvm->blob_ids[fw_list_index], + sizeof(sl_bt_uuid_64_t)); + return SL_STATUS_OK; +} + +static sl_status_t fw_list_get_fw_info_by_index(fw_dist_server_t *const self, + uint16_t fw_list_index, + fw_blob_selector_t blob_selector, + mesh_dfu_dist_server_fw_info_t *fw_info) +{ + fw_dist_server_fw_descriptor_t *fw_descriptor = NULL; + + if ((self->init_failed != false) || (self->storage_corrupted != false)) { + return SL_STATUS_INVALID_STATE; + } + + if (self->fw_list_nvm->current_fw_list_length <= fw_list_index) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + + fw_descriptor = self->fw_list[fw_list_index]; + + // The fw_info is not a mandatory parameter because the caller might need only + // the information if the firmware exists at all + if (fw_info != NULL) { + fw_info->size = fw_descriptor->size; + fw_info->index = fw_list_index; + fw_info->p_blob_id = (blob_selector == FW_BLOB_SELECTOR_STORAGE) + ? self->fw_list_nvm->blob_ids[fw_list_index].data + : fw_descriptor->blob_id.data; + fw_info->p_fwid = fw_descriptor->fwid; + fw_info->fwid_len = fw_descriptor->fwid_length; + fw_info->p_metadata = fw_descriptor->metadata; + fw_info->metadata_len = fw_descriptor->metadata_length; + } + + return SL_STATUS_OK; +} + +static sl_status_t fw_list_get_fw_info_by_fwid(fw_dist_server_t *const self, + const uint8_t *fwid, + uint8_t fwid_length, + fw_blob_selector_t blob_selector, + mesh_dfu_dist_server_fw_info_t *fw_info) +{ + uint16_t fw_list_index; + + if ((self->init_failed != false) || (self->storage_corrupted != false)) { + return SL_STATUS_INVALID_STATE; + } + + for (fw_list_index = 0; fw_list_index < self->fw_list_nvm->current_fw_list_length; + fw_list_index++) { + if ((self->fw_list[fw_list_index]->fwid_length == fwid_length) + && (0 == memcmp(self->fw_list[fw_list_index]->fwid, fwid, fwid_length))) { + break; + } + } + + if (self->fw_list_nvm->current_fw_list_length <= fw_list_index) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + + return fw_list_get_fw_info_by_index(self, fw_list_index, blob_selector, fw_info); +} + +static sl_status_t fw_list_append(fw_dist_server_t *const self, + fw_dist_server_fw_descriptor_t *fw_descriptor) +{ + sl_status_t sc; + if (self->capabilities->max_fw_list_length + <= self->fw_list_nvm->current_fw_list_length) { + sc = SL_STATUS_NO_MORE_RESOURCE; + } else { + uint16_t fw_list_index = self->fw_list_nvm->current_fw_list_length++; + self->fw_list[fw_list_index] = fw_descriptor; + memcpy(&self->fw_list_nvm->blob_ids[fw_list_index], + &fw_descriptor->blob_id, + sizeof(sl_bt_uuid_64_t)); + + sc = app_btmesh_nvm_write(SL_BTMESH_FW_DIST_SERVER_FW_LIST_NVM_KEY_CFG_VAL, + self->fw_list_nvm, + FW_LIST_NVM_SIZE(self->fw_list_nvm->current_fw_list_length)); + log_status_error_f(sc, + LOG_PREFIX "Failed to save NVM FW list (elem=%d)" NL, + self->elem_index); + } + return sc; +} + +static sl_status_t fw_list_delete_all(fw_dist_server_t *const self) +{ + sl_status_t sc; + + fw_list_free_fw_descriptors(self); + + self->fw_list_nvm->current_fw_list_length = 0; + sc = app_btmesh_nvm_write(SL_BTMESH_FW_DIST_SERVER_FW_LIST_NVM_KEY_CFG_VAL, + self->fw_list_nvm, + FW_LIST_NVM_SIZE(self->fw_list_nvm->current_fw_list_length)); + log_status_error_f(sc, + LOG_PREFIX "Failed to save NVM FW list (elem=%d)" NL, + self->elem_index); + return sc; +} + +static sl_status_t fw_list_delete(fw_dist_server_t *const self, + uint16_t target_fw_list_index) +{ + sl_status_t sc; + + if (target_fw_list_index < self->fw_list_nvm->current_fw_list_length) { + // The sl_free function handles null pointer like a no-operation + sl_free(self->fw_list[target_fw_list_index]->metadata); + sl_free(self->fw_list[target_fw_list_index]); + + for (uint16_t fw_list_idx = target_fw_list_index; + (fw_list_idx + 1) < self->fw_list_nvm->current_fw_list_length; + fw_list_idx++) { + self->fw_list_nvm->blob_ids[fw_list_idx] = self->fw_list_nvm->blob_ids[fw_list_idx + 1]; + self->fw_list[fw_list_idx] = self->fw_list[fw_list_idx + 1]; + } + + // Every FW descriptors above the target index is shifted to the beginning + // of the FW list so the last position is empty so it can be set to NULL + self->fw_list[self->fw_list_nvm->current_fw_list_length - 1] = NULL; + + self->fw_list_nvm->current_fw_list_length--; + sc = app_btmesh_nvm_write(SL_BTMESH_FW_DIST_SERVER_FW_LIST_NVM_KEY_CFG_VAL, + self->fw_list_nvm, + FW_LIST_NVM_SIZE(self->fw_list_nvm->current_fw_list_length)); + log_status_error_f(sc, + LOG_PREFIX "Failed to save NVM FW list (elem=%d)" NL, + self->elem_index); + } else { + sc = SL_STATUS_INVALID_PARAMETER; + } + + return sc; +} + +static void sl_btmesh_fw_distribution_server_element_init(uint16_t elem_index) +{ + sl_status_t sc; + fw_dist_server_t *self; + uint32_t max_blob_count; + static fw_dist_server_list_t *tail; + + fw_dist_server_list_t *new_fw_dist_server = + sl_calloc(1, sizeof(struct fw_dist_server_list_s)); + + if (new_fw_dist_server == NULL) { + app_assert(new_fw_dist_server != NULL, + "Allocation of distribution server list failed!"); + // If the asserts are turned off then the initialization shall not be + // continued because the NULL pointer could be dereferenced + // Note: SERVER_STATUS_CHECK macro makes sure that the NULL pointer is not + // dereferenced at other entry points of the component + return; + } + + // If no server has been initialized, create list head + if (fw_dist_server_list == NULL) { + fw_dist_server_list = new_fw_dist_server; + tail = fw_dist_server_list; + } else { + // If head is present (implies tale is valid), create new tail + tail->next = new_fw_dist_server; + tail = tail->next; + } + // Initialize tail + tail->next = NULL; + self = &tail->server; + + self->elem_index = elem_index; + self->storage_corrupted = false; + self->init_failed = false; + + self->async_req_client_address = UINT16_MAX; + self->deleting = false; + self->deleting_fwid_len = 0; + self->deleting_fwid = NULL; + self->deleting_all = false; + + // Future proofing, if multiple instances of storage interfaces are used + self->capabilities = &fw_dist_server_capabilities; + + // There is no use case, that the blob storage should be able to store more + // than 65535 blobs inside an EFR32 MCU. + max_blob_count = sl_btmesh_blob_storage_get_max_blob_count(); + self->capabilities->max_fw_list_length = + (max_blob_count < 0xFFFF) ? max_blob_count : 0xFFFF; + + // The max_fw_list_length capability shall be set because it is used to + // calculate the max_upload_space + self->capabilities->max_upload_space = calc_fw_storage_max_upload_space(self); + self->capabilities->max_fw_image_size = calc_fw_storage_max_fw_image_size(); + + // It does not make sense to use Distributor if it is not able to store at + // least one firmware in the BLOB storage. + // Note: the return value of the functions, which provide this data is set + // to zero if an error is encountered. + app_assert(0 < self->capabilities->max_fw_list_length, + "Max BLOB count is zero."); + app_assert(0 < self->capabilities->max_upload_space, + "Max upload space is zero."); + app_assert(0 < self->capabilities->max_fw_image_size, + "Max firmware size is zero."); + + upload_init(self); + dist_init(self); + fw_list_init(self); + + sc = sl_btmesh_fw_dist_server_init(BTMESH_FW_DISTRIBUTION_SERVER_MAIN, + SL_BTMESH_FW_DIST_SERVER_MAX_NODE_LIST_SIZE_CFG_VAL, + self->capabilities->max_fw_list_length, + self->capabilities->max_fw_image_size, + self->capabilities->max_upload_space, + SL_BTMESH_FW_DIST_SERVER_MULTICAST_THRESHOLD_DEFAULT_CFG_VAL, + 0, + NULL); + + app_assert_status_f(sc, "Failed to init FW Distribution Server"); + + sl_btmesh_fw_distribution_server_on_distribution_state_changed(self->elem_index, + self->dist.state, + self->dist.num_active_nodes, + self->dist.node_count); +} + +static void sl_btmesh_fw_distribution_server_init(void) +{ + sl_btmesh_fw_distribution_server_element_init(BTMESH_FW_DISTRIBUTION_SERVER_MAIN); +} + +static void dist_reset_node_counters(fw_dist_server_t *const self) +{ + self->dist.node_count = 0; + self->dist.num_active_nodes = 0; +} + +static void dist_super_state_idle_entry(fw_dist_server_t *const self) +{ + self->dist.blob_transfer_started = false; + self->dist.retry_time_elapsed = false; + self->dist.retry_counter = 0; +} + +static void dist_init(fw_dist_server_t *const self) +{ + self->dist.state = sl_btmesh_fw_dist_server_dist_step_idle; + self->dist.fw_list_index = 0xFFFF; + self->dist.fw_size = 0; + memset(&self->dist.storage_blob_id, 0, sizeof(self->dist.storage_blob_id)); + + dist_reset_node_counters(self); + dist_super_state_idle_entry(self); +} + +static void handle_nodes_added( + const sl_btmesh_evt_fw_dist_server_nodes_added_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + if (0 != dist_state_flags[self->dist.state].idle) { + // The BT Mesh stack filters those nodes from the Firmware Distribution + // Receivers Add message which are already present in the distribution + // receivers list (remove duplicates). + // The BT Mesh stack also checks remaining new nodes after the filtering, if + // there is sufficient space for the new nodes in the receivers list. + if ((self->dist.node_count + evt->num_added_nodes) + <= SL_BTMESH_FW_DIST_SERVER_MAX_NODE_LIST_SIZE_CFG_VAL) { + for (uint8_t idx = 0; (idx + 2) < evt->added_nodes.len; idx += 3) { + // Access layer messages are little endian + uint16_t server_address = (evt->added_nodes.data[idx + 1] << 8) + | evt->added_nodes.data[idx]; + uint8_t update_fw_image_idx = evt->added_nodes.data[idx + 2]; + + self->dist.node_count++; + + // Inform the application about the added receiver nodes to list + sl_btmesh_fw_distribution_server_on_node_added(self->elem_index, + server_address, + update_fw_image_idx, + self->dist.node_count); + log_info(LOG_PREFIX + "node is added to distribution list " + "(elem=%d,claddr=0x%04X,node_addr=0x%04X,node_cnt=%d)" NL, + evt->elem_index, + evt->client_address, + server_address, + self->dist.node_count); + } + } else { + log_debug(LOG_PREFIX + "space is not sufficient in node list " + "(elem=%d,claddr=0x%04X,list_max=%d,list_cur=%d,list_add=%d)" NL, + evt->elem_index, + evt->client_address, + SL_BTMESH_FW_DIST_SERVER_MAX_NODE_LIST_SIZE_CFG_VAL, + self->dist.node_count, + evt->num_added_nodes); + } + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX "unexpected Nodes Added event (elem=%d,state=%d)" NL, + self->elem_index, + self->dist.state); + } +} + +static void handle_nodes_deleted( + const sl_btmesh_evt_fw_dist_server_nodes_deleted_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + if (0 != dist_state_flags[self->dist.state].idle) { + dist_reset_node_counters(self); + + sl_btmesh_fw_distribution_server_on_all_nodes_deleted(evt->elem_index); + + log_info(LOG_PREFIX "all nodes are deleted from distribution list " + "(elem=%d,claddr=0x%04X)" NL, + evt->elem_index, + evt->client_address); + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX "unexpected Nodes Deleted event (elem=%d,state=%d)" NL, + self->elem_index, + self->dist.state); + } +} + +static void handle_dist_start_request( + const sl_btmesh_evt_fw_dist_server_dist_start_req_t *const evt) +{ + sl_status_t sc_fw_info, sc_storage_blob_id, sc_dist_start_rsp; + mesh_dfu_dist_server_fw_info_t fw_info; + sl_btmesh_fw_dist_server_dist_status_t dist_status = + sl_btmesh_fw_dist_server_dist_status_internal_error; + + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + + if (self->storage_corrupted != false) { + // If the storage is corrupted then the distribution start request is + // rejected with internal error + } else if (0 != dist_state_flags[self->dist.state].idle) { + // Store transfer mode because it shall be provided for BLOB Transfer Client + // when the BLOB transfer is started + self->dist.transfer_mode = (sl_btmesh_mbt_client_transfer_mode_t) evt->transfer_mode; + + // It is not necessary to store client and group addresses, ttl, + // apply_immediately and timeout_base event parameters, because these are + // used by and stored in the BT Mesh stack. Furthermore these are not + // necessary in application level logic, but from diagnostic point of view + // it can be useful, so these event parameters are logged. + log_info(LOG_PREFIX + "Distribution Start message is received " + "(elem=%d,claddr=0x%04X,graddr=0x%04X,ttl=%d,policy=%d,fw_list_idx=%d," + "timeout_base=%d,tf_mode=%s)" NL, + evt->elem_index, + evt->client_address, + evt->group_address, + evt->ttl, + evt->apply_immediately, + evt->fw_list_index, + evt->timeout_base, + sl_btmesh_blob_transfer_client_transfer_mode_to_string(self->dist.transfer_mode)); + + // The state is changed only in the State Changed event, which is expected + // to be triggered after this event immediately + self->dist.fw_list_index = evt->fw_list_index; + + self->dist.num_active_nodes = self->dist.node_count; + + // The FW list is created at initialization time from NVM FW list data with + // storage BLOB IDs and firmware list length and from BLOB storage data with + // firmware ID and metadata. The FW list is managed by adding new firmware + // data at upload complete and removing firmware data at firmware delete so + // the FW list is in sync with data in NVM and BLOB storage. + sc_fw_info = fw_list_get_fw_info_by_index(self, + evt->fw_list_index, + FW_BLOB_SELECTOR_CURRENT, + &fw_info); + + sc_storage_blob_id = fw_list_get_storage_blob_id_by_index(self, + evt->fw_list_index, + &self->dist.storage_blob_id); + + if ((SL_STATUS_OK != sc_fw_info) || (SL_STATUS_OK != sc_storage_blob_id)) { + // It was not possible to determine the firmware info which belongs to the + // firmware list index, therefore it is meaningless to continue + // Internal error is passed to BT Mesh stack in distribution start response + log_status_error_f((SL_STATUS_OK != sc_fw_info) ? (unsigned int)sc_fw_info : (unsigned int)sc_storage_blob_id, + LOG_PREFIX + "Distribution Start failed due failed fw lookup " + "(elem=%u,fw_list_idx=%u)" NL, + evt->elem_index, + evt->fw_list_index); + } else { + sl_status_t sc_gen_blob_id; + sl_bt_uuid_64_t *dist_blob_id = &self->fw_list[evt->fw_list_index]->blob_id; + + log_debug(LOG_PREFIX "Distribution Start request (fwid="); + log_fwid_level(APP_LOG_LEVEL_DEBUG, fw_info.p_fwid, fw_info.fwid_len, SL_BTMESH_FW_DIST_SERVER_FWID_METADATA_LOG_FORMAT_HEX); + log_append_debug(",metadata="); + log_metadata_level(APP_LOG_LEVEL_DEBUG, fw_info.p_metadata, fw_info.metadata_len, SL_BTMESH_FW_DIST_SERVER_FWID_METADATA_LOG_FORMAT_HEX); + log_append_debug(")" NL); + + // The distribution procedure can be started so success status is passed + // to BT Mesh stack in distribution start response + dist_status = sl_btmesh_fw_dist_server_dist_status_success; + sc_gen_blob_id = sl_btmesh_fw_distribution_server_generate_blob_id(dist_blob_id); + if (sc_gen_blob_id != SL_STATUS_OK) { + *dist_blob_id = self->dist.storage_blob_id; + } + + sl_btmesh_fw_dist_server_dfu_policy_t update_policy = + (sl_btmesh_fw_dist_server_dfu_policy_t) evt->apply_immediately; + + // Call distribution started application callback to inform the application. + // The distribution started callback shall be called before the distribution + // start response (sl_btmesh_fw_dist_server_dist_start_rsp) BT Mesh stack + // API is called in order to make it possible to set the multicast threshold + // value for the current distribution. + sl_btmesh_fw_distribution_server_on_distribution_started(evt->elem_index, + evt->client_address, + evt->group_address, + evt->ttl, + update_policy, + evt->fw_list_index, + evt->timeout_base, + self->dist.transfer_mode, + self->dist.node_count); + } + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted + // Internal error is passed to BT Mesh stack in distribution start response + log_debug(LOG_PREFIX + "unexpected Distribution Start Request event (elem=%d,state=%d)" NL, + self->elem_index, + self->dist.state); + } + + // Respond to distribution start request with status information which + // indicates that the request is accepted or rejected + sc_dist_start_rsp = sl_btmesh_fw_dist_server_dist_start_rsp(self->elem_index, + dist_status); + log_status_error_f(sc_dist_start_rsp, + LOG_PREFIX "Distribution Start response failed (elem=%d)" NL, + self->elem_index); +} + +static void handle_dist_cancel( + const sl_btmesh_evt_fw_dist_server_dist_cancel_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + + // The FW distribution server SDK component state transitions are triggered + // by sl_btmesh_evt_fw_dist_server_dist_state_changed BT Mesh stack events. + // The cancel event is logged and application callback is called to provide + // client address information to the application. + log_info(LOG_PREFIX "Distribution canceled (elem=%d,claddr=0x%04X)" NL, + evt->elem_index, + evt->client_address); + sl_btmesh_fw_distribution_server_on_distribution_canceled(evt->elem_index, + evt->client_address); + + if (sl_btmesh_fw_dist_server_dist_step_transferring_image == self->dist.state) { + sl_status_t sc = sl_btmesh_blob_transfer_client_on_aborted(evt->elem_index); + log_status_error_f(sc, + LOG_PREFIX "BLOB Transfer Client abort error (elem=%d)" NL, + self->elem_index); + } +} + +static void handle_dist_suspend( + const sl_btmesh_evt_fw_dist_server_dist_suspend_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + + if (sl_btmesh_fw_dist_server_dist_step_transferring_image == self->dist.state) { + log_info(LOG_PREFIX "Distribution suspended (elem=%d,claddr=0x%04X)" NL, + evt->elem_index, + evt->client_address); + + sl_btmesh_fw_distribution_server_on_distribution_suspended(evt->elem_index, + evt->client_address); + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX + "unexpected Distribution Suspend event (elem=%d,state=%d)" NL, + self->elem_index, + self->dist.state); + } +} + +static void handle_dist_resume_request( + const sl_btmesh_evt_fw_dist_server_resume_req_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + + sl_btmesh_fw_dist_server_dfu_policy_t update_policy = + (sl_btmesh_fw_dist_server_dfu_policy_t) evt->update_policy; + + sl_btmesh_fw_dist_server_dist_status_t dist_status = + sl_btmesh_fw_dist_server_dist_status_internal_error; + + if (sl_btmesh_fw_dist_server_dist_step_suspended == self->dist.state) { + log_info(LOG_PREFIX + "Distribution resumed (elem=%d,claddr=0x%04X,graddr=0x%04X,ttl=%d," + "policy=%d,fw_list_idx=%d,timeout_base=%d,tf_mode=%s)" NL, + evt->elem_index, + evt->client_address, + evt->group_address, + evt->ttl, + evt->update_policy, + evt->fw_index, + evt->timeout_base, + sl_btmesh_blob_transfer_client_transfer_mode_to_string(self->dist.transfer_mode)); + sl_btmesh_fw_distribution_server_on_distribution_resumed(evt->elem_index, + evt->client_address, + evt->group_address, + evt->ttl, + update_policy, + evt->fw_index, + evt->timeout_base, + self->dist.transfer_mode, + self->dist.node_count); + dist_status = sl_btmesh_fw_dist_server_dist_status_success; + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then log message is + // emitted and resume response is called with internal error. + log_debug(LOG_PREFIX + "unexpected Distribution Resume event (elem=%d,state=%d)" NL, + self->elem_index, + self->dist.state); + } + + sl_status_t sc = sl_btmesh_fw_dist_server_resume_rsp(evt->elem_index, + dist_status); + log_status_error_f(sc, + LOG_PREFIX "Distribution resume response failed (elem=%d)" NL, + evt->elem_index); +} + +static void handle_dist_state_changed( + const sl_btmesh_evt_fw_dist_server_dist_state_changed_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + + if (0 != dist_state_flags[self->dist.state].idle) { + self->dist.num_active_nodes = evt->num_active_nodes; + } + sl_btmesh_fw_distribution_server_on_distribution_state_changed(self->elem_index, + (sl_btmesh_fw_dist_server_dist_step_t)evt->state, + evt->num_active_nodes, + self->dist.node_count); + dist_state_transition(self, (sl_btmesh_fw_dist_server_dist_step_t)evt->state); +} + +static void handle_dist_server_node_failed( + const sl_btmesh_evt_fw_dist_server_node_failed_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + if (0 == dist_state_flags[self->dist.state].idle) { + self->dist.num_active_nodes--; + + log_info(LOG_PREFIX "node failed phase '%s', status '%s' " + "(elem=%d,addr=0x%04X)" NL, + sl_btmesh_fw_distribution_server_node_phase_to_string((sl_btmesh_fw_dist_server_dist_node_phase_t) evt->update_phase), + sl_btmesh_fw_distribution_server_firmware_update_status_to_string((sl_btmesh_fw_update_server_update_status_t) evt->update_status), + evt->elem_index, + evt->address); + + sl_btmesh_fw_distribution_server_on_distribution_node_failed(evt->elem_index, + evt->address, + (sl_btmesh_fw_dist_server_dist_node_phase_t) evt->update_phase, + (sl_btmesh_fw_update_server_update_status_t) evt->update_status, + evt->mbt_status, + evt->progress, + evt->fw_index, + self->dist.num_active_nodes, + self->dist.node_count); + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX + "unexpected Node Failed event (elem=%d,state=%d)" NL, + self->elem_index, + self->dist.state); + } +} + +static sl_status_t delete_firmware(fw_dist_server_t *self, + uint16_t target_fw_list_index) +{ + // This function expects valid FW list index so the caller shall validate it + // and therefore only an assert is added here + app_assert_s(target_fw_list_index < self->fw_list_nvm->current_fw_list_length); + sl_status_t sc_storage, sc_fw_list; + + // If it is not possible to invalidate the blob in the blob storage due to + // an error, then the implementation tries to erase the flash pages where + // the BLOB is stored. + // Note: The erase is very slow 5s/10s for 1024kB Internal / SPI flash + sl_bt_uuid_64_t *storage_blob_id = &self->fw_list_nvm->blob_ids[target_fw_list_index]; + sc_storage = sl_btmesh_blob_storage_delete_start(storage_blob_id); + + // The BLOB is deleted from the firmware list as well + sc_fw_list = fw_list_delete(self, target_fw_list_index); + + if ((SL_STATUS_OK != sc_storage) || (SL_STATUS_OK != sc_fw_list)) { + self->storage_corrupted = true; + log_status_error_f(sc_storage, + LOG_PREFIX + "BLOB storage delete failed (elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(storage_blob_id)); + + log_status_error_f(sc_fw_list, + LOG_PREFIX + "FW list delete failed (elem=%d,blobid=%s)" NL, + self->elem_index, + BLOB_ID_TO_STRING(storage_blob_id)); + } + + return (SL_STATUS_OK != sc_storage) ? sc_storage : sc_fw_list; +} + +static bool upload_is_empty_space_sufficient(fw_dist_server_t *const self, + uint32_t fwsize) +{ + uint32_t max_fw_image_size_free, remaining_upload_space; + + max_fw_image_size_free = calc_fw_storage_max_fw_image_size_free(); + remaining_upload_space = calc_fw_storage_remaining_upload_space(self); + + return (fwsize <= max_fw_image_size_free) && (fwsize <= remaining_upload_space); +} + +static void handle_upload_start_metadata( + const sl_btmesh_evt_fw_dist_server_upload_start_metadata_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + + // If upload is in progress then the event shall be ignored + if (0 != upload_state_flags[self->upload.state].idle) { + self->upload.temp_metadata = NULL; + self->upload.temp_metadata_length = 0; + self->upload.metadata_error = false; + self->upload.managed_blob_error = false; + + // It is not necessary to check the upper limit of the metadata length as + // it is stored in an 8 bit variable so it can't be greater than 255 + if (0 < evt->metadata.len) { + // The firmware metadata shall be stored at the beginning of the upload + // in order to reject the BT Mesh stack upload request with internal + // error if the dynamic memory allocation of metadata fails + self->upload.temp_metadata = sl_malloc(evt->metadata.len); + if (self->upload.temp_metadata != NULL) { + memcpy(self->upload.temp_metadata, evt->metadata.data, evt->metadata.len); + self->upload.temp_metadata_length = evt->metadata.len; + } else { + self->upload.metadata_error = true; + log_error(LOG_PREFIX "Upload metadata allocation failed (elem=%d)" NL, + self->elem_index); + } + } + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX "unexpected Upload Start Metadata event " + "(elem=%d,state=%d)" NL, + self->elem_index, + self->upload.state); + } +} + +static sl_status_t upload_is_start_req_valid( + const sl_btmesh_evt_fw_dist_server_upload_start_req_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + sl_status_t sc; + sl_bt_uuid_64_t blob_id; + + // The BLOB storage and the FW list in the NVM was detected as inconsistent + // at startup, previous upload or delete firmware commands failed during + // BLOB storage, or NVM3 write operation. + if (false != self->storage_corrupted) { + log_error(LOG_PREFIX "Upload failed due to storage corrupted (elem=%d)" NL, + evt->elem_index); + return SL_STATUS_FAIL; + } + + // The metadata is received in the same Firmware Distribution Upload Start + // message, but it is passed in a different event (upload start metadata) due + // to BGAPI limitations. (one variable length array per message) + // It is guaranteed, that the upload start metadata event is received first + // and the upload started event afterwards. + if (self->upload.metadata_error != false) { + log_error(LOG_PREFIX "Upload with invalid metadata (elem=%d)" NL, + evt->elem_index); + return SL_STATUS_NULL_POINTER; + } + + // The firmware id does not fit into the allocated array or the length of the + // firmware id (mandatory) is zero, then error is returned. + if ((0 == evt->fwid.len) + || (DFU_FWID_MAX_LEN < evt->fwid.len) + || (NULL == evt->fwid.data)) { + log_error(LOG_PREFIX "Upload with invalid FW id (elem=%d)" NL, + evt->elem_index); + if (NULL == evt->fwid.data) { + return SL_STATUS_NULL_POINTER; + } else { + return SL_STATUS_INVALID_RANGE; + } + } + + // If there is not enough space to store the firmware binary, then an error is + // returned. This should not happen because the distribution client can query + // the available space before the upload procedure. + if (false == upload_is_empty_space_sufficient(self, evt->size)) { + log_error(LOG_PREFIX + "Upload failed due to lack of free space " + "(elem=%d,fw_size=0x%lX,rem_space=0x%lX,max_space=0x%lX,max_fw_size=0x%lX)" NL, + evt->elem_index, + evt->size, + calc_fw_storage_remaining_upload_space(self), + self->capabilities->max_upload_space, + calc_fw_storage_max_fw_image_size_free()); + return SL_STATUS_NO_MORE_RESOURCE; + } + + if (self->capabilities->max_fw_list_length + <= self->fw_list_nvm->current_fw_list_length) { + log_error(LOG_PREFIX "Upload failed due to full firmware list " + "(elem=%d,fw_list_len=%d)" NL, + evt->elem_index, + self->capabilities->max_fw_list_length); + return SL_STATUS_NO_MORE_RESOURCE; + } + + // Check if the firmware is already stored in the BLOB storage. However, the + // BT Mesh stack should not start the upload and notify this component, if the + // firmware is already present on the device, so this would mean there is some + // inconsistency between the NVM firmware list and BLOB storage. + sc = sl_btmesh_blob_storage_get_blob_id_by_footer(BLOB_STORAGE_APP_ID_DFU_FWID, + evt->fwid.data, + evt->fwid.len, + &blob_id); + + // The get function returns SL_STATUS_OK, if the firmware ID is found. + // If the firmware ID already exists, then an error code is returned and the + // upload is rejected and a warning is emitted. + // The initiator can delete all firmware images to start again. + if (SL_STATUS_OK == sc) { + log_error(LOG_PREFIX "Upload failed due to firmware id already exists (elem=%d)" NL, + evt->elem_index); + sc = SL_STATUS_ALREADY_EXISTS; + } + + return SL_STATUS_OK; +} + +static void handle_upload_start_request( + const sl_btmesh_evt_fw_dist_server_upload_start_req_t *const evt) +{ + sl_btmesh_fw_dist_server_dist_status_t upload_status = + sl_btmesh_fw_dist_server_dist_status_internal_error; + + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + + // From the FW Distribution Server SDK component perspective there is no + // difference between new and resumed upload because the BT Mesh stack emits + // the very same sl_btmesh_evt_fw_dist_server_upload_start_metadata and + // sl_btmesh_evt_fw_dist_server_upload_start_req events. + // If the BT Mesh stack detects that a BLOB transfer was suspended with the + // same BLOB ID received in FW DIST UPLOAD START message then it considers it + // as a resume and it does not start a new BLOB transfer which means the BLOB + // progress is preserved in the BT Mesh stack. + + // If an upload is already in progress then ignore the new request + if (0 != upload_state_flags[self->upload.state].idle) { + log_debug(LOG_PREFIX "Upload start request (fwid="); + log_fwid_level(APP_LOG_LEVEL_DEBUG, evt->fwid.data, evt->fwid.len, SL_BTMESH_FW_DIST_SERVER_FWID_METADATA_LOG_FORMAT_HEX); + log_append_debug(",metadata="); + log_metadata_level(APP_LOG_LEVEL_DEBUG, self->upload.temp_metadata, self->upload.temp_metadata_length, SL_BTMESH_FW_DIST_SERVER_FWID_METADATA_LOG_FORMAT_HEX); + log_append_debug(")" NL); + + sl_status_t sc_upload_valid = upload_is_start_req_valid(evt); + + if (SL_STATUS_OK == sc_upload_valid) { + self->upload.fw_descriptor = sl_malloc(FW_DESCRIPTOR_SIZE(evt->fwid.len)); + if (self->upload.fw_descriptor != NULL) { + self->upload.fw_descriptor->size = evt->size; + self->upload.fw_descriptor->blob_id = evt->blob_id; + memcpy(self->upload.fw_descriptor->fwid, evt->fwid.data, evt->fwid.len); + self->upload.fw_descriptor->fwid_length = evt->fwid.len; + self->upload.fw_descriptor->metadata = self->upload.temp_metadata; + self->upload.fw_descriptor->metadata_length = self->upload.temp_metadata_length; + upload_status = sl_btmesh_fw_dist_server_dist_status_success; + upload_state_transition(self, UPLOAD_STATE_TRANSFER_ACTIVE); + } else { + log_error(LOG_PREFIX "Upload FW descriptor allocation failed (elem=%d)" NL, + self->elem_index); + } + } + + if (upload_status != sl_btmesh_fw_dist_server_dist_status_success) { + // If the upload status is not success because metadata error then the + // temporary metadata pointer is NULL so the sl_free is a no-operation. + // If the upload status is not success because of invalid upload request + // the allocation of the FW descriptor is failed then the upload is + // rejected and the metadata shall be deallocated. + sl_free(self->upload.temp_metadata); + } + + // Temporary metadata pointer is no longer necessary because it it was added + // to the FW descriptor or the upload was rejected and the metadata storage + // was already deallocated + self->upload.temp_metadata = NULL; + self->upload.temp_metadata_length = 0; + + log_info(LOG_PREFIX + "Upload %s (elem=%d,claddr=0x%04X,fw_size=0x%lX,blobid=%s)" NL, + (upload_status == sl_btmesh_fw_dist_server_dist_status_success) + ? "started" : "start rejected", + evt->elem_index, + evt->client_address, + evt->size, + BLOB_ID_TO_STRING(&evt->blob_id)); + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX "unexpected Upload Start event " + "(elem=%d,state=%d)" NL, + self->elem_index, + self->upload.state); + } + + sl_status_t sc_upload_rsp = sl_btmesh_fw_dist_server_upload_start_rsp(evt->elem_index, + upload_status); + log_status_error_f(sc_upload_rsp, + LOG_PREFIX "Upload start response failed (elem=%d,claddr=0x%04X)" NL, + evt->elem_index, + evt->client_address); + + if ((sc_upload_rsp != SL_STATUS_OK) + && (upload_status == sl_btmesh_fw_dist_server_dist_status_success)) { + // If the upload can be started but the BT Mesh stack upload start response + // fails then the upload is not started so the upload state machine shall + // transition to idle state which deallocates the FW descriptor + upload_state_transition(self, UPLOAD_STATE_TRANSFER_FAILED); + } +} + +static void handle_upload_cancel( + const sl_btmesh_evt_fw_dist_server_upload_cancel_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + // If there is no active transfer then the cancellation event shall be ignored + if (UPLOAD_STATE_TRANSFER_CANCELED != self->upload.state) { + log_info(LOG_PREFIX "upload is canceled (elem=%d,claddr=0x%04X)" NL, + evt->elem_index, + evt->client_address); + + // The state transition to canceled state deallocates the FW descriptor + upload_state_transition(self, UPLOAD_STATE_TRANSFER_CANCELED); + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX "unexpected Upload Cancel event " + "(elem=%d,state=%d)" NL, + self->elem_index, + self->upload.state); + } +} + +static void handle_upload_complete_metadata( + const sl_btmesh_evt_fw_dist_server_upload_complete_metadata_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + sl_status_t sc_metadata_write, sc_managed_flag_write; + + if (0 != upload_state_flags[self->upload.state].idle) { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX "unexpected Upload Completed event " + "(elem=%d,state=%d)" NL, + self->elem_index, + self->upload.state); + return; + } + + // Set the managed flag first before metadata and fwid write. + // If a reset occurs after the managed flag is written but before the fwid is + // written then the BLOB is not part of the NVM FW list but it is managed by + // the FW Distribution Server so the storage cleanup at startup will remove + // this BLOB from BLOB storage. + // If a reset occurs before the managed flag is written then the BLOB remains + // unmanaged and the BLOB storage deletes it when it needs space to store new + // BLOB. It is important that the FWID is not written in this case so it could + // not cause problems when the FW Distributor Server searches BLOBs by FWID. + sc_managed_flag_write = sl_btmesh_blob_storage_set_managed(&self->upload.fw_descriptor->blob_id, + BLOB_STORAGE_OWNER_ID_FW_DIST_SERVER); + log_status_error_f(sc_managed_flag_write, + LOG_PREFIX "Upload failed to write managed flag into BLOB storage " + "(elem=%d,blobid=%s)" NL, + evt->elem_index, + BLOB_ID_TO_STRING(&self->upload.fw_descriptor->blob_id)); + + if (SL_STATUS_OK == sc_managed_flag_write) { + self->upload.managed_blob_error = false; + } else { + self->upload.managed_blob_error = true; + } + + if (0 < evt->metadata.len) { + sc_metadata_write = sl_btmesh_blob_storage_write_app_footer(&self->upload.fw_descriptor->blob_id, + &evt->metadata.data[0], + BLOB_STORAGE_APP_ID_DFU_METADATA, + evt->metadata.len); + if (SL_STATUS_OK == sc_metadata_write) { + self->upload.metadata_error = false; + } else { + self->upload.metadata_error = true; + log_status_error_f(sc_metadata_write, + LOG_PREFIX + "Upload failed to write metadata into BLOB storage " + "(elem=%d,blobid=%s)" NL, + evt->elem_index, + BLOB_ID_TO_STRING(&self->upload.fw_descriptor->blob_id)); + } + } +} + +static void handle_upload_complete( + const sl_btmesh_evt_fw_dist_server_upload_complete_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + + sl_status_t sc_fwid_write; + sl_status_t sc_fw_list_append = SL_STATUS_FAIL; + uint16_t fw_list_index; + + if (0 != upload_state_flags[self->upload.state].idle) { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX "unexpected Upload Completed event " + "(elem=%d,state=%d)" NL, + self->elem_index, + self->upload.state); + return; + } + + fw_list_index = self->fw_list_nvm->current_fw_list_length; + + sc_fwid_write = + sl_btmesh_blob_storage_write_app_footer(&evt->blob_id, + &evt->fwid.data[0], + BLOB_STORAGE_APP_ID_DFU_FWID, + evt->fwid.len); + log_status_error_f(sc_fwid_write, + LOG_PREFIX "Upload failed to write fwid into BLOB storage " + "(elem=%d,blobid=%s)" NL, + evt->elem_index, + BLOB_ID_TO_STRING(&evt->blob_id)); + + // If any BLOB storage error occurs then the FW list shall not be updated in + // the NVM in order to avoid invalid entries. + if ((SL_STATUS_OK == sc_fwid_write) + && (false == self->upload.managed_blob_error) + && (false == self->upload.metadata_error)) { + sc_fw_list_append = fw_list_append(self, self->upload.fw_descriptor); + log_status_error_f(sc_fw_list_append, + LOG_PREFIX "Upload failed to append to firmware list " + "(elem=%d,blobid=%s)" NL, + evt->elem_index, + BLOB_ID_TO_STRING(&evt->blob_id)); + } + + // FW list append can be successful only if the previous BLOB storage + // operations were successful as well because sc_fw_list_append is initialized + // to SL_STATUS_FAIL + if (SL_STATUS_OK == sc_fw_list_append) { + // It is essential to NULL the FW descriptor in the upload data structure + // because the ownership of the descriptor is transferred to the FW list + // at the end successful upload and the upload state machines deallocates + // the FW descriptor when it transitions into an idle state (unless it is NULL) + self->upload.fw_descriptor = NULL; + + sl_btmesh_fw_distribution_server_on_firmware_added(evt->elem_index, + evt->client_address, + evt->size, + fw_list_index, + self->fw_list_nvm->current_fw_list_length, + self->capabilities->max_fw_list_length, + evt->fwid.data, + evt->fwid.len); + log_info(LOG_PREFIX + "Upload completed (elem=%d,claddr=0x%04X,fw_list_idx=%d," + "fw_size=0x%lX,blobid=%s)" NL, + evt->elem_index, + evt->client_address, + fw_list_index, + evt->size, + BLOB_ID_TO_STRING(&evt->blob_id)); + + upload_state_transition(self, UPLOAD_STATE_TRANSFER_SUCCESS); + } else { + // If any BLOB storage operation is failed then the FW list is not appended + // and therefore the NVM data is not updated. If all BLOB storage operations + // are successful but the FW append was failed then it means the NVM data + // was not updated in this case as well. + // The initiator expects that the FW image was uploaded at this point because + // the BLOB transfer was successful however the necessary data could not be + // stored persistently in BLOB storage and NVM. The uploaded firmware is + // appended to the end of list so indexes of other firmwares are not affected. + // The best strategy is to remove all persistently stored data belonging to + // the just uploaded firmware in order to restore a consistent state which + // means that the BLOB shall be invalidated or deleted in the BLOB storage. + // If the initiator starts the distribution with the new highest index then + // it receives FW Distribution Status message with "Firmware Not Found" status + // which describes the problem quite well. If the initiator queries the FW + // list element by Firmware Get or Firmware Get By Index message then the + // Firmware Status message indicates that the FW does not exists on the + // distribution server. + log_info(LOG_PREFIX + "BLOB storage recovery (elem=%d,blobid=%s)" NL, + evt->elem_index, + BLOB_ID_TO_STRING(&evt->blob_id)); + + // Invalidate the BLOB just in case + sl_status_t sc_invalidate = sl_btmesh_blob_storage_invalidate(&evt->blob_id); + + if (SL_STATUS_OK != sc_invalidate) { + // As a last resort try to delete the BLOB by erasing the medium + sl_status_t sc_delete = sl_btmesh_blob_storage_delete(&evt->blob_id); + + if (SL_STATUS_OK != sc_delete) { + log_status_error_f(sc_delete, + LOG_PREFIX "BLOB storage recovery failed" + "(elem=%d,blobid=%s)" NL, + evt->elem_index, + BLOB_ID_TO_STRING(&evt->blob_id)); + + // All recovery method failed so the storage is set to corrupted because + // persistent data is inconsistent or missing. + self->storage_corrupted = true; + } + } + upload_state_transition(self, UPLOAD_STATE_TRANSFER_FAILED); + } +} + +static void handle_upload_failed( + const sl_btmesh_evt_fw_dist_server_upload_failed_t *const evt) +{ + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + if (0 != upload_state_flags[self->upload.state].idle) { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX "unexpected Upload Failed event " + "(elem=%d,state=%d)" NL, + self->elem_index, + self->upload.state); + return; + } + + // The upload process fails if and only if the BLOB Transfer fails. + // The BLOB ID is written into the BLOB Storage as the last step of the BLOB + // Transfer by BLOB Transfer Server. The BLOB storage considers a binary valid + // if its BLOB ID is written into flash and it reuses the space of invalid + // binaries automatically therefore it is not necessary to delete anything + // in BLOB storage in case of failed upload. + + log_warning(LOG_PREFIX + "Upload failed, suspended, or aborted (elem=%d," + "claddr=0x%04X,fw_size=0x%lX,blobid=%s)" NL, + evt->elem_index, + evt->client_address, + evt->size, + BLOB_ID_TO_STRING(&evt->blob_id)); + + // The state transition to failed state deallocates the FW descriptor + upload_state_transition(self, UPLOAD_STATE_TRANSFER_FAILED); +} + +static void handle_fw_delete_request( + const sl_btmesh_evt_fw_dist_server_fw_delete_req_t *const evt) +{ + sl_status_t sc; + mesh_dfu_dist_server_fw_info_t fw_info; + + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + + log_info(LOG_PREFIX "FW delete request (elem=%d,claddr=0x%04X", + evt->elem_index, + evt->client_address); + log_append_debug(",fwid="); + log_fwid_level(APP_LOG_LEVEL_DEBUG, evt->fwid.data, evt->fwid.len, SL_BTMESH_FW_DIST_SERVER_FWID_METADATA_LOG_FORMAT_HEX); + log_append_info(")" NL); + + // Search for firmware information in FW list by fwid + sc = fw_list_get_fw_info_by_fwid(self, + evt->fwid.data, + evt->fwid.len, + FW_BLOB_SELECTOR_STORAGE, + &fw_info); + + if (SL_STATUS_OK == sc) { + self->deleting_fwid_len = evt->fwid.len; + self->deleting_fwid = sl_malloc(self->deleting_fwid_len); + + if (self->deleting_fwid != NULL) { + memcpy(self->deleting_fwid, evt->fwid.data, self->deleting_fwid_len); + + sc = delete_firmware(self, fw_info.index); + } else { + sc = SL_STATUS_ALLOCATION_FAILED; + log_error(LOG_PREFIX "Memory allocation failed! (elem=%d)" NL, + self->elem_index); + } + + if (SL_STATUS_OK == sc) { + self->deleting = true; + self->async_req_client_address = evt->client_address; + } else { + sc = sl_btmesh_fw_dist_server_delete_rsp(self->elem_index, + sl_btmesh_fw_dist_server_dist_status_internal_error, + evt->fwid.len, + evt->fwid.data); + } + } else { + log_status_error_f(sc, + LOG_PREFIX "FW delete failed %s (elem=%d,claddr=0x%04X)" NL, + (SL_STATUS_BT_MESH_DOES_NOT_EXIST == sc) + ? "because fwid was not found" + : "during fwid search", + evt->elem_index, + evt->client_address); + } +} + +static void handle_fw_delete_response(fw_dist_server_t *self, + sl_status_t erase_status) +{ + sl_status_t sc; + sl_btmesh_fw_dist_server_dist_status_t firmware_status = + sl_btmesh_fw_dist_server_dist_status_internal_error; + + if (SL_STATUS_OK == erase_status) { + sl_btmesh_fw_distribution_server_on_firmware_deleted( + self->elem_index, + self->async_req_client_address, + self->fw_list_nvm->current_fw_list_length, + self->capabilities->max_fw_list_length, + self->deleting_fwid, + self->deleting_fwid_len); + + log_info(LOG_PREFIX "FW deleted (elem=%d,claddr=0x%04X)" NL, + self->elem_index, + self->async_req_client_address); + + firmware_status = sl_btmesh_fw_dist_server_dist_status_success; + } + + // Respond to firmware delete request with status information + // The BT Mesh stack sends the Firmware Distribution Firmware Status message + // with the provided status information to the Distribution Client + sc = sl_btmesh_fw_dist_server_delete_rsp(self->elem_index, + firmware_status, + self->deleting_fwid_len, + self->deleting_fwid); + log_status_error_f(sc, + LOG_PREFIX "FW delete response failed (elem=%d,claddr=0x%04X)" NL, + self->elem_index, + self->async_req_client_address); + + self->deleting = false; + self->async_req_client_address = UINT16_MAX; + self->deleting_fwid_len = 0; + sl_free(self->deleting_fwid); + self->deleting_fwid = NULL; +} + +static sl_status_t fw_invalidate_all(fw_dist_server_t *const self) +{ + sl_status_t sc_fw_list, sc_storage; + + // Clear the firmware list in RAM and NVM + sc_fw_list = fw_list_delete_all(self); + + // Make every BLOB in the BLOB storage invalid which is faster than the delete + // all operation because the flash is only written and not erased. + sc_storage = sl_btmesh_blob_storage_invalidate_by_owner(BLOB_STORAGE_OWNER_ID_FW_DIST_SERVER); + + if ((SL_STATUS_OK == sc_storage) + && (SL_STATUS_OK == sc_fw_list)) { + // The whole BLOB storage was invalidated and the FW list in the NVM3 was + // deleted successfully which restores the state of these resources and + // therefore it fixes storage corruption as well + self->storage_corrupted = false; + + // The upper layer shall be notified through the following callback + sl_btmesh_fw_distribution_server_on_all_firmware_deleted(self->elem_index, + MESH_ADDR_UNASSIGNED, + self->capabilities->max_fw_list_length); + + log_info(LOG_PREFIX "all FWs are invalidated (elem=%d)" NL, + self->elem_index); + } else { + self->storage_corrupted = true; + log_status_error_f(sc_storage, + LOG_PREFIX "BLOB storage invalidate all failed (elem=%d)" NL, + self->elem_index); + + log_status_error_f(sc_fw_list, + LOG_PREFIX "FW list delete all failed (elem=%d)" NL, + self->elem_index); + } + + return (sc_fw_list != SL_STATUS_OK) ? sc_fw_list : sc_storage; +} + +static void handle_fw_delete_all_request( + const sl_btmesh_evt_fw_dist_server_fw_delete_all_req_t *const evt) +{ + sl_status_t sc_fw_list, sc_delete_req, sc_delete_rsp; + + fw_dist_server_t *self = find_server(evt->elem_index); + SERVER_STATUS_CHECK(self); + + if (self->deleting_all) { + sc_delete_rsp = sl_btmesh_fw_dist_server_delete_all_rsp(self->elem_index, + sl_btmesh_fw_dist_server_dist_status_internal_error); + + log_status_error_f(sc_delete_rsp, + LOG_PREFIX "FW delete all response failed (elem=%d,claddr=0x%04X)" NL, + evt->elem_index, + evt->client_address); + + return; + } + + log_info(LOG_PREFIX "FW delete all request (elem=%d,claddr=0x%04X)" NL, + evt->elem_index, + evt->client_address); + + sc_fw_list = fw_list_delete_all(self); + + log_status_error_f(sc_fw_list, + LOG_PREFIX "FW list delete all failed " + "(elem=%d,claddr=0x%04X)" NL, + evt->elem_index, + evt->client_address); + + // All storage slots are erased in BLOB storage + // Note: The erase is very slow 5s/10s for 1024kB Internal / SPI flash + sc_delete_req = sl_btmesh_blob_storage_delete_managed_by_owner_start(BLOB_STORAGE_OWNER_ID_FW_DIST_SERVER); + + log_status_error_f(sc_delete_req, + LOG_PREFIX "BLOB storage delete all failed " + "(elem=%d,claddr=0x%04X)" NL, + evt->elem_index, + evt->client_address); + + if (SL_STATUS_OK == sc_fw_list && SL_STATUS_OK == sc_delete_req) { + self->deleting_all = true; + self->async_req_client_address = evt->client_address; + } else { + sc_delete_rsp = sl_btmesh_fw_dist_server_delete_all_rsp(self->elem_index, + sl_btmesh_fw_dist_server_dist_status_internal_error); + + log_status_error_f(sc_delete_rsp, + LOG_PREFIX "FW delete all response failed (elem=%d,claddr=0x%04X)" NL, + evt->elem_index, + evt->client_address); + } +} + +static void handle_fw_delete_all_response(fw_dist_server_t *self, + sl_status_t erase_status) +{ + sl_status_t sc_delete_rsp; + sl_btmesh_fw_dist_server_dist_status_t firmware_status = + sl_btmesh_fw_dist_server_dist_status_internal_error; + + if ((SL_STATUS_OK == erase_status)) { + // The whole BLOB storage and the FW list in the NVM3 was deleted successfully + // which restores the original state of these resources and therefore it fixes + // storage corruption as well + self->storage_corrupted = false; + + // All Firmware were deleted so set the status to success + firmware_status = sl_btmesh_fw_dist_server_dist_status_success; + + // The upper layer shall be notified through the following callback + sl_btmesh_fw_distribution_server_on_all_firmware_deleted( + self->elem_index, + self->async_req_client_address, + self->capabilities->max_fw_list_length); + + log_info(LOG_PREFIX "all FWs are deleted (elem=%d,claddr=0x%04X)" NL, + self->elem_index, + self->async_req_client_address); + } else { + self->storage_corrupted = true; + } + + // Respond to firmware delete all request with status information + // The BT Mesh stack sends the Firmware Distribution Firmware Status message + // with the provided status information to the Distribution Client + sc_delete_rsp = sl_btmesh_fw_dist_server_delete_all_rsp(self->elem_index, + firmware_status); + log_status_error_f(sc_delete_rsp, + LOG_PREFIX "FW delete all response failed (elem=%d,claddr=0x%04X)" NL, + self->elem_index, + self->async_req_client_address); + + self->deleting_all = false; + self->async_req_client_address = UINT16_MAX; +} + +static void handle_blob_transfer_client_notification( + const sl_btmesh_blob_transfer_client_notification_t *const notification) +{ + fw_dist_server_t *const self = find_server(notification->elem_index); + SERVER_STATUS_CHECK(self); + app_assert_s(NULL != notification); + + // Ignore BLOB transfer client events in idle substates + if (0 == dist_state_flags[self->dist.state].idle) { + if (SL_BTMESH_BLOB_TRANSFER_CLIENT_KIND_PROGRESS == notification->kind) { + uint32_t confirmed_tx_bytes = notification->params.progress.confirmed_tx_bytes; + uint32_t blob_size = notification->params.progress.blob_size; + + log_info(LOG_PREFIX "distribution progress (%lu/%lu, %u%%)" NL, + confirmed_tx_bytes, + blob_size, + (unsigned) SL_PROG_TO_PCT_INT(blob_size, confirmed_tx_bytes)); + + sl_btmesh_fw_distribution_server_on_distribution_blob_progress_changed(self->elem_index, + confirmed_tx_bytes, + blob_size, + self->dist.node_count); + } + } else { + // This should not happen based on the state machine in the BT Mesh stack. + // If the event is not received in the expected state then it is ignored + // and a log message is emitted. + log_debug(LOG_PREFIX "unexpected BLOB Transfer Client notification " + "(elem=%d,state=%d)" NL, + self->elem_index, + self->upload.state); + } +} + +static sl_status_t dist_execute_step(fw_dist_server_t *const self) +{ + sl_status_t sc = sl_btmesh_fw_dist_server_execute_distribution_step(self->elem_index); + + if (SL_STATUS_OK == sc) { + log_info(LOG_PREFIX "execute %s step %s(elem=%d,nodes_active=%d/%d)" NL, + sl_btmesh_fw_distribution_server_distribution_state_to_string(self->dist.state), + self->dist.retry_time_elapsed ? "retry " : "", + self->elem_index, + self->dist.num_active_nodes, + self->dist.node_count); + } else { + log_status_error_f(sc, + LOG_PREFIX + "execute %s step %sfailed (elem=%d,nodes_active=%d/%d)" NL, + sl_btmesh_fw_distribution_server_distribution_state_to_string(self->dist.state), + self->dist.retry_time_elapsed ? "retry " : "", + self->elem_index, + self->dist.num_active_nodes, + self->dist.node_count); + } + return sc; +} + +static void dist_state_waiting_for_apply_entry(fw_dist_server_t *const self) +{ + (void) self; + log_info(LOG_PREFIX "waiting for apply (elem=%d,nodes_active=%d/%d)" NL, + self->elem_index, + self->dist.num_active_nodes, + self->dist.node_count); +} + +static void dist_state_transferring_image_start(fw_dist_server_t *const self) +{ + sl_status_t sc; + + // It is not necessary to call the sl_btmesh_blob_transfer_client_setup, + // because the distributor code in BT Mesh stack calls the setup function. + sc = sl_btmesh_blob_transfer_client_setup_data_provider_blob_storage(self->elem_index, + &self->dist.storage_blob_id); + if (SL_STATUS_OK != sc) { + log_status_error_f(sc, + LOG_PREFIX "BLOB Transfer start failed %s(elem=%d)" NL, + "because data provider setup failed ", + self->elem_index); + return; + } + + sc = sl_btmesh_blob_transfer_client_start(self->elem_index, + self->dist.transfer_mode, + handle_blob_transfer_client_notification); + + if (SL_STATUS_OK != sc) { + log_status_error_f(sc, + LOG_PREFIX "BLOB Transfer start failed %s(elem=%d)" NL, + "because blob transfer client start failed ", + self->elem_index); + return; + } + + self->dist.blob_transfer_started = true; + + log_info(LOG_PREFIX "BLOB Transfer is started (elem=%d,nodes_active=%d/%d)" NL, + self->elem_index, + self->dist.num_active_nodes, + self->dist.node_count); +} + +static void dist_state_transferring_image_resume(fw_dist_server_t *const self) +{ + sl_status_t sc = sl_btmesh_blob_transfer_client_on_resumed(self->elem_index); + log_status_error_f(sc, + LOG_PREFIX "BLOB Transfer Client resume error (elem=%d)" NL, + self->elem_index); +} + +static void dist_log_node_status(fw_dist_server_t *const self, + uint16_t node_idx) +{ + uint16_t address; + uint8_t retrieved_phase; + uint8_t update_server_status; + uint8_t mbt_server_status; + uint8_t transfer_progress; + uint8_t fw_index; + + sl_status_t sc = sl_btmesh_fw_dist_server_get_node_status_by_index(self->elem_index, + node_idx, + &address, + &retrieved_phase, + &update_server_status, + &mbt_server_status, + &transfer_progress, + &fw_index); + log_status_error_f(sc, + LOG_PREFIX "node failed event with non-existing node index " + "(elem=%d,index=0x%04X)" NL, + self->elem_index, + node_idx); + if (sc == SL_STATUS_OK) { + log_info(LOG_PREFIX "node status (addr=0x%04X,upd_fw_idx=%d,transfer_progress=%d," + "dist_phase=%d-%s,upd_status=%d-%s,blob_status=%d-%s)" NL, + address, + fw_index, + transfer_progress, + retrieved_phase, + sl_btmesh_fw_distribution_server_node_phase_to_string((sl_btmesh_fw_dist_server_dist_node_phase_t)retrieved_phase), + update_server_status, + sl_btmesh_fw_distribution_server_firmware_update_status_to_string((sl_btmesh_fw_update_server_update_status_t)update_server_status), + mbt_server_status, + sl_btmesh_blob_transfer_client_mbt_status_to_string((sl_btmesh_mbt_server_status_t)mbt_server_status)); + } +} + +static void dist_log_all_node_status(fw_dist_server_t *const self) +{ + for (uint16_t node_idx = 0; node_idx < self->dist.node_count; ++node_idx) { + dist_log_node_status(self, node_idx); + } +} + +static void dist_state_suspended_entry(fw_dist_server_t *const self) +{ + sl_status_t sc = sl_btmesh_blob_transfer_client_on_suspended(self->elem_index); + log_status_error_f(sc, + LOG_PREFIX "BLOB Transfer Client suspend error (elem=%d)" NL, + self->elem_index); +} + +static void dist_state_completed_entry(fw_dist_server_t *const self) +{ + log_info(LOG_PREFIX "distribution is completed (elem=%d,nodes_active=%d/%d)" NL, + self->elem_index, + self->dist.num_active_nodes, + self->dist.node_count); + + dist_log_all_node_status(self); +} + +static void dist_state_failed_entry(fw_dist_server_t *const self) +{ + log_info(LOG_PREFIX "distribution has failed (elem=%d,nodes_active=%d/%d)" NL, + self->elem_index, + self->dist.num_active_nodes, + self->dist.node_count); + + dist_log_all_node_status(self); +} + +static void dist_state_idle_entry(fw_dist_server_t *const self) +{ + (void) self; + log_info(LOG_PREFIX "idle state is entered (elem=%d)" NL, + self->elem_index); +} + +static void dist_state_transition(fw_dist_server_t *const self, + const sl_btmesh_fw_dist_server_dist_step_t target_state) +{ + app_assert_s(target_state < ARRAY_LEN(dist_state_flags)); + + sl_btmesh_fw_dist_server_dist_step_t source_state = self->dist.state; + dist_state_flags_t source_state_flags = dist_state_flags[source_state]; + dist_state_flags_t target_state_flags = dist_state_flags[target_state]; + + if (0 != source_state_flags.retry) { + // If a state with retry support is left then the retry timer is stopped + dist_stop_retry_timer(self); + } + + self->dist.state = target_state; + + if ((0 == source_state_flags.idle) + && (0 != target_state_flags.idle)) { + // If any of the idle sub-states are entered from a non-idle state, then + // the idle entry function is called. + dist_super_state_idle_entry(self); + } + + if (target_state != source_state) { + log_debug(LOG_PREFIX "state change to %d-%s (elem=%d)" NL, + target_state, + sl_btmesh_fw_distribution_server_distribution_state_to_string(target_state), + self->elem_index); + + if (0 != target_state_flags.retry) { + // If a new state with retry support is entered, then the retry counter + // shall be set to zero, because the retries are counted in each state + // separately + self->dist.retry_counter = 0; + } + } + + if (0 != target_state_flags.execute_step) { + // Execute distribution step to send the state specific BT Mesh messages to + // the updating nodes. (Firmware Update Start/Cancel/Get/Apply/Information Get) + // The execute distribution check could fail if it called from the wrong state. + // This could happen if the retry self-transition occurs when the distribution + // server has just changed state but the distribution server SDK component + // has not processed the sl_btmesh_evt_fw_dist_server_dist_state_changed + // event yet. + // Note: This race condition exists because the retries are called by the + // simple timer while each sl_btmesh_step processes one event in each + // loop so the issue can occur if the BT Mesh stack generates multiple + // events and the simple timer elapses. This is a very rare issue. + // If the distribution step execution fails then it is a good strategy to + // continue and start the retry timer. If the problem is temporary then the + // retry call may recover the distribution process otherwise the distribution + // server model will timeout in the BT Mesh stack which is reported to this + // component by sl_btmesh_evt_fw_dist_server_dist_state_changed event. + // The errors are logged in the function so the return value is suppressed. + (void) dist_execute_step(self); + } else { + switch (target_state) { + case sl_btmesh_fw_dist_server_dist_step_transferring_image: { + if (false == self->dist.blob_transfer_started) { + dist_state_transferring_image_start(self); + } else { + dist_state_transferring_image_resume(self); + } + break; + } + case sl_btmesh_fw_dist_server_dist_step_waiting_for_apply: { + dist_state_waiting_for_apply_entry(self); + break; + } + case sl_btmesh_fw_dist_server_dist_step_suspended: { + dist_state_suspended_entry(self); + break; + } + case sl_btmesh_fw_dist_server_dist_step_completed: { + dist_state_completed_entry(self); + break; + } + case sl_btmesh_fw_dist_server_dist_step_failed: { + dist_state_failed_entry(self); + break; + } + case sl_btmesh_fw_dist_server_dist_step_idle: { + dist_state_idle_entry(self); + break; + } + default: + // No other state needs to be processed + break; + } + } + + if (0 != target_state_flags.retry) { + self->dist.retry_counter++; + self->dist.retry_time_elapsed = false; + dist_start_retry_timer(self); + } +} + +static void upload_state_transition(fw_dist_server_t *const self, + const upload_state_t target_state) +{ + app_assert_s(target_state < UPLOAD_STATE_COUNT); + const upload_state_t source_state = self->upload.state; + if ((upload_state_flags[source_state].idle == 0) + && (upload_state_flags[target_state].idle != 0)) { + // If the upload state machine transitions from a non-idle substate to an idle + // substate then the FW descriptor shall be deallocated + // Note: FW descriptor can be NULL when the upload is successful and + // therefore it is appended to the FW list. The metadata might be NULL + // because it is not mandatory but in that case the sl_free is a no-operation. + if (self->upload.fw_descriptor != NULL) { + sl_free(self->upload.fw_descriptor->metadata); + } + sl_free(self->upload.fw_descriptor); + self->upload.fw_descriptor = NULL; + } + self->upload.state = target_state; +} + +// Called to generate BLOB ID for firmware distribution +SL_WEAK sl_status_t +sl_btmesh_fw_distribution_server_generate_blob_id(sl_bt_uuid_64_t *blob_id) +{ + sl_status_t sc; + if (blob_id == NULL) { + sc = SL_STATUS_NULL_POINTER; + } else { + size_t bytes_written; + sc = sl_bt_system_get_random_data(sizeof(blob_id->data), + sizeof(blob_id->data), + &bytes_written, + blob_id->data); + + if ((sc == SL_STATUS_OK) && (bytes_written != sizeof(blob_id->data))) { + sc = SL_STATUS_FAIL; + } + } + return sc; +} + +// Called when receiver updating node is added to the firmware distribution list +SL_WEAK void +sl_btmesh_fw_distribution_server_on_node_added(uint16_t elem_index, + uint16_t server_address, + uint8_t update_fw_image_idx, + uint16_t node_count) +{ + (void) elem_index; + (void) server_address; + (void) update_fw_image_idx; + (void) node_count; +} + +// Called when all receiver updating nodes are deleted from the firmware +// distribution list +SL_WEAK void +sl_btmesh_fw_distribution_server_on_all_nodes_deleted(uint16_t elem_index) +{ + (void) elem_index; +} + +// Called when firmware distribution is started +SL_WEAK void +sl_btmesh_fw_distribution_server_on_distribution_started(uint16_t elem_index, + uint16_t client_address, + uint16_t group_address, + uint8_t ttl, + sl_btmesh_fw_dist_server_dfu_policy_t update_policy, + uint16_t fw_list_index, + uint16_t timeout_base, + sl_btmesh_mbt_client_transfer_mode_t transfer_mode, + uint16_t node_count) +{ + (void) elem_index; + (void) client_address; + (void) group_address; + (void) ttl; + (void) update_policy; + (void) fw_list_index; + (void) timeout_base; + (void) transfer_mode; + (void) node_count; +} + +// Called when firmware distribution is canceled +SL_WEAK void +sl_btmesh_fw_distribution_server_on_distribution_canceled(uint16_t elem_index, + uint16_t client_address) +{ + (void) elem_index; + (void) client_address; +} + +// Called when firmware distribution is suspended +SL_WEAK void +sl_btmesh_fw_distribution_server_on_distribution_suspended(uint16_t elem_index, + uint16_t client_address) +{ + (void) elem_index; + (void) client_address; +} + +// Called when firmware distribution is resumed +SL_WEAK void +sl_btmesh_fw_distribution_server_on_distribution_resumed(uint16_t elem_index, + uint16_t client_address, + uint16_t group_address, + uint8_t ttl, + sl_btmesh_fw_dist_server_dfu_policy_t update_policy, + uint16_t fw_list_index, + uint16_t timeout_base, + sl_btmesh_mbt_client_transfer_mode_t transfer_mode, + uint16_t node_count) +{ + (void) elem_index; + (void) client_address; + (void) group_address; + (void) ttl; + (void) update_policy; + (void) fw_list_index; + (void) timeout_base; + (void) transfer_mode; + (void) node_count; +} + +// Called when firmware distribution state is changed +SL_WEAK void +sl_btmesh_fw_distribution_server_on_distribution_state_changed(uint16_t elem_index, + sl_btmesh_fw_dist_server_dist_step_t state, + uint16_t num_active_nodes, + uint16_t node_count) +{ + (void) elem_index; + (void) state; + (void) num_active_nodes; + (void) node_count; +} + +// Called when progress of BLOB transfer step during the firmware distribution +// is changed +SL_WEAK void +sl_btmesh_fw_distribution_server_on_distribution_blob_progress_changed(uint16_t elem_index, + uint32_t confirmed_tx_bytes, + uint32_t blob_size, + uint16_t node_count) +{ + (void) elem_index; + (void) confirmed_tx_bytes; + (void) blob_size; + (void) node_count; +} + +// Called when an Updating Node fails during the distribution +SL_WEAK void +sl_btmesh_fw_distribution_server_on_distribution_node_failed(uint16_t elem_index, + uint16_t server_address, + sl_btmesh_fw_dist_server_dist_node_phase_t update_phase, + sl_btmesh_fw_update_server_update_status_t update_status, + uint8_t mbt_status, + uint8_t progress, + uint8_t fw_index, + uint16_t num_active_nodes, + uint16_t node_count) +{ + (void) elem_index; + (void) server_address; + (void) update_phase; + (void) update_status; + (void) mbt_status; + (void) progress; + (void) fw_index; + (void) num_active_nodes; + (void) node_count; +} + +// Called when firmware is added to the Distributor +SL_WEAK void +sl_btmesh_fw_distribution_server_on_firmware_added(uint16_t elem_index, + uint16_t client_address, + uint32_t fw_size, + uint16_t fw_list_idx, + uint16_t current_fw_list_length, + uint16_t max_fw_list_length, + const uint8_t *fwid, + uint8_t fwid_length) +{ + (void) elem_index; + (void) client_address; + (void) fw_size; + (void) fw_list_idx; + (void) current_fw_list_length; + (void) max_fw_list_length; + (void) fwid; + (void) fwid_length; +} + +// Called when a firmware is deleted from the Distributor +SL_WEAK void +sl_btmesh_fw_distribution_server_on_firmware_deleted(uint16_t elem_index, + uint16_t client_address, + uint16_t current_fw_list_length, + uint16_t max_fw_list_length, + const uint8_t *fwid, + uint8_t fwid_length) +{ + (void) elem_index; + (void) client_address; + (void) current_fw_list_length; + (void) max_fw_list_length; + (void) fwid; + (void) fwid_length; +} + +// Called when ALL firmwares are deleted from the Distributor +SL_WEAK void +sl_btmesh_fw_distribution_server_on_all_firmware_deleted(uint16_t elem_index, + uint16_t client_address, + uint16_t max_fw_list_length) +{ + (void) elem_index; + (void) client_address; + (void) max_fw_list_length; +} + +sl_status_t mesh_platform_dfu_dist_server_get_fw_count(size_t element_index, + uint16_t *count) +{ + sl_status_t sc; + fw_dist_server_t *self = find_server(element_index); + sc = SERVER_STATUS_GET(self, SL_STATUS_INVALID_STATE); + + if (sc == SL_STATUS_OK) { + if (count == NULL) { + sc = SL_STATUS_NULL_POINTER; + } else if (self->storage_corrupted != false) { + // The FW delete all event is triggered only when the firmware count is + // non-zero. If the storage is corrupted then the FW delete all event is + // used to clean the NVM and BLOB storage to recover from corrupted + // storage state. + *count = 1; + sc = SL_STATUS_FAIL; + } else { + // If count is not set then the BT Mesh stack uses zero as a default value + *count = self->fw_list_nvm->current_fw_list_length; + } + } + + log_btmesh_platform_cb(LOG_PREFIX "%s(elem=%d)->(sc=0x%04lx,count=%u)" NL, + __func__, + element_index, + sc, + self->fw_list_nvm->current_fw_list_length); + return sc; +} + +sl_status_t mesh_platform_dfu_dist_server_get_remaining_space(size_t element_index, uint32_t *bytes) +{ + sl_status_t sc; + uint32_t remaining_upload_space = 0; + fw_dist_server_t *self = find_server(element_index); + + sc = SERVER_STATUS_GET(self, SL_STATUS_INVALID_STATE); + + if (sc == SL_STATUS_OK) { + if (NULL == bytes) { + sc = SL_STATUS_NULL_POINTER; + } else if (self->storage_corrupted != false) { + *bytes = 0; + sc = SL_STATUS_FAIL; + } else { + // If bytes is not set then the BT Mesh stack uses zero as a default value + remaining_upload_space = calc_fw_storage_remaining_upload_space(self); + *bytes = remaining_upload_space; + } + } + + log_btmesh_platform_cb(LOG_PREFIX "%s(elem=%d)->(sc=0x%04lx,bytes=%lu)" NL, + __func__, + element_index, + sc, + remaining_upload_space); + return sc; +} + +sl_status_t sli_btmesh_fw_dist_server_get_fw_by_index(uint16_t element_index, + uint16_t fw_index, + mesh_dfu_dist_server_fw_info_t *info) +{ + sl_status_t sc; + fw_dist_server_t *self = find_server(element_index); + SERVER_STATUS_CHECK(self, SL_STATUS_INVALID_STATE); + + sc = fw_list_get_fw_info_by_index(self, fw_index, FW_BLOB_SELECTOR_STORAGE, info); + + return sc; +} + +sl_status_t mesh_platform_dfu_dist_server_get_fw_by_index(size_t element_index, + uint16_t fw_index, + mesh_dfu_dist_server_fw_info_t *info) +{ + sl_status_t sc; + fw_dist_server_t *self = find_server(element_index); + SERVER_STATUS_CHECK(self, SL_STATUS_INVALID_STATE); + + sc = fw_list_get_fw_info_by_index(self, fw_index, FW_BLOB_SELECTOR_CURRENT, info); + +#if (SL_BTMESH_FW_DIST_SERVER_PLATFORM_CALLBACK_LOGGING_CFG_VAL != 0) + log_debug(LOG_PREFIX "%s(elem=%d,fw_list_idx=%u)->", __func__, element_index, fw_index); + if ((sc != SL_STATUS_OK) || (info == NULL)) { + log_append_debug("(sc=0x%04lx)" NL, sc); + } else { + log_append_debug("(sc=0x%04lx,size=%lu,fwid=", sc, info->size); + log_fwid_level(APP_LOG_LEVEL_DEBUG, info->p_fwid, info->fwid_len, SL_BTMESH_FW_DIST_SERVER_FWID_METADATA_LOG_FORMAT_HEX); + log_append_debug(",metadata="); + log_metadata_level(APP_LOG_LEVEL_DEBUG, info->p_metadata, info->metadata_len, SL_BTMESH_FW_DIST_SERVER_FWID_METADATA_LOG_FORMAT_HEX); + log_append_debug(")" NL); + } +#endif + + return sc; +} + +sl_status_t mesh_platform_dfu_dist_server_get_fw_by_fwid(size_t element_index, + uint8_t fwid_len, + const uint8_t *fwid, + mesh_dfu_dist_server_fw_info_t *info) +{ + sl_status_t sc; + fw_dist_server_t *self = find_server(element_index); + SERVER_STATUS_CHECK(self, SL_STATUS_INVALID_STATE); + + sc = fw_list_get_fw_info_by_fwid(self, fwid, fwid_len, FW_BLOB_SELECTOR_CURRENT, info); + +#if (SL_BTMESH_FW_DIST_SERVER_PLATFORM_CALLBACK_LOGGING_CFG_VAL != 0) + log_debug(LOG_PREFIX "%s(elem=%d,fwid=", __func__, element_index); + log_fwid_level(APP_LOG_LEVEL_DEBUG, fwid, fwid_len, SL_BTMESH_FW_DIST_SERVER_FWID_METADATA_LOG_FORMAT_HEX); + if ((sc != SL_STATUS_OK) || (info == NULL)) { + log_append_debug(")->(sc=0x%04lx)" NL, sc); + } else { + log_append_debug(")->(sc=0x%04lx,fw_list_idx=%u,size=%lu,metadata=", + sc, + info->index, + (unsigned long) info->size); + log_metadata_level(APP_LOG_LEVEL_DEBUG, info->p_metadata, info->metadata_len, SL_BTMESH_FW_DIST_SERVER_FWID_METADATA_LOG_FORMAT_HEX); + log_append_debug(")" NL); + } +#endif + + return sc; +} + +// Set the multicast threshold value. +sl_status_t sl_btmesh_fw_distribution_server_set_multicast_threshold(uint16_t elem_index, + uint16_t multicast_threshold) +{ + return sl_btmesh_fw_dist_server_set_multicast_threshold(elem_index, + multicast_threshold); +} + +void sl_btmesh_fw_distribution_server_delete_step_handle(void) +{ + uint16_t element_index = 0; + do { + fw_dist_server_t *self = find_server(element_index); + SERVER_STATUS_CHECK(self); + + if (self->deleting_all) { + sl_btmesh_blob_storage_delete_state_t error_code = + sl_btmesh_blob_storage_get_erase_error_code(); + switch (error_code) { + case SL_BTMESH_BLOB_STORAGE_DELETE_FAILED: + handle_fw_delete_all_response(self, SL_STATUS_FLASH_ERASE_FAILED); + break; + case SL_BTMESH_BLOB_STORAGE_DELETE_SUCCESS: + case SL_BTMESH_BLOB_STORAGE_DELETE_INACTIVE: + // If all BLOBs owned by the distributor were deleted successfully or + // no BLOBs owned by the distributor were present in BLOB storage + handle_fw_delete_all_response(self, SL_STATUS_OK); + break; + default: + // BLOB erase is either inactive or busy + break; + } + } + if (self->deleting) { + sl_btmesh_blob_storage_delete_state_t error_code = + sl_btmesh_blob_storage_get_erase_error_code(); + switch (error_code) { + case SL_BTMESH_BLOB_STORAGE_DELETE_FAILED: + case SL_BTMESH_BLOB_STORAGE_DELETE_INACTIVE: + // If the BLOB delete failed or the BLOB was not found in BLOB storage + // FW delete needs to delete a specific BLOB so if that is not found + // then it is considered as an error + handle_fw_delete_response(self, SL_STATUS_FLASH_ERASE_FAILED); + break; + case SL_BTMESH_BLOB_STORAGE_DELETE_SUCCESS: + handle_fw_delete_response(self, SL_STATUS_OK); + break; + default: + // BLOB erase is either inactive or busy + break; + } + } + // Should return much-much earlier, but this is a very rudimentary fail-safe + } while (element_index++ < UINT16_MAX); +} + +// Handle Firmware Distribution Server events +void sl_btmesh_fw_distribution_server_on_event(const sl_btmesh_msg_t *const evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_provisioned_id: { + sl_btmesh_fw_distribution_server_init(); + break; + } + case sl_btmesh_evt_node_initialized_id: { + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_fw_distribution_server_init(); + } + break; + } + case sl_btmesh_evt_fw_dist_server_nodes_added_id: { + handle_nodes_added(&evt->data.evt_fw_dist_server_nodes_added); + break; + } + case sl_btmesh_evt_fw_dist_server_nodes_deleted_id: { + handle_nodes_deleted(&evt->data.evt_fw_dist_server_nodes_deleted); + break; + } + case sl_btmesh_evt_fw_dist_server_dist_start_req_id: { + handle_dist_start_request(&evt->data.evt_fw_dist_server_dist_start_req); + break; + } + case sl_btmesh_evt_fw_dist_server_dist_cancel_id: { + handle_dist_cancel(&evt->data.evt_fw_dist_server_dist_cancel); + break; + } + case sl_btmesh_evt_fw_dist_server_dist_state_changed_id: { + handle_dist_state_changed( + &evt->data.evt_fw_dist_server_dist_state_changed); + break; + } + case sl_btmesh_evt_fw_dist_server_node_failed_id: { + handle_dist_server_node_failed(&evt->data.evt_fw_dist_server_node_failed); + break; + } + case sl_btmesh_evt_fw_dist_server_upload_start_metadata_id: { + handle_upload_start_metadata( + &evt->data.evt_fw_dist_server_upload_start_metadata); + break; + } + case sl_btmesh_evt_fw_dist_server_upload_start_req_id: { + handle_upload_start_request( + &evt->data.evt_fw_dist_server_upload_start_req); + break; + } + case sl_btmesh_evt_fw_dist_server_upload_cancel_id: { + handle_upload_cancel(&evt->data.evt_fw_dist_server_upload_cancel); + break; + } + case sl_btmesh_evt_fw_dist_server_upload_complete_metadata_id: { + handle_upload_complete_metadata( + &evt->data.evt_fw_dist_server_upload_complete_metadata); + break; + } + case sl_btmesh_evt_fw_dist_server_upload_complete_id: { + handle_upload_complete(&evt->data.evt_fw_dist_server_upload_complete); + break; + } + case sl_btmesh_evt_fw_dist_server_upload_failed_id: { + handle_upload_failed(&evt->data.evt_fw_dist_server_upload_failed); + break; + } + case sl_btmesh_evt_fw_dist_server_fw_delete_req_id: { + handle_fw_delete_request(&evt->data.evt_fw_dist_server_fw_delete_req); + break; + } + case sl_btmesh_evt_fw_dist_server_fw_delete_all_req_id: { + handle_fw_delete_all_request(&evt->data.evt_fw_dist_server_fw_delete_all_req); + break; + } + case sl_btmesh_evt_fw_dist_server_dist_suspend_id: { + handle_dist_suspend(&evt->data.evt_fw_dist_server_dist_suspend); + break; + } + case sl_btmesh_evt_fw_dist_server_resume_req_id: { + handle_dist_resume_request(&evt->data.evt_fw_dist_server_resume_req); + break; + } + } +} + +// Provides the string representation of distribution state +const char *sl_btmesh_fw_distribution_server_distribution_state_to_string(sl_btmesh_fw_dist_server_dist_step_t state) +{ + switch (state) { + case sl_btmesh_fw_dist_server_dist_step_idle: + return "Idle"; + case sl_btmesh_fw_dist_server_dist_step_starting_update: + return "Starting Update"; + case sl_btmesh_fw_dist_server_dist_step_transferring_image: + return "Transfer Image"; + case sl_btmesh_fw_dist_server_dist_step_checking_verification: + return "Checking Verification"; + case sl_btmesh_fw_dist_server_dist_step_waiting_for_apply: + return "Waiting for Apply"; + case sl_btmesh_fw_dist_server_dist_step_applying_update: + return "Apply Update"; + case sl_btmesh_fw_dist_server_dist_step_checking_update_result: + return "Check Update Result"; + case sl_btmesh_fw_dist_server_dist_step_completed: + return "Completed"; + case sl_btmesh_fw_dist_server_dist_step_failed: + return "Failed"; + case sl_btmesh_fw_dist_server_dist_step_cancelling: + return "Canceling"; + case sl_btmesh_fw_dist_server_dist_step_suspended: + return "Suspended"; + default: + return "INVALID"; + } +} + +// Provides the string representation of firmware update phase +const char *sl_btmesh_fw_distribution_server_node_phase_to_string(sl_btmesh_fw_dist_server_dist_node_phase_t node_phase) +{ + switch (node_phase) { + case sl_btmesh_fw_dist_server_dist_node_phase_idle: + return "idle"; + case sl_btmesh_fw_dist_server_dist_node_phase_transfer_error: + return "transfer error"; + case sl_btmesh_fw_dist_server_dist_node_phase_transfer_in_progress: + return "transfer in progress"; + case sl_btmesh_fw_dist_server_dist_node_phase_verifying_update: + return "verifying update"; + case sl_btmesh_fw_dist_server_dist_node_phase_verification_success: + return "verification success"; + case sl_btmesh_fw_dist_server_dist_node_phase_verification_failed: + return "verification failed"; + case sl_btmesh_fw_dist_server_dist_node_phase_apply_in_progress: + return "apply in progress"; + case sl_btmesh_fw_dist_server_dist_node_phase_transfer_cancelled: + return "transfer cancelled"; + case sl_btmesh_fw_dist_server_dist_node_phase_apply_success: + return "apply success"; + case sl_btmesh_fw_dist_server_dist_node_phase_apply_failed: + return "apply failed"; + case sl_btmesh_fw_dist_server_dist_node_phase_unknown: + return "unknown"; + default: + return "INVALID"; + } +} + +// Provides the string representation of node firmware update status +const char *sl_btmesh_fw_distribution_server_firmware_update_status_to_string(sl_btmesh_fw_update_server_update_status_t update_server_status) +{ + switch (update_server_status) { + case sl_btmesh_fw_update_server_update_status_success: + return "success"; + case sl_btmesh_fw_update_server_update_status_out_of_resources: + return "out of resources"; + case sl_btmesh_fw_update_server_update_status_wrong_phase: + return "wrong phase"; + case sl_btmesh_fw_update_server_update_status_internal_error: + return "internal error"; + case sl_btmesh_fw_update_server_update_status_wrong_fw_index: + return "wrong fw index"; + case sl_btmesh_fw_update_server_update_status_metadata_check_failed: + return "metadata check failed"; + case sl_btmesh_fw_update_server_update_status_temporarily_unable: + return "temporarily unavailable"; + case sl_btmesh_fw_update_server_update_status_blob_transfer_busy: + return "BLOB transfer busy"; + default: + return "INVALID"; + } +} +/** @} end dist_server */ diff --git a/app/btmesh/common/btmesh_fw_distribution_server/sl_btmesh_fw_distribution_server.h b/app/btmesh/common/btmesh_fw_distribution_server/sl_btmesh_fw_distribution_server.h new file mode 100644 index 00000000000..996c4b004a3 --- /dev/null +++ b/app/btmesh/common/btmesh_fw_distribution_server/sl_btmesh_fw_distribution_server.h @@ -0,0 +1,464 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Firmware Distribution Server + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_FW_DISTRIBUTION_SERVER_H +#define SL_BTMESH_FW_DISTRIBUTION_SERVER_H + +#include "sl_btmesh_api.h" + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * @addtogroup dist_server BT Mesh Firmware Distribution Server + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Set the multicast threshold value + * + * The FW Distribution Server BT Mesh stack model caches the value of multicast + * threshold when the distribution is started and it passes the value to the MBT + * Client model (BLOB Transfer Client) in BT Mesh stack when the BLOB transfer + * is started. If the number of servers for any step exceeds or equal to this + * number then the group address will be used, otherwise the servers will be + * looped through one by one. Value of 0 disables the feature. + * + * The MBT Client BT Mesh stack model tracks the number of servers which it needs + * to send specific messages to. + * It tracks for each server if the proper status message is received from the + * server in case of BLOB Information Get, BLOB Transfer Start, BLOB Block Start + * and BLOB Block Get messages. If some servers don't receive these BLOB messages + * or the response status messages are lost due to interference then the retry + * logic in BLOB Transfer Client SDK component requests to send the necessary + * BLOB messages to the servers by calling the proper MBT Client API again. + * If number of servers with missing status messages exceeds or equal to the + * multicast threshold value then the mentioned messages are sent to the group + * address, otherwise servers will be looped through one by one. + * + * The tracking of successful reception of Chunk Transfer Messages are different + * because these are tracked by block status procedure in case of push transfer + * mode or by partial block report procedure in case of pull transfer mode. + * + * The advantage of multicast messages is that the client needs to send one + * message only to the servers which is much faster if the number of servers + * which haven't received the message is high. This is especially true for chunk + * transfer because Chunk Transfer messages can be quite big and there are + * quite many of them in the BLOB Transfer. + * + * The advantage of unicast addressing in case of non-chunk messages is that only + * those server respond with status messages which really need to. This can have + * significant effect when the node count is high. + * For example if there are hundreds of nodes in the BLOB transfer then each + * group message triggers hundreds of status messages even when only some status + * messages from specific servers are missing on the client side. + * The transport layer uses segment acknowledgment for segmented unicast mesh + * messages which improves the reliability of segmented message transfer + * especially when the number of segments are high but it tends to be slower + * because the segment acknowledgment messages needs to be waited. + * + * @warning The MBT client stack model allocates and sends all unicast BLOB + * messages to each server at the same time below the multicast threshold. + * This could lead to exhaustive buffer allocation and the maximum number of + * parallel segmented messages can be exceeded as well in case of high + * multicast threshold level. The multicast threshold shall not be greater + * than SL_BTMESH_CONFIG_MAX_SEND_SEGS from sl_btmesh_config.h. + * + * @note The multicast threshold shall be set when the distribution is started + * (or before) in order to have an effect on the BLOB transfer otherwise it + * affects the next transfer only. The multicast threshold can be set in + * @ref sl_btmesh_fw_distribution_server_on_distribution_started callback as + * well to tune it to the specific FW distribution. + * + * @param elem_index Distribution Server model element index + * @param multicast_threshold If the number of servers for any step exceeds or + * is equal to this number then the group address will be used, otherwise + * servers will be looped through one by one. + * Value of 0 disables the feature. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_distribution_server_set_multicast_threshold(uint16_t elem_index, + uint16_t multicast_threshold); + +/***************************************************************************//** + * Handle Firmware Distribution Server events + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_event(const sl_btmesh_msg_t *const evt); + +/***************************************************************************//** + * Provides string representations of Distribution states + * + * @param[in] state Distribution state + * + * @return String representation of distribution state + * @retval "INVALID" if the state is invalid + ******************************************************************************/ +const char* sl_btmesh_fw_distribution_server_distribution_state_to_string(sl_btmesh_fw_dist_server_dist_step_t state); + +/***************************************************************************//** + * Provides string representations of Firmware Update phase + * + * @param[in] node_phase Phase of Firmware Update Server on Updating Node + * + * @return String representation of node update phase + * @retval "INVALID" if the node_phase is invalid + ******************************************************************************/ +const char* sl_btmesh_fw_distribution_server_node_phase_to_string(sl_btmesh_fw_dist_server_dist_node_phase_t node_phase); + +/***************************************************************************//** + * Provides string representations of Firmware Update status + * + * @param[in] node_status Status of Firmware Update Server on Updating Node + * + * @return String representation of node's firmware update status + * @retval "INVALID" if the node_status is invalid + ******************************************************************************/ +const char* sl_btmesh_fw_distribution_server_firmware_update_status_to_string(sl_btmesh_fw_update_server_update_status_t node_status); + +// ----------------------------------------------------------------------------- +// Overridable Callback Functions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Called to generate BLOB ID for firmware distribution + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application then a default weak + * implementation is provided which uses the sl_bt_system_get_random_data + * BT stack API to generate random bytes for BLOB identifier. + * + * @param[out] blob_id Pointer to blob_id where the generated bytes shall be stored + * + * @return Status of BLOB id generation. If it is not SL_STATUS_OK then the + * firmware distribution server component uses the storage BLOB id for the + * firmware distribution. The storage BLOB id was used during firmware upload. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_distribution_server_generate_blob_id(sl_bt_uuid_64_t *blob_id); + +/***************************************************************************//** + * Called when a receiver updating node is added to the firmware distribution + * list + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] elem_index Distribution server model element index + * @param[in] server_address Unicast address of the added updating node + * @param[in] update_fw_image_idx Firmware image index on Updating node to be + * updated during the distribution + * @param[in] node_count Total number of updating nodes which participates in + * the firmware distribution (including this new one) + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_node_added(uint16_t elem_index, + uint16_t server_address, + uint8_t update_fw_image_idx, + uint16_t node_count); + +/***************************************************************************//** + * Called when all receiver updating nodes are deleted from the firmware + * distribution list + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] elem_index Distribution server model element index + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_all_nodes_deleted(uint16_t elem_index); + +/***************************************************************************//** + * Called when firmware distribution is started + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * The @ref sl_btmesh_fw_distribution_server_set_multicast_threshold function + * can be called from this callback to set the multicast threshold value for + * the current distribution. + * + * @param[in] elem_index Distribution server model element index + * @param[in] client_address Address of the Distribution Client + * @param[in] group_address Group address of the distribution + * @param[in] ttl Distribution TTL + * @param[in] update_policy 1 if the Update Policy is Verify and Apply, otherwise 0 + * @param[in] fw_list_index Index of the firmware in the Distributor's FW List + * @param[in] timeout_base Timeout base + * @param[in] transfer_mode Transfer Mode to use in the distribution + * @param[in] node_count Total number of updating nodes which participates in + * the firmware distribution + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_distribution_started(uint16_t elem_index, + uint16_t client_address, + uint16_t group_address, + uint8_t ttl, + sl_btmesh_fw_dist_server_dfu_policy_t update_policy, + uint16_t fw_list_index, + uint16_t timeout_base, + sl_btmesh_mbt_client_transfer_mode_t transfer_mode, + uint16_t node_count); + +/***************************************************************************//** + * Called when firmware distribution is canceled + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] elem_index Distribution server model element index + * @param[in] client_address Address of the Distribution Client + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_distribution_canceled(uint16_t elem_index, + uint16_t client_address); + +/***************************************************************************//** + * Called when firmware distribution is suspended + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] elem_index Distribution server model element index + * @param[in] client_address Address of the Distribution Client + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_distribution_suspended(uint16_t elem_index, + uint16_t client_address); + +/***************************************************************************//** + * Called when firmware distribution is suspended + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] elem_index Distribution server model element index + * @param[in] client_address Address of the Distribution Client + * @param[in] group_address Group address of the distribution + * @param[in] ttl Distribution TTL + * @param[in] update_policy 1 if the Update Policy is Verify and Apply, otherwise 0 + * @param[in] fw_list_index Index of the firmware in the Distributor's FW List + * @param[in] timeout_base Timeout base + * @param[in] transfer_mode Transfer Mode to use in the distribution + * @param[in] node_count Total number of updating nodes which participates in + * the firmware distribution + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_distribution_resumed(uint16_t elem_index, + uint16_t client_address, + uint16_t group_address, + uint8_t ttl, + sl_btmesh_fw_dist_server_dfu_policy_t update_policy, + uint16_t fw_list_index, + uint16_t timeout_base, + sl_btmesh_mbt_client_transfer_mode_t transfer_mode, + uint16_t node_count); + +/***************************************************************************//** + * Called when firmware distribution state has changed + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] elem_index Distribution server model element index + * @param[in] state Distribution state + * @param[in] num_active_nodes Number of updating nodes which are still active + * @param[in] node_count Total number of updating nodes + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_distribution_state_changed(uint16_t elem_index, + sl_btmesh_fw_dist_server_dist_step_t state, + uint16_t num_active_nodes, + uint16_t node_count); + +/***************************************************************************//** + * Called when progress of BLOB transfer step during the firmware distribution + * has changed + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] elem_index Distribution server model element index + * @param[in] confirmed_tx_bytes Number of BLOB bytes which are received by + * every active BLOB Transfer Server. The progress is calculated at the end + * of the blocks because in a block some chunks could be retransmitted + * multiple times. + * @param[in] blob_size Size of the BLOB + * @param[in] node_count Number of updating nodes + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_distribution_blob_progress_changed(uint16_t elem_index, + uint32_t confirmed_tx_bytes, + uint32_t blob_size, + uint16_t node_count); + +/***************************************************************************//** + * Called when an Updating Node fails during the distribution + * + * If one node fails during the distribution, it does not mean, that the + * distribution fails as well. The distribution only fails, when every Updating + * Node fails. + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] elem_index Distribution server model element index + * @param[in] server_address Unicast address of the failed Updating Node + * @param[in] update_phase Update Phase of Firmware Update Server on Updating Node + * @param[in] update_status Update Status of Firmware Update Server on Updating Node + * If the firmware update of the node fails due to Firmware Update Server related + * error then this field isn't zero and it has sl_btmesh_fw_update_server_update_status_t + * value. + * @param[in] mbt_status Transfer status of BLOB Transfer server on Updating Node. + * If the firmware update of a node fails due to BLOB Transfer error then this + * field won't be zero. + * @param[in] progress 0-100, percentage of BLOB Transfer octets + * @param[in] fw_index Firmware image index on Updating node which is updated + * during the distribution + * @param[in] num_active_nodes Number of updating nodes which are still active + * @param[in] node_count Total number of updating nodes + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_distribution_node_failed(uint16_t elem_index, + uint16_t server_address, + sl_btmesh_fw_dist_server_dist_node_phase_t update_phase, + sl_btmesh_fw_update_server_update_status_t update_status, + uint8_t mbt_status, + uint8_t progress, + uint8_t fw_index, + uint16_t num_active_nodes, + uint16_t node_count); + +/***************************************************************************//** + * Called when firmware has been added to the Distributor + * - Called when a new firmware has been uploaded to the Distributor + * - Called when the firmware has been added based on the NVM content at + * initialization time + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] elem_index Distribution server model element index + * @param[in] client_address Address of the Distribution Client + * Set to unassigned address (0x0000) when the firmware is added at init time. + * @param[in] fw_size Size of the firmware binary image + * @param[in] fw_list_idx Index of the stored firmware in the firmware list + * @param[in] current_fw_list_length Current number of stored firmware including + * this uploaded firmware as well. + * @param[in] max_fw_list_length Maximum number of firmwares which can be stored + * on the Distributor + * @param[in] fwid Firmware identifier with 2-byte Company ID which is + * followed by 0-106 bytes of Version Information + * @param[in] fwid_length Length of the Firmware identifier data + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_firmware_added(uint16_t elem_index, + uint16_t client_address, + uint32_t fw_size, + uint16_t fw_list_idx, + uint16_t current_fw_list_length, + uint16_t max_fw_list_length, + const uint8_t *fwid, + uint8_t fwid_length); + +/***************************************************************************//** + * Called when a firmware has been deleted from the Distributor + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] elem_index Distribution server model element index + * @param[in] client_address Address of the Distribution Client + * @param[in] current_fw_list_length Current number of stored firmwares after the + * firmware is deleted from the Distributor + * @param[in] max_fw_list_length Maximum number of firmwares which can be stored + * on the Distributor + * @param[in] fwid Firmware identifier with 2-byte Company ID which is + * followed by 0-106 bytes of Version Information + * @param[in] fwid_length Length of the Firmware identifier data + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_firmware_deleted(uint16_t elem_index, + uint16_t client_address, + uint16_t current_fw_list_length, + uint16_t max_fw_list_length, + const uint8_t *fwid, + uint8_t fwid_length); + +/***************************************************************************//** + * Called when ALL firmwares are deleted from the Distributor + * + * This is a callback which can be implemented in the application + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] elem_index Distribution server model element index + * @param[in] client_address Address of the Distribution Client + * It is set to MESH_ADDR_UNASSIGNED when it is caused by an internal event. + * @param[in] max_fw_list_length Maximum number of firmwares which can be stored + * on the Distributor + * + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_on_all_firmware_deleted(uint16_t elem_index, + uint16_t client_address, + uint16_t max_fw_list_length); + +/***************************************************************************//** + * Used for asynchronously deleting firmware images from BLOB storage + ******************************************************************************/ +void sl_btmesh_fw_distribution_server_delete_step_handle(void); + +/** @} end dist_server */ + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif // SL_BTMESH_FW_DISTRIBUTION_SERVER_H diff --git a/app/btmesh/common/btmesh_fw_distribution_server/sli_btmesh_fw_distribution_server.h b/app/btmesh/common/btmesh_fw_distribution_server/sli_btmesh_fw_distribution_server.h new file mode 100644 index 00000000000..ddee663a265 --- /dev/null +++ b/app/btmesh/common/btmesh_fw_distribution_server/sli_btmesh_fw_distribution_server.h @@ -0,0 +1,52 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Firmware Distribution Server internal interfaces + ******************************************************************************* + * # License + * Copyright 2021 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 SLI_BTMESH_FW_DISTRIBUTION_SERVER_H_ +#define SLI_BTMESH_FW_DISTRIBUTION_SERVER_H_ + +#include "sl_btmesh_dfu_platform_capi.h" + +/***************************************************************************//** + * Look up firmware information in NVM for given index + * + * @param element_index Index of the element + * @param fw_index Index of the firmware + * @param info Information buffer structure + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_STATE If firmware list is uninitialized + * @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If index is not in range + ******************************************************************************/ +sl_status_t sli_btmesh_fw_dist_server_get_fw_by_index(uint16_t element_index, + uint16_t fw_index, + mesh_dfu_dist_server_fw_info_t *info); + +#endif // SLI_BTMESH_FW_DISTRIBUTION_SERVER_H_ diff --git a/app/btmesh/common/btmesh_generic_base/config/sl_btmesh_generic_base_config.h b/app/btmesh/common/btmesh_generic_base/config/sl_btmesh_generic_base_config.h new file mode 100644 index 00000000000..5882686ca50 --- /dev/null +++ b/app/btmesh/common/btmesh_generic_base/config/sl_btmesh_generic_base_config.h @@ -0,0 +1,175 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_GENERIC_BASE_CONFIG_H +#define SL_BTMESH_GENERIC_BASE_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Generic Base configuration + +// Register size increment <0-10> +// Default: 3 +// The dynamically reallocated array will grow in size by this value. +// Setting this value to 0 will disable reallocation. +#define SL_BTMESH_GENERIC_BASE_INCREMENT_CFG_VAL 3 + +// + +// Generic Models Initialization configuration + +// Enable Generic Server Models +// Default: 0 +// Enable Generic Server functionality. +#define SL_BTMESH_GENERIC_BASE_SERVER_CFG_VAL 0 + +// Generic On/Off Server +// Default: 0 +// Initialize Generic On/Off Server. +#define SL_BTMESH_GENERIC_ON_OFF_SERVER_INIT_CFG_VAL 0 + +// Generic Level Server +// Default: 0 +// Initialize Generic Level Server. +#define SL_BTMESH_GENERIC_LEVEL_SERVER_INIT_CFG_VAL 0 + +// Generic Default Transition Time Server +// Default: 0 +// Initialize Generic Default Transition Time Server. +#define SL_BTMESH_GENERIC_DEFAULT_TRANSITION_TIME_SERVER_INIT_CFG_VAL 0 + +// Generic Power On/Off Server +// Default: 0 +// Initialize Generic Power On/Off Server. +#define SL_BTMESH_GENERIC_POWER_ON_OFF_SERVER_INIT_CFG_VAL 0 + +// Generic Power Level Server +// Default: 0 +// Initialize Generic Power Level Server. +#define SL_BTMESH_GENERIC_POWER_LEVEL_SERVER_INIT_CFG_VAL 0 + +// Generic Battery Server +// Default: 0 +// Initialize Generic Battery Server. +#define SL_BTMESH_GENERIC_BATTERY_SERVER_INIT_CFG_VAL 0 + +// Generic Location Server +// Default: 0 +// Initialize Generic Location Server. +#define SL_BTMESH_GENERIC_LOCATION_SERVER_INIT_CFG_VAL 0 + +// Generic Property Server +// Default: 0 +// Initialize Generic Property Server. +#define SL_BTMESH_GENERIC_PROPERTY_SERVER_INIT_CFG_VAL 0 + +// Light Lightness Server +// Default: 0 +// Initialize Light Lightness Server. +#define SL_BTMESH_GENERIC_LIGHTNESS_SERVER_INIT_CFG_VAL 0 + +// Light CTL Server +// Default: 0 +// Initialize Light CTL Server. +#define SL_BTMESH_GENERIC_CTL_SERVER_INIT_CFG_VAL 0 + +// Light HSL Server +// Default: 0 +// Initialize Light HSL Server. +#define SL_BTMESH_GENERIC_HSL_SERVER_INIT_CFG_VAL 0 + +// + +// Enable Generic Client Models +// Default: 0 +// Enable Generic Client functionality. +#define SL_BTMESH_GENERIC_BASE_CLIENT_CFG_VAL 0 + +// Generic On/Off Client +// Default: 0 +// Initialize Generic On/Off Client. +#define SL_BTMESH_GENERIC_ON_OFF_CLIENT_INIT_CFG_VAL 0 + +// Generic Level Client +// Default: 0 +// Initialize Generic Level Client. +#define SL_BTMESH_GENERIC_LEVEL_CLIENT_INIT_CFG_VAL 0 + +// Generic Default Transition Time Client +// Default: 0 +// Initialize Generic Default Transition Time Client. +#define SL_BTMESH_GENERIC_DEFAULT_TRANSITION_TIME_CLIENT_INIT_CFG_VAL 0 + +// Generic Power On/Off Client +// Default: 0 +// Initialize Generic Power On/Off Client. +#define SL_BTMESH_GENERIC_POWER_ON_OFF_CLIENT_INIT_CFG_VAL 0 + +// Generic Power Level Client +// Default: 0 +// Initialize Generic Power Level Client. +#define SL_BTMESH_GENERIC_POWER_LEVEL_CLIENT_INIT_CFG_VAL 0 + +// Generic Battery Client +// Default: 0 +// Initialize Generic Battery Client. +#define SL_BTMESH_GENERIC_BATTERY_CLIENT_INIT_CFG_VAL 0 + +// Generic Location Client +// Default: 0 +// Initialize Generic Location Client. +#define SL_BTMESH_GENERIC_LOCATION_CLIENT_INIT_CFG_VAL 0 + +// Generic Property Client +// Default: 0 +// Initialize Generic Property Client. +#define SL_BTMESH_GENERIC_PROPERTY_CLIENT_INIT_CFG_VAL 0 + +// Light Lightness Client +// Default: 0 +// Initialize Lightness Client. +#define SL_BTMESH_GENERIC_LIGHTNESS_CLIENT_INIT_CFG_VAL 0 + +// Light CTL Client +// Default: 0 +// Initialize Light CTL Client. +#define SL_BTMESH_GENERIC_CTL_CLIENT_INIT_CFG_VAL 0 + +// Light HSL Client +// Default: 0 +// Initialize Light HSL Client. +#define SL_BTMESH_GENERIC_HSL_CLIENT_INIT_CFG_VAL 0 + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_GENERIC_BASE_CONFIG_H diff --git a/app/btmesh/common/btmesh_generic_base/sl_btmesh_generic_base.c b/app/btmesh/common/btmesh_generic_base/sl_btmesh_generic_base.c new file mode 100644 index 00000000000..bd15c70a62e --- /dev/null +++ b/app/btmesh/common/btmesh_generic_base/sl_btmesh_generic_base.c @@ -0,0 +1,183 @@ +/***************************************************************************//** + * @file + * @brief Mesh Generic Base library + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include "app_assert.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#include "sl_btmesh_generic_model_capi_types.h" +#include "sl_btmesh_lib.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#include "sl_btmesh_generic_base.h" +#include "sl_btmesh_generic_base_config.h" + +sl_status_t sl_btmesh_generic_base_init(void) +{ + return mesh_lib_init(SL_BTMESH_GENERIC_BASE_REGISTRY_INIT_SIZE, + SL_BTMESH_GENERIC_BASE_INCREMENT_CFG_VAL); +} + +void sl_btmesh_generic_base_on_event(sl_btmesh_msg_t *evt) +{ + sl_status_t sc = SL_STATUS_OK; + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: +#if SL_BTMESH_GENERIC_BASE_SERVER_CFG_VAL || defined(SL_CATALOG_BTMESH_LIGHTING_SERVER_PRESENT) \ + || defined(SL_CATALOG_BTMESH_CTL_SERVER_PRESENT) \ + || defined(SL_CATALOG_BTMESH_HSL_SERVER_PRESENT) \ + || defined(SL_CATALOG_BTMESH_GENERIC_ONOFF_SERVER_PRESENT) + +#if SL_BTMESH_GENERIC_CTL_SERVER_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_CTL_SERVER_PRESENT) \ + || SL_BTMESH_GENERIC_HSL_SERVER_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_HSL_SERVER_PRESENT) \ + || SL_BTMESH_GENERIC_POWER_LEVEL_SERVER_INIT_CFG_VAL + + #if SL_BTMESH_GENERIC_CTL_SERVER_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_CTL_SERVER_PRESENT) + sc = sl_btmesh_generic_server_init_ctl(); + app_assert_status_f(sc, "Failed to init ctl server"); + #endif // SL_BTMESH_GENERIC_CTL_SERVER_INIT_CFG_VAL + #if SL_BTMESH_GENERIC_HSL_SERVER_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_HSL_SERVER_PRESENT) + sc = sl_btmesh_generic_server_init_hsl(); + app_assert_status_f(sc, "Failed to init hsl server"); + #endif // SL_BTMESH_GENERIC_HSL_SERVER_INIT_CFG_VAL + #if SL_BTMESH_GENERIC_POWER_LEVEL_SERVER_INIT_CFG_VAL + sc = sl_btmesh_generic_server_init_power_level(); + app_assert_status_f(sc, "Failed to init power level server"); + #endif // SL_BTMESH_GENERIC_POWER_LEVEL_SERVER_INIT_CFG_VAL +#elif SL_BTMESH_GENERIC_LIGHTNESS_SERVER_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_LIGHTING_SERVER_PRESENT) + sc = sl_btmesh_generic_server_init_lightness(); + app_assert_status_f(sc, "Failed to init lightness server"); +#else // SL_BTMESH_GENERIC_CTL_SERVER_INIT_CFG_VAL || SL_BTMESH_GENERIC_HSL_SERVER_INIT_CFG_VAL || SL_BTMESH_GENERIC_POWER_LEVEL_SERVER_INIT_CFG_VAL + #if SL_BTMESH_GENERIC_LEVEL_SERVER_INIT_CFG_VAL + sc = sl_btmesh_generic_server_init_level(); + app_assert_status_f(sc, "Failed to init level server"); + #endif // SL_BTMESH_GENERIC_LEVEL_SERVER_INIT_CFG_VAL + #if SL_BTMESH_GENERIC_POWER_ON_OFF_SERVER_INIT_CFG_VAL + sc = sl_btmesh_generic_server_init_power_on_off(); + app_assert_status_f(sc, "Failed to init power on/off server"); + #else //SL_BTMESH_GENERIC_POWER_ON_OFF_SERVER_INIT_CFG_VAL + #if SL_BTMESH_GENERIC_ON_OFF_SERVER_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_GENERIC_ONOFF_SERVER_PRESENT) + sc = sl_btmesh_generic_server_init_on_off(); + app_assert_status_f(sc, "Failed to init on/off server"); + #endif // SL_BTMESH_GENERIC_ON_OFF_SERVER_INIT_CFG_VAL + #if SL_BTMESH_GENERIC_DEFAULT_TRANSITION_TIME_SERVER_INIT_CFG_VAL + sc = sl_btmesh_generic_server_init_default_transition_time(); + app_assert_status_f(sc, "Failed to init default transition time server"); + #endif // SL_BTMESH_GENERIC_DEFAULT_TRANSITION_TIME_SERVER_INIT_CFG_VAL + #endif //SL_BTMESH_GENERIC_POWER_ON_OFF_SERVER_INIT_CFG_VAL +#endif // SL_BTMESH_GENERIC_CTL_SERVER_INIT_CFG_VAL || SL_BTMESH_GENERIC_HSL_SERVER_INIT_CFG_VAL || SL_BTMESH_GENERIC_POWER_LEVEL_SERVER_INIT_CFG_VAL +#if SL_BTMESH_GENERIC_BATTERY_SERVER_INIT_CFG_VAL + sc = sl_btmesh_generic_server_init_battery(); + app_assert_status_f(sc, "Failed to init battery server"); +#endif // SL_BTMESH_GENERIC_BATTERY_SERVER_INIT_CFG_VAL +#if SL_BTMESH_GENERIC_LOCATION_SERVER_INIT_CFG_VAL + sc = sl_btmesh_generic_server_init_location(); + app_assert_status_f(sc, "Failed to init location server"); +#endif // SL_BTMESH_GENERIC_LOCATION_SERVER_INIT_CFG_VAL +#if SL_BTMESH_GENERIC_PROPERTY_SERVER_INIT_CFG_VAL + sc = sl_btmesh_generic_server_init_property(); + app_assert_status_f(sc, "Failed to init property server"); +#endif // SL_BTMESH_GENERIC_PROPERTY_SERVER_INIT_CFG_VAL + sc = sl_btmesh_generic_server_init_common(); + app_assert_status_f(sc, "Failed to common init Generic Server"); +#endif // SL_BTMESH_GENERIC_BASE_SERVER_CFG_VAL + +#if SL_BTMESH_GENERIC_BASE_CLIENT_CFG_VAL || defined(SL_CATALOG_BTMESH_LIGHTING_CLIENT_PRESENT) \ + || defined(SL_CATALOG_BTMESH_CTL_CLIENT_PRESENT) + +#if SL_BTMESH_GENERIC_ON_OFF_CLIENT_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_LIGHTING_CLIENT_PRESENT) + sc = sl_btmesh_generic_client_init_on_off(); + app_assert_status_f(sc, "Failed to init on/off client"); +#endif // SL_BTMESH_GENERIC_ON_OFF_CLIENT_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_LIGHTING_CLIENT_PRESENT) +#if SL_BTMESH_GENERIC_LEVEL_SERVER_INIT_CFG_VAL + sc = sl_btmesh_generic_client_init_level(); + app_assert_status_f(sc, "Failed to init level client"); +#endif // SL_BTMESH_GENERIC_LEVEL_SERVER_INIT_CFG_VAL +#if SL_BTMESH_GENERIC_DEFAULT_TRANSITION_TIME_CLIENT_INIT_CFG_VAL + sc = sl_btmesh_generic_client_init_default_transition_time(); + app_assert_status_f(sc, "Failed to init default transition time client"); +#endif // SL_BTMESH_GENERIC_DEFAULT_TRANSITION_TIME_CLIENT_INIT_CFG_VAL +#if SL_BTMESH_GENERIC_POWER_ON_OFF_CLIENT_INIT_CFG_VAL + sc = sl_btmesh_generic_client_init_power_on_off(); + app_assert_status_f(sc, "Failed to init power on/off client"); +#endif // SL_BTMESH_GENERIC_POWER_ON_OFF_CLIENT_INIT_CFG_VAL +#if SL_BTMESH_GENERIC_POWER_LEVEL_CLIENT_INIT_CFG_VAL + sc = sl_btmesh_generic_client_init_power_level(); + app_assert_status_f(sc, "Failed to init power level client"); +#endif // SL_BTMESH_GENERIC_POWER_LEVEL_CLIENT_INIT_CFG_VAL +#if SL_BTMESH_GENERIC_BATTERY_CLIENT_INIT_CFG_VAL + sc = sl_btmesh_generic_client_init_battery(); + app_assert_status_f(sc, "Failed to init battery client"); +#endif // SL_BTMESH_GENERIC_BATTERY_CLIENT_INIT_CFG_VAL +#if SL_BTMESH_GENERIC_LOCATION_CLIENT_INIT_CFG_VAL + sc = sl_btmesh_generic_client_init_location(); + app_assert_status_f(sc, "Failed to init location client"); +#endif // SL_BTMESH_GENERIC_LOCATION_CLIENT_INIT_CFG_VAL +#if SL_BTMESH_GENERIC_PROPERTY_CLIENT_INIT_CFG_VAL + sc = sl_btmesh_generic_client_init_property(); + app_assert_status_f(sc, "Failed to init property client"); +#endif // SL_BTMESH_GENERIC_PROPERTY_CLIENT_INIT_CFG_VAL +#if SL_BTMESH_GENERIC_LIGHTNESS_CLIENT_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_LIGHTING_CLIENT_PRESENT) + sc = sl_btmesh_generic_client_init_lightness(); + app_assert_status_f(sc, "Failed to init lightness client"); +#endif // SL_BTMESH_GENERIC_LIGHTNESS_CLIENT_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_LIGHTING_CLIENT_PRESENT) +#if SL_BTMESH_GENERIC_CTL_CLIENT_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_CTL_CLIENT_PRESENT) + sc = sl_btmesh_generic_client_init_ctl(); + app_assert_status_f(sc, "Failed to init ctl client"); +#endif // SL_BTMESH_GENERIC_CTL_CLIENT_INIT_CFG_VAL || defined(SL_CATALOG_BTMESH_CTL_CLIENT_PRESENT) +#if SL_BTMESH_GENERIC_HSL_CLIENT_INIT_CFG_VAL + sc = sl_btmesh_generic_client_init_hsl(); + app_assert_status_f(sc, "Failed to init hsl client"); +#endif // SL_BTMESH_GENERIC_HSL_CLIENT_INIT_CFG_VAL + sc = sl_btmesh_generic_client_init_common(); + app_assert_status_f(sc, "Failed to common init Generic Client"); + +#endif // SL_BTMESH_GENERIC_BASE_CLIENT_CFG_VAL + break; +#if SL_BTMESH_GENERIC_BASE_SERVER_CFG_VAL || defined(SL_CATALOG_BTMESH_LIGHTING_SERVER_PRESENT) + case sl_btmesh_evt_generic_server_client_request_id: + // intentional fall through + case sl_btmesh_evt_generic_server_state_recall_id: + // intentional fall through + case sl_btmesh_evt_generic_server_state_changed_id: + mesh_lib_generic_server_event_handler(evt); + break; +#endif // SL_BTMESH_GENERIC_BASE_SERVER_CFG_VAL +#if SL_BTMESH_GENERIC_BASE_CLIENT_CFG_VAL + case sl_btmesh_evt_generic_client_server_status_id: + mesh_lib_generic_client_event_handler(evt); + break; +#endif // SL_BTMESH_GENERIC_BASE_CLIENT_CFG_VAL + } +} diff --git a/app/btmesh/common/btmesh_generic_base/sl_btmesh_generic_base.h.jinja b/app/btmesh/common/btmesh_generic_base/sl_btmesh_generic_base.h.jinja new file mode 100644 index 00000000000..b1cc3f82993 --- /dev/null +++ b/app/btmesh/common/btmesh_generic_base/sl_btmesh_generic_base.h.jinja @@ -0,0 +1,38 @@ +/***************************************************************************//** + * @brief Mesh Generic Base library + ******************************************************************************* + * # 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 SL_BTMESH_GENERIC_BASE_H +#define SL_BTMESH_GENERIC_BASE_H + +/** + * @brief Initial size for handler registry + * + * Calculated based on definitions in component configuration files. + */ +#define SL_BTMESH_GENERIC_BASE_REGISTRY_INIT_SIZE {{ btmesh_generic_handler | sum(attribute='count')}} + +/** + * @brief Initializes the generic base functionality + */ +extern sl_status_t sl_btmesh_generic_base_init(void); + +/** + * @brief Handles events for generic models + * @param evt Event to handle + */ +extern void sl_btmesh_generic_base_on_event(sl_btmesh_msg_t *evt); + +#endif // SL_BTMESH_GENERIC_BASE_H diff --git a/app/btmesh/common/btmesh_hsl_server/btmesh_hsl_server.dcd b/app/btmesh/common/btmesh_hsl_server/btmesh_hsl_server.dcd new file mode 100644 index 00000000000..95563832bbe --- /dev/null +++ b/app/btmesh/common/btmesh_hsl_server/btmesh_hsl_server.dcd @@ -0,0 +1,26 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models": [ + { "mid": "0x1307", "name": "Light HSL Server" }, + { "mid": "0x1308", "name": "Light HSL Setup Server" } + ] + }, + { + "name": "Hue", + "location": "0x0000", + "sig_models": [ + { "mid": "0x1002", "name": "Generic Level Server" }, + { "mid": "0x130a", "name": "Light HSL Hue Server" } + ] + }, + { + "name": "Saturation", + "location": "0x0000", + "sig_models": [ + { "mid": "0x1002", "name": "Generic Level Server" }, + { "mid": "0x130b", "name": "Light HSL Saturation Server" } + ] + } +] 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 new file mode 100644 index 00000000000..0c48f90979d --- /dev/null +++ b/app/btmesh/common/btmesh_hsl_server/config/sl_btmesh_hsl_server_config.h @@ -0,0 +1,89 @@ +#ifndef SL_BTMESH_HSL_SERVER_CONFIG_H +#define SL_BTMESH_HSL_SERVER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// HSL Server configuration + +// Timeout [ms] for saving States of the model to NVM. +// Default: 5000 +// Timeout [ms] for saving States of the model to NVM. +#define SL_BTMESH_HSL_SERVER_NVM_SAVE_TIME_CFG_VAL (5000) + +// PS Key for NVM Page where the States of the HSL Models are saved. +// Default: 0x4008 +// PS Key for NVM Page where the States of the HSL Models are saved. +#define SL_BTMESH_HSL_SERVER_PS_KEY_CFG_VAL (0x4008) + +// Periodicity [ms] for updating the hue during a transition. +// Default: 1 +// Periodicity [ms] for updating the hue during a transition. +#define SL_BTMESH_HSL_SERVER_HUE_UPDATE_PERIOD_CFG_VAL (1) + +// Periodicity [ms] for updating the saturation during a transition. +// Default: 1 +// Periodicity [ms] for updating the saturation during a transition. +#define SL_BTMESH_HSL_SERVER_SATURATION_UPDATE_PERIOD_CFG_VAL (1) + +// Periodicity [ms] for updating the UI with hue during a transition. +// Default: 100 +// Periodicity [ms] for updating the hue values on the UI. +#define SL_BTMESH_HSL_SERVER_HUE_UI_UPDATE_PERIOD_CFG_VAL (100) + +// Periodicity [ms] for updating the UI with saturation during a transition. +// Default: 100 +// Periodicity [ms] for updating the saturation values on the UI. +#define SL_BTMESH_HSL_SERVER_SATURATION_UI_UPDATE_PERIOD_CFG_VAL (100) + +// Default Hue +// Default: 0 +// Default Hue value. +#define SL_BTMESH_HSL_SERVER_DEFAULT_HUE_CFG_VAL (0) + +// Default Saturation +// Default: 0 +// Default Saturation. +#define SL_BTMESH_HSL_SERVER_DEFAULT_SATURATION_CFG_VAL (0) + +// Minimum Hue +// Default: 0 +// Minimum Hue. +#define SL_BTMESH_HSL_SERVER_MINIMUM_HUE_CFG_VAL (0) + +// Maximum Hue +// Default: 65535 +// Maximum Hue. +#define SL_BTMESH_HSL_SERVER_MAXIMUM_HUE_CFG_VAL (65535) + +// Minimum Saturation +// Default: 0 +// Minimum Saturation. +#define SL_BTMESH_HSL_SERVER_MINIMUM_SATURATION_CFG_VAL (0) + +// Maximum Saturation +// Default: 65535 +// Maximum Saturation. +#define SL_BTMESH_HSL_SERVER_MAXIMUM_SATURATION_CFG_VAL (65535) + +// Enable Logging +// Default: 1 +// Enable / disable UART Logging for HSL Server models specific messages for this component. +#define SL_BTMESH_HSL_SERVER_LOGGING_CFG_VAL (1) + +// + +// + +// <<< end of configuration section >>> + +// The hue update period shall not be greater than the hue UI update period +#if (SL_BTMESH_HSL_SERVER_HUE_UI_UPDATE_PERIOD_CFG_VAL) < (SL_BTMESH_HSL_SERVER_HUE_UPDATE_PERIOD_CFG_VAL) +#error "The SL_BTMESH_HSL_SERVER_HUE_UPDATE_PERIOD_CFG_VAL shall be less than SL_BTMESH_HSL_SERVER_HUE_UI_UPDATE_PERIOD_CFG_VAL." +#endif + +// The saturation update period shall not be greater than the saturation UI update period +#if (SL_BTMESH_HSL_SERVER_SATURATION_UI_UPDATE_PERIOD_CFG_VAL) < (SL_BTMESH_HSL_SERVER_SATURATION_UPDATE_PERIOD_CFG_VAL) +#error "The SL_BTMESH_HSL_SERVER_SATURATION_UPDATE_PERIOD_CFG_VAL shall be less than SL_BTMESH_HSL_SERVER_SATURATION_UI_UPDATE_PERIOD_CFG_VAL." +#endif + +#endif // SL_BTMESH_HSL_SERVER_CONFIG_H 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 new file mode 100644 index 00000000000..b0b9cb77b99 --- /dev/null +++ b/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_server.c @@ -0,0 +1,3274 @@ +/***************************************************************************//** + * @file sl_btmesh_hsl_server.c + * @brief Bt Mesh HSL Server module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +// C Standard Library headers +#include +#include +#include + +#include +#include "em_common.h" +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" + +#include "sl_btmesh_generic_model_capi_types.h" +#include "sl_btmesh_lib.h" + +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_hsl_server_config.h" +#include "sl_btmesh_hsl_server.h" +#include "sl_btmesh_hsl_signal_transition_handler.h" +#include "sl_btmesh_lighting_server.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup HSL_Server + * @{ + ******************************************************************************/ + +#ifdef SL_CATALOG_BTMESH_SCENE_SERVER_PRESENT +#define scene_server_reset_register(elem_index) \ + scene_server_reset_register_impl(elem_index) +#else +#define scene_server_reset_register(elem_index) +#endif + +#define NO_FLAGS 0 ///< No flags used for message +#define IMMEDIATE 0 ///< Immediate transition time is 0 seconds +#define NO_CALLBACK_DATA (void *)NULL ///< Callback has no parameters +#define HIGH_PRIORITY 0 ///< High Priority +/// Values greater than max 37200000 are treated as unknown remaining time +#define UNKNOWN_REMAINING_TIME 40000000 + +/// Lightbulb state +static PACKSTRUCT(struct lightbulb_state { + // Hue state + uint16_t hue_current; ///< Current hue value + uint16_t hue_target; ///< Target hue value + uint16_t hue_default; ///< Default hue value + uint16_t hue_min; ///< Minimum hue value + uint16_t hue_max; ///< Maximum hue value + + // Generic Level bound to hue + int16_t hue_level_current; ///< Current hue generic level value + int16_t hue_level_target; ///< Target hue generic level value + + // Saturation state + uint16_t saturation_current; ///< Current saturation value + uint16_t saturation_target; ///< Target saturation value + uint16_t saturation_default; ///< Default saturation value + uint16_t saturation_min; ///< Minimum saturation value + uint16_t saturation_max; ///< Maximum saturation value + + // Generic Level bound to saturation + int16_t saturation_level_current; ///< Current saturation generic level value + int16_t saturation_level_target; ///< Target saturation generic level value +}) lightbulb_state; + +static sl_status_t hsl_hue_update(uint16_t element_index, + uint32_t remaining_ms); +static sl_status_t hsl_saturation_update(uint16_t element_index, + uint32_t remaining_ms); + +/// copy of transition delay parameter, needed for delayed hsl request +static uint32_t delayed_hsl_trans = 0; +/// copy of transition delay parameter, needed for delayed hue request +static uint32_t delayed_hsl_hue_trans = 0; +/// copy of transition delay parameter, needed for +///delayed hue generic level request +static uint32_t delayed_hue_level_trans = 0; +/// copy of generic request kind, needed for delayed hue generic request +static mesh_generic_request_t hue_level_request_kind = mesh_generic_request_level; +/// copy of move transition parameter for hue generic request +static uint32_t move_hue_level_trans = 0; +/// copy of move delta parameter for hue generic request +static int16_t move_hue_level_delta = 0; +/// copy of transition delay parameter, needed for delayed saturation request +static uint32_t delayed_hsl_saturation_trans = 0; +/// copy of transition delay parameter, needed for +/// delayed saturation generic level request +static uint32_t delayed_saturation_level_trans = 0; +/// copy of generic request kind, needed for delayed saturation generic request +static mesh_generic_request_t saturation_level_request_kind = mesh_generic_request_level; +/// copy of move transition parameter for saturation generic request +static uint32_t move_saturation_level_trans = 0; +/// copy of move delta parameter for saturation generic request +static int16_t move_saturation_level_delta = 0; + +// Timer handles +static sl_simple_timer_t hsl_transition_complete_timer; +static sl_simple_timer_t hsl_delayed_hsl_request_timer; +static sl_simple_timer_t hsl_hue_transition_complete_timer; +static sl_simple_timer_t hsl_delayed_hsl_hue_timer; +static sl_simple_timer_t hsl_hue_level_move_timer; +static sl_simple_timer_t hsl_hue_level_transition_complete_timer; +static sl_simple_timer_t hsl_delayed_hue_level_timer; +static sl_simple_timer_t hsl_saturation_transition_complete_timer; +static sl_simple_timer_t hsl_delayed_hsl_saturation_timer; +static sl_simple_timer_t hsl_saturation_level_move_timer; +static sl_simple_timer_t hsl_saturation_level_transition_complete_timer; +static sl_simple_timer_t hsl_delayed_saturation_level_timer; +static sl_simple_timer_t hsl_state_store_timer; + +// Timer callbacks +static void hsl_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_delayed_hsl_request_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_hue_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_delayed_hsl_hue_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_hue_level_move_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_hue_level_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_delayed_hue_level_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_saturation_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_delayed_hsl_saturation_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_saturation_level_move_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_saturation_level_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_delayed_saturation_level_timer_cb(sl_simple_timer_t *handle, + void *data); +static void hsl_state_store_timer_cb(sl_simple_timer_t *handle, + void *data); + +/***************************************************************************//** + * This function loads the saved light state from Persistent Storage and + * copies the data in the global variable lightbulb_state. + * If PS key with ID SL_BTMESH_HSL_SERVER_PS_KEY_CFG_VAL does not exist or loading failed, + * lightbulb_state is set to zero and some default values are written to it. + * + * @return Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightbulb_state_load(void); + +/***************************************************************************//** + * This function is called each time the lightbulb state in RAM is changed. + * It sets up a soft timer that will save the state in flash after small delay. + * The purpose is to reduce amount of unnecessary flash writes. + ******************************************************************************/ +static void lightbulb_state_changed(void); + +/***************************************************************************//** + * This function validates the lighbulb_state and change it if it is against + * the specification. + ******************************************************************************/ +static void lightbulb_state_validate_and_correct(void); + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_respond to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_respond(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms, + uint8_t response_flags); + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_update to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_update(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms); + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_publish to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_publish(uint16_t model_id, + uint16_t element_index, + mesh_generic_state_t kind); + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_register_handler with an assert which + * detects if the Btmesh API call results in error. The parameters of the two + * functions are the same but the wrapper does not have return value. + ******************************************************************************/ +static void generic_server_register_handler(uint16_t model_id, + uint16_t elem_index, + mesh_lib_generic_server_client_request_cb cb, + mesh_lib_generic_server_change_cb ch, + mesh_lib_generic_server_recall_cb recall); + +#ifdef SL_CATALOG_BTMESH_SCENE_SERVER_PRESENT +/***************************************************************************//** + * Wrapper for sl_btmesh_scene_server_reset_register with an assert which + * detects if the Btmesh API call results in error. The parameters of the two + * functions are the same but the wrapper does not have return value. + * The scene server register shall be reset if the state of the model changes in + * order to clear the current scene. + * This function is available only if the btmesh_scene_server component is added + * to the project. + ******************************************************************************/ +static void scene_server_reset_register_impl(uint16_t elem_index); +#endif + +/***************************************************************************//** + * \defgroup LightHSL + * \brief Light HSL Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup LightHSL + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to light HSL request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hsl_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_lighting_state_hsl; + current.hsl.lightness = sl_btmesh_get_lightness_current(); + current.hsl.hue = lightbulb_state.hue_current; + current.hsl.saturation = lightbulb_state.saturation_current; + + target.kind = mesh_lighting_state_hsl; + target.hsl.lightness = sl_btmesh_get_lightness_target(); + target.hsl.hue = lightbulb_state.hue_target; + target.hsl.saturation = lightbulb_state.saturation_target; + + return generic_server_respond(MESH_LIGHTING_HSL_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + NO_FLAGS); +} + +/***************************************************************************//** + * Update light HSL state. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hsl_update(uint16_t element_index, uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_lighting_state_hsl; + current.hsl.lightness = sl_btmesh_get_lightness_current(); + current.hsl.hue = lightbulb_state.hue_current; + current.hsl.saturation = lightbulb_state.saturation_current; + + target.kind = mesh_lighting_state_hsl; + target.hsl.lightness = sl_btmesh_get_lightness_target(); + target.hsl.hue = lightbulb_state.hue_target; + target.hsl.saturation = lightbulb_state.saturation_target; + + return generic_server_update(MESH_LIGHTING_HSL_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); +} + +/***************************************************************************//** + * Update light HSL state and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hsl_update_and_publish(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t e; + (void)element_index; + + e = hsl_update(BTMESH_HSL_SERVER_MAIN, remaining_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_LIGHTING_HSL_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_MAIN, + mesh_lighting_state_hsl); + } + + return e; +} + +/***************************************************************************//** + * This function process the requests for the light HSL model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void hsl_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)element_index; + (void)server_addr; + + log_info("hsl_request: lightness=%u, hue=%u, saturation=%u, " + "transition=%lu, delay=%u" NL, + request->hsl.lightness, + request->hsl.hue, + request->hsl.saturation, + transition_ms, + delay_ms); + + if ((sl_btmesh_get_lightness_current() == request->hsl.lightness) + && (lightbulb_state.hue_current == request->hsl.hue) + && (lightbulb_state.saturation_current == request->hsl.saturation)) { + log_info("Request for current state received; no op" NL); + } else { + if (sl_btmesh_get_lightness_current() != request->hsl.lightness) { + log_info("Setting lightness to <%u>" NL, request->hsl.lightness); + } + if (lightbulb_state.hue_current != request->hsl.hue) { + log_info("Setting hue to <%u>" NL, request->hsl.hue); + } + if (lightbulb_state.saturation_current != request->hsl.saturation) { + log_info("Setting saturation to <%u>" NL, request->hsl.saturation); + } + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + sl_btmesh_set_lightness_current(request->hsl.lightness); + sl_btmesh_set_lightness_target(request->hsl.lightness); + if (request->hsl.lightness != 0) { + sl_btmesh_set_lightness_last(request->hsl.lightness); + } + + // update LED PWM duty cycle + sl_btmesh_lighting_set_level(sl_btmesh_get_lightness_current(), + IMMEDIATE); + + lightbulb_state.hue_current = request->hsl.hue; + lightbulb_state.hue_target = request->hsl.hue; + lightbulb_state.saturation_current = request->hsl.saturation; + lightbulb_state.saturation_target = request->hsl.saturation; + + // update LED hue + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_current, + IMMEDIATE); + + // update LED saturation + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_current, + IMMEDIATE); + } else if (delay_ms > 0) { + // a delay has been specified for the light change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + sl_btmesh_set_lightness_target(request->hsl.lightness); + lightbulb_state.hue_target = request->hsl.hue; + lightbulb_state.saturation_target = request->hsl.saturation; + sl_status_t sc = sl_simple_timer_start(&hsl_delayed_hsl_request_timer, + delay_ms, + hsl_delayed_hsl_request_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed HSL Request timer"); + // store transition parameter for later use + delayed_hsl_trans = transition_ms; + } else { + // no delay but transition time has been set. + sl_btmesh_set_lightness_target(request->hsl.lightness); + lightbulb_state.hue_target = request->hsl.hue; + lightbulb_state.saturation_target = request->hsl.saturation; + + sl_btmesh_lighting_set_level(sl_btmesh_get_lightness_target(), + transition_ms); + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_target, + transition_ms); + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_target, + transition_ms); + + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_transition_complete_timer, + transition_ms, + hsl_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start HSL Transition Complete timer"); + } + lightbulb_state_changed(); + + // State has changed, so the current scene number is reset + scene_server_reset_register(BTMESH_HSL_SERVER_MAIN); + } + + uint32_t remaining_ms = delay_ms + transition_ms; + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + hsl_response(BTMESH_HSL_SERVER_MAIN, client_addr, appkey_index, remaining_ms); + } + hsl_update_and_publish(BTMESH_HSL_SERVER_MAIN, remaining_ms); + // publish to bound states + generic_server_publish(MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_MAIN, + mesh_lighting_state_lightness_actual); + generic_server_publish(MESH_LIGHTING_HSL_HUE_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_HUE, + mesh_lighting_state_hsl_hue); + generic_server_publish(MESH_LIGHTING_HSL_SATURATION_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_SATURATION, + mesh_lighting_state_hsl_saturation); +} + +/***************************************************************************//** + * This function is a handler for light HSL change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void hsl_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (current->kind != mesh_lighting_state_hsl) { + // if kind is not 'hsl' then just report the change here + log_info("hsl_change, kind %u" NL, current->kind); + return; + } + + if (sl_btmesh_get_lightness_current() != current->hsl.lightness) { + log_info("Lightness update: from %u to %u" NL, + sl_btmesh_get_lightness_current(), + current->hsl.lightness); + sl_btmesh_set_lightness_current(current->hsl.lightness); + lightbulb_state_changed(); + } else { + log_info("Lightness update -same value (%u)" NL, current->hsl.lightness); + } + + if (lightbulb_state.hue_current != current->hsl.hue) { + log_info("Hue update: from %u to %u" NL, + lightbulb_state.hue_current, + current->hsl.hue); + lightbulb_state.hue_current = current->hsl.hue; + lightbulb_state_changed(); + } else { + log_info("Hue update -same value (%u)" NL, + lightbulb_state.hue_current); + } + + if (lightbulb_state.saturation_current != current->hsl.saturation) { + log_info("Saturation update: from %u to %u" NL, + lightbulb_state.saturation_current, + current->hsl.saturation); + lightbulb_state.saturation_current = current->hsl.saturation; + lightbulb_state_changed(); + } else { + log_info("Saturation update -same value (%u)" NL, + lightbulb_state.saturation_current); + } +} + +/***************************************************************************//** + * This function is a handler for light HSL recall event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void hsl_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + (void)element_index; + + log_info("Light HSL recall" NL); + if (transition_ms == IMMEDIATE) { + sl_btmesh_set_lightness_target(current->hsl.lightness); + lightbulb_state.hue_target = current->hsl.hue; + lightbulb_state.saturation_target = current->hsl.saturation; + } else { + sl_btmesh_set_lightness_target(target->hsl.lightness); + lightbulb_state.hue_target = target->hsl.hue; + lightbulb_state.saturation_target = target->hsl.saturation; + } + + if ((sl_btmesh_get_lightness_current() + == sl_btmesh_get_lightness_target()) + && (lightbulb_state.hue_current + == lightbulb_state.hue_target) + && (lightbulb_state.saturation_current + == lightbulb_state.saturation_target)) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall HSL lightness to %u, hue to %u, saturation to %d " + "with transition=%lu ms" NL, + sl_btmesh_get_lightness_target(), + lightbulb_state.hue_target, + lightbulb_state.saturation_target, + transition_ms); + if (sl_btmesh_get_lightness_current() + != sl_btmesh_get_lightness_target()) { + sl_btmesh_lighting_set_level(sl_btmesh_get_lightness_target(), + transition_ms); + } + if (lightbulb_state.hue_current + != lightbulb_state.hue_target) { + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_target, + transition_ms); + } + if (lightbulb_state.saturation_current + != lightbulb_state.saturation_target) { + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_target, + transition_ms); + } + if (transition_ms == IMMEDIATE) { + sl_btmesh_set_lightness_current(current->hsl.lightness); + lightbulb_state.hue_current = current->hsl.hue; + lightbulb_state.saturation_current = current->hsl.saturation; + } else { + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_transition_complete_timer, + transition_ms, + hsl_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start HSL Transition Complete timer"); + } + lightbulb_state_changed(); + } + + // Lightness substate is updated in lightness_recall, here only hue and + // saturation substate is updated, it is needed also for LC recall + // to not set LC mode to zero by bindings + sl_status_t e; + e = hsl_hue_update(BTMESH_HSL_SERVER_HUE, transition_ms); + e = hsl_saturation_update(BTMESH_HSL_SERVER_SATURATION, transition_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_LIGHTING_HSL_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_MAIN, + mesh_lighting_state_hsl); + } +} + +/***************************************************************************//** + * This function is called when a light HSL request + * with non-zero transition time has completed. + ******************************************************************************/ +static void hsl_transition_complete(void) +{ + // transition done -> set state, update and publish + sl_btmesh_set_lightness_current(sl_btmesh_get_lightness_target()); + lightbulb_state.hue_current = lightbulb_state.hue_target; + lightbulb_state.saturation_current = lightbulb_state.saturation_target; + + log_info("Transition complete. New lightness is %u, " + "new hue is %u and new saturation is %u" NL, + sl_btmesh_get_lightness_current(), + lightbulb_state.hue_current, + lightbulb_state.saturation_current); + + lightbulb_state_changed(); + hsl_update_and_publish(BTMESH_HSL_SERVER_MAIN, IMMEDIATE); +} + +/***************************************************************************//** + * This function is called when delay for light HSL request has completed. + ******************************************************************************/ +static void delayed_hsl_request(void) +{ + log_info("Starting delayed HSL request: lightness %u -> %u, hue %u -> %u, " + "saturation %u -> %u, %lu ms" NL, + sl_btmesh_get_lightness_current(), + sl_btmesh_get_lightness_target(), + lightbulb_state.hue_current, + lightbulb_state.hue_target, + lightbulb_state.saturation_current, + lightbulb_state.saturation_target, + delayed_hsl_trans); + + sl_btmesh_lighting_set_level(sl_btmesh_get_lightness_target(), + delayed_hsl_trans); + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_target, + delayed_hsl_trans); + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_target, + delayed_hsl_trans); + + if (delayed_hsl_trans == 0) { + // no transition delay, update state immediately + sl_btmesh_set_lightness_current(sl_btmesh_get_lightness_target()); + lightbulb_state.hue_current = lightbulb_state.hue_target; + lightbulb_state.saturation_current = lightbulb_state.saturation_target; + + lightbulb_state_changed(); + hsl_update_and_publish(BTMESH_HSL_SERVER_MAIN, delayed_hsl_trans); + } else { + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_transition_complete_timer, + delayed_hsl_trans, + hsl_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start HSL Transition Complete timer"); + } +} + +/** @} (end addtogroup LightHSL) */ + +/***************************************************************************//** + * \defgroup LightHSLSetup + * \brief Light HSL Setup Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup LightHSLSetup + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to light HSL setup request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] kind Type of state used in light HSL setup response. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hsl_setup_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + mesh_generic_state_t kind) +{ + struct mesh_generic_state current; + + current.kind = kind; + + switch (kind) { + case mesh_lighting_state_hsl_default: + current.hsl.lightness = sl_btmesh_get_lightness_default(); + current.hsl.hue = lightbulb_state.hue_default; + current.hsl.saturation = lightbulb_state.saturation_default; + break; + case mesh_lighting_state_hsl_range: + current.hsl_range.hue_min = lightbulb_state.hue_min; + current.hsl_range.hue_max = lightbulb_state.hue_max; + current.hsl_range.saturation_min = lightbulb_state.saturation_min; + current.hsl_range.saturation_max = lightbulb_state.saturation_max; + break; + default: + break; + } + + return generic_server_respond(MESH_LIGHTING_HSL_SETUP_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + NULL, + IMMEDIATE, + NO_FLAGS); +} + +/***************************************************************************//** + * Update light HSL setup state. + * + * @param[in] element_index Server model element index. + * @param[in] kind Type of state used in light HSL setup update. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hsl_setup_update(uint16_t element_index, + mesh_generic_state_t kind) +{ + struct mesh_generic_state current; + + current.kind = kind; + + switch (kind) { + case mesh_lighting_state_hsl_default: + current.hsl.lightness = sl_btmesh_get_lightness_default(); + current.hsl.hue = lightbulb_state.hue_default; + current.hsl.saturation = lightbulb_state.saturation_default; + break; + case mesh_lighting_state_hsl_range: + current.hsl_range.hue_min = lightbulb_state.hue_min; + current.hsl_range.hue_max = lightbulb_state.hue_max; + current.hsl_range.saturation_min = lightbulb_state.saturation_min; + current.hsl_range.saturation_max = lightbulb_state.saturation_max; + break; + default: + break; + } + + return generic_server_update(MESH_LIGHTING_HSL_SERVER_MODEL_ID, + element_index, + ¤t, + NULL, + IMMEDIATE); +} + +/***************************************************************************//** + * This function process the requests for the light HSL setup model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void hsl_setup_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + (void)transition_ms; + (void)delay_ms; + + mesh_generic_state_t kind = mesh_generic_state_last; + switch (request->kind) { + case mesh_lighting_request_hsl_default: + kind = mesh_lighting_state_hsl_default; + log_info("hsl_setup_request: state=hsl_default, default lightness=%u, " + "default hue=%u, default saturation=%u" NL, + request->hsl.lightness, + request->hsl.hue, + request->hsl.saturation); + + if ((sl_btmesh_get_lightness_default() == request->hsl.lightness) + && (lightbulb_state.hue_default == request->hsl.hue) + && (lightbulb_state.saturation_default == request->hsl.saturation)) { + log_info("Request for current state received; no op" NL); + } else { + if (sl_btmesh_get_lightness_default() != request->hsl.lightness) { + log_info("Setting default lightness to <%u>" NL, request->hsl.lightness); + sl_btmesh_set_lightness_default(request->hsl.lightness); + } + if (lightbulb_state.hue_default != request->hsl.hue) { + log_info("Setting default hue to <%u>" NL, + request->hsl.hue); + lightbulb_state.hue_default = request->hsl.hue; + } + if (lightbulb_state.saturation_default != request->hsl.saturation) { + log_info("Setting default saturation to <%u>" NL, request->hsl.saturation); + lightbulb_state.saturation_default = request->hsl.saturation; + } + lightbulb_state_changed(); + } + break; + + case mesh_lighting_request_hsl_range: + kind = mesh_lighting_state_hsl_range; + log_info("hsl_setup_request: state=hsl_range, min hue=%u, max hue=%u, " + "min saturation=%u, max saturation=%u" NL, + request->hsl_range.hue_min, + request->hsl_range.hue_max, + request->hsl_range.saturation_min, + request->hsl_range.saturation_max); + + if ((lightbulb_state.hue_min == request->hsl_range.hue_min) + && (lightbulb_state.hue_max == request->hsl_range.hue_max) + && (lightbulb_state.saturation_min + == request->hsl_range.saturation_min) + && (lightbulb_state.saturation_max + == request->hsl_range.saturation_max)) { + log_info("Request for current state received; no op" NL); + } else { + if (lightbulb_state.hue_min != request->hsl_range.hue_min) { + log_info("Setting min hue to <%u>" NL, request->hsl_range.hue_min); + lightbulb_state.hue_min = request->hsl_range.hue_min; + } + if (lightbulb_state.hue_max != request->hsl_range.hue_max) { + log_info("Setting max hue to <%u>" NL, request->hsl_range.hue_max); + lightbulb_state.hue_max = request->hsl_range.hue_max; + } + if (lightbulb_state.saturation_min != request->hsl_range.saturation_min) { + log_info("Setting min saturation to <%u>" NL, + request->hsl_range.saturation_min); + lightbulb_state.saturation_min = request->hsl_range.saturation_min; + } + if (lightbulb_state.saturation_max != request->hsl_range.saturation_max) { + log_info("Setting max saturation to <%u>" NL, + request->hsl_range.saturation_max); + lightbulb_state.saturation_max = request->hsl_range.saturation_max; + } + lightbulb_state_changed(); + } + break; + + default: + break; + } + + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + hsl_setup_response(element_index, client_addr, appkey_index, kind); + } else { + hsl_setup_update(element_index, kind); + } +} + +/***************************************************************************//** + * This function is a handler for light HSL setup change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void hsl_setup_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + switch (current->kind) { + case mesh_lighting_state_hsl_default: + if (sl_btmesh_get_lightness_default() != current->hsl.lightness) { + log_info("Default lightness update: from %u to %u" NL, + sl_btmesh_get_lightness_default(), + current->hsl.lightness); + sl_btmesh_set_lightness_default(current->hsl.lightness); + lightbulb_state_changed(); + } else { + log_info("Default lightness update -same value (%u)" NL, + sl_btmesh_get_lightness_default()); + } + if (lightbulb_state.hue_default != current->hsl.hue) { + log_info("Default hue change: from %u to %u" NL, + lightbulb_state.hue_default, + current->hsl.hue); + lightbulb_state.hue_default = current->hsl.hue; + lightbulb_state_changed(); + } else { + log_info("Default hue update -same value (%u)" NL, + lightbulb_state.hue_default); + } + if (lightbulb_state.saturation_default != current->hsl.saturation) { + log_info("Default saturation change: from %u to %u" NL, + lightbulb_state.saturation_default, + current->hsl.saturation); + lightbulb_state.saturation_default = current->hsl.saturation; + lightbulb_state_changed(); + } else { + log_info("Default saturation update -same value (%u)" NL, + lightbulb_state.saturation_default); + } + break; + + case mesh_lighting_state_hsl_range: + if (lightbulb_state.hue_min != current->hsl_range.hue_min) { + log_info("Min hue update: from %u to %u" NL, + lightbulb_state.hue_min, + current->hsl_range.hue_min); + lightbulb_state.hue_min = current->hsl_range.hue_min; + lightbulb_state_changed(); + } else { + log_info("Min hue update -same value (%u)" NL, + lightbulb_state.hue_min); + } + if (lightbulb_state.hue_max != current->hsl_range.hue_max) { + log_info("Max hue update: from %u to %u" NL, + lightbulb_state.hue_max, + current->hsl_range.hue_max); + lightbulb_state.hue_max = current->hsl_range.hue_max; + lightbulb_state_changed(); + } else { + log_info("Max hue update -same value (%u)" NL, + lightbulb_state.hue_max); + } + if (lightbulb_state.saturation_min != current->hsl_range.saturation_min) { + log_info("Min_saturation_change: from %u to %u" NL, + lightbulb_state.saturation_min, + current->hsl_range.saturation_min); + lightbulb_state.saturation_min = current->hsl_range.saturation_min; + lightbulb_state_changed(); + } else { + log_info("Min saturation update -same value (%u)" NL, + lightbulb_state.saturation_min); + } + if (lightbulb_state.saturation_max != current->hsl_range.saturation_max) { + log_info("Max_saturation_change: from %u to %u" NL, + lightbulb_state.saturation_max, + current->hsl_range.saturation_max); + lightbulb_state.saturation_max = current->hsl_range.saturation_max; + lightbulb_state_changed(); + } else { + log_info("Max saturation update -same value (%u)" NL, + lightbulb_state.saturation_max); + } + break; + + default: + break; + } +} + +/** @} (end addtogroup LightHSLSetup) */ + +/***************************************************************************//** + * \defgroup LightHSLHue + * \brief Light HSL Hue Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup LightHSLHue + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to light HSL hue request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hsl_hue_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_lighting_state_hsl_hue; + current.hsl_hue.hue = lightbulb_state.hue_current; + + target.kind = mesh_lighting_state_hsl_hue; + target.hsl_hue.hue = lightbulb_state.hue_target; + + return generic_server_respond(MESH_LIGHTING_HSL_HUE_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + NO_FLAGS); +} + +/***************************************************************************//** + * Update light HSL hue state. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hsl_hue_update(uint16_t element_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_lighting_state_hsl_hue; + current.hsl_hue.hue = lightbulb_state.hue_current; + + target.kind = mesh_lighting_state_hsl_hue; + target.hsl_hue.hue = lightbulb_state.hue_target; + + return generic_server_update(MESH_LIGHTING_HSL_HUE_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); +} + +/***************************************************************************//** + * Update light HSL hue state and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hsl_hue_update_and_publish(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t e; + (void)element_index; + + e = hsl_hue_update(BTMESH_HSL_SERVER_HUE, remaining_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_LIGHTING_HSL_HUE_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_HUE, + mesh_lighting_state_hsl_hue); + } + + return e; +} + +/***************************************************************************//** + * This function process the requests for the light HSL hue model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void hsl_hue_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)element_index; + (void)server_addr; + + log_info("hsl_hue_request: hue=%u, transition=%lu, delay=%u" NL, + request->hsl_hue, + transition_ms, delay_ms); + + if (lightbulb_state.hue_current == request->hsl_hue) { + log_info("Request for current state received; no op" NL); + } else { + if (lightbulb_state.hue_current != request->hsl_hue) { + log_info("Setting hue to <%u>" NL, request->hsl_hue); + } + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + lightbulb_state.hue_current = request->hsl_hue; + lightbulb_state.hue_target = request->hsl_hue; + + // update LED hue + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_current, + IMMEDIATE); + } else if (delay_ms > 0) { + // a delay has been specified for the hue change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + lightbulb_state.hue_target = request->hsl_hue; + sl_status_t sc = sl_simple_timer_start(&hsl_delayed_hsl_hue_timer, + delay_ms, + hsl_delayed_hsl_hue_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Hue timer"); + // store transition parameter for later use + delayed_hsl_hue_trans = transition_ms; + } else { + // no delay but transition time has been set. + lightbulb_state.hue_target = request->hsl_hue; + + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_target, + transition_ms); + + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_hue_transition_complete_timer, + transition_ms, + hsl_hue_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Hue Transition Complete timer"); + } + lightbulb_state_changed(); + + // State has changed, so the current scene number is reset + scene_server_reset_register(BTMESH_HSL_SERVER_HUE); + } + + uint32_t remaining_ms = delay_ms + transition_ms; + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + hsl_hue_response(BTMESH_HSL_SERVER_HUE, + client_addr, + appkey_index, + remaining_ms); + } + hsl_hue_update_and_publish(BTMESH_HSL_SERVER_HUE, remaining_ms); + // publish to bound states + generic_server_publish(MESH_LIGHTING_HSL_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_MAIN, + mesh_lighting_state_hsl); + generic_server_publish(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_HUE, + mesh_generic_state_level); +} + +/***************************************************************************//** + * This function is a handler for light HSL hue change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void hsl_hue_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (lightbulb_state.hue_current != current->hsl_hue.hue) { + log_info("Hue update: from %u to %u" NL, + lightbulb_state.hue_current, + current->hsl_hue.hue); + lightbulb_state.hue_current = current->hsl_hue.hue; + lightbulb_state_changed(); + } else { + log_info("Hue update -same value (%u)" NL, lightbulb_state.hue_current); + } +} + +/***************************************************************************//** + * This function is a handler for light HSL hue recall event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void hsl_hue_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + (void)element_index; + + log_info("HSL hue recall" NL); + if (transition_ms == IMMEDIATE) { + lightbulb_state.hue_target = current->hsl_hue.hue; + } else { + lightbulb_state.hue_target = target->hsl_hue.hue; + } + + if (lightbulb_state.hue_current == lightbulb_state.hue_target) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall HSL hue to %u with transition=%lu ms" NL, + lightbulb_state.hue_target, + transition_ms); + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_target, + transition_ms); + + if (transition_ms == IMMEDIATE) { + lightbulb_state.hue_current = current->hsl_hue.hue; + } else { + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_hue_transition_complete_timer, + transition_ms, + hsl_hue_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Hue Transition Complete timer"); + } + lightbulb_state_changed(); + } + + hsl_hue_update_and_publish(BTMESH_HSL_SERVER_HUE, transition_ms); +} + +/***************************************************************************//** + * This function is called when a light HSL hue request + * with non-zero transition time has completed. + ******************************************************************************/ +static void hsl_hue_transition_complete(void) +{ + // transition done -> set state, update and publish + lightbulb_state.hue_current = lightbulb_state.hue_target; + + log_info("Transition complete. New hue is %u" NL, lightbulb_state.hue_current); + + lightbulb_state_changed(); + hsl_hue_update_and_publish(BTMESH_HSL_SERVER_HUE, IMMEDIATE); +} + +/***************************************************************************//** + * This function is called when delay for light HSL hue request has completed. + ******************************************************************************/ +static void delayed_hsl_hue_request(void) +{ + log_info("Starting delayed HSL hue request: hue %u -> %u, %lu ms" NL, + lightbulb_state.hue_current, + lightbulb_state.hue_target, + delayed_hsl_hue_trans); + + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_target, + delayed_hsl_hue_trans); + + if (delayed_hsl_hue_trans == 0) { + // no transition delay, update state immediately + lightbulb_state.hue_current = lightbulb_state.hue_target; + + lightbulb_state_changed(); + hsl_hue_update_and_publish(BTMESH_HSL_SERVER_HUE, + delayed_hsl_hue_trans); + } else { + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_hue_transition_complete_timer, + delayed_hsl_hue_trans, + hsl_hue_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Hue Transition Complete timer"); + } +} + +/** @} (end addtogroup LightHSLHue) */ + +/***************************************************************************//** + * \defgroup HueGenericLevel + * \brief Generic Level Server model on hue element. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup HueGenericLevel + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to generic level request on hue element. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hue_level_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_level; + current.level.level = lightbulb_state.hue_level_current; + + target.kind = mesh_generic_state_level; + target.level.level = lightbulb_state.hue_level_target; + + return generic_server_respond(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + NO_FLAGS); +} + +/***************************************************************************//** + * Update generic level state on hue element. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hue_level_update(uint16_t element_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_level; + current.level.level = lightbulb_state.hue_level_current; + + target.kind = mesh_generic_state_level; + target.level.level = lightbulb_state.hue_level_target; + + return generic_server_update(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); +} + +/***************************************************************************//** + * Update generic level state on hue element + * and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hue_level_update_and_publish(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t e; + + e = hue_level_update(element_index, remaining_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + mesh_generic_state_level); + } + + return e; +} + +/***************************************************************************//** + * Schedule next generic level move request on hue element. + * + * @param[in] remaining_delta The remaining level delta to the target state. + ******************************************************************************/ +static void hue_level_move_schedule_next_request(int32_t remaining_delta) +{ + uint32_t transition_ms = 0; + if (remaining_delta == 0) { + if (move_hue_level_delta > 0) { + lightbulb_state.hue_level_current = 0x8000; // Min level value + lightbulb_state.hue_level_target = 0x7FFF; // Max level value + } else if (move_hue_level_delta < 0) { + lightbulb_state.hue_level_current = 0x7FFF; // Max level value + lightbulb_state.hue_level_target = 0x8000; // Min level value + } + transition_ms = move_hue_level_trans; + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_current + move_hue_level_delta, + move_hue_level_trans); + } else if (abs(remaining_delta) < abs(move_hue_level_delta)) { + transition_ms = (uint32_t)(((int64_t)move_hue_level_trans * remaining_delta) + / move_hue_level_delta); + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_target, transition_ms); + } else { + transition_ms = move_hue_level_trans; + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_current + move_hue_level_delta, + move_hue_level_trans); + } + sl_status_t sc = sl_simple_timer_start(&hsl_hue_level_move_timer, + transition_ms, + hsl_hue_level_move_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Hue Generic Level Move timer"); +} + +/***************************************************************************//** + * Handle generic level move request on hue element. + ******************************************************************************/ +static void hue_level_move_request(void) +{ + 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, + move_hue_level_delta, + move_hue_level_trans); + + int32_t remaining_delta = (int32_t)lightbulb_state.hue_level_target + - lightbulb_state.hue_level_current; + + 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); +} + +/***************************************************************************//** + * Stop generic level move on hue element. + ******************************************************************************/ +static void hue_level_move_stop(void) +{ + // Cancel timers + sl_status_t sc = sl_simple_timer_stop(&hsl_delayed_hue_level_timer); + app_assert_status_f(sc, "Failed to stop Delayed Hue Generic Level timer"); + sc = sl_simple_timer_stop(&hsl_hue_level_move_timer); + app_assert_status_f(sc, "Failed to stop Hue Generic Level Move timer"); + //Reset move parameters + move_hue_level_delta = 0; + move_hue_level_trans = 0; +} + +/***************************************************************************//** + * This function process the requests for the generic level model on hue element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void hue_level_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + + uint16_t hue; + uint32_t remaining_ms = UNKNOWN_REMAINING_TIME; + + switch (request->kind) { + case mesh_generic_request_level: + log_info("hue_level_request (generic): level=%d, transition=%lu, delay=%u" NL, + request->level, transition_ms, delay_ms); + + hue_level_move_stop(); + if (lightbulb_state.hue_level_current == request->level) { + log_info("Request for current state received; no op" NL); + lightbulb_state.hue_level_target = request->level; + } else { + log_info("Setting hue generic level to <%d>" NL, request->level); + + hue = request->level + 32768; + + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + lightbulb_state.hue_level_current = request->level; + lightbulb_state.hue_level_target = request->level; + lightbulb_state.hue_current = hue; + lightbulb_state.hue_target = hue; + + // update LED Hue + sl_btmesh_hsl_set_hue_level(hue, IMMEDIATE); + } else if (delay_ms > 0) { + // a delay has been specified for the change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + lightbulb_state.hue_level_target = request->level; + lightbulb_state.hue_target = hue; + hue_level_request_kind = mesh_generic_request_level; + sl_status_t sc = sl_simple_timer_start(&hsl_delayed_hue_level_timer, + delay_ms, + hsl_delayed_hue_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Hue Generic Level timer"); + // store transition parameter for later use + delayed_hue_level_trans = transition_ms; + } else { + // no delay but transition time has been set. + lightbulb_state.hue_level_target = request->level; + lightbulb_state.hue_target = hue; + sl_btmesh_hsl_set_hue_level(hue, transition_ms); + + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_hue_level_transition_complete_timer, + delayed_hue_level_trans, + hsl_hue_level_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Hue Generic Level Transition Complete timer"); + } + + // State has changed, so the current scene number is reset + scene_server_reset_register(element_index); + } + + remaining_ms = delay_ms + transition_ms; + break; + + case mesh_generic_request_level_move: { + log_info("hue_level_request (move): delta=%d, transition=%lu, delay=%u" NL, + request->level, transition_ms, delay_ms); + // Store move parameters + move_hue_level_delta = request->level; + move_hue_level_trans = transition_ms; + + int16_t requested_level = 0; + if (move_hue_level_delta > 0) { + requested_level = 0x7FFF; // Max level value + } else if (move_hue_level_delta < 0) { + requested_level = 0x8000; // Min level value + } + + if (lightbulb_state.hue_level_current == requested_level) { + log_info("Request for current state received; no op" NL); + lightbulb_state.hue_level_target = requested_level; + remaining_ms = IMMEDIATE; + } else { + log_info("Setting hue level to <%d>" NL, requested_level); + + hue = requested_level + 32768; + + if (delay_ms > 0) { + // a delay has been specified for the move. Start a soft timer + // that will trigger the move after the given delay + // Current state remains as is for now + lightbulb_state.hue_level_target = requested_level; + lightbulb_state.hue_target = hue; + hue_level_request_kind = mesh_generic_request_level_move; + sl_status_t sc = sl_simple_timer_start(&hsl_delayed_hue_level_timer, + delay_ms, + hsl_delayed_hue_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Hue Generic Level timer"); + } else { + // no delay so start move + lightbulb_state.hue_level_target = requested_level; + lightbulb_state.hue_target = hue; + + int32_t remaining_delta = (int32_t)lightbulb_state.hue_level_target + - lightbulb_state.hue_level_current; + hue_level_move_schedule_next_request(remaining_delta); + } + remaining_ms = UNKNOWN_REMAINING_TIME; + + // State has changed, so the current scene number is reset + scene_server_reset_register(element_index); + } + break; + } + + case mesh_generic_request_level_halt: + log_info("hue_level_request (halt)" NL); + + // Set current state + lightbulb_state.hue_current = sl_btmesh_get_hue(); + lightbulb_state.hue_target = lightbulb_state.hue_current; + lightbulb_state.hue_level_current = lightbulb_state.hue_current - 32768; + lightbulb_state.hue_level_target = lightbulb_state.hue_level_current; + if (delay_ms > 0) { + // a delay has been specified for the move halt. Start a soft timer + // that will trigger the move halt after the given delay + // Current state remains as is for now + remaining_ms = delay_ms; + hue_level_request_kind = mesh_generic_request_level_halt; + sl_status_t sc = sl_simple_timer_start(&hsl_delayed_hue_level_timer, + delay_ms, + hsl_delayed_hue_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Hue Generic Level timer"); + } else { + hue_level_move_stop(); + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_current, IMMEDIATE); + remaining_ms = IMMEDIATE; + } + break; + + default: + break; + } + + lightbulb_state_changed(); + + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + hue_level_response(element_index, client_addr, appkey_index, remaining_ms); + } + hue_level_update_and_publish(element_index, remaining_ms); + // publish to bound states + generic_server_publish(MESH_LIGHTING_HSL_HUE_SERVER_MODEL_ID, + element_index, + mesh_lighting_state_hsl_hue); +} + +/***************************************************************************//** + * This function is a handler for generic level change event + * on hue element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void hue_level_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (lightbulb_state.hue_level_current != current->level.level) { + log_info("Hue generic level update: from %d to %d" NL, + lightbulb_state.hue_level_current, + current->level.level); + lightbulb_state.hue_level_current = current->level.level; + lightbulb_state_changed(); + hue_level_move_stop(); + } else { + log_info("Hue generic level update -same value (%d)" NL, + lightbulb_state.hue_level_current); + } +} + +/***************************************************************************//** + * This function is a handler for generic level recall event + * on hue element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void hue_level_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + (void)element_index; + + log_info("Hue Generic Level recall" NL); + if (transition_ms == IMMEDIATE) { + lightbulb_state.hue_level_target = current->level.level; + } else { + lightbulb_state.hue_level_target = target->level.level; + } + + if (lightbulb_state.hue_level_current == lightbulb_state.hue_level_target) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall hue level to %d with transition=%lu ms" NL, + lightbulb_state.hue_level_target, + transition_ms); + if (transition_ms == IMMEDIATE) { + lightbulb_state.hue_level_current = current->level.level; + } else { + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_hue_level_transition_complete_timer, + transition_ms, + hsl_hue_level_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Hue Generic Level Transition Complete timer"); + } + lightbulb_state_changed(); + } +} + +/***************************************************************************//** + * This function is called when a generic level request on hue element + * with non-zero transition time has completed. + ******************************************************************************/ +static void hue_level_transition_complete(void) +{ + // transition done -> set state, update and publish + lightbulb_state.hue_level_current = lightbulb_state.hue_level_target; + lightbulb_state.hue_current = lightbulb_state.hue_target; + + log_info("Transition complete. New hue generic level is %d" NL, + lightbulb_state.hue_level_current); + + lightbulb_state_changed(); + hue_level_update_and_publish(BTMESH_HSL_SERVER_HUE, IMMEDIATE); +} + +/***************************************************************************//** + * This function is called when delay for generic level request + * on hue element has completed. + ******************************************************************************/ +static void delayed_hue_level_request(void) +{ + log_info("Starting delayed hue generic level request: level %d -> %d, %lu ms" NL, + lightbulb_state.hue_level_current, + lightbulb_state.hue_level_target, + delayed_hue_level_trans); + + switch (hue_level_request_kind) { + case mesh_generic_request_level: + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_target, + delayed_hue_level_trans); + + if (delayed_hue_level_trans == 0) { + // no transition delay, update state immediately + lightbulb_state.hue_level_current = lightbulb_state.hue_level_target; + lightbulb_state.hue_current = lightbulb_state.hue_target; + + lightbulb_state_changed(); + hue_level_update_and_publish(BTMESH_HSL_SERVER_HUE, + delayed_hue_level_trans); + } else { + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_hue_level_transition_complete_timer, + delayed_hue_level_trans, + hsl_hue_level_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Hue Generic Level Transition Complete timer"); + } + break; + + case mesh_generic_request_level_move: + hue_level_move_schedule_next_request((int32_t)lightbulb_state.hue_level_target + - lightbulb_state.hue_level_current); + hue_level_update_and_publish(BTMESH_HSL_SERVER_HUE, + UNKNOWN_REMAINING_TIME); + break; + + case mesh_generic_request_level_halt: + // Set current state + lightbulb_state.hue_current = sl_btmesh_get_hue(); + lightbulb_state.hue_target = lightbulb_state.hue_current; + lightbulb_state.hue_level_current = lightbulb_state.hue_current - 32768; + lightbulb_state.hue_level_target = lightbulb_state.hue_level_current; + hue_level_move_stop(); + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_current, + IMMEDIATE); + hue_level_update_and_publish(BTMESH_HSL_SERVER_HUE, IMMEDIATE); + break; + + default: + break; + } +} + +/** @} (end addtogroup HueGenericLevel) */ + +/***************************************************************************//** + * \defgroup LightHSLSaturation + * \brief Light HSL Saturation Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup LightHSLSaturation + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to light HSL saturation request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hsl_saturation_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_lighting_state_hsl_saturation; + current.hsl_saturation.saturation = lightbulb_state.saturation_current; + + target.kind = mesh_lighting_state_hsl_saturation; + target.hsl_saturation.saturation = lightbulb_state.saturation_target; + + return generic_server_respond(MESH_LIGHTING_HSL_SATURATION_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + NO_FLAGS); +} + +/***************************************************************************//** + * Update light HSL saturation state. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hsl_saturation_update(uint16_t element_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_lighting_state_hsl_saturation; + current.hsl_saturation.saturation = lightbulb_state.saturation_current; + + target.kind = mesh_lighting_state_hsl_saturation; + target.hsl_saturation.saturation = lightbulb_state.saturation_target; + + return generic_server_update(MESH_LIGHTING_HSL_SATURATION_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); +} + +/***************************************************************************//** + * Update light HSL saturation state and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t hsl_saturation_update_and_publish(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t e; + (void)element_index; + + e = hsl_saturation_update(BTMESH_HSL_SERVER_SATURATION, remaining_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_LIGHTING_HSL_SATURATION_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_SATURATION, + mesh_lighting_state_hsl_saturation); + } + + return e; +} + +/***************************************************************************//** + * This function process the requests for the light HSL saturation model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void hsl_saturation_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)element_index; + (void)server_addr; + + log_info("hsl_saturation_request: saturation=%u, transition=%lu, delay=%u" NL, + request->hsl_saturation, + transition_ms, delay_ms); + + if (lightbulb_state.saturation_current == request->hsl_saturation) { + log_info("Request for current state received; no op" NL); + } else { + if (lightbulb_state.saturation_current != request->hsl_saturation) { + log_info("Setting saturation to <%u>" NL, request->hsl_saturation); + } + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + lightbulb_state.saturation_current = request->hsl_saturation; + lightbulb_state.saturation_target = request->hsl_saturation; + + // update LED saturation + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_current, + IMMEDIATE); + } else if (delay_ms > 0) { + // a delay has been specified for the saturation change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + lightbulb_state.saturation_target = request->hsl_saturation; + sl_status_t sc = sl_simple_timer_start(&hsl_delayed_hsl_saturation_timer, + delay_ms, + hsl_delayed_hsl_saturation_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Saturation timer"); + // store transition parameter for later use + delayed_hsl_saturation_trans = transition_ms; + } else { + // no delay but transition time has been set. + lightbulb_state.saturation_target = request->hsl_saturation; + + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_target, + transition_ms); + + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_saturation_transition_complete_timer, + transition_ms, + hsl_saturation_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Saturation Transition Complete timer"); + } + lightbulb_state_changed(); + + // State has changed, so the current scene number is reset + scene_server_reset_register(BTMESH_HSL_SERVER_SATURATION); + } + + uint32_t remaining_ms = delay_ms + transition_ms; + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + hsl_saturation_response(BTMESH_HSL_SERVER_SATURATION, + client_addr, + appkey_index, + remaining_ms); + } + hsl_saturation_update_and_publish(BTMESH_HSL_SERVER_SATURATION, remaining_ms); + // publish to bound states + generic_server_publish(MESH_LIGHTING_HSL_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_MAIN, + mesh_lighting_state_hsl); + generic_server_publish(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_SATURATION, + mesh_generic_state_level); +} + +/***************************************************************************//** + * This function is a handler for light HSL saturation change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void hsl_saturation_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (lightbulb_state.saturation_current != current->hsl_saturation.saturation) { + log_info("Saturation update: from %u to %u" NL, + lightbulb_state.saturation_current, + current->hsl_saturation.saturation); + lightbulb_state.saturation_current = current->hsl_saturation.saturation; + lightbulb_state_changed(); + } else { + log_info("Saturation update -same value (%u)" NL, lightbulb_state.saturation_current); + } +} + +/***************************************************************************//** + * This function is a handler for light HSL saturation recall event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void hsl_saturation_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + (void)element_index; + + log_info("HSL saturation recall" NL); + if (transition_ms == IMMEDIATE) { + lightbulb_state.saturation_target = current->hsl_saturation.saturation; + } else { + lightbulb_state.saturation_target = target->hsl_saturation.saturation; + } + + if (lightbulb_state.saturation_current == lightbulb_state.saturation_target) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall HSL saturation to %u with transition=%lu ms" NL, + lightbulb_state.saturation_target, + transition_ms); + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_target, + transition_ms); + + if (transition_ms == IMMEDIATE) { + lightbulb_state.saturation_current = current->hsl_saturation.saturation; + } else { + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_saturation_transition_complete_timer, + transition_ms, + hsl_saturation_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Saturation Transition Complete timer"); + } + lightbulb_state_changed(); + } + + hsl_saturation_update_and_publish(BTMESH_HSL_SERVER_SATURATION, transition_ms); +} + +/***************************************************************************//** + * This function is called when a light HSL saturation request + * with non-zero transition time has completed. + ******************************************************************************/ +static void hsl_saturation_transition_complete(void) +{ + // transition done -> set state, update and publish + lightbulb_state.saturation_current = lightbulb_state.saturation_target; + + log_info("Transition complete. New saturation is %u" NL, + lightbulb_state.saturation_current); + + lightbulb_state_changed(); + hsl_saturation_update_and_publish(BTMESH_HSL_SERVER_SATURATION, IMMEDIATE); +} + +/***************************************************************************//** + * This function is called when delay for light HSL saturation request has completed. + ******************************************************************************/ +static void delayed_hsl_saturation_request(void) +{ + log_info("Starting delayed HSL saturation request: saturation %u -> %u, %lu ms" NL, + lightbulb_state.saturation_current, + lightbulb_state.saturation_target, + delayed_hsl_saturation_trans); + + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_target, + delayed_hsl_saturation_trans); + + if (delayed_hsl_saturation_trans == 0) { + // no transition delay, update state immediately + lightbulb_state.saturation_current = lightbulb_state.saturation_target; + + lightbulb_state_changed(); + hsl_saturation_update_and_publish(BTMESH_HSL_SERVER_SATURATION, + delayed_hsl_saturation_trans); + } else { + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_saturation_transition_complete_timer, + delayed_hsl_saturation_trans, + hsl_saturation_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Saturation Transition Complete timer"); + } +} + +/** @} (end addtogroup LightHSLSaturation) */ + +/***************************************************************************//** + * \defgroup SaturationGenericLevel + * \brief Generic Level Server model on saturation element. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup SaturationGenericLevel + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to generic level request on saturation element. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t saturation_level_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_level; + current.level.level = lightbulb_state.saturation_level_current; + + target.kind = mesh_generic_state_level; + target.level.level = lightbulb_state.saturation_level_target; + + return generic_server_respond(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + NO_FLAGS); +} + +/***************************************************************************//** + * Update generic level state on saturation element. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t saturation_level_update(uint16_t element_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_level; + current.level.level = lightbulb_state.saturation_level_current; + + target.kind = mesh_generic_state_level; + target.level.level = lightbulb_state.saturation_level_target; + + return generic_server_update(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); +} + +/***************************************************************************//** + * Update generic level state on saturation element + * and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t saturation_level_update_and_publish(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t e; + + e = saturation_level_update(element_index, remaining_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + mesh_generic_state_level); + } + + return e; +} + +/***************************************************************************//** + * Schedule next generic level move request on saturation element. + * + * @param[in] remaining_delta The remaining level delta to the target state. + ******************************************************************************/ +static void saturation_level_move_schedule_next_request(int32_t remaining_delta) +{ + uint32_t transition_ms = 0; + if (remaining_delta == 0) { + if (move_saturation_level_delta > 0) { + lightbulb_state.saturation_level_current = 0x8000; // Min level value + lightbulb_state.saturation_level_target = 0x7FFF; // Max level value + } else if (move_saturation_level_delta < 0) { + lightbulb_state.saturation_level_current = 0x7FFF; // Max level value + lightbulb_state.saturation_level_target = 0x8000; // Min level value + } + transition_ms = move_saturation_level_trans; + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_current + move_saturation_level_delta, + move_saturation_level_trans); + } else if (abs(remaining_delta) < abs(move_saturation_level_delta)) { + transition_ms = (uint32_t)(((int64_t)move_saturation_level_trans * remaining_delta) + / move_saturation_level_delta); + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_target, + transition_ms); + } else { + transition_ms = move_saturation_level_trans; + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_current + move_saturation_level_delta, + move_saturation_level_trans); + } + sl_status_t sc = sl_simple_timer_start(&hsl_saturation_level_move_timer, + transition_ms, + hsl_saturation_level_move_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Saturation Generic Level Move timer"); +} + +/***************************************************************************//** + * Handle generic level move request on saturation element. + ******************************************************************************/ +static void saturation_level_move_request(void) +{ + 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, + move_saturation_level_delta, + move_saturation_level_trans); + + int32_t remaining_delta = (int32_t)lightbulb_state.saturation_level_target + - lightbulb_state.saturation_level_current; + + 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); +} + +/***************************************************************************//** + * Stop generic level move on saturation element. + ******************************************************************************/ +static void saturation_level_move_stop(void) +{ + // Cancel timers + sl_status_t sc = sl_simple_timer_stop(&hsl_delayed_saturation_level_timer); + app_assert_status_f(sc, "Failed to stop Delayed Saturation Generic Level timer"); + sc = sl_simple_timer_stop(&hsl_saturation_level_move_timer); + app_assert_status_f(sc, "Failed to stop Saturation Generic Level Move timer"); + //Reset move parameters + move_saturation_level_delta = 0; + move_saturation_level_trans = 0; +} + +/***************************************************************************//** + * This function process the requests for the generic level model on saturation element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void saturation_level_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + + uint16_t saturation; + uint32_t remaining_ms = UNKNOWN_REMAINING_TIME; + + switch (request->kind) { + case mesh_generic_request_level: + log_info("saturation_level_request (generic): level=%d, transition=%lu, delay=%u" NL, + request->level, transition_ms, delay_ms); + + saturation_level_move_stop(); + if (lightbulb_state.saturation_level_current == request->level) { + log_info("Request for current state received; no op" NL); + lightbulb_state.saturation_level_target = request->level; + } else { + log_info("Setting saturation generic level to <%d>" NL, request->level); + + saturation = request->level + 32768; + + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + lightbulb_state.saturation_level_current = request->level; + lightbulb_state.saturation_level_target = request->level; + lightbulb_state.saturation_current = saturation; + lightbulb_state.saturation_target = saturation; + + // update LED Saturation + sl_btmesh_hsl_set_saturation_level(saturation, IMMEDIATE); + } else if (delay_ms > 0) { + // a delay has been specified for the change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + lightbulb_state.saturation_level_target = request->level; + lightbulb_state.saturation_target = saturation; + saturation_level_request_kind = mesh_generic_request_level; + sl_status_t sc = sl_simple_timer_start(&hsl_delayed_saturation_level_timer, + delay_ms, + hsl_delayed_saturation_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Saturation Generic Level timer"); + // store transition parameter for later use + delayed_saturation_level_trans = transition_ms; + } else { + // no delay but transition time has been set. + lightbulb_state.saturation_level_target = request->level; + lightbulb_state.saturation_target = saturation; + sl_btmesh_hsl_set_saturation_level(saturation, transition_ms); + + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_saturation_level_transition_complete_timer, + delayed_saturation_level_trans, + hsl_saturation_level_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Saturation Generic Level Transition Complete timer"); + } + + // State has changed, so the current scene number is reset + scene_server_reset_register(element_index); + } + + remaining_ms = delay_ms + transition_ms; + break; + + case mesh_generic_request_level_move: { + log_info("saturation_level_request (move): delta=%d, transition=%lu, delay=%u" NL, + request->level, transition_ms, delay_ms); + // Store move parameters + move_saturation_level_delta = request->level; + move_saturation_level_trans = transition_ms; + + int16_t requested_level = 0; + if (move_saturation_level_delta > 0) { + requested_level = 0x7FFF; // Max level value + } else if (move_saturation_level_delta < 0) { + requested_level = 0x8000; // Min level value + } + + if (lightbulb_state.saturation_level_current == requested_level) { + log_info("Request for current state received; no op" NL); + lightbulb_state.saturation_level_target = requested_level; + remaining_ms = IMMEDIATE; + } else { + log_info("Setting saturation level to <%d>" NL, requested_level); + + saturation = requested_level + 32768; + + if (delay_ms > 0) { + // a delay has been specified for the move. Start a soft timer + // that will trigger the move after the given delay + // Current state remains as is for now + lightbulb_state.saturation_level_target = requested_level; + lightbulb_state.saturation_target = saturation; + saturation_level_request_kind = mesh_generic_request_level_move; + sl_status_t sc = sl_simple_timer_start(&hsl_delayed_saturation_level_timer, + delay_ms, + hsl_delayed_saturation_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Saturation Generic Level timer"); + } else { + // no delay so start move + lightbulb_state.saturation_level_target = requested_level; + lightbulb_state.saturation_target = saturation; + + int32_t remaining_delta = (int32_t)lightbulb_state.saturation_level_target + - lightbulb_state.saturation_level_current; + saturation_level_move_schedule_next_request(remaining_delta); + } + remaining_ms = UNKNOWN_REMAINING_TIME; + + // State has changed, so the current scene number is reset + scene_server_reset_register(element_index); + } + break; + } + + case mesh_generic_request_level_halt: + log_info("saturation_level_request (halt)" NL); + + // Set current state + lightbulb_state.saturation_current = sl_btmesh_get_saturation(); + lightbulb_state.saturation_target = lightbulb_state.saturation_current; + lightbulb_state.saturation_level_current = lightbulb_state.saturation_current - 32768; + lightbulb_state.saturation_level_target = lightbulb_state.saturation_level_current; + if (delay_ms > 0) { + // a delay has been specified for the move halt. Start a soft timer + // that will trigger the move halt after the given delay + // Current state remains as is for now + remaining_ms = delay_ms; + saturation_level_request_kind = mesh_generic_request_level_halt; + sl_status_t sc = sl_simple_timer_start(&hsl_delayed_saturation_level_timer, + delay_ms, + hsl_delayed_saturation_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Saturation Generic Level timer"); + } else { + saturation_level_move_stop(); + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_current, + IMMEDIATE); + remaining_ms = IMMEDIATE; + } + break; + + default: + break; + } + + lightbulb_state_changed(); + + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + saturation_level_response(element_index, + client_addr, + appkey_index, + remaining_ms); + } + saturation_level_update_and_publish(element_index, remaining_ms); + // publish to bound states + generic_server_publish(MESH_LIGHTING_HSL_SATURATION_SERVER_MODEL_ID, + element_index, + mesh_lighting_state_hsl_saturation); +} + +/***************************************************************************//** + * This function is a handler for generic level change event + * on saturation element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void saturation_level_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (lightbulb_state.saturation_level_current != current->level.level) { + log_info("Saturation generic level update: from %d to %d" NL, + lightbulb_state.saturation_level_current, + current->level.level); + lightbulb_state.saturation_level_current = current->level.level; + lightbulb_state_changed(); + saturation_level_move_stop(); + } else { + log_info("Saturation generic level update -same value (%d)" NL, + lightbulb_state.saturation_level_current); + } +} + +/***************************************************************************//** + * This function is a handler for generic level recall event + * on saturation element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void saturation_level_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + (void)element_index; + + log_info("Saturation Generic Level recall" NL); + if (transition_ms == IMMEDIATE) { + lightbulb_state.saturation_level_target = current->level.level; + } else { + lightbulb_state.saturation_level_target = target->level.level; + } + + if (lightbulb_state.saturation_level_current == lightbulb_state.saturation_level_target) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall saturation level to %d with transition=%lu ms" NL, + lightbulb_state.saturation_level_target, + transition_ms); + if (transition_ms == IMMEDIATE) { + lightbulb_state.saturation_level_current = current->level.level; + } else { + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_saturation_level_transition_complete_timer, + transition_ms, + hsl_saturation_level_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Saturation Generic Level Transition Complete timer"); + } + lightbulb_state_changed(); + } +} + +/***************************************************************************//** + * This function is called when a generic level request on saturation element + * with non-zero transition time has completed. + ******************************************************************************/ +static void saturation_level_transition_complete(void) +{ + // transition done -> set state, update and publish + lightbulb_state.saturation_level_current = lightbulb_state.saturation_level_target; + lightbulb_state.saturation_current = lightbulb_state.saturation_target; + + log_info("Transition complete. New saturation generic level is %d" NL, + lightbulb_state.saturation_level_current); + + lightbulb_state_changed(); + saturation_level_update_and_publish(BTMESH_HSL_SERVER_SATURATION, IMMEDIATE); +} + +/***************************************************************************//** + * This function is called when delay for generic level request + * on saturation element has completed. + ******************************************************************************/ +static void delayed_saturation_level_request(void) +{ + log_info("Starting delayed saturation generic level request: level %d -> %d, %lu ms" NL, + lightbulb_state.saturation_level_current, + lightbulb_state.saturation_level_target, + delayed_saturation_level_trans); + + switch (saturation_level_request_kind) { + case mesh_generic_request_level: + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_target, + delayed_saturation_level_trans); + + if (delayed_saturation_level_trans == 0) { + // no transition delay, update state immediately + lightbulb_state.saturation_level_current = lightbulb_state.saturation_level_target; + lightbulb_state.saturation_current = lightbulb_state.saturation_target; + + lightbulb_state_changed(); + saturation_level_update_and_publish(BTMESH_HSL_SERVER_SATURATION, + delayed_saturation_level_trans); + } else { + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&hsl_saturation_level_transition_complete_timer, + delayed_saturation_level_trans, + hsl_saturation_level_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Saturation Generic Level Transition Complete timer"); + } + break; + + case mesh_generic_request_level_move: + saturation_level_move_schedule_next_request((int32_t)lightbulb_state.saturation_level_target + - lightbulb_state.saturation_level_current); + saturation_level_update_and_publish(BTMESH_HSL_SERVER_SATURATION, + UNKNOWN_REMAINING_TIME); + break; + + case mesh_generic_request_level_halt: + // Set current state + lightbulb_state.saturation_current = sl_btmesh_get_saturation(); + lightbulb_state.saturation_target = lightbulb_state.saturation_current; + lightbulb_state.saturation_level_current = lightbulb_state.saturation_current - 32768; + lightbulb_state.saturation_level_target = lightbulb_state.saturation_level_current; + saturation_level_move_stop(); + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_current, + IMMEDIATE); + saturation_level_update_and_publish(BTMESH_HSL_SERVER_SATURATION, + IMMEDIATE); + break; + + default: + break; + } +} + +/** @} (end addtogroup SaturationGenericLevel) */ + +/***************************************************************************//** + * Initialization of the models supported by this node. + * This function registers callbacks for each of the supported models. + ******************************************************************************/ +static void init_hsl_models(void) +{ + generic_server_register_handler(MESH_LIGHTING_HSL_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_MAIN, + hsl_request, + hsl_change, + hsl_recall); + + generic_server_register_handler(MESH_LIGHTING_HSL_SETUP_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_MAIN, + hsl_setup_request, + hsl_setup_change, + NULL); + + generic_server_register_handler(MESH_LIGHTING_HSL_HUE_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_HUE, + hsl_hue_request, + hsl_hue_change, + hsl_hue_recall); + + generic_server_register_handler(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_HUE, + hue_level_request, + hue_level_change, + hue_level_recall); + + generic_server_register_handler(MESH_LIGHTING_HSL_SATURATION_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_SATURATION, + hsl_saturation_request, + hsl_saturation_change, + hsl_saturation_recall); + + generic_server_register_handler(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + BTMESH_HSL_SERVER_SATURATION, + saturation_level_request, + saturation_level_change, + saturation_level_recall); +} + +/***************************************************************************//** + * This function loads the saved light state from Persistent Storage and + * copies the data in the global variable lightbulb_state. + * If PS key with ID SL_BTMESH_HSL_SERVER_PS_KEY_CFG_VAL does not exist or loading failed, + * lightbulb_state is set to zero and some default values are written to it. + * + * @return Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightbulb_state_load(void) +{ + sl_status_t sc; + size_t ps_len = 0; + struct lightbulb_state ps_data; + + sc = sl_bt_nvm_load(SL_BTMESH_HSL_SERVER_PS_KEY_CFG_VAL, + sizeof(ps_data), + &ps_len, + (uint8_t *)&ps_data); + + // Set default values if ps_load fail or size of lightbulb_state has changed + if ((sc != SL_STATUS_OK) || (ps_len != sizeof(struct lightbulb_state))) { + memset(&lightbulb_state, 0, sizeof(struct lightbulb_state)); + lightbulb_state.hue_default = SL_BTMESH_HSL_SERVER_DEFAULT_HUE_CFG_VAL; + lightbulb_state.hue_min = SL_BTMESH_HSL_SERVER_MINIMUM_HUE_CFG_VAL; + lightbulb_state.hue_max = SL_BTMESH_HSL_SERVER_MAXIMUM_HUE_CFG_VAL; + lightbulb_state.saturation_default = SL_BTMESH_HSL_SERVER_DEFAULT_SATURATION_CFG_VAL; + lightbulb_state.saturation_min = SL_BTMESH_HSL_SERVER_MINIMUM_SATURATION_CFG_VAL; + lightbulb_state.saturation_max = SL_BTMESH_HSL_SERVER_MAXIMUM_SATURATION_CFG_VAL; + + // Check if default values are valid and correct them if needed + lightbulb_state_validate_and_correct(); + + if (sc == SL_STATUS_OK) { + // The sl_bt_nvm_load call was successful but the size of the loaded data + // differs from the expected size therefore error code shall be set + sc = SL_STATUS_INVALID_STATE; + log_error("HSL server lightbulb state loaded from PS with invalid size, " + "use defaults. (expected=%zd,actual=%zd)" NL, + sizeof(struct lightbulb_state), + ps_len); + } else { + log_status_error_f(sc, + "HSL server lightbulb state load from PS failed " + "or nvm is empty, use defaults." NL); + } + } else { + memcpy(&lightbulb_state, &ps_data, ps_len); + } + + return sc; +} + +/***************************************************************************//** + * This function saves the current light state in Persistent Storage so that + * the data is preserved over reboots and power cycles. + * The light state is hold in a global variable lightbulb_state. + * A PS key with ID SL_BTMESH_HSL_SERVER_PS_KEY_CFG_VAL is used to store the whole struct. + * + * @return Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightbulb_state_store(void) +{ + sl_status_t sc; + + sc = sl_bt_nvm_save(SL_BTMESH_HSL_SERVER_PS_KEY_CFG_VAL, + sizeof(struct lightbulb_state), + (const uint8_t *)&lightbulb_state); + + log_status_error_f(sc, "HSL server lightbulb state store in PS failed." NL); + + return sc; +} + +/***************************************************************************//** + * This function is called each time the lightbulb state in RAM is changed. + * It sets up a soft timer that will save the state in flash after small delay. + * The purpose is to reduce amount of unnecessary flash writes. + ******************************************************************************/ +static void lightbulb_state_changed(void) +{ + sl_status_t sc = sl_simple_timer_start(&hsl_state_store_timer, + SL_BTMESH_HSL_SERVER_NVM_SAVE_TIME_CFG_VAL, + hsl_state_store_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start State Store timer"); +} + +/***************************************************************************//** + * This function validates the lighbulb_state and change it if it is against + * the specification. + ******************************************************************************/ +static void lightbulb_state_validate_and_correct(void) +{ + if (lightbulb_state.hue_min > lightbulb_state.hue_max) { + lightbulb_state.hue_min = lightbulb_state.hue_max; + } + if (lightbulb_state.hue_default < lightbulb_state.hue_min) { + lightbulb_state.hue_default = lightbulb_state.hue_min; + } + if (lightbulb_state.hue_default > lightbulb_state.hue_max) { + lightbulb_state.hue_default = lightbulb_state.hue_max; + } + if (lightbulb_state.hue_current < lightbulb_state.hue_min) { + lightbulb_state.hue_current = lightbulb_state.hue_min; + } + if (lightbulb_state.hue_current > lightbulb_state.hue_max) { + lightbulb_state.hue_current = lightbulb_state.hue_max; + } + if (lightbulb_state.hue_target < lightbulb_state.hue_min) { + lightbulb_state.hue_target = lightbulb_state.hue_min; + } + if (lightbulb_state.hue_target > lightbulb_state.hue_max) { + lightbulb_state.hue_target = lightbulb_state.hue_max; + } + + if (lightbulb_state.saturation_min > lightbulb_state.saturation_max) { + lightbulb_state.saturation_min = lightbulb_state.saturation_max; + } + if (lightbulb_state.saturation_default < lightbulb_state.saturation_min) { + lightbulb_state.saturation_default = lightbulb_state.saturation_min; + } + if (lightbulb_state.saturation_default > lightbulb_state.saturation_max) { + lightbulb_state.saturation_default = lightbulb_state.saturation_max; + } + if (lightbulb_state.saturation_current < lightbulb_state.saturation_min) { + lightbulb_state.saturation_current = lightbulb_state.saturation_min; + } + if (lightbulb_state.saturation_current > lightbulb_state.saturation_max) { + lightbulb_state.saturation_current = lightbulb_state.saturation_max; + } + if (lightbulb_state.saturation_target < lightbulb_state.saturation_min) { + lightbulb_state.saturation_target = lightbulb_state.saturation_min; + } + if (lightbulb_state.saturation_target > lightbulb_state.saturation_max) { + lightbulb_state.saturation_target = lightbulb_state.saturation_max; + } +} + +/******************************************************************************* + * Lightbulb state initialization. + * This is called at each boot if provisioning is already done. + * Otherwise this function is called after provisioning is completed. + ******************************************************************************/ +void sl_btmesh_hsl_server_init(void) +{ + memset(&lightbulb_state, 0, sizeof(struct lightbulb_state)); + + lightbulb_state_load(); + + // Handle on power up behavior + uint32_t transition_ms = sl_btmesh_get_default_transition_time(); + switch (sl_btmesh_get_lightness_onpowerup()) { + case MESH_GENERIC_ON_POWER_UP_STATE_OFF: + case MESH_GENERIC_ON_POWER_UP_STATE_ON: + lightbulb_state.hue_current = lightbulb_state.hue_default; + lightbulb_state.hue_target = lightbulb_state.hue_default; + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_default, IMMEDIATE); + lightbulb_state.saturation_current = lightbulb_state.saturation_default; + lightbulb_state.saturation_target = lightbulb_state.saturation_default; + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_default, + IMMEDIATE); + break; + + case MESH_GENERIC_ON_POWER_UP_STATE_RESTORE: + if (transition_ms > 0 + && lightbulb_state.hue_target != lightbulb_state.hue_default) { + lightbulb_state.hue_current = lightbulb_state.hue_default; + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_current, IMMEDIATE); + sl_status_t sc = sl_simple_timer_start(&hsl_hue_transition_complete_timer, + transition_ms, + hsl_hue_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Hue Transition Complete timer"); + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_target, + transition_ms); + } else { + lightbulb_state.hue_current = lightbulb_state.hue_target; + sl_btmesh_hsl_set_hue_level(lightbulb_state.hue_current, IMMEDIATE); + } + + if (transition_ms > 0 + && lightbulb_state.saturation_target != lightbulb_state.saturation_default) { + lightbulb_state.saturation_current = lightbulb_state.saturation_default; + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_current, + IMMEDIATE); + sl_status_t sc = sl_simple_timer_start(&hsl_saturation_transition_complete_timer, + transition_ms, + hsl_saturation_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Saturation Transition Complete timer"); + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_target, + transition_ms); + } else { + lightbulb_state.saturation_current = lightbulb_state.saturation_target; + sl_btmesh_hsl_set_saturation_level(lightbulb_state.saturation_current, + IMMEDIATE); + } + break; + + default: + break; + } + + lightbulb_state_changed(); + init_hsl_models(); + hsl_setup_update(BTMESH_HSL_SERVER_MAIN, mesh_lighting_state_hsl_default); + hsl_setup_update(BTMESH_HSL_SERVER_MAIN, mesh_lighting_state_hsl_range); + hsl_update_and_publish(BTMESH_HSL_SERVER_MAIN, IMMEDIATE); +} + +/******************************************************************************* + * Handling of mesh events in hsl component. + * It handles: + * - node_provisioned + * - node_initialized + * + * @param[in] evt Pointer to incoming time event. + ******************************************************************************/ +void sl_btmesh_hsl_server_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_hsl_server_init(); + break; + + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_hsl_server_init(); + } + break; + + default: + break; + } +} + +/***************************************************************************//** + * @addtogroup BtmeshWrappers + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_respond to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_respond(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms, + uint8_t response_flags) +{ + sl_status_t sc = mesh_lib_generic_server_respond(model_id, + element_index, + client_addr, + appkey_index, + current, + target, + remaining_ms, + response_flags); + log_status_error_f(sc, + "HSL server respond failed " + "(claddr=0x%04x,mdl=0x%04x,elem=%d,state=0x%04x)" NL, + client_addr, + model_id, + element_index, + current->kind); + return sc; +} + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_update to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_update(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + sl_status_t sc = mesh_lib_generic_server_update(model_id, + element_index, + current, + target, + remaining_ms); + + log_status_error_f(sc, + "HSL server state update failed " + "(mdl=0x%04x,elem=%d,state=0x%04x)" NL, + model_id, + element_index, + current->kind); + return sc; +} + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_publish to log if the Btmesh API call + * results in error. The parameters and the return value of the two functions + * are the same. + ******************************************************************************/ +static sl_status_t generic_server_publish(uint16_t model_id, + uint16_t element_index, + mesh_generic_state_t kind) +{ + sl_status_t sc; + + sc = mesh_lib_generic_server_publish(model_id, element_index, kind); + + log_btmesh_status_f(sc, + "HSL server state publish failed " + "(mdl=0x%04x,elem=%d,state=0x%04x)" NL, + model_id, + element_index, + kind); + return sc; +} + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_register_handler with an assert which + * detects if the Btmesh API call results in error. The parameters of the two + * functions are the same but the wrapper does not have return value. + ******************************************************************************/ +static void generic_server_register_handler(uint16_t model_id, + uint16_t elem_index, + mesh_lib_generic_server_client_request_cb cb, + mesh_lib_generic_server_change_cb ch, + mesh_lib_generic_server_recall_cb recall) +{ + sl_status_t sc = + mesh_lib_generic_server_register_handler(model_id, elem_index, cb, ch, recall); + + app_assert_status_f(sc, + "HSL server failed to register handlers " + "(mdl=0x%04x,elem=%d)", + model_id, + elem_index); +} + +#ifdef SL_CATALOG_BTMESH_SCENE_SERVER_PRESENT +/***************************************************************************//** + * Wrapper for sl_btmesh_scene_server_reset_register with an assert which + * detects if the Btmesh API call results in error. The parameters of the two + * functions are the same but the wrapper does not have return value. + * The scene server register shall be reset if the state of the model changes in + * order to clear the current scene. + * This function is available only if the btmesh_scene_server component is added + * to the project. + ******************************************************************************/ +static void scene_server_reset_register_impl(uint16_t elem_index) +{ + sl_status_t sc = sl_btmesh_scene_server_reset_register(elem_index); + + // The function can fail if there is no scene server model in the element or + // the btmesh_stack_scene_server component is not present. Both of these + // are configuration issues so assert can be used. + app_assert_status_f(sc, "HSL server failed to reset scene register."); +} +#endif + +/** @} (end addtogroup BtmeshWrappers) */ + +/***************************************************************************//** + * Timer Callbacks + ******************************************************************************/ +static void hsl_hue_level_move_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // handling of generic level move, update the lightbulb state + hue_level_move_request(); +} + +static void hsl_hue_level_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for a hue generic level request has completed, + //update the lightbulb state + hue_level_transition_complete(); +} + +static void hsl_hue_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for a hsl hue request has completed, + // update the lightbulb state + hsl_hue_transition_complete(); +} +static void hsl_saturation_level_move_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // handling of generic level move, update the lightbulb state + saturation_level_move_request(); +} + +static void hsl_saturation_level_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for a saturation generic level request has completed, + //update the lightbulb state + saturation_level_transition_complete(); +} + +static void hsl_saturation_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for a hsl saturation request has completed, + // update the lightbulb state + hsl_saturation_transition_complete(); +} + +static void hsl_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for a hsl request has completed, update the lightbulb state + hsl_transition_complete(); +} + +static void hsl_delayed_hue_level_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for a hue generic level request has passed, + // now process the request + delayed_hue_level_request(); +} + +static void hsl_delayed_hsl_hue_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for a hsl hue request has passed, now process the request + delayed_hsl_hue_request(); +} + +static void hsl_delayed_saturation_level_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for a saturation generic level request has passed, + // now process the request + delayed_saturation_level_request(); +} + +static void hsl_delayed_hsl_saturation_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for a hsl saturation request has passed, now process the request + delayed_hsl_saturation_request(); +} + +static void hsl_delayed_hsl_request_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for a hsl request has passed, now process the request + delayed_hsl_request(); +} + +static void hsl_state_store_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // save the lightbulb state + lightbulb_state_store(); +} + +/** @} (end addtogroup HSL_SERVER) */ diff --git a/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_server.h b/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_server.h new file mode 100644 index 00000000000..9d8c39d93af --- /dev/null +++ b/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_server.h @@ -0,0 +1,57 @@ +/***************************************************************************//** + * @brief sl_btmesh_hsl_server.h + ******************************************************************************* + * # 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_BTMESH_HSL_SERVER_H +#define SL_BTMESH_HSL_SERVER_H + +#include "sl_btmesh_api.h" + +// ----------------------------------------------------------------------------- +// Functions which are automatically called when the component is selected + +/***************************************************************************//** + * Handle HSL Server events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_hsl_server_on_event(sl_btmesh_msg_t *evt); + +/***************************************************************************//** + * HSL Server initialization. + * This should be called at each boot if provisioning is already done. + * Otherwise this function should be called after provisioning is completed. + * It is called automatically by the Universal Configurator Framework + * + ******************************************************************************/ +void sl_btmesh_hsl_server_init(void); + +#endif // SL_BTMESH_HSL_SERVER_H 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 new file mode 100644 index 00000000000..2b9d71e25e0 --- /dev/null +++ b/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_signal_transition_handler.c @@ -0,0 +1,366 @@ +/***************************************************************************//** + * @file sl_btmesh_hsl_signal_transition_handler.c + * @brief HSL Transition Handler Module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +/* C Standard Library headers */ +#include +#include + +#include "app_assert.h" +#include "em_common.h" +#include "sl_status.h" + +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#include "sl_btmesh_hsl_server.h" +#include "sl_btmesh_hsl_signal_transition_handler.h" +#include "sl_btmesh_hsl_server_config.h" + +/***************************************************************************//** + * @addtogroup HSL Transition Handler + * @{ + ******************************************************************************/ + +#define NO_FLAGS 0 ///< No flags used for message +#define IMMEDIATE 0 ///< Immediate transition time is 0 seconds +#define NO_CALLBACK_DATA (void *)NULL // Callback has not parameters +#define HIGH_PRIORITY 0 // High Priority + +/// current hue level +static uint16_t current_hue = SL_BTMESH_HSL_SERVER_DEFAULT_HUE_CFG_VAL; +/// starting level of hue transition +static uint16_t start_hue; +/// target level of hue transition +static uint16_t target_hue; + +/// current saturation level +static uint16_t current_saturation = SL_BTMESH_HSL_SERVER_DEFAULT_SATURATION_CFG_VAL; +/// starting level of saturation transition +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; +/// time elapsed from hue transition start +static uint32_t hue_transtime_elapsed; +/// non-zero if hue transition is active +static uint8_t hue_transitioning; + +/// saturation transition time in timer ticks +static uint32_t saturation_transtime_ticks; +/// time elapsed from saturation transition start +static uint32_t saturation_transtime_elapsed; +/// non-zero if saturation transition is active +static uint8_t saturation_transitioning; + +static sl_simple_timer_t hue_transition_timer; +static sl_simple_timer_t saturation_transition_timer; + +// Timer callbacks +static void hue_transition_timer_cb(sl_simple_timer_t *timer, void *data); +static void saturation_transition_timer_cb(sl_simple_timer_t *timer, void *data); + +//////////////////////////////////////////////////////////////////////////////// +// HSL Callbacks // +//////////////////////////////////////////////////////////////////////////////// + +SL_WEAK void sl_btmesh_hsl_hue_cb(uint16_t hue) +{ + (void)hue; +} + +SL_WEAK void sl_btmesh_hsl_saturation_cb(uint16_t saturation) +{ + (void)saturation; +} + +SL_WEAK void sl_btmesh_hsl_hue_on_ui_update(uint16_t hue) +{ + (void)hue; +} + +SL_WEAK void sl_btmesh_hsl_saturation_on_ui_update(uint16_t saturation) +{ + (void)saturation; +} + +/***************************************************************************//** + * Handler for Hue Transition Timer, which manages LEDs transitions. + ******************************************************************************/ +static void hue_transition_timer_cb(sl_simple_timer_t *timer, void *data) +{ + (void)data; + (void)timer; + // 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; + + if (!hue_transitioning) { + sl_status_t sc = sl_simple_timer_stop(&hue_transition_timer); + app_assert_status_f(sc, "Failed to stop Periodic Hue Transition Timer"); + return; + } else { + hue_transtime_elapsed++; + + if (hue_transtime_elapsed >= hue_transtime_ticks) { + // transition complete + hue_transitioning = 0; + current_hue = target_hue; + + // Set the variable to UI update period in order to trigger a UI update + // at the beginning of the next transition. + time_elapsed_since_ui_update = SL_BTMESH_HSL_SERVER_HUE_UI_UPDATE_PERIOD_CFG_VAL; + + // Trigger a UI update in order to provide the target values at the end + // of the current transition + sl_btmesh_hsl_hue_on_ui_update(current_hue); + } else { + // calculate current hue based on elapsed transition time + if (target_hue >= start_hue) { + current_hue = start_hue + + (target_hue - start_hue) + * (uint64_t)hue_transtime_elapsed + / hue_transtime_ticks; + } else { + current_hue = start_hue + - (start_hue - target_hue) + * (uint64_t)hue_transtime_elapsed + / hue_transtime_ticks; + } + + // When transition is ongoing generate an event to application once every + // SL_BTMESH_HSL_SERVER_HUE_UI_UPDATE_PERIOD_CFG_VAL ms because the event is used to update + // display status and therefore the rate should not be too high + time_elapsed_since_ui_update += SL_BTMESH_HSL_SERVER_HUE_UPDATE_PERIOD_CFG_VAL; + + if (SL_BTMESH_HSL_SERVER_HUE_UI_UPDATE_PERIOD_CFG_VAL <= time_elapsed_since_ui_update) { + time_elapsed_since_ui_update -= SL_BTMESH_HSL_SERVER_HUE_UI_UPDATE_PERIOD_CFG_VAL; + sl_btmesh_hsl_hue_on_ui_update(current_hue); + } + } + } + + sl_btmesh_hsl_hue_cb(current_hue); +} + +/***************************************************************************//** + * Handler for Saturation Transition Timer, which manages LEDs transitions. + ******************************************************************************/ +static void saturation_transition_timer_cb(sl_simple_timer_t *timer, void *data) +{ + (void)data; + (void)timer; + // 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; + + if (!saturation_transitioning) { + sl_status_t sc = sl_simple_timer_stop(&saturation_transition_timer); + app_assert_status_f(sc, "Failed to stop Periodic Saturation Transition Timer"); + return; + } else { + saturation_transtime_elapsed++; + + if (saturation_transtime_elapsed >= saturation_transtime_ticks) { + // transition complete + saturation_transitioning = 0; + current_saturation = target_saturation; + + // Set the variable to UI update period in order to trigger a UI update + // at the beginning of the next transition. + time_elapsed_since_ui_update = SL_BTMESH_HSL_SERVER_SATURATION_UI_UPDATE_PERIOD_CFG_VAL; + + // Trigger a UI update in order to provide the target values at the end + // of the current transition + sl_btmesh_hsl_saturation_on_ui_update(current_saturation); + } else { + // calculate current hue based on elapsed transition time + if (target_saturation >= start_saturation) { + current_saturation = start_saturation + + (target_saturation - start_saturation) + * (uint64_t)saturation_transtime_elapsed + / saturation_transtime_ticks; + } else { + current_saturation = start_saturation + - (target_saturation - start_saturation) + * (uint64_t)saturation_transtime_elapsed + / saturation_transtime_ticks; + } + + // When transition is ongoing generate an event to application once every + // SL_BTMESH_HSL_SERVER_SATURATION_UI_UPDATE_PERIOD_CFG_VAL ms because the event is used to update + // display status and therefore the rate should not be too high + time_elapsed_since_ui_update += SL_BTMESH_HSL_SERVER_SATURATION_UPDATE_PERIOD_CFG_VAL; + + if (SL_BTMESH_HSL_SERVER_SATURATION_UI_UPDATE_PERIOD_CFG_VAL <= time_elapsed_since_ui_update) { + time_elapsed_since_ui_update -= SL_BTMESH_HSL_SERVER_SATURATION_UI_UPDATE_PERIOD_CFG_VAL; + sl_btmesh_hsl_saturation_on_ui_update(current_saturation); + } + } + } + + sl_btmesh_hsl_saturation_cb(current_saturation); +} + +/******************************************************************************* + * Set LED hue in given transition time. + * + * @param[in] hue Hue level. + * @param[in] transition_ms Transition time in milliseconds. + ******************************************************************************/ +void sl_btmesh_hsl_set_hue_level(uint16_t hue, uint32_t transition_ms) +{ +#if SL_BTMESH_HSL_SERVER_MINIMUM_HUE_CFG_VAL != (0) + if (hue < SL_BTMESH_HSL_SERVER_MINIMUM_HUE_CFG_VAL) { + hue = SL_BTMESH_HSL_SERVER_MINIMUM_HUE_CFG_VAL; + } +#endif + +#if SL_BTMESH_HSL_SERVER_MAXIMUM_HUE_CFG_VAL != (65535) + if (hue > SL_BTMESH_HSL_SERVER_MAXIMUM_HUE_CFG_VAL) { + hue = SL_BTMESH_HSL_SERVER_MAXIMUM_HUE_CFG_VAL; + } +#endif + + if (transition_ms == 0) { + current_hue = hue; + + sl_btmesh_hsl_hue_cb(current_hue); + + /* if a transition was in progress, cancel it */ + if (hue_transitioning) { + hue_transitioning = 0; + sl_status_t sc = sl_simple_timer_stop(&hue_transition_timer); + app_assert_status_f(sc, "Failed to stop periodic Hue Transition Timer"); + } + sl_btmesh_hsl_hue_on_ui_update(current_hue); + return; + } + + hue_transtime_ticks = transition_ms; + + start_hue = current_hue; + target_hue = hue; + + hue_transtime_elapsed = 0; + hue_transitioning = 1; + + // enabling timer IRQ -> the temperature is adjusted in timer interrupt + // gradually until target temperature is reached. + sl_status_t sc = sl_simple_timer_start(&hue_transition_timer, + SL_BTMESH_HSL_SERVER_HUE_UPDATE_PERIOD_CFG_VAL, + hue_transition_timer_cb, + NO_CALLBACK_DATA, + true); + app_assert_status_f(sc, "Failed to start periodic Hue Transition Timer"); + + return; +} + +/******************************************************************************* + * Set LED saturation in given transition time. + * + * @param[in] saturation Saturation level. + * @param[in] transition_ms Transition time in milliseconds. + ******************************************************************************/ +void sl_btmesh_hsl_set_saturation_level(uint16_t saturation, uint32_t transition_ms) +{ +#if SL_BTMESH_HSL_SERVER_MINIMUM_SATURATION_CFG_VAL != (0) + if (saturation < SL_BTMESH_HSL_SERVER_MINIMUM_SATURATION_CFG_VAL) { + saturation = SL_BTMESH_HSL_SERVER_MINIMUM_SATURATION_CFG_VAL; + } +#endif + +#if SL_BTMESH_HSL_SERVER_MAXIMUM_SATURATION_CFG_VAL != (65535) + if (saturation > SL_BTMESH_HSL_SERVER_MAXIMUM_SATURATION_CFG_VAL) { + saturation = SL_BTMESH_HSL_SERVER_MAXIMUM_SATURATION_CFG_VAL; + } +#endif + + if (transition_ms == 0) { + current_saturation = saturation; + + sl_btmesh_hsl_saturation_cb(current_saturation); + + /* if a transition was in progress, cancel it */ + if (saturation_transitioning) { + saturation_transitioning = 0; + sl_status_t sc = sl_simple_timer_stop(&saturation_transition_timer); + app_assert_status_f(sc, "Failed to stop periodic Saturation Transition Timer"); + } + sl_btmesh_hsl_saturation_on_ui_update(current_saturation); + return; + } + + saturation_transtime_ticks = transition_ms; + + start_saturation = current_saturation; + target_saturation = saturation; + + saturation_transtime_elapsed = 0; + saturation_transitioning = 1; + + // enabling timer IRQ -> the temperature is adjusted in timer interrupt + // gradually until target temperature is reached. + sl_status_t sc = sl_simple_timer_start(&saturation_transition_timer, + SL_BTMESH_HSL_SERVER_SATURATION_UPDATE_PERIOD_CFG_VAL, + saturation_transition_timer_cb, + NO_CALLBACK_DATA, + true); + app_assert_status_f(sc, "Failed to start periodic Saturation Transition Timer"); + + return; +} + +/******************************************************************************* + * Function for retrieving current hue. + * + * @return Current hue level. + ******************************************************************************/ +uint16_t sl_btmesh_get_hue(void) +{ + return(current_hue); +} + +/******************************************************************************* + * Function for retrieving current saturation. + * + * @return Current saturation level. + ******************************************************************************/ +uint16_t sl_btmesh_get_saturation(void) +{ + return(current_saturation); +} + +/** @} (end addtogroup HSL Transition Handler) */ diff --git a/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_signal_transition_handler.h b/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_signal_transition_handler.h new file mode 100644 index 00000000000..6da376d8cbd --- /dev/null +++ b/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_signal_transition_handler.h @@ -0,0 +1,105 @@ +/***************************************************************************//** + * @brief sl_btmesh_hsl_signal_transition_handler.h + ******************************************************************************* + * # 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_BTMESH_HSL_SIGNAL_TRANSITION_H +#define SL_BTMESH_HSL_SIGNAL_TRANSITION_H + +/***************************************************************************//** + * Function for retrieving current hue. + * + * @return Current hue level. + ******************************************************************************/ +uint16_t sl_btmesh_get_hue(void); + +/***************************************************************************//** + * Function for retrieving current saturation. + * + * @return Current saturation level. + ******************************************************************************/ +uint16_t sl_btmesh_get_saturation(void); + +/***************************************************************************//** + * Set LED hue in given transition time. + * + * @param[in] hue Hue level. + * @param[in] transition_ms Transition time in milliseconds. + ******************************************************************************/ +void sl_btmesh_hsl_set_hue_level(uint16_t hue, + uint32_t transition_ms); + +/***************************************************************************//** + * Set LED saturation in given transition time. + * + * @param[in] saturation Saturation level. + * @param[in] transition_ms Transition time in milliseconds. + ******************************************************************************/ +void sl_btmesh_hsl_set_saturation_level(uint16_t saturation, + uint32_t transition_ms); + +/******************************************************************************* + * Callback for setting Light Hue + * + * @param[in] hue Desired light hue level. + ******************************************************************************/ +void sl_btmesh_hsl_hue_cb(uint16_t hue); + +/******************************************************************************* + * Callback for setting Light Saturation + * + * @param[in] saturation Desired light saturation level. + ******************************************************************************/ +void sl_btmesh_hsl_saturation_cb(uint16_t saturation); + +/***************************************************************************//** + * Called when the UI shall be updated with the changed HSL Model state during + * a transition. The rate of this callback can be controlled by changing the + * SL_BTMESH_HSL_SERVER_HUE_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] hue Hue value. + ******************************************************************************/ +void sl_btmesh_hsl_hue_on_ui_update(uint16_t hue); + +/***************************************************************************//** + * Called when the UI shall be updated with the changed HSL Model state during + * a transition. The rate of this callback can be controlled by changing the + * SL_BTMESH_HSL_SERVER_SATURATION_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] saturation Saturation value. + ******************************************************************************/ +void sl_btmesh_hsl_saturation_on_ui_update(uint16_t saturation); + +#endif // SL_BTMESH_HSL_SIGNAL_TRANSITION_H diff --git a/app/btmesh/common/btmesh_iv_update/config/sl_btmesh_iv_update_config.h b/app/btmesh/common/btmesh_iv_update/config/sl_btmesh_iv_update_config.h new file mode 100644 index 00000000000..dbf45695623 --- /dev/null +++ b/app/btmesh/common/btmesh_iv_update/config/sl_btmesh_iv_update_config.h @@ -0,0 +1,83 @@ +/***************************************************************************//** + * @file + * @brief IV Update Component Configuration + ******************************************************************************* + * # 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_BTMESH_IV_UPDATE_CONFIG_H +#define SL_BTMESH_IV_UPDATE_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Enable logging +// 1 +#define SL_BTMESH_IV_UPDATE_LOGGING_CFG_VAL 1 + +// Automatic transition to IV Update Recovery mode +// 1 +#define SL_BTMESH_IV_UPDATE_AUTO_RECOVERY 1 + +// Backup of IV Update age +// 1 +#define SL_BTMESH_IV_UPDATE_AGE_BACKUP_ENABLE 1 + +// NVM key of the iv Update age (hexadecimal) +// 0x3000 +#define SL_BTMESH_IV_UPDATE_AGE_NVM_KEY_CFG_VAL 0x3000 + +// IV Update age backup period in seconds<0..4294967> +// 10 +#define SL_BTMESH_IV_UPDATE_AGE_BACKUP_PERIOD_S 10 + +// + +// IV Update by age +// 1 +#define SL_BTMESH_IV_UPDATE_BY_AGE 1 + +// IV Update Timeout<345600..4294967> +// 345600 +#define SL_BTMESH_IV_UPDATE_FIX_TIMEOUT_S 345600 + +// + +// IV Update by sequence number +// 1 +#define SL_BTMESH_IV_UPDATE_BY_SEQ_NUM 1 + +// Sequence number threshold<0..16777215> +// 0x700000 +// When any element's sequence number gets above this, an IV Update is requested. +#define SL_BTMESH_IV_UPDATE_SEQ_NUM_THRESHOLD 0x700000 + +// Sequence number testing period in seconds <0..4294967> +// 10 +#define SL_BTMESH_IV_UPDATE_SEQ_NUM_TESTING_PERIOD_S 10 + +// + +// <<< end of configuration section >>> +#endif diff --git a/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update.c b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update.c new file mode 100644 index 00000000000..555f2a0fc4c --- /dev/null +++ b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update.c @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief Automatic IV Update implementation + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_status.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#include + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_iv_update.h" +#include "sl_btmesh_iv_update_config.h" + +#include "sl_btmesh_iv_update_age_backup.h" +#include "sl_btmesh_iv_update_by_age.h" +#include "sl_btmesh_iv_update_by_seq_num.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup iv_update + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Handling of mesh iv_update related events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_iv_update_on_event(sl_btmesh_msg_t* evt) +{ +#if SL_BTMESH_IV_UPDATE_AGE_BACKUP_ENABLE + sl_btmesh_iv_update_age_backup_on_event(evt); +#endif +#if SL_BTMESH_IV_UPDATE_BY_AGE + sl_btmesh_iv_update_by_age_on_event(evt); +#endif +#if SL_BTMESH_IV_UPDATE_BY_SEQ_NUM + sl_btmesh_iv_update_by_seq_num_on_event(evt); +#endif +#if SL_BTMESH_IV_UPDATE_AUTO_RECOVERY + if (SL_BT_MSG_ID(evt->header) == sl_btmesh_evt_node_ivrecovery_needed_id) { + sl_btmesh_node_set_ivrecovery_mode(true); + } +#endif +} + +/** @} (end addtogroup iv_update) */ diff --git a/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update.h b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update.h new file mode 100644 index 00000000000..48446650a14 --- /dev/null +++ b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update.h @@ -0,0 +1,55 @@ +/***************************************************************************//** + * @file + * @brief Automatic IV Update component header + ******************************************************************************* + * # 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_BTMESH_IV_UPDATE_H +#define SL_BTMESH_IV_UPDATE_H + +#include "sl_btmesh_api.h" + +/***************************************************************************//** + * @defgroup iv_update Automatic IV Update Component + * @brief Automatic IV Update Implementation + * This component implements IV Update related functionality + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup iv_update + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Handling of mesh iv_update related events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_iv_update_on_event(sl_btmesh_msg_t *evt); + +/** @} (end addtogroup iv_update) */ + +#endif /* SL_BTMESH_IV_UPDATE_H */ diff --git a/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_age_backup.c b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_age_backup.c new file mode 100644 index 00000000000..7513fe2f036 --- /dev/null +++ b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_age_backup.c @@ -0,0 +1,154 @@ +/***************************************************************************//** + * @file + * @brief IV Update age backup implementation + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_status.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_iv_update_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup iv_update + * @{ + ******************************************************************************/ + +// IV Update age in seconds +static uint32_t age = 0; + +static sl_simple_timer_t iv_update_age_backup_timer; +static void on_iv_update_age_backup_timer(sl_simple_timer_t *handle, void *data); + +static void age_backup_timer_start(void); +static void backup_age(void); +static void restore_age(void); + +/***************************************************************************//** + * Handling of mesh iv_update_age_backup related events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_iv_update_age_backup_on_event(sl_btmesh_msg_t* evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + restore_age(); + age_backup_timer_start(); + } + break; + case sl_btmesh_evt_node_provisioned_id: + case sl_btmesh_evt_node_changed_ivupdate_state_id: + age = 0; + backup_age(); + age_backup_timer_start(); + break; + default: + break; + } +} + +/***************************************************************************//** + * Restore the IV Update age from the nvm. + ******************************************************************************/ +static void restore_age(void) +{ + size_t age_len = sizeof(age); + sl_status_t sc = app_btmesh_nvm_read(SL_BTMESH_IV_UPDATE_AGE_NVM_KEY_CFG_VAL, + &age, + &age_len); + log_status_error_f(sc, "Failed to read from nvm" NL); + if (sc == SL_STATUS_OK) { + sc = sl_btmesh_node_set_iv_update_age(age); + app_assert_status_f(sc, "Failed to restore IV Update age"); + } +} + +/***************************************************************************//** + * Write the IV Update age to the nvm. + ******************************************************************************/ +static void backup_age(void) +{ + sl_status_t sc = app_btmesh_nvm_write(SL_BTMESH_IV_UPDATE_AGE_NVM_KEY_CFG_VAL, + &age, + sizeof(age)); + log_status_error_f(sc, "Failed to backup IV Update age" NL); +} + +/***************************************************************************//** + * Increment and backup IV Update age + ******************************************************************************/ +static void on_iv_update_age_backup_timer(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + age += SL_BTMESH_IV_UPDATE_AGE_BACKUP_PERIOD_S; + backup_age(); +} + +/***************************************************************************//** + * Write the IV Update age to the nvm. + ******************************************************************************/ +static void age_backup_timer_start(void) +{ + sl_status_t sc = sl_simple_timer_start(&iv_update_age_backup_timer, + SL_BTMESH_IV_UPDATE_AGE_BACKUP_PERIOD_S * 1000, + on_iv_update_age_backup_timer, + NULL, + true); + app_assert_status_f(sc, "Failed to start timer"); +} + +#if SL_BTMESH_IV_UPDATE_AGE_BACKUP_ENABLE +/***************************************************************************//** + * Strong implementation of the function declared in sl_btmesh_iv_update_by_age.h + * @return The restored IV Update age in seconds + ******************************************************************************/ +uint32_t get_iv_update_age(void) +{ + return age; +} +#endif + +/** @} (end addtogroup iv_update) */ diff --git a/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_age_backup.h b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_age_backup.h new file mode 100644 index 00000000000..96873f98d84 --- /dev/null +++ b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_age_backup.h @@ -0,0 +1,49 @@ +/***************************************************************************//** + * @file + * @brief IV Update age backup header + ******************************************************************************* + * # 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_BTMESH_IV_UPDATE_AGE_BACKUP_H +#define SL_BTMESH_IV_UPDATE_AGE_BACKUP_H + +#include "sl_btmesh_api.h" + +/***************************************************************************//** + * @addtogroup iv_update + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Handling of mesh iv_update_age_backup related events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_iv_update_age_backup_on_event(sl_btmesh_msg_t *evt); + +/** @} (end addtogroup iv_update) */ + +#endif /* SL_BTMESH_IV_UPDATE_AGE_BACKUP_H */ diff --git a/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_age.c b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_age.c new file mode 100644 index 00000000000..dbbcb455873 --- /dev/null +++ b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_age.c @@ -0,0 +1,150 @@ +/***************************************************************************//** + * @file + * @brief Automatic IV Update by age implementation + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "em_common.h" +#include "sl_status.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" + +#include +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_iv_update_by_age.h" +#include "sl_btmesh_iv_update_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup iv_update + * @{ + ******************************************************************************/ + +#define NORMAL_OPERATION 0 +#define IV_UPDATE_IN_PROGRESS 1 + +static sl_simple_timer_t age_timer; +static void on_age_timer(sl_simple_timer_t *handle, void *data); + +static void age_timer_start(uint32_t timeout_s); +static void age_timer_stop(void); + +/***************************************************************************//** + * Handling of mesh iv_update_by_age related events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_iv_update_by_age_on_event(sl_btmesh_msg_t* evt) +{ + uint8_t iv_update_state; + uint32_t iv_index; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_node_get_ivupdate_state(&iv_index, &iv_update_state); + if (iv_update_state == NORMAL_OPERATION) { + uint32_t age = get_iv_update_age(); + if (age < SL_BTMESH_IV_UPDATE_FIX_TIMEOUT_S) { + age_timer_start(SL_BTMESH_IV_UPDATE_FIX_TIMEOUT_S - age); + } else { + age_timer_start(0); + } + } + } + break; + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_node_get_ivupdate_state(&iv_index, &iv_update_state); + if (iv_update_state == NORMAL_OPERATION) { + age_timer_start(SL_BTMESH_IV_UPDATE_FIX_TIMEOUT_S); + } + break; + case sl_btmesh_evt_node_changed_ivupdate_state_id: + if (evt->data.evt_node_changed_ivupdate_state.state == NORMAL_OPERATION) { + age_timer_start(SL_BTMESH_IV_UPDATE_FIX_TIMEOUT_S); + } else { + age_timer_stop(); + } + break; + default: + break; + } +} + +/***************************************************************************//** + * Request IV Update on timer callback + ******************************************************************************/ +static void on_age_timer(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + sl_status_t sc = sl_btmesh_node_request_ivupdate(); + app_assert_status_f(sc, "Failed to request IV Update"); +} + +/***************************************************************************//** + * Start age timer + ******************************************************************************/ +static void age_timer_start(uint32_t timeout_s) +{ + sl_status_t sc = sl_simple_timer_start(&age_timer, + timeout_s * 1000, + on_age_timer, + NULL, + false); + app_assert_status_f(sc, "Failed to start timer"); +} + +/***************************************************************************//** + * Stop age timer + ******************************************************************************/ +static void age_timer_stop(void) +{ + sl_status_t sc = sl_simple_timer_stop(&age_timer); + app_assert_status_f(sc, "Failed to stop timer"); +} + +SL_WEAK uint32_t get_iv_update_age(void) +{ + return 0; +} + +/** @} (end addtogroup iv_update) */ diff --git a/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_age.h b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_age.h new file mode 100644 index 00000000000..ef61a95d79c --- /dev/null +++ b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_age.h @@ -0,0 +1,57 @@ +/***************************************************************************//** + * @file + * @brief Automatic IV Update by age header + ******************************************************************************* + * # 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_BTMESH_IV_UPDATE_BY_AGE_H +#define SL_BTMESH_IV_UPDATE_BY_AGE_H + +#include "sl_btmesh_api.h" + +/***************************************************************************//** + * @addtogroup iv_update + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Handling of mesh iv_update_by_age related events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_iv_update_by_age_on_event(sl_btmesh_msg_t *evt); + +/***************************************************************************//** + * Weak function. Implementation should return the current IV Update age. + * Weak implementation returns zero. It is only called on node init event. + * iv_update_age_backup implements this function if it is enabled. + * @return IV Update age in seconds + ******************************************************************************/ +uint32_t get_iv_update_age(void); + +/** @} (end addtogroup iv_update) */ + +#endif /* SL_BTMESH_IV_UPDATE_BY_AGE_H */ diff --git a/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_seq_num.c b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_seq_num.c new file mode 100644 index 00000000000..ec76a8b41bf --- /dev/null +++ b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_seq_num.c @@ -0,0 +1,149 @@ +/***************************************************************************//** + * @file + * @brief Automatic IV Update by sequence number implementation + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "em_common.h" +#include "sl_status.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" + +#include +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_iv_update_by_seq_num.h" +#include "sl_btmesh_iv_update_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup iv_update + * @{ + ******************************************************************************/ + +#define NORMAL_OPERATION 0 +#define IV_UPDATE_IN_PROGRESS 1 + +static sl_simple_timer_t seq_num_testing_timer; +static void on_seq_num_testing_timer(sl_simple_timer_t *handle, void *data); + +static void seq_num_testing_start(void); +static void seq_num_testing_stop(void); + +/***************************************************************************//** + * Handling of mesh iv_update related events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_iv_update_by_seq_num_on_event(sl_btmesh_msg_t* evt) +{ + uint8_t iv_update_state; + uint32_t iv_index; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_node_get_ivupdate_state(&iv_index, &iv_update_state); + if (iv_update_state == NORMAL_OPERATION) { + seq_num_testing_start(); + } + } + break; + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_node_get_ivupdate_state(&iv_index, &iv_update_state); + if (iv_update_state == NORMAL_OPERATION) { + seq_num_testing_start(); + } + break; + case sl_btmesh_evt_node_changed_ivupdate_state_id: + if (evt->data.evt_node_changed_ivupdate_state.state == NORMAL_OPERATION) { + seq_num_testing_start(); + } else { + seq_num_testing_stop(); + } + break; + default: + break; + } +} + +/***************************************************************************//** + * Check if any element's current sequence number is above the threshold + ******************************************************************************/ +static void on_seq_num_testing_timer(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + sl_status_t sc; + for (uint16_t i = 0; i < SL_BTMESH_CONFIG_MAX_ELEMENTS; i++) { + uint32_t seqnum; + sc = sl_btmesh_node_get_element_seqnum(i, &seqnum); + app_assert_status_f(sc, "Failed to get sequence number"); + if (seqnum > SL_BTMESH_IV_UPDATE_SEQ_NUM_THRESHOLD) { + sc = sl_btmesh_node_request_ivupdate(); + log_status_error_f(sc, "Failed to request IV Update" NL); + return; + } + } +} + +/***************************************************************************//** + * Start testing the sequence numbers + ******************************************************************************/ +static void seq_num_testing_start(void) +{ + sl_status_t sc = sl_simple_timer_start(&seq_num_testing_timer, + SL_BTMESH_IV_UPDATE_SEQ_NUM_TESTING_PERIOD_S * 1000, + on_seq_num_testing_timer, + NULL, + true); + app_assert_status_f(sc, "Failed to start timer"); +} + +/***************************************************************************//** + * Stop testing the sequence numbers + ******************************************************************************/ +static void seq_num_testing_stop(void) +{ + sl_status_t sc = sl_simple_timer_stop(&seq_num_testing_timer); + app_assert_status_f(sc, "Failed to stop timer"); +} + +/** @} (end addtogroup iv_update) */ diff --git a/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_seq_num.h b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_seq_num.h new file mode 100644 index 00000000000..833589c0492 --- /dev/null +++ b/app/btmesh/common/btmesh_iv_update/sl_btmesh_iv_update_by_seq_num.h @@ -0,0 +1,49 @@ +/***************************************************************************//** + * @file + * @brief Automatic IV Update by sequence number header + ******************************************************************************* + * # 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_BTMESH_IV_UPDATE_BY_SEQ_NUM_H +#define SL_BTMESH_IV_UPDATE_BY_SEQ_NUM_H + +#include "sl_btmesh_api.h" + +/***************************************************************************//** + * @addtogroup iv_update + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Handling of mesh iv_update_by_seq_num related events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_iv_update_by_seq_num_on_event(sl_btmesh_msg_t *evt); + +/** @} (end addtogroup iv_update) */ + +#endif /* SL_BTMESH_IV_UPDATE_BY_SEQ_NUM_H */ diff --git a/app/btmesh/common/btmesh_lc_server/btmesh_lc_server.dcd b/app/btmesh/common/btmesh_lc_server/btmesh_lc_server.dcd new file mode 100644 index 00000000000..89e5f0041e3 --- /dev/null +++ b/app/btmesh/common/btmesh_lc_server/btmesh_lc_server.dcd @@ -0,0 +1,11 @@ +[ + { + "name": "Light LC", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1000", "name":"Generic OnOff Server"}, + {"mid":"0x130F", "name":"Light LC Server"}, + {"mid":"0x1310", "name":"Light LC Setup Server"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_lc_server/config/sl_btmesh_lc_server_config.h b/app/btmesh/common/btmesh_lc_server/config/sl_btmesh_lc_server_config.h new file mode 100644 index 00000000000..1dca95c346c --- /dev/null +++ b/app/btmesh/common/btmesh_lc_server/config/sl_btmesh_lc_server_config.h @@ -0,0 +1,133 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_LC_SERVER_CONFIG_H +#define SL_BTMESH_LC_SERVER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// LC Server configuration + +// Timeout [ms] for saving States of the model to NVM. +// Default: 5000 +// Timeout [ms] for saving States of the model to NVM. +#define SL_BTMESH_LC_SERVER_NVM_SAVE_TIME_CFG_VAL (5000) + +// PS Key for NVM Page where the States of the LC Model are saved. +// Default: 0x4006 +// PS Key for NVM Page where the States of the LC Model are saved. +#define SL_BTMESH_LC_SERVER_PS_KEY_CFG_VAL (0x4006) + +// PS Key for NVM Page where the Property State of the LC Model are saved. +// Default: 0x4007 +// PS Key for NVM Page where the Property State of the LC Model are saved. +#define SL_BTMESH_LC_SERVER_PROPERTY_PS_KEY_CFG_VAL (0x4007) + +// Enable Logging +// Default: 1 +// Enable / disable Logging for LC Server model specific messages for this component. +#define SL_BTMESH_LC_SERVER_LOGGING_CFG_VAL (1) + +// + +// + +// Customize LC Property states' default values +#define SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL 0 + +// Time + +// Occupancy Delay [ms] <0x000000-0xFFFFFF> +// Determines the delay for changing the LC Occupancy state upon receiving a Sensor Status message from an occupancy sensor. +// LC Occupancy is a binary state that represents occupancy reported by an occupancy sensor. +#define SL_BTMESH_LC_SERVER_TIME_OCCUPANCY_DELAY_DEFAULT_CFG_VAL 0 + +// Fade On [ms] <0x000000-0xFFFFFF> +// Determines the time the controlled lights fade to the level determined by the LC Lightness On state. +#define SL_BTMESH_LC_SERVER_TIME_FADE_ON_DEFAULT_CFG_VAL 0 + +// Run On [ms] <0x000000-0xFFFFFF> +// Determines the time the controlled lights stay at the level determined by the LC Lightness On state since the occupancy input stopped detecting active occupancy information. +#define SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL 0 + +// Fade [ms] <0x000000-0xFFFFFF> +// Determines the time the controlled lights fade from the level determined by the LC Lightness On state to the level determined by the Lightness Prolong state. +#define SL_BTMESH_LC_SERVER_TIME_FADE_DEFAULT_CFG_VAL 0 + +// Prolong [ms] <0x000000-0xFFFFFF> +// Determines the time the controlled lights stay at the level determined by the LC Lightness Prolong state. +#define SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL 0 + +// Fade Standby Auto [ms] <0x000000-0xFFFFFF> +// Determines the time the controlled lights fade from the level determined by the LC Lightness Prolong state to the level determined by the LC Lightness Standby state when the transition is automatic. +#define SL_BTMESH_LC_SERVER_TIME_FADE_STANDBY_AUTO_DEFAULT_CFG_VAL 0 + +// Fade Standby Manual [ms] <0x000000-0xFFFFFF> +// Determines the time the controlled lights fade from the level determined by the LC Lightness Prolong state to the level determined by the LC Lightness Standby state when the transition is triggered by a change in the LC Light OnOff state. +#define SL_BTMESH_LC_SERVER_TIME_FADE_STANDBY_MANUAL_DEFAULT_CFG_VAL 0 + +// + +// Lightness + +// On <0x0000-0xFFFF> +// Determines the perceptive light lightness at the Occupancy and Run internal controller states. +#define SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL 0 + +// Prolong <0x0000-0xFFFF> +// Determines the light lightness at the Prolong internal controller state. +#define SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL 0 + +// Standby <0x0000-0xFFFF> +// Determines the light lightness at the Standby internal controller state. +#define SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL 0 + +// + +// Ambient + +// LuxLevel On [lux] <0x0000-0xFFFF> +// Represents the level that determines if the controller transitions from the Light Control Standby state. +#define SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL 0 + +// LuxLevel Prolong [lux] <0x0000-0xFFFF> +// Represents the required level in the Prolong state. +#define SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL 0 + +// LuxLevel Standby [lux] <0x0000-0xFFFF> +// Represents the required level in the Standby state. +#define SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL 0 + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_LC_SERVER_CONFIG_H diff --git a/app/btmesh/common/btmesh_lc_server/sl_btmesh_lc_server.c b/app/btmesh/common/btmesh_lc_server/sl_btmesh_lc_server.c new file mode 100644 index 00000000000..a733f0134ea --- /dev/null +++ b/app/btmesh/common/btmesh_lc_server/sl_btmesh_lc_server.c @@ -0,0 +1,1570 @@ +/***************************************************************************//** + * @file + * @brief Bt Mesh LC Server module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +// C Standard Library headers +#include +#include + +#include +#include "em_common.h" +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" + +#include "sl_btmesh_generic_model_capi_types.h" + +// Mesh specific headers +#include "sl_btmesh_lib.h" +#include "sl_btmesh_device_properties.h" +#include "sl_btmesh_sensor.h" + +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_lc_server_config.h" +#include "sl_btmesh_lc_server.h" +#include "sl_btmesh_lighting_server.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup LC_Server + * @{ + ******************************************************************************/ + +#define FRACTION(num) (uint16_t)(((num) > 0 \ + ? (num) - (int32_t)(num) \ + : (int32_t)(num) - (num)) * 1000) + +/// No flags used for message +#define NO_FLAGS 0 +/// Immediate transition time is 0 seconds +#define IMMEDIATE 0 +/// Callback has no parameters +#define NO_CALLBACK_DATA (void *)NULL +/// High Priority +#define HIGH_PRIORITY 0 +/// Values greater than max 37200000 are treated as unknown remaining time +#define UNKNOWN_REMAINING_TIME 40000000 +/** + * @brief Binary state that determines the mode of operation of the controller + * + * - 0 The controller is turned off. The binding with the Light Lightness state + * is disabled. + * - 1 The controller is turned on. The binding with the Light Lightness state + * is enabled. + */ +#define LC_MODE_DEFAULT 0 +/** + * @brief Binary state that determines if a controller transitions from a + * standby state when an occupancy sensor reports occupancy + * + * - 0 The controller does not transition from a standby state when occupancy + * is reported. + * - 1 The controller may transition from a standby state when occupancy + * is reported. + */ +#define LC_OCCUPANCY_MODE_DEFAULT 1 +/** + * @brief Representing the integral coefficient that determines the integral + * part of the equation defining the output of the regulator + * + * 0.0 - 1000.0 Integral coefficient when increasing output + */ +#define LC_REGULATOR_KIU_DEFAULT 250.0 +/** + * @brief Representing the integral coefficient that determines the integral + * part of the equation defining the output of the regulator + * + * 0.0 - 1000.0 Integral coefficient when decreasing output + */ +#define LC_REGULATOR_KID_DEFAULT 25.0 +/** + * @brief Representing the proportional coefficient that determines the + * proportional part of the equation defining the output of the regulator + * + * 0.0 - 1000.0 Proportional coefficient when increasing output + */ +#define LC_REGULATOR_KPU_DEFAULT 80.0 +/** + * @brief Representing the proportional coefficient that determines the + * proportional part of the equation defining the output of the regulator + * + * 0.0 - 1000.0 Proportional coefficient when decreasing output + */ +#define LC_REGULATOR_KPD_DEFAULT 80.0 +/** + * @brief Representing the percentage accuracy of the regulator + * + * 0.0 - 100.0 Regulator accuracy (percentage) + * + * \note Representing half a percent, i.e. 4 represents 2.0 percent. + */ +#define LC_REGULATOR_ACCURACY_DEFAULT 4 + +/******************************************************************************* + * Timer handle definitions. + ******************************************************************************/ +static sl_simple_timer_t lc_save_state_timer; +static sl_simple_timer_t lc_save_property_state_timer; +static sl_simple_timer_t lc_onoff_transition_timer; +static sl_simple_timer_t lc_delayed_onoff_timer; + +// Timer callbacks +static void lc_save_state_timer_cb(sl_simple_timer_t *handle, + void *data); +static void lc_save_property_state_timer_cb(sl_simple_timer_t *handle, + void *data); +static void lc_onoff_transition_timer_cb(sl_simple_timer_t *handle, + void *data); +static void lc_delayed_onoff_timer_cb(sl_simple_timer_t *handle, + void *data); + +/// LC state +static PACKSTRUCT(struct lc_state { + uint8_t mode; /**< LC mode */ + uint8_t occupancy_mode; /**< LC occupancy mode */ + uint8_t light_onoff; /**< LC light onoff */ + uint8_t onoff_current; /**< Current LC generic on/off value */ + uint8_t onoff_target; /**< Target LC generic on/off value */ +}) lc_state; + +/// LC property state +static PACKSTRUCT(struct lc_property_state { + /// Delay between receiving sensor occupancy message + /// and changing the Light LC Occupancy state + light_control_time_occupancy_delay time_occupancy_delay: 24; + /// Transition time from a standby state to a run state + light_control_time_fade_on time_fade_on: 24; + /// Duration of the run state after last occupancy was detected + light_control_time_run_on time_run_on: 24; + /// Transition time from a run state to a prolong state + light_control_time_fade time_fade: 24; + /// Duration of the prolong state + light_control_time_prolong time_prolong: 24; + /// Transition time from a prolong state to a standby state + /// when the transition is automatic + light_control_time_standby_auto time_fade_standby_auto: 24; + /// Transition time from a prolong state to a standby state + /// when the transition is triggered by a manual operation + light_control_time_standby_manual time_fade_standby_manual: 24; + /// Lightness level in a run state + uint16_t lightness_on; + /// Lightness level in a prolong state + uint16_t lightness_prolong; + /// Lightness level in a standby state + uint16_t lightness_standby; + /// Required Ambient LuxLevel level in the Run state + illuminance_t ambient_luxlevel_on: 24; + /// Required Ambient LuxLevel level in the Prolong state + illuminance_t ambient_luxlevel_prolong: 24; + /// Required Ambient LuxLevel level in the Standby state + illuminance_t ambient_luxlevel_standby: 24; + /// Integral coefficient of PI light regulator when increasing output + coefficient_t regulator_kiu; + /// Integral coefficient of PI light regulator when decreasing output + coefficient_t regulator_kid; + /// Proportional coefficient of PI light regulator when increasing output + coefficient_t regulator_kpu; + /// Proportional coefficient of PI light regulator when decreasing output + coefficient_t regulator_kpd; + /// Accuracy of PI light regulator + percentage_8_t regulator_accuracy; +}) lc_property_state; + +/// copy of transition delay parameter, needed for delayed lc on/off request +static uint32_t delayed_lc_onoff_trans = 0; + +static void lc_onoff_transition_complete(void); + +static void delayed_lc_onoff_request(void); + +/***************************************************************************//** + * Initialization of the models supported by this node. + * This function registers callbacks for each of the supported models. + ******************************************************************************/ +static void init_models(void); + +/***************************************************************************//** + * This function loads the saved light controller state from Persistent Storage + * and copies the data in the global variable lc_state. + * If PS key with ID 0x4005 does not exist or loading failed, + * lc_state is set to zero and some default values are written to it. + * + * @return Returns SL_STATUS_OK (0) if succeeds, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lc_state_load(void) +{ + sl_status_t sc; + size_t ps_len = 0; + struct lc_state ps_data; + + sc = sl_bt_nvm_load(SL_BTMESH_LC_SERVER_PS_KEY_CFG_VAL, + sizeof(ps_data), + &ps_len, + (uint8_t *)&ps_data); + + // Set default values if ps_load fail or size of lc_state has changed + if ((sc != SL_STATUS_OK) || (ps_len != sizeof(lc_state))) { + memset(&lc_state, 0, sizeof(lc_state)); + lc_state.mode = LC_MODE_DEFAULT; + lc_state.occupancy_mode = LC_OCCUPANCY_MODE_DEFAULT; + + if (sc == SL_STATUS_OK) { + // The sl_bt_nvm_load call was successful but the size of the loaded data + // differs from the expected size therefore error code shall be set + sc = SL_STATUS_INVALID_STATE; + log_error("LC server lc_state loaded from PS with invalid size, " + "use defaults. (expected=%zd,actual=%zd)" NL, + sizeof(lc_state), + ps_len); + } else { + log_status_error_f(sc, + "LC server lc_state load from PS failed " + "or nvm is empty, use defaults." NL); + } + } else { + memcpy(&lc_state, &ps_data, ps_len); + } + + return sc; +} + +/***************************************************************************//** + * This function saves the current light controller state in Persistent Storage + * so that the data is preserved over reboots and power cycles. + * The light controller state is hold in a global variable lc_state. + * A PS key with ID 0x4005 is used to store the whole structure. + * + * @return Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static int lc_state_store(void) +{ + sl_status_t sc = sl_bt_nvm_save(SL_BTMESH_LC_SERVER_PS_KEY_CFG_VAL, + sizeof(struct lc_state), + (const uint8_t *)&lc_state); + + log_status_error_f(sc, + "LC server lc_state store in PS failed." NL); + + return sc; +} + +/***************************************************************************//** + * This function is called each time the light controller state in RAM + * is changed. It sets up a soft timer that will save the state in flash after + * small delay. The purpose is to reduce amount of unnecessary flash writes. + ******************************************************************************/ +static void lc_state_changed(void) +{ + sl_status_t sc = sl_simple_timer_start(&lc_save_state_timer, + SL_BTMESH_LC_SERVER_NVM_SAVE_TIME_CFG_VAL, + lc_save_state_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start LC State save timer"); +} + +/******************************************************************************* + * This function is getter for current light controller mode. + * + * @return current light controller mode + ******************************************************************************/ +uint8_t lc_get_mode(void) +{ + return lc_state.mode; +} + +/******************************************************************************* + * Light Controller state update on power up sequence. + * + * @param[in] element Index of the element. + * @param[in] onpowerup Value of OnPowerUp state. + ******************************************************************************/ +void lc_onpowerup_update(uint16_t element, uint8_t onpowerup) +{ + sl_status_t sc_mode = SL_STATUS_OK; + sl_status_t sc_om = SL_STATUS_OK; + sl_status_t sc_onoff = SL_STATUS_OK; + + switch (onpowerup) { + case MESH_GENERIC_ON_POWER_UP_STATE_OFF: + case MESH_GENERIC_ON_POWER_UP_STATE_ON: + lc_state.mode = 0; + lc_state.light_onoff = 0; + lc_state.onoff_current = MESH_GENERIC_ON_OFF_STATE_OFF; + lc_state.onoff_target = MESH_GENERIC_ON_OFF_STATE_OFF; + sc_mode = sl_btmesh_lc_server_update_mode(element, lc_state.mode); + sc_om = sl_btmesh_lc_server_update_om(element, lc_state.occupancy_mode); + sc_onoff = sl_btmesh_lc_server_update_light_onoff(element, + lc_state.light_onoff, + IMMEDIATE); + break; + + case MESH_GENERIC_ON_POWER_UP_STATE_RESTORE: + if (lc_state.mode == 0) { + sc_mode = sl_btmesh_lc_server_update_mode(element, lc_state.mode); + sc_om = sl_btmesh_lc_server_update_om(element, lc_state.occupancy_mode); + } else { + sc_mode = sl_btmesh_lc_server_update_mode(element, lc_state.mode); + sc_om = sl_btmesh_lc_server_update_om(element, lc_state.occupancy_mode); + if (lc_state.light_onoff == 0) { + sc_onoff = sl_btmesh_lc_server_update_light_onoff(element, + lc_state.light_onoff, + IMMEDIATE); + } else { + sc_onoff = + sl_btmesh_lc_server_update_light_onoff(element, + lc_state.light_onoff, + lc_property_state.time_fade_on); + } + } + break; + + default: + break; + } + + log_btmesh_status_f(sc_mode, + "lc_server_update_mode failed (elem=%d)" NL, + element); + + log_btmesh_status_f(sc_om, + "lc_server_update_om failed (elem=%d)" NL, + element); + + log_btmesh_status_f(sc_onoff, + "lc_server_update_light_onoff failed (elem=%d)" NL, + element); + + lc_state_changed(); +} + +/***************************************************************************//** + * This function loads the saved light controller property state from Persistent + * Storage and copies the data in the global variable lc_property_state. + * If PS key with ID 0x4006 does not exist or loading failed, + * lc_property_state is set to zero and some default values are written to it. + * + * @return Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lc_property_state_load(void) +{ + sl_status_t sc; + size_t ps_len = 0; + struct lc_property_state ps_data; + + sc = sl_bt_nvm_load(SL_BTMESH_LC_SERVER_PROPERTY_PS_KEY_CFG_VAL, + sizeof(ps_data), + &ps_len, + (uint8_t *)&ps_data); + + // Set default values if ps_load fail or size of lc_property_state has changed + if ((sc != SL_STATUS_OK) || (ps_len != sizeof(lc_property_state))) { + memset(&lc_property_state, 0, sizeof(lc_property_state)); +#if SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + lc_property_state.time_occupancy_delay = + SL_BTMESH_LC_SERVER_TIME_OCCUPANCY_DELAY_DEFAULT_CFG_VAL; + lc_property_state.time_fade_on = SL_BTMESH_LC_SERVER_TIME_FADE_ON_DEFAULT_CFG_VAL; + lc_property_state.time_run_on = SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL; + lc_property_state.time_fade = SL_BTMESH_LC_SERVER_TIME_FADE_DEFAULT_CFG_VAL; + lc_property_state.time_prolong = SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL; + lc_property_state.time_fade_standby_auto = + SL_BTMESH_LC_SERVER_TIME_FADE_STANDBY_AUTO_DEFAULT_CFG_VAL; + lc_property_state.time_fade_standby_manual = + SL_BTMESH_LC_SERVER_TIME_FADE_STANDBY_MANUAL_DEFAULT_CFG_VAL; + lc_property_state.lightness_on = SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL; + lc_property_state.lightness_prolong = SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL; + lc_property_state.lightness_standby = SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL; + lc_property_state.ambient_luxlevel_on = + SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL; + lc_property_state.ambient_luxlevel_prolong = + SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL; + lc_property_state.ambient_luxlevel_standby = + SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL; +#endif // SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + lc_property_state.regulator_kiu = LC_REGULATOR_KIU_DEFAULT; + lc_property_state.regulator_kid = LC_REGULATOR_KID_DEFAULT; + lc_property_state.regulator_kpu = LC_REGULATOR_KPU_DEFAULT; + lc_property_state.regulator_kpd = LC_REGULATOR_KPD_DEFAULT; + lc_property_state.regulator_accuracy = LC_REGULATOR_ACCURACY_DEFAULT; + + if (sc == SL_STATUS_OK) { + // The sl_bt_nvm_load call was successful but the size of the loaded data + // differs from the expected size therefore error code shall be set + sc = SL_STATUS_INVALID_STATE; + log_error("LC server lc_property_state loaded from PS with invalid size, " + "use defaults. (expected=%zd,actual=%zd)" NL, + sizeof(lc_property_state), + ps_len); + } else { + log_status_error_f(sc, + "LC server lc_property_state load from PS failed " + "or nvm is empty, use defaults." NL); + } + } else { + memcpy(&lc_property_state, &ps_data, ps_len); + } + + return sc; +} + +/***************************************************************************//** + * This function saves the current light controller property state in Persistent + * Storage so that the data is preserved over reboots and power cycles. + * The light controller property state is hold in a global variable + * lc_property_state. A PS key with ID 0x4006 is used to store the + * whole structure. + * + * @return Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static int lc_property_state_store(void) +{ + sl_status_t sc; + + sc = sl_bt_nvm_save(SL_BTMESH_LC_SERVER_PROPERTY_PS_KEY_CFG_VAL, + sizeof(struct lc_property_state), + (const uint8_t *)&lc_property_state); + + log_status_error_f(sc, + "LC server lc_property_state store in PS failed." NL); + + return sc; +} + +/***************************************************************************//** + * This function is called each time the light controller property state in RAM + * is changed. It sets up a soft timer that will save the state in flash after + * small delay. The purpose is to reduce amount of unnecessary flash writes. + ******************************************************************************/ +static void lc_property_state_changed(void) +{ + sl_status_t sc = sl_simple_timer_start(&lc_save_property_state_timer, + SL_BTMESH_LC_SERVER_NVM_SAVE_TIME_CFG_VAL, + lc_save_property_state_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start LC Property Save timer"); +} + +/***************************************************************************//** + * This function update property in stack based on property data. + * + * @param[in] element Index of the element. + * @param[in] property_data Pointer to property data array that contains: + * - property ID in first two bytes, + * - length of data in third byte, + * - property value in the next bytes. + ******************************************************************************/ +static void update_property(uint16_t element, const uint8_t *property_data) +{ + uint16_t property_id = (uint16_t)property_data[0] + | ((uint16_t)property_data[1] << 8); + sl_status_t sc = + sl_btmesh_lc_setup_server_update_property(element, + property_id, + property_data[2], + &property_data[3]); + + log_btmesh_status_f(sc, + "lc_setup_server_update_property failed " + "(elem=%d,property=0x%04x)" NL, + element, + property_id); +} + +/***************************************************************************//** + * This function update Light LC Time Occupancy Delay property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_time_occupancy_delay_update(uint16_t element) +{ + uint8_t property_data[6]; + light_control_time_occupancy_delay delay = lc_property_state.time_occupancy_delay; + mesh_sensor_data_to_buf(LIGHT_CONTROL_TIME_OCCUPANCY_DELAY, + property_data, + (uint8_t *)&delay); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Time Fade On property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_time_fade_on_update(uint16_t element) +{ + uint8_t property_data[6]; + light_control_time_fade_on fade_on = lc_property_state.time_fade_on; + mesh_sensor_data_to_buf(LIGHT_CONTROL_TIME_FADE_ON, + property_data, + (uint8_t *)&fade_on); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Time Run On property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_time_run_on_update(uint16_t element) +{ + uint8_t property_data[6]; + light_control_time_run_on run_on = lc_property_state.time_run_on; + mesh_sensor_data_to_buf(LIGHT_CONTROL_TIME_RUN_ON, + property_data, + (uint8_t *)&run_on); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Time Fade property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_time_fade_update(uint16_t element) +{ + uint8_t property_data[6]; + light_control_time_fade fade = lc_property_state.time_fade; + mesh_sensor_data_to_buf(LIGHT_CONTROL_TIME_FADE, + property_data, + (uint8_t *)&fade); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Time Prolong property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_time_prolong_update(uint16_t element) +{ + uint8_t property_data[6]; + light_control_time_prolong prolong = lc_property_state.time_prolong; + mesh_sensor_data_to_buf(LIGHT_CONTROL_TIME_PROLONG, + property_data, + (uint8_t *)&prolong); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Time Fade Standby Auto property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_time_fade_standby_auto_update(uint16_t element) +{ + uint8_t property_data[6]; + light_control_time_standby_auto standby_auto = lc_property_state.time_fade_standby_auto; + mesh_sensor_data_to_buf(LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO, + property_data, + (uint8_t *)&standby_auto); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Time Fade Standby Manual property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_time_fade_standby_manual_update(uint16_t element) +{ + uint8_t property_data[6]; + light_control_time_standby_manual standby_manual = lc_property_state.time_fade_standby_manual; + mesh_sensor_data_to_buf(LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL, + property_data, + (uint8_t *)&standby_manual); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Lightness On property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_lightness_on_update(uint16_t element) +{ + uint8_t property_data[5]; + mesh_sensor_data_to_buf(LIGHT_CONTROL_LIGHTNESS_ON, + property_data, + (uint8_t *)&lc_property_state.lightness_on); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Lightness Prolong property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_lightness_prolong_update(uint16_t element) +{ + uint8_t property_data[5]; + mesh_sensor_data_to_buf(LIGHT_CONTROL_LIGHTNESS_PROLONG, + property_data, + (uint8_t *)&lc_property_state.lightness_prolong); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Lightness Standby property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_lightness_standby_update(uint16_t element) +{ + uint8_t property_data[5]; + mesh_sensor_data_to_buf(LIGHT_CONTROL_LIGHTNESS_STANDBY, + property_data, + (uint8_t *)&lc_property_state.lightness_standby); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Ambient LuxLevel On property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_ambient_luxlevel_on_update(uint16_t element) +{ + uint8_t property_data[6]; + illuminance_t ambient_luxlevel_on = lc_property_state.ambient_luxlevel_on; + mesh_sensor_data_to_buf(LIGHT_CONTROL_AMBIENT_LUXLEVEL_ON, + property_data, + (uint8_t *)&ambient_luxlevel_on); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Ambient LuxLevel Prolong property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_ambient_luxlevel_prolong_update(uint16_t element) +{ + uint8_t property_data[6]; + illuminance_t ambient_luxlevel_prolong = lc_property_state.ambient_luxlevel_prolong; + mesh_sensor_data_to_buf(LIGHT_CONTROL_AMBIENT_LUXLEVEL_PROLONG, + property_data, + (uint8_t *)&ambient_luxlevel_prolong); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Ambient LuxLevel Standby property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_ambient_luxlevel_standby_update(uint16_t element) +{ + uint8_t property_data[6]; + illuminance_t ambient_luxlevel_standby = lc_property_state.ambient_luxlevel_standby; + mesh_sensor_data_to_buf(LIGHT_CONTROL_AMBIENT_LUXLEVEL_STANDBY, + property_data, + (uint8_t *)&ambient_luxlevel_standby); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Regulator Kiu property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_regulator_kiu_update(uint16_t element) +{ + uint8_t property_data[7]; + mesh_sensor_data_to_buf(LIGHT_CONTROL_REGULATOR_KIU, + property_data, + (uint8_t *)&lc_property_state.regulator_kiu); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Regulator Kid property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_regulator_kid_update(uint16_t element) +{ + uint8_t property_data[7]; + mesh_sensor_data_to_buf(LIGHT_CONTROL_REGULATOR_KID, + property_data, + (uint8_t *)&lc_property_state.regulator_kid); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Regulator Kpu property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_regulator_kpu_update(uint16_t element) +{ + uint8_t property_data[7]; + mesh_sensor_data_to_buf(LIGHT_CONTROL_REGULATOR_KPU, + property_data, + (uint8_t *)&lc_property_state.regulator_kpu); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Regulator Kpd property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_regulator_kpd_update(uint16_t element) +{ + uint8_t property_data[7]; + mesh_sensor_data_to_buf(LIGHT_CONTROL_REGULATOR_KPD, + property_data, + (uint8_t *)&lc_property_state.regulator_kpd); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update Light LC Regulator Accuracy property in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_regulator_accuracy_update(uint16_t element) +{ + uint8_t property_data[4]; + mesh_sensor_data_to_buf(LIGHT_CONTROL_REGULATOR_ACCURACY, + property_data, + (uint8_t *)&lc_property_state.regulator_accuracy); + update_property(element, property_data); +} + +/***************************************************************************//** + * This function update all light controller properties in stack. + * + * @param[in] element Index of the element. + ******************************************************************************/ +static void lc_property_state_update(uint16_t element) +{ + lc_time_occupancy_delay_update(element); + lc_time_fade_on_update(element); + lc_time_run_on_update(element); + lc_time_fade_update(element); + lc_time_prolong_update(element); + lc_time_fade_standby_auto_update(element); + lc_time_fade_standby_manual_update(element); + lc_lightness_on_update(element); + lc_lightness_prolong_update(element); + lc_lightness_standby_update(element); + lc_ambient_luxlevel_on_update(element); + lc_ambient_luxlevel_prolong_update(element); + lc_ambient_luxlevel_standby_update(element); + lc_regulator_kiu_update(element); + lc_regulator_kid_update(element); + lc_regulator_kpu_update(element); + lc_regulator_kpd_update(element); + lc_regulator_accuracy_update(element); +} + +/******************************************************************************* + * LC initialization. + * This should be called at each boot if provisioning is already done. + * Otherwise this function should be called after provisioning is completed. + * + * @param[in] element Index of the element where LC model is initialized. + * + * @return Status of the initialization operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +sl_status_t sl_btmesh_lc_init(void) +{ + // Initialize lc server models + const uint16_t element = BTMESH_LC_SERVER_LIGHT_LC; + sl_status_t result; + sl_status_t sc; + + result = sl_btmesh_lc_server_init(element); + log_status_f(result, + "sl_btmesh_lc_server_init failed (elem=%d)" NL, + element); + + memset(&lc_state, 0, sizeof(lc_state)); + lc_state_load(); + + memset(&lc_property_state, 0, sizeof(lc_property_state)); + lc_property_state_load(); + + // Set the regulator interval to 100 milliseconds. If you want to use shorter + // intervals, you should disable some logs in order not to affect performance. + sc = sl_btmesh_lc_server_set_regulator_interval(element, 100); + log_status_f(sc, "sl_btmesh_lc_server_init failed (elem=%d)" NL, element); + + lc_property_state_update(element); + lc_property_state_changed(); + + lc_onpowerup_update(element, sl_btmesh_get_lightness_onpowerup()); + + init_models(); + + // The status code of the sl_btmesh_lc_server_init is returned because the + // successful initialization of the btmesh stack lc feature is essential + // for the proper behavior of the module while the improper setup of some + // properties and states are not that critical. + return result; +} + +/***************************************************************************//** + * Handling of lc server mode updated event. + * + * @param[in] evt Pointer to lc server mode updated event. + ******************************************************************************/ +static void handle_lc_server_mode_updated_event( + sl_btmesh_evt_lc_server_mode_updated_t *evt) +{ + lc_state.mode = evt->mode_value; + lc_state_changed(); +} + +/***************************************************************************//** + * Handling of lc server occupancy mode updated event. + * + * @param[in] evt Pointer to lc server occupancy mode updated event. + ******************************************************************************/ +static void handle_lc_server_om_updated_event( + sl_btmesh_evt_lc_server_om_updated_t *evt) +{ + log_info("evt:sl_btmesh_evt_lc_server_om_updated_id, om=%u" NL, evt->om_value); + lc_state.occupancy_mode = evt->om_value; + lc_state_changed(); +} + +/***************************************************************************//** + * Handling of lc server light onoff updated event. + * + * @param[in] evt Pointer to lc server light onoff updated event. + ******************************************************************************/ +static void handle_lc_server_light_onoff_updated_event( + sl_btmesh_evt_lc_server_light_onoff_updated_t *evt) +{ + lc_state.light_onoff = evt->onoff_state; + lc_state_changed(); +} + +/***************************************************************************//** + * Handling of lc server linear output updated event. + * + * @param[in] evt Pointer to lc server linear output updated event. + ******************************************************************************/ +static void handle_lc_server_linear_output_updated_event( + sl_btmesh_evt_lc_server_linear_output_updated_t *evt) +{ + // Convert from linear to actual lightness value + uint32_t lightness = (uint32_t)sqrt(65535 + * (uint32_t)(evt->linear_output_value)); + // Update LED + sl_btmesh_lighting_set_level(lightness, IMMEDIATE); +} + +/***************************************************************************//** + * Printing the float number using integers. + * + * @param[in] number Number to print. + ******************************************************************************/ +static void print_float(float number) +{ + if (number > INT32_MAX) { + log_append_info("> %ld", INT32_MAX); + } else if (number < INT32_MIN) { + log_append_info("< %ld", INT32_MIN); + } else { + log_append_info("%ld.%03u", (int32_t)number, FRACTION(number)); + } +} + +/***************************************************************************//** + * Handling of lc setup server set property event. + * + * @param[in] evt Pointer to lc setup server set property event. + ******************************************************************************/ +static void handle_lc_setup_server_set_property( + sl_btmesh_evt_lc_setup_server_set_property_t *evt) +{ + for (int i = 0; i < evt->property_value.len; i++) { + log_append_info("%2.2x", evt->property_value.data[i]); + } + log_append_info(NL); + + switch (evt->property_id) { + case LIGHT_CONTROL_TIME_OCCUPANCY_DELAY: + lc_property_state.time_occupancy_delay = + mesh_sensor_data_from_buf(LIGHT_CONTROL_TIME_OCCUPANCY_DELAY, + evt->property_value.data) + .time_millisecond_24; + log_info("Light Control Time Occupancy Delay = %u.%03us" NL, + lc_property_state.time_occupancy_delay / 1000, + lc_property_state.time_occupancy_delay % 1000); + break; + + case LIGHT_CONTROL_TIME_FADE_ON: + lc_property_state.time_fade_on = + mesh_sensor_data_from_buf(LIGHT_CONTROL_TIME_FADE_ON, + evt->property_value.data) + .time_millisecond_24; + log_info("Light Control Time Fade On = %u.%03us" NL, + lc_property_state.time_fade_on / 1000, + lc_property_state.time_fade_on % 1000); + break; + + case LIGHT_CONTROL_TIME_RUN_ON: + lc_property_state.time_run_on = + mesh_sensor_data_from_buf(LIGHT_CONTROL_TIME_RUN_ON, + evt->property_value.data) + .time_millisecond_24; + log_info("Light Control Time Run On = %u.%03us" NL, + lc_property_state.time_run_on / 1000, + lc_property_state.time_run_on % 1000); + break; + + case LIGHT_CONTROL_TIME_FADE: + lc_property_state.time_fade = + mesh_sensor_data_from_buf(LIGHT_CONTROL_TIME_FADE, + evt->property_value.data) + .time_millisecond_24; + log_info("Light Control Time Fade = %u.%03us" NL, + lc_property_state.time_fade / 1000, + lc_property_state.time_fade % 1000); + break; + + case LIGHT_CONTROL_TIME_PROLONG: + lc_property_state.time_prolong = + mesh_sensor_data_from_buf(LIGHT_CONTROL_TIME_PROLONG, + evt->property_value.data) + .time_millisecond_24; + log_info("Light Control Time Prolong = %u.%03us" NL, + lc_property_state.time_prolong / 1000, + lc_property_state.time_prolong % 1000); + break; + + case LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO: + lc_property_state.time_fade_standby_auto = + mesh_sensor_data_from_buf(LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO, + evt->property_value.data) + .time_millisecond_24; + log_info("Light Control Time Fade Standby Auto = %u.%03us" NL, + lc_property_state.time_fade_standby_auto / 1000, + lc_property_state.time_fade_standby_auto % 1000); + break; + + case LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL: + lc_property_state.time_fade_standby_manual = + mesh_sensor_data_from_buf(LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL, + evt->property_value.data) + .time_millisecond_24; + log_info("Light Control Time Fade Standby Manual = %u.%03us" NL, + lc_property_state.time_fade_standby_manual / 1000, + lc_property_state.time_fade_standby_manual % 1000); + break; + + case LIGHT_CONTROL_LIGHTNESS_ON: + lc_property_state.lightness_on = + mesh_sensor_data_from_buf(LIGHT_CONTROL_LIGHTNESS_ON, + evt->property_value.data) + .uint16; + log_info("Light Control Lightness On = %u" NL, + lc_property_state.lightness_on); + break; + + case LIGHT_CONTROL_LIGHTNESS_PROLONG: + lc_property_state.lightness_prolong = + mesh_sensor_data_from_buf(LIGHT_CONTROL_LIGHTNESS_PROLONG, + evt->property_value.data) + .uint16; + log_info("Light Control Lightness Prolong = %u" NL, + lc_property_state.lightness_prolong); + break; + + case LIGHT_CONTROL_LIGHTNESS_STANDBY: + lc_property_state.lightness_standby = + mesh_sensor_data_from_buf(LIGHT_CONTROL_LIGHTNESS_STANDBY, + evt->property_value.data) + .uint16; + log_info("Light Control Lightness Standby = %u" NL, + lc_property_state.lightness_standby); + break; + + case LIGHT_CONTROL_AMBIENT_LUXLEVEL_ON: + lc_property_state.ambient_luxlevel_on = + mesh_sensor_data_from_buf(LIGHT_CONTROL_AMBIENT_LUXLEVEL_ON, + evt->property_value.data) + .illuminance; + log_info("Light Control Ambient LuxLevel On = %u.%02ulux" NL, + lc_property_state.ambient_luxlevel_on / 100, + lc_property_state.ambient_luxlevel_on % 100); + break; + + case LIGHT_CONTROL_AMBIENT_LUXLEVEL_PROLONG: + lc_property_state.ambient_luxlevel_prolong = + mesh_sensor_data_from_buf(LIGHT_CONTROL_AMBIENT_LUXLEVEL_PROLONG, + evt->property_value.data) + .illuminance; + log_info("Light Control Ambient LuxLevel Prolong = %u.%02ulux" NL, + lc_property_state.ambient_luxlevel_prolong / 100, + lc_property_state.ambient_luxlevel_prolong % 100); + break; + + case LIGHT_CONTROL_AMBIENT_LUXLEVEL_STANDBY: + lc_property_state.ambient_luxlevel_standby = + mesh_sensor_data_from_buf(LIGHT_CONTROL_AMBIENT_LUXLEVEL_STANDBY, + evt->property_value.data) + .illuminance; + log_info("Light Control Ambient LuxLevel Standby = %u.%02ulux" NL, + lc_property_state.ambient_luxlevel_standby / 100, + lc_property_state.ambient_luxlevel_standby % 100); + break; + + case LIGHT_CONTROL_REGULATOR_KIU: + lc_property_state.regulator_kiu = + mesh_sensor_data_from_buf(LIGHT_CONTROL_REGULATOR_KIU, + evt->property_value.data) + .coefficient; + log_info("Light Control Regulator Kiu = "); + print_float(lc_property_state.regulator_kiu); + log_append_info(NL); + break; + + case LIGHT_CONTROL_REGULATOR_KID: + lc_property_state.regulator_kid = + mesh_sensor_data_from_buf(LIGHT_CONTROL_REGULATOR_KID, + evt->property_value.data) + .coefficient; + log_info("Light Control Regulator Kid = "); + print_float(lc_property_state.regulator_kid); + log_append_info(NL); + break; + + case LIGHT_CONTROL_REGULATOR_KPU: + lc_property_state.regulator_kpu = + mesh_sensor_data_from_buf(LIGHT_CONTROL_REGULATOR_KPU, + evt->property_value.data) + .coefficient; + log_info("Light Control Regulator Kpu = "); + print_float(lc_property_state.regulator_kpu); + log_append_info(NL); + break; + + case LIGHT_CONTROL_REGULATOR_KPD: + lc_property_state.regulator_kpd = + mesh_sensor_data_from_buf(LIGHT_CONTROL_REGULATOR_KPD, + evt->property_value.data) + .coefficient; + log_info("Light Control Regulator Kpd = "); + print_float(lc_property_state.regulator_kpd); + log_nl(); + break; + + case LIGHT_CONTROL_REGULATOR_ACCURACY: + lc_property_state.regulator_accuracy = + mesh_sensor_data_from_buf(LIGHT_CONTROL_REGULATOR_ACCURACY, + evt->property_value.data) + .percentage; + if (lc_property_state.regulator_accuracy == 0xFF) { + log_info("Light Control Regulator Accuracy = Value is not known" NL); + } else { + log_info("Light Control Regulator Accuracy = %u.%u%%" NL, + lc_property_state.regulator_accuracy / 2, + (lc_property_state.regulator_accuracy % 2) * 5); + } + break; + + default: + break; + } + + lc_property_state_changed(); +} + +/******************************************************************************* + * Handle LC Server events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_lc_server_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_lc_server_mode_updated_id: + handle_lc_server_mode_updated_event( + &(evt->data.evt_lc_server_mode_updated)); + break; + + case sl_btmesh_evt_lc_server_om_updated_id: + handle_lc_server_om_updated_event( + &(evt->data.evt_lc_server_om_updated)); + break; + + case sl_btmesh_evt_lc_server_light_onoff_updated_id: + handle_lc_server_light_onoff_updated_event( + &(evt->data.evt_lc_server_light_onoff_updated)); + break; + + case sl_btmesh_evt_lc_server_linear_output_updated_id: + handle_lc_server_linear_output_updated_event( + &(evt->data.evt_lc_server_linear_output_updated)); + break; + + case sl_btmesh_evt_lc_setup_server_set_property_id: + handle_lc_setup_server_set_property( + &(evt->data.evt_lc_setup_server_set_property)); + break; + + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_lc_init(); + break; + + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_lc_init(); + } + break; + + case sl_btmesh_evt_node_reset_id: + sl_bt_nvm_erase(SL_BTMESH_LC_SERVER_PS_KEY_CFG_VAL); + sl_bt_nvm_erase(SL_BTMESH_LC_SERVER_PROPERTY_PS_KEY_CFG_VAL); + break; + + default: + break; + } +} + +/***************************************************************************//** + * @addtogroup LC_GenericOnOff + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to LC generic on/off request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lc_onoff_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms) +{ + sl_status_t sc; + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_on_off; + current.on_off.on = lc_state.onoff_current; + + target.kind = mesh_generic_state_on_off; + target.on_off.on = lc_state.onoff_target; + + sc = mesh_lib_generic_server_respond(MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + 0x00); + + log_status_error_f(sc, + "LC server respond failed " + "(claddr=0x%04x,mdl=0x%04x,elem=%d,state=0x%04x)" NL, + client_addr, + MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + element_index, + current.kind); + return sc; +} + +/***************************************************************************//** + * Update LC generic on/off state. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lc_onoff_update(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t sc; + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_on_off; + current.on_off.on = lc_state.onoff_current; + + target.kind = mesh_generic_state_on_off; + target.on_off.on = lc_state.onoff_target; + + sc = mesh_lib_generic_server_update(MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); + + log_status_error_f(sc, + "LC server state update failed " + "(mdl=0x%04x,elem=%d,state=0x%04x)" NL, + MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + element_index, + current.kind); + return sc; +} + +/***************************************************************************//** + * Update LC generic on/off state and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lc_onoff_update_and_publish(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t sc; + + sc = lc_onoff_update(element_index, remaining_ms); + if (sc == SL_STATUS_OK) { + sc = mesh_lib_generic_server_publish(MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + element_index, + mesh_generic_state_on_off); + log_btmesh_status_f(sc, + "LC server state publish failed " + "(mdl=0x%04x,elem=%d,state=0x%04x)" NL, + MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + element_index, + mesh_generic_state_on_off); + } + return sc; +} + +/******************************************************************************* + * This function process the requests for the LC generic on/off model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void lc_onoff_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + sl_status_t sc; + + log_info("LC ON/OFF request: requested state=<%s>, transition=%lu, delay=%u" NL, + request->on_off ? "ON" : "OFF", transition_ms, delay_ms); + + if (lc_state.onoff_current == request->on_off) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Turning LC light <%s>" NL, request->on_off ? "ON" : "OFF"); + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + lc_state.onoff_current = request->on_off; + lc_state.onoff_target = request->on_off; + } else if (delay_ms > 0) { + // a delay has been specified for the lc light change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + lc_state.onoff_target = request->on_off; + sc = sl_simple_timer_start(&lc_delayed_onoff_timer, + delay_ms, + lc_delayed_onoff_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start LC Delayed Onoff Timer"); + // store transition parameter for later use + delayed_lc_onoff_trans = transition_ms; + } else { + // no delay but transition time has been set. + lc_state.onoff_target = request->on_off; + if (lc_state.onoff_target == MESH_GENERIC_ON_OFF_STATE_ON) { + lc_state.onoff_current = MESH_GENERIC_ON_OFF_STATE_ON; + } + lc_onoff_update(element_index, transition_ms); + + // lc current state will be updated when transition is complete + sc = sl_simple_timer_start(&lc_onoff_transition_timer, + transition_ms, + lc_onoff_transition_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start LC Onoff Transition timer"); + } + lc_state_changed(); + +#ifdef SL_CATALOG_BTMESH_SCENE_SERVER_PRESENT + // State has changed, so the current scene number is reset + sc = sl_btmesh_scene_server_reset_register(element_index); + + // The function can fail if there is no scene server model in the element or + // the btmesh_stack_scene_server component is not present. Both of these + // are configuration issues so assert can be used. + app_assert_status_f(sc, "Failed to reset scene register"); +#endif + } + + uint32_t remaining_ms = delay_ms + transition_ms; + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + lc_onoff_response(element_index, client_addr, appkey_index, remaining_ms); + } + lc_onoff_update_and_publish(element_index, remaining_ms); +} + +/******************************************************************************* + * This function is a handler for LC generic on/off change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void lc_onoff_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (current->on_off.on != lc_state.onoff_current) { + log_info("LC ON/OFF state changed %u to %u" NL, + lc_state.onoff_current, + current->on_off.on); + + lc_state.onoff_current = current->on_off.on; + lc_state_changed(); + } else { + log_info("Dummy LC ON/OFF change - same state as before" NL); + } +} + +/******************************************************************************* + * This function is a handler for LC generic on/off recall event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void lc_onoff_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + + log_info("LC Generic ON/OFF recall" NL); + if (transition_ms == IMMEDIATE) { + lc_state.onoff_target = current->on_off.on; + } else { + lc_state.onoff_target = target->on_off.on; + } + + if (lc_state.onoff_current == lc_state.onoff_target) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall ON/OFF state <%s> with transition=%lu ms" NL, + lc_state.onoff_target ? "ON" : "OFF", + transition_ms); + + if (transition_ms == IMMEDIATE) { + lc_state.onoff_current = current->on_off.on; + } else { + if (lc_state.onoff_target == MESH_GENERIC_ON_OFF_STATE_ON) { + lc_state.onoff_current = MESH_GENERIC_ON_OFF_STATE_ON; + } + // lc current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&lc_onoff_transition_timer, + transition_ms, + lc_onoff_transition_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start LC Onoff Transition timer"); + } + lc_state_changed(); + } + + lc_onoff_update_and_publish(element_index, transition_ms); +} + +/***************************************************************************//** + * This function is called when a LC on/off request + * with non-zero transition time has completed. + ******************************************************************************/ +static void lc_onoff_transition_complete(void) +{ + // transition done -> set state, update and publish + lc_state.onoff_current = lc_state.onoff_target; + + log_info("Transition complete. New state is %s" NL, + lc_state.onoff_current ? "ON" : "OFF"); + + lc_state_changed(); + lc_onoff_update_and_publish(BTMESH_LC_SERVER_LIGHT_LC, + IMMEDIATE); +} + +/***************************************************************************//** + * This function is called when delay for LC on/off request has completed. + ******************************************************************************/ +static void delayed_lc_onoff_request(void) +{ + log_info("Starting delayed LC ON/OFF request: %u -> %u, %lu ms" NL, + lc_state.onoff_current, + lc_state.onoff_target, + delayed_lc_onoff_trans); + + if (delayed_lc_onoff_trans == 0) { + // no transition delay, update state immediately + + lc_state.onoff_current = lc_state.onoff_target; + lc_state_changed(); + lc_onoff_update_and_publish(BTMESH_LC_SERVER_LIGHT_LC, + delayed_lc_onoff_trans); + } else { + if (lc_state.onoff_target == MESH_GENERIC_ON_OFF_STATE_ON) { + lc_state.onoff_current = MESH_GENERIC_ON_OFF_STATE_ON; + lc_onoff_update(BTMESH_LC_SERVER_LIGHT_LC, delayed_lc_onoff_trans); + } + + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&lc_onoff_transition_timer, + delayed_lc_onoff_trans, + lc_onoff_transition_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start LC Onoff Transition timer"); + } +} + +/***************************************************************************//** + * Initialization of the models supported by this node. + * This function registers callbacks for each of the supported models. + ******************************************************************************/ +static void init_models(void) +{ + sl_status_t sc; + sc = mesh_lib_generic_server_register_handler(MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + BTMESH_LC_SERVER_LIGHT_LC, + lc_onoff_request, + lc_onoff_change, + lc_onoff_recall); + app_assert_status_f(sc, + "LC server failed to register handlers (mdl=0x%04x,elem=%d)", + MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + BTMESH_LC_SERVER_LIGHT_LC); +} + +/**************************************************************************//** + * Timer Callbacks + *****************************************************************************/ +static void lc_save_state_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // save the light controller state + lc_state_store(); +} + +static void lc_save_property_state_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // save the light controller property state + lc_property_state_store(); +} + +static void lc_onoff_transition_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for lc on/off request has completed, update the lc state + lc_onoff_transition_complete(); +} + +static void lc_delayed_onoff_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for lc on/off request has passed, now process the request + delayed_lc_onoff_request(); +} +/** @} (end addtogroup LC_Server) */ diff --git a/app/btmesh/common/btmesh_lc_server/sl_btmesh_lc_server.h b/app/btmesh/common/btmesh_lc_server/sl_btmesh_lc_server.h new file mode 100644 index 00000000000..9555a422dac --- /dev/null +++ b/app/btmesh/common/btmesh_lc_server/sl_btmesh_lc_server.h @@ -0,0 +1,77 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_lc_server.h + ******************************************************************************* + * # 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_BTMESH_LC_SERVER_H +#define SL_BTMESH_LC_SERVER_H + +#include "sl_btmesh_generic_model_capi_types.h" + +/***************************************************************************//** + * @defgroup LC Light Controller Module + * @brief LC Module Implementation + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup LC + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * LC initialization. + * This should be called at each boot if provisioning is already done. + * Otherwise this function should be called after provisioning is completed. + * + * @param[in] element Index of the element where LC model is initialized. + * + * @return Status of the initialization operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +sl_status_t sl_btmesh_lc_init(void); + +/***************************************************************************//** + * This function is getter for current light controller mode. + * + * @return current light controller mode + ******************************************************************************/ +uint8_t sl_btmesh_lc_get_mode(void); + +/***************************************************************************//** + * Handle LC Server events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_lc_server_on_event(sl_btmesh_msg_t *evt); + +/** @} (end addtogroup LC) */ + +#endif /* SL_BTMESH_LC_SERVER_H */ diff --git a/app/btmesh/common/btmesh_lighting_client/btmesh_lighting_client.dcd b/app/btmesh/common/btmesh_lighting_client/btmesh_lighting_client.dcd new file mode 100644 index 00000000000..df4925958e1 --- /dev/null +++ b/app/btmesh/common/btmesh_lighting_client/btmesh_lighting_client.dcd @@ -0,0 +1,10 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1001", "name":"Generic On/Off Client"}, + {"mid":"0x1302", "name":"Light Lightness Client"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_lighting_client/config/sl_btmesh_lighting_client_config.h b/app/btmesh/common/btmesh_lighting_client/config/sl_btmesh_lighting_client_config.h new file mode 100644 index 00000000000..5628e188aa9 --- /dev/null +++ b/app/btmesh/common/btmesh_lighting_client/config/sl_btmesh_lighting_client_config.h @@ -0,0 +1,77 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_LIGHTING_CLIENT_CONFIG_H +#define SL_BTMESH_LIGHTING_CLIENT_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Light Lightness Client configuration + +// Lighting model restransmission count +// Default: 3 +// Lighting model restransmission count (How many times Lighting model messages are to be sent out for reliability). +#define SL_BTMESH_LIGHT_RETRANSMISSION_COUNT_CFG_VAL (3) + +// Lighting model restransmission timeout +// Default: 50 +// Lighting model restransmission timeout. +#define SL_BTMESH_LIGHT_RETRANSMISSION_TIMEOUT_CFG_VAL (50) + +// ONOFF model restransmission count +// Default: 3 +// ONOFF model restransmission count (How many times ONOFF model messages are to be sent out for reliability). +#define SL_BTMESH_ONOFF_RETRANSMISSION_COUNT_CFG_VAL (3) + +// ONOFF model restransmission timeout +// Default: 50 +// ONOFF model restransmission timeout. +#define SL_BTMESH_ONOFF_RETRANSMISSION_TIMEOUT_CFG_VAL (50) + +// Enable lightness value wraparound +// Default: 0 +// If the lightness reaches the max or min value then it wraps around. +#define SL_BTMESH_LIGHT_LIGHTNESS_WRAP_ENABLED_CFG_VAL (0) + +// Enable Logging +// Default: 1 +// Enable / disable Logging for Lighting Client model specific messages for this component. +#define SL_BTMESH_LIGHTING_CLIENT_LOGGING_CFG_VAL (1) + +// Log text when sending a On/Off Model Message is successful. +// Set Log text for successfully sending an On/Off Model Message. +#define SL_BTMESH_LIGHTING_ONOFF_LOGGING_CLIENT_PUBLISH_SUCCESS_CFG_VAL "CTL On/off request sent, trid = %u, delay = %u\r\n" + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_LIGHTING_CLIENT_CONFIG_H diff --git a/app/btmesh/common/btmesh_lighting_client/sl_btmesh_lighting_client.c b/app/btmesh/common/btmesh_lighting_client/sl_btmesh_lighting_client.c new file mode 100644 index 00000000000..0eac48e12a8 --- /dev/null +++ b/app/btmesh/common/btmesh_lighting_client/sl_btmesh_lighting_client.c @@ -0,0 +1,382 @@ +/***************************************************************************//** + * @file + * @brief Bt Mesh Lighting Client module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +/* C Standard Library headers */ +#include +#include + +#include "em_common.h" +#include "sl_status.h" + +#include "sl_btmesh_api.h" +#include "sl_bt_api.h" +#include "sl_btmesh_dcd.h" + +#include "sl_btmesh_generic_model_capi_types.h" +#include "sl_btmesh_lib.h" + +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_lighting_client_config.h" +#include "sl_btmesh_lighting_client.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup Lighting + * @{ + ******************************************************************************/ + +/// Parameter ignored for publishing +#define IGNORED 0 +/// No flags used for message +#define NO_FLAGS 0 +/// Immediate transition time is 0 seconds +#define IMMEDIATE 0 +/// High Priority +#define HIGH_PRIORITY 0 +/// Callback has not parameters +#define NO_CALLBACK_DATA (void *)NULL +/// Maximum lightness percentage value +#define LIGHTNESS_PCT_MAX 100 +/// Delay unit value for request for ctl messages in millisecond +#define REQ_DELAY_MS 50 + +/// periodic timer handle +static sl_simple_timer_t onoff_retransmission_timer; + +/// periodic timer callback +static void onoff_retransmission_timer_cb(sl_simple_timer_t *handle, + void *data); +/// periodic timer handle +static sl_simple_timer_t light_retransmission_timer; + +/// periodic timer callback +static void light_retransmission_timer_cb(sl_simple_timer_t *handle, + void *data); + +/// current position of the switch +static uint8_t switch_pos = 0; +/// number of on/off requests to be sent +static uint8_t onoff_request_count; +/// on/off transaction identifier +static uint8_t onoff_trid = 0; +/// lightness level percentage +static uint8_t lightness_percent = 0; +/// lightness level percentage when switching ON +static uint8_t lightness_percent_switch_on = LIGHTNESS_PCT_MAX; +/// lightness level converted from percentage to actual value, range 0..65535 +static uint16_t lightness_level = 0; +/// number of lightness requests to be sent +static uint8_t lightness_request_count; +/// lightness transaction identifier +static uint8_t lightness_trid = 0; + +/***************************************************************************//** + * This function publishes one generic on/off request to change the state + * of light(s) in the group. Global variable switch_pos holds the latest + * desired light state, possible values are: + * switch_pos = 1 -> PB1 was pressed long (above 1s), turn lights on + * switch_pos = 0 -> PB0 was pressed long (above 1s), turn lights off + * + * param[in] retrans Indicates if this is the first request or a retransmission, + * possible values are 0 = first request, 1 = retransmission. + * + * @note This application sends multiple generic on/off requests for each + * long button press to improve reliability. + * The transaction ID is not incremented in case of a retransmission. + ******************************************************************************/ +static void send_onoff_request(uint8_t retrans) +{ + struct mesh_generic_request req; + const uint32_t transtime = 0; // using zero transition time by default + sl_status_t sc; + + req.kind = mesh_generic_request_on_off; + req.on_off = switch_pos ? MESH_GENERIC_ON_OFF_STATE_ON : MESH_GENERIC_ON_OFF_STATE_OFF; + + // Increment transaction ID for each request, unless it's a retransmission + if (retrans == 0) { + onoff_trid++; + } + + // Delay for the request is calculated so that the last request will have + // a zero delay and each of the previous request have delay that increases + // in 50 ms steps. For example, when using three on/off requests + // per button press the delays are set as 100, 50, 0 ms + uint16_t delay = (onoff_request_count - 1) * REQ_DELAY_MS; + + sc = mesh_lib_generic_client_publish(MESH_GENERIC_ON_OFF_CLIENT_MODEL_ID, + BTMESH_LIGHTING_CLIENT_MAIN, + onoff_trid, + &req, + transtime, // transition time in ms + delay, + NO_FLAGS // flags + ); + + if (sc == SL_STATUS_OK) { + log_info("CTL On/off request sent, trid = %u, delay = %u" NL, onoff_trid, delay); + } else { + log_btmesh_status_f(sc, "On/Off Client Publish failed" NL); + } + + // Keep track of how many requests has been sent + if (onoff_request_count > 0) { + onoff_request_count--; + } +} + +/***************************************************************************//** + * This function publishes one light lightness request to change the lightness + * level of light(s) in the group. Global variable lightness_level holds + * the latest desired light level. + * + * param[in] retrans Indicates if this is the first request or a retransmission, + * possible values are 0 = first request, 1 = retransmission. + * + * @note This application sends multiple lightness requests for each + * short button press to improve reliability. + * The transaction ID is not incremented in case of a retransmission. + ******************************************************************************/ +static void send_lightness_request(uint8_t retrans) +{ + struct mesh_generic_request req; + sl_status_t sc; + + req.kind = mesh_lighting_request_lightness_actual; + req.lightness = lightness_level; + + // Increment transaction ID for each request, unless it's a retransmission + if (retrans == 0) { + lightness_trid++; + } + + // Delay for the request is calculated so that the last request will have + // a zero delay and each of the previous request have delay that increases + // in 50 ms steps. For example, when using three lightness requests + // per button press the delays are set as 100, 50, 0 ms + uint16_t delay = (lightness_request_count - 1) * REQ_DELAY_MS; + + sc = mesh_lib_generic_client_publish(MESH_LIGHTING_LIGHTNESS_CLIENT_MODEL_ID, + BTMESH_LIGHTING_CLIENT_MAIN, + lightness_trid, + &req, + IMMEDIATE, // transition + delay, + NO_FLAGS // flags + ); + + if (sc == SL_STATUS_OK) { + log_info("Lightness request sent, trid = %u, delay = %u" NL, + lightness_trid, + delay); + } else { + log_btmesh_status_f(sc, "Lightness Client Publish failed" NL); + } + + // Keep track of how many requests has been sent + if (lightness_request_count > 0) { + lightness_request_count--; + } +} + +/******************************************************************************* + * This function change the lightness and sends it to the server. + * + * @param[in] change_percentage Defines lightness percentage change, + * possible values are -100% - + 100%. + * + ******************************************************************************/ +void sl_btmesh_change_lightness(int8_t change_percentage) +{ + // Adjust light brightness, using Light Lightness model + if (change_percentage > 0) { + lightness_percent += change_percentage; + if (lightness_percent > LIGHTNESS_PCT_MAX) { +#if (SL_BTMESH_LIGHT_LIGHTNESS_WRAP_ENABLED_CFG_VAL != 0) + lightness_percent = 0; +#else + lightness_percent = LIGHTNESS_PCT_MAX; +#endif + } + } else { + if (lightness_percent < (-change_percentage)) { +#if (SL_BTMESH_LIGHT_LIGHTNESS_WRAP_ENABLED_CFG_VAL != 0) + lightness_percent = LIGHTNESS_PCT_MAX; +#else + lightness_percent = 0; +#endif + } else { + lightness_percent += change_percentage; + } + } + + if (lightness_percent != 0) { + lightness_percent_switch_on = lightness_percent; + } + sl_btmesh_set_lightness(lightness_percent); +} + +/******************************************************************************* + * This function change the lightness and send it to the server. + * + * @param[in] new_lightness_percentage Defines new lightness value as percentage + * Valid values 0-100 % + * + * + ******************************************************************************/ +void sl_btmesh_set_lightness(uint8_t new_lightness_percentage) +{ + // Adjust light brightness, using Light Lightness model + if (new_lightness_percentage <= LIGHTNESS_PCT_MAX) { + lightness_percent = new_lightness_percentage; + } else { + return; + } + + lightness_level = lightness_percent * 0xFFFF / LIGHTNESS_PCT_MAX; + log("Set lightness to %u %% / level %u K" NL, lightness_percent, lightness_level); + // Request is sent multiple times to improve reliability + lightness_request_count = SL_BTMESH_LIGHT_RETRANSMISSION_COUNT_CFG_VAL; + + send_lightness_request(0); // Send the first request + + // If there are more requests to send, start a repeating soft timer + // to trigger retransmission of the request after 50 ms delay + if (lightness_request_count > 0) { + sl_status_t sc = sl_simple_timer_start(&light_retransmission_timer, + SL_BTMESH_LIGHT_RETRANSMISSION_TIMEOUT_CFG_VAL, + light_retransmission_timer_cb, + NO_CALLBACK_DATA, + true); + app_assert_status_f(sc, "Failed to start periodic timer"); + } +} + +/******************************************************************************* + * This function change the switch position and send it to the server. + * + * @param[in] position Defines switch position change, possible values are: + * - SL_BTMESH_LIGHTING_CLIENT_OFF + * - SL_BTMESH_LIGHTING_CLIENT_ON + * - SL_BTMESH_LIGHTING_CLIENT_TOGGLE + * + ******************************************************************************/ +void sl_btmesh_change_switch_position(uint8_t position) +{ + if (position != SL_BTMESH_LIGHTING_CLIENT_TOGGLE) { + switch_pos = position; + } else { + switch_pos = 1 - switch_pos; // Toggle switch state + } + + // Turns light ON or OFF, using Generic OnOff model + if (switch_pos) { + log("Turn light(s) on" NL); + lightness_percent = lightness_percent_switch_on; + } else { + log("Turn light(s) off" NL); + lightness_percent = 0; + } + // Request is sent 3 times to improve reliability + onoff_request_count = SL_BTMESH_ONOFF_RETRANSMISSION_COUNT_CFG_VAL; + + send_onoff_request(0); // Send the first request + + // If there are more requests to send, start a repeating soft timer + // to trigger retransmission of the request after 50 ms delay + if (onoff_request_count > 0) { + sl_status_t sc = sl_simple_timer_start(&onoff_retransmission_timer, + SL_BTMESH_ONOFF_RETRANSMISSION_TIMEOUT_CFG_VAL, + onoff_retransmission_timer_cb, + NO_CALLBACK_DATA, + true); + app_assert_status_f(sc, "Failed to start periodic timer"); + } +} + +uint16_t sl_btmesh_get_lightness(void) +{ + return lightness_level; +} + +/***************************************************************************//** + * @addtogroup btmesh_light_clnt_tim_cb Timer Callbacks + * @{ + ******************************************************************************/ +/***************************************************************************//** + * Switch position retransmission function + * @param[in] handle pointer to handle instance + * @param[in] data pointer to input data + ******************************************************************************/ +static void onoff_retransmission_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + + send_onoff_request(1); // param 1 indicates that this is a retransmission + // stop retransmission timer if it was the last attempt + if (onoff_request_count == 0) { + sl_status_t sc = sl_simple_timer_stop(&onoff_retransmission_timer); + app_assert_status_f(sc, "Failed to stop periodic timer"); + } +} + +/***************************************************************************//** + * Lightness value retransmission function + * @param[in] handle pointer to handle instance + * @param[in] data pointer to input data + ******************************************************************************/ +static void light_retransmission_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + + send_lightness_request(1); // Retransmit lightness message + // Stop retransmission timer if it was the last attempt + if (lightness_request_count == 0) { + sl_status_t sc = sl_simple_timer_stop(&light_retransmission_timer); + app_assert_status_f(sc, "Failed to stop periodic timer"); + } +} +/** @} (end addtogroup btmesh_light_clnt_tim_cb) */ +/** @} (end addtogroup Lighting) */ diff --git a/app/btmesh/common/btmesh_lighting_client/sl_btmesh_lighting_client.h b/app/btmesh/common/btmesh_lighting_client/sl_btmesh_lighting_client.h new file mode 100644 index 00000000000..0037099fbd6 --- /dev/null +++ b/app/btmesh/common/btmesh_lighting_client/sl_btmesh_lighting_client.h @@ -0,0 +1,75 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_lighting_client.h + ******************************************************************************* + * # 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_BTMESH_LIGHTING_CLIENT_H +#define SL_BTMESH_LIGHTING_CLIENT_H + +#define SL_BTMESH_LIGHTING_CLIENT_OFF 0 ///< Set switch state to off +#define SL_BTMESH_LIGHTING_CLIENT_ON 1 ///< Set switch state to on +#define SL_BTMESH_LIGHTING_CLIENT_TOGGLE 2 ///< Toggle switch state + +/******************************************************************************* + * This function change the lightness and send it to the server. + * + * @param[in] change Defines lightness percentage change, possible values are + * -100% - + 100%. + * + ******************************************************************************/ +void sl_btmesh_change_lightness(int8_t change_percentage); + +/******************************************************************************* + * This function change the lightness and send it to the server. + * + * @param[in] new_lightness_percentage Defines new lightness value as percentage + * Valid values 0-100 % + * + ******************************************************************************/ +void sl_btmesh_set_lightness(uint8_t new_lightness_percentage); + +/***************************************************************************//** + * This function change the switch position and send it to the server. + * + * @param[in] position Defines switch position change, possible values are: + * - SL_BTMESH_LIGHTING_CLIENT_OFF + * - SL_BTMESH_LIGHTING_CLIENT_ON + * - SL_BTMESH_LIGHTING_CLIENT_TOGGLE + * + ******************************************************************************/ +void sl_btmesh_change_switch_position(uint8_t position); + +/***************************************************************************//** + * Get lightness. + * + * This function returns actual lightness to set. + * + ******************************************************************************/ +uint16_t sl_btmesh_get_lightness(void); + +#endif // SL_BTMESH_LIGHTING_CLIENT_H diff --git a/app/btmesh/common/btmesh_lighting_server/btmesh_lighting_server.dcd b/app/btmesh/common/btmesh_lighting_server/btmesh_lighting_server.dcd new file mode 100644 index 00000000000..c726569cdb4 --- /dev/null +++ b/app/btmesh/common/btmesh_lighting_server/btmesh_lighting_server.dcd @@ -0,0 +1,15 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1000", "name":"Generic OnOff Server"}, + {"mid":"0x1002", "name":"Generic Level Server"}, + {"mid":"0x1004", "name":"Generic Default Transition Time Server"}, + {"mid":"0x1006", "name":"Generic Power OnOff Server"}, + {"mid":"0x1007", "name":"Generic Power OnOff Setup Server"}, + {"mid":"0x1300", "name":"Light Lightness Server"}, + {"mid":"0x1301", "name":"Light Lightness Setup Server"} + ] + } +] \ No newline at end of file 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 new file mode 100644 index 00000000000..4b99db69cef --- /dev/null +++ b/app/btmesh/common/btmesh_lighting_server/config/sl_btmesh_lighting_server_config.h @@ -0,0 +1,110 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_LIGHTING_SERVER_CONFIG_H +#define SL_BTMESH_LIGHTING_SERVER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Light Lightness Server configuration + +// Timeout [ms] for saving States of the model to NVM. +// Default: 5000 +// Timeout [ms] for saving States of the model to NVM. +#define SL_BTMESH_LIGHTING_SERVER_NVM_SAVE_TIME_CFG_VAL (5000) + +// PS Key for NVM Page where the States of the Lighting Model are saved. +// Default: 0x4004 +// PS Key for NVM Page where the States of the Lighting Model are saved. +#define SL_BTMESH_LIGHTING_SERVER_PS_KEY_CFG_VAL (0x4004) + +// Periodicity [ms] for updating the PWM duty cycle during a transition. +// Default: 1 +// Periodicity [ms] for updating the PWM duty cycle during a transition. +#define SL_BTMESH_LIGHTING_SERVER_PWM_UPDATE_PERIOD_CFG_VAL (1) + +// for updating the UI with lightness level during a transition. +// Default: 100 +// Periodicity [ms] for updating the UI with lightness level during a transition. +#define SL_BTMESH_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL (100) + +// Timer value for minimum PWM duty cycle. +// Default: 1 +// Timer value for minimum PWM duty cycle. +#define SL_BTMESH_LIGHTING_SERVER_PWM_MINIMUM_BRIGHTNESS_CFG_VAL (1) + +// Timer value for maximum PWM duty cycle. +// Default: 0xFFFE +// Timer value for minimum PWM duty cycle. +#define SL_BTMESH_LIGHTING_SERVER_PWM_MAXIMUM_BRIGHTNESS_CFG_VAL (0xFFFE) + +// Lightness Range + +// Minimum lightness value <0x0001-0xFFFF> +// Determines the minimum non-zero lightness an element is configured to emit. +// Default: 0x0001 +#define SL_BTMESH_LIGHTING_SERVER_LIGHTNESS_MIN_CFG_VAL 0x0001 + +// Maximum lightness value <0x0001-0xFFFF> +// Determines the maximum lightness an element is configured to emit. +// The value of the Light Lightness Range Max state shall be greater than +// or equal to the value of the Light Lightness Range Min state. +// Default: 0xFFFF +#define SL_BTMESH_LIGHTING_SERVER_LIGHTNESS_MAX_CFG_VAL 0xFFFF + +// + +// Enable Logging +// Default: 1 +// Enable / disable Logging for Lighting Server model specific messages for this component. +#define SL_BTMESH_LIGHTING_SERVER_LOGGING_CFG_VAL (1) + +// Enable debug prints for each server state changed event. +// Default: 0 +// Enable debug prints for each server state changed event. +#define SL_BTMESH_LIGHTING_SERVER_DEBUG_PRINTS_FOR_STATE_CHANGE_EVENTS_CFG_VAL (0) + +// + +// + +// <<< end of configuration section >>> + +// The PWM update period shall not be greater than the UI update period +#if (SL_BTMESH_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL) < (SL_BTMESH_LIGHTING_SERVER_PWM_UPDATE_PERIOD_CFG_VAL) +#error "The SL_BTMESH_LIGHTING_SERVER_PWM_UPDATE_PERIOD_CFG_VAL shall be less than SL_BTMESH_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL." +#endif + +// Lightness maximum value cannot be less than minimum value +#if (SL_BTMESH_LIGHTING_SERVER_LIGHTNESS_MAX_CFG_VAL) < (SL_BTMESH_LIGHTING_SERVER_LIGHTNESS_MIN_CFG_VAL) +#error The value of the Lightness Range Max shall be greater than or equal to \ + the value of the Lightness Range Min state. +#endif // (SL_BTMESH_LIGHTING_SERVER_LIGHTNESS_MAX_CFG_VAL) < (SL_BTMESH_LIGHTING_SERVER_LIGHTNESS_MIN_CFG_VAL) + +#endif // SL_BTMESH_LIGHTING_SERVER_CONFIG_H 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 new file mode 100644 index 00000000000..03a8e46b3a4 --- /dev/null +++ b/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_level_transition_handler.c @@ -0,0 +1,236 @@ +/***************************************************************************//** + * @file + * @brief Lighting Level Transition Handler Module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "em_common.h" +#include "sl_status.h" + +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#include "sl_btmesh_lighting_level_transition_handler.h" +#include "sl_btmesh_lighting_server_config.h" + +/***************************************************************************//** + * @addtogroup Lighting Level Transition Handler + * @{ + ******************************************************************************/ + +/// No flags used for message +#define NO_FLAGS 0 +/// Immediate transition time is 0 seconds +#define IMMEDIATE 0 +/// Callback has not parameters +#define NO_CALLBACK_DATA (void *)NULL +/// High Priority +#define HIGH_PRIORITY 0 + +/// current lightness level +static uint16_t current_level; +/// starting level of lightness transition +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; +/// time elapsed from lightness transition start +static uint32_t level_transtime_elapsed; +/// non-zero if lightness transition is active +static uint8_t level_transitioning; + +static sl_simple_timer_t transition_timer; + +// Timer callbacks +static void transition_timer_cb(sl_simple_timer_t *handle, + void *data); + +//////////////////////////////////////////////////////////////////////////////// +// Lighting Callbacks // +//////////////////////////////////////////////////////////////////////////////// + +SL_WEAK void sl_btmesh_lighting_level_pwm_cb(uint16_t level) +{ + (void)level; +} + +SL_WEAK void sl_btmesh_lighting_server_on_ui_update(uint16_t lightness_level) +{ + (void) lightness_level; +} + +/***************************************************************************//** + * Timer Callback for LEDs transitions. + ******************************************************************************/ +static void transition_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + + // 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_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL; + + if (!level_transitioning) { + sl_status_t sc = sl_simple_timer_stop(&transition_timer); + app_assert_status_f(sc, "Failed to stop Periodic Level Transition Timer"); + return; + } else { + level_transtime_elapsed++; + + if (level_transtime_elapsed >= level_transtime_ticks) { + // transition complete + level_transitioning = 0; + current_level = target_level; + + // Set the variable to UI update period in order to trigger a UI update + // at the beginning of the next transition. + time_elapsed_since_ui_update = SL_BTMESH_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL; + + // 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); + } 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; + } else { + current_level = start_level + - (start_level - target_level) + * (uint64_t)level_transtime_elapsed + / level_transtime_ticks; + } + + // When transition is ongoing generate an event to application once every + // SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL ms because the event is used to update display + // status and therefore the rate should not be too high + time_elapsed_since_ui_update += SL_BTMESH_LIGHTING_SERVER_PWM_UPDATE_PERIOD_CFG_VAL; + + 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_lighting_level_pwm_cb(current_level); +} + +/******************************************************************************* + * Set LED lightness level in given transition time. + * + * @param[in] level Lightness level. + * @param[in] transition_ms Transition time in milliseconds. + ******************************************************************************/ +void sl_btmesh_lighting_set_level(uint16_t level, uint32_t transition_ms) +{ + if (transition_ms == 0) { + current_level = level; + + sl_btmesh_lighting_level_pwm_cb(current_level); + + /* if a transition was in progress, cancel it */ + if (level_transitioning) { + level_transitioning = 0; + sl_status_t sc = sl_simple_timer_stop(&transition_timer); + app_assert_status_f(sc, "Failed to stop Periodic Level Transition Timer"); + } + sl_btmesh_lighting_server_on_ui_update(current_level); + return; + } + + level_transtime_ticks = transition_ms; + + start_level = current_level; + target_level = level; + + level_transtime_elapsed = 0; + level_transitioning = 1; + + // enabling timer IRQ -> the PWM level is adjusted in timer interrupt + // gradually until target level is reached. + sl_status_t sc = sl_simple_timer_start(&transition_timer, + SL_BTMESH_LIGHTING_SERVER_PWM_UPDATE_PERIOD_CFG_VAL, + transition_timer_cb, + NO_CALLBACK_DATA, + true); + app_assert_status_f(sc, "Failed to start periodic Transition Timer"); + + return; +} + +/******************************************************************************* + * Set LEDs state. Possible states are defined in macros. + * + * @param[in] state State to set. + ******************************************************************************/ +void sl_btmesh_set_state(int state) +{ + static int toggle = 0; + + switch (state) { + case LED_STATE_OFF: + sl_btmesh_lighting_set_level(SL_BTMESH_LIGHTING_SERVER_PWM_MINIMUM_BRIGHTNESS_CFG_VAL, 0); + break; + case LED_STATE_ON: + sl_btmesh_lighting_set_level(SL_BTMESH_LIGHTING_SERVER_PWM_MAXIMUM_BRIGHTNESS_CFG_VAL, 0); + break; + case LED_STATE_PROV: + if (++toggle % 2) { + sl_btmesh_lighting_set_level(SL_BTMESH_LIGHTING_SERVER_PWM_MINIMUM_BRIGHTNESS_CFG_VAL, 0); + } else { + sl_btmesh_lighting_set_level(SL_BTMESH_LIGHTING_SERVER_PWM_MAXIMUM_BRIGHTNESS_CFG_VAL, 0); + } + break; + + default: + break; + } +} + +/******************************************************************************* + * Function for retrieving actual lightness level. + * + * @return Actual lightness level. + ******************************************************************************/ +uint16_t sl_btmesh_get_level(void) +{ + return(current_level); +} + +/** @} (end addtogroup Lighting Level Transition Handler) */ diff --git a/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_level_transition_handler.h b/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_level_transition_handler.h new file mode 100644 index 00000000000..6d5d9933f71 --- /dev/null +++ b/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_level_transition_handler.h @@ -0,0 +1,80 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_lighting_level_transition_handler.h + ******************************************************************************* + * # 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_BTMESH_LIGHTING_LEVEL_TRANSITION_H +#define SL_BTMESH_LIGHTING_LEVEL_TRANSITION_H + +#define LED_STATE_OFF 0 /**< light off (both LEDs turned off) */ +#define LED_STATE_ON 1 /**< light on (both LEDs turned on) */ +#define LED_STATE_PROV 2 /**< provisioning (LEDs blinking) */ + +/******************************************************************************* + * Set LED lightness level in given transition time. + * + * @param[in] level Lightness level. + * @param[in] transition_ms Transition time in milliseconds. + ******************************************************************************/ +void sl_btmesh_lighting_set_level(uint16_t level, uint32_t transition_ms); + +/******************************************************************************* + * Set LEDs state. Possible states are defined in macros. + * + * @param[in] state State to set. + ******************************************************************************/ +void sl_btmesh_set_state(int state); + +/******************************************************************************* + * Function for retrieving actual lightness level. + * + * @return Actual lightness level. + ******************************************************************************/ +uint16_t sl_btmesh_get_level(void); + +/******************************************************************************* + * Callback for setting Light Lightness by PWM level (0x0001 - FFFE) + * + * @return Desired lightness PWM level. + ******************************************************************************/ +void sl_btmesh_lighting_level_pwm_cb(uint16_t level); + +/***************************************************************************//** + * Called when the UI shall be updated with the changed state of + * lightning server during a transition. The rate of this callback can be + * controlled by changing the SL_BTMESH_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] lightness_level lightness level (0x0001 - FFFE) + ******************************************************************************/ +void sl_btmesh_lighting_server_on_ui_update(uint16_t lightness_level); + +#endif // SL_BTMESH_LIGHTING_LEVEL_TRANSITION_H 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 new file mode 100644 index 00000000000..519fbb3f375 --- /dev/null +++ b/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_server.c @@ -0,0 +1,2773 @@ +/***************************************************************************//** + * @file + * @brief Lighting Server module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +// C Standard Library headers +#include +#include +#include + +#include "em_common.h" +#include "sl_status.h" +#include "sl_btmesh_api.h" +#include "sl_bt_api.h" +#include "sl_btmesh_dcd.h" + +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +// Bluetooth stack headers +#include "sl_btmesh_generic_model_capi_types.h" +#include "sl_btmesh_lib.h" + +#include "sl_btmesh_lighting_server.h" +#include "sl_btmesh_lighting_server_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup Lighting Server + * @{ + ******************************************************************************/ + +#ifdef SL_CATALOG_BTMESH_SCENE_SERVER_PRESENT +#define scene_server_reset_register(elem_index) \ + scene_server_reset_register_impl(elem_index) +#else +#define scene_server_reset_register(elem_index) +#endif + +/// No flags used for message +#define NO_FLAGS 0 +/// Immediate transition time is 0 seconds +#define IMMEDIATE 0 +/// Callback has no parameters +#define NO_CALLBACK_DATA (void *)NULL +/// High Priority +#define HIGH_PRIORITY 0 +/// Values greater than max 37200000 are treated as unknown remaining time +#define UNKNOWN_REMAINING_TIME 40000000 + +/** + * @brief Default value of Lightness Last + * + * Stores the last known non-zero value of lightness actual. + */ +#define LIGHTNESS_LAST_DEFAULT 0xFFFF +/** + * @brief Default value of Lightness Default + * + * Representing a default lightness level for lightness actual. + */ +#define LIGHTNESS_DEFAULT_DEFAULT 0x0000 + +/// Lightbulb state +static PACKSTRUCT(struct lightbulb_state { + // On/Off Server state + uint8_t onoff_current; /**< Current generic on/off value */ + uint8_t onoff_target; /**< Target generic on/off value */ + + // Transition Time Server state + uint8_t transtime; /**< Transition time */ + + // On Power Up Server state + uint8_t onpowerup; /**< On Power Up value */ + + // Lightness server + uint16_t lightness_current; /**< Current lightness value */ + uint16_t lightness_target; /**< Target lightness value */ + uint16_t lightness_last; /**< Last lightness value */ + uint16_t lightness_default; /**< Default lightness value */ + uint16_t lightness_min; /**< Minimum lightness value */ + uint16_t lightness_max; /**< Maximum lightness value */ + + // Primary Generic Level + int16_t pri_level_current; /**< Current primary generic level value */ + int16_t pri_level_target; /**< Target primary generic level value */ +}) lightbulb_state; + +/// copy of transition delay parameter, needed for delayed on/off request +static uint32_t delayed_onoff_trans = 0; +/// copy of transition delay parameter, needed for delayed lightness request +static uint32_t delayed_lightness_trans = 0; +/// copy of lightness request kind, needed for delayed lightness request +static mesh_generic_state_t lightness_kind = mesh_generic_state_last; +/// copy of transition delay parameter, needed for +/// delayed primary generic level request +static uint32_t delayed_pri_level_trans = 0; +/// copy of generic request kind, needed for delayed primary generic request +static mesh_generic_request_t pri_level_request_kind = mesh_generic_request_level; +/// copy of move transition parameter for primary generic request +static uint32_t move_pri_level_trans = 0; +/// copy of move delta parameter for primary generic request +static int16_t move_pri_level_delta = 0; + +static void lightbulb_state_changed(void); +static void lightbulb_state_validate_and_correct(void); + +static sl_status_t generic_server_respond(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms, + uint8_t response_flags); + +static sl_status_t generic_server_update(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms); + +static sl_status_t generic_server_publish(uint16_t model_id, + uint16_t element_index, + mesh_generic_state_t kind); + +static void generic_server_register_handler(uint16_t model_id, + uint16_t elem_index, + mesh_lib_generic_server_client_request_cb cb, + mesh_lib_generic_server_change_cb ch, + mesh_lib_generic_server_recall_cb recall); + +#ifdef SL_CATALOG_BTMESH_SCENE_SERVER_PRESENT +static void scene_server_reset_register_impl(uint16_t elem_index); +#endif + +// Timer handles +static sl_simple_timer_t lighting_pri_level_move_timer; +static sl_simple_timer_t lighting_transition_complete_timer; +static sl_simple_timer_t lighting_level_transition_complete_timer; +static sl_simple_timer_t lighting_onoff_transition_complete_timer; +static sl_simple_timer_t lighting_delayed_pri_level_timer; +static sl_simple_timer_t lighting_delayed_lightness_request_timer; +static sl_simple_timer_t lighting_delayed_onoff_request_timer; +static sl_simple_timer_t lighting_state_store_timer; + +// Timer callbacks +static void lighting_pri_level_move_timer_cb(sl_simple_timer_t *handle, + void *data); +static void lighting_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data); +static void lighting_level_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data); +static void lighting_onoff_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data); +static void lighting_delayed_pri_level_timer_cb(sl_simple_timer_t *handle, + void *data); +static void lighting_delayed_lightness_request_timer_cb(sl_simple_timer_t *handle, + void *data); +static void lighting_delayed_onoff_request_timer_cb(sl_simple_timer_t *handle, + void *data); +static void lighting_state_store_timer_cb(sl_simple_timer_t *handle, + void *data); + +/******************************************************************************* + * Get current lightness value + * + * @return Current lightness + ******************************************************************************/ +uint16_t sl_btmesh_get_lightness_current(void) +{ + return lightbulb_state.lightness_current; +} + +/******************************************************************************* + * Set current lightness value + * + * @param[in] lightness Current lightness + ******************************************************************************/ +void sl_btmesh_set_lightness_current(uint16_t lightness) +{ + if (lightness != lightbulb_state.lightness_current) { + lightbulb_state.lightness_current = lightness; + lightbulb_state_changed(); + } +} + +/******************************************************************************* + * Get target lightness value + * + * @return Target lightness + ******************************************************************************/ +uint16_t sl_btmesh_get_lightness_target(void) +{ + return lightbulb_state.lightness_target; +} + +/******************************************************************************* + * Set target lightness value + * + * @param[in] lightness Target lightness + ******************************************************************************/ +void sl_btmesh_set_lightness_target(uint16_t lightness) +{ + if (lightness != lightbulb_state.lightness_target) { + lightbulb_state.lightness_target = lightness; + lightbulb_state_changed(); + } +} + +/******************************************************************************* + * Get default lightness value + * + * @return Default lightness + ******************************************************************************/ +uint16_t sl_btmesh_get_lightness_default(void) +{ + return lightbulb_state.lightness_default; +} + +/******************************************************************************* + * Set default lightness value + * + * @param[in] lightness Default lightness + ******************************************************************************/ +void sl_btmesh_set_lightness_default(uint16_t lightness) +{ + if (lightness != lightbulb_state.lightness_default) { + lightbulb_state.lightness_default = lightness; + lightbulb_state_changed(); + } +} + +/******************************************************************************* + * Set last lightness value + * + * @param[in] lightness Last lightness + ******************************************************************************/ +void sl_btmesh_set_lightness_last(uint16_t lightness) +{ + if (lightness != lightbulb_state.lightness_last) { + lightbulb_state.lightness_last = lightness; + lightbulb_state_changed(); + } +} + +/******************************************************************************* + * Gets default lightness value on power up + * + * @return Default lightness on power up + ******************************************************************************/ +uint16_t sl_btmesh_get_lightness_onpowerup(void) +{ + return lightbulb_state.onpowerup; +} + +#if defined(SL_BTMESH_LIGHTING_SERVER_DEBUG_PRINTS_FOR_STATE_CHANGE_EVENTS_CFG_VAL) \ + && SL_BTMESH_LIGHTING_SERVER_DEBUG_PRINTS_FOR_STATE_CHANGE_EVENTS_CFG_VAL +/***************************************************************************//** + * This function prints debug information for mesh server state change event. + * + * @param[in] evt Pointer to mesh_lib_generic_server_state_changed event. + ******************************************************************************/ +static void server_state_changed(sl_btmesh_evt_generic_server_state_changed_t *evt) +{ + int i; + + log_info("State changed: "); + log_append_info("Model ID %4.4x, type %2.2x ", evt->model_id, evt->type); + for (i = 0; i < evt->parameters.len; i++) { + log_append_info("%2.2x ", evt->parameters.data[i]); + } + log_append_info(NL); +} +#endif // LOG_ENABLE + +/******************************************************************************* + * Handle ligthing server events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_lighting_server_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_lighting_server_init(); + break; + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_lighting_server_init(); + } + break; + case sl_btmesh_evt_node_reset_id: + sl_bt_nvm_erase(SL_BTMESH_LIGHTING_SERVER_PS_KEY_CFG_VAL); + break; + case sl_btmesh_evt_generic_server_state_changed_id: +#if defined(SL_BTMESH_LIGHTING_SERVER_DEBUG_PRINTS_FOR_STATE_CHANGE_EVENTS_CFG_VAL) \ + && SL_BTMESH_LIGHTING_SERVER_DEBUG_PRINTS_FOR_STATE_CHANGE_EVENTS_CFG_VAL + server_state_changed(&(evt->data.evt_generic_server_state_changed)); +#endif // LOG_ENABLE + break; + } +} + +/***************************************************************************//** + * This function convert mesh format of default transition time to milliseconds. + * + * @return Default transition time in milliseconds. + ******************************************************************************/ +uint32_t sl_btmesh_get_default_transition_time(void) +{ + return mesh_lib_transition_time_to_ms(lightbulb_state.transtime); +} + +/***************************************************************************//** + * \defgroup GenericOnOff + * \brief Generic OnOff Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup GenericOnOff + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to generic on/off request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t onoff_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_on_off; + current.on_off.on = lightbulb_state.onoff_current; + + target.kind = mesh_generic_state_on_off; + target.on_off.on = lightbulb_state.onoff_target; + + return generic_server_respond(MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + 0x00); +} + +/***************************************************************************//** + * Update generic on/off state. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t onoff_update(uint16_t element_index, uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_on_off; + current.on_off.on = lightbulb_state.onoff_current; + + target.kind = mesh_generic_state_on_off; + target.on_off.on = lightbulb_state.onoff_target; + + return generic_server_update(MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); +} + +/***************************************************************************//** + * Update generic on/off state and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t onoff_update_and_publish(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t e; + + e = onoff_update(element_index, remaining_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + element_index, + mesh_generic_state_on_off); + } + + return e; +} + +/***************************************************************************//** + * This function process the requests for the generic on/off model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void onoff_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + + log_info("ON/OFF request: requested state=<%s>, transition=%lu, delay=%u" NL, + request->on_off ? "ON" : "OFF", transition_ms, delay_ms); + + if (lightbulb_state.onoff_current == request->on_off) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Turning light bulb <%s>" NL, request->on_off ? "ON" : "OFF"); + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + lightbulb_state.onoff_current = request->on_off; + lightbulb_state.onoff_target = request->on_off; + if (lightbulb_state.onoff_current == MESH_GENERIC_ON_OFF_STATE_OFF) { + lightbulb_state.lightness_target = 0; + } else { + // restore last brightness + lightbulb_state.lightness_target = lightbulb_state.lightness_last; + } + sl_btmesh_lighting_set_level(lightbulb_state.lightness_target, IMMEDIATE); + } else if (delay_ms > 0) { + // a delay has been specified for the light change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + lightbulb_state.onoff_target = request->on_off; + sl_status_t sc = sl_simple_timer_start(&lighting_delayed_onoff_request_timer, + delay_ms, + lighting_delayed_onoff_request_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed ON/OFF Request timer"); + // store transition parameter for later use + delayed_onoff_trans = transition_ms; + } else { + // no delay but transition time has been set. + lightbulb_state.onoff_target = request->on_off; + if (lightbulb_state.onoff_target == MESH_GENERIC_ON_OFF_STATE_ON) { + lightbulb_state.onoff_current = MESH_GENERIC_ON_OFF_STATE_ON; + } + + onoff_update(element_index, transition_ms); + + if (request->on_off == MESH_GENERIC_ON_OFF_STATE_OFF) { + lightbulb_state.lightness_target = 0; + } else { + // restore last brightness + lightbulb_state.lightness_target = lightbulb_state.lightness_last; + } + sl_btmesh_lighting_set_level(lightbulb_state.lightness_target, + transition_ms); + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&lighting_onoff_transition_complete_timer, + transition_ms, + lighting_onoff_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start ON/OFF Transition Complete timer"); + } + lightbulb_state_changed(); + + // State has changed, so the current scene number is reset + scene_server_reset_register(element_index); + } + + uint32_t remaining_ms = delay_ms + transition_ms; + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + onoff_response(element_index, client_addr, appkey_index, remaining_ms); + } + onoff_update_and_publish(element_index, remaining_ms); + + // publish to bound states + generic_server_publish(MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + element_index, + mesh_lighting_state_lightness_actual); +} + +/***************************************************************************//** + * This function is a handler for generic on/off change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void onoff_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (current->on_off.on != lightbulb_state.onoff_current) { + log_info("ON/OFF state changed %u to %u" NL, + lightbulb_state.onoff_current, + current->on_off.on); + + lightbulb_state.onoff_current = current->on_off.on; + lightbulb_state_changed(); + } else { + log_info("Dummy ON/OFF change - same state as before" NL); + } +} + +/***************************************************************************//** + * This function is a handler for generic on/off recall event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void onoff_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + + log_info("Generic ON/OFF recall" NL); + if (transition_ms == IMMEDIATE) { + lightbulb_state.onoff_target = current->on_off.on; + } else { + lightbulb_state.onoff_target = target->on_off.on; + } + + if (lightbulb_state.onoff_current == lightbulb_state.onoff_target) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall ON/OFF state <%s> with transition=%lu ms" NL, + lightbulb_state.onoff_target ? "ON" : "OFF", + transition_ms); + + if (transition_ms == IMMEDIATE) { + lightbulb_state.onoff_current = current->on_off.on; + } else { + if (lightbulb_state.onoff_target == MESH_GENERIC_ON_OFF_STATE_ON) { + lightbulb_state.onoff_current = MESH_GENERIC_ON_OFF_STATE_ON; + } + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&lighting_onoff_transition_complete_timer, + transition_ms, + lighting_onoff_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start ON/OFF Transition Complete timer"); + } + lightbulb_state_changed(); + } + + onoff_update_and_publish(element_index, transition_ms); +} + +/***************************************************************************//** + * This function is called when a light on/off request + * with non-zero transition time has completed. + ******************************************************************************/ +static void onoff_transition_complete(void) +{ + // transition done -> set state, update and publish + lightbulb_state.onoff_current = lightbulb_state.onoff_target; + + log_info("Transition complete. New state is %s" NL, + lightbulb_state.onoff_current ? "ON" : "OFF"); + + lightbulb_state_changed(); + onoff_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN, IMMEDIATE); +} + +/***************************************************************************//** + * This function is called when delay for light on/off request has completed. + ******************************************************************************/ +static void delayed_onoff_request(void) +{ + log_info("Starting delayed ON/OFF request: %u -> %u, %lu ms" NL, + lightbulb_state.onoff_current, + lightbulb_state.onoff_target, + delayed_onoff_trans); + + if (delayed_onoff_trans == 0) { + // no transition delay, update state immediately + + lightbulb_state.onoff_current = lightbulb_state.onoff_target; + if (lightbulb_state.onoff_current == MESH_GENERIC_ON_OFF_STATE_OFF) { + sl_btmesh_set_state(LED_STATE_OFF); + } else { + // restore last brightness level + sl_btmesh_lighting_set_level(lightbulb_state.lightness_last, IMMEDIATE); + lightbulb_state.lightness_current = lightbulb_state.lightness_last; + } + + lightbulb_state_changed(); + + onoff_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN, + delayed_onoff_trans); + } else { + if (lightbulb_state.onoff_target == MESH_GENERIC_ON_OFF_STATE_OFF) { + lightbulb_state.lightness_target = 0; + } else { + // restore last brightness level, with transition delay + lightbulb_state.lightness_target = lightbulb_state.lightness_last; + lightbulb_state.onoff_current = MESH_GENERIC_ON_OFF_STATE_ON; + + onoff_update(BTMESH_LIGHTING_SERVER_MAIN, delayed_onoff_trans); + } + sl_btmesh_lighting_set_level(lightbulb_state.lightness_target, + delayed_onoff_trans); + + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&lighting_onoff_transition_complete_timer, + delayed_onoff_trans, + lighting_onoff_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start ON/OFF Transition Complete timer"); + } +} + +/** @} (end addtogroup GenericOnOff) */ + +/***************************************************************************//** + * \defgroup GenericPowerOnOff + * \brief Generic Power OnOff Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup GenericPowerOnOff + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to generic power on/off request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t power_onoff_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index) +{ + struct mesh_generic_state current; + current.kind = mesh_generic_state_on_power_up; + current.on_power_up.on_power_up = lightbulb_state.onpowerup; + + return generic_server_respond(MESH_GENERIC_POWER_ON_OFF_SETUP_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + NULL, + 0, + 0x00); +} + +/***************************************************************************//** + * Update generic power on/off state. + * + * @param[in] element_index Server model element index. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t power_onoff_update(uint16_t element_index) +{ + struct mesh_generic_state current; + current.kind = mesh_generic_state_on_power_up; + current.on_power_up.on_power_up = lightbulb_state.onpowerup; + + return generic_server_update(MESH_GENERIC_POWER_ON_OFF_SERVER_MODEL_ID, + element_index, + ¤t, + NULL, + 0); +} + +/***************************************************************************//** + * Update generic power on/off state and publish model state to the network. + * + * @param[in] element_index Server model element index. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t power_onoff_update_and_publish(uint16_t element_index) +{ + sl_status_t e; + + e = power_onoff_update(element_index); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_GENERIC_POWER_ON_OFF_SERVER_MODEL_ID, + element_index, + mesh_generic_state_on_power_up); + } + + return e; +} + +/***************************************************************************//** + * This function process the requests for the generic power on/off model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void power_onoff_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + (void)transition_ms; + (void)delay_ms; + + log_info("ON POWER UP request received; state=<%s>" NL, + lightbulb_state.onpowerup == 0 ? "OFF" + : lightbulb_state.onpowerup == 1 ? "ON" + : "RESTORE"); + + if (lightbulb_state.onpowerup == request->on_power_up) { + log_info("Request for current state received; no op" NL); + } else { + log("Setting onpowerup to <%s>" NL, + request->on_power_up == 0 ? "OFF" + : request->on_power_up == 1 ? "ON" + : "RESTORE"); + lightbulb_state.onpowerup = request->on_power_up; + lightbulb_state_changed(); + } + + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + power_onoff_response(element_index, client_addr, appkey_index); + } + power_onoff_update_and_publish(element_index); +} + +/***************************************************************************//** + * This function is a handler for generic power on/off change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void power_onoff_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)current; + (void)target; + (void)remaining_ms; + // TODO +} + +/** @} (end addtogroup GenericPowerOnOff) */ + +/***************************************************************************//** + * \defgroup GenericTransitionTime + * \brief Generic Default Transition Time Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup GenericTransitionTime + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to generic default transition time request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t transtime_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index) +{ + struct mesh_generic_state current; + current.kind = mesh_generic_state_transition_time; + current.transition_time.time = lightbulb_state.transtime; + + return generic_server_respond(MESH_GENERIC_TRANSITION_TIME_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + NULL, + 0, + 0x00); +} + +/***************************************************************************//** + * Update generic default transition time state. + * + * @param[in] element_index Server model element index. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t transtime_update(uint16_t element_index) +{ + struct mesh_generic_state current; + current.kind = mesh_generic_state_transition_time; + current.transition_time.time = lightbulb_state.transtime; + + return generic_server_update(MESH_GENERIC_TRANSITION_TIME_SERVER_MODEL_ID, + element_index, + ¤t, + NULL, + 0); +} + +/***************************************************************************//** + * Update generic default transition time state and publish model state + * to the network. + * + * @param[in] element_index Server model element index. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t transtime_update_and_publish(uint16_t element_index) +{ + sl_status_t e; + + e = transtime_update(element_index); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_GENERIC_TRANSITION_TIME_SERVER_MODEL_ID, + element_index, + mesh_generic_state_transition_time); + } + + return e; +} + +/***************************************************************************//** + * This function process the requests for the generic default transition time + * model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void transtime_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + (void)transition_ms; + (void)delay_ms; + + log_info("Transition time request received; state=<0x%x>" NL, + lightbulb_state.transtime); + + if (lightbulb_state.transtime == request->transition_time) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Setting transtime to <0x%x>" NL, request->transition_time); + lightbulb_state.transtime = request->transition_time; + lightbulb_state_changed(); + } + + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + transtime_response(element_index, client_addr, appkey_index); + } + transtime_update_and_publish(element_index); +} + +/***************************************************************************//** + * This function is a handler for generic default transition time change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void transtime_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)current; + (void)target; + (void)remaining_ms; + // TODO +} + +/** @} (end addtogroup GenericTransitionTime) */ + +/****************************************************************************//** + * \defgroup LightLightness + * \brief Light Lightness Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup LightLightness + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Convert from lightness actual to lightness linear value. + * + * @param[in] actual Actual value that is converted. + * + * @return Linear value. + ******************************************************************************/ +static uint16_t actual2linear(uint16_t actual) +{ + uint32_t linear = ((uint32_t)actual * actual + 65534) / 65535; + return (uint16_t)linear; +} + +/***************************************************************************//** + * Convert from lightness linear to lightness actual value. + * + * @param[in] linear Linear value that is converted. + * + * @return Actual value. + ******************************************************************************/ +static uint16_t linear2actual(uint16_t linear) +{ + uint32_t actual = (uint32_t)sqrt(65535 * (uint32_t)linear); + return (uint16_t)actual; +} + +/***************************************************************************//** + * Response to light lightness request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * @param[in] kind Type of state used in light lightness response. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightness_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms, + mesh_generic_state_t kind) +{ + struct mesh_generic_state current, target; + + current.kind = kind; + if (kind == mesh_lighting_state_lightness_actual) { + current.lightness.level = lightbulb_state.lightness_current; + } else { + current.lightness.level = actual2linear(lightbulb_state.lightness_current); + } + + target.kind = kind; + if (kind == mesh_lighting_state_lightness_actual) { + target.lightness.level = lightbulb_state.lightness_target; + } else { + target.lightness.level = actual2linear(lightbulb_state.lightness_target); + } + + return generic_server_respond(MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + 0x00); +} + +/***************************************************************************//** + * Update light lightness state. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * @param[in] kind Type of state used in light lightness update. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightness_update(uint16_t element_index, + uint32_t remaining_ms, + mesh_generic_state_t kind) +{ + struct mesh_generic_state current, target; + + current.kind = kind; + if (kind == mesh_lighting_state_lightness_actual) { + current.lightness.level = lightbulb_state.lightness_current; + } else { + current.lightness.level = actual2linear(lightbulb_state.lightness_current); + } + + target.kind = kind; + if (kind == mesh_lighting_state_lightness_actual) { + target.lightness.level = lightbulb_state.lightness_target; + } else { + target.lightness.level = actual2linear(lightbulb_state.lightness_target); + } + + return generic_server_update(MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); +} + +/***************************************************************************//** + * Update light lightness state and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * @param[in] kind Type of state used in light lightness update and publish. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightness_update_and_publish(uint16_t element_index, + uint32_t remaining_ms, + mesh_generic_state_t kind) +{ + sl_status_t e; + + e = lightness_update(element_index, remaining_ms, kind); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + element_index, + kind); + } + + return e; +} + +/***************************************************************************//** + * This function process the requests for the light lightness model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void lightness_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + + uint16_t actual_request = 0; + + switch (request->kind) { + case mesh_lighting_request_lightness_actual: + lightness_kind = mesh_lighting_state_lightness_actual; + actual_request = request->lightness; + break; + + case mesh_lighting_request_lightness_linear: + lightness_kind = mesh_lighting_state_lightness_linear; + actual_request = linear2actual(request->lightness); + break; + + default: + break; + } + + log_info("lightness_request: level=%u, transition=%lu, delay=%u" NL, + actual_request, transition_ms, delay_ms); + + if (lightbulb_state.lightness_current == actual_request) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Setting lightness to <%u>" NL, actual_request); + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + lightbulb_state.lightness_current = actual_request; + lightbulb_state.lightness_target = actual_request; + if (actual_request != 0) { + lightbulb_state.lightness_last = actual_request; + } + + // update LED PWM duty cycle + sl_btmesh_lighting_set_level(lightbulb_state.lightness_current, + IMMEDIATE); + } else if (delay_ms > 0) { + // a delay has been specified for the light change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + lightbulb_state.lightness_target = actual_request; + sl_status_t sc = sl_simple_timer_start(&lighting_delayed_lightness_request_timer, + delay_ms, + lighting_delayed_lightness_request_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Lightness Request timer"); + // store transition parameter for later use + delayed_lightness_trans = transition_ms; + } else { + // no delay but transition time has been set. + lightbulb_state.lightness_target = actual_request; + sl_btmesh_lighting_set_level(lightbulb_state.lightness_target, + transition_ms); + + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&lighting_transition_complete_timer, + transition_ms, + lighting_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Lighting Transition Complete timer"); + } + lightbulb_state_changed(); + + // State has changed, so the current scene number is reset + scene_server_reset_register(element_index); + } + + uint32_t remaining_ms = delay_ms + transition_ms; + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + lightness_response(element_index, + client_addr, + appkey_index, + remaining_ms, + lightness_kind); + } + + lightness_update_and_publish(element_index, remaining_ms, lightness_kind); + + // publish to bound states + if (lightness_kind == mesh_lighting_state_lightness_actual) { + generic_server_publish(MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + element_index, + mesh_lighting_state_lightness_linear); + } else { + generic_server_publish(MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + element_index, + mesh_lighting_state_lightness_actual); + } + generic_server_publish(MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + element_index, + mesh_generic_state_on_off); + + generic_server_publish(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + mesh_generic_state_level); + +#ifdef SL_CATALOG_BTMESH_CTL_SERVER_PRESENT + generic_server_publish(MESH_LIGHTING_CTL_SERVER_MODEL_ID, + element_index, + mesh_lighting_state_ctl); +#endif + +#ifdef SL_CATALOG_BTMESH_HSL_SERVER_PRESENT + generic_server_publish(MESH_LIGHTING_HSL_SERVER_MODEL_ID, + element_index, + mesh_lighting_state_hsl); +#endif +} + +/***************************************************************************//** + * This function is a handler for light lightness change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void lightness_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (current->kind != mesh_lighting_state_lightness_actual) { + // if kind is not 'actual' then just report the change here, no change to light state + log_info("lightness_change, kind %u, value %u" NL, + current->kind, + current->lightness.level); + return; + } + + if (lightbulb_state.lightness_current != current->lightness.level) { + log_info("Lightness update: from %u to %u" NL, + lightbulb_state.lightness_current, + current->lightness.level); + lightbulb_state.lightness_current = current->lightness.level; + lightbulb_state_changed(); + } else { + log_info("Lightness update -same value (%d)" NL, + lightbulb_state.lightness_current); + } +} + +/***************************************************************************//** + * This function is a handler for light lightness recall event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void lightness_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + + log_info("Light Lightness recall" NL); + if (current->kind != mesh_lighting_state_lightness_actual) { + return; + } + + if (transition_ms == IMMEDIATE) { + lightbulb_state.lightness_target = current->lightness.level; + } else { + lightbulb_state.lightness_target = target->lightness.level; + } + + if (lightbulb_state.lightness_current == lightbulb_state.lightness_target) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall lightness to %u with transition=%lu ms" NL, + lightbulb_state.lightness_target, + transition_ms); + sl_btmesh_lighting_set_level(lightbulb_state.lightness_target, + transition_ms); + + if (transition_ms == IMMEDIATE) { + lightbulb_state.lightness_current = current->lightness.level; + } else { + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&lighting_transition_complete_timer, + transition_ms, + lighting_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Lighting Transition Complete timer"); + } + lightbulb_state_changed(); + } + + lightness_update_and_publish(element_index, + transition_ms, + mesh_lighting_state_lightness_actual); +} + +/***************************************************************************//** + * This function is called when a light lightness request + * with non-zero transition time has completed. + ******************************************************************************/ +static void lightness_transition_complete(void) +{ + // transition done -> set state, update and publish + lightbulb_state.lightness_current = lightbulb_state.lightness_target; + if (lightbulb_state.lightness_target != 0) { + lightbulb_state.lightness_last = lightbulb_state.lightness_target; + } + + log_info("Transition complete. New level is %u" NL, + lightbulb_state.lightness_current); + + lightbulb_state_changed(); + lightness_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN, + IMMEDIATE, + lightness_kind); +} + +/***************************************************************************//** + * This function is called when delay for light lightness request has completed. + ******************************************************************************/ +static void delayed_lightness_request(void) +{ + log_info("Starting delayed lightness request: level %u -> %u, %lu ms" NL, + lightbulb_state.lightness_current, + lightbulb_state.lightness_target, + delayed_lightness_trans); + + sl_btmesh_lighting_set_level(lightbulb_state.lightness_target, + delayed_lightness_trans); + + if (delayed_lightness_trans == 0) { + // no transition delay, update state immediately + lightbulb_state.lightness_current = lightbulb_state.lightness_target; + if (lightbulb_state.lightness_target != 0) { + lightbulb_state.lightness_last = lightbulb_state.lightness_target; + } + + lightbulb_state_changed(); + lightness_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN, + delayed_lightness_trans, + lightness_kind); + } else { + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&lighting_transition_complete_timer, + delayed_lightness_trans, + lighting_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Lighting Transition Complete timer"); + } +} + +/** @} (end addtogroup LightLightness) */ + +/***************************************************************************//** + * \defgroup LightLightnessSetup + * \brief Light Lightness Setup Server model. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup LightLightnessSetup + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to light lightness setup request. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] kind Type of state used in light lightness setup response. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightness_setup_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + mesh_generic_state_t kind) +{ + struct mesh_generic_state current; + + current.kind = kind; + + switch (kind) { + case mesh_lighting_state_lightness_default: + current.lightness.level = lightbulb_state.lightness_default; + break; + + case mesh_lighting_state_lightness_range: + current.lightness_range.min = lightbulb_state.lightness_min; + current.lightness_range.max = lightbulb_state.lightness_max; + break; + + default: + break; + } + + return generic_server_respond(MESH_LIGHTING_LIGHTNESS_SETUP_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + NULL, + 0, + 0x00); +} + +/***************************************************************************//** + * Update light lightness setup state. + * + * @param[in] element_index Server model element index. + * @param[in] kind Type of state used in light lightness setup update. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightness_setup_update(uint16_t element_index, + mesh_generic_state_t kind) +{ + struct mesh_generic_state current; + + current.kind = kind; + + switch (kind) { + case mesh_lighting_state_lightness_default: + current.lightness.level = lightbulb_state.lightness_default; + break; + + case mesh_lighting_state_lightness_range: + current.lightness_range.min = lightbulb_state.lightness_min; + current.lightness_range.max = lightbulb_state.lightness_max; + break; + + default: + break; + } + + return generic_server_update(MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + element_index, + ¤t, + NULL, + 0); +} + +/***************************************************************************//** + * This function process the requests for the light lightness setup model. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void lightness_setup_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + (void)transition_ms; + (void)delay_ms; + + mesh_generic_state_t kind = mesh_generic_state_last; + switch (request->kind) { + case mesh_lighting_request_lightness_default: + kind = mesh_lighting_state_lightness_default; + log_info("lightness_setup_request: state=lightness_default, default_lightness=%u" NL, + request->lightness); + + if (lightbulb_state.lightness_default == request->lightness) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Setting default lightness to <%u>" NL, request->lightness); + lightbulb_state.lightness_default = request->lightness; + lightbulb_state_changed(); + } + break; + + case mesh_lighting_request_lightness_range: + kind = mesh_lighting_state_lightness_range; + log_info("lightness_setup_request: state=lightness_range, min_lightness=%u, max_lightness=%u" NL, + request->lightness_range.min, request->lightness_range.max); + + if ((lightbulb_state.lightness_min == request->lightness_range.min) + && (lightbulb_state.lightness_max == request->lightness_range.max)) { + log_info("Request for current state received; no op" NL); + } else { + if (lightbulb_state.lightness_min != request->lightness_range.min) { + log_info("Setting min lightness to <%u>" NL, + request->lightness_range.min); + lightbulb_state.lightness_min = request->lightness_range.min; + if (lightbulb_state.lightness_current < request->lightness_range.min + && lightbulb_state.lightness_current != 0) { + lightbulb_state.lightness_current = request->lightness_range.min; + sl_btmesh_lighting_set_level(lightbulb_state.lightness_current, + IMMEDIATE); + } + } + if (lightbulb_state.lightness_max != request->lightness_range.max) { + log_info("Setting max lightness to <%u>" NL, + request->lightness_range.max); + lightbulb_state.lightness_max = request->lightness_range.max; + if (lightbulb_state.lightness_current > request->lightness_range.max) { + lightbulb_state.lightness_current = request->lightness_range.max; + sl_btmesh_lighting_set_level(lightbulb_state.lightness_current, + IMMEDIATE); + } + } + lightbulb_state_changed(); + } + break; + + default: + break; + } + + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + lightness_setup_response(element_index, client_addr, appkey_index, kind); + } else { + lightness_setup_update(element_index, kind); + } +} + +/***************************************************************************//** + * This function is a handler for light lightness setup change event. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void lightness_setup_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + switch (current->kind) { + case mesh_lighting_state_lightness_default: + if (lightbulb_state.lightness_default != current->lightness.level) { + log_info("Default lightness update: from %u to %u" NL, + lightbulb_state.lightness_default, + current->lightness.level); + lightbulb_state.lightness_default = current->lightness.level; + lightbulb_state_changed(); + } else { + log_info("Default lightness update -same value (%u)" NL, + lightbulb_state.lightness_default); + } + break; + + case mesh_lighting_state_lightness_range: + if (lightbulb_state.lightness_min != current->lightness_range.min) { + log_info("Min lightness update: from %u to %u" NL, + lightbulb_state.lightness_min, + current->lightness_range.min); + lightbulb_state.lightness_min = current->lightness_range.min; + lightbulb_state_changed(); + } else { + log_info("Min lightness update -same value (%u)" NL, + lightbulb_state.lightness_min); + } + + if (lightbulb_state.lightness_max != current->lightness_range.max) { + log_info("Max lightness update: from %u to %u" NL, + lightbulb_state.lightness_max, + current->lightness_range.max); + lightbulb_state.lightness_max = current->lightness_range.max; + lightbulb_state_changed(); + } else { + log_info("Max lightness update -same value (%u)" NL, + lightbulb_state.lightness_max); + } + + break; + + default: + break; + } +} + +/** @} (end addtogroup LightLightnessSetup) */ + +/***************************************************************************//** + * \defgroup PriGenericLevel + * \brief Generic Level Server model on primary element. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup PriGenericLevel + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Response to generic level request on primary element. + * + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] appkey_index The application key index used in encrypting. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the response operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t pri_level_response(uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_level; + current.level.level = lightbulb_state.pri_level_current; + + target.kind = mesh_generic_state_level; + target.level.level = lightbulb_state.pri_level_target; + + return generic_server_respond(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + client_addr, + appkey_index, + ¤t, + &target, + remaining_ms, + 0x00); +} + +/***************************************************************************//** + * Update generic level state on primary element. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t pri_level_update(uint16_t element_index, + uint32_t remaining_ms) +{ + struct mesh_generic_state current, target; + + current.kind = mesh_generic_state_level; + current.level.level = lightbulb_state.pri_level_current; + + target.kind = mesh_generic_state_level; + target.level.level = lightbulb_state.pri_level_target; + + return generic_server_update(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + ¤t, + &target, + remaining_ms); +} + +/***************************************************************************//** + * Update generic level state on primary element + * and publish model state to the network. + * + * @param[in] element_index Server model element index. + * @param[in] remaining_ms The remaining time in milliseconds. + * + * @return Status of the update and publish operation. + * Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t pri_level_update_and_publish(uint16_t element_index, + uint32_t remaining_ms) +{ + sl_status_t e; + + e = pri_level_update(element_index, remaining_ms); + if (e == SL_STATUS_OK) { + e = generic_server_publish(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + element_index, + mesh_generic_state_level); + } + + return e; +} + +/***************************************************************************//** + * Schedule next generic level move request on primary element. + * + * @param[in] remaining_delta The remaining level delta to the target state. + ******************************************************************************/ +static void pri_level_move_schedule_next_request(int32_t remaining_delta) +{ + uint32_t transition_ms = 0; + if (abs(remaining_delta) < abs(move_pri_level_delta)) { + transition_ms = (uint32_t)(((int64_t)move_pri_level_trans * remaining_delta) + / move_pri_level_delta); + sl_btmesh_lighting_set_level(lightbulb_state.lightness_target, + transition_ms); + } else { + transition_ms = move_pri_level_trans; + sl_btmesh_lighting_set_level(lightbulb_state.lightness_current + + move_pri_level_delta, + move_pri_level_trans); + } + sl_status_t sc = sl_simple_timer_start(&lighting_pri_level_move_timer, + transition_ms, + lighting_pri_level_move_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Pri Level timer"); +} + +/***************************************************************************//** + * Handle generic level move request on primary element. + ******************************************************************************/ +static void pri_level_move_request(void) +{ + log_info("Primary level move: level %d -> %d, delta %d in %lu ms" NL, + lightbulb_state.pri_level_current, + lightbulb_state.pri_level_target, + move_pri_level_delta, + move_pri_level_trans); + + int32_t remaining_delta = (int32_t)lightbulb_state.pri_level_target + - lightbulb_state.pri_level_current; + + 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); + } +} + +/***************************************************************************//** + * Stop generic level move on primary element. + ******************************************************************************/ +static void pri_level_move_stop(void) +{ + // Cancel timers + sl_status_t sc = sl_simple_timer_stop(&lighting_delayed_pri_level_timer); + app_assert_status_f(sc, "Failed to stop Delayed Primary Level timer"); + sc = sl_simple_timer_stop(&lighting_pri_level_move_timer); + app_assert_status_f(sc, "Failed to stop Primary Level Move timer"); + //Reset move parameters + move_pri_level_delta = 0; + move_pri_level_trans = 0; +} + +/***************************************************************************//** + * This function process the requests for the generic level model + * on primary element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] client_addr Address of the client model which sent the message. + * @param[in] server_addr Address the message was sent to. + * @param[in] appkey_index The application key index used in encrypting the request. + * @param[in] request Pointer to the request structure. + * @param[in] transition_ms Requested transition time (in milliseconds). + * @param[in] delay_ms Delay time (in milliseconds). + * @param[in] request_flags Message flags. Bitmask of the following: + * - Bit 0: Nonrelayed. If nonzero indicates + * a response to a nonrelayed request. + * - Bit 1: Response required. If nonzero client + * expects a response from the server. + ******************************************************************************/ +static void pri_level_request(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + (void)model_id; + (void)server_addr; + + uint16_t lightness; + uint32_t remaining_ms = UNKNOWN_REMAINING_TIME; + + switch (request->kind) { + case mesh_generic_request_level: + log_info("pri_level_request (generic): level=%d, transition=%lu, delay=%u" NL, + request->level, transition_ms, delay_ms); + + pri_level_move_stop(); + 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; + } else { + log_info("Setting pri_level to <%d>" NL, request->level); + + lightness = request->level + 32768; + + if (transition_ms == 0 && delay_ms == 0) { // Immediate change + lightbulb_state.pri_level_current = request->level; + lightbulb_state.pri_level_target = request->level; + lightbulb_state.lightness_current = lightness; + lightbulb_state.lightness_target = lightness; + + // update LED Level + sl_btmesh_lighting_set_level(lightness, IMMEDIATE); + } else if (delay_ms > 0) { + // a delay has been specified for the change. Start a soft timer + // that will trigger the change after the given delay + // Current state remains as is for now + lightbulb_state.pri_level_target = request->level; + lightbulb_state.lightness_target = lightness; + pri_level_request_kind = mesh_generic_request_level; + sl_status_t sc = sl_simple_timer_start(&lighting_delayed_pri_level_timer, + delay_ms, + lighting_delayed_pri_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Primary Level timer"); + + // store transition parameter for later use + delayed_pri_level_trans = transition_ms; + } else { + // no delay but transition time has been set. + lightbulb_state.pri_level_target = request->level; + lightbulb_state.lightness_target = lightness; + sl_btmesh_lighting_set_level(lightness, transition_ms); + + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&lighting_level_transition_complete_timer, + transition_ms, + lighting_level_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Primary Level Transition Complete timer"); + } + + // State has changed, so the current scene number is reset + scene_server_reset_register(element_index); + } + + remaining_ms = delay_ms + transition_ms; + break; + + case mesh_generic_request_level_move: { + log_info("pri_level_request (move): delta=%d, transition=%lu, delay=%u" NL, + request->level, transition_ms, delay_ms); + // Store move parameters + move_pri_level_delta = request->level; + move_pri_level_trans = transition_ms; + + int16_t requested_level = 0; + if (move_pri_level_delta > 0) { + requested_level = 0x7FFF; // Max level value + } else if (move_pri_level_delta < 0) { + requested_level = 0x8000; // Min level value + } + + if (lightbulb_state.pri_level_current == requested_level) { + log_info("Request for current state received; no op" NL); + lightbulb_state.pri_level_target = requested_level; + remaining_ms = IMMEDIATE; + } else { + log_info("Setting pri_level to <%d>" NL, requested_level); + + lightness = requested_level + 32768; + + if (delay_ms > 0) { + // a delay has been specified for the move. Start a soft timer + // that will trigger the move after the given delay + // Current state remains as is for now + lightbulb_state.pri_level_target = requested_level; + lightbulb_state.lightness_target = lightness; + pri_level_request_kind = mesh_generic_request_level_move; + sl_status_t sc = sl_simple_timer_start(&lighting_delayed_pri_level_timer, + delay_ms, + lighting_delayed_pri_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Primary Level timer"); + } else { + // no delay so start move + lightbulb_state.pri_level_target = requested_level; + lightbulb_state.lightness_target = lightness; + + int32_t remaining_delta = (int32_t)lightbulb_state.pri_level_target + - lightbulb_state.pri_level_current; + pri_level_move_schedule_next_request(remaining_delta); + } + remaining_ms = UNKNOWN_REMAINING_TIME; + + // State has changed, so the current scene number is reset + scene_server_reset_register(element_index); + } + break; + } + + case mesh_generic_request_level_halt: + log_info("pri_level_request (halt)" NL); + + // Set current state + lightbulb_state.lightness_current = sl_btmesh_get_level(); + lightbulb_state.lightness_target = lightbulb_state.lightness_current; + lightbulb_state.pri_level_current = lightbulb_state.lightness_current + - 32768; + lightbulb_state.pri_level_target = lightbulb_state.pri_level_current; + if (delay_ms > 0) { + // a delay has been specified for the move halt. Start a soft timer + // that will trigger the move halt after the given delay + // Current state remains as is for now + remaining_ms = delay_ms; + pri_level_request_kind = mesh_generic_request_level_halt; + sl_status_t sc = sl_simple_timer_start(&lighting_delayed_pri_level_timer, + delay_ms, + lighting_delayed_pri_level_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Delayed Primary Level timer"); + } else { + pri_level_move_stop(); + sl_btmesh_lighting_set_level(lightbulb_state.lightness_current, + IMMEDIATE); + remaining_ms = IMMEDIATE; + } + break; + + default: + break; + } + + lightbulb_state_changed(); + + if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { + pri_level_response(element_index, client_addr, appkey_index, remaining_ms); + } + pri_level_update_and_publish(element_index, remaining_ms); + + // publish to bound states + generic_server_publish(MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + element_index, + mesh_lighting_state_lightness_actual); +} + +/***************************************************************************//** + * This function is a handler for generic level change event + * on primary element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. + ******************************************************************************/ +static void pri_level_change(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + (void)model_id; + (void)element_index; + (void)target; + (void)remaining_ms; + + if (lightbulb_state.pri_level_current != current->level.level) { + log_info("Primary level update: from %d to %d" NL, + lightbulb_state.pri_level_current, + current->level.level); + lightbulb_state.pri_level_current = current->level.level; + lightbulb_state_changed(); + pri_level_move_stop(); + } else { + log_info("Primary level update -same value (%d)" NL, + lightbulb_state.pri_level_current); + } +} + +/***************************************************************************//** + * This function is a handler for generic level recall event on primary element. + * + * @param[in] model_id Server model ID. + * @param[in] element_index Server model element index. + * @param[in] current Pointer to current state structure. + * @param[in] target Pointer to target state structure. + * @param[in] transition_ms Transition time (in milliseconds). + ******************************************************************************/ +static void pri_level_recall(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_ms) +{ + (void)model_id; + + log_info("Primary Generic Level recall" NL); + if (transition_ms == IMMEDIATE) { + lightbulb_state.pri_level_target = current->level.level; + } else { + lightbulb_state.pri_level_target = target->level.level; + } + + if (lightbulb_state.pri_level_current == lightbulb_state.pri_level_target) { + log_info("Request for current state received; no op" NL); + } else { + log_info("Recall pri_level to %d with transition=%lu ms" NL, + lightbulb_state.pri_level_target, + transition_ms); + if (transition_ms == IMMEDIATE) { + lightbulb_state.pri_level_current = current->level.level; + } else { + // lightbulb current state will be updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&lighting_level_transition_complete_timer, + transition_ms, + lighting_level_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Primary Level Transition Complete timer"); + } + lightbulb_state_changed(); + } + + pri_level_update_and_publish(element_index, transition_ms); +} + +/***************************************************************************//** + * This function is called when a generic level request on primary element + * with non-zero transition time has completed. + ******************************************************************************/ +static void pri_level_transition_complete(void) +{ + // transition done -> set state, update and publish + lightbulb_state.pri_level_current = lightbulb_state.pri_level_target; + lightbulb_state.lightness_current = lightbulb_state.lightness_target; + + log_info("Transition complete. New pri_level is %d" NL, + lightbulb_state.pri_level_current); + + lightbulb_state_changed(); + pri_level_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN, IMMEDIATE); +} + +/***************************************************************************//** + * This function is called when delay for generic level request + * on primary element has completed. + ******************************************************************************/ +static void delayed_pri_level_request(void) +{ + log_info("Starting delayed primary level request: level %d -> %d, %lu ms" NL, + lightbulb_state.pri_level_current, + lightbulb_state.pri_level_target, + delayed_pri_level_trans); + + switch (pri_level_request_kind) { + case mesh_generic_request_level: + sl_btmesh_lighting_set_level(lightbulb_state.lightness_target, + delayed_pri_level_trans); + + if (delayed_pri_level_trans == 0) { + // no transition delay, update state immediately + lightbulb_state.pri_level_current = lightbulb_state.pri_level_target; + lightbulb_state.lightness_current = lightbulb_state.lightness_target; + + lightbulb_state_changed(); + pri_level_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN, + delayed_pri_level_trans); + } else { + // state is updated when transition is complete + sl_status_t sc = sl_simple_timer_start(&lighting_level_transition_complete_timer, + delayed_pri_level_trans, + lighting_level_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Primary Level Transition Complete timer"); + } + break; + + case mesh_generic_request_level_move: + pri_level_move_schedule_next_request((int32_t)lightbulb_state.pri_level_target + - lightbulb_state.pri_level_current); + pri_level_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN, + UNKNOWN_REMAINING_TIME); + break; + + case mesh_generic_request_level_halt: + // Set current state + lightbulb_state.lightness_current = sl_btmesh_get_level(); + lightbulb_state.lightness_target = lightbulb_state.lightness_current; + lightbulb_state.pri_level_current = lightbulb_state.lightness_current + - 32768; + lightbulb_state.pri_level_target = lightbulb_state.pri_level_current; + pri_level_move_stop(); + sl_btmesh_lighting_set_level(lightbulb_state.lightness_current, + IMMEDIATE); + pri_level_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN, IMMEDIATE); + break; + + default: + break; + } +} + +/** @} (end addtogroup PriGenericLevel) */ + +/***************************************************************************//** + * Initialization of the models supported by this node. + * This function registers callbacks for each of the supported models. + ******************************************************************************/ +static void init_models(void) +{ + generic_server_register_handler(MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + BTMESH_LIGHTING_SERVER_MAIN, + onoff_request, + onoff_change, + onoff_recall); + + generic_server_register_handler(MESH_GENERIC_POWER_ON_OFF_SETUP_SERVER_MODEL_ID, + BTMESH_LIGHTING_SERVER_MAIN, + power_onoff_request, + power_onoff_change, + NULL); + + generic_server_register_handler(MESH_GENERIC_TRANSITION_TIME_SERVER_MODEL_ID, + BTMESH_LIGHTING_SERVER_MAIN, + transtime_request, + transtime_change, + NULL); + + generic_server_register_handler(MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + BTMESH_LIGHTING_SERVER_MAIN, + lightness_request, + lightness_change, + lightness_recall); + + generic_server_register_handler(MESH_LIGHTING_LIGHTNESS_SETUP_SERVER_MODEL_ID, + BTMESH_LIGHTING_SERVER_MAIN, + lightness_setup_request, + lightness_setup_change, + NULL); + + generic_server_register_handler(MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + BTMESH_LIGHTING_SERVER_MAIN, + pri_level_request, + pri_level_change, + pri_level_recall); +} + +/***************************************************************************//** + * This function loads the saved light state from Persistent Storage and + * copies the data in the global variable lightbulb_state. + * If PS key with ID SL_BTMESH_LIGHTING_SERVER_PS_KEY_CFG_VAL does not exist or loading failed, + * lightbulb_state is set to zero and some default values are written to it. + * + * @return Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightbulb_state_load(void) +{ + sl_status_t sc; + size_t ps_len = 0; + struct lightbulb_state ps_data; + + sc = sl_bt_nvm_load(SL_BTMESH_LIGHTING_SERVER_PS_KEY_CFG_VAL, + sizeof(ps_data), + &ps_len, + (uint8_t *)&ps_data); + + // Set default values if ps_load fail or size of lightbulb_state has changed + if ((sc != SL_STATUS_OK) || (ps_len != sizeof(struct lightbulb_state))) { + memset(&lightbulb_state, 0, sizeof(struct lightbulb_state)); + lightbulb_state.lightness_last = LIGHTNESS_LAST_DEFAULT; + lightbulb_state.lightness_default = LIGHTNESS_DEFAULT_DEFAULT; + lightbulb_state.lightness_min = SL_BTMESH_LIGHTING_SERVER_LIGHTNESS_MIN_CFG_VAL; + lightbulb_state.lightness_max = SL_BTMESH_LIGHTING_SERVER_LIGHTNESS_MAX_CFG_VAL; + + // Check if default values are valid and correct them if needed + lightbulb_state_validate_and_correct(); + + if (sc == SL_STATUS_OK) { + // The sl_bt_nvm_load call was successful but the size of the loaded data + // differs from the expected size therefore error code shall be set + sc = SL_STATUS_INVALID_STATE; + log_error("Lighting server lightbulb state loaded from PS with invalid size, " + "use defaults. (expected=%zd,actual=%zd)" NL, + sizeof(struct lightbulb_state), + ps_len); + } else { + log_status_error_f(sc, + "Lighting server lightbulb state load from PS failed " + "or nvm is empty, use defaults." NL); + } + } else { + memcpy(&lightbulb_state, &ps_data, ps_len); + } + + return sc; +} + +/***************************************************************************//** + * This function validates the lighbulb_state and change it if it is against + * the specification. + ******************************************************************************/ +static void lightbulb_state_validate_and_correct(void) +{ + if (lightbulb_state.lightness_min > lightbulb_state.lightness_max) { + lightbulb_state.lightness_min = lightbulb_state.lightness_max; + } + if (lightbulb_state.lightness_default) { + if (lightbulb_state.lightness_default < lightbulb_state.lightness_min) { + lightbulb_state.lightness_default = lightbulb_state.lightness_min; + } + if (lightbulb_state.lightness_default > lightbulb_state.lightness_max) { + lightbulb_state.lightness_default = lightbulb_state.lightness_max; + } + } + if (lightbulb_state.lightness_current < lightbulb_state.lightness_min) { + lightbulb_state.lightness_current = lightbulb_state.lightness_min; + } + if (lightbulb_state.lightness_current > lightbulb_state.lightness_max) { + lightbulb_state.lightness_current = lightbulb_state.lightness_max; + } + if (lightbulb_state.lightness_target < lightbulb_state.lightness_min) { + lightbulb_state.lightness_target = lightbulb_state.lightness_min; + } + if (lightbulb_state.lightness_target > lightbulb_state.lightness_max) { + lightbulb_state.lightness_target = lightbulb_state.lightness_max; + } +} + +/***************************************************************************//** + * This function saves the current light state in Persistent Storage so that + * the data is preserved over reboots and power cycles. + * The light state is hold in a global variable lightbulb_state. + * A PS key with ID SL_BTMESH_LIGHTING_SERVER_PS_KEY_CFG_VAL is used to store the whole struct. + * + * @return Returns SL_STATUS_OK (0) if succeed, non-zero otherwise. + ******************************************************************************/ +static sl_status_t lightbulb_state_store(void) +{ + sl_status_t sc; + + sc = sl_bt_nvm_save(SL_BTMESH_LIGHTING_SERVER_PS_KEY_CFG_VAL, + sizeof(struct lightbulb_state), + (const uint8_t*)&lightbulb_state); + + log_status_error_f(sc, + "Lighting server lightbulb state store in PS failed." NL); + + return sc; +} + +/***************************************************************************//** + * This function is called each time the lightbulb state in RAM is changed. + * It sets up a soft timer that will save the state in flash after small delay. + * The purpose is to reduce amount of unnecessary flash writes. + ******************************************************************************/ +static void lightbulb_state_changed(void) +{ + sl_status_t sc = sl_simple_timer_start(&lighting_state_store_timer, + SL_BTMESH_LIGHTING_SERVER_NVM_SAVE_TIME_CFG_VAL, + lighting_state_store_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start State Store timer"); +} + +/******************************************************************************* + * Lightbulb state initialization. + * This is called at each boot if provisioning is already done. + * Otherwise this function is called after provisioning is completed. + ******************************************************************************/ +void sl_btmesh_lighting_server_init(void) +{ + memset(&lightbulb_state, 0, sizeof(struct lightbulb_state)); + + lightbulb_state_load(); + + // Handle on power up behavior + uint32_t transition_ms = sl_btmesh_get_default_transition_time(); + switch (lightbulb_state.onpowerup) { + case MESH_GENERIC_ON_POWER_UP_STATE_OFF: + log_info("On power up state is OFF" NL); + lightbulb_state.onoff_current = MESH_GENERIC_ON_OFF_STATE_OFF; + lightbulb_state.onoff_target = MESH_GENERIC_ON_OFF_STATE_OFF; + lightbulb_state.lightness_current = 0; + lightbulb_state.lightness_target = 0; + sl_btmesh_set_state(LED_STATE_OFF); + break; + + case MESH_GENERIC_ON_POWER_UP_STATE_ON: + log_info("On power up state is ON" NL); + lightbulb_state.onoff_current = MESH_GENERIC_ON_OFF_STATE_ON; + lightbulb_state.onoff_target = MESH_GENERIC_ON_OFF_STATE_ON; + if (lightbulb_state.lightness_default == 0) { + lightbulb_state.lightness_current = lightbulb_state.lightness_last; + lightbulb_state.lightness_target = lightbulb_state.lightness_last; + } else { + lightbulb_state.lightness_current = lightbulb_state.lightness_default; + lightbulb_state.lightness_target = lightbulb_state.lightness_default; + } + if (transition_ms > 0) { + lightbulb_state.lightness_current = 0; + sl_btmesh_lighting_set_level(lightbulb_state.lightness_current, + IMMEDIATE); + sl_status_t sc = + sl_simple_timer_start(&lighting_transition_complete_timer, + transition_ms, + lighting_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Lighting Transition Complete timer"); + sl_btmesh_lighting_set_level(lightbulb_state.lightness_target, + transition_ms); + } else { + sl_btmesh_lighting_set_level(lightbulb_state.lightness_target, + IMMEDIATE); + } + break; + + case MESH_GENERIC_ON_POWER_UP_STATE_RESTORE: + log_info("On power up state is RESTORE" NL); +#ifdef SL_CATALOG_BTMESH_LC_SERVER_PRESENT + if (lc_get_mode() == 0) +#endif + { + if (transition_ms > 0 && lightbulb_state.lightness_target > 0) { + lightbulb_state.lightness_current = 0; + sl_btmesh_lighting_set_level(lightbulb_state.lightness_current, + IMMEDIATE); + sl_status_t sc = + sl_simple_timer_start(&lighting_transition_complete_timer, + transition_ms, + lighting_transition_complete_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start Lighting Transition Complete timer"); + sl_btmesh_lighting_set_level(lightbulb_state.lightness_target, + transition_ms); + } else { + lightbulb_state.lightness_current = lightbulb_state.lightness_target; + sl_btmesh_lighting_set_level(lightbulb_state.lightness_current, + IMMEDIATE); + } + + if (lightbulb_state.lightness_current) { + lightbulb_state.onoff_current = MESH_GENERIC_ON_OFF_STATE_ON; + } else { + lightbulb_state.onoff_current = MESH_GENERIC_ON_OFF_STATE_OFF; + } + + if (lightbulb_state.lightness_target) { + lightbulb_state.onoff_target = MESH_GENERIC_ON_OFF_STATE_ON; + } else { + lightbulb_state.onoff_target = MESH_GENERIC_ON_OFF_STATE_OFF; + } + } + + break; + + default: + break; + } + + lightbulb_state_changed(); + init_models(); + transtime_update(BTMESH_LIGHTING_SERVER_MAIN); + lightness_setup_update(BTMESH_LIGHTING_SERVER_MAIN, + mesh_lighting_state_lightness_default); + + lightness_setup_update(BTMESH_LIGHTING_SERVER_MAIN, + mesh_lighting_state_lightness_range); + + power_onoff_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN); + +#ifdef SL_CATALOG_BTMESH_LC_PRESENT + if (lc_get_mode() == 0) +#endif + { + onoff_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN, + IMMEDIATE); + + lightness_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN, + IMMEDIATE, + mesh_lighting_state_lightness_actual); + } +} + +/***************************************************************************//** + * @addtogroup BtmeshWrappers + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_respond to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_respond(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms, + uint8_t response_flags) +{ + sl_status_t sc = mesh_lib_generic_server_respond(model_id, + element_index, + client_addr, + appkey_index, + current, + target, + remaining_ms, + response_flags); + + log_status_error_f(sc, + "Lighting server respond failed " + "(claddr=0x%04x,mdl=0x%04x,elem=%d,state=0x%04x)" NL, + client_addr, + model_id, + element_index, + current->kind); + return sc; +} + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_update to log if the Btmesh API call + * results in error. The parameters and the return value of the wrapper and + * the wrapped functions are the same. + ******************************************************************************/ +static sl_status_t generic_server_update(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + sl_status_t sc = mesh_lib_generic_server_update(model_id, + element_index, + current, + target, + remaining_ms); + + log_status_error_f(sc, + "Lighting server state update failed " + "(mdl=0x%04x,elem=%d,state=0x%04x)" NL, + model_id, + element_index, + current->kind); + return sc; +} + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_publish to log if the Btmesh API call + * results in error. The parameters and the return value of the two functions + * are the same. + ******************************************************************************/ +static sl_status_t generic_server_publish(uint16_t model_id, + uint16_t element_index, + mesh_generic_state_t kind) +{ + sl_status_t sc; + + sc = mesh_lib_generic_server_publish(model_id, element_index, kind); + + log_btmesh_status_f(sc, + "Lighting server state publish failed " + "(mdl=0x%04x,elem=%d,state=0x%04x)" NL, + model_id, + element_index, + kind); + return sc; +} + +/***************************************************************************//** + * Wrapper for mesh_lib_generic_server_register_handler with an assert which + * detects if the Btmesh API call results in error. The parameters of the two + * functions are the same but the wrapper does not have return value. + ******************************************************************************/ +static void generic_server_register_handler(uint16_t model_id, + uint16_t elem_index, + mesh_lib_generic_server_client_request_cb cb, + mesh_lib_generic_server_change_cb ch, + mesh_lib_generic_server_recall_cb recall) +{ + sl_status_t sc = + mesh_lib_generic_server_register_handler(model_id, elem_index, cb, ch, recall); + + app_assert_status_f(sc, + "Lighting server failed to register handlers " + "(mdl=0x%04x,elem=%d)", + model_id, + elem_index); +} + +#ifdef SL_CATALOG_BTMESH_SCENE_SERVER_PRESENT +/***************************************************************************//** + * Wrapper for sl_btmesh_scene_server_reset_register with an assert which + * detects if the Btmesh API call results in error. The parameters of the two + * functions are the same but the wrapper does not have return value. + * The scene server register shall be reset if the state of the model changes in + * order to clear the current scene. + * This function is available only if the btmesh_scene_server component is added + * to the project. + ******************************************************************************/ +static void scene_server_reset_register_impl(uint16_t elem_index) +{ + sl_status_t sc = sl_btmesh_scene_server_reset_register(elem_index); + + // The function can fail if there is no scene server model in the element or + // the btmesh_stack_scene_server component is not present. Both of these + // are configuration issues so assert can be used. + app_assert_status_f(sc, "Lighting server failed to reset scene register."); +} +#endif + +/** @} (end addtogroup BtmeshWrappers) */ + +// ----------------------------------------------------------------------------- +// Timer Callbacks + +/***************************************************************************//** + * Callback for the timer handling generic level move + * + * @param[in] handle Pointer to the timer handle + * @param[in] data Pointer to the timer data + ******************************************************************************/ +static void lighting_pri_level_move_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // handling of generic level move, update the lightbulb state + pri_level_move_request(); +} + +/***************************************************************************//** + * Callback for the timer handling lightness request transition + * + * @param[in] handle Pointer to the timer handle + * @param[in] data Pointer to the timer data + ******************************************************************************/ +static void lighting_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for a lightness request has completed + // update the lightbulb state + lightness_transition_complete(); +} + +/***************************************************************************//** + * Callback for the timer handling primary generic level request transition + * + * @param[in] handle Pointer to the timer handle + * @param[in] data Pointer to the timer data + ******************************************************************************/ +static void lighting_level_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for a primary generic level request has completed, + // update the lightbulb state + pri_level_transition_complete(); +} + +/***************************************************************************//** + * Callback for the timer handling on/off request transition + * + * @param[in] handle Pointer to the timer handle + * @param[in] data Pointer to the timer data + ******************************************************************************/ +static void lighting_onoff_transition_complete_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // transition for an on/off request has completed, + // update the lightbulb state + onoff_transition_complete(); +} + +/***************************************************************************//** + * Callback for the timer handling delayed primary generic level request + * + * @param[in] handle Pointer to the timer handle + * @param[in] data Pointer to the timer data + ******************************************************************************/ +static void lighting_delayed_pri_level_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for a primary generic level request has passed, + // now process the request + delayed_pri_level_request(); +} + +/***************************************************************************//** + * Callback for the timer handling delayed lightness request + * + * @param[in] handle Pointer to the timer handle + * @param[in] data Pointer to the timer data + ******************************************************************************/ +static void lighting_delayed_lightness_request_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for a lightness request has passed, now process the request + delayed_lightness_request(); +} + +/***************************************************************************//** + * Callback for the timer handling delayed on/off request + * + * @param[in] handle Pointer to the timer handle + * @param[in] data Pointer to the timer data + ******************************************************************************/ +static void lighting_delayed_onoff_request_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // delay for an on/off request has passed, now process the request + delayed_onoff_request(); +} + +/***************************************************************************//** + * Callback for the timer handling storage state change + * + * @param[in] handle Pointer to the timer handle + * @param[in] data Pointer to the timer data + ******************************************************************************/ +static void lighting_state_store_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + // save the lightbulb state + lightbulb_state_store(); +} + +/** @} (end addtogroup Lighting Server) */ diff --git a/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_server.h b/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_server.h new file mode 100644 index 00000000000..9a5ec2fe6ce --- /dev/null +++ b/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_server.h @@ -0,0 +1,120 @@ +/***************************************************************************//** + * @file + * @brief btmesh_lighting_server.h + ******************************************************************************* + * # 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_BTMESH_LIGHTING_SERVER_H +#define SL_BTMESH_LIGHTING_SERVER_H + +#include "sl_btmesh_lighting_level_transition_handler.h" + +/***************************************************************************//** + * Lighting Server initialization. + * This should be called at each boot if provisioning is already done. + * Otherwise this function should be called after provisioning is completed. + * It is called automatically by the Universal Configurator Framework + * + * @return Status of the initialization operation. + * Returns bg_err_success (0) if succeed, non-zero otherwise. + ******************************************************************************/ +void sl_btmesh_lighting_server_init(void); + +/***************************************************************************//** + * Handling of mesh lighting server events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_lighting_server_on_event(sl_btmesh_msg_t *evt); + +/***************************************************************************//** + * Get current lightness value + * + * @return Current lightness + ******************************************************************************/ +uint16_t sl_btmesh_get_lightness_current(void); + +/***************************************************************************//** + * Set current lightness value + * + * @param[in] lightness Current lightness + ******************************************************************************/ +void sl_btmesh_set_lightness_current(uint16_t lightness); + +/***************************************************************************//** + * Get target lightness value + * + * @return Target lightness + ******************************************************************************/ +uint16_t sl_btmesh_get_lightness_target(void); + +/***************************************************************************//** + * Set target lightness value + * + * @param[in] lightness Target lightness + ******************************************************************************/ +void sl_btmesh_set_lightness_target(uint16_t lightness); + +/***************************************************************************//** + * Get default lightness value + * + * @return Default lightness + ******************************************************************************/ +uint16_t sl_btmesh_get_lightness_default(void); + +/***************************************************************************//** + * Set default lightness value + * + * @param[in] lightness Default lightness + ******************************************************************************/ +void sl_btmesh_set_lightness_default(uint16_t lightness); + +/***************************************************************************//** + * Set last lightness value + * + * @param[in] lightness Last lightness + ******************************************************************************/ +void sl_btmesh_set_lightness_last(uint16_t lightness); + +/***************************************************************************//** + * This function convert mesh format of default transition time to milliseconds. + * + * @return Default transition time in milliseconds. + ******************************************************************************/ +uint32_t sl_btmesh_get_default_transition_time(void); + +/***************************************************************************//** + * Get default lightness value on power up + * + * @return Default lightness on power up + ******************************************************************************/ +uint16_t sl_btmesh_get_lightness_onpowerup(void); + +#endif // SL_BTMESH_LIGHTING_SERVER_H diff --git a/app/btmesh/common/btmesh_lpn/config/sl_btmesh_lpn_config.h b/app/btmesh/common/btmesh_lpn/config/sl_btmesh_lpn_config.h new file mode 100644 index 00000000000..602a09e69a5 --- /dev/null +++ b/app/btmesh/common/btmesh_lpn/config/sl_btmesh_lpn_config.h @@ -0,0 +1,112 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_LPN_CONFIG_H +#define SL_BTMESH_LPN_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// LPN configuration + +// Minimum queue length the friend must support <2-128> +// Default: 4 +// Minimum queue length the friend must support. Choose an appropriate value based on the expected message +// frequency and LPN sleep period, because new messages push out the least recent messages from the friend queue. +// Note that the given value is rounded up to the nearest power of 2 +#define SL_BTMESH_LPN_MIN_QUEUE_LENGTH_CFG_VAL (4) + +// Poll timeout in milliseconds <1000-345599900:100> +// Default: 5000 +// Poll timeout in milliseconds, which is the longest time that LPN sleeps in between querying its friend +// for queued messages. Long poll timeout allows the LPN to sleep for longer periods, at the expense of increased +// latency for receiving messages. Note that the given value is rounded up to the nearest 100 ms +#define SL_BTMESH_LPN_POLL_TIMEOUT_CFG_VAL (5000) + +// Receive delay in milliseconds <10-255> +// Default: 50 +// Receive delay in milliseconds. Receive delay is the time between the LPN sending a request and listening +// for a response. Receive delay allows the friend node time to prepare the message and LPN to sleep +#define SL_BTMESH_LPN_RECEIVE_DELAY_CFG_VAL (50) + +// The number of retry attempts to repeat <0-10> +// Default: 8 +// Request retry is the number of retry attempts to repeat e.g., the friend poll message +// if the friend update was not received by the LPN +#define SL_BTMESH_LPN_REQUEST_RETRIES_CFG_VAL (8) + +// Time interval between retry attempts in milliseconds <0-100> +// Default: 100 +// Time interval between retry attempts in milliseconds +#define SL_BTMESH_LPN_RETRY_INTERVAL_CFG_VAL (100) + +// Initialization timeouts + +// Timeout for initializing LPN after an already provisioned Node is initialized +// Default: 30000 +// Timeout for initializing LPN after an already provisioned Node is initialized. It can delay friend +// establishment to wait for possible Configuration Messages +#define SL_BTMESH_LPN_TIMEOUT_AFTER_PROVISIONED_CFG_VAL (30000) + +// Timeout for initializing LPN after Security Key was added +// Default: 5000 +// Timeout for initializing LPN after Security Key was added. It can delay friend establishment +// to wait for possible other Configuration Messages +#define SL_BTMESH_LPN_TIMEOUT_AFTER_KEY_CFG_VAL (5000) + +// Timeout for initializing LPN after the Configuration Model changed +// Default: 5000 +// Timeout for initializing LPN after the Configuration Model changed. It can delay friend establishment +// to wait for possible other Configuration Messages +#define SL_BTMESH_LPN_TIMEOUT_AFTER_CONFIG_MODEL_CHANGED_CFG_VAL (5000) + +// Timeout for initializing LPN after the Configuration Model Set Message +// Default: 5000 +// Timeout for initializing LPN after the Configuration Model Set Message. It can delay friend establishment +// to wait for possible other Configuration Messages +#define SL_BTMESH_LPN_TIMEOUT_AFTER_CONFIG_SET_CFG_VAL (5000) + +// + +// Timeout between retries to find a friend +// Default: 2000 +// Timeout between retries to find a friend +#define SL_BTMESH_LPN_FRIEND_FIND_TIMEOUT_CFG_VAL (2000) + +// Enable Logging +// Default: 1 +// Enable or disable Logging for LPN specific messages for this component. +#define SL_BTMESH_LPN_LOGGING_CFG_VAL (1) + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_LPN_CONFIG_H diff --git a/app/btmesh/common/btmesh_lpn/sl_btmesh_lpn.c b/app/btmesh/common/btmesh_lpn/sl_btmesh_lpn.c new file mode 100644 index 00000000000..11a4b815b46 --- /dev/null +++ b/app/btmesh/common/btmesh_lpn/sl_btmesh_lpn.c @@ -0,0 +1,562 @@ +/***************************************************************************//** + * @file + * @brief Low Power Node implementation + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "em_common.h" +#include "sl_status.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_config.h" + +#include +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_lpn.h" +#include "sl_btmesh_lpn_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup lpn + * @{ + ******************************************************************************/ + +/// High Priority +#define HIGH_PRIORITY 0 +/// No Timer Options +#define NO_FLAGS 0 +/// Callback has not parameters +#define NO_CALLBACK_DATA (void *)NULL + +/// Friend finding timer handler +static sl_simple_timer_t lpn_friend_find_timer; +/// Node configuration timer handler +static sl_simple_timer_t lpn_node_configured_timer; +/// High throughput timer handler +static sl_simple_timer_t lpn_high_throughput_timer; + +/// High throughput timing list head +static sl_btmesh_lpn_high_throughput_timer_t *lpn_high_throughput_head; + +/// Friend finding timer callback +static void lpn_friend_find_timer_cb(sl_simple_timer_t *handle, + void *data); +/// Node configuration timer callback +static void lpn_node_configured_timer_cb(sl_simple_timer_t *handle, + void *data); +/// High throughput timer callback +static void lpn_high_throughput_timer_cb(sl_simple_timer_t *handle, + void *data); + +/// Flag for indicating that lpn feature is active +static uint8_t lpn_active = 0; + +/// Number of active proxy connections +static uint8_t num_mesh_proxy_conn = 0; + +/// Address of the friend node if the friendship is active otherwise it is zero +static uint16_t friend_address = 0; + +// Stores the netkey index of the network which the low power node belongs to +static uint16_t lpn_friend_netkey_idx = 0; + +static void lpn_establish_friendship(void); + +static void set_configuration_timer(uint32_t delay); + +/***************************************************************************//** + * Initialize LPN functionality with configuration and friendship establishment. + ******************************************************************************/ +void sl_btmesh_lpn_feature_init(void) +{ + sl_status_t result = SL_STATUS_OK; + size_t netkey_bytes_written; + + // The sl_btmesh_node_get_networks API does not copy any netkey indexes if the + // buffer is not long enough for all netkey indexes. It is expected that only + // one netkey is present in the device but this array is allocated to provide + // space for SL_BTMESH_CONFIG_MAX_NETKEYS netkey indexes to be on the safe + // side. + uint8_t netkey_bytes[SL_BTMESH_CONFIG_MAX_NETKEYS * 2]; + + // Do not initialize LPN if lpn is currently active + // or any GATT proxy connection is opened + if (lpn_active || num_mesh_proxy_conn) { + return; + } + + // Initialize LPN functionality. + result = sl_btmesh_lpn_init(); + if (result != SL_STATUS_OK) { + log_status_error_f(result, + "LPN initialization failed" NL); + return; + } + lpn_active = 1; + log_info("LPN initialized" NL); + sl_btmesh_lpn_on_init(); + + // Configure LPN minimum friend queue length + result = sl_btmesh_lpn_config(sl_btmesh_lpn_queue_length, + SL_BTMESH_LPN_MIN_QUEUE_LENGTH_CFG_VAL); + if (result != SL_STATUS_OK) { + log_status_error_f(result, + "LPN queue configuration failed" NL); + return; + } + // Configure LPN poll timeout + result = sl_btmesh_lpn_config(sl_btmesh_lpn_poll_timeout, + SL_BTMESH_LPN_POLL_TIMEOUT_CFG_VAL); + if (result != SL_STATUS_OK) { + log_status_error_f(result, + "LPN poll timeout configuration failed" NL); + return; + } + // Configure LPN receive delay + result = sl_btmesh_lpn_config(sl_btmesh_lpn_receive_delay, + SL_BTMESH_LPN_RECEIVE_DELAY_CFG_VAL); + if (result != SL_STATUS_OK) { + log_status_error_f(result, + "LPN receive delay configuration failed" NL); + return; + } + // Configure LPN request retries + result = sl_btmesh_lpn_config(sl_btmesh_lpn_request_retries, + SL_BTMESH_LPN_REQUEST_RETRIES_CFG_VAL); + if (result != SL_STATUS_OK) { + log_status_error_f(result, + "LPN request retries configuration failed" NL); + return; + } + // Configure LPN retry interval + result = sl_btmesh_lpn_config(sl_btmesh_lpn_retry_interval, + SL_BTMESH_LPN_RETRY_INTERVAL_CFG_VAL); + if (result != SL_STATUS_OK) { + log_status_error_f(result, + "LPN retry interval configuration failed" NL); + return; + } + + // It is necessary to determine the netkey index because it is assigned by the + // provisioner device and it can't be assumed that it is always 0 or other + // constant value. If the node is part of multiple networks then it tries to + // establish friendship with the first netkey in the list. + result = sl_btmesh_node_get_networks(sizeof(netkey_bytes), + &netkey_bytes_written, + &netkey_bytes[0]); + + if (result != SL_STATUS_OK) { + log_status_error_f(result, + "LPN get networks request failed" NL); + } else if (netkey_bytes_written < 2) { + // Defensive programming: this should not occur because at this point the + // node is provisioned therefore at least one netkey shall be saved in the + // node + log_error("LPN get networks provided invalid number of netkey bytes (0x%zu)" NL, + netkey_bytes_written); + } else { + // The get networks API provides the netkeys in little endian format + lpn_friend_netkey_idx = (netkey_bytes[1] << 8) | netkey_bytes[0]; + + // Establish friendship with the lpn_friend_netkey_idx network key + // The lpn_establish_friendship function uses global variable to identify + // the network index because it does not change after provisioning but the + // this function is called after a proxy connection is closed too and the + // sl_btmesh_lpn_terminate_friendship API needs the netkey index as well so + // the netkey index shall be stored. + lpn_establish_friendship(); + } + + // Set initial head value to NULL + lpn_high_throughput_head = NULL; +} + +/***************************************************************************//** + * Deinitialize LPN functionality. + ******************************************************************************/ +void sl_btmesh_lpn_feature_deinit(void) +{ + sl_status_t result = 0; + + if (!lpn_active) { + return; // lpn feature is currently inactive + } + + // Cancel friend finding timer + sl_status_t sc = sl_simple_timer_stop(&lpn_friend_find_timer); + app_assert_status_f(sc, "Failed to stop timer"); + + // Terminate friendship if exist + result = sl_btmesh_lpn_terminate_friendship(lpn_friend_netkey_idx); + log_status_error_f(result, "Friendship termination failed" NL); + // turn off lpn feature + result = sl_btmesh_lpn_deinit(); + log_status_error_f(result, "LPN deinit failed" NL); + + lpn_active = 0; + friend_address = 0; + log_info("LPN deinitialized" NL); + sl_btmesh_lpn_on_deinit(); +} + +/******************************************************************************* +* Return if the friendship is active between LPN and friend node +*******************************************************************************/ +bool sl_btmesh_lpn_is_friendship_active(void) +{ + return (0 != friend_address); +} + +/******************************************************************************* +* Poll the Friend node for stored messages and security updates +*******************************************************************************/ +sl_status_t sl_btmesh_lpn_poll_request(void) +{ + return sl_btmesh_lpn_poll(lpn_friend_netkey_idx); +} + +/******************************************************************************* + * Handling of mesh lpn events. + * It handles: + * - lpn_friendship_established_id + * - lpn_friendship_failed_id + * - lpn_friendship_terminated_id + * + * @param[in] evt Pointer to incoming lpn event. + ******************************************************************************/ +void sl_btmesh_lpn_on_event(sl_btmesh_msg_t* evt) +{ + sl_btmesh_evt_node_initialized_t *data; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + data = (sl_btmesh_evt_node_initialized_t *)&(evt->data); + if (data->provisioned) { + sl_btmesh_lpn_feature_init(); + } + break; + + case sl_btmesh_evt_node_provisioned_id: + set_configuration_timer(SL_BTMESH_LPN_TIMEOUT_AFTER_PROVISIONED_CFG_VAL); + break; + + case sl_btmesh_evt_node_model_config_changed_id: + set_configuration_timer(SL_BTMESH_LPN_TIMEOUT_AFTER_CONFIG_MODEL_CHANGED_CFG_VAL); + break; + + case sl_btmesh_evt_node_config_set_id: + set_configuration_timer(SL_BTMESH_LPN_TIMEOUT_AFTER_CONFIG_SET_CFG_VAL); + break; + + case sl_btmesh_evt_node_key_added_id: + set_configuration_timer(SL_BTMESH_LPN_TIMEOUT_AFTER_KEY_CFG_VAL); + break; + + case sl_btmesh_evt_lpn_friendship_established_id: + friend_address = evt->data.evt_lpn_friendship_established.friend_address; + sl_btmesh_lpn_on_friendship_established(friend_address); + break; + + case sl_btmesh_evt_lpn_friendship_failed_id: { + sl_btmesh_lpn_on_friendship_failed( + evt->data.evt_lpn_friendship_failed.reason); + + // try again after timer expires + sl_status_t sc = sl_simple_timer_start(&lpn_friend_find_timer, + SL_BTMESH_LPN_FRIEND_FIND_TIMEOUT_CFG_VAL, + lpn_friend_find_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start timer"); + + break; + } + + case sl_btmesh_evt_lpn_friendship_terminated_id: + sl_btmesh_lpn_on_friendship_terminated( + evt->data.evt_lpn_friendship_terminated.reason); + friend_address = 0; + if (num_mesh_proxy_conn == 0) { + // try again after timer expires + sl_status_t sc = sl_simple_timer_start(&lpn_friend_find_timer, + SL_BTMESH_LPN_FRIEND_FIND_TIMEOUT_CFG_VAL, + lpn_friend_find_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start timer"); + } + break; + + /* Proxy Events*/ + case sl_btmesh_evt_proxy_connected_id: + num_mesh_proxy_conn++; + // turn off lpn feature after GATT proxy connection is opened + sl_btmesh_lpn_feature_deinit(); + break; + + case sl_btmesh_evt_proxy_disconnected_id: + if (num_mesh_proxy_conn > 0) { + if (--num_mesh_proxy_conn == 0) { + // Initialize lpn when there is no active proxy connection + sl_btmesh_lpn_feature_init(); + } + } + break; + + default: + break; + } +} + +sl_status_t sl_btmesh_lpn_high_throughput_register(sl_btmesh_lpn_high_throughput_timer_t *handle, + uint32_t timeout, + sl_btmesh_lpn_high_throughput_operation_mode_t mode) +{ + sl_status_t retval = SL_STATUS_OK; + + handle->timeout = timeout; + handle->mode = mode; + if (lpn_high_throughput_head == NULL) { + // If head is not yet set, set this as the head + lpn_high_throughput_head = handle; + // Since head was not set, the timer is turned off as well + sl_status_t sc = sl_simple_timer_start(&lpn_high_throughput_timer, + handle->timeout, + lpn_high_throughput_timer_cb, + NULL, + false); + log_status_error_f(sc, "Failed to start timer" NL); + } else if (lpn_high_throughput_head == handle) { + // If only one element is registered, the loop below would not detect it + retval = SL_STATUS_ALREADY_EXISTS; + } else { + sl_btmesh_lpn_high_throughput_timer_t *tmp; + for (tmp = lpn_high_throughput_head; tmp->next != NULL; tmp = tmp->next) { + if (handle == tmp) { + retval = SL_STATUS_ALREADY_EXISTS; + } + } + // In case the last element is the one given + if (handle == tmp) { + retval = SL_STATUS_ALREADY_EXISTS; + } + // SL_STATUS_OK indicates that no match has been found; append to the end + if (SL_STATUS_OK == retval) { + // Put handle at the end of the list + tmp->next = handle; + } + } + // SL_STATUS_OK indicates successful append, i.e. handle is at the end of list + if (SL_STATUS_OK == retval) { + // Indicate list end + handle->next = NULL; + } + + // If the registered handler requests a faster timer that's already running, + // restart timer with the faster. + // This might also be the case for re-registering a slowing timer as well. + if (lpn_high_throughput_timer.timeout_ms > handle->timeout) { + sl_status_t sc = sl_simple_timer_start(&lpn_high_throughput_timer, + handle->timeout, + lpn_high_throughput_timer_cb, + NULL, + false); + log_status_error_f(sc, "Failed to start timer" NL); + } + return retval; +} + +sl_status_t sl_btmesh_lpn_high_throughput_unregister(sl_btmesh_lpn_high_throughput_timer_t *handle) +{ + if (lpn_high_throughput_head == NULL) { + // If no head, nothing is to be unregistered + return SL_STATUS_NOT_FOUND; + } else if (lpn_high_throughput_head == handle) { + // Special case for the head being unregistered + // This also works if only one element have been registered + lpn_high_throughput_head = lpn_high_throughput_head->next; + handle->next = NULL; + return SL_STATUS_OK; + } else { + sl_btmesh_lpn_high_throughput_timer_t *tmp; + // Find the entry to be removed and remove it + for (tmp = lpn_high_throughput_head; tmp->next != NULL; tmp = tmp->next) { + if (handle == tmp->next) { + tmp->next = tmp->next->next; + handle->next = NULL; + return SL_STATUS_OK; + } + } + } + // No element was found in the loop above + return SL_STATUS_NOT_FOUND; +} + +/***************************************************************************//** + * Establishes friendship and logs if the request fails + ******************************************************************************/ +static void lpn_establish_friendship(void) +{ + sl_status_t result; + + log_info("Trying to find a friend..." NL); + result = sl_btmesh_lpn_establish_friendship(lpn_friend_netkey_idx); + + log_status_error_f(result, "Friend not found" NL); +} + +/***************************************************************************//** + * Set the timer that delay LPN initialization to enable quick configuration + * over advertising bearer. + * + * @param[in] delay Time to set for the timer. + ******************************************************************************/ +static void set_configuration_timer(uint32_t delay) +{ + sl_status_t sc = sl_simple_timer_start(&lpn_node_configured_timer, + delay, + lpn_node_configured_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start timer"); +} + +/**************************************************************************//** + * @addtogroup btmesh_lpn_tmr_cb Timer Callbacks + * @{ + *****************************************************************************/ +static void lpn_friend_find_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + + lpn_establish_friendship(); +} + +static void lpn_node_configured_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + + if (!lpn_active) { + log_info("Trying to initialize lpn..." NL); + sl_btmesh_lpn_feature_init(); + } +} + +static void lpn_high_throughput_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + + // Execute main operation; poll friend + sl_btmesh_lpn_poll(lpn_friend_netkey_idx); + + // If all element were unregistered beforehand, simply return + if (lpn_high_throughput_head == NULL) { + return; + } + + // Find fastest timeout handler + sl_btmesh_lpn_high_throughput_timer_t *tmp; + sl_btmesh_lpn_high_throughput_timer_t *fastest = lpn_high_throughput_head; + for (tmp = lpn_high_throughput_head; + tmp != NULL; tmp = tmp->next) { + if (fastest->timeout > tmp->timeout) { + fastest = tmp; + } + } + + if (fastest->timeout < SL_BTMESH_LPN_POLL_TIMEOUT_CFG_VAL) { + // Start a timer with the timeout value + sl_status_t sc = sl_simple_timer_start(&lpn_high_throughput_timer, + fastest->timeout, + lpn_high_throughput_timer_cb, + NULL, + false); + app_assert_status_f(sc, "Failed to start timer"); + + switch (fastest->mode) { + case SL_BTMESH_LPN_HIGH_THROUGHPUT_SLOWING: + // If this is set to be slowed down, increase timeout + fastest->timeout <<= 1; + break; + default: + // Intentionally left empty + break; + } + } else { + // If the timer has a slower timeout than the default, unregister it + sl_btmesh_lpn_high_throughput_unregister(fastest); + } +} + +/** @} (end addtogroup btmesh_lpn_tmr_cb) */ + +/// @addtogroup btmesh_lpn_weak_cb Weak implementation of Callbacks +/// @{ + +SL_WEAK void sl_btmesh_lpn_on_init(void) +{ +} + +SL_WEAK void sl_btmesh_lpn_on_deinit(void) +{ +} + +SL_WEAK void sl_btmesh_lpn_on_friendship_established(uint16_t node_address) +{ + (void) node_address; +} + +SL_WEAK void sl_btmesh_lpn_on_friendship_failed(uint16_t reason) +{ + (void) reason; +} + +SL_WEAK void sl_btmesh_lpn_on_friendship_terminated(uint16_t reason) +{ + (void) reason; +} + +/// @} (end addtogroup btmesh_lpn_weak_cb) + +/** @} (end addtogroup lpn) */ diff --git a/app/btmesh/common/btmesh_lpn/sl_btmesh_lpn.h b/app/btmesh/common/btmesh_lpn/sl_btmesh_lpn.h new file mode 100644 index 00000000000..1fa9e581d44 --- /dev/null +++ b/app/btmesh/common/btmesh_lpn/sl_btmesh_lpn.h @@ -0,0 +1,188 @@ +/***************************************************************************//** + * @file + * @brief Low Power Node feature header + ******************************************************************************* + * # 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_BTMESH_LPN_H +#define SL_BTMESH_LPN_H + +#include "sl_btmesh_api.h" + +/***************************************************************************//** + * @defgroup lpn Low Power Node Component + * @brief Low Power Node feature Implementation + * This component implements Low Power Node feature. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup lpn + * @{ + ******************************************************************************/ + +/// Operational modes for the high throughput timer +typedef enum { + /// Normal, periodic operation with the provided value + SL_BTMESH_LPN_HIGH_THROUGHPUT_NORMAL, + /// Slows down over time, doubling its timeout after every expiration + SL_BTMESH_LPN_HIGH_THROUGHPUT_SLOWING +} sl_btmesh_lpn_high_throughput_operation_mode_t; + +/// Handler structure for the high throughput timer +typedef struct sl_btmesh_lpn_high_throughput_timer_s { + /// The timeout in milliseconds + uint32_t timeout; + /// The operational mode + sl_btmesh_lpn_high_throughput_operation_mode_t mode; + /// Pointer to the next registered handler + struct sl_btmesh_lpn_high_throughput_timer_s *next; +} sl_btmesh_lpn_high_throughput_timer_t; +/***************************************************************************//** + * Initialize LPN functionality. This function is called automatically by the + * LPN component. + * + ******************************************************************************/ +void sl_btmesh_lpn_feature_init(void); + +/***************************************************************************//** + * Deinitialize LPN functionality. This function is called automatically by the + * LPN component. + ******************************************************************************/ +void sl_btmesh_lpn_feature_deinit(void); + +/***************************************************************************//** + * Return if the friendship is active between LPN and friend node + * + * @return Friendship active state + * @retval true If friendship is active with a friend node + * @retval false If friendship is not established with any friend node + ******************************************************************************/ +bool sl_btmesh_lpn_is_friendship_active(void); + +/***************************************************************************//** + * Poll the Friend node for stored messages and security updates + * + * This command may be used if the application is expecting to receive messages + * at a specific time. However, it is not required for correct operation, + * because the procedure will be performed autonomously before the poll timeout + * expires. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + ******************************************************************************/ +sl_status_t sl_btmesh_lpn_poll_request(void); + +/***************************************************************************//** + * Handling of mesh lpn events. + * + * @param[in] pEvt Pointer to incoming lpn event. + ******************************************************************************/ +void sl_btmesh_lpn_on_event(sl_btmesh_msg_t *pEvt); + +/***************************************************************************//** + * Registers high throughput request + * + * @param[in] handle Pointer to the handler of the high throughput timer + * structure, provided by the user + * @param[in] timeout The timeout of this timer, in milliseconds + * @param[in] mode The mode of operation + * + * @return Status code + * @retval SL_STATUS_OK Timer successfully registered + * @retval SL_STATUS_ALREADY_EXISTS Timer is already present, list unchanged + ******************************************************************************/ +sl_status_t sl_btmesh_lpn_high_throughput_register(sl_btmesh_lpn_high_throughput_timer_t *handle, + uint32_t timeout, + sl_btmesh_lpn_high_throughput_operation_mode_t mode); + +/***************************************************************************//** + * Unregisters high throughput request + * + * @note Will not stop the already running timer if it belongs to the handler + * passed. + * + * @param[in] handle Pointer to the handler to be unregistered + * + * @return Status code + * @retval SL_STATUS_OK Timer successfully unregistered + * @retval SL_STATUS_ALREADY_EXISTS Timer was not present in the list + ******************************************************************************/ +sl_status_t sl_btmesh_lpn_high_throughput_unregister(sl_btmesh_lpn_high_throughput_timer_t *handle); + +/***************************************************************************//** + * Called when the Low Power Node is initialized. + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +void sl_btmesh_lpn_on_init(void); + +/***************************************************************************//** + * Called when the Low Power Node is deinitialized. + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +void sl_btmesh_lpn_on_deinit(void); + +/***************************************************************************//** + * Called when the Low Power Node establishes friendship with another node + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] friend_address Node address of the new friend + ******************************************************************************/ +void sl_btmesh_lpn_on_friendship_established(uint16_t friend_address); + +/***************************************************************************//** + * Called when the friendship establishment attempt of Low Power Node fails + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] reason Reason for friendship establishment failure + ******************************************************************************/ +void sl_btmesh_lpn_on_friendship_failed(uint16_t reason); + +/***************************************************************************//** + * Called when friendship that was successfully established has been terminated + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] reason Reason for friendship termination + ******************************************************************************/ +void sl_btmesh_lpn_on_friendship_terminated(uint16_t reason); + +/** @} (end addtogroup lpn) */ + +#endif /* SL_BTMESH_LPN_H */ diff --git a/app/btmesh/common/btmesh_provisionee/btmesh_provisionee_validation.lua b/app/btmesh/common/btmesh_provisionee/btmesh_provisionee_validation.lua new file mode 100644 index 00000000000..1c65b9e96cb --- /dev/null +++ b/app/btmesh/common/btmesh_provisionee/btmesh_provisionee_validation.lua @@ -0,0 +1,43 @@ +-- Provisionee validation script + +local oob_enable = slc.config('SL_BTMESH_PROVISIONEE_OOB_ENABLE_CFG_VAL') + +local no_oob = slc.config('SL_BTMESH_PROVISIONEE_AUTH_NO_OOB_CFG_VAL').value == "1" +local static_oob = slc.config('SL_BTMESH_PROVISIONEE_AUTH_STATIC_OOB_CFG_VAL').value == "1" +local output_oob = slc.config('SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_CFG_VAL').value == "1" +local input_oob = slc.config('SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_CFG_VAL').value == "1" + +local output_blink = slc.config('SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BLINK_CFG_VAL').value == "1" +local output_beep = slc.config('SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BEEP_CFG_VAL').value == "1" +local output_vibrate = slc.config('SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_VIBRATE_CFG_VAL').value == "1" +local output_numeric = slc.config('SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_NUMERIC_CFG_VAL').value == "1" +local output_alpha = slc.config('SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_ALPHA_CFG_VAL').value == "1" + +local input_push = slc.config('SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_PUSH_CFG_VAL').value == "1" +local input_twist = slc.config('SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_TWIST_CFG_VAL').value == "1" +local input_numeric = slc.config('SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_NUMERIC_CFG_VAL').value == "1" +local input_alpha = slc.config('SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_ALPHA_CFG_VAL').value == "1" + +if oob_enable.value == "1" then + if not (no_oob or static_oob or output_oob or input_oob) then + validation.error( + 'No authentication method enabled', + validation.target_for_defines({ oob_enable.id }), + 'Enable at least one authentication method (No OOB, Static OOB, Output OOB, Input OOB) or disable OOB') + end + if output_oob and + not (output_blink or output_beep or output_vibrate or output_numeric or output_alpha) then + validation.error( + 'No output method enabled', + validation.target_for_defines({ oob_enable.id }), + 'Enable at least one output method or disable Output OOB' + ) + end + if input_oob and not (input_push or input_twist or input_numeric or input_alpha) then + validation.error( + 'No input method enabled', + validation.target_for_defines({ oob_enable.id }), + 'Enable at least one input method or disable Input OOB' + ) + end +end diff --git a/app/btmesh/common/btmesh_provisionee/config/sl_btmesh_provisionee_config.h b/app/btmesh/common/btmesh_provisionee/config/sl_btmesh_provisionee_config.h new file mode 100644 index 00000000000..3f710e0a392 --- /dev/null +++ b/app/btmesh/common/btmesh_provisionee/config/sl_btmesh_provisionee_config.h @@ -0,0 +1,272 @@ +/***************************************************************************//** + * @file + * @brief Node init and provision 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_BTMESH_PROVISIONEE_CONFIG_H +#define SL_BTMESH_PROVISIONEE_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Enable logging +// 1 +#define SL_BTMESH_PROVISIONEE_LOGGING_CFG_VAL 1 + +// Automatic unprovisioned device beaconing +// Start unprovisioned device beaconing automatically with the selected bearers after node initialization is complete. +// <0=> Disable +// <1=> PB-ADV +// <2=> PB-GATT +// <3=> PB-ADV and PB-GATT +// 3 +#define SL_BTMESH_PROVISIONEE_AUTO_UNPROV_BEACONING_CFG_VAL 3 + +// Initialize provisioning records +// 0 +#define SL_BTMESH_PROVISIONEE_INIT_PROV_RECORDS_CFG_VAL 0 + +// Enable OOB (out-of-band) settings +// 1 +#define SL_BTMESH_PROVISIONEE_OOB_ENABLE_CFG_VAL 0 + +// OOB public key +// Use the ECC key stored in the persistent storage during provisioning instead of an ephemeral key. +// 1 + #define SL_BTMESH_PROVISIONEE_OOB_PUBLIC_KEY_ENABLE_CFG_VAL 0 + +// No OOB support +// Support authentication without OOB data +// 1 + #define SL_BTMESH_PROVISIONEE_AUTH_NO_OOB_CFG_VAL 1 +// + +// Static OOB support +// Support authentication with static OOB data +// 0 + #define SL_BTMESH_PROVISIONEE_AUTH_STATIC_OOB_CFG_VAL 0 +// + +// Output OOB support +// Support authentication with output OOB data +// 1 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_CFG_VAL 0 +// Maximum size <1..8> +// Maximum size of output OOB supported +// 1 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_SIZE_CFG_VAL 1 +// Blink +// 0 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BLINK_CFG_VAL 0 +// Beep +// 0 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BEEP_CFG_VAL 0 +// Vibrate +// 0 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_VIBRATE_CFG_VAL 0 +// Numeric +// 0 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_NUMERIC_CFG_VAL 0 +// Alphanumeric +// 0 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_ALPHA_CFG_VAL 0 +// + +// Input OOB support +// Support authentication with input OOB data +// 0 + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_CFG_VAL 0 +// Maximum size <1..8> +// Maximum size of input OOB supported +// 1 + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_SIZE_CFG_VAL 1 +// Push +// 0 + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_PUSH_CFG_VAL 0 +// Twist +// 0 + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_TWIST_CFG_VAL 0 +// Numeric +// 0 + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_NUMERIC_CFG_VAL 0 +// Alphanumeric +// 0 + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_ALPHA_CFG_VAL 0 +// + +// OOB Information +// Other +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_OTHER_CFG_VAL 0 +// Electronic / URI +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_URI_CFG_VAL 0 +// 2D machine-readable code +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_2D_MR_CODE_CFG_VAL 0 +// Bar code +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_BAR_CODE_CFG_VAL 0 +// Near Field Communication (NFC) +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_NFC_CFG_VAL 0 +// Number +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_NUMBER_CFG_VAL 0 +// String +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_STRING_CFG_VAL 0 + +// CBP PROV_RECORDS RFU_9 RFU_10 + +// On box +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_ON_BOX_CFG_VAL 0 +// Inside box +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_IN_BOX_CFG_VAL 0 +// On piece of paper +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_ON_PAPER_CFG_VAL 0 +// Inside manual +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_IN_MANUAL_CFG_VAL 0 +// On device +// 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_ON_DEVICE_CFG_VAL 0 +// + +// +// <<< end of configuration section >>> + +#if SL_BTMESH_PROVISIONEE_OOB_ENABLE_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_PUBLIC_KEY_ENABLE SL_BTMESH_PROVISIONEE_OOB_PUBLIC_KEY_ENABLE_CFG_VAL + #define SL_BTMESH_PROVISIONEE_AUTH_NO_OOB SL_BTMESH_PROVISIONEE_AUTH_NO_OOB_CFG_VAL + #define SL_BTMESH_PROVISIONEE_AUTH_STATIC_OOB SL_BTMESH_PROVISIONEE_AUTH_STATIC_OOB_CFG_VAL + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_CFG_VAL + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_CFG_VAL + + #define SL_BTMESH_PROVISIONEE_OOB_INFO_OTHER SL_BTMESH_PROVISIONEE_OOB_INFO_OTHER_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_INFO_URI SL_BTMESH_PROVISIONEE_OOB_INFO_URI_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_INFO_2D_MR_CODE SL_BTMESH_PROVISIONEE_OOB_INFO_2D_MR_CODE_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_INFO_BAR_CODE SL_BTMESH_PROVISIONEE_OOB_INFO_BAR_CODE_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_INFO_NFC SL_BTMESH_PROVISIONEE_OOB_INFO_NFC_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_INFO_NUMBER SL_BTMESH_PROVISIONEE_OOB_INFO_NUMBER_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_INFO_STRING SL_BTMESH_PROVISIONEE_OOB_INFO_STRING_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_INFO_ON_BOX SL_BTMESH_PROVISIONEE_OOB_INFO_ON_BOX_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_INFO_IN_BOX SL_BTMESH_PROVISIONEE_OOB_INFO_IN_BOX_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_INFO_ON_PAPER SL_BTMESH_PROVISIONEE_OOB_INFO_ON_PAPER_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_INFO_IN_MANUAL SL_BTMESH_PROVISIONEE_OOB_INFO_IN_MANUAL_CFG_VAL + #define SL_BTMESH_PROVISIONEE_OOB_INFO_ON_DEVICE SL_BTMESH_PROVISIONEE_OOB_INFO_ON_DEVICE_CFG_VAL +#else + #define SL_BTMESH_PROVISIONEE_OOB_PUBLIC_KEY_ENABLE 0 + #define SL_BTMESH_PROVISIONEE_AUTH_NO_OOB 1 + #define SL_BTMESH_PROVISIONEE_AUTH_STATIC_OOB 0 + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB 0 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB 0 + + #define SL_BTMESH_PROVISIONEE_OOB_INFO_OTHER 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_URI 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_2D_MR_CODE 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_BAR_CODE 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_NFC 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_NUMBER 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_STRING 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_ON_BOX 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_IN_BOX 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_ON_PAPER 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_IN_MANUAL 0 + #define SL_BTMESH_PROVISIONEE_OOB_INFO_ON_DEVICE 0 +#endif + +#define SL_BTMESH_PROVISIONEE_AUTH_METHODS \ + ((SL_BTMESH_PROVISIONEE_AUTH_NO_OOB << 0) \ + | (SL_BTMESH_PROVISIONEE_AUTH_STATIC_OOB << 1) \ + | (SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB << 2) \ + | (SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB << 3)) + +#define SL_BTMESH_PROVISIONEE_OOB_INFO \ + ((SL_BTMESH_PROVISIONEE_OOB_INFO_OTHER << 0) \ + | (SL_BTMESH_PROVISIONEE_OOB_INFO_URI << 1) \ + | (SL_BTMESH_PROVISIONEE_OOB_INFO_2D_MR_CODE << 2) \ + | (SL_BTMESH_PROVISIONEE_OOB_INFO_BAR_CODE << 3) \ + | (SL_BTMESH_PROVISIONEE_OOB_INFO_NFC << 4) \ + | (SL_BTMESH_PROVISIONEE_OOB_INFO_NUMBER << 5) \ + | (SL_BTMESH_PROVISIONEE_OOB_INFO_STRING << 6) \ + | (SL_BTMESH_PROVISIONEE_OOB_INFO_ON_BOX << 11) \ + | (SL_BTMESH_PROVISIONEE_OOB_INFO_IN_BOX << 12) \ + | (SL_BTMESH_PROVISIONEE_OOB_INFO_ON_PAPER << 13) \ + | (SL_BTMESH_PROVISIONEE_OOB_INFO_IN_MANUAL << 14) \ + | (SL_BTMESH_PROVISIONEE_OOB_INFO_ON_DEVICE << 15)) + +#if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_SIZE SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_SIZE_CFG_VAL + + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BLINK SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BLINK_CFG_VAL + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BEEP SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BEEP_CFG_VAL + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_VIBRATE SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_VIBRATE_CFG_VAL + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_NUMERIC SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_NUMERIC_CFG_VAL + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_ALPHA SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_ALPHA_CFG_VAL +#else + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_SIZE 0 + + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BLINK 0 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BEEP 0 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_VIBRATE 0 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_NUMERIC 0 + #define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_ALPHA 0 +#endif + +#define SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_ACTIONS \ + ((SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BLINK << 0) \ + | (SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BEEP << 1) \ + | (SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_VIBRATE << 2) \ + | (SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_NUMERIC << 3) \ + | (SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_ALPHA << 4)) + +#if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_SIZE SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_SIZE_CFG_VAL + + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_PUSH SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_PUSH_CFG_VAL + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_TWIST SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_TWIST_CFG_VAL + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_NUMERIC SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_NUMERIC_CFG_VAL + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_ALPHA SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_ALPHA_CFG_VAL +#else + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_SIZE 0 + + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_PUSH 0 + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_TWIST 0 + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_NUMERIC 0 + #define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_ALPHA 0 +#endif + +#define SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_ACTIONS \ + ((SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_PUSH << 0) \ + | (SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_TWIST << 1) \ + | (SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_NUMERIC << 2) \ + | (SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_ALPHA << 3)) + +#endif // SL_BTMESH_PROVISIONEE_CONFIG_H diff --git a/app/btmesh/common/btmesh_provisionee/sl_btmesh_provisionee.c b/app/btmesh/common/btmesh_provisionee/sl_btmesh_provisionee.c new file mode 100644 index 00000000000..cc220592a13 --- /dev/null +++ b/app/btmesh/common/btmesh_provisionee/sl_btmesh_provisionee.c @@ -0,0 +1,343 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_status.h" +#include "sl_common.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#include +#include "app_assert.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_provisionee.h" +#include "sl_btmesh_provisionee_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup provisionee + * @{ + ******************************************************************************/ + +// Suppress compiler warning of unused static function +#define SL_UNUSED __attribute__((unused)) + +#define AUTH_VAL_SIZE_MAX 32 + +static size_t auth_val_size = AUTH_VAL_SIZE_MAX; + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- +/***************************************************************************//** + * Dispatch the execution to one of the callback functions + * based on the provided input action. + * + * @param[in] input_action field from ::sl_btmesh_evt_node_input_oob_request_t + * @param[in] input_size field from ::sl_btmesh_evt_node_input_oob_request_t + ******************************************************************************/ +SL_UNUSED static void on_input_oob_request(uint8_t input_action, uint8_t input_size); + +/***************************************************************************//** + * Dispatch the execution to one of the callback functions + * based on the provided output action. + * + * @param[in] output_action field from ::sl_btmesh_evt_node_display_output_oob_t + * @param[in] data field from ::sl_btmesh_evt_node_display_output_oob_t + ******************************************************************************/ +SL_UNUSED static void on_output_oob_data(uint8_t output_action, uint8array* data); + +/***************************************************************************//** + * Convert a big endian uint8array's lowest 4 bytes to an uint32_t number + * + * @param[in] data uint8array containing the authentication value + * @return the converted number + ******************************************************************************/ +SL_UNUSED static uint32_t oob_data_to_num(uint8array *data); + +void sl_bt_provisionee_on_event(sl_bt_msg_t* evt) +{ + sl_status_t sc; + switch (SL_BT_MSG_ID(evt->header)) { + case sl_bt_evt_system_boot_id: + #if SL_BTMESH_PROVISIONEE_OOB_ENABLE_CFG_VAL + sc = sl_btmesh_node_init_oob(SL_BTMESH_PROVISIONEE_OOB_PUBLIC_KEY_ENABLE, + SL_BTMESH_PROVISIONEE_AUTH_METHODS, + SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_ACTIONS, + SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_SIZE, + SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_ACTIONS, + SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_SIZE, + SL_BTMESH_PROVISIONEE_OOB_INFO); + #else + sc = sl_btmesh_node_init(); + #endif + log_status_error_f(sc, "Initialization failed" NL); + sl_btmesh_provisionee_on_init(sc); + break; + + default: + break; + } +} + +void sl_btmesh_provisionee_on_event(sl_btmesh_msg_t* evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + if (!(evt->data.evt_node_initialized.provisioned)) { + sl_status_t sc; + #if SL_BTMESH_PROVISIONEE_INIT_PROV_RECORDS_CFG_VAL + sc = sl_btmesh_node_init_provisioning_records(); + app_assert_status_f(sc, "Failed to init provisioning records"); + #endif + #if SL_BTMESH_PROVISIONEE_AUTO_UNPROV_BEACONING_CFG_VAL + sc = sl_btmesh_node_start_unprov_beaconing(SL_BTMESH_PROVISIONEE_AUTO_UNPROV_BEACONING_CFG_VAL); + app_assert_status_f(sc, "Failed to start unprovisioned beaconing"); + #endif + } + break; + + #if (SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB || SL_BTMESH_PROVISIONEE_AUTH_STATIC_OOB) + case sl_btmesh_evt_node_start_received_id: + auth_val_size = evt->data.evt_node_start_received.algorithm == 0 ? 16 : 32; + break; + #endif + + #if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB + case sl_btmesh_evt_node_display_output_oob_id: + on_output_oob_data(evt->data.evt_node_display_output_oob.output_action, + &(evt->data.evt_node_display_output_oob.data)); + break; + #endif + + #if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB + case sl_btmesh_evt_node_input_oob_request_id: + on_input_oob_request(evt->data.evt_node_input_oob_request.input_action, + evt->data.evt_node_input_oob_request.input_size); + break; + #endif + + #if SL_BTMESH_PROVISIONEE_AUTH_STATIC_OOB + case sl_btmesh_evt_node_static_oob_request_id: + sl_btmesh_on_static_oob_request(auth_val_size); + break; + #endif + default: + break; + } +} + +sl_status_t sl_btmesh_provisionee_input_oob_num(uint32_t oob_num) +{ + app_assert(auth_val_size >= 4, "auth_val_size should be at least 4."); + app_assert(auth_val_size <= AUTH_VAL_SIZE_MAX, "auth_val_size should be at most AUTH_VAL_SIZE_MAX."); + uint8_t auth_val_buff[AUTH_VAL_SIZE_MAX] = { 0 }; + uint8_t last_index = auth_val_size - 1; + for (uint8_t i = 0; i < 4; i++) { + auth_val_buff[last_index - i] = (oob_num >> (8 * i)) & 0xFF; + } + return sl_btmesh_node_send_input_oob_request_response(auth_val_size, auth_val_buff); +} + +sl_status_t sl_btmesh_provisionee_input_oob_str(char* oob_str) +{ + uint8_t auth_val_buff[AUTH_VAL_SIZE_MAX] = { 0 }; + strncpy((char*)auth_val_buff, oob_str, AUTH_VAL_SIZE_MAX); + return sl_btmesh_node_send_input_oob_request_response(auth_val_size, auth_val_buff); +} + +static void on_input_oob_request(uint8_t input_action, uint8_t input_size) +{ + (void)input_size; + switch (input_action) { + #if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_PUSH + case sl_btmesh_node_oob_input_action_push: + sl_btmesh_on_input_oob_request_push(input_size); + break; + #endif + + #if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_TWIST + case sl_btmesh_node_oob_input_action_twist: + sl_btmesh_on_input_oob_request_twist(input_size); + break; + #endif + + #if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_NUMERIC + case sl_btmesh_node_oob_input_action_numeric: + sl_btmesh_on_input_oob_request_numeric(input_size); + break; + #endif + + #if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_ALPHA + case sl_btmesh_node_oob_input_action_alpha: + sl_btmesh_on_input_oob_request_alphanumeric(input_size); + break; + #endif + + default: + break; + } +} + +static uint32_t oob_data_to_num(uint8array *data) +{ + app_assert(data->len >= 4, "Data should be at least 4 byte long"); + uint32_t num = 0; + uint8_t last_index = data->len - 1; + for (uint8_t i = 0; i < 4; i++) { + num |= data->data[last_index - i] << (8 * i); + } + return num; +} + +static void on_output_oob_data(uint8_t output_action, uint8array* data) +{ + (void)data; + switch (output_action) { + #if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BLINK + case sl_btmesh_node_oob_output_action_blink: + sl_btmesh_on_output_oob_blink(oob_data_to_num(data)); + break; + #endif + + #if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BEEP + case sl_btmesh_node_oob_output_action_beep: + sl_btmesh_on_output_oob_beep(oob_data_to_num(data)); + break; + #endif + + #if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_VIBRATE + case sl_btmesh_node_oob_output_action_vibrate: + sl_btmesh_on_output_oob_vibrate(oob_data_to_num(data)); + break; + #endif + + #if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_NUMERIC + case sl_btmesh_node_oob_output_action_numeric: + sl_btmesh_on_output_oob_numeric(oob_data_to_num(data)); + break; + #endif + + #if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_ALPHA + case sl_btmesh_node_oob_output_action_alpha: + sl_btmesh_on_output_oob_alphanumeric((char*)(data->data)); + break; + #endif + + default: + break; + } +} + +SL_WEAK void sl_btmesh_provisionee_on_init(sl_status_t result) +{ + (void)result; +} + +#if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_PUSH +SL_WEAK void sl_btmesh_on_input_oob_request_push(uint8_t input_size) +{ + (void)input_size; + log_info("Input OOB request push" NL); +} +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_TWIST +SL_WEAK void sl_btmesh_on_input_oob_request_twist(uint8_t input_size) +{ + (void)input_size; + log_info("Input OOB request twist" NL); +} +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_NUMERIC +SL_WEAK void sl_btmesh_on_input_oob_request_numeric(uint8_t input_size) +{ + (void)input_size; + log_info("Input OOB request numeric" NL); +} +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_ALPHA +SL_WEAK void sl_btmesh_on_input_oob_request_alpha(uint8_t input_size) +{ + (void)input_size; + log_info("Input OOB request alphanumeric" NL); +} +#endif + +#if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BLINK +SL_WEAK void sl_btmesh_on_output_oob_blink(uint32_t oob_num) +{ + log_info("Output OOB blink: %lu" NL, oob_num); +} +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BEEP +SL_WEAK void sl_btmesh_on_output_oob_beep(uint32_t oob_num) +{ + log_info("Output OOB beep: %lu" NL, oob_num); +} +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_VIBRATE +SL_WEAK void sl_btmesh_on_output_oob_vibrate(uint32_t oob_num) +{ + log_info("Output OOB vibrate: %lu" NL, oob_num); +} +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_NUMERIC +SL_WEAK void sl_btmesh_on_output_oob_numeric(uint32_t oob_num) +{ + log_info("Output OOB numeric: %lu" NL, oob_num); +} +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_ALPHA +SL_WEAK void sl_btmesh_on_output_oob_alphanumeric(char* oob_str) +{ + log_info("Output OOB alphanumeric: %s" NL, oob_str); +} +#endif + +#if SL_BTMESH_PROVISIONEE_AUTH_STATIC_OOB +SL_WEAK void sl_btmesh_on_static_oob_request(size_t oob_size) +{ + (void)oob_size; + log_info("Static OOB request" NL); +} +#endif + +/** @} (end addtogroup provisionee) */ diff --git a/app/btmesh/common/btmesh_provisionee/sl_btmesh_provisionee.h b/app/btmesh/common/btmesh_provisionee/sl_btmesh_provisionee.h new file mode 100644 index 00000000000..d8d4ef9a28e --- /dev/null +++ b/app/btmesh/common/btmesh_provisionee/sl_btmesh_provisionee.h @@ -0,0 +1,237 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # 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_BTMESH_PROVISIONEE_H +#define SL_BTMESH_PROVISIONEE_H + +#include "sl_btmesh_api.h" +#include "sl_btmesh_provisionee_config.h" + +/***************************************************************************//** + * @defgroup provisionee + * @brief + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup provisionee + * @{ + ******************************************************************************/ + +#if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_PUSH +/***************************************************************************//** + * This function is called when input oob authentication is needed with push action. + * Respond to it by calling the sl_btmesh_provisionee_input_oob_num() function. + * + * @param[in] input_size Input OOB size + * + * This is a callback which should be implemented in the application. + * @note If no implementation is provided in the application then a default weak + * implementation is provided which logs that it was called. + ******************************************************************************/ +void sl_btmesh_on_input_oob_request_push(uint8_t input_size); +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_TWIST +/***************************************************************************//** + * This function is called when input oob authentication is needed with twist action. + * Respond to it by calling the sl_btmesh_provisionee_input_oob_num() function. + * + * @param[in] input_size Input OOB size + * + * This is a callback which should be implemented in the application. + * @note If no implementation is provided in the application then a default weak + * implementation is provided which logs that it was called. + ******************************************************************************/ +void sl_btmesh_on_input_oob_request_twist(uint8_t input_size); +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_NUMERIC +/***************************************************************************//** + * This function is called when input oob authentication is needed with + * numeric input action. + * Respond to it by calling the sl_btmesh_provisionee_input_oob_num() function. + * + * @param[in] input_size Input OOB size + * + * This is a callback which should be implemented in the application. + * @note If no implementation is provided in the application then a default weak + * implementation is provided which logs that it was called. + ******************************************************************************/ +void sl_btmesh_on_input_oob_request_numeric(uint8_t input_size); +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_ALPHA +/***************************************************************************//** + * This function is called when input oob authentication is needed with + * alphanumeric input action. + * Respond to it by calling the sl_btmesh_provisionee_input_oob_str() function. + * + * @param[in] input_size Input OOB size + * + * This is a callback which should be implemented in the application. + * @note If no implementation is provided in the application then a default weak + * implementation is provided which logs that it was called. + ******************************************************************************/ +void sl_btmesh_on_input_oob_request_alphanumeric(uint8_t input_size); + +/***************************************************************************//** + * This function must be called when the alphanumeric input action completed. + * + * @param[in] oob_str the string containing the alphanumeric authentication value + * @return sl_status_t + ******************************************************************************/ +sl_status_t sl_btmesh_provisionee_input_oob_str(char* oob_str); +#endif + +#if SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_PUSH \ + || SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_TWIST \ + || SL_BTMESH_PROVISIONEE_AUTH_INPUT_OOB_NUMERIC +/***************************************************************************//** + * This function must be called when a numeric input action completed. + * + * @param[in] oob_num the number containing the authentication value + * @return sl_status_t + ******************************************************************************/ +sl_status_t sl_btmesh_provisionee_input_oob_num(uint32_t oob_num); +#endif + +#if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BLINK +/***************************************************************************//** + * This function is called when output oob authentication is needed with + * blink output action. + * + * @param[in] oob_num number to output by blinking + * + * This is a callback which should be implemented in the application. + * @note If no implementation is provided in the application then a default weak + * implementation is provided which logs the oob_num parameter. + ******************************************************************************/ +void sl_btmesh_on_output_oob_blink(uint32_t oob_num); +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_BEEP +/***************************************************************************//** + * This function is called when output oob authentication is needed with + * beep output action. + * + * @param[in] oob_num number to output by beeping + * + * This is a callback which should be implemented in the application. + * @note If no implementation is provided in the application then a default weak + * implementation is provided which logs the oob_num parameter. + ******************************************************************************/ +void sl_btmesh_on_output_oob_beep(uint32_t oob_num); +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_VIBRATE +/***************************************************************************//** + * This function is called when output oob authentication is needed with + * vibrate output action. + * + * @param[in] oob_num number to output by vibrating + * + * This is a callback which should be implemented in the application. + * @note If no implementation is provided in the application then a default weak + * implementation is provided which logs the oob_num parameter. + ******************************************************************************/ +void sl_btmesh_on_output_oob_vibrate(uint32_t oob_num); +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_NUMERIC +/***************************************************************************//** + * This function is called when output oob authentication is needed with + * numeric output action. + * + * @param[in] oob_num number to display + * + * This is a callback which should be implemented in the application. + * @note If no implementation is provided in the application then a default weak + * implementation is provided which logs the oob_num parameter. + ******************************************************************************/ +void sl_btmesh_on_output_oob_numeric(uint32_t oob_num); +#endif +#if SL_BTMESH_PROVISIONEE_AUTH_OUTPUT_OOB_ALPHA +/***************************************************************************//** + * This function is called when output oob authentication is needed with + * alphanumeric output action. + * + * @param[in] oob_str string to display + * + * This is a callback which should be implemented in the application. + * @note If no implementation is provided in the application then a default weak + * implementation is provided which logs the oob_num parameter. + ******************************************************************************/ +void sl_btmesh_on_output_oob_alphanumeric(char* oob_str); +#endif + +#if SL_BTMESH_PROVISIONEE_AUTH_STATIC_OOB +/***************************************************************************//** + * This function is called when static oob authentication is needed. + * Respond to it by calling the sl_btmesh_node_send_static_oob_request_response() + * function. + * + * @param[in] oob_size size of the required AuthValue buffer + * + * This is a callback which should be implemented in the application. + * @note If no implementation is provided in the application then a default weak + * implementation is provided which logs that it was called. + ******************************************************************************/ +void sl_btmesh_on_static_oob_request(size_t oob_size); +#endif + +/***************************************************************************//** + * This function is called after the provisionee called the sl_btmesh_node_init() + * or the sl_btmesh_node_init_oob() function. + * + * @param[in] result return value of the function call + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +void sl_btmesh_provisionee_on_init(sl_status_t result); + +/***************************************************************************//** + * Handle BT Mesh events for the provisionee. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_btmesh_provisionee_on_event(sl_btmesh_msg_t *evt); + +/***************************************************************************//** + * Handle BLE events for the provisionee. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_bt_provisionee_on_event(sl_bt_msg_t* evt); + +/** @} (end addtogroup provisionee) */ + +#endif /* SL_BTMESH_PROVISIONEE_H */ diff --git a/app/btmesh/common/btmesh_provisioning_decorator/config/sl_btmesh_provisioning_decorator_config.h b/app/btmesh/common/btmesh_provisioning_decorator/config/sl_btmesh_provisioning_decorator_config.h new file mode 100644 index 00000000000..1778262a8cd --- /dev/null +++ b/app/btmesh/common/btmesh_provisioning_decorator/config/sl_btmesh_provisioning_decorator_config.h @@ -0,0 +1,51 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_PROVISIONING_DECORATOR_CONFIG_H +#define SL_BTMESH_PROVISIONING_DECORATOR_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Provisioning decorator configuration + +// Enable Logging +// Default: 1 +// Enable or disable Logging for Provisioning Decorator specific messages for this component. +#define SL_BTMESH_PROVISIONING_DECORATOR_LOGGING_CFG_VAL (1) + +// + +// Timeout for system restart after provisioning fails +#define SL_BTMESH_PROVISIONING_DECORATOR_RESTART_TIMER_TIMEOUT_CFG_VAL (2000) + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_PROVISIONING_DECORATOR_CONFIG_H diff --git a/app/btmesh/common/btmesh_provisioning_decorator/sl_btmesh_provisioning_decorator.c b/app/btmesh/common/btmesh_provisioning_decorator/sl_btmesh_provisioning_decorator.c new file mode 100644 index 00000000000..5703a2662af --- /dev/null +++ b/app/btmesh/common/btmesh_provisioning_decorator/sl_btmesh_provisioning_decorator.c @@ -0,0 +1,210 @@ +/***************************************************************************//** + * @file + * @brief Provisioning decorator module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#include "em_common.h" +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_provisioning_decorator.h" +#include "sl_btmesh_provisioning_decorator_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup ProvisioningDecorator + * @{ + ******************************************************************************/ + +/// High Priority +#define HIGH_PRIORITY 0 +/// No Timer Options +#define NO_FLAGS 0 +/// Callback has no parameters +#define NO_CALLBACK_DATA (void *)NULL + +// periodic timer handle +static sl_simple_timer_t restart_timer; +// periodic timer callback +static void prov_decor_restart_timer_cb(sl_simple_timer_t *handle, + void *data); + +// ----------------------------------------------------------------------------- +// Provisioning Callbacks + +/******************************************************************************* + * Called at node initialization time to provide provisioning information + * + * @param[in] provisioned true: provisioned, false: unprovisioned + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +SL_WEAK void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + (void) provisioned; + (void) address; + (void) iv_index; +} + +/******************************************************************************* + * Called when the Provisioning starts + * + * @param[in] result Result code. 0: success, non-zero: error + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +SL_WEAK void sl_btmesh_on_node_provisioning_started(uint16_t result) +{ + (void) result; +} + +/******************************************************************************* + * Called when the Provisioning finishes successfully + * + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +SL_WEAK void sl_btmesh_on_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + (void) address; + (void) iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + * + * @param[in] result Result code. 0: success, non-zero: error + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +SL_WEAK void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + (void) result; +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Handling of Provisioning Decorator stack events. + * + * @param[in] evt Event type + ******************************************************************************/ +void sl_btmesh_handle_provisioning_decorator_event(sl_btmesh_msg_t *evt) +{ + if (NULL == evt) { + return; + } + + // Handle events + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + sl_btmesh_on_provision_init_status(evt->data.evt_node_initialized.provisioned, + evt->data.evt_node_initialized.address, + evt->data.evt_node_initialized.iv_index); + break; + + case sl_btmesh_evt_node_provisioning_started_id: + sl_btmesh_on_node_provisioning_started(evt->data.evt_node_provisioning_started.result); + break; + + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_on_node_provisioned(evt->data.evt_node_provisioned.address, + evt->data.evt_node_provisioned.iv_index); + break; + + case sl_btmesh_evt_node_provisioning_failed_id: { + sl_btmesh_on_node_provisioning_failed(evt->data.evt_node_provisioning_failed.result); + + log_info("BT mesh system reset timer is started with %d ms timeout." NL, + SL_BTMESH_PROVISIONING_DECORATOR_RESTART_TIMER_TIMEOUT_CFG_VAL); + + sl_status_t sc = + sl_simple_timer_start(&restart_timer, + SL_BTMESH_PROVISIONING_DECORATOR_RESTART_TIMER_TIMEOUT_CFG_VAL, + prov_decor_restart_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start timer"); + break; + } + + default: + break; + } +} + +/***************************************************************************//** + * Called when the restart timer expires. + * + * @param[in] handle Pointer to the timer handle + * @param[in] data Pointer to callback data + ******************************************************************************/ +static void prov_decor_restart_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + sl_bt_system_reset(0); +} + +/** @} (end addtogroup ProvisioningDecorator) */ diff --git a/app/btmesh/common/btmesh_provisioning_decorator/sl_btmesh_provisioning_decorator.h b/app/btmesh/common/btmesh_provisioning_decorator/sl_btmesh_provisioning_decorator.h new file mode 100644 index 00000000000..649d8bdae45 --- /dev/null +++ b/app/btmesh/common/btmesh_provisioning_decorator/sl_btmesh_provisioning_decorator.h @@ -0,0 +1,102 @@ +/***************************************************************************//** + * @file + * @brief provisiong_decorator.h + ******************************************************************************* + * # 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_BTMESH_PROVISIONING_DECORATOR_H +#define SL_BTMESH_PROVISIONING_DECORATOR_H + +/***************************************************************************//** + * Callbacks + ******************************************************************************/ + +/***************************************************************************//** + * Called at node initialization time to provide provisioning information + * + * @param[in] provisioned true: provisioned, false: unprovisioned + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index); + +/***************************************************************************//** + * Called when the Provisioning starts + * + * @param[in] result Result code. 0: success, non-zero: error + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_started(uint16_t result); + +/***************************************************************************//** + * Called when the Provisioning finishes successfully + * + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +void sl_btmesh_on_node_provisioned(uint16_t address, + uint32_t iv_index); + +/***************************************************************************//** + * Called when the Provisioning fails + * + * @param[in] result Result code. 0: success, non-zero: error + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result); + +/***************************************************************************//** + * Functions which are automatically called when the component is selected + ******************************************************************************/ +/***************************************************************************//** + * Handling of Provisioning Decorator stack events. + * + * @param[in] evt Pointer to the event type + ******************************************************************************/ +void sl_btmesh_handle_provisioning_decorator_event(sl_btmesh_msg_t *evt); + +#endif // SL_BTMESH_PROVISIONING_DECORATOR_H diff --git a/app/btmesh/common/btmesh_remote_provisioning_client/btmesh_remote_provisioning_client.dcd b/app/btmesh/common/btmesh_remote_provisioning_client/btmesh_remote_provisioning_client.dcd new file mode 100644 index 00000000000..194a982d4e7 --- /dev/null +++ b/app/btmesh/common/btmesh_remote_provisioning_client/btmesh_remote_provisioning_client.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0005", "name":"Remote Provisioning Client"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_remote_provisioning_client/config/sl_btmesh_remote_provisioning_client_config.h b/app/btmesh/common/btmesh_remote_provisioning_client/config/sl_btmesh_remote_provisioning_client_config.h new file mode 100644 index 00000000000..a7fb54be020 --- /dev/null +++ b/app/btmesh/common/btmesh_remote_provisioning_client/config/sl_btmesh_remote_provisioning_client_config.h @@ -0,0 +1,46 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Remote Provisioning Client Component - Default Configuration + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_REMOTE_PROVISIONING_CLIENT_CONFIG_H +#define SL_BTMESH_REMOTE_PROVISIONING_CLIENT_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Remote Provisioning Client configuration + +// Enable Logging +// Default: 0 +// Enable / disable Logging for remote provisioning client model specific messages for this component +#define SL_BTMESH_REMOTE_PROVISIONING_CLIENT_LOGGING_CFG_VAL 0 + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_REMOTE_PROVISIONING_CLIENT_CONFIG_H diff --git a/app/btmesh/common/btmesh_remote_provisioning_client/sl_btmesh_remote_provisioning_client.c b/app/btmesh/common/btmesh_remote_provisioning_client/sl_btmesh_remote_provisioning_client.c new file mode 100644 index 00000000000..3bbd858118f --- /dev/null +++ b/app/btmesh/common/btmesh_remote_provisioning_client/sl_btmesh_remote_provisioning_client.c @@ -0,0 +1,88 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Remote Provisioning Client Component + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_btmesh_api.h" +#include "sl_bt_api.h" +#include "sl_status.h" + +#include "app_assert.h" + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_remote_provisioning_client_config.h" +#include "sl_btmesh_remote_provisioning_client.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup remote_provisioning_client BT Mesh Remote Provisioning Client + * @brief BT Mesh Remote provisioning client component implementation + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Initialize Remote Provisioning Client component + ******************************************************************************/ +static void mesh_remote_provisioning_client_init(void); + +/******************************************************************************* + * Handle Remote Provisioning Client events + ******************************************************************************/ +void sli_btmesh_handle_remote_provisioning_client_on_event(const sl_btmesh_msg_t *evt) +{ + if (NULL == evt) { + return; + } + + // Handle events + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_prov_initialized_id: + mesh_remote_provisioning_client_init(); + break; + + default: + break; + } +} + +static void mesh_remote_provisioning_client_init(void) +{ + sl_status_t sc = sl_btmesh_remote_provisioning_client_init(); + + app_assert_status_f(sc, "Failed to initialize remote provisioning client"); + + log_info("Remote provisioning client initialized" NL); +} + +/** @} (end addtogroup remote_provisioning_client) */ diff --git a/app/btmesh/common/btmesh_remote_provisioning_client/sl_btmesh_remote_provisioning_client.h b/app/btmesh/common/btmesh_remote_provisioning_client/sl_btmesh_remote_provisioning_client.h new file mode 100644 index 00000000000..f9d090c2d0e --- /dev/null +++ b/app/btmesh/common/btmesh_remote_provisioning_client/sl_btmesh_remote_provisioning_client.h @@ -0,0 +1,46 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Remote Provisioning Client Component + ******************************************************************************* + * # 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_BTMESH_REMOTE_PROVISIONING_CLIENT_H +#define SL_BTMESH_REMOTE_PROVISIONING_CLIENT_H + +#include "sl_btmesh_api.h" + +/***************************************************************************//** + * Handle Remote Provisioning Client events + * + * This function is called automatically by Universal Configurator after + * enabling the component + * + * @param[in] evt Pointer to incoming event + ******************************************************************************/ +void sli_btmesh_handle_remote_provisioning_client_on_event(const sl_btmesh_msg_t *evt); + +#endif // SL_BTMESH_REMOTE_PROVISIONING_CLIENT_H diff --git a/app/btmesh/common/btmesh_remote_provisioning_server/btmesh_remote_provisioning_server.dcd b/app/btmesh/common/btmesh_remote_provisioning_server/btmesh_remote_provisioning_server.dcd new file mode 100644 index 00000000000..9de275160bf --- /dev/null +++ b/app/btmesh/common/btmesh_remote_provisioning_server/btmesh_remote_provisioning_server.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0004", "name":"Remote Provisioning Server"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_remote_provisioning_server/config/sl_btmesh_remote_provisioning_server_config.h b/app/btmesh/common/btmesh_remote_provisioning_server/config/sl_btmesh_remote_provisioning_server_config.h new file mode 100644 index 00000000000..508116fb009 --- /dev/null +++ b/app/btmesh/common/btmesh_remote_provisioning_server/config/sl_btmesh_remote_provisioning_server_config.h @@ -0,0 +1,56 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Remote Provisioning Server Component - Default Configuration + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_REMOTE_PROVISIONING_SERVER_CONFIG_H +#define SL_BTMESH_REMOTE_PROVISIONING_SERVER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +#define REMOTE_PROVISIONING_SERVER_ADVERTISING_BEARER 1 +#define REMOTE_PROVISIONING_SERVER_GATT_BEARER 2 + +// Remote Provisioning Server configuration + +// Default Bearer Type +// Advertising Bearer +// GATT bearer +// Default: REMOTE_PROVISIONING_SERVER_ADVERTISING_BEARER +// Set default bearer to be used in remote provisioning +#define SL_BTMESH_REMOTE_PROVISIONING_SERVER_BEARER_TYPE REMOTE_PROVISIONING_SERVER_ADVERTISING_BEARER + +// Enable Logging +// Default: 0 +// Enable / disable Logging for remote provisioning server model specific messages for this component +#define SL_BTMESH_REMOTE_PROVISIONING_SERVER_LOGGING_CFG_VAL 0 + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_REMOTE_PROVISIONING_SERVER_CONFIG_H diff --git a/app/btmesh/common/btmesh_remote_provisioning_server/sl_btmesh_remote_provisioning_server.c b/app/btmesh/common/btmesh_remote_provisioning_server/sl_btmesh_remote_provisioning_server.c new file mode 100644 index 00000000000..286c9e10dd4 --- /dev/null +++ b/app/btmesh/common/btmesh_remote_provisioning_server/sl_btmesh_remote_provisioning_server.c @@ -0,0 +1,96 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Remote Provisioning Server Component + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_btmesh_api.h" +#include "sl_bt_api.h" +#include "sl_status.h" + +#include "app_assert.h" + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_remote_provisioning_server_config.h" +#include "sl_btmesh_remote_provisioning_server.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup remote_provisioning_server BT Mesh Remote Provisioning Server + * @brief BT Mesh Remote provisioning server component implementation + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Initialize Remote Provisioning Server component + ******************************************************************************/ +static void mesh_remote_provisioning_server_init(void); + +/******************************************************************************* + * Handle Remote Provisioning Server events + ******************************************************************************/ +void sli_btmesh_handle_remote_provisioning_server_on_event(const sl_btmesh_msg_t *evt) +{ + if (NULL == evt) { + return; + } + + // Handle events + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + mesh_remote_provisioning_server_init(); + } + break; + + case sl_btmesh_evt_node_provisioned_id: + mesh_remote_provisioning_server_init(); + break; + + default: + break; + } +} + +static void mesh_remote_provisioning_server_init(void) +{ + sl_status_t sc = sl_btmesh_remote_provisioning_server_init(); + app_assert_status_f(sc, "Failed to initialize remote provisioning server"); + + sc = sl_btmesh_remote_provisioning_server_set_default_bearer(SL_BTMESH_REMOTE_PROVISIONING_SERVER_BEARER_TYPE); + app_assert_status_f(sc, "Failed to set default bearer"); + + log_info("Remote provisining server initialized" NL); +} + +/** @} (end addtogroup remote_provisioning_server) */ diff --git a/app/btmesh/common/btmesh_remote_provisioning_server/sl_btmesh_remote_provisioning_server.h b/app/btmesh/common/btmesh_remote_provisioning_server/sl_btmesh_remote_provisioning_server.h new file mode 100644 index 00000000000..ad8a123b62f --- /dev/null +++ b/app/btmesh/common/btmesh_remote_provisioning_server/sl_btmesh_remote_provisioning_server.h @@ -0,0 +1,46 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Remote Provisioning Server Component + ******************************************************************************* + * # 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_BTMESH_REMOTE_PROVISIONING_SERVER_H +#define SL_BTMESH_REMOTE_PROVISIONING_SERVER_H + +#include "sl_btmesh_api.h" + +/***************************************************************************//** + * Handle Remote Provisioning Server events + * + * This function is called automatically by Universal Configurator after + * enabling the component + * + * @param[in] evt Pointer to incoming event + ******************************************************************************/ +void sli_btmesh_handle_remote_provisioning_server_on_event(const sl_btmesh_msg_t *evt); + +#endif // SL_BTMESH_REMOTE_PROVISIONING_SERVER_H diff --git a/app/btmesh/common/btmesh_scene_client/btmesh_scene_client.dcd b/app/btmesh/common/btmesh_scene_client/btmesh_scene_client.dcd new file mode 100644 index 00000000000..901f0bdf9d2 --- /dev/null +++ b/app/btmesh/common/btmesh_scene_client/btmesh_scene_client.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1205", "name":"Scene Client"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_scene_client/config/sl_btmesh_scene_client_config.h b/app/btmesh/common/btmesh_scene_client/config/sl_btmesh_scene_client_config.h new file mode 100644 index 00000000000..bd9747a6423 --- /dev/null +++ b/app/btmesh/common/btmesh_scene_client/config/sl_btmesh_scene_client_config.h @@ -0,0 +1,58 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_SCENE_CLIENT_CONFIG_H +#define SL_BTMESH_SCENE_CLIENT_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Scene Client configuration + +// Scene model restransmission count +// Default: 3 +// Scene model restransmission count (How many times Scene model messages are to be sent out for reliability). +#define SL_BTMESH_SCENE_CLIENT_RETRANSMISSION_COUNT_CFG_VAL (3) + +// Scene model restransmission timeout +// Default: 50 +// Scene model restransmission timeout. +#define SL_BTMESH_SCENE_CLIENT_RETRANSMISSION_TIMEOUT_CFG_VAL (50) + +// Enable Logging +// Default: 1 +// Enable / disable Logging for Scene Client model specific messages for this component. +#define SL_BTMESH_SCENE_CLIENT_LOGGING_CFG_VAL (1) + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_SCENE_CLIENT_CONFIG_H diff --git a/app/btmesh/common/btmesh_scene_client/sl_btmesh_scene_client.c b/app/btmesh/common/btmesh_scene_client/sl_btmesh_scene_client.c new file mode 100644 index 00000000000..8f8367f02c2 --- /dev/null +++ b/app/btmesh/common/btmesh_scene_client/sl_btmesh_scene_client.c @@ -0,0 +1,209 @@ +/***************************************************************************//** + * @file + * @brief BT mesh scene client module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "em_common.h" +#include "sl_status.h" + +#include "sl_btmesh_api.h" +#include "sl_bt_api.h" +#include "sl_btmesh_dcd.h" + +#include "app_assert.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_scene_client_config.h" +#include "sl_btmesh_scene_client.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup Scene Client + * @{ + ******************************************************************************/ + +/// High Priority +#define HIGH_PRIORITY 0 +/// Callback has not parameters +#define NO_CALLBACK_DATA (void *)NULL +/// Immediate transition time is 0 seconds +#define IMMEDIATE 0 +/// Parameter ignored for publishing +#define IGNORED 0 +/// No flags used for message +#define NO_FLAGS 0 +/// Delay unit value for request for ctl messages in millisecond +#define REQ_DELAY_MS 50 + +/// Address zero is used in scene client commands to indicate that +/// message should be published +static const uint16_t PUBLISH_ADDRESS = 0x0000; + +/// currently selected scene +static uint16_t scene_number = 0; +/// number of scene requests to be sent +static uint8_t scene_request_count; +/// scene transaction identifier +static uint8_t scene_trid = 0; + +/// periodic timer handle +static sl_simple_timer_t app_scene_retransmission_timer; + +/// periodic timer callback +static void scene_retransmission_timer_cb(sl_simple_timer_t *handle, + void *data); + +/***************************************************************************//** + * This function publishes one scene recall request to recall selected scene. + * Global variable scene_number holds the latest desired scene state. + * + * param[in] retrans Indicates if this is the first request or a retransmission, + * possible values are 0 = first request, 1 = retransmission. + * + * @note This application sends multiple scene requests for each + * very long button press to improve reliability. + * The transaction ID is not incremented in case of a retransmission. + ******************************************************************************/ +static void send_scene_recall_request(uint8_t retrans) +{ + // Increment transaction ID for each request, unless it's a retransmission + if (retrans == 0) { + scene_trid++; + } + + // Delay for the request is calculated so that the last request will have + // a zero delay and each of the previous request have delay that increases + // in 50 ms steps. For example, when using three scene requests + // per button press the delays are set as 100, 50, 0 ms + uint16_t delay = (scene_request_count - 1) * REQ_DELAY_MS; + + sl_status_t sc = sl_btmesh_scene_client_recall(PUBLISH_ADDRESS, + BTMESH_SCENE_CLIENT_MAIN, + scene_number, + IGNORED, + NO_FLAGS, + scene_trid, + IMMEDIATE, + delay); + + if (SL_STATUS_OK == sc) { + log_info("Scene request sent, trid = %u, delay = %u" NL, scene_trid, delay); + } else { + log_btmesh_status_f(sc, "Scene recall failed" NL); + } + + // Keep track of how many requests has been sent + if (scene_request_count > 0) { + scene_request_count--; + } +} + +/******************************************************************************* + * This function select scene and send it to the server. + * + * @param[in] scene_to_recall Scene to recall, possible values 1-255. + * + ******************************************************************************/ +void sl_btmesh_select_scene(uint8_t scene_to_recall) +{ + // Scene number 0 is prohibited + if (scene_to_recall == 0) { + return; + } + + scene_number = scene_to_recall; + + // Recall scene using Scene Client model + log_info("Recall scene number %u" NL, scene_number); + // Request is sent multiple times to improve reliability + scene_request_count = SL_BTMESH_SCENE_CLIENT_RETRANSMISSION_COUNT_CFG_VAL; + + send_scene_recall_request(0); // Send the first request + + // If there are more requests to send, start a repeating soft timer + // to trigger retransmission of the request after 50 ms delay + if (scene_request_count > 0) { + sl_status_t sc = sl_simple_timer_start(&app_scene_retransmission_timer, + SL_BTMESH_SCENE_CLIENT_RETRANSMISSION_TIMEOUT_CFG_VAL, + scene_retransmission_timer_cb, + NO_CALLBACK_DATA, + true); + app_assert_status_f(sc, "Failed to start periodic timer"); + } +} + +/**************************************************************************//** + * Handle Sensor Server events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt pointer to event descriptor + *****************************************************************************/ +void sl_btmesh_handle_scene_client_on_event(sl_btmesh_msg_t *evt) +{ + sl_status_t sc; + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + sc = sl_btmesh_scene_client_init(BTMESH_SCENE_CLIENT_MAIN); + app_assert_status_f(sc, "Failed to init scene client model"); + break; + } +} + +/**************************************************************************//** + * Timer Callbacks + * @param[in] handle pointer to handle instance + * @param[in] data pointer to input data + *****************************************************************************/ +static void scene_retransmission_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + + send_scene_recall_request(1); // Retransmit scene message + // Stop retransmission timer if it was the last attempt + if (scene_request_count == 0) { + sl_status_t sc = sl_simple_timer_stop(&app_scene_retransmission_timer); + app_assert_status_f(sc, "Failed to stop periodic timer"); + } +} + +/** @} (end addtogroup Scene Client) */ diff --git a/app/btmesh/common/btmesh_scene_client/sl_btmesh_scene_client.h b/app/btmesh/common/btmesh_scene_client/sl_btmesh_scene_client.h new file mode 100644 index 00000000000..c057730bb0b --- /dev/null +++ b/app/btmesh/common/btmesh_scene_client/sl_btmesh_scene_client.h @@ -0,0 +1,51 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_scene_client.h + ******************************************************************************* + * # 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_BTMESH_SCENE_CLIENT_H +#define SL_BTMESH_SCENE_CLIENT_H + +/******************************************************************************* + * This function select scene and send it to the server. + * + * @param[in] scene_to_recall Scene to recall, possible values 1-255. + * + ******************************************************************************/ +void sl_btmesh_select_scene(uint8_t scene_to_recall); + +/**************************************************************************//** + * Handle Sensor Server events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + *****************************************************************************/ +void sl_btmesh_handle_scene_client_on_event(sl_btmesh_msg_t *evt); + +#endif // SL_BTMESH_SCENE_CLIENT_H diff --git a/app/btmesh/common/btmesh_scene_server/btmesh_scene_server.dcd b/app/btmesh/common/btmesh_scene_server/btmesh_scene_server.dcd new file mode 100644 index 00000000000..0f12e96af15 --- /dev/null +++ b/app/btmesh/common/btmesh_scene_server/btmesh_scene_server.dcd @@ -0,0 +1,10 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1203", "name":"Scene Server"}, + {"mid":"0x1204", "name":"Scene Setup Server"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_scene_server/sl_btmesh_scene_server.c b/app/btmesh/common/btmesh_scene_server/sl_btmesh_scene_server.c new file mode 100644 index 00000000000..a98c40c2eeb --- /dev/null +++ b/app/btmesh/common/btmesh_scene_server/sl_btmesh_scene_server.c @@ -0,0 +1,89 @@ +/***************************************************************************//** + * @file + * @brief BT mesh scene server module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "em_common.h" +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" + +#include "app_assert.h" +#include "sl_btmesh_scene_server.h" + +/***************************************************************************//** + * @addtogroup Scene Server + * @{ + ******************************************************************************/ + +/******************************************************************************* + * Scenes initialization. + * This should be called at each boot if provisioning is already done. + * Otherwise this function should be called after provisioning is completed. + * + * @param[in] element Index of the element where scenes models are initialized. + * + * @return Status of the initialization operation. + * Returns bg_err_success (0) if succeed, non-zero otherwise. + ******************************************************************************/ +uint16_t sl_btmesh_scenes_init(void) +{ + // Initialize scenes server models + sl_status_t result; + result = sl_btmesh_scene_server_init(BTMESH_SCENE_SERVER_MAIN); + app_assert_status_f(result, "Failed to init scene server model"); + + result = sl_btmesh_scene_setup_server_init(BTMESH_SCENE_SERVER_MAIN); + app_assert_status_f(result, "Failed to init scene setup server model"); + + return result; +} + +/******************************************************************************* + * Handling of mesh scene events. + * + * It is called automatically by the Universal Configurator Framework + * + * @param[in] evt Pointer to incoming scene server event. + ******************************************************************************/ +void sl_btmesh_scene_server_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_scenes_init(); + break; + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_scenes_init(); + } + break; + } +} + +/** @} (end addtogroup Scene Server) */ diff --git a/app/btmesh/common/btmesh_scene_server/sl_btmesh_scene_server.h b/app/btmesh/common/btmesh_scene_server/sl_btmesh_scene_server.h new file mode 100644 index 00000000000..93fb8c85fca --- /dev/null +++ b/app/btmesh/common/btmesh_scene_server/sl_btmesh_scene_server.h @@ -0,0 +1,56 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_scene_server.h + ******************************************************************************* + * # 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_BTMESH_SCENE_SERVER_H +#define SL_BTMESH_SCENE_SERVER_H + +/***************************************************************************//** + * Scenes initialization. + * This should be called at each boot if provisioning is already done. + * Otherwise this function should be called after provisioning is completed. + * It is called automatically by the Universal Configurator Framework + * + * @param[in] element Index of the element where scenes models are initialized. + * + * @return Status of the initialization operation. + * Returns bg_err_success (0) if succeed, non-zero otherwise. + ******************************************************************************/ +uint16_t sl_btmesh_scenes_init(void); + +/***************************************************************************//** + * Handling of mesh scene events. + * + * It is called automatically by the Universal Configurator Framework + * + * @param[in] evt Pointer to incoming scene server event. + ******************************************************************************/ +void sl_btmesh_scene_server_on_event(sl_btmesh_msg_t *evt); + +#endif // SL_BTMESH_SCENE_SERVER_H diff --git a/app/btmesh/common/btmesh_scheduler_server/btmesh_scheduler_server.dcd b/app/btmesh/common/btmesh_scheduler_server/btmesh_scheduler_server.dcd new file mode 100644 index 00000000000..d2f4ee62360 --- /dev/null +++ b/app/btmesh/common/btmesh_scheduler_server/btmesh_scheduler_server.dcd @@ -0,0 +1,10 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1206", "name":"Scheduler Server"}, + {"mid":"0x1207", "name":"Scheduler Setup Server"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_scheduler_server/config/sl_btmesh_scheduler_server_config.h b/app/btmesh/common/btmesh_scheduler_server/config/sl_btmesh_scheduler_server_config.h new file mode 100644 index 00000000000..28e6853aff7 --- /dev/null +++ b/app/btmesh/common/btmesh_scheduler_server/config/sl_btmesh_scheduler_server_config.h @@ -0,0 +1,48 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_SCHEDULER_SERVER_CONFIG_H +#define SL_BTMESH_SCHEDULER_SERVER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Scheduler Server configuration + +// Enable Logging +// Default: 1 +// Enable / disable Logging for Scheduler Server model specific messages for this component. +#define SL_BTMESH_SCHEDULER_SERVER_LOGGING_CFG_VAL (1) + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_SCHEDULER_SERVER_CONFIG_H diff --git a/app/btmesh/common/btmesh_scheduler_server/sl_btmesh_scheduler_server.c b/app/btmesh/common/btmesh_scheduler_server/sl_btmesh_scheduler_server.c new file mode 100644 index 00000000000..543eeebf8ae --- /dev/null +++ b/app/btmesh/common/btmesh_scheduler_server/sl_btmesh_scheduler_server.c @@ -0,0 +1,188 @@ +/***************************************************************************//** + * @file + * @brief Scheduler Server module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include +#include "em_common.h" +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_scheduler_server.h" +#include "sl_btmesh_scheduler_server_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup Scheduler Server + * @{ + ******************************************************************************/ + +/******************************************************************************* + * Scheduler initialization. + * This should be called at each boot if provisioning is already done. + * Otherwise this function should be called after provisioning is completed. + * + * @param[in] element Index of the element where scheduler model is initialized. + * + * @return Status of the initialization operation. + * Returns bg_err_success (0) if succeed, non-zero otherwise. + ******************************************************************************/ +uint16_t sl_btmesh_scheduler_init(void) +{ + // Initialize scheduler server models + sl_status_t result = sl_btmesh_scheduler_server_init(BTMESH_SCHEDULER_SERVER_MAIN); + + log_status_error_f(result, "sl_btmesh_scheduler_server_init failed" NL); + + return result; +} + +/***************************************************************************//** + * Handling of scheduler server action changed event. + * + * @param[in] evt Pointer to scheduler server action changed event. + ******************************************************************************/ +static void handle_scheduler_server_action_changed_event( + sl_btmesh_evt_scheduler_server_action_changed_t *evt) +{ + log_info("evt:gecko_evt_mesh_scheduler_server_action_changed_id, \ +elem_index=%u, index=%u, ", evt->elem_index, evt->index); + if (evt->year == 100) { + log_append_info("year=Every, "); + } else { + log_append_info("year=%u, ", evt->year); + } + log_append_info("month=0x%03x, ", evt->month); + if (evt->day) { + log_append_info("day=0x%02x, ", evt->day); + } else { + log_append_info("day=Every, "); + } + if (evt->hour == 0x18) { + log_append_info("hour=Every, "); + } else if (evt->hour == 0x19) { + log_append_info("hour=Random, "); + } else { + log_append_info("hour=%u, ", evt->hour); + } + if (evt->minute == 0x3c) { + log_append_info("minute=Every, "); + } else if (evt->minute == 0x3d) { + log_append_info("minute=Every 15, "); + } else if (evt->minute == 0x3e) { + log_append_info("minute=Every 20, "); + } else if (evt->minute == 0x3f) { + log_append_info("minute=Random, "); + } else { + log_append_info("minute=%u, ", evt->minute); + } + if (evt->second == 0x3c) { + log_append_info("second=Every, "); + } else if (evt->second == 0x3d) { + log_append_info("second=Every 15, "); + } else if (evt->second == 0x3e) { + log_append_info("second=Every 20, "); + } else if (evt->second == 0x3f) { + log_append_info("second=Random, "); + } else { + log_append_info("second=%u, ", evt->second); + } + log_append_info("day of the week=0x%02x, ", evt->day_of_week); + log_append_info("action="); + switch (evt->action) { + case 0x0: + log_append_info("Turn Off"); + break; + + case 0x1: + log_append_info("Turn On"); + break; + + case 0x2: + log_append_info("Scene Recall"); + break; + + case 0xf: + log_append_info("No action"); + break; + + default: + break; + } + log_append_info(", transition time=%lu ms, ", evt->transition_time_ms); + if (evt->scene_number) { + log_append_info("scene number=0x%04x", evt->scene_number); + } else { + log_append_info("scene number=No scene"); + } + log_append_info(NL); +} + +/******************************************************************************* + * Handling of mesh scheduler events. + * It handles: + * - scheduler_server_action_changed + * + * @param[in] evt Pointer to incoming scheduler event. + ******************************************************************************/ +void sl_btmesh_scheduler_server_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_scheduler_server_action_changed_id: + handle_scheduler_server_action_changed_event( + &(evt->data.evt_scheduler_server_action_changed)); + break; + + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_scheduler_init(); + } + break; + + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_scheduler_init(); + break; + + default: + break; + } +} + +/** @} (end addtogroup Scheduler Server) */ diff --git a/app/btmesh/common/btmesh_scheduler_server/sl_btmesh_scheduler_server.h b/app/btmesh/common/btmesh_scheduler_server/sl_btmesh_scheduler_server.h new file mode 100644 index 00000000000..eb862f87dae --- /dev/null +++ b/app/btmesh/common/btmesh_scheduler_server/sl_btmesh_scheduler_server.h @@ -0,0 +1,54 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_scheduler_server.h + ******************************************************************************* + * # 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_BTMESH_SCHEDULER_SERVER_H +#define SL_BTMESH_SCHEDULER_SERVER_H + +/***************************************************************************//** + * Scheduler initialization. + * This should be called at each boot if provisioning is already done. + * Otherwise this function should be called after provisioning is completed. + * It is called automatically by the Universal Configurator Framework + * + * @return Status of the initialization operation. + * Returns bg_err_success (0) if succeed, non-zero otherwise. + ******************************************************************************/ +uint16_t sl_btmesh_scheduler_init(void); + +/***************************************************************************//** + * Handling of mesh scheduler events. + * + * It is called automatically by the Universal Configurator Framework + * + * @param[in] evt Pointer to incoming time event. + ******************************************************************************/ +void sl_btmesh_scheduler_server_on_event(sl_btmesh_msg_t *evt); + +#endif // SL_BTMESH_SCHEDULER_SERVER_H diff --git a/app/btmesh/common/btmesh_self_provisioning_cli/config/sl_btmesh_self_provisioning_cli_config.h b/app/btmesh/common/btmesh_self_provisioning_cli/config/sl_btmesh_self_provisioning_cli_config.h new file mode 100644 index 00000000000..adabbd89564 --- /dev/null +++ b/app/btmesh/common/btmesh_self_provisioning_cli/config/sl_btmesh_self_provisioning_cli_config.h @@ -0,0 +1,48 @@ +/***************************************************************************//** + * @file sl_btmesh_self_provisioning_cli_config.h + * @brief Self Provisioning Component Configuration + ******************************************************************************* + * # 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_BTMESH_SELF_PROVISIONING_CLI_CONFIG_H +#define SL_BTMESH_SELF_PROVISIONING_CLI_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Self Provisioning configuration + +// Enable Logging +// Default: 1 +// Enable / disable UART Logging for Self Provisioning specific messages for this component. +#define SL_BTMESH_SELF_PROVISIONING_CLI_LOGGING_CFG_VAL (1) + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_SELF_PROVISIONING_CLI_CONFIG_H diff --git a/app/btmesh/common/btmesh_self_provisioning_cli/sl_btmesh_self_provisioning_cli.c b/app/btmesh/common/btmesh_self_provisioning_cli/sl_btmesh_self_provisioning_cli.c new file mode 100644 index 00000000000..85ac8dbe45d --- /dev/null +++ b/app/btmesh/common/btmesh_self_provisioning_cli/sl_btmesh_self_provisioning_cli.c @@ -0,0 +1,246 @@ +/***************************************************************************//** + * @file sl_btmesh_self_provisioning.c + * @brief Self Provisioning module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "em_common.h" +#include "sl_cli.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_self_provisioning_cli_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup SelfProvisioning + * @{ + ******************************************************************************/ + +// Key position +#define KEY_INDEX 0 +// Old key data. Old key data can be queried only during the key refresh. +#define OLD_KEY_DATA 0 +// Current key data +#define CURRENT_KEY_DATA 1 +// Key length +#define KEY_LENGTH 16 +// Address length +#define ADDRESS_LENGTH 2 +// Current IV Index used in the network +#define IV_INDEX 0 +// Current operation is not a key refresh +#define NOT_KEY_REFRESH 0 +// Network key index to which the application key is bound +#define APPKEY_BOUND_TO_NETKEY 0 + +/***************************************************************************//** + // Static Function Declarations + ******************************************************************************/ + +/***************************************************************************//** + * Self provisioning according to input parameters + * + * @dev_key[in] - device key + * @dev_key[in] - network key + * @dev_key[in] - primary element address + ******************************************************************************/ +static void sl_btmesh_self_provisioning(aes_key_128 dev_key, + aes_key_128 net_key, + uint16_t address); + +/***************************************************************************//** + * Add an application key locally. + * + * @app_key[in] - application key + ******************************************************************************/ +static void sl_btmesh_add_app_key(aes_key_128 app_key); + +/***************************************************************************//** + * CLI Callback + * @param[in] arguments pointer to CLI arguments + ******************************************************************************/ +#ifdef SL_CATALOG_CLI_PRESENT +void sl_btmesh_self_provisioning_from_cli(sl_cli_command_arg_t *arguments) +{ + size_t arg_length; + uint8_t *input_arguments; + aes_key_128 network_key; + aes_key_128 device_key; + uint16_t primary_address; + + // Get the first argument - device key + input_arguments = sl_cli_get_argument_hex(arguments, 0, &arg_length); + if (arg_length != KEY_LENGTH) { + log_warning("Wrong device key length: %u, should be %d"NL, arg_length, KEY_LENGTH); + return; + } + memcpy(device_key.data, input_arguments, arg_length); + + // Get the second argument - network key + input_arguments = sl_cli_get_argument_hex(arguments, 1, &arg_length); + if (arg_length != KEY_LENGTH) { + log_warning("Wrong network key length: %u, should be %d"NL, arg_length, KEY_LENGTH); + return; + } + memcpy(network_key.data, input_arguments, arg_length); + + // Get the third argument - primary element address + input_arguments = sl_cli_get_argument_hex(arguments, 2, &arg_length); + if (arg_length != ADDRESS_LENGTH) { + log_warning("Wrong primary element address length: %u, should be %d"NL, arg_length, ADDRESS_LENGTH); + return; + } + memcpy(&primary_address, input_arguments, arg_length); + + sl_btmesh_self_provisioning(device_key, network_key, primary_address); +} + +void sl_btmesh_system_reset_from_cli(sl_cli_command_arg_t *arguments) +{ + (void)arguments; + sl_bt_system_reset(0); +} + +void sl_btmesh_add_app_key_from_cli(sl_cli_command_arg_t *arguments) +{ + size_t arg_length; + uint8_t *input_arguments; + aes_key_128 application_key; + + // Get the argument - application key + input_arguments = sl_cli_get_argument_hex(arguments, 0, &arg_length); + if (arg_length != KEY_LENGTH) { + log_warning("Wrong device key length: %u, should be %d"NL, arg_length, KEY_LENGTH); + return; + } + memcpy(application_key.data, input_arguments, arg_length); + + sl_btmesh_add_app_key(application_key); +} +#endif // SL_CATALOG_CLI_PRESENT + +/***************************************************************************//** + // Helper functions + ******************************************************************************/ +void sl_btmesh_self_provisioning(aes_key_128 dev_key, + aes_key_128 net_key, + uint16_t address) +{ + sl_status_t sc; + uint32_t key_count; + + log_info("Self provisioning started"NL); + + // Get the stored network key number + sc = sl_btmesh_node_get_key_count(sl_btmesh_node_key_type_net, &key_count); + if (sc != SL_STATUS_OK) { + log_status_warning_f(sc, "Failed to get key count" NL); + return; + } + + // If there is stored network key the node is considered already provisioned + if (key_count != 0) { + log_warning("Netkey already stored: %ld"NL, key_count); + return; + } + + // Stop the unprovisioned beaconing + sc = sl_btmesh_node_stop_unprov_beaconing(); + if (sc != SL_STATUS_OK) { + log_status_warning_f(sc, "Failed to stop unprovisioned beaconing" NL); + return; + } + + // Save the provisioning data to make the device reachable and configurable + // in the Provisioner's network. + sc = sl_btmesh_node_set_provisioning_data(dev_key, + net_key, + KEY_INDEX, + IV_INDEX, + address, + NOT_KEY_REFRESH); + if (sc != SL_STATUS_OK) { + log_status_warning_f(sc, "Failed to set provisioning data" NL); + return; + } + + log_info("Self provisioning successful" NL); + + // The device must be reset after saving provisioning data. + sl_bt_system_reset(0); +} + +void sl_btmesh_add_app_key(aes_key_128 app_key) +{ + sl_status_t sc; + aes_key_128 app_key_check; + uint16_t id; + uint16_t netkey_index; + + // Add application key + sc = sl_btmesh_test_add_local_key(sl_btmesh_test_key_type_app, + app_key, + KEY_INDEX, + APPKEY_BOUND_TO_NETKEY); + if (sc != SL_STATUS_OK) { + log_status_warning_f(sc, "Failed to add app key" NL); + return; + } + + // Get the application key + sc = sl_btmesh_node_get_key(sl_btmesh_test_key_type_app, + KEY_INDEX, + CURRENT_KEY_DATA, + &id, + &netkey_index, + &app_key_check); + if (sc != SL_STATUS_OK) { + log_status_warning_f(sc, "Failed to get app key" NL); + return; + } + + log_info("Application key added: "); + for (size_t count = 0; count < KEY_LENGTH; count++) { + log_append_info("%02x", app_key_check.data[count]); + } + log_nl(); +} + +/** @} (end addtogroup SelfProvisioning) */ diff --git a/app/btmesh/common/btmesh_sensor_client/btmesh_sensor_client.dcd b/app/btmesh/common/btmesh_sensor_client/btmesh_sensor_client.dcd new file mode 100644 index 00000000000..d5ddb4af2e8 --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_client/btmesh_sensor_client.dcd @@ -0,0 +1,9 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1102", "name":"Sensor Client"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_sensor_client/config/sl_btmesh_sensor_client_config.h b/app/btmesh/common/btmesh_sensor_client/config/sl_btmesh_sensor_client_config.h new file mode 100644 index 00000000000..42097930f5f --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_client/config/sl_btmesh_sensor_client_config.h @@ -0,0 +1,53 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_SENSOR_CLIENT_CONFIG_H +#define SL_BTMESH_SENSOR_CLIENT_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Sensor Client configuration + +// How many sensors can fit on screen +// Default: 5 +// Defines the number of sensors which can fit on the LCD screen. +#define SL_BTMESH_SENSOR_CLIENT_DISPLAYED_SENSORS_CFG_VAL (5) + +// Enable Logging +// Default: 1 +// Enable / disable Logging for Sensor Client model specific messages for this component. +#define SL_BTMESH_SENSOR_CLIENT_LOGGING_CFG_VAL (1) + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_SENSOR_CLIENT_CONFIG_H diff --git a/app/btmesh/common/btmesh_sensor_client/sl_btmesh_sensor_client.c b/app/btmesh/common/btmesh_sensor_client/sl_btmesh_sensor_client.c new file mode 100644 index 00000000000..bc1dfee4b8d --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_client/sl_btmesh_sensor_client.c @@ -0,0 +1,459 @@ +/***************************************************************************//** + * @file + * @brief Sensor client module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "em_common.h" +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" + +#include "app_assert.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_sensor_client_config.h" +#include "sl_btmesh_sensor_client.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup SensorClient + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup SensorClient + * @{ + ******************************************************************************/ + +/// Number of supported properties +#define PROPERTIES_NUMBER 3 +/// Parameter ignored for publishing +#define IGNORED 0 +/// No flags used for message +#define NO_FLAGS 0 +/// The size of descriptor is 8 bytes +#define SIZE_OF_DESCRIPTOR 8 +/// Size of property ID in bytes +#define PROPERTY_ID_SIZE 2 +/// Size of property header in bytes +#define PROPERTY_HEADER_SIZE 3 +/// Sensor index value for not registered devices +#define SENSOR_INDEX_NOT_FOUND 0xFF + +// Address zero is used in sensor client commands to indicate that +// the message should be published +static const uint16_t PUBLISH_ADDRESS = 0x0000; + +typedef struct { + uint16_t address_table[SL_BTMESH_SENSOR_CLIENT_DISPLAYED_SENSORS_CFG_VAL]; + uint8_t count; +} mesh_registered_device_properties_address_t; + +static bool mesh_address_already_exists(mesh_registered_device_properties_address_t* property, + uint16_t address); +static uint8_t mesh_get_sensor_index(mesh_registered_device_properties_address_t* property, + uint16_t address); +static void mesh_sensor_client_init(void); + +static mesh_registered_device_properties_address_t registered_devices = { + .count = 0, +}; + +static mesh_device_properties_t registering_property = DEVICE_PROPERTY_INVALID; + +// ----------------------------------------------------------------------------- +// Sensor Model Callbacks + +SL_WEAK void sl_btmesh_sensor_client_on_discovery_started(uint16_t property_id) +{ + (void)property_id; +} + +SL_WEAK void sl_btmesh_sensor_client_on_new_device_found(uint16_t property_id, + uint16_t address) +{ + (void)property_id; + (void)address; +} + +SL_WEAK void sl_btmesh_sensor_client_on_new_temperature_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + temperature_8_t temperature) +{ + (void) sensor_idx; + (void) address; + (void) status; + (void) temperature; +} + +SL_WEAK void sl_btmesh_sensor_client_on_new_people_count_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + count16_t people_count) +{ + (void) sensor_idx; + (void) address; + (void) status; + (void) people_count; +} + +SL_WEAK void sl_btmesh_sensor_client_on_new_illuminance_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + illuminance_t illuminance) +{ + (void) sensor_idx; + (void) address; + (void) status; + (void) illuminance; +} + +/******************************************************************************* + * Publishing of sensor client get descriptor request for currently displayed + * property id. It also resets the registered devices counter. + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_update_registered_devices(mesh_device_properties_t property) +{ + sl_status_t sc; + registered_devices.count = 0; + memset(registered_devices.address_table, + 0, + sizeof(registered_devices.address_table)); + registering_property = property; + + sl_btmesh_sensor_client_on_discovery_started(property); + + sc = sl_btmesh_sensor_client_get_descriptor(PUBLISH_ADDRESS, + BTMESH_SENSOR_CLIENT_MAIN, + IGNORED, + NO_FLAGS, + property); + if (SL_STATUS_OK == sc) { + log_info("Registration of devices for property ID %4.4x started" NL, property); + } else { + log_btmesh_status_f(sc, + "Registration of devices for property ID %4.4x failed" NL, + property); + } + return sc; +} + +/***************************************************************************//** + * Handling of sensor client descriptor status event. + * + * @param[in] evt Pointer to sensor client descriptor status event. + ******************************************************************************/ +static void handle_sensor_client_descriptor_status( + sl_btmesh_evt_sensor_client_descriptor_status_t *evt) +{ + sensor_descriptor_t descriptor; + if (evt->descriptors.len >= SIZE_OF_DESCRIPTOR) { + mesh_lib_sensor_descriptors_from_buf(&descriptor, + evt->descriptors.data, + SIZE_OF_DESCRIPTOR); + uint8_t number_of_devices = registered_devices.count; + if (descriptor.property_id == registering_property + && number_of_devices < SL_BTMESH_SENSOR_CLIENT_DISPLAYED_SENSORS_CFG_VAL + && !mesh_address_already_exists(®istered_devices, + evt->server_address)) { + registered_devices.address_table[number_of_devices] = evt->server_address; + registered_devices.count = number_of_devices + 1; + sl_btmesh_sensor_client_on_new_device_found(descriptor.property_id, + evt->server_address); + } + } +} + +/******************************************************************************* + * Publishing of sensor client get request for currently displayed property id. + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_get_sensor_data(mesh_device_properties_t property) +{ + sl_status_t sc; + + sc = sl_btmesh_sensor_client_get(PUBLISH_ADDRESS, + BTMESH_SENSOR_CLIENT_MAIN, + IGNORED, + NO_FLAGS, + property); + + if (SL_STATUS_OK == sc) { + log_info("Get Sensor Data from property ID %4.4x started" NL, property); + } else { + log_btmesh_status_f(sc, + "Get Sensor Data from property ID %4.4x failed" NL, + property); + } + return sc; +} + +/***************************************************************************//** + * Handling of sensor client status event. + * + * @param[in] evt Pointer to sensor client status event. + ******************************************************************************/ +static void handle_sensor_client_status(sl_btmesh_evt_sensor_client_status_t *evt) +{ + uint8_t *sensor_data = evt->sensor_data.data; + uint8_t data_len = evt->sensor_data.len; + uint8_t pos = 0; + while (pos < data_len) { + if (data_len - pos > PROPERTY_ID_SIZE) { + mesh_device_properties_t property_id = (mesh_device_properties_t)(sensor_data[pos] + + (sensor_data[pos + 1] << 8)); + uint8_t property_len = sensor_data[pos + PROPERTY_ID_SIZE]; + uint8_t *property_data = NULL; + + if (mesh_address_already_exists(®istered_devices, evt->server_address)) { + sl_btmesh_sensor_client_data_status_t status; + uint16_t address; + uint8_t sensor_idx; + + if (property_len && (data_len - pos > PROPERTY_HEADER_SIZE)) { + property_data = &sensor_data[pos + PROPERTY_HEADER_SIZE]; + } + + address = evt->server_address; + sensor_idx = mesh_get_sensor_index(®istered_devices, address); + status = SL_BTMESH_SENSOR_CLIENT_DATA_NOT_AVAILABLE; + + switch (property_id) { + case PEOPLE_COUNT: + { + count16_t people_count = SL_BTMESH_SENSOR_CLIENT_PEOPLE_COUNT_UNKNOWN; + + if (property_len == 2) { + mesh_device_property_t new_property = mesh_sensor_data_from_buf(PEOPLE_COUNT, + property_data); + people_count = new_property.count16; + + if (people_count == SL_BTMESH_SENSOR_CLIENT_PEOPLE_COUNT_UNKNOWN) { + status = SL_BTMESH_SENSOR_CLIENT_DATA_UNKNOWN; + } else { + status = SL_BTMESH_SENSOR_CLIENT_DATA_VALID; + } + } else { + status = SL_BTMESH_SENSOR_CLIENT_DATA_NOT_AVAILABLE; + } + + sl_btmesh_sensor_client_on_new_people_count_data(sensor_idx, + address, + status, + people_count); + break; + } + + case PRESENT_AMBIENT_TEMPERATURE: + { + temperature_8_t temperature = SL_BTMESH_SENSOR_CLIENT_TEMPERATURE_UNKNOWN; + + if (property_len == 1) { + mesh_device_property_t new_property = mesh_sensor_data_from_buf(PRESENT_AMBIENT_TEMPERATURE, + property_data); + temperature = new_property.temperature_8; + + if (temperature == SL_BTMESH_SENSOR_CLIENT_TEMPERATURE_UNKNOWN) { + status = SL_BTMESH_SENSOR_CLIENT_DATA_UNKNOWN; + } else { + status = SL_BTMESH_SENSOR_CLIENT_DATA_VALID; + } + } else { + status = SL_BTMESH_SENSOR_CLIENT_DATA_NOT_AVAILABLE; + } + + sl_btmesh_sensor_client_on_new_temperature_data(sensor_idx, + address, + status, + temperature); + break; + } + + case PRESENT_AMBIENT_LIGHT_LEVEL: + { + illuminance_t illuminance = SL_BTMESH_SENSOR_CLIENT_ILLUMINANCE_UNKNOWN; + + if (property_len == 3) { + mesh_device_property_t new_property = mesh_sensor_data_from_buf(PRESENT_AMBIENT_LIGHT_LEVEL, + property_data); + illuminance = new_property.illuminance; + + if (illuminance == SL_BTMESH_SENSOR_CLIENT_ILLUMINANCE_UNKNOWN) { + status = SL_BTMESH_SENSOR_CLIENT_DATA_UNKNOWN; + } else { + status = SL_BTMESH_SENSOR_CLIENT_DATA_VALID; + } + } else { + status = SL_BTMESH_SENSOR_CLIENT_DATA_NOT_AVAILABLE; + } + + sl_btmesh_sensor_client_on_new_illuminance_data(sensor_idx, + address, + status, + illuminance); + break; + } + + default: + log_info("Unsupported property id %4.4x" NL, property_id); + break; + } + } + pos += PROPERTY_HEADER_SIZE + property_len; + } else { + pos = data_len; + } + } +} + +/******************************************************************************* + * Handling of mesh sensor client events. + * It handles: + * - sensor_client_descriptor_status + * - sensor_client_status + * + * @param[in] evt Pointer to incoming sensor server event. + ******************************************************************************/ +static void handle_sensor_client_events(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_sensor_client_descriptor_status_id: + handle_sensor_client_descriptor_status( + &(evt->data.evt_sensor_client_descriptor_status)); + break; + + case sl_btmesh_evt_sensor_client_status_id: + handle_sensor_client_status( + &(evt->data.evt_sensor_client_status)); + break; + + default: + break; + } +} + +/******************************************************************************* + * Handle Sensor Client events. + ******************************************************************************/ +void sl_btmesh_handle_sensor_client_on_event(sl_btmesh_msg_t *evt) +{ + if (NULL == evt) { + return; + } + + // Handle events + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + mesh_sensor_client_init(); + } + break; + + case sl_btmesh_evt_node_provisioned_id: + mesh_sensor_client_init(); + break; + + case sl_btmesh_evt_sensor_client_descriptor_status_id: + case sl_btmesh_evt_sensor_client_status_id: + handle_sensor_client_events(evt); + break; + + default: + break; + } +} + +/***************************************************************************//** + * Check if the mesh address already exists or not. + * + * @param[in] property Pointer to registered devices' properties + * @param[in] address Mesh address to check + * + * @return true: The address exists + * false: The address doesn't exist + ******************************************************************************/ +static bool mesh_address_already_exists(mesh_registered_device_properties_address_t *property, + uint16_t address) +{ + bool address_exists = false; + if (property != NULL) { + for (int i = 0; i < SL_BTMESH_SENSOR_CLIENT_DISPLAYED_SENSORS_CFG_VAL; i++) { + if (address == property->address_table[i]) { + address_exists = true; + break; + } + } + } + return address_exists; +} + +/***************************************************************************//** + * Gets the sensor index. + * + * @param[in] property Pointer to registered devices' properties + * @param[in] address Mesh address of the sensor + * + * @return Index of the sensor + ******************************************************************************/ +static uint8_t mesh_get_sensor_index(mesh_registered_device_properties_address_t *property, + uint16_t address) +{ + uint8_t sensor_index = SENSOR_INDEX_NOT_FOUND; + if (property != NULL) { + for (int i = 0; i < SL_BTMESH_SENSOR_CLIENT_DISPLAYED_SENSORS_CFG_VAL; i++) { + if (address == property->address_table[i]) { + sensor_index = i; + break; + } + } + } + return sensor_index; +} + +/***************************************************************************//** + * Initializes sensor client component + ******************************************************************************/ +static void mesh_sensor_client_init(void) +{ + sl_status_t sc = sl_btmesh_sensor_client_init(); + + app_assert_status_f(sc, "Failed to initialize sensor client"); +} + +/** @} (end addtogroup SensorClient) */ diff --git a/app/btmesh/common/btmesh_sensor_client/sl_btmesh_sensor_client.h b/app/btmesh/common/btmesh_sensor_client/sl_btmesh_sensor_client.h new file mode 100644 index 00000000000..d1f773be812 --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_client/sl_btmesh_sensor_client.h @@ -0,0 +1,201 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_sensor_client.h + ******************************************************************************* + * # 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_BTMESH_SENSOR_CLIENT_H +#define SL_BTMESH_SENSOR_CLIENT_H + +#include "sl_btmesh_sensor.h" +#include "sl_status.h" +#include "sl_enum.h" + +// ----------------------------------------------------------------------------- +// Sensor Data Constants which represents the unknown value of each sensors + +#define SL_BTMESH_SENSOR_CLIENT_ILLUMINANCE_UNKNOWN ((illuminance_t) 0xFFFFFF) +#define SL_BTMESH_SENSOR_CLIENT_PEOPLE_COUNT_UNKNOWN ((count16_t) 0xFFFF) +#define SL_BTMESH_SENSOR_CLIENT_TEMPERATURE_UNKNOWN ((temperature_8_t) 0x7F) + +/***************************************************************************//** + * Enumeration representing the status of the sensor data received from the + * sensor server. + ******************************************************************************/ +SL_ENUM(sl_btmesh_sensor_client_data_status_t){ + /// Valid sensor data + SL_BTMESH_SENSOR_CLIENT_DATA_VALID = 0, + + /// No valid measured data is available + SL_BTMESH_SENSOR_CLIENT_DATA_UNKNOWN = 1, + + /// No sensor is available on the sensor server + SL_BTMESH_SENSOR_CLIENT_DATA_NOT_AVAILABLE = 2 +}; + +// ----------------------------------------------------------------------------- +// Callbacks + +/***************************************************************************//** + * Called when Sensor Server discovery is started + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + ******************************************************************************/ +void sl_btmesh_sensor_client_on_discovery_started(uint16_t property_id); + +/***************************************************************************//** + * Called when a Device with the current Device Property ID was found + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] property_id New property ID for which the new device + * was registered. + * @param[in] address Address of the new device. + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_device_found(uint16_t property_id, + uint16_t address); + +/***************************************************************************//** + * Called when temperature sensor data is received from one of the + * registered devices + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] sensor_idx The sensor index represents the order the sensor + * servers were registered. + * @param[in] address Address of the sensor server. + * @param[in] status Determines if the data is valid, available or unknown + * @param[in] temperature Measured temperature on the sensor server + * in 0.5 degree Celsius steps. + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_temperature_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + temperature_8_t temperature); + +/***************************************************************************//** + * Called when people count sensor data is received from one of the + * registered devices. + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] sensor_idx The sensor index represents the order the sensor + * servers were registered. + * @param[in] address Address of the sensor server. + * @param[in] status Determines if the data is valid, available or unknown + * @param[in] temperature Measured people count on the sensor server. + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_people_count_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + count16_t people_count); + +/***************************************************************************//** + * Called when illuminance sensor data is received from one of the + * registered devices. + * + * This is a callback which can be implemented in the application. + * @note If no implementation is provided in the application, + * then the default weak implementation will be an empty function. + * + * @param[in] sensor_idx The sensor index represents the order the sensor + * servers were registered. + * @param[in] address Address of the sensor server. + * @param[in] status Determines if the data is valid, available or unknown + * @param[in] illuminance Measured illuminance on the sensor server in lux with + * a resolution of 0.01. + * (0xFFFFFF represents unknown data) + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_illuminance_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + illuminance_t illuminance); + +// ----------------------------------------------------------------------------- +// Functions + +/***************************************************************************//** + * Updating the list of registered devices. + * All previously registered device will be lost. + * + * Generated callback: + * SL_WEAK void sl_btmesh_sensor_client_on_discovery_started(uint16_t property_id); + * SL_WEAK void sl_btmesh_sensor_client_on_new_device_found(uint16_t property_id, + * uint16_t address); + * + * @param[in] property New property ID for which devices need to be + * registered. + * + * @return Status of the operation. + * Returns SL_STATUS_OK(0) if succeeded, non-zero otherwise. + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_update_registered_devices(mesh_device_properties_t property); + +/***************************************************************************//** + * Requesting new sensor data for the currently selected sensor property ID. + * + * Generated callback: + * + * Called callback signature depends on the received sensor data type. + * The <> symbols marks the part which is different due to the different sensor + * types in these callbacks. + * + * SL_WEAK void sl_btmesh_sensor_client_on_new__data( + * uint8_t sensor_idx, + * uint16_t address, + * sl_btmesh_sensor_client_data_status_t status, + * ) + * + * @param[in] property New property ID for which devices need to be registered. + * + * @return Status of the operation. + * Returns SL_STATUS_OK(0) if succeeded, non-zero otherwise. + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_get_sensor_data(mesh_device_properties_t property); + +// ----------------------------------------------------------------------------- +// Functions which are automatically called when the component is selected + +/***************************************************************************//** + * Handle Sensor Client events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + * @param[in] evt Pointer to incoming event + ******************************************************************************/ +void sl_btmesh_handle_sensor_client_on_event(sl_btmesh_msg_t *evt); + +#endif // SL_BTMESH_SENSOR_CLIENT_H diff --git a/app/btmesh/common/btmesh_sensor_people_count/config/sl_btmesh_sensor_people_count_config.h b/app/btmesh/common/btmesh_sensor_people_count/config/sl_btmesh_sensor_people_count_config.h new file mode 100644 index 00000000000..5480313f646 --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_people_count/config/sl_btmesh_sensor_people_count_config.h @@ -0,0 +1,149 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_SENSOR_PEOPLE_COUNT_CONFIG_H +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_TYPE_DISCRETE_VALUE_CFG_VAL 0 +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_TYPE_PERCENTAGE_CFG_VAL 1 + +// Bluetooth Mesh - People Count + +// Sensor attributes + +// Positive tolerance of sensor. +// <0-4095:1> +// Default: 0 (Unspecified) +// 12-bit Positive Tolerance value (1 - 4095) or Unspecified (0). The value is derived as ERR_P [%] = 100 [%] * x / 4095 +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_POSITIVE_TOLERANCE_CFG_VAL 0 + +// Negative tolerance of sensor. +// <0-4095:1> +// Default: 0 (Unspecified) +// 12-bit Negative Tolerance value (1 - 4095) or Unspecified (0). The value is derived as ERR_N [%] = 100 [%] * x / 4095 +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_NEGATIVE_TOLERANCE_CFG_VAL 0 + +// Sampling function +// Unspecified +// Instantaneous sampling +// Arithmetic mean +// Root mean square +// Poll +// Maximum value +// Minimum value +// Cumulative moving average updated with the frequency given by Sensor Update Interval +// Number of "events" over the period of time defined by the Measurement Period +// Reserved for Future Use +// Default: Unspecified +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_SAMPLING_FUNCTION_CFG_VAL SAMPLING_UNSPECIFIED + +// Measurement Period of sensor. +// <0-255:1> +// Default: 0 (Not Applicable) +// 8 bit value (1 - 255) or Not Applicable (0). Time period in seconds is derived as T [s] = 1.1 ^ (x - 64) +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_MEASUREMENT_PERIOD_CFG_VAL 0 + +// Update Interval of sensor. +// <0-255:1> +// Default: 0 (Not Applicable) +// 8 bit value (1 - 255) or Not Applicable (0). Time period in seconds is derived as T [s] = 1.1 ^ (x - 64) +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_UPDATE_INTERVAL_CFG_VAL 0 + +// + +// Sensor cadence +// Enables Cadence. +// Default: 0 +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_CADENCE_ENABLE_CFG_VAL 0 + +// Fast Cadence Period Divisor +// <0-15:1> +// Default: 0 (Divisor of 1) +// 7 bit value (0-15), other values are Prohibited. The value is represented as a 2 ^ n divisor of the Publish Period. +// For example value 0x00 would have a divisor of 1, the Publish Period would not change. +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_FAST_CADENCE_PERIOD_DIVISOR_CFG_VAL 0 + +// Status Trigger Type +// Discrete Value +// Percentage +// Default: SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_TYPE_DISCRETE_VALUE_CFG_VAL +// Defines the unit and format of the Status Trigger Delta fields +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_TYPE_CFG_VAL SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_TYPE_DISCRETE_VALUE_CFG_VAL + +// Status Trigger Delta Down +// <0-65535:1> +// Default: 0 +// The Status Trigger Delta Down field shall control the negative change of a measured quantity that +// triggers publication of a Sensor Status message. The format is defined by the Status Trigger Type field. +// In case of percentage Status Trigger Type the value is represented unitless with a resolution of 0.01 percent, +// e.g. value 1534 represents 15.34%. In case of discrete Status Trigger Type the format represents +// the people count value. +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_DELTA_DOWN_CFG_VAL 0 + +// Status Trigger Delta Up +// <0-65535:1> +// Default: 0 +// The Status Trigger Delta Up field shall control the positive change of a measured quantity that +// triggers publication of a Sensor Status message. The format is defined by the Status Trigger Type field. +// In case of percentage Status Trigger Type the value is represented unitless with a resolution of 0.01 percent, +// e.g. value 1534 represents 15.34%. In case of discrete Status Trigger Type the format represents +// the people count value. +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_DELTA_UP_CFG_VAL 0 + +// Status Min Interval +// <0-26:1> +// Default: 0 +// 8 bit value (0-26), other values are Prohibited. The value is represented as a 2 ^ n milliseconds. +// For example, the value 10 would represent an interval of 1024ms. +// The Status Min Interval field shall control the minimum interval between publishing two consecutive Sensor Status messages. +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_MIN_INTERVAL_CFG_VAL 0 + +// Fast Cadence Low +// <0-65535:1> +// Default: 0 +// The Fast Cadence Low field shall define the lower boundary of a range of measured quantities when +// the publishing cadence is increased as defined by the Fast Cadence Period Divisor field. +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_FAST_CADENCE_LOW_CFG_VAL 0 + +// Fast Cadence High +// <0-65535:1> +// Default: 0 +// The Fast Cadence High field shall define the upper boundary of a range of measured quantities when +// the publishing cadence is increased as defined by the Fast Cadence Period Divisor field. +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_FAST_CADENCE_HIGH_CFG_VAL 0 + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_SENSOR_PEOPLE_COUNT_CONFIG_H diff --git a/app/btmesh/common/btmesh_sensor_people_count/sl_btmesh_sensor_people_count.c b/app/btmesh/common/btmesh_sensor_people_count/sl_btmesh_sensor_people_count.c new file mode 100644 index 00000000000..82a187695cf --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_people_count/sl_btmesh_sensor_people_count.c @@ -0,0 +1,137 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh People count sensor implementation + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_CLI_PRESENT +#include "sl_cli.h" +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#define log(...) app_log(__VA_ARGS__) +#else +#define log(...) +#endif // SL_CATALOG_APP_LOG_PRESENT +#endif // SL_CATALOG_CLI_PRESENT + +#include "sl_btmesh_sensor_people_count.h" +#include "sl_btmesh_sensor_people_count_config.h" + +/***************************************************************************//** + * @addtogroup Sensor + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup PeopleCount + * @{ + ******************************************************************************/ + +/// People count +static count16_t people_count = SL_BTMESH_SENSOR_PEOPLE_COUNT_VALUE_IS_NOT_KNOWN; + +/******************************************************************************* + * Set the people count value. It could be used to initialize the sensor. + * + * @param[in] people_count People count value to set + ******************************************************************************/ +void sl_btmesh_set_people_count(count16_t people_count_value) +{ + people_count = people_count_value; +} + +/******************************************************************************* + * Get the current people count value measured by sensor. + * + * @return Current value of people count. + ******************************************************************************/ +count16_t sl_btmesh_get_people_count(void) +{ + return people_count; +} + +/******************************************************************************* + * Increase people count value by one. After exceeding the maximum value it set + * people count to value is not known. + ******************************************************************************/ +void sl_btmesh_people_count_increase(void) +{ + if (people_count < SL_BTMESH_SENSOR_PEOPLE_COUNT_VALUE_IS_NOT_KNOWN) { + people_count += 1; + } +} + +/******************************************************************************* + * Decrease people count value by one if value is known and greater than 0. + ******************************************************************************/ +void sl_btmesh_people_count_decrease(void) +{ + if (people_count > 0 + && people_count < SL_BTMESH_SENSOR_PEOPLE_COUNT_VALUE_IS_NOT_KNOWN) { + people_count -= 1; + } +} + +/**************************************************************************//** + * CLI Callbacks + *****************************************************************************/ +#ifdef SL_CATALOG_CLI_PRESENT +void people_count_increase_from_cli(sl_cli_command_arg_t *arguments) +{ + (void)arguments; + sl_btmesh_people_count_increase(); +} + +void people_count_decrease_from_cli(sl_cli_command_arg_t *arguments) +{ + (void)arguments; + sl_btmesh_people_count_decrease(); +} + +void people_count_set_from_cli(sl_cli_command_arg_t *arguments) +{ + uint16_t value; + value = sl_cli_get_argument_uint16(arguments, 0); + sl_btmesh_set_people_count(value); +} + +void people_count_get_from_cli(sl_cli_command_arg_t *arguments) +{ + (void)arguments; + log("%u\r\n", people_count); +} + +#endif // SL_CATALOG_CLI_PRESENT + +/** @} (end addtogroup PeopleCount) */ +/** @} (end addtogroup Sensor) */ diff --git a/app/btmesh/common/btmesh_sensor_people_count/sl_btmesh_sensor_people_count.h b/app/btmesh/common/btmesh_sensor_people_count/sl_btmesh_sensor_people_count.h new file mode 100644 index 00000000000..e800bac55a9 --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_people_count/sl_btmesh_sensor_people_count.h @@ -0,0 +1,82 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh People count sensor header + ******************************************************************************* + * # 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_BTMESH_SENSOR_PEOPLE_COUNT_H +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_H + +#include "sl_btmesh_device_properties.h" + +#define SL_BTMESH_SENSOR_PEOPLE_COUNT_VALUE_IS_NOT_KNOWN (0xFFFF) + +/***************************************************************************//** + * @defgroup PeopleCount People Count Sensor Module + * @brief People Count Sensor Module Implementation + * This module simulate the people count sensor behavior. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup Sensor + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup PeopleCount + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Set the people count value. It could be used to initialize the sensor. + * + * @param[in] people_count People count value to set + ******************************************************************************/ +void sl_btmesh_set_people_count(count16_t people_count); + +/***************************************************************************//** + * Get the current people count value measured by sensor. + * + * @return Current value of people count. + ******************************************************************************/ +count16_t sl_btmesh_get_people_count(void); + +/***************************************************************************//** + * Increase people count value by one. After exceeding the maximum value it set + * people count to value is not known. + ******************************************************************************/ +void sl_btmesh_people_count_increase(void); + +/***************************************************************************//** + * Decrease people count value by one if value is known and greater than 0. + ******************************************************************************/ +void sl_btmesh_people_count_decrease(void); + +/** @} (end addtogroup PeopleCount) */ +/** @} (end addtogroup Sensor) */ + +#endif /* SL_BTMESH_SENSOR_PEOPLE_COUNT_H */ diff --git a/app/btmesh/common/btmesh_sensor_server/btmesh_sensor_server.dcd b/app/btmesh/common/btmesh_sensor_server/btmesh_sensor_server.dcd new file mode 100644 index 00000000000..5f8c2d806fc --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_server/btmesh_sensor_server.dcd @@ -0,0 +1,10 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1100", "name":"Sensor Server"}, + {"mid":"0x1101", "name":"Sensor Setup Server"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_sensor_server/config/sl_btmesh_sensor_server_config.h b/app/btmesh/common/btmesh_sensor_server/config/sl_btmesh_sensor_server_config.h new file mode 100644 index 00000000000..f0f1d2f882a --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_server/config/sl_btmesh_sensor_server_config.h @@ -0,0 +1,47 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_SENSOR_SERVER_CONFIG_H +#define SL_BTMESH_SENSOR_SERVER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Sensor Server configuration + +// Enable Logging +// Default: 1 +// Enable / disable Logging for Sensor Server model specific messages for this component. +#define SL_BTMESH_SENSOR_SERVER_LOGGING_CFG_VAL (1) +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_SENSOR_SERVER_CONFIG_H diff --git a/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server.c b/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server.c new file mode 100644 index 00000000000..711148729f6 --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server.c @@ -0,0 +1,863 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Sensor Server Instances + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +// C Standard Library headers +#include +#include +#include "sl_status.h" +// Bluetooth stack headers +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_sensor.h" +#include "sl_btmesh_dcd.h" +#include "sl_simple_timer.h" + +#include "app_assert.h" +#include "em_common.h" + +#include "sl_board_control_config.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#ifdef SL_CATALOG_SENSOR_RHT_PRESENT +#include "sl_sensor_rht_config.h" +#include "sl_sensor_rht.h" +#endif // SL_CATALOG_SENSOR_RHT_PRESENT + +#ifdef SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT +#include "sl_btmesh_sensor_people_count_config.h" +#include "sl_btmesh_sensor_people_count.h" +#endif // SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT + +#ifdef SL_CATALOG_SENSOR_LIGHT_PRESENT +#include "sl_sensor_light_config.h" +#include "sl_sensor_light.h" +#elif defined(SL_CATALOG_SENSOR_LUX_PRESENT) +#include "sl_sensor_lux_config.h" +#include "sl_sensor_lux.h" +#endif + +#include "sl_btmesh_sensor_server.h" +#include "sl_btmesh_sensor_server_config.h" +#include "sl_btmesh_sensor_server_cadence.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup Sensor + * @{ + ******************************************************************************/ + +#define SENSOR_SERVER_SEND_FAILED_TEXT "Sensor server send %s failed" NL +#define SENSOR_SETUP_SERVER_SEND_FAILED_TEXT "Sensor setup server send %s failed" NL + +/// The unused 0 address is used for publishing +#define PUBLISH_TO_ALL_NODES 0 +/// Parameter ignored for publishing +#define IGNORED 0 +/// No flags used for message +#define NO_FLAGS 0 +/// Pre-scale value for temperature sensor raw data +#define TEMPERATURE_PRE_SCALE 2 +/// Offset value for temperature sensor pre-scaled value +#define TEMPERATURE_OFFSET 499 +/// Scale value for temperature sensor final value +#define TEMPERATURE_SCALE_VAL 1000 +/// Length of sensor data buffer +#define SENSOR_DATA_BUF_LEN 15 +/// Property ID indicating reading every sensor +#define PROPERTY_ID_ALL 0 +/// Buffer length for get cadence parameters +#define SENSOR_CADENCE_BUF_LEN 10 +/// Acknowledgement request mask +#define SET_CADENCE_ACK_FLAG 2 +/// Callback has no parameters +#define NO_CALLBACK_DATA (void *)NULL +/// Multiplier for seconds conversion to millisenconds +#define SEC_TO_MS 1000 +/// Sensor Update Interval formula power extractor constant +#define EXTRACTOR_CONSTANT 64 + +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) + +#ifdef SL_CATALOG_SENSOR_RHT_PRESENT +temperature_8_t get_temperature(void); +bool rht_initialized; +#endif // SL_CATALOG_SENSOR_RHT_PRESENT + +#if defined(SL_CATALOG_SENSOR_LIGHT_PRESENT) \ + || defined(SL_CATALOG_SENSOR_LUX_PRESENT) +illuminance_t get_light(void); +#endif //SL_CATALOG_SENSOR_LIGHT_PRESENT || SL_CATALOG_SENSOR_LUX_PRESENT + +#if SENSOR_THERMOMETER_CADENCE || SENSOR_PEOPLE_COUNT_CADENCE +static uint32_t prev_publish_timeout; +static sl_btmesh_evt_sensor_server_publish_t publish_period; + +// ------------------------------- +// Periodic timer handles +static sl_simple_timer_t sensor_server_data_timer; +static sl_simple_timer_t sensor_server_publish_timer; + +// ------------------------------- +// Periodic timer callbacks +static void sensor_server_data_timer_cb(sl_simple_timer_t *handle, void *data); +static void sensor_server_publish_timer_cb(sl_simple_timer_t *handle, void *data); +#endif + +void sl_btmesh_sensor_server_node_init(void) +{ + /// Descriptors of supported sensors + /* The following properties are defined + * 1. People count property (property ID: 0x004C) + * 2. Present ambient light property (property ID: 0x004E) + * 3. Present ambient temperature property (property ID: 0x004F) + * NOTE: the properties must be ordered in ascending order by property ID + */ + static const sensor_descriptor_t descriptors[] = { +#ifdef SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT + { + .property_id = PEOPLE_COUNT, + .positive_tolerance = SL_BTMESH_SENSOR_PEOPLE_COUNT_POSITIVE_TOLERANCE_CFG_VAL, + .negative_tolerance = SL_BTMESH_SENSOR_PEOPLE_COUNT_NEGATIVE_TOLERANCE_CFG_VAL, + .sampling_function = SL_BTMESH_SENSOR_PEOPLE_COUNT_SAMPLING_FUNCTION_CFG_VAL, + .measurement_period = SL_BTMESH_SENSOR_PEOPLE_COUNT_MEASUREMENT_PERIOD_CFG_VAL, + .update_interval = SL_BTMESH_SENSOR_PEOPLE_COUNT_UPDATE_INTERVAL_CFG_VAL + }, +#endif // SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT +#if defined(SL_BOARD_ENABLE_SENSOR_LIGHT) \ + && SL_BOARD_ENABLE_SENSOR_LIGHT +#ifdef SL_CATALOG_SENSOR_LIGHT_PRESENT + { + .property_id = PRESENT_AMBIENT_LIGHT_LEVEL, + .positive_tolerance = SENSOR_LIGHT_POSITIVE_TOLERANCE, + .negative_tolerance = SENSOR_LIGHT_NEGATIVE_TOLERANCE, + .sampling_function = SENSOR_LIGHT_SAMPLING_FUNCTION, + .measurement_period = SENSOR_LIGHT_MEASUREMENT_PERIOD, + .update_interval = SENSOR_LIGHT_UPDATE_INTERVAL + }, +#elif defined(SL_CATALOG_SENSOR_LUX_PRESENT) + { + .property_id = PRESENT_AMBIENT_LIGHT_LEVEL, + .positive_tolerance = SENSOR_LUX_POSITIVE_TOLERANCE, + .negative_tolerance = SENSOR_LUX_NEGATIVE_TOLERANCE, + .sampling_function = SENSOR_LUX_SAMPLING_FUNCTION, + .measurement_period = SENSOR_LUX_MEASUREMENT_PERIOD, + .update_interval = SENSOR_LUX_UPDATE_INTERVAL + }, +#endif // SL_CATALOG_SENSOR_LIGHT_PRESENT, SL_CATALOG_SENSOR_LUX_PRESENT +#endif // SL_BOARD_ENABLE_SENSOR_LIGHT +#if defined(SL_CATALOG_SENSOR_RHT_PRESENT) \ + && defined(SL_BOARD_ENABLE_SENSOR_RHT) \ + && SL_BOARD_ENABLE_SENSOR_RHT + { + .property_id = PRESENT_AMBIENT_TEMPERATURE, + .positive_tolerance = SENSOR_THERMOMETER_POSITIVE_TOLERANCE, + .negative_tolerance = SENSOR_THERMOMETER_NEGATIVE_TOLERANCE, + .sampling_function = SENSOR_THERMOMETER_SAMPLING_FUNCTION, + .measurement_period = SENSOR_THERMOMETER_MEASUREMENT_PERIOD, + .update_interval = SENSOR_THERMOMETER_UPDATE_INTERVAL + }, +#endif // SL_CATALOG_SENSOR_RHT_PRESENT + }; + + uint16_t status = mesh_lib_sensor_server_init(BTMESH_SENSOR_SERVER_MAIN, + sizeof(descriptors) + / sizeof(sensor_descriptor_t), + descriptors); + app_assert_status_f(status, "Sensor Init Error"); + +#ifdef SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT + sl_btmesh_set_people_count(0); +#endif // SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT +#if defined(SL_BOARD_ENABLE_SENSOR_LIGHT) && SL_BOARD_ENABLE_SENSOR_LIGHT +#ifdef SL_CATALOG_SENSOR_LIGHT_PRESENT + { + sl_status_t sc; + sc = sl_sensor_light_init(); + log_status_error_f(sc, "Ambient light and UV index sensor initialization failed." NL); + } +#endif // SL_CATALOG_SENSOR_LIGHT_PRESENT +#ifdef SL_CATALOG_SENSOR_LUX_PRESENT + { + sl_status_t sc; + sc = sl_sensor_lux_init(); + log_status_error_f(sc, "Ambient light sensor initialization failed." NL); + } +#endif // SL_CATALOG_SENSOR_LUX_PRESENT +#endif // SL_BOARD_ENABLE_SENSOR_LIGHT +#if defined(SL_CATALOG_SENSOR_RHT_PRESENT) \ + && defined(SL_BOARD_ENABLE_SENSOR_RHT) \ + && SL_BOARD_ENABLE_SENSOR_RHT + { + sl_status_t sc; + sc = sl_sensor_rht_init(); + log_status_error_f(sc, "Relative Humidity and Temperature sensor initialization failed." NL); +#if SENSOR_THERMOMETER_CADENCE + if (sc != SL_STATUS_OK) { + rht_initialized = false; + } else { + rht_initialized = true; + } +#endif // SENSOR_THERMOMETER_CADENCE + } +#endif // SL_CATALOG_SENSOR_RHT_PRESENT + +#if SENSOR_PEOPLE_COUNT_CADENCE && SENSOR_THERMOMETER_CADENCE + uint32_t update_interval; + sl_btmesh_sensor_people_count_cadence_init(0); + if (rht_initialized == true) { + sl_btmesh_sensor_thermometer_cadence_init(get_temperature()); + update_interval = MIN(SENSOR_THERMOMETER_UPDATE_INTERVAL, SL_BTMESH_SENSOR_PEOPLE_COUNT_UPDATE_INTERVAL_CFG_VAL); + } else { + update_interval = SL_BTMESH_SENSOR_PEOPLE_COUNT_UPDATE_INTERVAL_CFG_VAL; + } +#elif SENSOR_PEOPLE_COUNT_CADENCE + uint32_t update_interval; + sl_btmesh_sensor_people_count_cadence_init(0); + update_interval = SL_BTMESH_SENSOR_PEOPLE_COUNT_UPDATE_INTERVAL_CFG_VAL; +#elif SENSOR_THERMOMETER_CADENCE + uint32_t update_interval; + if (rht_initialized == true) { + sl_btmesh_sensor_thermometer_cadence_init(get_temperature()); + update_interval = SENSOR_THERMOMETER_UPDATE_INTERVAL; + } else { + update_interval = 0; + } +#endif + +#if SENSOR_PEOPLE_COUNT_CADENCE || SENSOR_THERMOMETER_CADENCE + if (update_interval != 0) { + sl_status_t sc = sl_simple_timer_start(&sensor_server_data_timer, + ((uint32_t)(pow((double)1.1, ((double)update_interval - 64)) * 1000)), + sensor_server_data_timer_cb, + NO_CALLBACK_DATA, + true); + app_assert_status_f(sc, "Failed to start periodic sensor_server_data_timer"); + } +#endif +} + +/***************************************************************************//** + * Handling of sensor server get request event. + * It sending sensor status message with data for all of supported Properties ID, + * if there is no Property ID field in request. If request contains Property ID + * that is supported, functions reply with the sensor status message with data + * for this Property ID, in other case the message contains no data. + * + * @param[in] evt Pointer to sensor server get request event. + ******************************************************************************/ +static void handle_sensor_server_get_request( + sl_btmesh_evt_sensor_server_get_request_t *evt) +{ + // A slot for all sensor data + uint8_t sensor_data[SENSOR_DATA_BUF_LEN]; + uint8_t len = 0; + sl_status_t sc; + + (void)evt; +#ifdef SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT + if ((evt->property_id == PEOPLE_COUNT) + || (evt->property_id == PROPERTY_ID_ALL)) { + count16_t people_count = sl_btmesh_get_people_count(); + sl_btmesh_sensor_server_on_people_count_measurement(people_count); + len += mesh_sensor_data_to_buf(PEOPLE_COUNT, + &sensor_data[len], + (uint8_t*)&people_count); + } +#endif // SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT +#if defined(SL_BOARD_ENABLE_SENSOR_LIGHT) \ + && SL_BOARD_ENABLE_SENSOR_LIGHT +#if defined(SL_CATALOG_SENSOR_LIGHT_PRESENT) \ + || defined(SL_CATALOG_SENSOR_LUX_PRESENT) + if ((evt->property_id == PRESENT_AMBIENT_LIGHT_LEVEL) + || (evt->property_id == PROPERTY_ID_ALL)) { + illuminance_t light = get_light(); + len += mesh_sensor_data_to_buf(PRESENT_AMBIENT_LIGHT_LEVEL, + &sensor_data[len], + (uint8_t*)&light); + } +#endif // SL_CATALOG_SENSOR_LIGHT_PRESENT || SL_CATALOG_SENSOR_LUX_PRESENT +#endif // SL_BOARD_ENABLE_SENSOR_LIGHT +#if defined(SL_CATALOG_SENSOR_RHT_PRESENT) \ + && defined(SL_BOARD_ENABLE_SENSOR_RHT) \ + && SL_BOARD_ENABLE_SENSOR_RHT + if ((evt->property_id == PRESENT_AMBIENT_TEMPERATURE) + || (evt->property_id == PROPERTY_ID_ALL)) { + temperature_8_t temperature = get_temperature(); + len += mesh_sensor_data_to_buf(PRESENT_AMBIENT_TEMPERATURE, + &sensor_data[len], + (uint8_t*)&temperature); + } +#endif // SL_CATALOG_SENSOR_RHT_PRESENT + if (len > 0) { + sc = sl_btmesh_sensor_server_send_status(evt->client_address, + BTMESH_SENSOR_SERVER_MAIN, + evt->appkey_index, + NO_FLAGS, + len, + sensor_data); + } else { + sensor_data[0] = evt->property_id & 0xFF; + sensor_data[1] = ((evt->property_id) >> 8) & 0xFF; + sensor_data[2] = 0; // Length is 0 for unsupported property_id + sc = sl_btmesh_sensor_server_send_status(evt->client_address, + BTMESH_SENSOR_SERVER_MAIN, + evt->appkey_index, + NO_FLAGS, + 3, + sensor_data); + } + log_status_error_f(sc, + SENSOR_SERVER_SEND_FAILED_TEXT, + "status"); +} + +/***************************************************************************//** + * Handling of sensor server get column request event. + * Used Property IDs does not have sensor series column state, + * so reply has the same data as request according to specification. + * + * @param[in] evt Pointer to sensor server get column request event. + ******************************************************************************/ +static void handle_sensor_server_get_column_request( + sl_btmesh_evt_sensor_server_get_column_request_t *evt) +{ + sl_status_t sc; + sc = sl_btmesh_sensor_server_send_column_status(evt->client_address, + BTMESH_SENSOR_SERVER_MAIN, + evt->appkey_index, + NO_FLAGS, + evt->property_id, + evt->column_ids.len, + evt->column_ids.data); + + log_status_error_f(sc, + SENSOR_SERVER_SEND_FAILED_TEXT, + "column status"); +} + +/***************************************************************************//** + * Handling of sensor server get series request event. + * Used Property IDs does not have sensor series column state, + * so reply has only Property ID according to specification. + * + * @param[in] evt Pointer to sensor server get series request event. + ******************************************************************************/ +static void handle_sensor_server_get_series_request( + sl_btmesh_evt_sensor_server_get_series_request_t *evt) +{ + sl_status_t sc; + sc = sl_btmesh_sensor_server_send_series_status(evt->client_address, + BTMESH_SENSOR_SERVER_MAIN, + evt->appkey_index, + NO_FLAGS, + evt->property_id, + 0, + NULL); + + log_status_error_f(sc, + SENSOR_SERVER_SEND_FAILED_TEXT, + "series status"); +} + +/***************************************************************************//** + * It is used for sensor states publishing + * + * @return none + ******************************************************************************/ +static void sensor_server_publish(void) +{ + uint8_t sensor_data[SENSOR_DATA_BUF_LEN]; + uint8_t len = 0; + +#ifdef SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT + count16_t people_count = sl_btmesh_get_people_count(); + sl_btmesh_sensor_server_on_people_count_measurement(people_count); + len += mesh_sensor_data_to_buf(PEOPLE_COUNT, + &sensor_data[len], + (uint8_t*)&people_count); +#endif // SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT + +#if defined(SL_BOARD_ENABLE_SENSOR_LIGHT) && SL_BOARD_ENABLE_SENSOR_LIGHT +#if defined(SL_CATALOG_SENSOR_LIGHT_PRESENT) \ + || defined(SL_CATALOG_SENSOR_LUX_PRESENT) + illuminance_t light = get_light(); + len += mesh_sensor_data_to_buf(PRESENT_AMBIENT_LIGHT_LEVEL, + &sensor_data[len], + (uint8_t*)&light); +#endif // SL_CATALOG_SENSOR_LIGHT_PRESENT || SL_CATALOG_SENSOR_LUX_PRESENT +#endif // SL_BOARD_ENABLE_SENSOR_LIGHT + +#if defined(SL_BOARD_ENABLE_SENSOR_RHT) && SL_BOARD_ENABLE_SENSOR_RHT +#ifdef SL_CATALOG_SENSOR_RHT_PRESENT + temperature_8_t temperature = get_temperature(); + len += mesh_sensor_data_to_buf(PRESENT_AMBIENT_TEMPERATURE, + &sensor_data[len], + (uint8_t*) &temperature); +#endif // SL_CATALOG_SENSOR_RHT_PRESENT +#endif // SL_BOARD_ENABLE_SENSOR_RHT + + if (len > 0) { + sl_status_t sc = sl_btmesh_sensor_server_send_status(PUBLISH_TO_ALL_NODES, + BTMESH_SENSOR_SERVER_MAIN, + IGNORED, + NO_FLAGS, + len, + sensor_data); + log_btmesh_status_f(sc, SENSOR_SERVER_SEND_FAILED_TEXT, "status"); + } +} + +/***************************************************************************//** + * Handling of sensor server publish event. + * Indicates that the publishing period timer elapsed and updates the current + * publishing period that can be used to estimate the next tick, e.g., when + * the state should be reported at higher frequency. + * + * @param[in] evt Pointer to sensor server publish request event structure + ******************************************************************************/ +static void handle_sensor_server_publish_event( + sl_btmesh_evt_sensor_server_publish_t *evt) +{ +#if SENSOR_THERMOMETER_CADENCE || SENSOR_PEOPLE_COUNT_CADENCE + publish_period = *evt; + +#else + (void)evt; + sensor_server_publish(); +#endif +} + +/***************************************************************************//** + * Handling of sensor setup server get cadence request event. + * + * @param[in] evt Pointer to sensor server get cadence request event. + ******************************************************************************/ +static void handle_sensor_setup_server_get_cadence_request( + sl_btmesh_evt_sensor_setup_server_get_cadence_request_t *evt) +{ + sl_status_t sc; + uint16_t buff_len = 0; + uint8_t* buff_addr = NULL; + +#if SENSOR_THERMOMETER_CADENCE || SENSOR_PEOPLE_COUNT_CADENCE + uint8_t cadence_status_buf[SENSOR_CADENCE_BUF_LEN]; +#endif + +#if SENSOR_THERMOMETER_CADENCE + if (evt->property_id == PRESENT_AMBIENT_TEMPERATURE) { + buff_len = sl_btmesh_sensor_thermometer_get_cadence(SENSOR_CADENCE_BUF_LEN, cadence_status_buf); + buff_addr = cadence_status_buf; + } +#endif // SENSOR_THERMOMETER_CADENCE + +#if SENSOR_PEOPLE_COUNT_CADENCE + if (evt->property_id == PEOPLE_COUNT) { + buff_len = sl_btmesh_sensor_people_count_get_cadence(SENSOR_CADENCE_BUF_LEN, cadence_status_buf); + buff_addr = cadence_status_buf; + } +#endif // SENSOR_THERMOMETER_CADENCE + + sc = sl_btmesh_sensor_setup_server_send_cadence_status(evt->client_address, + BTMESH_SENSOR_SERVER_MAIN, + evt->appkey_index, + NO_FLAGS, + evt->property_id, + buff_len, + buff_addr); + log_status_error_f(sc, + SENSOR_SETUP_SERVER_SEND_FAILED_TEXT, + "cadence status"); +} + +/***************************************************************************//** + * Handling of sensor setup server set cadence request event. + * + * @param[in] evt Pointer to sensor server set cadence request event. + ******************************************************************************/ +static void handle_sensor_setup_server_set_cadence_request( + sl_btmesh_evt_sensor_setup_server_set_cadence_request_t *evt) +{ + bool param_validity = true; + uint16_t buff_len = 0; + uint8_t* buff_addr = NULL; + +#if SENSOR_THERMOMETER_CADENCE || SENSOR_PEOPLE_COUNT_CADENCE + uint8_t cadence_status_buf[SENSOR_CADENCE_BUF_LEN]; +#endif + +#if SENSOR_THERMOMETER_CADENCE + if (evt->property_id == PRESENT_AMBIENT_TEMPERATURE) { + // store incoming cadence parameters + param_validity = sl_btmesh_sensor_thermometer_set_cadence(evt); + if (((evt->flags & SET_CADENCE_ACK_FLAG) == SET_CADENCE_ACK_FLAG) + && (param_validity == true)) { + // prepare buffer for cadence status response + buff_len = sl_btmesh_sensor_thermometer_get_cadence(SENSOR_CADENCE_BUF_LEN, cadence_status_buf); + buff_addr = cadence_status_buf; + } + } +#endif // SENSOR_THERMOMETER_CADENCE + +#if SENSOR_PEOPLE_COUNT_CADENCE + if (evt->property_id == PEOPLE_COUNT) { + // store incoming cadence parameters + param_validity = sl_btmesh_sensor_people_count_set_cadence(evt); + if (((evt->flags & SET_CADENCE_ACK_FLAG) == SET_CADENCE_ACK_FLAG) + && (param_validity == true)) { + // prepare buffer for cadence status response + buff_len = sl_btmesh_sensor_people_count_get_cadence(SENSOR_CADENCE_BUF_LEN, cadence_status_buf); + buff_addr = cadence_status_buf; + } + } +#endif // SENSOR_PEOPLE_COUNT_CADENCE + if (((evt->flags & SET_CADENCE_ACK_FLAG) == SET_CADENCE_ACK_FLAG) + && (param_validity == true)) { + sl_status_t sc = sl_btmesh_sensor_setup_server_send_cadence_status(evt->client_address, + BTMESH_SENSOR_SERVER_MAIN, + evt->appkey_index, + NO_FLAGS, + evt->property_id, + buff_len, + buff_addr); + log_status_error_f(sc, + SENSOR_SETUP_SERVER_SEND_FAILED_TEXT, + "cadence status"); + } +} + +/***************************************************************************//** + * Handling of sensor setup server get settings request event. + * Settings are not supported now, so reply has only Property ID + * according to specification. + * + * @param[in] evt Pointer to sensor server get settings request event. + ******************************************************************************/ +static void handle_sensor_setup_server_get_settings_request( + sl_btmesh_evt_sensor_setup_server_get_settings_request_t *evt) +{ + sl_status_t sc; + sc = sl_btmesh_sensor_setup_server_send_settings_status(evt->client_address, + BTMESH_SENSOR_SERVER_MAIN, + evt->appkey_index, + NO_FLAGS, + evt->property_id, + 0, + NULL); + log_status_error_f(sc, + SENSOR_SETUP_SERVER_SEND_FAILED_TEXT, + "settings status"); +} + +/***************************************************************************//** + * Handling of sensor setup server get setting request event. + * Settings are not supported now, so reply has only Property ID + * and Sensor Property ID according to specification. + * + * @param[in] evt Pointer to sensor server get setting request event. + ******************************************************************************/ +static void handle_sensor_setup_server_get_setting_request( + sl_btmesh_evt_sensor_setup_server_get_setting_request_t *evt) +{ + sl_status_t sc; + sc = sl_btmesh_sensor_setup_server_send_setting_status(evt->client_address, + BTMESH_SENSOR_SERVER_MAIN, + evt->appkey_index, + NO_FLAGS, + evt->property_id, + evt->setting_id, + 0, + NULL); + log_status_error_f(sc, + SENSOR_SETUP_SERVER_SEND_FAILED_TEXT, + "setting status"); +} + +/***************************************************************************//** + * Handling of sensor setup server set setting request event. + * Settings are not supported now, so reply has only Property ID + * and Sensor Property ID according to specification. + * + * @param[in] evt Pointer to sensor server set setting request event. + ******************************************************************************/ +static void handle_sensor_setup_server_set_setting_request( + sl_btmesh_evt_sensor_setup_server_set_setting_request_t *evt) +{ + sl_status_t sc; + sc = sl_btmesh_sensor_setup_server_send_setting_status(evt->client_address, + BTMESH_SENSOR_SERVER_MAIN, + evt->appkey_index, + NO_FLAGS, + evt->property_id, + evt->setting_id, + 0, + NULL); + log_status_error_f(sc, + SENSOR_SETUP_SERVER_SEND_FAILED_TEXT, + "setting status"); +} + +/***************************************************************************//** + * Handling of mesh events by sensor server component. + * It handles: + * - node_initialized + * - node_provisioned + * - sensor_server_get_request + * - sensor_server_get_column_request + * - sensor_server_get_series_request + * - sensor_setup_server_get_cadence_request + * - sensor_setup_server_set_cadence_request + * - sensor_setup_server_get_settings_request + * - sensor_setup_server_get_setting_request + * - sensor_setup_server_set_setting_request + * + * @param[in] evt Pointer to incoming sensor server event. + ******************************************************************************/ +void sl_btmesh_handle_sensor_server_events(sl_btmesh_msg_t* evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_sensor_server_node_init(); + } + break; + + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_sensor_server_node_init(); + break; + + case sl_btmesh_evt_sensor_server_get_request_id: + handle_sensor_server_get_request( + &(evt->data.evt_sensor_server_get_request)); + break; + + case sl_btmesh_evt_sensor_server_get_column_request_id: + handle_sensor_server_get_column_request( + &(evt->data.evt_sensor_server_get_column_request)); + break; + + case sl_btmesh_evt_sensor_server_get_series_request_id: + handle_sensor_server_get_series_request( + &(evt->data.evt_sensor_server_get_series_request)); + break; + + case sl_btmesh_evt_sensor_server_publish_id: + handle_sensor_server_publish_event( + &(evt->data.evt_sensor_server_publish)); + break; + + case sl_btmesh_evt_sensor_setup_server_get_cadence_request_id: + handle_sensor_setup_server_get_cadence_request( + &(evt->data.evt_sensor_setup_server_get_cadence_request)); + break; + + case sl_btmesh_evt_sensor_setup_server_set_cadence_request_id: + handle_sensor_setup_server_set_cadence_request( + &(evt->data.evt_sensor_setup_server_set_cadence_request)); + break; + + case sl_btmesh_evt_sensor_setup_server_get_settings_request_id: + handle_sensor_setup_server_get_settings_request( + &(evt->data.evt_sensor_setup_server_get_settings_request)); + break; + + case sl_btmesh_evt_sensor_setup_server_get_setting_request_id: + handle_sensor_setup_server_get_setting_request( + &(evt->data.evt_sensor_setup_server_get_setting_request)); + break; + + case sl_btmesh_evt_sensor_setup_server_set_setting_request_id: + handle_sensor_setup_server_set_setting_request( + &(evt->data.evt_sensor_setup_server_set_setting_request)); + break; + + default: + break; + } +} + +#ifdef SL_CATALOG_SENSOR_RHT_PRESENT +/***************************************************************************//** + * Get the current temperature value measured by sensor. + * + * @return Current value of temperature. + ******************************************************************************/ +temperature_8_t get_temperature(void) +{ + int32_t temp_data = 0; + uint32_t temp_rh = 0; + temperature_8_t temperature = SL_BTMESH_SENSOR_TEMPERATURE_VALUE_UNKNOWN; + sl_status_t sc = sl_sensor_rht_get(&temp_rh, &temp_data); + if (sc == SL_STATUS_OK) { + temp_data = (((temp_data + * TEMPERATURE_PRE_SCALE) + + TEMPERATURE_OFFSET) + / TEMPERATURE_SCALE_VAL); + temperature = (temperature_8_t)temp_data; + } else if (sc != SL_STATUS_NOT_INITIALIZED) { + log_warning("Invalid temperature reading: %lu %ld" NL, + temp_rh, + temp_data); + } + sl_btmesh_sensor_server_on_temperature_measurement(temperature); + return temperature; +} +#endif // SL_CATALOG_SENSOR_RHT_PRESENT + +#if defined(SL_CATALOG_SENSOR_LIGHT_PRESENT) \ + || defined(SL_CATALOG_SENSOR_LUX_PRESENT) +/***************************************************************************//** + * Get the current light value measured by sensor. + * + * @return Current value of light reading. + ******************************************************************************/ +illuminance_t get_light(void) +{ + float lux; + illuminance_t light = SL_BTMESH_SENSOR_LIGHT_VALUE_UNKNOWN; + sl_status_t sc; +#ifdef SL_CATALOG_SENSOR_LIGHT_PRESENT + float uvi; + + sc = sl_sensor_light_get(&lux, &uvi); +#elif defined(SL_CATALOG_SENSOR_LUX_PRESENT) + sc = sl_sensor_lux_get(&lux); +#endif // SL_CATALOG_SENSOR_LIGHT_PRESENT + if (sc == SL_STATUS_OK) { + light = (illuminance_t)lux; + } else if (sc != SL_STATUS_NOT_INITIALIZED) { + log_warning("Invalid light reading: %6lulx" NL, (illuminance_t)lux); + } + sl_btmesh_sensor_server_on_light_measurement(light); + return light; +} +#endif // SL_CATALOG_SENSOR_LIGHT_PRESENT || SL_CATALOG_SENSOR_LUX_PRESENT + +/***************************************************************************//** + * Timer Callbacks + ******************************************************************************/ +#if SENSOR_THERMOMETER_CADENCE || SENSOR_PEOPLE_COUNT_CADENCE +/***************************************************************************//** + * Get measured value from sensors and analyze cadence conditions timer callback + * + * @param[in] handle Pointer to the timer handle + * @param[in] data Pointer to callback data + * + * @return none + ******************************************************************************/ +static void sensor_server_data_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + uint32_t publ_timer_thermometer = publish_period.period_ms; + uint32_t publ_timer_people_count = publish_period.period_ms; + uint32_t publ_timeout; + sl_status_t sc; + +#if SENSOR_THERMOMETER_CADENCE + if (rht_initialized == true) { + publ_timer_thermometer = sl_btmesh_sensor_thermometer_handle_cadence(get_temperature(), publish_period); + } +#endif // SENSOR_THERMOMETER_CADENCE + +#if SENSOR_PEOPLE_COUNT_CADENCE + publ_timer_people_count = sl_btmesh_sensor_people_count_handle_cadence(sl_btmesh_get_people_count(), publish_period); +#endif // SENSOR_PEOPLE_COUNT_CADENCE + + if (publ_timer_thermometer > publ_timer_people_count) { + publ_timeout = publ_timer_people_count; + } else { + publ_timeout = publ_timer_thermometer; + } + + if (prev_publish_timeout != publ_timeout) { + log_info("Publishing period: %d ms" NL, publ_timeout); + //Stop publish timer + sc = sl_simple_timer_stop(&sensor_server_publish_timer); + + app_assert_status_f(sc, "Failed to stop periodic sensor_server_publish_timer"); + + //Restart publishing timer with the new timer value + sc = sl_simple_timer_start(&sensor_server_publish_timer, + publ_timeout, + sensor_server_publish_timer_cb, + NO_CALLBACK_DATA, + true); + app_assert_status_f(sc, "Failed to start periodic sensor_server_publish_timer"); + } + prev_publish_timeout = publ_timeout; +} + +/***************************************************************************//** + * Publish sensor status timer callback + * + * @param[in] handle Pointer to the timer handle + * @param[in] data Pointer to callback data + * + * @return none + ******************************************************************************/ +static void sensor_server_publish_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + + sensor_server_publish(); +} +#endif +/**************************************************************************//** + * @addtogroup btmesh_sens_srv_cb_weak Weak implementation of callbacks + * @{ + *****************************************************************************/ +SL_WEAK void sl_btmesh_sensor_server_on_temperature_measurement(temperature_8_t temperature) +{ + (void) temperature; +} + +SL_WEAK void sl_btmesh_sensor_server_on_light_measurement(illuminance_t light) +{ + (void) light; +} + +SL_WEAK void sl_btmesh_sensor_server_on_people_count_measurement(count16_t people) +{ + (void) people; +} +/** @} (end addtogroup btmesh_sens_srv_cb_weak) */ + +/** @} (end addtogroup Sensor) */ diff --git a/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server.h b/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server.h new file mode 100644 index 00000000000..50cd9571830 --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_sensor_server.h + ******************************************************************************* + * # 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_BTMESH_SENSOR_SERVER_H +#define SL_BTMESH_SENSOR_SERVER_H + +#include "sl_btmesh_device_properties.h" + +#define SL_BTMESH_SENSOR_LIGHT_VALUE_UNKNOWN (0xFFFFFFFF) +#define SL_BTMESH_SENSOR_TEMPERATURE_VALUE_UNKNOWN (0x7F) + +/**************************************************************************//** + * Initialize Sensor Server. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + *****************************************************************************/ +void sl_btmesh_sensor_server_node_init(void); + +/**************************************************************************//** + * Handle Sensor Server events. + * + * This function is called automatically by Universal Configurator after + * enabling the component. + * + *****************************************************************************/ +void sl_btmesh_handle_sensor_server_events(sl_btmesh_msg_t* pEvt); + +/***************************************************************************//** + * Called when a temperature measurement is done + * @note If no implementation is provided in the application then a default weak + * implementation if provided which is a no-operation. (empty function) + * + * @param[in] temperature Temperature value in 0.5 degree Celsius steps + ******************************************************************************/ +void sl_btmesh_sensor_server_on_temperature_measurement(temperature_8_t temperature); + +/***************************************************************************//** + * Called when a light measurement is done + * @note If no implementation is provided in the application then a default weak + * implementation if provided which is a no-operation. (empty function) + * + * @param[in] temperature Temperature value in lux + ******************************************************************************/ +void sl_btmesh_sensor_server_on_light_measurement(illuminance_t light); + +/***************************************************************************//** + * Called when a people count sensor measurement is done + * @note If no implementation is provided in the application then a default weak + * implementation if provided which is a no-operation. (empty function) + * + * @param[in] temperature People count sensor value + ******************************************************************************/ +void sl_btmesh_sensor_server_on_people_count_measurement(count16_t people); + +#endif // SL_BTMESH_SENSOR_SERVER_H diff --git a/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server_cadence.c b/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server_cadence.c new file mode 100644 index 00000000000..5146eccf2df --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server_cadence.c @@ -0,0 +1,544 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Sensor Server cadence handler + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +// C Standard Library headers +#include +#include "sl_status.h" +// Bluetooth stack headers +#include "sl_btmesh_api.h" +#include "sl_btmesh_sensor.h" + +#include "app_assert.h" +#include "em_common.h" + +#include "sl_board_control_config.h" + +#ifdef SL_CATALOG_SENSOR_RHT_PRESENT +#include "sl_sensor_rht_config.h" +#include "sl_sensor_rht.h" +#endif // SL_CATALOG_SENSOR_RHT_PRESENT + +#ifdef SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT +#include "sl_btmesh_sensor_people_count_config.h" +#include "sl_btmesh_sensor_people_count.h" +#endif // SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT + +#include "sl_btmesh_sensor_server.h" +#include "sl_btmesh_sensor_server_cadence.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/// Shift 7 positions +#define STATUS_TRIGGER_TYPE_SHIFT 7 +/// Shift 8 positions +#define FAST_CADENCE_DELTA_SHIFT 8 +/// Length of people count sensor get cadence status buffer +#define SENSOR_PEOPLE_COUNT_GET_CADENCE_BUF_LEN 10 +/// Length of thermometer (discrete trigger type) get cadence status buffer +#define SENSOR_THERMOMETER_DISCRETE_GET_CADENCE_BUF_LEN 6 +/// Length of thermometer (percentage trigger type) get cadence status buffer +#define SENSOR_THERMOMETER_PERCENTAGE_GET_CADENCE_BUF_LEN 8 +/// Length of people count sensor set cadence parameter buffer +#define SENSOR_PEOPLE_COUNT_CADENCE_PARAM_LEN 9 +/// Length of thermometer (discrete trigger type) set cadence status buffer +#define SENSOR_THERMOMETER_CADENCE_PERCENTAGE_PARAM_LEN 7 +/// Length of thermometer (percentage trigger type) set cadence status buffer +#define SENSOR_THERMOMETER_CADENCE_DISCRETE_PARAM_LEN 5 +/// Cadence period divisor parameter maximum value +#define MAX_PERIOD_DIVISOR 0x0F +/// Cadence trigger type parameter maximum value +#define MAX_TRIGGER_TYPE 0x01 +/// Cadence minimum interval parameter maximum value +#define MAX_PUBLISHING_MIN_INTERVAL 0x1A +/// Percentage 100.00% +#define PERCENTAGE_FULL 10000 + +// Define the sensor index +// RHT sensor present and cadence enabled +#if SENSOR_THERMOMETER_CADENCE +#define SENSOR_RHT_INDEX 0 + +// RHT and people count sensor present +#if SENSOR_PEOPLE_COUNT_CADENCE +#define SENSOR_PEOPLE_COUNT_INDEX 1 +#endif // SENSOR_PEOPLE_COUNT_CADENCE + +// RHT sensor not present, people count sensor present +#elif SENSOR_PEOPLE_COUNT_CADENCE +#define SENSOR_PEOPLE_COUNT_INDEX 0 +#endif // SENSOR_PEOPLE_COUNT_CADENCE + +#if SENSOR_THERMOMETER_CADENCE || SENSOR_PEOPLE_COUNT_CADENCE +// Cadence parameters of supported sensors +static struct sensort_cadence_state cadences[SENSOR_THERMOMETER_CADENCE + + SENSOR_PEOPLE_COUNT_CADENCE]; + +static int delta_abs (int val); +#endif + +#if SENSOR_PEOPLE_COUNT_CADENCE +/// Previously measured people count value +static count16_t prev_people_count_data; + +// People count sensor internals +static bool sensor_people_count_fast_cadence(count16_t people_count); +static bool sensor_people_count_delta_cadence(count16_t people_count); +#endif // SENSOR_PEOPLE_COUNT_CADENCE + +#if SENSOR_THERMOMETER_CADENCE +/// Previously measured temperature value +static temperature_8_t prev_temp_data; + +// Thermometer sensor internals +static bool sensor_thermometer_fast_cadence(temperature_8_t current_temperature); +static bool sensor_thermometer_delta_cadence(temperature_8_t current_temperature); +#endif // SENSOR_THERMOMETER_CADENCE + +#if SENSOR_PEOPLE_COUNT_CADENCE + +void sl_btmesh_sensor_people_count_cadence_init(count16_t people_count) +{ + static uint16_t delta_down = SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_DELTA_DOWN_CFG_VAL; + static uint16_t delta_up = SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_DELTA_UP_CFG_VAL; + + static uint16_t cadence_low = SL_BTMESH_SENSOR_PEOPLE_COUNT_FAST_CADENCE_LOW_CFG_VAL; + static uint16_t cadence_high = SL_BTMESH_SENSOR_PEOPLE_COUNT_FAST_CADENCE_HIGH_CFG_VAL; + + cadences[SENSOR_PEOPLE_COUNT_INDEX].property_id = PEOPLE_COUNT; + cadences[SENSOR_PEOPLE_COUNT_INDEX].period_divisor = SL_BTMESH_SENSOR_PEOPLE_COUNT_FAST_CADENCE_PERIOD_DIVISOR_CFG_VAL; + cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_type = SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_TYPE_CFG_VAL; + cadences[SENSOR_PEOPLE_COUNT_INDEX].min_interval = SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_MIN_INTERVAL_CFG_VAL; + cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_low.size = sizeof(cadence_low); + cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_low.value = (uint8_t*)(&cadence_low); + cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_high.size = sizeof(cadence_high); + cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_high.value = (uint8_t*)(&cadence_high); + cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_down.size = sizeof(delta_down); + cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_down.value = (uint8_t*)(&delta_down); + cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_up.size = sizeof(delta_up); + cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_up.value = (uint8_t*)(&delta_up); + + prev_people_count_data = people_count; +} + +uint32_t sl_btmesh_sensor_people_count_handle_cadence(count16_t people_count, sl_btmesh_evt_sensor_server_publish_t publish_period) +{ + uint32_t ret_timer_value = publish_period.period_ms; + + // Check if the measured value requires publishing period modification + if (sensor_people_count_delta_cadence(people_count) + || sensor_people_count_fast_cadence(people_count)) { + // Calculate new publishing timer value + ret_timer_value = publish_period.period_ms / (1 << cadences[SENSOR_PEOPLE_COUNT_INDEX].period_divisor); + if (ret_timer_value < (uint32_t)(1 << cadences[SENSOR_PEOPLE_COUNT_INDEX].min_interval)) { + ret_timer_value = (uint32_t)(1 << cadences[SENSOR_PEOPLE_COUNT_INDEX].min_interval); + } + } + prev_people_count_data = people_count; + + return ret_timer_value; +} + +bool sl_btmesh_sensor_people_count_set_cadence(sl_btmesh_evt_sensor_setup_server_set_cadence_request_t* evt) +{ + bool ret_val = false; + + // Check if the received parameters are in valid range + if ((SENSOR_PEOPLE_COUNT_CADENCE_PARAM_LEN == evt->params.len) + && (MAX_PERIOD_DIVISOR >= evt->period_divisor) + && (MAX_TRIGGER_TYPE >= evt->trigger_type) + && (MAX_PUBLISHING_MIN_INTERVAL >= evt->params.data[4])) { + ret_val = true; + } + + // Store incoming people count sensor cadence parameters + if (true == ret_val) { + cadences[SENSOR_PEOPLE_COUNT_INDEX].period_divisor = evt->period_divisor; + cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_type = evt->trigger_type; + cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_down.value[0] = evt->params.data[0]; + cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_down.value[1] = evt->params.data[1]; + cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_up.value[0] = evt->params.data[2]; + cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_up.value[1] = evt->params.data[3]; + cadences[SENSOR_PEOPLE_COUNT_INDEX].min_interval = evt->params.data[4]; + cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_low.value[0] = evt->params.data[5]; + cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_low.value[1] = evt->params.data[6]; + cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_high.value[0] = evt->params.data[7]; + cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_high.value[1] = evt->params.data[8]; + } + + return ret_val; +} + +uint16_t sl_btmesh_sensor_people_count_get_cadence(uint8_t length, uint8_t* get_cadence_buffer) +{ + uint16_t buffer_len = 0; + + if (SENSOR_PEOPLE_COUNT_GET_CADENCE_BUF_LEN <= length) { + get_cadence_buffer[0] = cadences[SENSOR_PEOPLE_COUNT_INDEX].period_divisor + | (cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_type << STATUS_TRIGGER_TYPE_SHIFT); + get_cadence_buffer[1] = cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_down.value[0]; + get_cadence_buffer[2] = cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_down.value[1]; + get_cadence_buffer[3] = cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_up.value[0]; + get_cadence_buffer[4] = cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_up.value[1]; + get_cadence_buffer[5] = cadences[SENSOR_PEOPLE_COUNT_INDEX].min_interval; + get_cadence_buffer[6] = cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_low.value[0]; + get_cadence_buffer[7] = cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_low.value[1]; + get_cadence_buffer[8] = cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_high.value[0]; + get_cadence_buffer[9] = cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_high.value[1]; + buffer_len = SENSOR_PEOPLE_COUNT_GET_CADENCE_BUF_LEN; + } + + return buffer_len; +} + +/***************************************************************************//** + * Check if the measured value requires publishing period modification. + * + * @param[in] people_count People count sensor data value + * + * @return True if publishing period modification is required false otherwise + ******************************************************************************/ +static bool sensor_people_count_fast_cadence(count16_t people_count) +{ + bool ret_val = false; + count16_t fast_cadence_high = (count16_t)(cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_high.value[0] + | (cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_high.value[1] << FAST_CADENCE_DELTA_SHIFT)); + count16_t fast_cadence_low = (count16_t)(cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_low.value[0] + | (cadences[SENSOR_PEOPLE_COUNT_INDEX].fast_cadence_low.value[1] << FAST_CADENCE_DELTA_SHIFT)); + + // Check if the Fast Cadence High value is equal or higher than the Fast Cadence Low value + if (fast_cadence_high >= fast_cadence_low) { + // If the measured value is within the closed interval of + // [Fast Cadence Low, Fast Cadence High], Sensor Status publishing period + // modification is required. + if ((people_count >= fast_cadence_low) + && (people_count <= fast_cadence_high)) { + ret_val = true; + } + // Check if the Fast Cadence High value is lower than the Fast Cadence Low value + } else { + // If the measured value is lower than the Fast Cadence High value or is + // higher than the Fast Cadence Low value, Sensor Status publishing period + // modification is required. + if ((people_count < fast_cadence_high) + || (people_count > fast_cadence_low)) { + ret_val = true; + } + } + + return ret_val; +} + +/***************************************************************************//** + * Check if the change of the measured value requires publishing period modification. + * + * @param[in] people_count People count sensor data value + * + * @return True if publishing period modification is required false otherwise + ******************************************************************************/ +static bool sensor_people_count_delta_cadence(count16_t people_count) +{ + bool ret_val = false; + uint16_t delta_percent; + uint16_t delta_cadence_up = (uint16_t)(cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_up.value[0] + | (cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_up.value[1] << FAST_CADENCE_DELTA_SHIFT)); + uint16_t delta_cadence_down = (uint16_t)(cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_down.value[0] + | (cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_delta_down.value[1] << FAST_CADENCE_DELTA_SHIFT)); + + // Check the unit and format of the Status Trigger Delta Down and + // the Status Trigger Delta Up fields. + if (SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_TYPE_DISCRETE_VALUE_CFG_VAL == cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_type) { + // If the temperature change is rising and the measured quantity change + // exceeds the configured Status Trigger Delta Up value, Sensor Status + // publishing period modification is required. + if ((people_count > prev_people_count_data) + && ((people_count - prev_people_count_data) >= (count16_t)delta_cadence_up)) { + ret_val = true; + // If the temperature change is falling and the measured quantity change + // exceeds the configured Status Trigger Delta Down value, Sensor Status + // publishing period modification is required. + } else if ((people_count < prev_people_count_data) + && ((prev_people_count_data - people_count) >= (count16_t)delta_cadence_down)) { + ret_val = true; + } else { + } + // Same check with measured value represented unitless as percentage + } else if ((SL_BTMESH_SENSOR_PEOPLE_COUNT_STATUS_TRIGGER_TYPE_PERCENTAGE_CFG_VAL == cadences[SENSOR_PEOPLE_COUNT_INDEX].status_trigger_type) + && (prev_people_count_data != people_count)) { + if (!prev_people_count_data) { + delta_percent = PERCENTAGE_FULL; + } else { + delta_percent = delta_abs((delta_abs(prev_people_count_data - people_count) * PERCENTAGE_FULL) / prev_people_count_data); + } + + if ((people_count > prev_people_count_data) && (delta_percent >= delta_cadence_up)) { + ret_val = true; + } else if ((people_count < prev_people_count_data) && (delta_percent >= delta_cadence_down)) { + ret_val = true; + } else { + } + } else { + } + + return ret_val; +} + +#endif // SENSOR_PEOPLE_COUNT_CADENCE + +#if SENSOR_THERMOMETER_CADENCE + +void sl_btmesh_sensor_thermometer_cadence_init(temperature_8_t temperature) +{ + static uint16_t delta_down = SENSOR_THERMOMETER_STATUS_TRIGGER_DELTA_DOWN; + static uint16_t delta_up = SENSOR_THERMOMETER_STATUS_TRIGGER_DELTA_UP; + + static uint8_t cadence_low = SENSOR_THERMOMETER_FAST_CADENCE_LOW; + static uint8_t cadence_high = SENSOR_THERMOMETER_FAST_CADENCE_HIGH; + + cadences[SENSOR_RHT_INDEX].property_id = PRESENT_AMBIENT_TEMPERATURE; + cadences[SENSOR_RHT_INDEX].period_divisor = SENSOR_THERMOMETER_FAST_CADENCE_PERIOD_DIVISOR; + cadences[SENSOR_RHT_INDEX].status_trigger_type = SENSOR_THERMOMETER_STATUS_TRIGGER_TYPE; + cadences[SENSOR_RHT_INDEX].min_interval = SENSOR_THERMOMETER_STATUS_MIN_INTERVAL; + cadences[SENSOR_RHT_INDEX].fast_cadence_low.size = sizeof(cadence_low); + cadences[SENSOR_RHT_INDEX].fast_cadence_low.value = (uint8_t*)(&cadence_low); + cadences[SENSOR_RHT_INDEX].fast_cadence_high.size = sizeof(cadence_high); + cadences[SENSOR_RHT_INDEX].fast_cadence_high.value = (uint8_t*)(&cadence_high); + cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.value = (uint8_t*)(&delta_down); + cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.value = (uint8_t*)(&delta_up); + + if (SENSOR_THERMOMETER_STATUS_TRIGGER_TYPE_DISCRETE_VALUE == cadences[SENSOR_RHT_INDEX].status_trigger_type) { + cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.size = sizeof(uint8_t); + cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.size = sizeof(uint8_t); + } else { + cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.size = sizeof(delta_down); + cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.size = sizeof(delta_up); + } + + prev_temp_data = temperature; +} + +uint32_t sl_btmesh_sensor_thermometer_handle_cadence(temperature_8_t temperature, sl_btmesh_evt_sensor_server_publish_t publish_period) +{ + uint32_t ret_timer_value = publish_period.period_ms; + + // Check if the measured value requires publishing period modification + if (sensor_thermometer_delta_cadence(temperature) + || sensor_thermometer_fast_cadence(temperature)) { + // Calculate publishing timer value + ret_timer_value = publish_period.period_ms / (1 << cadences[SENSOR_RHT_INDEX].period_divisor); + if (ret_timer_value < (uint32_t)(1 << cadences[SENSOR_RHT_INDEX].min_interval)) { + ret_timer_value = (uint32_t)(1 << cadences[SENSOR_RHT_INDEX].min_interval); + } + } + prev_temp_data = temperature; + + return ret_timer_value; +} + +bool sl_btmesh_sensor_thermometer_set_cadence(sl_btmesh_evt_sensor_setup_server_set_cadence_request_t* evt) +{ + bool ret_val = false; + + // Check if the received parameters are in valid range + if ((MAX_PERIOD_DIVISOR >= evt->period_divisor) + && (MAX_TRIGGER_TYPE >= evt->trigger_type)) { + if ((SENSOR_THERMOMETER_STATUS_TRIGGER_TYPE_PERCENTAGE == evt->trigger_type) + && (SENSOR_THERMOMETER_CADENCE_PERCENTAGE_PARAM_LEN == evt->params.len) + && (MAX_PUBLISHING_MIN_INTERVAL >= evt->params.data[4])) { + ret_val = true; + } else if ((SENSOR_THERMOMETER_STATUS_TRIGGER_TYPE_DISCRETE_VALUE == evt->trigger_type) + && (SENSOR_THERMOMETER_CADENCE_DISCRETE_PARAM_LEN == evt->params.len) + && (MAX_PUBLISHING_MIN_INTERVAL >= evt->params.data[2])) { + ret_val = true; + } else { + } + } + + // store incoming thermometer sensor cadence parameters + if (true == ret_val) { + if ( SENSOR_THERMOMETER_STATUS_TRIGGER_TYPE_PERCENTAGE == evt->trigger_type) { + cadences[SENSOR_RHT_INDEX].period_divisor = evt->period_divisor; + cadences[SENSOR_RHT_INDEX].status_trigger_type = evt->trigger_type; + cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.value[0] = evt->params.data[1]; + cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.value[1] = evt->params.data[0]; + cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.value[0] = evt->params.data[3]; + cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.value[1] = evt->params.data[2]; + cadences[SENSOR_RHT_INDEX].min_interval = evt->params.data[4]; + cadences[SENSOR_RHT_INDEX].fast_cadence_low.value[0] = evt->params.data[5]; + cadences[SENSOR_RHT_INDEX].fast_cadence_high.value[0] = evt->params.data[6]; + // In case of SENSOR_THERMOMETER_STATUS_TRIGGER_TYPE_DISCRETE_VALUE trigger type + } else { + cadences[SENSOR_RHT_INDEX].period_divisor = evt->period_divisor; + cadences[SENSOR_RHT_INDEX].status_trigger_type = evt->trigger_type; + cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.value[0] = evt->params.data[0]; + cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.value[0] = evt->params.data[1]; + cadences[SENSOR_RHT_INDEX].min_interval = evt->params.data[2]; + cadences[SENSOR_RHT_INDEX].fast_cadence_low.value[0] = evt->params.data[3]; + cadences[SENSOR_RHT_INDEX].fast_cadence_high.value[0] = evt->params.data[4]; + } + } + + return ret_val; +} + +uint16_t sl_btmesh_sensor_thermometer_get_cadence(uint8_t length, uint8_t* get_cadence_buffer) +{ + uint16_t buffer_len = 0; + + if ((SENSOR_THERMOMETER_STATUS_TRIGGER_TYPE_PERCENTAGE == cadences[SENSOR_RHT_INDEX].status_trigger_type) + && (SENSOR_THERMOMETER_PERCENTAGE_GET_CADENCE_BUF_LEN <= length)) { + get_cadence_buffer[0] = cadences[SENSOR_RHT_INDEX].period_divisor + | (cadences[SENSOR_RHT_INDEX].status_trigger_type << STATUS_TRIGGER_TYPE_SHIFT); + get_cadence_buffer[1] = cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.value[1]; + get_cadence_buffer[2] = cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.value[0]; + get_cadence_buffer[3] = cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.value[1]; + get_cadence_buffer[4] = cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.value[0]; + get_cadence_buffer[5] = cadences[SENSOR_RHT_INDEX].min_interval; + get_cadence_buffer[6] = cadences[SENSOR_RHT_INDEX].fast_cadence_low.value[0]; + get_cadence_buffer[7] = cadences[SENSOR_RHT_INDEX].fast_cadence_high.value[0]; + buffer_len = SENSOR_THERMOMETER_PERCENTAGE_GET_CADENCE_BUF_LEN; + } else if ((SENSOR_THERMOMETER_STATUS_TRIGGER_TYPE_DISCRETE_VALUE == cadences[SENSOR_RHT_INDEX].status_trigger_type) + && (SENSOR_THERMOMETER_DISCRETE_GET_CADENCE_BUF_LEN <= length)) { + get_cadence_buffer[0] = cadences[SENSOR_RHT_INDEX].period_divisor + | (cadences[SENSOR_RHT_INDEX].status_trigger_type << STATUS_TRIGGER_TYPE_SHIFT); + get_cadence_buffer[1] = cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.value[0]; + get_cadence_buffer[2] = cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.value[0]; + get_cadence_buffer[3] = cadences[SENSOR_RHT_INDEX].min_interval; + get_cadence_buffer[4] = cadences[SENSOR_RHT_INDEX].fast_cadence_low.value[0]; + get_cadence_buffer[5] = cadences[SENSOR_RHT_INDEX].fast_cadence_high.value[0]; + buffer_len = SENSOR_THERMOMETER_DISCRETE_GET_CADENCE_BUF_LEN; + } else { + } + + return buffer_len; +} + +/***************************************************************************//** + * Check if the measured value requires publishing period modification. + * + * @param[in] temperature Thermometer sensor data value. + * + * @return True if modification is required false otherwise + ******************************************************************************/ +static bool sensor_thermometer_fast_cadence(temperature_8_t temperature) +{ + bool ret_val = false; + + // Check if the Fast Cadence High value is equal or higher than the Fast Cadence Low value + if ((temperature_8_t)(cadences[SENSOR_RHT_INDEX].fast_cadence_high.value[0]) + >= (temperature_8_t)(cadences[SENSOR_RHT_INDEX].fast_cadence_low.value[0])) { + // If the measured value is within the closed interval of + // [Fast Cadence Low, Fast Cadence High], Sensor Status publishing period + // modification is required. + if ((temperature >= (temperature_8_t)(cadences[SENSOR_RHT_INDEX].fast_cadence_low.value[0])) + && (temperature <= (temperature_8_t)(cadences[SENSOR_RHT_INDEX].fast_cadence_high.value[0]))) { + ret_val = true; + } + // If the Fast Cadence High value is lower than the Fast Cadence Low value + } else { + // If the measured value is lower than the Fast Cadence High value or is + // higher than the Fast Cadence Low value, Sensor Status publishing period + // modification is required. + if ((temperature < (temperature_8_t)(cadences[SENSOR_RHT_INDEX].fast_cadence_high.value[0])) + || (temperature > (temperature_8_t)(cadences[SENSOR_RHT_INDEX].fast_cadence_low.value[0]))) { + ret_val = true; + } + } + + return ret_val; +} + +/***************************************************************************//** + * Check if the change of the measured value requires publishing period modification. + * + * @param[in] temperature Thermometer sensor data value. + * + * @return True if modification is required false otherwise + ******************************************************************************/ +static bool sensor_thermometer_delta_cadence(temperature_8_t temperature) +{ + bool ret_val = false; + uint16_t delta_percent; + uint16_t percent_delta_up_value; + uint16_t percent_delta_down_value; + + // Check the unit and format of the Status Trigger Delta Down and + // the Status Trigger Delta Up fields. + if (SENSOR_THERMOMETER_STATUS_TRIGGER_TYPE_DISCRETE_VALUE == cadences[SENSOR_RHT_INDEX].status_trigger_type) { + // If the temperature change is rising edge and the measured quantity change + // exceeds the configured Status Trigger Delta Up value, the Sensor Status + // messages are published more frequently. + if ((temperature > prev_temp_data) + && ((temperature - prev_temp_data) >= (temperature_8_t)(cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.value[0]))) { + ret_val = true; + // If the temperature change is rising edge and the measured quantity change + // exceeds the configured Status Trigger Delta Up value, the Sensor Status + // messages are published more frequently. + } else if ((temperature < prev_temp_data) + && ((prev_temp_data - temperature) >= (temperature_8_t)(cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.value[0]))) { + ret_val = true; + } else { + } + // Same check with measured value represented unitless as percentage + } else if ((SENSOR_THERMOMETER_STATUS_TRIGGER_TYPE_PERCENTAGE == cadences[SENSOR_RHT_INDEX].status_trigger_type) + && (prev_temp_data != temperature)) { + percent_delta_down_value = (uint16_t)(cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.value[0] + | (cadences[SENSOR_RHT_INDEX].status_trigger_delta_down.value[1] << FAST_CADENCE_DELTA_SHIFT)); + percent_delta_up_value = (uint16_t)(cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.value[0] + | (cadences[SENSOR_RHT_INDEX].status_trigger_delta_up.value[1] << FAST_CADENCE_DELTA_SHIFT)); + + if (!prev_temp_data) { + delta_percent = PERCENTAGE_FULL; + } else { + delta_percent = delta_abs((delta_abs(prev_temp_data - temperature) * PERCENTAGE_FULL) / prev_temp_data); + } + + if ((temperature > prev_temp_data) && (delta_percent >= percent_delta_up_value)) { + ret_val = true; + } else if ((temperature < prev_temp_data) && (delta_percent >= percent_delta_down_value)) { + ret_val = true; + } else { + } + } else { + } + + return ret_val; +} + +#endif // SENSOR_THERMOMETER_CADENCE + +#if SENSOR_THERMOMETER_CADENCE || SENSOR_PEOPLE_COUNT_CADENCE +// Return the absolute value of val. +static int delta_abs(int val) +{ + return val < 0 ? -val : val; +} +#endif diff --git a/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server_cadence.h b/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server_cadence.h new file mode 100644 index 00000000000..5bc2b4ef2d0 --- /dev/null +++ b/app/btmesh/common/btmesh_sensor_server/sl_btmesh_sensor_server_cadence.h @@ -0,0 +1,146 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_sensor_server_cadence.h + ******************************************************************************* + * # 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_BTMESH_SENSOR_SERVER_CADENCE_H +#define SL_BTMESH_SENSOR_SERVER_CADENCE_H + +#include "sl_btmesh_device_properties.h" +#include "sl_btmesh_api.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_SENSOR_RHT_PRESENT +#include "sl_sensor_rht_config.h" +#endif // SL_CATALOG_SENSOR_RHT_PRESENT + +#ifdef SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT +#include "sl_btmesh_sensor_people_count_config.h" +#endif // SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT + +#if defined(SL_CATALOG_SENSOR_RHT_PRESENT) \ + && defined(SL_BOARD_ENABLE_SENSOR_RHT) \ + && SL_BOARD_ENABLE_SENSOR_RHT \ + && SENSOR_THERMOMETER_CADENCE_ENABLE + +#define SENSOR_THERMOMETER_CADENCE 1 +#else +#define SENSOR_THERMOMETER_CADENCE 0 +#endif + +#if defined(SL_CATALOG_BTMESH_SENSOR_PEOPLE_COUNT_PRESENT) \ + && SL_BTMESH_SENSOR_PEOPLE_COUNT_CADENCE_ENABLE_CFG_VAL + +#define SENSOR_PEOPLE_COUNT_CADENCE 1 +#else +#define SENSOR_PEOPLE_COUNT_CADENCE 0 +#endif + +#if SENSOR_PEOPLE_COUNT_CADENCE +/***************************************************************************//** + * Initialize people count sensor cadence internals. + * + * @param[in] people_count People count sensor data value. + * + * @return none + ******************************************************************************/ +void sl_btmesh_sensor_people_count_cadence_init(count16_t people_count); + +/***************************************************************************//** + * Handle thermometer measured value cadence condition + * + * @param[in] people_count People count sensor data value. + * @param[in] publish_period Publish event data structure + * + * @return publishing timer value based on cadence parameters and measured value in ms + ******************************************************************************/ +uint32_t sl_btmesh_sensor_people_count_handle_cadence(count16_t people_count, sl_btmesh_evt_sensor_server_publish_t publish_period); + +/***************************************************************************//** + * Update thermometer sensor cadence internal parameters with input cadence data. + * + * @param[in] evt Pointer to sensor server set cadence request event. + * + * @return True if received parameters are in valid range false otherwise + ******************************************************************************/ +bool sl_btmesh_sensor_people_count_set_cadence(sl_btmesh_evt_sensor_setup_server_set_cadence_request_t* evt); + +/***************************************************************************//** + * Fill the input buffer with people count sensor cadence parameters. + * + * @param[out] get_cadence_buffer Parameters data buffer + * + * @return Parameters data buffer length + ******************************************************************************/ +uint16_t sl_btmesh_sensor_people_count_get_cadence(uint8_t length, uint8_t* get_cadence_buffer); + +#endif // SENSOR_PEOPLE_COUNT_CADENCE + +#if SENSOR_THERMOMETER_CADENCE +/***************************************************************************//** + * Initialize temperature sensor cadence internals. + * + * @param[in] temperature Thermometer sensor data value. + * + * @return none + ******************************************************************************/ +void sl_btmesh_sensor_thermometer_cadence_init(temperature_8_t temperature); + +/***************************************************************************//** + * Handle thermometer measured value cadence condition + * + * @param[in] temperature Thermometer sensor data value. + * @param[in] publish_period Publish event data structure + * + * @return publishing timer value based on cadence parameters and measured value in ms + ******************************************************************************/ +uint32_t sl_btmesh_sensor_thermometer_handle_cadence(temperature_8_t temperature, sl_btmesh_evt_sensor_server_publish_t publish_period); + +/***************************************************************************//** + * Update thermometer sensor cadence internal parameters with input cadence data. + * + * @param[in] evt Pointer to sensor server set cadence request event. + * + * @return True if received parameters are in valid range false otherwise + ******************************************************************************/ +bool sl_btmesh_sensor_thermometer_set_cadence(sl_btmesh_evt_sensor_setup_server_set_cadence_request_t* evt); + +/***************************************************************************//** + * Fill the input buffer with thermometer sensor cadence parameters. + * + * @param[out] get_cadence_buffer Parameters data buffer + * + * @return Parameters data buffer length + ******************************************************************************/ +uint16_t sl_btmesh_sensor_thermometer_get_cadence(uint8_t length, uint8_t* get_cadence_buffer); +#endif // SENSOR_THERMOMETER_CADENCE + +#endif // SL_BTMESH_SENSOR_SERVER_CADENCE_H diff --git a/app/btmesh/common/btmesh_time_server/btmesh_time_server.dcd b/app/btmesh/common/btmesh_time_server/btmesh_time_server.dcd new file mode 100644 index 00000000000..89405b34c3a --- /dev/null +++ b/app/btmesh/common/btmesh_time_server/btmesh_time_server.dcd @@ -0,0 +1,10 @@ +[ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x1200", "name":"Time Server"}, + {"mid":"0x1201", "name":"Time Setup Server"} + ] + } +] \ No newline at end of file diff --git a/app/btmesh/common/btmesh_time_server/config/sl_btmesh_time_server_config.h b/app/btmesh/common/btmesh_time_server/config/sl_btmesh_time_server_config.h new file mode 100644 index 00000000000..655f39bf4d8 --- /dev/null +++ b/app/btmesh/common/btmesh_time_server/config/sl_btmesh_time_server_config.h @@ -0,0 +1,48 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_TIME_SERVER_CONFIG_H +#define SL_BTMESH_TIME_SERVER_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Time Server configuration + +// Enable Logging +// Default: 1 +// Enable / disable Logging for Time Server model specific messages for this component. +#define SL_BTMESH_TIME_SERVER_LOGGING_CFG_VAL (1) + +// + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_TIME_SERVER_CONFIG_H diff --git a/app/btmesh/common/btmesh_time_server/sl_btmesh_time_server.c b/app/btmesh/common/btmesh_time_server/sl_btmesh_time_server.c new file mode 100644 index 00000000000..771c1528173 --- /dev/null +++ b/app/btmesh/common/btmesh_time_server/sl_btmesh_time_server.c @@ -0,0 +1,217 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Time Server module + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "em_common.h" +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_dcd.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#include "sl_btmesh_time_server.h" +#include "sl_btmesh_time_server_config.h" + +// Warning! The app_btmesh_util shall be included after the component configuration +// header file in order to provide the component specific logging macro. +#include "app_btmesh_util.h" + +/***************************************************************************//** + * @addtogroup Time Server + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Time initialization. + * This should be called at each boot if provisioning is already done. + * Otherwise this function should be called after provisioning is completed. + * + * @return Status of the initialization operation. + * Returns bg_err_success (0) if succeed, non-zero otherwise. + ******************************************************************************/ +uint16_t sl_btmesh_time_init(void) +{ + // Initialize time server models + sl_status_t result = sl_btmesh_time_server_init(BTMESH_TIME_SERVER_MAIN); + log_status_error_f(result, "sl_btmesh_time_server_init failed" NL); + + return result; +} + +/***************************************************************************//** + * Handling of time server time updated event. + * + * @param[in] evt Pointer to time server time updated event. + ******************************************************************************/ +static void handle_time_server_time_updated_event( + sl_btmesh_evt_time_server_time_updated_t *evt) +{ + log_info("evt:gecko_evt_mesh_time_server_time_updated_id, tai_seconds=0x"); + // print only 40 bits as this is size of TAI Seconds + log_append_info("%2.2x", (uint8_t)((evt->tai_seconds >> 32) & 0xFF)); + log_append_info("%4.4x", (uint16_t)((evt->tai_seconds >> 16) & 0xFFFF)); + log_append_info("%4.4x, ", (uint16_t)(evt->tai_seconds & 0xFFFF)); + log_append_info("subsecond=%u, uncertainty=%u ms, time_authority=%u, tai_utc_delta=%ld, \ + time_zone_offset=%d" NL, + evt->subsecond, + (uint16_t)evt->uncertainty * 10, + evt->time_authority, + evt->tai_utc_delta, + evt->time_zone_offset); + (void)evt; +} + +/***************************************************************************//** + * Handling of time server time zone offset updated event. + * + * @param[in] evt Pointer to time server time zone offset updated event. + ******************************************************************************/ +static void handle_time_server_time_zone_offset_updated_event( + sl_btmesh_evt_time_server_time_zone_offset_updated_t *evt) +{ + log_info("evt:gecko_evt_mesh_time_server_time_zone_offset_updated_id, \ + zone_offset_current=%d, zone_offset_new=%d, tai_of_zone_change=0x", + evt->time_zone_offset_current, + evt->time_zone_offset_new); + // print only 40 bits as this is size of TAI of Zone Change + log_append_info("%2.2x", (uint8_t)((evt->tai_of_zone_change >> 32) & 0xFF)); + log_append_info("%4.4x", (uint16_t)((evt->tai_of_zone_change >> 16) & 0xFFFF)); + log_append_info("%4.4x", (uint16_t)(evt->tai_of_zone_change & 0xFFFF)); + log_append_info(NL); + (void)evt; +} + +/***************************************************************************//** + * Handling of time server tai utc delta updated event. + * + * @param[in] evt Pointer to time server tai utc delta updated event. + ******************************************************************************/ +static void handle_time_server_tai_utc_delta_updated_event( + sl_btmesh_evt_time_server_tai_utc_delta_updated_t *evt) +{ + log_info("evt:gecko_evt_mesh_time_server_tai_utc_delta_updated_id, \ + tai_utc_delta_current=%ld, tai_utc_delta_new=%ld, tai_of_delta_change=0x", + evt->tai_utc_delta_current, + evt->tai_utc_delta_new); + // print only 40 bits as this is size of TAI of Delta Change + log_append_info("%2.2x", (uint8_t)((evt->tai_of_delta_change >> 32) & 0xFF)); + log_append_info("%4.4x", (uint16_t)((evt->tai_of_delta_change >> 16) & 0xFFFF)); + log_append_info("%4.4x", (uint16_t)(evt->tai_of_delta_change & 0xFFFF)); + log_append_info(NL); + (void)evt; +} + +/***************************************************************************//** + * Handling of time server time role updated event. + * + * @param[in] evt Pointer to time server time role updated event. + ******************************************************************************/ +static void handle_time_server_time_role_updated_event( + sl_btmesh_evt_time_server_time_role_updated_t *evt) +{ + log_info("evt:gecko_evt_mesh_time_server_time_role_updated_id, time_role="); + switch (evt->time_role) { + case sl_btmesh_time_client_time_role_none: + log_append_info("None"); + break; + + case sl_btmesh_time_client_time_role_authority: + log_append_info("Authority"); + break; + + case sl_btmesh_time_client_time_role_relay: + log_append_info("Relay"); + break; + + case sl_btmesh_time_client_time_role_client: + log_append_info("Client"); + break; + + default: + break; + } + log_append_info(NL); +} + +/******************************************************************************* + * Handling of mesh time events. + * It handles: + * - time_server_time_updated + * - time_server_time_zone_offset_updated + * - time_server_tai_utc_delta_updated + * - time_server_time_role_updated + * + * @param[in] evt Pointer to incoming time event. + ******************************************************************************/ +void sl_btmesh_time_server_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_time_server_time_updated_id: + handle_time_server_time_updated_event( + &(evt->data.evt_time_server_time_updated)); + break; + + case sl_btmesh_evt_time_server_time_zone_offset_updated_id: + handle_time_server_time_zone_offset_updated_event( + &(evt->data.evt_time_server_time_zone_offset_updated)); + break; + + case sl_btmesh_evt_time_server_tai_utc_delta_updated_id: + handle_time_server_tai_utc_delta_updated_event( + &(evt->data.evt_time_server_tai_utc_delta_updated)); + break; + + case sl_btmesh_evt_time_server_time_role_updated_id: + handle_time_server_time_role_updated_event( + &(evt->data.evt_time_server_time_role_updated)); + break; + + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + sl_btmesh_time_init(); + } + break; + + case sl_btmesh_evt_node_provisioned_id: + sl_btmesh_time_init(); + break; + + default: + break; + } +} + +/** @} (end addtogroup Time Server) */ diff --git a/app/btmesh/common/btmesh_time_server/sl_btmesh_time_server.h b/app/btmesh/common/btmesh_time_server/sl_btmesh_time_server.h new file mode 100644 index 00000000000..3e33471735f --- /dev/null +++ b/app/btmesh/common/btmesh_time_server/sl_btmesh_time_server.h @@ -0,0 +1,59 @@ +/***************************************************************************//** + * @file + * @brief sl_btmesh_time_server.h + ******************************************************************************* + * # 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_BTMESH_TIME_SERVER_H +#define SL_BTMESH_TIME_SERVER_H + +/***************************************************************************//** + * Scenes initialization. + * This should be called at each boot if provisioning is already done. + * Otherwise this function should be called after provisioning is completed. + * It is called automatically by the Universal Configurator Framework + * + * @return Status of the initialization operation. + * Returns bg_err_success (0) if succeed, non-zero otherwise. + ******************************************************************************/ +uint16_t sl_btmesh_scenes_init(void); + +/***************************************************************************//** + * Handling of mesh time events. + * It handles: + * - time_server_time_updated + * - time_server_time_zone_offset_updated + * - time_server_tai_utc_delta_updated + * - time_server_time_role_updated + * + * It is called automatically by the Universal Configurator Framework + * + * @param[in] evt Pointer to incoming time event. + ******************************************************************************/ +void sl_btmesh_time_server_on_event(sl_btmesh_msg_t *evt); + +#endif // SL_BTMESH_TIME_SERVER_H diff --git a/app/btmesh/common/btmesh_wstk_lcd/config/sl_btmesh_wstk_lcd_config.h b/app/btmesh/common/btmesh_wstk_lcd/config/sl_btmesh_wstk_lcd_config.h new file mode 100644 index 00000000000..092e8642e36 --- /dev/null +++ b/app/btmesh/common/btmesh_wstk_lcd/config/sl_btmesh_wstk_lcd_config.h @@ -0,0 +1,221 @@ +/***************************************************************************//** + * @file + * @brief + ******************************************************************************* + * # License + * Copyright 2021 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_BTMESH_WSTK_LCD_CONFIG_H +#define SL_BTMESH_WSTK_LCD_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// LCD rows configuration + +// Row for Device Name +// Default: 1 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Device Name will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_NAME_CFG_VAL (1) + +// Row for Node Status +// Default: 2 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Node Status will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL (2) + +// Row for Connection Status +// Default: 3 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Connection Status will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL (3) + +// Row for Friend status in a Friendship +// Default: 4 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Friend status in a Friendship will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_FRIEND_CFG_VAL (4) + +// Row for LPN status in a Friendship +// Default: 4 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the LPN status in a Friendship will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_LPN_CFG_VAL (4) + +// Sensor Server + +// Row for People Count +// Default: 5 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the People Count will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_PEOPLE_COUNT_CFG_VAL (5) + +// Row for Server Temperature +// Default: 6 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Server Temperature will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_TEMPERATURE_CFG_VAL (6) + +// Row for Illuminance +// Default: 7 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Illuminance will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_ILLUMINANCE_CFG_VAL (7) + +// + +// Sensor Client + +// Row for Sensor Data +// Default: 5 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the First row of Sensor Data read by the client will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_SENSOR_DATA_CFG_VAL (5) + +// + +// Lighting + +// Row for Lightness +// Default: 5 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Lightness will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_LIGHTNESS_CFG_VAL (5) + +// Row for Color Temperature +// Default: 6 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Color Temperature will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_COLOR_TEMPERATURE_CFG_VAL (6) + +// Row for Hue +// Default: 6 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Hue will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_HUE_CFG_VAL (6) + +// Row for Delta UV +// Default: 7 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Delta UV will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_DELTAUV_CFG_VAL (7) + +// Row for Saturation +// Default: 7 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Saturation will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_SATURATION_CFG_VAL (7) + +// + +// Firmware Update + +// Firmware Update Status +// Default: 5 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Firmware Update Status will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_STATUS_CFG_VAL (5) + +// Firmware Update Messages +// Default: 6 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Firmware Update Messages will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_FW_UPDATE_MESSAGES_CFG_VAL (6) + +// + +// BLOB Transfer + +// BLOB Transfer Status +// Default: 7 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the BLOB Transfer Status will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_BLOB_STATUS_CFG_VAL (7) + +// BLOB Transfer ID +// Default: 8 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the BLOB Transfer ID will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_BLOB_ID_CFG_VAL (8) + +// BLOB Transfer Progress +// Default: 9 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the BLOB Transfer Progress will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_BLOB_PROGRESS_CFG_VAL (9) + +// + +// Distributor + +// Row for Fw Distribution Server Firmware List +// Default: 5 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Firmware List will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_DIST_FW_LIST_CFG_VAL (5) + +// Row for Fw Distribution Server Upload Progress +// Default: 6 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Upload Progress will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_DIST_UPLOAD_PROGRESS_CFG_VAL (6) + +// Row for Fw Distribution Server Node List +// Default: 7 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Node List will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_DIST_NODE_LIST_CFG_VAL (7) + +// Row for Fw Distribution Server State +// Default: 8 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the State will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_DIST_STATE_CFG_VAL (8) + +// Row for Fw Distribution Server Distribution Progress +// Default: 9 +// <1-9:1> +// LCD on WSTKs have 9 rows. Out of these the Distribution Progress will be printed in the row specified here. +#define SL_BTMESH_WSTK_LCD_ROW_DIST_DISTRIBUTION_PROGRESS_CFG_VAL (9) + +// + +// + +// LCD texts + +// Text for initializing graphics. +// Text for initializing graphics +#define SL_BTMESH_WSTK_LCD_GRAPH_INIT_TEXT_CFG_VAL "SILICON LABORATORIES\nBluetooth Mesh Demo\n\n" + +// Text to be printed on the LCD when it is initialized. +// Text to be printed on the LCD when it is initialized +#define SL_BTMESH_WSTK_LCD_INIT_TEXT_CFG_VAL "initializing" + +// + +// <<< end of configuration section >>> + +#endif // SL_BTMESH_WSTK_LCD_CONFIG_H diff --git a/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_graphics.c b/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_graphics.c new file mode 100644 index 00000000000..3690be2bddf --- /dev/null +++ b/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_graphics.c @@ -0,0 +1,185 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Graphics: Draws the graphics on the display + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +// standard headers +#include +#include + +#include "app_assert.h" +#include "em_types.h" +#include "glib.h" +#include "dmd.h" + +// Own header +#include "sl_btmesh_wstk_graphics.h" + +/// Left arrow polygon vertices +#define LEFT_ARROW_7x6 { 1, 123, 8, 120, 8, 126 } +/// Right arrow polygon vertices +#define RIGHT_ARROW_7x6 { 119, 120, 126, 123, 119, 126 } + +// ----------------------------------------------------------------------------- +// Local Variables + +// Global glib context +static GLIB_Context_t glibContext; +// Current line number stored for printing text +static uint8_t graphLineNum = 0; +// Device name string +static char *deviceHeader = NULL; + +// ----------------------------------------------------------------------------- +// Static Function Declarations + +/***************************************************************************//** + * @brief Print the given string center aligned + * + * @note The string may contain several lines separated by new line + * characters ('\n'). Each line will be printed center aligned. + * + * @param[in] pContext Context + * @param[in] pString String to be displayed + * + * @return Status of printing to LCD + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FAIL In case of failure + ******************************************************************************/ +static sl_status_t graphPrintCenter(GLIB_Context_t *pContext, char *pString); + +// ----------------------------------------------------------------------------- +// Function Definitions + +void graphInit(char *header) +{ + EMSTATUS status; + + // Initialize the DMD module for the DISPLAY device driver. + status = DMD_init(0); + app_assert_status_f(status, "DMD init error"); + + status = GLIB_contextInit(&glibContext); + app_assert_status_f(status, "GLIB init error"); + + glibContext.backgroundColor = White; + glibContext.foregroundColor = Black; + + // Use Narrow font + status = GLIB_setFont(&glibContext, (GLIB_Font_t *)&GLIB_FontNarrow6x8); + app_assert_status_f(status, "Font setting error"); + deviceHeader = header; +} + +sl_status_t graphWriteString(char *string) +{ + sl_status_t ret = SL_STATUS_OK; + EMSTATUS status; + status = GLIB_clear(&glibContext); + if (GLIB_OK != status) { + return SL_STATUS_FAIL; + } + + // Reset line number, print header and device name + graphLineNum = 0; + ret = graphPrintCenter(&glibContext, deviceHeader); + if (SL_STATUS_OK != ret) { + return ret; + } + + // Print the string below the header center aligned + ret = graphPrintCenter(&glibContext, string); + if (SL_STATUS_OK != ret) { + return ret; + } + + status = DMD_updateDisplay(); + if (DMD_OK != status) { + return SL_STATUS_FAIL; + } + return ret; +} + +sl_status_t graphDrawArrow(sl_btmesh_LCD_arrow arrow) +{ + EMSTATUS status = DMD_OK; + const int32_t left_points[] = LEFT_ARROW_7x6; + const int32_t right_points[] = RIGHT_ARROW_7x6; + if ((arrow & SL_BTMESH_LCD_LEFT_ARROW) != 0) { + status = GLIB_drawPolygon(&glibContext, 3, left_points); + } + if (((arrow & SL_BTMESH_LCD_RIGHT_ARROW) != 0) && (DMD_OK == status)) { + status = GLIB_drawPolygon(&glibContext, 3, right_points); + } + + if (DMD_OK == status) { + status = DMD_updateDisplay(); + } + + return DMD_OK == status ? SL_STATUS_OK : SL_STATUS_FAIL; +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions + +static sl_status_t graphPrintCenter(GLIB_Context_t *pContext, char *pString) +{ + do { + char* nextToken; + uint8_t len; + + // Search for the next important token (new line or terminating NULL) + for (nextToken = pString; + ((*nextToken != '\n') && (*nextToken != '\0')); + nextToken++) { + ; + } + + len = nextToken - pString; + // Print the line if it is not null length + if (len) { + uint8_t strWidth = len * pContext->font.fontWidth; + uint8_t posX = (pContext->pDisplayGeometry->xSize - strWidth) >> 1; + uint8_t posY = ((pContext->font.lineSpacing + pContext->font.fontHeight) + * graphLineNum) + + pContext->font.lineSpacing; + EMSTATUS status = GLIB_drawString(pContext, pString, len, posX, posY, 0); + if (GLIB_OK != status && GLIB_ERROR_NOTHING_TO_DRAW != status) { + return SL_STATUS_FAIL; + } + } + pString = nextToken; + // If the token at the end of the line is new line character, + // then increase line number + if (*nextToken == '\n') { + graphLineNum++; + pString++; + } + } while (*pString); // while terminating NULL is not reached + return SL_STATUS_OK; +} diff --git a/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_graphics.h b/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_graphics.h new file mode 100644 index 00000000000..358f7ff0531 --- /dev/null +++ b/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_graphics.h @@ -0,0 +1,87 @@ +/***************************************************************************//** + * @file + * @brief Displays text on the LCD + ******************************************************************************* + * # 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_BTMESH_WSTK_GRAPHICS_H +#define SL_BTMESH_WSTK_GRAPHICS_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "sl_status.h" + +/// Enumeration of possible arrows to be drawn +typedef enum { + /// Left arrow + SL_BTMESH_LCD_LEFT_ARROW = 1 << 0, + /// Right arrow + SL_BTMESH_LCD_RIGHT_ARROW = 1 << 1, + /// Left arrow and right arrow + SL_BTMESH_LCD_LEFT_RIGHT_ARROW = SL_BTMESH_LCD_LEFT_ARROW + | SL_BTMESH_LCD_RIGHT_ARROW +} sl_btmesh_LCD_arrow; + +// ----------------------------------------------------------------------------- +// Public Function Declarations + +/***************************************************************************//** + * @brief Initialize graphics stack. + * + * @param[in] header Header Text on display + ******************************************************************************/ +void graphInit(char *header); + +/***************************************************************************//** + * @brief Display a string on the LCD center aligned. + * + * @param[in] string String to be displayed + * + * @returns Status of the command. + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FAIL In case of failure + ******************************************************************************/ +sl_status_t graphWriteString(char *string); + +/***************************************************************************//** + * Draw arrows on the page. + * + * @param[in] arrow Arrow to be drawn + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FAIL In case of failure + ******************************************************************************/ +sl_status_t graphDrawArrow(sl_btmesh_LCD_arrow arrow); + +#ifdef __cplusplus +} +#endif + +#endif /* SL_BTMESH_WSTK_GRAPHICS_H */ diff --git a/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_lcd.c b/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_lcd.c new file mode 100644 index 00000000000..df5def2ce7e --- /dev/null +++ b/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_lcd.c @@ -0,0 +1,213 @@ +/***************************************************************************//** + * @file + * @brief LCD driver implementation 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. + * + ******************************************************************************/ + +#include +#include +#include "sl_btmesh_wstk_graphics.h" +#include "sl_btmesh_wstk_lcd.h" +#include "sl_btmesh_wstk_lcd_config.h" +#include "sl_malloc.h" + +#include "app_assert.h" + +/***************************************************************************//** + * Refresh selected page. + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FAIL If display manipulation failed + ******************************************************************************/ +static sl_status_t refresh_page(); + +/// Array for storing the LCD content +static char *LCD_data = NULL; +/// Number of pages stored +static uint8_t page_cnt = 0; +/// Page displayed +static uint8_t page_select = 0; + +/***************************************************************************//** + * @addtogroup disp_interface + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * Call a callback function at the given frequency. + * + * @param[in] pFunction Pointer to function that should be called at the + * given frequency. + * @param[in] argument Argument to be given to the function. + * @param[in] frequency Frequency at which to call function at. + * + * @return Status code of the operation. + * + * @note This is needed by the LCD driver + ******************************************************************************/ +int rtcIntCallbackRegister(void (*pFunction)(void *), + void *argument, + unsigned int frequency) +{ + (void)pFunction; + (void)argument; + (void)frequency; + + return 0; +} + +sl_status_t sl_btmesh_LCD_init(void) +{ + graphInit(SL_BTMESH_WSTK_LCD_GRAPH_INIT_TEXT_CFG_VAL); + + return sl_btmesh_LCD_write(SL_BTMESH_WSTK_LCD_INIT_TEXT_CFG_VAL, SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); +} + +sl_status_t sl_btmesh_LCD_write(const char *str, uint8_t row) +{ + return sl_btmesh_LCD_write_paged(str, row, 0); +} + +sl_status_t sl_btmesh_LCD_write_paged(const char *str, uint8_t row, uint8_t page) +{ + char *pPage; + char *pRow; + + if (row > LCD_ROW_MAX || row < 1) { + return SL_STATUS_INVALID_PARAMETER; + } + + uint8_t page_cnt_tmp = page_cnt; + if (page >= page_cnt) { + page_cnt = page + 1; + LCD_data = sl_realloc(LCD_data, LCD_ROW_MAX * LCD_ROW_LEN * page_cnt); + app_assert(LCD_data != NULL, "LCD allocation error."); + memset(&LCD_data[LCD_ROW_MAX * LCD_ROW_LEN * page_cnt_tmp], + 0, + LCD_ROW_MAX * LCD_ROW_LEN * (page_cnt - page_cnt_tmp)); + } + + pPage = &(LCD_data[page * LCD_ROW_MAX * LCD_ROW_LEN]); + + pRow = &(pPage[(row - 1) * LCD_ROW_LEN]); + + strcpy(pRow, str); + + pPage[LCD_ROW_MAX * LCD_ROW_LEN - 1] = '\0'; + + if ((page == page_select) || ((page - 1) == page_select)) { + return refresh_page(); + } else { + // Not necessary to print hidden page + return SL_STATUS_OK; + } +} + +sl_status_t sl_btmesh_LCD_remove_page(uint8_t page) +{ + if ((page == 0) || (page >= page_cnt)) { + return SL_STATUS_INVALID_INDEX; + } + if (page != (page_cnt - 1)) { + memcpy(&LCD_data[LCD_ROW_MAX * LCD_ROW_LEN * page], + &LCD_data[LCD_ROW_MAX * LCD_ROW_LEN * (page + 1)], + LCD_ROW_MAX * LCD_ROW_LEN * (page_cnt - page)); + } + LCD_data = sl_realloc(LCD_data, LCD_ROW_MAX * LCD_ROW_LEN * --page_cnt); + app_assert(LCD_data != NULL, "LCD allocation error."); + // Make sure display shows consistent data + if (page == page_select) { + return sl_btmesh_LCD_select_page(0); + } else if (page < page_select) { + return sl_btmesh_LCD_prev_page(); + } + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_LCD_clear_pages(void) +{ + LCD_data = sl_realloc(LCD_data, LCD_ROW_MAX * LCD_ROW_LEN); + app_assert(LCD_data != NULL, "LCD allocation error."); + memset(LCD_data, 0, LCD_ROW_MAX * LCD_ROW_LEN); + page_cnt = 1; + return sl_btmesh_LCD_select_page(0); +} + +sl_status_t sl_btmesh_LCD_select_page(uint8_t page) +{ + if (page < page_cnt) { + page_select = page; + return refresh_page(); + } + return SL_STATUS_INVALID_INDEX; +} + +sl_status_t sl_btmesh_LCD_next_page(void) +{ + if (page_select == page_cnt - 1) { + return SL_STATUS_OK; + } + ++page_select; + return refresh_page(); +} + +sl_status_t sl_btmesh_LCD_prev_page(void) +{ + if (page_select == 0) { + return SL_STATUS_OK; + } + --page_select; + return refresh_page(); +} + +/** @} (end addtogroup disp_interface) */ + +static sl_status_t refresh_page() +{ + char LCD_message[LCD_ROW_MAX * LCD_ROW_LEN] = { 0 }; + char *pPage; + char *pRow; + pPage = &(LCD_data[page_select * LCD_ROW_MAX * LCD_ROW_LEN]); + + for (int i = 0; i < LCD_ROW_MAX; ++i) { + pRow = &(pPage[i * LCD_ROW_LEN]); + strcat(LCD_message, pRow); + strcat(LCD_message, "\n"); + } + + sl_status_t status = graphWriteString(LCD_message); + + if ((page_select > 0) && (SL_STATUS_OK == status)) { + status = graphDrawArrow(SL_BTMESH_LCD_LEFT_ARROW); + } + if ((page_select < page_cnt - 1) && (SL_STATUS_OK == status)) { + status = graphDrawArrow(SL_BTMESH_LCD_RIGHT_ARROW); + } + + return status; +} diff --git a/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_lcd.h b/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_lcd.h new file mode 100644 index 00000000000..85f78c6f41f --- /dev/null +++ b/app/btmesh/common/btmesh_wstk_lcd/sl_btmesh_wstk_lcd.h @@ -0,0 +1,178 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh WSTK LCD driver header 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_BTMESH_WSTK_LCD_H +#define SL_BTMESH_WSTK_LCD_H + +#include +#include "sl_status.h" +#include "sl_btmesh_wstk_lcd_config.h" + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/***************************************************************************//** + * \defgroup lcd_driver LCD Driver + * \brief Driver for SPI LCD Display. + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup disp_interface + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup lcd_driver + * @{ + ******************************************************************************/ + +/******************************************************************************* + * LCD content can be updated one row at a time using function LCD_write(). + * Row number is passed as parameter, the possible values are defined below. + ******************************************************************************/ +/** up to 9 rows available on screen */ +#define LCD_ROW_MAX 9 +/** up to 21 characters, plus line break each row */ +#define LCD_ROW_LEN 22 + +/***************************************************************************//** + * Initialize LCD. + * + * Called once at startup. + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FAIL If writing header failed + ******************************************************************************/ +sl_status_t sl_btmesh_LCD_init(void); + +/***************************************************************************//** + * This function is used to write one line on the LCD. + * + * @note This uses @ref sl_btmesh_LCD_write_paged to write onto page 0. + * + * @param[in] str Pointer to string which is displayed in the specified row. + * @param[in] row Selects which line of LCD display is written, + * possible values are defined as LCD_ROW_xxx. + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_PARAMETER If row is invalid + * @retval SL_STATUS_FAIL If writing failed + ******************************************************************************/ +sl_status_t sl_btmesh_LCD_write(const char *str, uint8_t row); + +/***************************************************************************//** + * This function is used to write one line on the LCD onto the given page. + * + * Pages are handled dynamically + * + * @param[in] str Pointer to string which is displayed in the specified row. + * @param[in] row Selects which line of LCD display is written, + * possible values are defined as LCD_ROW_xxx. + * @param[in] page Page identifier. Zero-based. + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_PARAMETER If row is invalid + * @retval SL_STATUS_FAIL If writing failed + ******************************************************************************/ +sl_status_t sl_btmesh_LCD_write_paged(const char *str, + uint8_t row, + uint8_t page); + +/***************************************************************************//** + * Select page to be displayed and display it. + * + * @param[in] page Page index to display. Zero-based. + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FAIL If page refresh failed + * @retval SL_STATUS_INVALID_INDEX If page index is out of range + ******************************************************************************/ +sl_status_t sl_btmesh_LCD_select_page(uint8_t page); + +/***************************************************************************//** + * Select next page to be displayed and display it. + * + * @return Status code + * @retval SL_STATUS_OK In case of success, or last page is displayed + * @retval SL_STATUS_FAIL If page refresh failed + ******************************************************************************/ +sl_status_t sl_btmesh_LCD_next_page(void); + +/***************************************************************************//** + * Select previous page to be displayed and display it. + * + * @return Status code + * @retval SL_STATUS_OK In case of success, or last page is displayed + * @retval SL_STATUS_FAIL If page refresh failed + ******************************************************************************/ +sl_status_t sl_btmesh_LCD_prev_page(void); + +/***************************************************************************//** + * Remove page. + * + * If currently displayed page is removed, display a valid one. If last page is + * removed, display the first one. If page is removed from before the currently + * displayed page refresh page so consistency is upheld. + * + * Page 0 can't be removed. + * + * @param[in] page Page index to remove. Zero-based. + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_INDEX If page is out of range or 0. + * @retval SL_STATUS_FAIL If page needed to be refreshed and was unsuccessful + ******************************************************************************/ +sl_status_t sl_btmesh_LCD_remove_page(uint8_t page); + +/***************************************************************************//** + * Remove every page except the first. + * + * Refreshes page. + * + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_FAIL If page refresh is unsuccessful + ******************************************************************************/ +sl_status_t sl_btmesh_LCD_clear_pages(void); + +/** @} (end addtogroup lcd_driver) */ +/** @} (end addtogroup disp_interface) */ + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif /* SL_BTMESH_WSTK_LCD_H */ diff --git a/app/btmesh/common/ncp_btmesh_dfu/ncp_btmesh_dfu.c b/app/btmesh/common/ncp_btmesh_dfu/ncp_btmesh_dfu.c new file mode 100644 index 00000000000..828f23c1d4e --- /dev/null +++ b/app/btmesh/common/ncp_btmesh_dfu/ncp_btmesh_dfu.c @@ -0,0 +1,185 @@ +/***************************************************************************//** + * @file + * @brief Implementation of FW Update Server application level functionality + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include + +#include "em_common.h" +#include "sl_bt_api.h" + +#include "ncp_btmesh_dfu.h" +#include "sl_status.h" + +/// Maximum length of the version infromation +#define VER_INFO_MAX_LENGTH 106 +/// Length of the Company ID in bytes +#define CID_LENGTH 2 +/// Maximum length of firmware URI +#define URI_MAX_LENGTH 255 + +/// Storage entry structure +typedef PACKSTRUCT (struct storage_s { + /// Length of the FWID + uint8_t fwid_len; + /// FWID data + /// + /// @details Contains 2 bytes of CID (little-endian) and up to 106 bytes of + /// version information. + uint8_t *fwid_data; + /// URI length + uint8_t uri_len; + /// URI data + /// + /// @details Contains up to 255 bytes. + uint8_t *uri_data; +}) storage_t; + +PACKSTRUCT(struct { + /// Current length of the storage + uint8_t storage_len; + /// Storage data + storage_t * storage; +}) dfu = { .storage_len = 0, .storage = NULL }; // Initialize values to 0 + +/***************************************************************************//** + * (Re)allocates storage based on the index of the FW + * + * @param idx Index of the firmware for which reallocate storage if needed + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NO_MORE_RESOURCE In case of memory allocation error + ******************************************************************************/ +static sl_status_t allocate_storage(uint8_t idx); + +static sl_status_t allocate_storage(uint8_t idx) +{ + void *ptr; + + if (idx >= dfu.storage_len) { + ptr = calloc((idx + 1), sizeof(storage_t)); + if (NULL == ptr) { + return SL_STATUS_NO_MORE_RESOURCE; + } + if (dfu.storage != NULL) { + memcpy(ptr, dfu.storage, sizeof(storage_t) * dfu.storage_len); + } + free(dfu.storage); + dfu.storage = ptr; + dfu.storage_len = idx + 1; + } + + return SL_STATUS_OK; +} + +sl_status_t mesh_platform_get_installed_firmware_information(uint8_t index, + uint8_t *fwid_len, + const uint8_t **fwid_ptr, + uint8_t *uri_len, + const uint8_t **uri_ptr) +{ + if (index < dfu.storage_len) { + *fwid_len = dfu.storage[index].fwid_len; + *fwid_ptr = dfu.storage[index].fwid_data; + *uri_len = dfu.storage[index].uri_len; + *uri_ptr = dfu.storage[index].uri_data; + return SL_STATUS_OK; + } + + return SL_STATUS_NOT_FOUND; +} + +sl_status_t sl_btmesh_ncp_dfu_set_fwid(uint8_t idx, uint8_t len, uint8_t *data) +{ + void *ptr; + if ((len < CID_LENGTH) || (len > (CID_LENGTH + VER_INFO_MAX_LENGTH))) { + return SL_STATUS_INVALID_PARAMETER; + } + sl_status_t sc = allocate_storage(idx); + if (SL_STATUS_OK != sc) { + return sc; + } + ptr = realloc(dfu.storage[idx].fwid_data, len); + if (NULL == ptr) { + return SL_STATUS_NO_MORE_RESOURCE; + } + dfu.storage[idx].fwid_len = len; + dfu.storage[idx].fwid_data = ptr; + memcpy(dfu.storage[idx].fwid_data, data, len); + + return SL_STATUS_OK; +} + +sl_status_t sl_btmesh_ncp_dfu_set_uri(uint8_t idx, + uint8_t type, + uint8_t len, + uint8_t *data) +{ + void *ptr; + + switch (type) { + case USER_SUB_CMD_URI_ID_WRT: { + sl_status_t sc = allocate_storage(idx); + if (SL_STATUS_OK != sc) { + return sc; + } + ptr = realloc(dfu.storage[idx].uri_data, len); + if (NULL == ptr) { + return SL_STATUS_NO_MORE_RESOURCE; + } + dfu.storage[idx].uri_data = ptr; + dfu.storage[idx].uri_len = len; + memcpy(dfu.storage[idx].uri_data, data, len); + } + break; + case USER_SUB_CMD_URI_ID_APP: + if (idx >= dfu.storage_len) { + // This index has not been initialized yet + return SL_STATUS_NOT_FOUND; + } + if (dfu.storage[idx].uri_len + len > URI_MAX_LENGTH) { + // According to the specification, URI can't be longer than 255 bytes + return SL_STATUS_INVALID_PARAMETER; + } + // Allocate memory to fit appended value + ptr = realloc(dfu.storage[idx].uri_data, dfu.storage[idx].uri_len + len); + if (NULL == ptr) { + return SL_STATUS_NO_MORE_RESOURCE; + } + dfu.storage[idx].uri_data = ptr; + // Append data to the existing URI + memcpy(&dfu.storage[idx].uri_data[dfu.storage[idx].uri_len], data, len); + // Increment URI length + dfu.storage[idx].uri_len += len; + break; + default: + return SL_STATUS_INVALID_PARAMETER; + } + + return SL_STATUS_OK; +} diff --git a/app/btmesh/common/ncp_btmesh_dfu/ncp_btmesh_dfu.h b/app/btmesh/common/ncp_btmesh_dfu/ncp_btmesh_dfu.h new file mode 100644 index 00000000000..3700997cd62 --- /dev/null +++ b/app/btmesh/common/ncp_btmesh_dfu/ncp_btmesh_dfu.h @@ -0,0 +1,74 @@ +/***************************************************************************//** + * @file + * @brief Definitions for FW Update Server application level functionality + ******************************************************************************* + * # 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 DFU_H +#define DFU_H + +#include "sl_status.h" + +// User sub-command to write FW URI +#define USER_SUB_CMD_URI_ID_WRT '0' +// User sub-command to append to FW URI +#define USER_SUB_CMD_URI_ID_APP '1' + +/***************************************************************************//** + * Sets the Firmware ID for the given index, as part of the FW information + * + * @param idx Index of the FW + * @param len Length of the data + * @param data Firmware ID data; containing CID and version information + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_INVALID_PARAMETER If length is less than 2 or greater + than 108 + * @retval SL_STATUS_NO_MORE_RESOURCE In case memory allocation error + ******************************************************************************/ +sl_status_t sl_btmesh_ncp_dfu_set_fwid(uint8_t idx, uint8_t len, uint8_t *data); + +/***************************************************************************//** + * Sets the URI for given index, as part of the FW information + * + * @param idx Index of the FW + * @param type Type of the command; '0' erases and writes new URI, + * '1' appends to existing URI. + * @param len Length of the data + * @param data The data to write or append + * @return Status code + * @retval SL_STATUS_OK In case of success + * @retval SL_STATUS_NO_MORE_RESOURCE In case of memory allocation error + * @retval SL_STATUS_INVALID_PARAMETER In case the combined length of the URI + * is longer than 255 bytes + ******************************************************************************/ +sl_status_t sl_btmesh_ncp_dfu_set_uri(uint8_t idx, + uint8_t type, + uint8_t len, + uint8_t *data); + +#endif // DFU_H diff --git a/app/btmesh/common_host/btmesh_app_prov/btmesh_app_prov.c b/app/btmesh/common_host/btmesh_app_prov/btmesh_app_prov.c new file mode 100644 index 00000000000..d2b21bea119 --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_prov/btmesh_app_prov.c @@ -0,0 +1,882 @@ +/**************************************************************************//** +* @file +* @brief BT Mesh Provisioner Application component - CLI handler +******************************************************************************* +* # 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. +* +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// Includes + +// standard library headers +#include + +// app-related headers +#include "app.h" +#include "btmesh_app_prov.h" +#include "app_log.h" +#include "app_assert.h" +#include "sl_simple_timer.h" + +#include "sl_common.h" +#include "btmesh_prov.h" +#include "btmesh_db.h" +#include "btmesh_key_export.h" + +#include "app_conf.h" + +// ---------------------------------------------------------------------------- +// Macros + +// ---------------------------------------------------------------------------- +// Static Function Declarations + +/**************************************************************************//** + * Handle --nodeinfo functionality + * + *****************************************************************************/ +static void handle_nodeinfo(void); + +/**************************************************************************//** + * Handle --nodelist functionality + * + ****************************************************************************/ +static void handle_nodelist(void); + +/**************************************************************************//** + * Handle --provision functionality + * + ****************************************************************************/ +static void handle_provision(void); + +/**************************************************************************//** + * Handle --remove functionality + * + ****************************************************************************/ +static void handle_remove(void); + +/**************************************************************************//** + * Handle --key-refresh functionality + * + ****************************************************************************/ +static void handle_key_refresh(void); + +/**************************************************************************//** + * Handle --key-export functionality + * + ****************************************************************************/ +static void handle_key_export(void); + +/**************************************************************************//** + * Handle --reset functionality + * + ****************************************************************************/ +static void handle_reset(void); + +/**************************************************************************//** + * Handle --scan functionality + * + ****************************************************************************/ +static void handle_scan(void); + +/**************************************************************************//** + * Exit in command line mode, call btmesh_app_prov_end_of_cmd() in UI mode + * + ****************************************************************************/ +static void end_command(void); + +/**************************************************************************//** + * Node removal job status callback + * + * @param[in] job The job this function is called from + ****************************************************************************/ +static void app_on_remove_node_job_status(const btmesh_conf_job_t *job); + +/**************************************************************************//** + * Callback for the timer used during scanning + * + * @param[in] timer Pointer to the timer used + * @param[in] data Data from the timer + ****************************************************************************/ +static void app_on_scan_timer(sl_simple_timer_t *timer, void *data); + +/**************************************************************************//** + * Callback for the timer used during provisioner reset + * + * @param[in] timer Pointer to the timer used + * @param[in] data Data from the timer + ****************************************************************************/ +static void app_on_reset_timer(sl_simple_timer_t *timer, void *data); + +// ---------------------------------------------------------------------------- +// Static Variables + +static prov_mode_t app_prov_mode = PROV_CMD_LINE_MODE; +/// Flag stating that the btmeshprov_initialized event has arrived +static bool initialized = false; +/// Number of networks already present on the provisioner at startup +static uint16_t networks_on_startup = 0; +/// UUID passed as an argument +static uuid_128 command_uuid; +/// The state of the current command +static command_state_t command_state = INIT; +/// The command in use +static command_t command = NONE; +/// Flag indicating that a provisioning session has started +static bool prov_started = false; +/// Number of known devices in the DDB list +static uint16_t ddb_count = 0; +/// Flag for network database status +static bool db_ready = false; +static uint32_t phase_timeout_s = DEFAULT_PHASE_TIMEOUT_S; +/// Timer for scanning for unprovisioned devices +static sl_simple_timer_t scan_timer; +/// Timer for provisioner node reset +static sl_simple_timer_t reset_timer; +/// Command line options +static struct option prov_long_options[PROV_OPTLENGTH] = { + { "nodeinfo", required_argument, 0, 'i' }, + { "nodelist", no_argument, 0, 'l' }, + { "provision", required_argument, 0, 'p' }, + { "remove", required_argument, 0, 'r' }, + { "key-refresh", required_argument, 0, 'k' }, + { "key-export", required_argument, 0, 'x' }, + { "reset", no_argument, 0, 'e' }, + { "scan", no_argument, 0, 's' } +}; + +// ---------------------------------------------------------------------------- +// Function definitions + +sl_status_t btmesh_app_prov_init(int opt, char *optarg) +{ + sl_status_t sc = SL_STATUS_OK; + + switch (opt) { + case 'p': + // provision selected node + command = PROVISION; + command_state = START; + char *pos = optarg; + size_t len = strlen(optarg); + // Parse input for UUID + app_parse_uuid(pos, len, &command_uuid); + break; + case 'l': + // List all nodes in network + app_log_info("Nodelist" APP_LOG_NEW_LINE); + command = NODELIST; + command_state = START; + break; + case 'i': { + // Info about selected node + app_log_info("Nodeinfo: %s" APP_LOG_NEW_LINE, optarg); + char *pos = optarg; + size_t len = strlen(optarg); + // Parse input for UUID + app_parse_uuid(pos, len, &command_uuid); + command = NODEINFO; + command_state = START; + break; + } + case 'r': { + // Remove node from network + app_log_info("Remove: %s" APP_LOG_NEW_LINE, optarg); + char *pos = optarg; + size_t len = strlen(optarg); + // Parse input for UUID + app_parse_uuid(pos, len, &command_uuid); + command = REMOVE_NODE; + command_state = START; + break; + } + case 'k': { + // Refresh network keys + app_log_info("Key refresh with phase timeout: %s" APP_LOG_NEW_LINE, optarg); + long long timeout = strtoll(optarg, NULL, 0); + app_assert(timeout > 0ll && timeout < (96 * 3600), "Invalid argument"); + phase_timeout_s = timeout; + command = KEY_REFRESH; + command_state = START; + break; + } + case 'x': { + // Export keys + app_log_info("Export keys to: %s" APP_LOG_NEW_LINE, optarg); + btmesh_key_export_set_file_name(optarg); + command = KEY_EXPORT; + command_state = START; + break; + } + case 's': + // Scan for unprovisioned nodes + app_log_info("Scan" APP_LOG_NEW_LINE); + command = SCAN; + command_state = START; + break; + case 'e': + // Factory reset + app_log_info("Factory reset" APP_LOG_NEW_LINE); + command = RESET; + command_state = START; + break; + // Process options for other modules. + default: + sc = SL_STATUS_NOT_FOUND; + break; + } + return sc; +} + +void btmesh_app_prov_process_action(void) +{ + if (initialized == true) { + switch (command) { + case SCAN: + handle_scan(); + break; + case PROVISION: + handle_provision(); + break; + case NODELIST: + handle_nodelist(); + break; + case NODEINFO: + handle_nodeinfo(); + break; + case REMOVE_NODE: + handle_remove(); + break; + case KEY_REFRESH: + handle_key_refresh(); + break; + case KEY_EXPORT: + handle_key_export(); + break; + case RESET: + handle_reset(); + break; + default: + break; + } + if (app_prov_mode == PROV_UI_MODE) { + btmesh_app_prov_handle_ui(); + } + } +} + +void btmesh_app_prov_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_prov_initialized_id: { + // Device successfully initialized in provisioner mode + sl_btmesh_evt_prov_initialized_t *initialized_evt; + initialized_evt = (sl_btmesh_evt_prov_initialized_t *)&(evt->data); + + initialized = true; + networks_on_startup = initialized_evt->networks; + + if (INIT == command_state) { + command_state = START; + } + break; + } + + case sl_btmesh_evt_prov_ddb_list_id: { + // DDB List event + if (NODELIST == command) { + // If nodelist is requested, print the information + // This event can be fired from elsewhere, no logs needed in that case + sl_btmesh_evt_prov_ddb_list_t *ddb_list_evt; + ddb_list_evt = (sl_btmesh_evt_prov_ddb_list_t *)&(evt->data); + uuid_128 uuid = ddb_list_evt->uuid; + uint16_t address = ddb_list_evt->address; + uint8_t elements = ddb_list_evt->elements; + if (BTMESH_APP_PROV_NCP_ADDRESS != address) { + app_log_nl(); + app_log_info("Address: 0x%04x" APP_LOG_NEW_LINE, address); + app_log_info("Element count: %d" APP_LOG_NEW_LINE, elements); + app_log_info("UUID: "); + btmesh_app_prov_append_uuid(&uuid); + } + } + break; + } + case sl_btmesh_evt_prov_key_refresh_node_update_id: { + sl_btmesh_evt_prov_key_refresh_node_update_t *evt_data; + evt_data = &(evt->data.evt_prov_key_refresh_node_update); + app_log_info(" Phase %d %s: ", evt_data->phase, evt_data->failure ? "failed" : "succeed"); + btmesh_app_prov_append_uuid(&evt_data->uuid); + break; + } + case sl_btmesh_evt_prov_key_refresh_phase_update_id: { + uint8_t phase = evt->data.evt_prov_key_refresh_phase_update.phase; + app_log_info("Key refresh phase %d" APP_LOG_NEW_LINE, phase); + break; + } + case sl_btmesh_evt_prov_key_refresh_complete_id: { + uint16_t result = evt->data.evt_prov_key_refresh_complete.result; + if (result == SL_STATUS_OK) { + app_log_info("Key refresh succeed" APP_LOG_NEW_LINE); + } else { + app_log_error("Key refresh failed with error code 0x%04x." APP_LOG_NEW_LINE, result); + } + command_state = FINISHED; + break; + } + case sl_btmesh_evt_node_reset_id: + // Node reset successful + app_log_info("Reset system" APP_LOG_NEW_LINE); + sl_bt_system_reset(0); + break; + + /////////////////////////////////////////////////////////////////////////// + // Add additional event handlers here as your application requires! // + /////////////////////////////////////////////////////////////////////////// + + // ------------------------------- + // Default event handler. + default: + break; + } + // Let other modules handle their events too + btmesh_key_export_on_event(evt); + btmesh_prov_on_event(evt); + btmesh_conf_on_event(evt); +} + +// ---------------------------------------------------------------------------- +// App logic functions + +void handle_scan(void) +{ + switch (command_state) { + case START: { + sl_status_t sc; + sc = btmesh_prov_start_scanning(); + if (SL_STATUS_OK != sc) { + app_log_warning("Failed to start scanning" APP_LOG_NEW_LINE); + } else { + app_log_info("Scanning started" APP_LOG_NEW_LINE); + } + command_state = IN_PROGRESS; + // Let the provisioner scan unprovisioned nodes + sl_simple_timer_start(&scan_timer, // Timer pointer + SCAN_TIMER_MS, // Timer duration + app_on_scan_timer, // Timer callback + NULL, // Timer data, not needed + false); // Not periodic + break; + } + case IN_PROGRESS: + // Do nothing, timer callback will trigger next state + break; + case FINISHED: { + sl_status_t sc; + sc = btmesh_prov_stop_scanning(); + if (SL_STATUS_OK != sc) { + app_log_warning("Failed to stop scanning" APP_LOG_NEW_LINE); + } else { + app_log_nl(); + sc = btmesh_prov_list_unprovisioned_nodes(); + if (SL_STATUS_EMPTY == sc) { + app_log_warning("No unprovisioned beaconing nodes were found" APP_LOG_NEW_LINE); + } + app_log_info("Scanning stopped" APP_LOG_NEW_LINE); + } + end_command(); + break; + } + default: + break; + } +} + +void handle_provision(void) +{ + static bd_addr mac = { 0 }; + static uint16_t netkey_index = APP_NETKEY_IDX; + + switch (command_state) { + case START: { + bool param_ready = true; + if (app_prov_mode == PROV_UI_MODE) { + param_ready = btmesh_app_prov_get_uuid_from_unprov_list(&command_uuid); + } + if (true == param_ready) { + if (app_prov_mode == PROV_UI_MODE) { + btmesh_db_node_t* node = btmesh_db_node_get_by_uuid(command_uuid); + if (node != NULL) { + bool cbp_capability = node->prov.oob_capabilities & BTMESH_OOB_FLAG_CBP_CAPABLE; + btmesh_app_prov_set_cbp_capability(cbp_capability); + } + } + app_log_info("Starting provisioning session" APP_LOG_NEW_LINE); + app_log_nl(); + // Try to create a network with index 0. + // If one is already present, SL_STATUS_BT_MESH_ALREADY_EXISTS is handled + sl_status_t sc = btmesh_prov_create_network(netkey_index, 0, 0); + app_assert((sc == SL_STATUS_OK || sc == SL_STATUS_BT_MESH_ALREADY_EXISTS), + "Failed to create network" APP_LOG_NEW_LINE); + if (SL_STATUS_OK == sc) { + networks_on_startup++; + db_ready = true; + uint8_t appkey_data[16]; + size_t appkey_length; + // If a new network is created then application key is created as + // well because the appkeys are bound to network keys. + // If the network already exists then it is not necessary to create + // appkey because it has already been created. + // Note: Output buffer is mandatory for create appkey API function + sl_status_t sc = btmesh_prov_create_appkey(netkey_index, + APP_CONF_APPKEY_INDEX, + 0, + NULL, + sizeof(appkey_data), + &appkey_length, + &appkey_data[0]); + app_assert_status_f(sc, "Failed to create appkey" APP_LOG_NEW_LINE); + } + + sc = btmesh_prov_setup_provisioning(netkey_index, command_uuid, HOST_PROV_PB_ADV, 0); + app_assert_status_f(sc, "Provisioning failed" APP_LOG_NEW_LINE); + command_state = IN_PROGRESS; + } + break; + } + case IN_PROGRESS: + // Handle CBP if present, otherwise finish provisioning + // MAC address is unknown here, but the database requires a bd_addr struct + // so we use a 0 here. + // Note: this won't affect provisioning as only UUID is used there + btmesh_app_prov_handle_cbp(netkey_index, command_uuid, mac, HOST_PROV_PB_ADV); + break; + case FINISHED: + prov_started = false; + app_log_filter_threshold_set(APP_LOG_LEVEL_INFO); + app_log_nl(); + app_log_info("Provisioning session finished" APP_LOG_NEW_LINE); + end_command(); + break; + default: + break; + } +} + +void handle_nodelist(void) +{ + switch (command_state) { + case START: { + // Check if any networks are present on the node on startup + if (0 < networks_on_startup) { + sl_status_t sc; + app_log_info("Querying DDB list" APP_LOG_NEW_LINE); + sc = btmesh_prov_list_ddb_entries(&ddb_count); + if (SL_STATUS_OK != sc) { + app_log_error("Failed to list DDB entries" APP_LOG_NEW_LINE); + command_state = FINISHED; + break; + } + if (ddb_count == 0) { + // The count is synchronous, but individual nodes' info are sent + // via sl_btmesh_on_event + app_log_info("No nodes present in the network" APP_LOG_NEW_LINE); + command_state = FINISHED; + } else { + command_state = IN_PROGRESS; + } + } else { + app_log_info("No networks present on the device" APP_LOG_NEW_LINE); + command_state = FINISHED; + } + break; + } + case IN_PROGRESS: + // Wait for all nodes' information + break; + case FINISHED: + end_command(); + break; + default: + break; + } +} + +void handle_nodeinfo(void) +{ + switch (command_state) { + case START: { + bool param_ready = true; + if (app_prov_mode == PROV_UI_MODE) { + param_ready = btmesh_app_prov_get_uuid_from_prov_list(&command_uuid); + } + if ((true == param_ready) && (true == db_ready)) { + // Node information can only be obtained after the database is ready + app_log_info("Querying node information" APP_LOG_NEW_LINE); + app_log_nl(); + if (app_prov_mode == PROV_UI_MODE) { + app_log_filter_threshold_set(APP_LOG_LEVEL_WARNING); + } + command_state = IN_PROGRESS; + app_conf_print_nodeinfo_by_uuid(command_uuid); + } + break; + } + case IN_PROGRESS: + // Wait for configurator to finish nodeinfo printing + break; + case FINISHED: + app_log_filter_threshold_set(APP_LOG_LEVEL_INFO); + end_command(); + break; + default: + break; + } +} + +void handle_remove(void) +{ + switch (command_state) { + case START: { + sl_status_t sc; + bool param_ready = true; + if (app_prov_mode == PROV_UI_MODE) { + param_ready = btmesh_app_prov_get_uuid_from_prov_list(&command_uuid); + } + if ((true == param_ready) && (true == db_ready)) { + app_log_info("Unprovisioning..." APP_LOG_NEW_LINE); + sc = btmesh_prov_remove_node_by_uuid(command_uuid, + app_on_remove_node_job_status); + if (SL_STATUS_OK != sc) { + command_state = FINISHED; + } else { + command_state = IN_PROGRESS; + } + // DDB info is queried on startup + command_state = IN_PROGRESS; + } + break; + } + case IN_PROGRESS: + // Wait for confirmation callback + break; + case FINISHED: + app_log_info("Refresh keys to prevent trashcan attacks." APP_LOG_NEW_LINE); + end_command(); + break; + default: + break; + } +} + +void handle_key_refresh(void) +{ + switch (command_state) { + case START: { + sl_status_t sc; + const uint8_t app_keys[] = { 0, 0 }; + sc = sl_btmesh_prov_phase_timeout_set(phase_timeout_s); + app_log_status_f(sc, "Failed to set phase timeout" APP_LOG_NEW_LINE); + sc = sl_btmesh_prov_start_key_refresh(0, 1, sizeof(app_keys), app_keys); + app_assert_status_f(sc, "Key refresh failed" APP_LOG_NEW_LINE); + app_log_info("Key refresh started" APP_LOG_NEW_LINE); + command_state = IN_PROGRESS; + break; + } + case IN_PROGRESS: + // Wait for prov_key_refresh_complete event + break; + case FINISHED: + end_command(); + break; + default: + break; + } +} +void handle_key_export(void) +{ + switch (command_state) { + case START: + btmesh_key_export_start(); + command_state = IN_PROGRESS; + break; + case IN_PROGRESS: + btmesh_key_export_task(); + if (btmesh_key_export_is_idle()) { + command_state = FINISHED; + } + break; + case FINISHED: + end_command(); + break; + default: + break; + } +} + +void handle_reset(void) +{ + switch (command_state) { + case START: + app_log_info("Initiating node reset" APP_LOG_NEW_LINE); + sl_btmesh_node_reset(); + // Timer to let the NVM clear properly + sl_simple_timer_start(&reset_timer, // Timer pointer + RESET_TIMER_MS, // Timer duration + app_on_reset_timer, // Timer callback + NULL, // Timer data, not needed + false); // Not periodic + command_state = IN_PROGRESS; + break; + case IN_PROGRESS: + // Do nothing, timer callback will trigger next state + break; + case FINISHED: { + btmesh_db_network_t *db_network = btmesh_db_network_get_network((uint16_t)APP_NETKEY_IDX); + if (NULL != db_network) { + btmesh_db_remove_network(db_network); + networks_on_startup--; + } + app_log_info("Resetting hardware" APP_LOG_NEW_LINE); + sl_bt_system_reset(sl_bt_system_boot_mode_normal); + exit(EXIT_SUCCESS); + break; + } + default: + break; + } +} + +static void end_command(void) +{ + if (app_prov_mode == PROV_UI_MODE) { + btmesh_app_prov_end_of_cmd(); + } else { + exit(EXIT_SUCCESS); + } +} + +bool btmesh_app_prov_get_ddb_status(void) +{ + return db_ready; +} + +void btmesh_app_prov_get_command(command_t *prov_command, command_state_t *prov_command_state) +{ + if (prov_command != NULL) { + *prov_command = command; + } + if (prov_command_state != NULL) { + *prov_command_state = command_state; + } +} + +void btmesh_app_prov_set_command(command_t prov_command) +{ + command = prov_command; +} + +void btmesh_app_prov_set_command_state(command_state_t prov_command_state) +{ + command_state = prov_command_state; +} + +void btmesh_app_prov_get_cmd_options(struct option **prov_options) +{ + *prov_options = prov_long_options; +} + +void btmesh_app_prov_set_mode(prov_mode_t prov_mode) +{ + app_prov_mode = prov_mode; + + app_log_debug("Prov mode: %s" APP_LOG_NEW_LINE, app_prov_mode == PROV_UI_MODE ? "PROV_UI_MODE" : "PROV_CMD_LINE_MODE"); +} + +prov_mode_t btmesh_app_prov_get_mode(void) +{ + return app_prov_mode; +} + +uint16_t btmesh_app_prov_get_networks_number(void) +{ + return networks_on_startup; +} +// ---------------------------------------------------------------------------- +// Callbacks + +void btmesh_app_prov_on_nodeinfo_end(void) +{ + command_state = FINISHED; +} +void btmesh_prov_on_unprovisioned_node_list_evt(uint16_t id, + uuid_128 uuid, + uint16_t oob_capabilities) +{ + app_log_info("Unprovisioned node" APP_LOG_NEW_LINE); + app_log_info("ID: %d" APP_LOG_NEW_LINE, id); + app_log_info("UUID: "); + btmesh_app_prov_append_uuid(&uuid); + app_log_info("OOB Capabilities: 0x%04x" APP_LOG_NEW_LINE, oob_capabilities); + app_log_nl(); +} + +void btmesh_prov_on_provisioned_node_list_evt(uint16_t id, + uuid_128 uuid, + uint16_t primary_address) +{ + app_log_info("Provisioned node" APP_LOG_NEW_LINE); + app_log_info("ID: %d" APP_LOG_NEW_LINE, id); + + app_log_info("UUID: "); + btmesh_app_prov_append_uuid(&uuid); + + app_log_info("Address: 0x%04x" APP_LOG_NEW_LINE, primary_address); + app_log_nl(); +} + +void btmesh_app_prov_append_uuid(uuid_128 *uuid) +{ + app_log_append_info("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x" APP_LOG_NEW_LINE, + uuid->data[0], + uuid->data[1], + uuid->data[2], + uuid->data[3], + uuid->data[4], + uuid->data[5], + uuid->data[6], + uuid->data[7], + uuid->data[8], + uuid->data[9], + uuid->data[10], + uuid->data[11], + uuid->data[12], + uuid->data[13], + uuid->data[14], + uuid->data[15]); +} + +void btmesh_prov_on_device_provisioned_evt(uint16_t address, uuid_128 uuid) +{ + app_log_info("Device provisioned" APP_LOG_NEW_LINE); + app_log_info("UUID: "); + btmesh_app_prov_append_uuid(&uuid); + app_log_info("Address: 0x%04x" APP_LOG_NEW_LINE, address); + app_log_nl(); + + if (PROV_UI_MODE == app_prov_mode) { + app_log_filter_threshold_set(APP_LOG_LEVEL_WARNING); + } + + sl_status_t sc = app_conf_start_node_configuration(APP_NETKEY_IDX, + address); + if (SL_STATUS_OK != sc) { + app_log_status_error_f(sc, "Failed to start configuration procedure." APP_LOG_NEW_LINE); + command_state = FINISHED; + } +} + +void btmesh_prov_on_ddb_list_ready(uint16_t count) +{ + if (0 == count) { + app_log_debug("No nodes in DDB" APP_LOG_NEW_LINE); + } else { + if (NODELIST == command) { + // DDB list requested by user + app_log_debug("All nodes in DDB listed" APP_LOG_NEW_LINE); + // Finish only if not requested by UI mode + command_state = FINISHED; + } + } + // Some commands can only start after the database is ready + db_ready = true; +} + +void app_on_remove_node_job_status(const btmesh_conf_job_t *job) +{ + btmesh_prov_delete_ddb_entry(command_uuid); + if (BTMESH_CONF_JOB_RESULT_SUCCESS == job->result) { + app_log_info("Node removed from network" APP_LOG_NEW_LINE); + } else { + app_log_error("Remove node from network failed, removed from DDB anyway" APP_LOG_NEW_LINE); + } + command_state = FINISHED; +} + +SL_WEAK void btmesh_app_prov_end_of_cmd(void) +{ + exit(EXIT_SUCCESS); +} + +SL_WEAK void btmesh_app_prov_handle_ui(void) +{ +} + +SL_WEAK bool btmesh_app_prov_get_uuid_from_unprov_list(uuid_128 *command_uuid) +{ + (void)command_uuid; + + return true; +} + +SL_WEAK bool btmesh_app_prov_get_uuid_from_prov_list(uuid_128 *command_uuid) +{ + (void)command_uuid; + + return true; +} + +SL_WEAK void btmesh_app_prov_handle_cbp(uint16_t netkey_index, + uuid_128 uuid, + bd_addr mac_address, + uint8_t bearer_type) +{ + // If CBP is not present, provisioning of the selected device must be started + // at this point + if (prov_started == false) { + sl_status_t sc = btmesh_prov_provision_adv_device(netkey_index, uuid, mac_address, bearer_type, 0); + app_assert_status_f(sc, "Provisioning failed" APP_LOG_NEW_LINE); + prov_started = true; + } +} + +SL_WEAK void btmesh_app_prov_set_cbp_capability(bool capability) +{ + (void)capability; +} + +// ---------------------------------------------------------------------------- +// Private function definitions + +static void app_on_scan_timer(sl_simple_timer_t *timer, void *data) +{ + command_state = FINISHED; +} + +static void app_on_reset_timer(sl_simple_timer_t *timer, void *data) +{ + command_state = FINISHED; +} diff --git a/app/btmesh/common_host/btmesh_app_prov/btmesh_app_prov.h b/app/btmesh/common_host/btmesh_app_prov/btmesh_app_prov.h new file mode 100644 index 00000000000..5a4e0d80f6b --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_prov/btmesh_app_prov.h @@ -0,0 +1,258 @@ +/**************************************************************************//** + * @file + * @brief BT Mesh Provisioner Application component - CLI handler + ****************************************************************************** + * # 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 BTMESH_APP_PROV_H +#define BTMESH_APP_PROV_H + +#include +#include +#include "sl_status.h" +#include "sl_btmesh_api.h" +#include "app.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/// Optstring argument for getopt +#define PROV_OPTLENGTH 8 + +/// NCP node address +#define BTMESH_APP_PROV_NCP_ADDRESS 0x2001 + +/// Array terminate element length +#define LAST_OPTION_ELEMENT 1 + +/// Optstring argument for getopt +#define PROV_OPTSTRING "ei:lp:k:x:r:s" + +/// Usage info +#define PROV_USAGE \ + " [--nodeinfo ]" \ + " [--nodelist]" \ + " [--provision ]" \ + " [--remove ]" \ + " [--key-refresh ]" \ + " [--key-export ]" \ + " [--reset]" \ + " [--scan]" + +// Options info +#define PROV_OPTIONS \ + "\nHost Provisioner-related options:\n" \ + " -i --nodeinfo Print DCD information about a node in the network\n" \ + " The unique identifier of the node.\n" \ + " -l --nodelist List all nodes present in the provisioner's device " \ + "database (DDB)\n" \ + " -p --provision Provision a node\n" \ + " The UUID of the node to be provisioned. " \ + "Can be acquired by --scan.\n" \ + " -r --remove Remove the given node from the Mesh network\n" \ + " The UUID of the node to be removed\n" \ + " -k --key-refresh Refresh the network key and app key\n" \ + " Phase timeout in seconds\n" \ + " -x --key-export Export the network, app, and device keys in JSON\n" \ + " Output file name" \ + " -e --reset Factory reset the provisioner. Note: This command does " \ + "not remove existing devices from the network.\n" \ + " -s --scan Scan and list unprovisioned beaconing nodes\n" \ + "\nUUID shall be a string containing 16 separate octets, e.g. " \ + "\"00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff\"\n" \ + "The separator can be any character, but in case of a whitespace character " \ + "this example requires quotation marks around the string.\n\n" + +// ---------------------------------------------------------------------------- +// Enums + +/// Current provisioner mode, either single run command line mode or ui, menu mode +typedef enum { + PROV_CMD_LINE_MODE, + PROV_UI_MODE +}prov_mode_t; + +/**************************************************************************//** + * Provisioner Command Line Application Init + * + * @param[in] opt Command option + * @param[in] optarg Command argument + * @retval SL_STATUS_OK if command started successfully + * SL_STATUS_NOT_FOUND if command is unknown + *****************************************************************************/ +sl_status_t btmesh_app_prov_init(int opt, char *optarg); + +/**************************************************************************//** + * Provisioner Application Process Action + * + *****************************************************************************/ +void btmesh_app_prov_process_action(void); + +/**************************************************************************//** + * Bluetooth Mesh stack event handler + * + * @param[in] evt Event coming from the Bluetooth Mesh stack + *****************************************************************************/ +void btmesh_app_prov_on_event(sl_btmesh_msg_t *evt); + +/**************************************************************************//** + * Get the provisioner command and command status + * + * @param[out] prov_command Current command + * @param[out] prov_command_state Current command status + *****************************************************************************/ +void btmesh_app_prov_get_command(command_t *prov_command, command_state_t *prov_command_state); + +/**************************************************************************//** + * Set the provisioner command + * + * @param[in] prov_command New command + *****************************************************************************/ +void btmesh_app_prov_set_command(command_t prov_command); + +/**************************************************************************//** + * Set the provisioner command status + * + * @param[out] prov_command_state New command status + *****************************************************************************/ +void btmesh_app_prov_set_command_state(command_state_t prov_command_state); + +/**************************************************************************//** + * Get the command options struct array address + * + * @param[out] prov_options Options struct array address + *****************************************************************************/ +void btmesh_app_prov_get_cmd_options(struct option **prov_options); + +/**************************************************************************//** + * Get the command options struct array address for CBP + * + * @param[out] prov_options Options struct array address + *****************************************************************************/ +void btmesh_cbp_prov_get_cmd_options(struct option **prov_options); + +/**************************************************************************//** + * Handle the main menu in UI mode + * + *****************************************************************************/ +void btmesh_app_prov_handle_ui(void); + +/**************************************************************************//** + * Get UUID from UI for provisioning + * + * @param[out] command_uuid The variable to fill with the parsed data + * @retval false the returned uuid is not valid yet + * true if valid uuid was returned + *****************************************************************************/ +bool btmesh_app_prov_get_uuid_from_unprov_list(uuid_128 *command_uuid); + +/**************************************************************************//** + * Get UUID from UI from rovisioned node list + * + * @param[out] command_uuid The variable to fill with UUID + * @retval false the returned uuid is not valid yet + * true if valid uuid was returned + *****************************************************************************/ +bool btmesh_app_prov_get_uuid_from_prov_list(uuid_128 *command_uuid); + +/**************************************************************************//** + * Get ddb status after startup + * + * @retval ddb status + * false if ddb is not ready yet after startup + * true if ddb is ready after startup + *****************************************************************************/ +bool btmesh_app_prov_get_ddb_status(void); + +/**************************************************************************//** + * Set provisioner mode, command line or ui mode + * + * @param[in] prov_mode New provisioner mode + *****************************************************************************/ +void btmesh_app_prov_set_mode(prov_mode_t prov_mode); + +/**************************************************************************//** + * Get provisioner mode command line or menu UI mode + * + * @retval PROV_CMD_LINE_MODE command line mode + * PROV_UI_MODE menu UI mode mode + *****************************************************************************/ +prov_mode_t btmesh_app_prov_get_mode(void); + +/**************************************************************************//** + * Callback to inform when the nodeinfo query ends + * + *****************************************************************************/ +void btmesh_app_prov_on_nodeinfo_end(void); + +/**************************************************************************//** + * Callback to inform when the command ends + * + *****************************************************************************/ +void btmesh_app_prov_end_of_cmd(void); + +/**************************************************************************//** + * Helper script to print a given UUID + * + * @param[in] uuid Pointer to the UUID + *****************************************************************************/ +void btmesh_app_prov_append_uuid(uuid_128 *uuid); + +/**************************************************************************//** + * Get ddb status after startup + * + * @retval networks number + *****************************************************************************/ +uint16_t btmesh_app_prov_get_networks_number(void); + +/***************************************************************************//** +* Handle certificate-based provisioning +* +* @param[in] netkey_index Netkey index of the network +* @param[in] uuid UUID of the device to be provisioned +* @param[in] mac_address MAC address of the device to be provisioned +* @param[in] bearer_type Type of the provisioning bearer layer. Can be +* PB-ADV (0) or PB-GATT (1). +*******************************************************************************/ +void btmesh_app_prov_handle_cbp(uint16_t netkey_index, + uuid_128 uuid, + bd_addr mac_address, + uint8_t bearer_type); + +/***************************************************************************//** +* Inform the CBP handler if the provisioned node is capable of CBP or not +* +* @param[in] capability true if the node is CBP-capable, false otherwise +*******************************************************************************/ +void btmesh_app_prov_set_cbp_capability(bool capability); + +#ifdef __cplusplus +}; +#endif + +#endif // BTMESH_APP_PROV_H diff --git a/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_certificate_validation.c b/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_certificate_validation.c new file mode 100644 index 00000000000..15bcd89d006 --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_certificate_validation.c @@ -0,0 +1,381 @@ +/***************************************************************************//** +* @file +* @brief BT Mesh Host Provisioner component - Certificate Validation +******************************************************************************** +* # 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. +* +*******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes + +// standard library headers +#include + +// OpenSSL X.509 header +#include +#include +#include +#include +#include +#include + +// app-related headers +#include "btmesh_app_certificate_validation.h" +#include "app_log.h" + +// ----------------------------------------------------------------------------- +// Macros + +/// Length of UUID in the canonical fields-and-hyphens format +#define UUID_CANONICAL_STRING_LEN 36 + +/// Version field of the certificate, decimal 2 = v3 +#define CBP_CERTIFICATE_VERSION 2 + +// ----------------------------------------------------------------------------- +// Static Function Declarations + +/***************************************************************************//** +* Extract the public key from an X509 certificate +* +* @param[in] cert An X.509 certificate +* @param[in] key_size public key size +* @param[out] pub_key Pointer to the place to extract the public key +* @return Status of the key extraction +* @retval SL_STATUS_OK if the key is successfully extracted +* Error code otherwise +*******************************************************************************/ +static sl_status_t btmesh_app_prov_cbp_extract_public_key(X509 *cert, size_t key_size, uint8_t* key); +/***************************************************************************//** +* Get the common name string from an X509 certificate +* +* @param[in] cert An X.509 certificate +* @return Pointer to a null-terminated char string +* containing the common name field +*******************************************************************************/ +static const unsigned char* btmesh_app_prov_cbp_get_x509_common_name(X509 *cert); + +/***************************************************************************//** +* Check if the UUID in the X.509 certificate matches the UUID of the device +* currently provisioned +* +* @param[in] cert The certificate +* @param[in] uuid UUID of the device being provisioned +* @return Status of the validation +* @retval SL_STATUS_OK if the two match +* Error code otherwise +*******************************************************************************/ +static sl_status_t btmesh_app_prov_cbp_validate_uuid(X509 *cert, uuid_128 *uuid); + +/***************************************************************************//** +* Validate the device certificate with a given root certificate +* +* @param[in] cert The device certificate +* @param[in] root The root certificate +* @return Status of the validation +* @retval SL_STATUS_OK if the certificate is valid +* Error code otherwise +*******************************************************************************/ +sl_status_t btmesh_app_prov_cbp_validate_certificate_with_root(X509 *cert, X509 *root); + +/***************************************************************************//** +* Validate certificate's expiration times +* +* @param[in] cert The device certificate +* @return Status of the validation +* @retval SL_STATUS_OK if the certificate is valid +* Error code otherwise +*******************************************************************************/ +sl_status_t btmesh_app_prov_cbp_validate_expiration(X509 *cert); + +/***************************************************************************//** +* Validate the data fields of a certificate +* +* @param[in] cert The device certificate +* @return Status of the validation +* @retval SL_STATUS_OK if the certificate is valid +* Error code otherwise +*******************************************************************************/ +sl_status_t btmesh_app_prov_cbp_validate_data_fields(X509 *cert); + +/******************************************************************************* +* Validate the received certificate +*******************************************************************************/ +sl_status_t btmesh_prov_validate_certificate( + const unsigned char *raw_cert, + size_t cert_len, + const char *root_cert_path, + uuid_128 *uuid, + size_t key_size, + uint8_t *pub_key + ) +{ + sl_status_t sc; + // OpenSSL setup + OpenSSL_add_all_algorithms(); + + // Device certificate + X509 *cert = d2i_X509(NULL, &raw_cert, cert_len); + if (cert == NULL) { + app_log_error("Failed to parse certificate" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + + // Root certificate + FILE *fp = fopen(root_cert_path, "r"); + if (fp == NULL) { + app_log_error("Failed to open root certificate" APP_LOG_NEW_LINE); + X509_free(cert); + return SL_STATUS_FAIL; + } + X509 *root = PEM_read_X509(fp, NULL, NULL, NULL); + if (root == NULL) { + app_log_error("Failed to parse root certificate" APP_LOG_NEW_LINE); + X509_free(cert); + fclose(fp); + return SL_STATUS_FAIL; + } + // Root CA file loaded into OpenSSL, handle can now be closed + fclose(fp); + + if ( btmesh_app_prov_cbp_validate_data_fields(cert) == SL_STATUS_OK + && btmesh_app_prov_cbp_validate_uuid(cert, uuid) == SL_STATUS_OK + && btmesh_app_prov_cbp_validate_certificate_with_root(cert, root) == SL_STATUS_OK + && btmesh_app_prov_cbp_validate_expiration(cert) == SL_STATUS_OK + && btmesh_app_prov_cbp_extract_public_key(cert, key_size, pub_key) == SL_STATUS_OK ) { + sc = SL_STATUS_OK; + app_log_info("Certificate validated successfully" APP_LOG_NEW_LINE); + } else { + sc = SL_STATUS_FAIL; + } + + X509_free(cert); + X509_free(root); + return sc; +} + +/******************************************************************************* +* Extract the raw pubic key from the certificate +*******************************************************************************/ +sl_status_t btmesh_app_prov_cbp_extract_public_key(X509 *cert, size_t key_size, uint8_t* key) +{ + // Extract public key in OpenSSL's format + EVP_PKEY *pubkey = X509_get0_pubkey(cert); + if (pubkey == NULL) { + app_log_error("Failed to get public key" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + // Check if the Key ID matches the required algorithm: id-ecPublicKey + int key_type = EVP_PKEY_id(pubkey); + if (key_type != NID_X9_62_id_ecPublicKey) { + app_log_error("Wrong public key algorithm" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + // Extract EC key in OpenSSL's format + EC_KEY *ec_key = EVP_PKEY_get0_EC_KEY(pubkey); + if (ec_key == NULL) { + app_log_error("Failed to get EC key" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + // Setup OpenSSL conversion parameters to extract the raw public key + const EC_GROUP *group = EC_KEY_get0_group(ec_key); + if (group == NULL) { + app_log_error("Failed to get EC group" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + point_conversion_form_t form = EC_GROUP_get_point_conversion_form(group); + + // Extract raw public key - the function allocates memory + unsigned char *raw_pubkey; + size_t key_len = EC_KEY_key2buf(ec_key, form, &raw_pubkey, NULL); + if (key_len == 0) { + app_log_error("Failed to get EC public key" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + // Copy raw key to the parameter + memcpy(key, &raw_pubkey[1], key_size); + OPENSSL_free(raw_pubkey); + return SL_STATUS_OK; +} + +/******************************************************************************* +* Get the common name string from an X509 certificate +*******************************************************************************/ +const unsigned char* btmesh_app_prov_cbp_get_x509_common_name(X509 *cert) +{ + X509_NAME *subject_name = X509_get_subject_name(cert); + int lastpos = -1; + lastpos = X509_NAME_get_index_by_NID(subject_name, NID_commonName, lastpos); + X509_NAME_ENTRY *e = X509_NAME_get_entry(subject_name, lastpos); + ASN1_STRING *d = X509_NAME_ENTRY_get_data(e); + return ASN1_STRING_get0_data(d); +} + +/******************************************************************************* +* Check if the UUID in the X.509 certificate matches the UUID of the device +* currently provisioned +*******************************************************************************/ +sl_status_t btmesh_app_prov_cbp_validate_uuid(X509 *cert, uuid_128 *uuid) +{ + const char *common_name = (const char *)btmesh_app_prov_cbp_get_x509_common_name(cert); + app_log_debug("Common name: %s" APP_LOG_NEW_LINE, common_name); + uuid_128 common_uuid = { 0 }; + int len = strlen((const char *)common_name); + // Parse UUID + int s = sscanf(common_name, + "%2hhx%2hhx%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx-%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx", + &common_uuid.data[0], + &common_uuid.data[1], + &common_uuid.data[2], + &common_uuid.data[3], + &common_uuid.data[4], + &common_uuid.data[5], + &common_uuid.data[6], + &common_uuid.data[7], + &common_uuid.data[8], + &common_uuid.data[9], + &common_uuid.data[10], + &common_uuid.data[11], + &common_uuid.data[12], + &common_uuid.data[13], + &common_uuid.data[14], + &common_uuid.data[15]); + // Compare the received string to the device under provision + if (len != UUID_CANONICAL_STRING_LEN || s < 16 || memcmp(uuid, &common_uuid, sizeof(uuid_128)) != 0) { + app_log_error("UUID of the device and in the certificate does not match" APP_LOG_NEW_LINE); + return SL_STATUS_INVALID_PARAMETER; + } else { + return SL_STATUS_OK; + } +} +/******************************************************************************* +* Authenticate device certificate with root certificate +*******************************************************************************/ +sl_status_t btmesh_app_prov_cbp_validate_certificate_with_root(X509 *cert, X509 *root) +{ + X509_STORE *store = X509_STORE_new(); + if (store == NULL) { + app_log_error("Unable to create X.509 store" APP_LOG_NEW_LINE); + return SL_STATUS_ALLOCATION_FAILED; + } + X509_STORE_CTX *store_ctx = X509_STORE_CTX_new(); + if (store_ctx == NULL) { + app_log_error("Unable to create X.509 store context" APP_LOG_NEW_LINE); + X509_STORE_free(store); + return SL_STATUS_ALLOCATION_FAILED; + } + + sl_status_t sc = SL_STATUS_FAIL; + if (X509_STORE_add_cert(store, root) != 1) { + app_log_error("Unable to add root certificate to store" APP_LOG_NEW_LINE); + } else if (X509_STORE_CTX_init(store_ctx, store, cert, NULL) != 1) { + app_log_error("Unable to init store context" APP_LOG_NEW_LINE); + } else if (X509_verify_cert(store_ctx) != 1) { + app_log_error("Unable to verify certificate" APP_LOG_NEW_LINE); + } else { + sc = SL_STATUS_OK; + } + + X509_STORE_CTX_free(store_ctx); + X509_STORE_free(store); + + return sc; +} + +/******************************************************************************* +* Validate certificate's expiration times +*******************************************************************************/ +sl_status_t btmesh_app_prov_cbp_validate_expiration(X509 *cert) +{ + int status = 0; + // Start date + status = X509_cmp_current_time(X509_get_notBefore(cert)); + if (status != -1) { + // -1 means certificate time <= now + app_log_error("Certificate is not yet valid" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + // Expiry date + status = X509_cmp_current_time(X509_get_notAfter(cert)); + if (status != 1) { + // 1 means certificate time > now + app_log_error("Certificate has expired" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + + return SL_STATUS_OK; +} + +/******************************************************************************* +* Validate the data fields of a certificate +*******************************************************************************/ +sl_status_t btmesh_app_prov_cbp_validate_data_fields(X509 *cert) +{ + // Version field shall be set to v3, decimal value 2 + long version = X509_get_version(cert); + if (version != CBP_CERTIFICATE_VERSION) { + app_log_error("Incorrect certificate version" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + // Signature algorithm shall be ecdsa-with-SHA256 + int signature = X509_get_signature_nid(cert); + if (signature != NID_ecdsa_with_SHA256) { + app_log_error("Incorrect certificate algorithm" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + // Check not allowed extensions + const STACK_OF(X509_EXTENSION) * extensions = X509_get0_extensions(cert); + const int not_allowed_extensions[] = { + NID_subject_alt_name, + NID_issuer_alt_name, + NID_name_constraints, + NID_policy_constraints, + NID_ext_key_usage, + NID_inhibit_any_policy, + }; + const int not_allowed_ext_size = sizeof(not_allowed_extensions) / sizeof(int); + void *extension_ptr = NULL; + // If any of the not allowed extensions is present, the certificate is invalid + for (int i = 0; i < not_allowed_ext_size; i++) { + extension_ptr = X509V3_get_d2i(extensions, not_allowed_extensions[i], NULL, NULL); + if (extension_ptr != NULL) { + app_log_error("Not allowed extensions" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + } + // Key usage shall be present and it shall be set as keyAgreement + // UINT32_MAX indicates key usage field is not present + uint32_t key_usage = X509_get_key_usage(cert); + if (key_usage == UINT32_MAX) { + app_log_error("Key usage field is not present" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + if ((key_usage & KU_KEY_AGREEMENT) == 0) { + app_log_error("keyAgreement is not set in key usage" APP_LOG_NEW_LINE); + return SL_STATUS_FAIL; + } + return SL_STATUS_OK; +} diff --git a/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_certificate_validation.h b/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_certificate_validation.h new file mode 100644 index 00000000000..e54d65cfed4 --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_certificate_validation.h @@ -0,0 +1,62 @@ +/**************************************************************************//** + * @file + * @brief BT Mesh Host Provisioner component - Certificate Validation + ****************************************************************************** + * # 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 CERTIFICATE_VALIDATION_H +#define CERTIFICATE_VALIDATION_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "sl_status.h" +#include "sl_bgapi.h" + +/***************************************************************************//** +* Validate the received certificate and extract public key +* +* @param[in] raw_cert Pointer to the device certificate +* @param[in] cert_len Length of the certificate +* @param[in] root_cert_path Path of the root certificate +* @param[in] uuid UUID of the device +* @param[in] key_size size of pub_key in bytes +* @param[out] pub_key Pointer to the extracted public key +* @return Status of the validation and kex extraction +*******************************************************************************/ +sl_status_t btmesh_prov_validate_certificate(const unsigned char *raw_cert, + size_t cert_len, + const char *root_cert_path, + uuid_128 *uuid, + size_t key_size, + uint8_t *pub_key); + +#ifdef __cplusplus +} +#endif + +#endif //CERTIFICATE_VALIDATION_H diff --git a/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_prov_cbp.c b/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_prov_cbp.c new file mode 100644 index 00000000000..6f34bca6d07 --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_prov_cbp.c @@ -0,0 +1,461 @@ +/***************************************************************************//** +* @file +* @brief BT Mesh Host Provisioner component - Certificate-Based Provisioning +******************************************************************************** +* # 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. +* +*******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes + +// standard library headers +#include +#include +#include + +// app-related headers +#include "app.h" +#include "app_assert.h" +#include "app_log.h" +#include "btmesh_app_prov.h" +#include "btmesh_app_prov_cbp.h" +#include "btmesh_prov.h" +#include "sl_common.h" +#include "sl_bt_api.h" +#include "btmesh_app_certificate_validation.h" + +// ----------------------------------------------------------------------------- +// Macros + +/// EC public key size without the leading 0x04 +#define CBP_PUBLIC_KEY_SIZE 64 +/// Flag indicating if an OOB public key is required or not +#define CBP_OOB_REQUIREMENT_PUBLIC_KEY 1 +/// Flag indicating OOB authorization method +#define CBP_AUTH_METHOD_FLAG 0 +/// Flag indicating output action, if any +#define CBP_OUTPUT_ACTION_FLAG 0 +/// Flag indicating input action, if any +#define CBP_INPUT_ACTION_FLAG 0 +/// Minimum size of the in/outout action, 0 if not used +#define CBP_MINIMUM_OOB_ACTION_SIZE 0 +/// Maximum size of the in/outout action, 0 if not used +#define CBP_MAXIMUM_OOB_ACTION_SIZE 0 + +/// Suspend provisioning at link open +#define CBP_PROVISIONING_SUSPEND_AT_LINK_OPEN 2 +/// Provisioning has been suspended at link open +#define CBP_PROVISIONING_SUSPENDED_LINK_OPEN 1 + +// ----------------------------------------------------------------------------- +// Enums, structs, typedefs + +/// Possible states of CBP +typedef enum cbp_state_e{ + CBP_NONE, + CBP_WAITING_FOR_PROVISION_SUSPEND, + CBP_STARTED, + CBP_WAITING_FOR_PROVISION_RECORDS_LIST, + CBP_HANDLE_PROVISION_RECORDS_LIST, + CBP_WAITING_FOR_PROVISION_RECORD_DATA, + CBP_VALIDATING, + CBP_WAITING_FOR_PKEY_REQUEST, + CBP_SEND_PKEY_RESPONSE, + CBP_ERROR, + CBP_DONE +} cbp_state_t; + +// ----------------------------------------------------------------------------- +// Static Function Declarations + +/***************************************************************************//** + * Handle provisioning records list event + * + * @param[in] result Result of the event + * @param[in] uuid UUID of the device + * @param[in] list Pointer to the list of provisioning results array + ******************************************************************************/ +static void btmesh_prov_on_provisioning_records_list_received(uint16_t result, + uuid_128 uuid, + uint8array *list); + +/***************************************************************************//** +* Handle provisioning record data event +* +* @param[in] result Result of the event +* @param[in] uuid UUID of the device +* @param[in] record Provisioning record ID +* @param[in] final Flag indicating the last part of the data +* @param[in] data Pointer to the received data array +*******************************************************************************/ +static void btmesh_prov_on_provisioning_record_data_received(uint16_t result, + uuid_128 uuid, + uint16_t record, + uint8_t final, + uint8array *data); + +// ----------------------------------------------------------------------------- +// Static Variables + +/// CBP is to be used in provisioning +bool cbp_enabled = false; +/// Current state of CBP handling +cbp_state_t cbp_state = CBP_NONE; +/// Pointer to the device certificate +uint8_t *certificate = NULL; +/// Length of the certificate +static size_t certificate_len = 0; +/// Public key extracted from certificate +uint8_t pkey[CBP_PUBLIC_KEY_SIZE] = { 0 }; +/// UUID of the device to be provisioned +uuid_128 cbp_uuid = { 0 }; +/// Command line options +static struct option cbp_long_options[CBP_OPTLENGTH] = { + { "cbp", no_argument, 0, 'c' } +}; + +// ----------------------------------------------------------------------------- +// Function definitions + +sl_status_t btmesh_cbp_init(int cmd_opt, char *cmd_optarg) +{ + sl_status_t sc = SL_STATUS_OK; + + switch (cmd_opt) { + case 'c': + cbp_enabled = true; + break; + default: + sc = SL_STATUS_NOT_FOUND; + break; + } + return sc; +} + +/***************************************************************************//** +* BT Mesh event handler for CBP +*******************************************************************************/ +void btmesh_cbp_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_prov_provisioning_records_list_id: + { + // The list shows all provisioning records, e.g. all certificates present on the device + sl_btmesh_evt_prov_provisioning_records_list_t *prov_records_list_evt; + prov_records_list_evt = (sl_btmesh_evt_prov_provisioning_records_list_t *)&(evt->data); + uint16_t result = prov_records_list_evt->result; + uuid_128 uuid = prov_records_list_evt->uuid; + uint8array *list = &prov_records_list_evt->list; + btmesh_prov_on_provisioning_records_list_received(result, + uuid, + list); + break; + } + case sl_btmesh_evt_prov_provisioning_record_data_id: + { + // Data of a requested provisioning record, i.e. the certificate itself + // This is a recurring event until final == 1 is received + sl_btmesh_evt_prov_provisioning_record_data_t *prov_record_data_evt; + prov_record_data_evt = (sl_btmesh_evt_prov_provisioning_record_data_t *)&(evt->data); + uint16_t result = prov_record_data_evt->result; + uuid_128 uuid = prov_record_data_evt->uuid; + uint16_t record = prov_record_data_evt->record; + uint8_t final = prov_record_data_evt->final; + uint8array *data = &prov_record_data_evt->data; + btmesh_prov_on_provisioning_record_data_received(result, + uuid, + record, + final, + data); + break; + } + case sl_btmesh_evt_prov_provisioning_suspended_id: + { + // For CBP provisioning must be suspended at link open to fetch and validate + // the device certificate(s) + sl_btmesh_evt_prov_provisioning_suspended_t *prov_suspended_evt; + prov_suspended_evt = (sl_btmesh_evt_prov_provisioning_suspended_t *)&(evt->data); + uint8_t reason = prov_suspended_evt->reason; + if (reason == CBP_PROVISIONING_SUSPENDED_LINK_OPEN) { + app_log_debug("Provisioning suspended, link open" APP_LOG_NEW_LINE); + cbp_state = CBP_STARTED; + } else { + app_log_info("Provisioning suspended, reason: 0x%02x" APP_LOG_NEW_LINE, reason); + cbp_state = CBP_ERROR; + } + break; + } + case sl_btmesh_evt_prov_oob_pkey_request_id: + app_log_debug("pkey request received" APP_LOG_NEW_LINE); + // The device asks for the public key of its previously sent device certificate + if (cbp_state == CBP_WAITING_FOR_PKEY_REQUEST) { + // Only switch to the response state if we actually anticipate the pkey request + cbp_state = CBP_SEND_PKEY_RESPONSE; + } + break; + default: + break; + } +} + +/***************************************************************************//** +* Wrapper for provisioning records initialization +*******************************************************************************/ +sl_status_t btmesh_prov_init_provisioning_records(void) +{ + return sl_btmesh_prov_init_provisioning_records(); +} + +/***************************************************************************//** +* Setup certificate-based provisioning +*******************************************************************************/ +sl_status_t btmesh_prov_setup_cbp(uuid_128 uuid) +{ + sl_status_t sc = SL_STATUS_OK; + if (cbp_enabled == true) { + app_log_debug("Setup CBP" APP_LOG_NEW_LINE); + // Set OOB requirements so CBP is expected + // The second parameter indicates OOB public key usage + sc = sl_btmesh_prov_set_oob_requirements(uuid, + CBP_OOB_REQUIREMENT_PUBLIC_KEY, + CBP_AUTH_METHOD_FLAG, + CBP_OUTPUT_ACTION_FLAG, + CBP_INPUT_ACTION_FLAG, + CBP_MINIMUM_OOB_ACTION_SIZE, + CBP_MAXIMUM_OOB_ACTION_SIZE); + if (sc != SL_STATUS_OK) { + app_log_status_error_f(sc, "Failed to set OOB requirements" APP_LOG_NEW_LINE); + return sc; + } + + // Set provisioning suspend event right after link open + // This lets provision_adv_device() start the provisioning session + // but will instantly suspend it so the provisioner can get the + // provisioning record data (i.e. the device certificate) + sc = sl_btmesh_prov_set_provisioning_suspend_event(CBP_PROVISIONING_SUSPEND_AT_LINK_OPEN); + if (sc != SL_STATUS_OK) { + app_log_status_error_f(sc, "Failed to set provisioning suspend event" APP_LOG_NEW_LINE); + return sc; + } + cbp_uuid = uuid; + cbp_state = CBP_NONE; + } + return sc; +} + +/***************************************************************************//** +* Handle certificate-based provisioning +*******************************************************************************/ +void btmesh_app_prov_handle_cbp(uint16_t netkey_index, + uuid_128 uuid, + bd_addr mac_address, + uint8_t bearer_type) +{ + if (cbp_enabled == true) { + switch (cbp_state) { + case CBP_NONE: + { + app_log_info("Starting CBP provisioning" APP_LOG_NEW_LINE); + if (bearer_type != HOST_PROV_PB_REMOTE) { + // Initial state, start provisioning. A suspended event shall occur soon + sl_status_t sc = btmesh_prov_provision_adv_device(netkey_index, uuid, mac_address, bearer_type, 0); + if (sc != SL_STATUS_OK) { + app_log_status_error_f(sc, "Failed to start provisioning" APP_LOG_NEW_LINE); + cbp_state = CBP_ERROR; + return; + } + } + app_log_debug("Waiting for provision suspend event" APP_LOG_NEW_LINE); + cbp_state = CBP_WAITING_FOR_PROVISION_SUSPEND; + break; + } + case CBP_WAITING_FOR_PROVISION_SUSPEND: + // Wait for the provision suspended event. Next state called from event handler. + break; + case CBP_STARTED: + { + // Provisioning suspended, acquire provisioning records list + app_log_debug("Provisioning suspended, getting provisioning records list" APP_LOG_NEW_LINE); + sl_status_t sc; + sc = sl_btmesh_prov_get_provisioning_records_list(cbp_uuid); + if (sc != SL_STATUS_OK) { + app_log_status_error_f(sc, "Failed to get provisioning records list" APP_LOG_NEW_LINE); + cbp_state = CBP_ERROR; + return; + } + cbp_state = CBP_WAITING_FOR_PROVISION_RECORDS_LIST; + break; + } + case CBP_WAITING_FOR_PROVISION_RECORDS_LIST: + // Wait for the records list. Next state called form event handler. + break; + case CBP_HANDLE_PROVISION_RECORDS_LIST: + { + // Handle records list if more than one certificates are present on the device. + // In this example only one device certificate is present, its record ID is always 1. + uint16_t record = 1; + sl_status_t sc = sl_btmesh_prov_get_provisioning_record_data(cbp_uuid, record); + if (sc != SL_STATUS_OK) { + app_log_error("Failed to get provisioning record data" APP_LOG_NEW_LINE); + cbp_state = CBP_ERROR; + return; + } + cbp_state = CBP_WAITING_FOR_PROVISION_RECORD_DATA; + break; + } + case CBP_WAITING_FOR_PROVISION_RECORD_DATA: + // Wait for the record data. Next state called form event handler. + break; + case CBP_VALIDATING: + { + // Validate the device certificate. Check expiration, UUID, etc. + app_log_info("Validating device certificate" APP_LOG_NEW_LINE); + sl_status_t sc = btmesh_prov_validate_certificate( + certificate, + certificate_len, + "CA/ca-certificate.crt", + &cbp_uuid, + CBP_PUBLIC_KEY_SIZE, + pkey + ); + free(certificate); + certificate_len = 0; + if (sc != SL_STATUS_OK) { + app_log_error("Failed to validate certificate" APP_LOG_NEW_LINE); + cbp_state = CBP_ERROR; + return; + } + + // Continue provisioning if the certificate is valid + sc = sl_btmesh_prov_continue_provisioning(cbp_uuid); + if (sc != SL_STATUS_OK) { + app_log_error("Failed to continue provisioning" APP_LOG_NEW_LINE); + cbp_state = CBP_ERROR; + return; + } + cbp_state = CBP_WAITING_FOR_PKEY_REQUEST; + break; + } + + case CBP_WAITING_FOR_PKEY_REQUEST: + // Wait for pkey request. Next state called form event handler. + break; + + case CBP_SEND_PKEY_RESPONSE: + { + app_log_debug("Sending pkey response" APP_LOG_NEW_LINE); + // Send back the extracted EC public key to the device + size_t pkey_len = CBP_PUBLIC_KEY_SIZE; + sl_status_t sc = sl_btmesh_prov_send_oob_pkey_response(cbp_uuid, pkey_len, pkey); + if (sc != SL_STATUS_OK) { + app_log_status_error_f(sc, "Failed to send pkey response" APP_LOG_NEW_LINE); + cbp_state = CBP_ERROR; + return; + } + cbp_state = CBP_DONE; + break; + } + case CBP_ERROR: + // Handle any errors and inform the user about failure + btmesh_prov_on_provision_failed_evt(0x04, cbp_uuid); + break; + case CBP_DONE: + // CBP finished successfully. The application will handle the provisioning + // finished (or failed) event independently. + break; + default: + break; + } + } else if (bearer_type != HOST_PROV_PB_REMOTE) { + // If CBP is not requested, provisioning of the selected device must be started + // at this point. If remote provisioning is ongoing, then this is handled. + static bool prov_started = false; + if (prov_started == false) { + sl_status_t sc = btmesh_prov_provision_adv_device(netkey_index, uuid, mac_address, bearer_type, 0); + app_assert_status_f(sc, "Provisioning failed" APP_LOG_NEW_LINE); + prov_started = true; + } + } +} + +void btmesh_app_prov_set_cbp_capability(bool capability) +{ + app_log_debug("CBP set to %s" APP_LOG_NEW_LINE, capability ? "true" : "false"); + cbp_enabled = capability; +} + +// ----------------------------------------------------------------------------- +// Callbacks + +/******************************************************************************* + * Handle provisioning records list event + ******************************************************************************/ +void btmesh_prov_on_provisioning_records_list_received(uint16_t result, + uuid_128 uuid, + uint8array *list) +{ + // Handle multiple (intermediate) certificates here + cbp_state = CBP_HANDLE_PROVISION_RECORDS_LIST; +} + +/******************************************************************************* +* Handle provisioning record data event +*******************************************************************************/ +void btmesh_prov_on_provisioning_record_data_received(uint16_t result, + uuid_128 uuid, + uint16_t record, + uint8_t final, + uint8array *data) +{ + // Store device certificate and extract the EC public key from it + certificate_len += data->len; + certificate = (uint8_t *)realloc(certificate, certificate_len); + if (certificate == NULL) { + app_log_error("Failed to allocate memory for CBP certificate" APP_LOG_NEW_LINE); + cbp_state = CBP_ERROR; + return; + } + memcpy(certificate + certificate_len - data->len, data->data, data->len); + if (final == 1) { + // The raw certificate is to be used in validation, no free here + cbp_state = CBP_VALIDATING; + } +} + +/***************************************************************************//** +* Check if CBP-related options are enabled +*******************************************************************************/ +sl_status_t btmesh_cbp_on_check_cmd_options(int cmd_opt, char *cmd_optarg) +{ + return btmesh_cbp_init(cmd_opt, cmd_optarg); +} + +void btmesh_cbp_on_build_cmd_options(struct option *long_options) +{ + if (NULL != long_options) { + memcpy(long_options, cbp_long_options, CBP_OPTLENGTH * sizeof(struct option)); + } +} diff --git a/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_prov_cbp.h b/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_prov_cbp.h new file mode 100644 index 00000000000..0cf32467b63 --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_prov_cbp/btmesh_app_prov_cbp.h @@ -0,0 +1,56 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Host Provisioner command line build only. + ******************************************************************************* + * # License + * Copyright 2021 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 BTMESH_APP_PROV_CBP_H +#define BTMESH_APP_PROV_CBP_H + +#ifdef __cplusplus +extern "C" +{ +#endif +// Optstring argument for getopt +#define CBP_OPTLENGTH 1 +// Optstring argument for getopt +#define CBP_OPTSTRING "c" + +/// Usage info +#define CBP_USAGE \ + " [--cbp]" + +// Options info +#define CBP_OPTIONS \ + "Certificate-based provisioning-related options:\n" \ + " -c --cbp Use certificate-based provisioning\n\n" \ + +#ifdef __cplusplus +}; +#endif + +#endif // BTMESH_APP_PROV_CBP_H diff --git a/app/btmesh/common_host/btmesh_app_prov_ui/btmesh_app_prov_ui.c b/app/btmesh/common_host/btmesh_app_prov_ui/btmesh_app_prov_ui.c new file mode 100644 index 00000000000..d7ef63627d5 --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_prov_ui/btmesh_app_prov_ui.c @@ -0,0 +1,444 @@ +/***************************************************************************//** +* @file +* @brief BT Mesh Host Provisioner Example Project - UI mode handler. +******************************************************************************* +* # 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. +* +*******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes + +#include "app.h" +#include "app_assert.h" +#include "app_log.h" +#include "app_sleep.h" +#include "btmesh_app_prov.h" +#include "btmesh_prov.h" +#include "sl_common.h" + +#include "btmesh_app_prov_ui.h" +#ifdef SL_CATALOG_APP_REMOTE_PROV_PRESENT +#include "btmesh_app_remote_prov_ui.h" +#endif + +#include +#include + +// ----------------------------------------------------------------------------- +// Macros + +#if defined(POSIX) && POSIX == 1 + #define CLEARSCR "clear" + #include + #include + #include +#else + #define CLEARSCR "cls" + #include + #include +#endif // defined(POSIX) && POSIX == 1 + +/// Buffer length for user input +#define INPUT_BUFFER_LEN 100 +/// Time to sleep between user input checking in microseconds +#define INPUT_SLEEP_US 10000 + +// ----------------------------------------------------------------------------- +// Static Function Declarations + +/***************************************************************************//** +* Helper script to print instructions for provisioning +* +*******************************************************************************/ +static void select_unprovisioned_node_instruction(void); + +/***************************************************************************//** +* Helper script to print instructions for unprovisioning +* +*******************************************************************************/ +static void select_provisioned_node_instruction(void); + +/***************************************************************************//** +* The user input handler called in a new thread +* +* @param[in] ptr Unused +*******************************************************************************/ +static void *handle_input(void *ptr); + +/***************************************************************************//** +* Peek the standard input +* +* @param[out] buf Character array to save the input to +* @param[in] buffer_length Length of buffer +* @param[out] num_read Actual number of characters read +* @return Status of the peek. +* @retval true If user input is ready +* @retval false If user input is still being processed +*******************************************************************************/ +static bool peek_stdin(char *buf, int buffer_length, int *num_read); + +// ----------------------------------------------------------------------------- +// Static Variables + +static volatile bool run = true; +/// Flag indicating the user input is ready to be processed +static volatile bool input_ready = false; +/// Flag indicating the end of command execution +static volatile bool command_end = false; +/// User input handler thread +static pthread_t thread_input; +/// Buffer for user input +static char input_buffer[INPUT_BUFFER_LEN]; +/// UI state +sl_ui_state ui_state = UI_MENU; + +// ----------------------------------------------------------------------------- +// Public function definitions + +void btmesh_app_prov_handle_ui(void) +{ + switch (ui_state) { + case UI_MENU: { + system(CLEARSCR); + app_log(PROV_UI_MENU); + input_ready = false; + ui_state = UI_WAITING_FOR_CMD; + if (0 == thread_input) { + int ret = pthread_create(&thread_input, NULL, handle_input, NULL); + if (0 != ret) { + app_log_critical("Failed to create input thread!" APP_LOG_NL); + exit(EXIT_FAILURE); + } + } + break; + } + case UI_WAITING_FOR_CMD: + if (true == input_ready) { + char c = input_buffer[0]; + switch (c) { + case SCAN_COMMAND: + btmesh_app_prov_set_command(SCAN); + btmesh_app_prov_set_command_state(START); + ui_state = UI_CMD_PROCESSING; + break; + case PROVISION_COMMAND: + btmesh_app_prov_set_command(PROVISION); + btmesh_app_prov_set_command_state(START); + ui_state = UI_CMD_PROCESSING; + break; + case NODELIST_COMMAND: + btmesh_app_prov_set_command(NODELIST); + btmesh_app_prov_set_command_state(START); + ui_state = UI_CMD_PROCESSING; + break; + case NODEINFO_COMMAND: + btmesh_app_prov_set_command(NODEINFO); + btmesh_app_prov_set_command_state(START); + ui_state = UI_CMD_PROCESSING; + break; + case REMOVE_NODE_COMMAND: + btmesh_app_prov_set_command(REMOVE_NODE); + btmesh_app_prov_set_command_state(START); + ui_state = UI_CMD_PROCESSING; + break; + case KEY_REFRESH_COMMAND: + btmesh_app_prov_set_command(KEY_REFRESH); + btmesh_app_prov_set_command_state(START); + ui_state = UI_CMD_PROCESSING; + break; + case KEY_EXPORT_COMMAND: + btmesh_app_prov_set_command(KEY_EXPORT); + btmesh_app_prov_set_command_state(START); + ui_state = UI_CMD_PROCESSING; + break; + case RESET_COMMAND: + btmesh_app_prov_set_command(RESET); + btmesh_app_prov_set_command_state(START); + ui_state = UI_CMD_PROCESSING; + break; + case EXIT_COMMAND: + ui_state = UI_EXIT; + run = false; + break; + default: { + sl_status_t sc = btmesh_app_prov_ui_handle_remote_prov_cmd(c); + if (SL_STATUS_OK != sc) { + btmesh_app_prov_end_of_cmd(); + } else { + ui_state = UI_CMD_PROCESSING; + } + break; + } + } + } + break; + case UI_CMD_PROCESSING: + break; + case UI_WAITING_FOR_INPUT: + if ((true == input_ready) && (true == command_end)) { + command_end = false; + ui_state = UI_MENU; + } + break; + + case UI_EXIT: + run = false; + pthread_join(thread_input, NULL); + //btmesh_prov_free_remote_serverlist(); + exit(EXIT_SUCCESS); + break; + default: + break; + } +} + +void btmesh_app_prov_end_of_cmd(void) +{ + btmesh_app_prov_set_command(NONE); + btmesh_app_prov_set_command_state(START); + app_log_nl(); + app_log("Press enter to continue..." APP_LOG_NEW_LINE); + input_ready = false; + command_end = true; + ui_state = UI_WAITING_FOR_INPUT; +} + +bool btmesh_app_prov_get_uuid_from_unprov_list(uuid_128 *command_uuid) +{ + bool return_value = false; + sl_status_t sc; + + if (UI_CMD_PROCESSING == ui_state) { + select_unprovisioned_node_instruction(); + } else if ((UI_WAITING_FOR_INPUT == ui_state) && (true == input_ready)) { + size_t len = strlen(input_buffer); + if (ADDRESS_LEN_WITHOUT_PREFIX > len) { + uint16_t id = (uint16_t)atoi(input_buffer); + sc = btmesh_prov_get_unprov_uuid_by_id(id, command_uuid); + if (SL_STATUS_OK != sc) { + btmesh_app_prov_end_of_cmd(); + } else { + return_value = true; + ui_state = UI_CMD_PROCESSING; + } + } else if (UUID_LEN_WITHOUT_SEPARATORS == len + || UUID_LEN_WITH_SEPARATORS == len) { + app_parse_uuid(input_buffer, len, command_uuid); + return_value = true; + ui_state = UI_CMD_PROCESSING; + } else { + app_log_error("Invalid input format!" APP_LOG_NEW_LINE); + btmesh_app_prov_end_of_cmd(); + } + } + return return_value; +} + +bool btmesh_app_prov_get_uuid_from_prov_list(uuid_128 *command_uuid) +{ + bool return_value = false; + sl_status_t sc; + + if (UI_CMD_PROCESSING == ui_state) { + select_provisioned_node_instruction(); + } else if ((UI_WAITING_FOR_INPUT == ui_state) && (true == input_ready)) { + size_t len = strlen(input_buffer); + if (ADDRESS_LEN_WITHOUT_PREFIX > len) { + uint16_t id = (uint16_t)atoi(input_buffer); + sc = btmesh_prov_get_prov_uuid_by_id(id, command_uuid); + if (SL_STATUS_OK != sc) { + btmesh_app_prov_end_of_cmd(); + } else { + return_value = true; + ui_state = UI_CMD_PROCESSING; + } + } else if (ADDRESS_LEN_WITHOUT_PREFIX == len + || ADDRESS_LEN_WITH_PREFIX == len) { + uint16_t addr; + app_parse_address(input_buffer, len, &addr); + sc = btmesh_prov_get_prov_uuid_by_address(addr, command_uuid); + if (SL_STATUS_OK != sc) { + btmesh_app_prov_end_of_cmd(); + } else { + return_value = true; + ui_state = UI_CMD_PROCESSING; + } + } else if (UUID_LEN_WITHOUT_SEPARATORS == len + || UUID_LEN_WITH_SEPARATORS == len) { + app_parse_uuid(input_buffer, len, command_uuid); + return_value = true; + ui_state = UI_CMD_PROCESSING; + } else { + app_log_error("Invalid input format!" APP_LOG_NEW_LINE); + btmesh_app_prov_end_of_cmd(); + } + } + return return_value; +} + +bool btmesh_app_prov_ui_get_input_buffer(char **ui_input_buffer) +{ + bool return_value = false; + if (UI_CMD_PROCESSING == ui_state) { + input_ready = false; + ui_state = UI_WAITING_FOR_INPUT; + } else if ((UI_WAITING_FOR_INPUT == ui_state) && (true == input_ready)) { + *ui_input_buffer = &(input_buffer[0]); + ui_state = UI_CMD_PROCESSING; + return_value = true; + } + + return return_value; +} + +sl_ui_state btmesh_app_prov_ui_get_ui_state(void) +{ + return ui_state; +} + +// ----------------------------------------------------------------------------- +// Private function definitions + +void *handle_input(void *ptr) +{ + int num_read = 0; + while (run) { + if (false == input_ready) { + if (peek_stdin(input_buffer, sizeof(input_buffer), &num_read)) { + input_buffer[num_read - 1] = '\0'; + app_log_debug("Command received: %s" APP_LOG_NEW_LINE, input_buffer); + app_log_debug("Length: %d" APP_LOG_NEW_LINE, num_read); + input_ready = true; + } + } + app_sleep_us(INPUT_SLEEP_US); + } + return 0; +} + +static bool peek_stdin(char *buf, int buffer_length, int *num_read) +{ +#if defined(POSIX) && POSIX == 1 + // Setup an instant non-blocking peek + fd_set rfds; + struct timeval tv = { .tv_sec = 0, .tv_usec = 0 }; + FD_ZERO(&rfds); + FD_SET(0, &rfds); + // Peek standard input + int retval = select(1, &rfds, NULL, NULL, &tv); + if (-1 == retval) { + // Some kind of error happened + app_log_error("Can't check stdin" APP_LOG_NEW_LINE); + return false; + } else if (0 == retval) { + // No input data available + return false; + } else { + // Input data available + *num_read = read(STDIN_FILENO, buf, buffer_length); + if (-1 == *num_read) { + app_log_error("Can't read from stdin" APP_LOG_NEW_LINE); + } + return true; + } +#else + static int current_length = 0; + if (_kbhit()) { + // Get the last character while echoing it back + buf[current_length] = _getche(); + current_length++; + *num_read = current_length; + if (13 == buf[current_length - 1]) { // Enter pressed + // Fake the newline char to behave like read() + buf[current_length - 1] = '\n'; + current_length = 0; + // Write a newline so it behaves like POSIX + app_log_nl(); + return true; + } else if (8 == buf[current_length - 1]) { // Backspace + current_length--; + if (0 != current_length) { + current_length--; + } + return false; + } else if (current_length == buffer_length) { // Buffer length reached + buf[buffer_length - 1] = '\n'; + current_length = 0; + // As a full buffer is considered as a finished command, add a newline here as well + app_log_nl(); + return true; + } else { + return false; + } + } + return false; +#endif // defined(POSIX) && POSIX == 1 +} + +static void select_unprovisioned_node_instruction(void) +{ + sl_status_t sc; + + app_log("Select a node to provision" APP_LOG_NEW_LINE); + app_log("Type either the ID or UUID from the list below" APP_LOG_NEW_LINE); + app_log_nl(); + sc = btmesh_prov_list_unprovisioned_nodes(); + if (SL_STATUS_EMPTY == sc) { + app_log_info("No unprovisioned nodes available" APP_LOG_NEW_LINE); + app_log_info("Try scanning for unprovisioned nodes first" APP_LOG_NEW_LINE); + btmesh_app_prov_end_of_cmd(); + } else { + input_ready = false; + ui_state = UI_WAITING_FOR_INPUT; + } +} + +static void select_provisioned_node_instruction(void) +{ + sl_status_t sc; + + app_log("Select a node" APP_LOG_NEW_LINE); + app_log("Type either the ID, UUID or address from the list below" APP_LOG_NEW_LINE); + app_log_nl(); + sc = btmesh_prov_list_provisioned_nodes(); + if (SL_STATUS_EMPTY == sc) { + app_log_info("No provisioned nodes available" APP_LOG_NEW_LINE); + btmesh_app_prov_end_of_cmd(); + } else { + input_ready = false; + ui_state = UI_WAITING_FOR_INPUT; + } +} + +// ----------------------------------------------------------------------------- +// Callbacks + +SL_WEAK sl_status_t btmesh_app_prov_ui_handle_remote_prov_cmd(char cmd_id) +{ + (void)cmd_id; + + return SL_STATUS_NOT_FOUND; +} diff --git a/app/btmesh/common_host/btmesh_app_prov_ui/btmesh_app_prov_ui.h b/app/btmesh/common_host/btmesh_app_prov_ui/btmesh_app_prov_ui.h new file mode 100644 index 00000000000..9f80fc67b84 --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_prov_ui/btmesh_app_prov_ui.h @@ -0,0 +1,103 @@ +/**************************************************************************//** + * @file + * @brief BT Mesh Host Provisioner Example Project. + ****************************************************************************** + * # License + * Copyright 2021 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 BTMESH_APP_PROV_UI_H +#define BTMESH_APP_PROV_UI_H + +#include "sl_status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define EXIT_COMMAND 'q' +#define SCAN_COMMAND 's' +#define PROVISION_COMMAND 'p' +#define NODELIST_COMMAND 'l' +#define NODEINFO_COMMAND 'i' +#define REMOVE_NODE_COMMAND 'r' +#define KEY_REFRESH_COMMAND 'k' +#define KEY_EXPORT_COMMAND 'x' +#define RESET_COMMAND 'e' + +#ifndef SL_CATALOG_APP_REMOTE_PROV_PRESENT +#define PROV_UI_MENU \ + "Please select a functionality\n\n" \ + "s - Scan available nodes\n" \ + "p - Provision a beaconing node\n" \ + "l - List nodes in the network\n" \ + "i - Information about a node in the network\n" \ + "r - Remove node from the network\n" \ + "k - Refresh the network key and app key\n" \ + "x - Export the network keys, app keys and device keys\n" \ + "e - Reset provisioner node and exit application\n" \ + "q - Exit application\n\n" +#endif + +/// UI state +typedef enum ui_state_e{ + UI_MENU, + UI_WAITING_FOR_CMD, + UI_CMD_PROCESSING, + UI_WAITING_FOR_INPUT, + UI_EXIT +} sl_ui_state; + +/**************************************************************************//** + * Remote provisioning related command handler + * + * @param[in] cmd_id Command id + * @retval SL_STATUS_NOT_FOUND for unknown command id + * SL_STATUS_OK for handled command id + *****************************************************************************/ +sl_status_t btmesh_app_prov_ui_handle_remote_prov_cmd(char cmd_id); + +/**************************************************************************//** + * Get UI state + * + * @retval Current state of the ui (sl_ui_state) + *****************************************************************************/ +sl_ui_state btmesh_app_prov_ui_get_ui_state(void); + +/**************************************************************************//** + * Get buffer with input console content + * + * @param[out] ui_input_buffer data read from input console + * @retval Current state of the ui + * @retval false if buffer is empty or content is invalid + * true if buffer content vas updated with is valid data + *****************************************************************************/ +bool btmesh_app_prov_ui_get_input_buffer(char **ui_input_buffer); + +#ifdef __cplusplus +}; +#endif + +#endif // BTMESH_APP_PROV_UI_H diff --git a/app/btmesh/common_host/btmesh_app_remote_prov/btmesh_app_remote_prov.c b/app/btmesh/common_host/btmesh_app_remote_prov/btmesh_app_remote_prov.c new file mode 100644 index 00000000000..82615f84bd5 --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_remote_prov/btmesh_app_remote_prov.c @@ -0,0 +1,434 @@ +/**************************************************************************//** +* @file +* @brief BT Mesh Remote Provisioner Application component - CLI handler +******************************************************************************* +* # License +* Copyright 2021 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. +* +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// Includes + +#include "app.h" +#include "btmesh_app_prov.h" +#include "btmesh_app_remote_prov.h" +#include "app_log.h" +#include "app_assert.h" + +#include "sl_common.h" +#include "sl_bt_api.h" +#include "btmesh_prov.h" +#include "btmesh_remote_prov.h" +// ---------------------------------------------------------------------------- +// Macros + +// ---------------------------------------------------------------------------- +// Static Function Declarations + +/**************************************************************************//** +* Handle --remote_serverlist functionality +* +******************************************************************************/ +static void handle_remote_serverlist(void); + +/**************************************************************************//** +* Handle --remote_scan functionality +* +******************************************************************************/ +static void handle_remote_scan(void); + +/**************************************************************************//** +* Handle --remote_provisioning functionality +* +******************************************************************************/ +static void handle_remote_provision(void); + +// ---------------------------------------------------------------------------- +// Static Variables + +/// Flag stating that the btmeshprov_initialized event has arrived +static bool initialized = false; +/// UUID passed as an argument +static uuid_128 command_uuid; +/// OOB capabilities of the node to be provisioned +static uint16_t oob_capabilities = 0; +/// The state of the current command +static command_state_t command_state = INIT; +/// The command in use +static command_t command = NONE; +/// Remote provisioner server address +static uint16_t remote_prov_server_addr = 0; +/// Command line options +static struct option remote_prov_long_options[REMOTE_PROV_OPTLENGTH] = { + { "remote_serverlist", no_argument, 0, 'm' }, + { "remote_scan", required_argument, 0, 'o' }, + { "remote_provision", required_argument, 0, 'v' }, + { "remote_server", required_argument, 0, 'a' } +}; + +// ---------------------------------------------------------------------------- +// Function definitions + +sl_status_t btmesh_app_remote_prov_init(int cmd_opt, char *cmd_optarg) +{ + sl_status_t sc = SL_STATUS_OK; + + switch (cmd_opt) { + case 'm': + // Scan for remote provisioning servers + app_log_info("Remote serverlist" APP_LOG_NEW_LINE); + command = REMOTE_SERVERLIST; + command_state = START; + break; + case 'o': + // Remote scan for unprovisioned nodes + app_log_info("Remote scan" APP_LOG_NEW_LINE); + command = REMOTE_SCAN; + command_state = START; + remote_prov_server_addr = (uint16_t)strtol(cmd_optarg, NULL, 16); + break; + case 'v': + // Remote provision the selected unprovisioned node + command = REMOTE_PROVISION; + command_state = START; + char *pos = cmd_optarg; + size_t len = strlen(cmd_optarg); + // Parse input for UUID + app_parse_uuid(pos, len, &command_uuid); + break; + case 'a': + // Remote provision server address selection + remote_prov_server_addr = (uint16_t)strtol(cmd_optarg, NULL, 16); + break; + default: + sc = SL_STATUS_NOT_FOUND; + break; + } + return sc; +} + +void btmesh_app_remote_prov_process_action(void) +{ + if (initialized == true) { + switch (command) { + case REMOTE_SERVERLIST: + handle_remote_serverlist(); + break; + case REMOTE_SCAN: + handle_remote_scan(); + break; + case REMOTE_PROVISION: + handle_remote_provision(); + break; + default: + break; + } + } +} + +void btmesh_app_remote_prov_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_prov_initialized_id: { + // Device successfully initialized in provisioner mode + app_log_info("Remote provisioning client init" APP_LOG_NEW_LINE); + app_log_nl(); + sl_status_t sc = sl_btmesh_remote_provisioning_client_init(); + app_assert_status_f(sc, "Failed to init remote provisioning client" APP_LOG_NEW_LINE); + if (INIT == command_state) { + command_state = START; + } + initialized = true; + + break; + } + /////////////////////////////////////////////////////////////////////////// + // Add additional event handlers here as your application requires! // + /////////////////////////////////////////////////////////////////////////// + + // ------------------------------- + // Default event handler. + default: + + break; + } + + // Let other modules handle their events too + btmesh_remote_prov_on_event(evt); +} + +// ---------------------------------------------------------------------------- +// App logic functions + +void handle_remote_serverlist(void) +{ + switch (command_state) { + case START: { + uint16_t networks_number = btmesh_app_prov_get_networks_number(); + if (0 < networks_number) { + bool db_stat; + db_stat = btmesh_app_prov_get_ddb_status(); + if (true == db_stat) { + sl_status_t sc = btmesh_remote_prov_start_server_capabilities_scan(APP_NETKEY_IDX); + if (SL_STATUS_OK != sc) { + app_log_info("Failed to start server scanning" APP_LOG_NEW_LINE); + command_state = FINISHED; + } else { + app_log_info("Scanning for remote provisioner servers" APP_LOG_NEW_LINE); + app_log_nl(); + command_state = IN_PROGRESS; + } + } + } else { + app_log_nl(); + app_log_info("No networks are present on the device" APP_LOG_NEW_LINE); + command_state = FINISHED; + } + break; + } + case IN_PROGRESS: + break; + case FINISHED: { + prov_mode_t prov_mode = btmesh_app_prov_get_mode(); + app_log_nl(); + app_log_info("Scanning for remote provisioner servers completed" APP_LOG_NEW_LINE); + if (prov_mode == PROV_UI_MODE) { + btmesh_app_remote_prov_end_of_cmd(); + } else { + btmesh_prov_free_remote_serverlist(); + exit(EXIT_SUCCESS); + } + break; + } + default: + break; + } +} + +void handle_remote_scan(void) +{ + sl_status_t sc; + switch (command_state) { + case START: { + bool param_ready = true; + prov_mode_t prov_mode = btmesh_app_prov_get_mode(); + if (prov_mode == PROV_UI_MODE) { + param_ready = btmesh_app_remote_prov_get_server_address(&remote_prov_server_addr); + } + if (true == param_ready) { + sc = btmesh_remote_prov_start_device_scan_by_address(0, + remote_prov_server_addr, + REMOTE_PROV_SCANNING_TIMEOUT); + if (SL_STATUS_OK != sc) { + app_log_info("Failed to start remote scanning" APP_LOG_NEW_LINE); + } else { + app_log_info("Remote scanning for unprovisioned nodes started" APP_LOG_NEW_LINE); + } + command_state = IN_PROGRESS; + } + break; + } + case IN_PROGRESS: + break; + case FINISHED: { + prov_mode_t prov_mode = btmesh_app_prov_get_mode(); + app_log_nl(); + app_log_info("Remote scanning completed" APP_LOG_NEW_LINE); + if (prov_mode == PROV_UI_MODE) { + btmesh_app_remote_prov_end_of_cmd(); + } else { + exit(EXIT_SUCCESS); + } + break; + } + default: + break; + } +} + +void handle_remote_provision(void) +{ + static bd_addr mac = { 0 }; + switch (command_state) { + case START: { + bool param_ready = true; + prov_mode_t prov_mode = btmesh_app_prov_get_mode(); + if (prov_mode == PROV_UI_MODE) { + param_ready = btmesh_app_remote_prov_get_prov_data(&remote_prov_server_addr, &command_uuid, &oob_capabilities); + } + if (true == param_ready) { + if (remote_prov_server_addr) { + if (prov_mode == PROV_UI_MODE) { + bool cbp_capability = oob_capabilities & BTMESH_OOB_FLAG_CBP_CAPABLE; + btmesh_app_prov_set_cbp_capability(cbp_capability); + } + app_log_info("Remote provisioning..." APP_LOG_NEW_LINE); + uint16_t netkey_index = 0; + sl_status_t sc = btmesh_remote_prov_start_provisioning(netkey_index, + remote_prov_server_addr, + command_uuid, + HOST_PROV_PB_ADV, + REMOTE_PROV_ATTENTION_TIMER); + app_assert_status_f(sc, "Provisioning failed" APP_LOG_NEW_LINE); + command_state = IN_PROGRESS; + } else { + app_log_info("Remote provisioning failed, invalid server address: 0x%04x" APP_LOG_NEW_LINE, + remote_prov_server_addr); + exit(EXIT_FAILURE); + } + } + break; + } + case IN_PROGRESS: + // Handle CBP if present, else don't do anything + btmesh_app_prov_handle_cbp(APP_NETKEY_IDX, command_uuid, mac, HOST_PROV_PB_REMOTE); + break; + case FINISHED: { + prov_mode_t prov_mode = btmesh_app_prov_get_mode(); + app_log_filter_threshold_set(APP_LOG_LEVEL_INFO); + app_log_nl(); + app_log_info("Provisioning finished" APP_LOG_NEW_LINE); + if (prov_mode == PROV_UI_MODE) { + btmesh_app_remote_prov_end_of_cmd(); + } else { + exit(EXIT_SUCCESS); + } + break; + } + default: + break; + } +} + +void btmesh_app_remote_prov_get_command(command_t *remote_prov_command, command_state_t *remote_prov_command_state) +{ + if (remote_prov_command != NULL) { + *remote_prov_command = command; + } + if (remote_prov_command_state != NULL) { + *remote_prov_command_state = command_state; + } +} + +void btmesh_app_remote_prov_set_command(command_t remote_prov_command) +{ + command = remote_prov_command; +} + +void btmesh_app_remote_prov_set_command_state(command_state_t remote_prov_command_state) +{ + command_state = remote_prov_command_state; +} + +// ---------------------------------------------------------------------------- +// Callbacks + +void btmesh_remote_prov_on_client_scan_capabilities(uint16_t server, uint8_t max_items) +{ + app_log_info("Remote provisioning server address: 0x%04x" APP_LOG_NEW_LINE, server); +} + +void btmesh_remote_prov_on_client_scan_capabilities_finished(void) +{ + command_state = FINISHED; +} + +void btmesh_remote_prov_on_client_scan_report(uuid_128 uuid) +{ + app_log_nl(); + app_log_info("Unprovisioned device UUID: "); + btmesh_app_prov_append_uuid(&uuid); +} + +void btmesh_remote_prov_on_client_scan_finished(void) +{ + command_state = FINISHED; +} + +void btmesh_app_on_provision_failed(void) +{ + if (command_state == IN_PROGRESS) { + app_log_warning("Remote provision failed"APP_LOG_NEW_LINE); + command_state = FINISHED; + } +} + +void btmesh_app_on_node_configuration_end(void) +{ + if (command_state == IN_PROGRESS) { + command_state = FINISHED; + } +} + +void btmesh_app_on_build_cmd_options(struct option *long_options) +{ + if (NULL != long_options) { + memcpy(long_options, remote_prov_long_options, REMOTE_PROV_OPTLENGTH * sizeof(struct option)); + } +} + +sl_status_t btmesh_app_on_check_cmd_options(int cmd_opt, char *cmd_optarg) +{ + return btmesh_app_remote_prov_init(cmd_opt, cmd_optarg); +} + +SL_WEAK void btmesh_app_remote_prov_end_of_cmd(void) +{ + exit(EXIT_SUCCESS); +} + +SL_WEAK bool btmesh_app_remote_prov_get_server_address(uint16_t *ui_server_address) +{ + (void)ui_server_address; + + return true; +} + +SL_WEAK bool btmesh_app_remote_prov_get_prov_data(uint16_t *remote_prov_server_addr, + uuid_128 *remote_prov_uuid, + uint16_t *remote_prov_oob_capabilities) +{ + (void)remote_prov_server_addr; + (void)remote_prov_uuid; + (void)remote_prov_oob_capabilities; + + return true; +} + +SL_WEAK void btmesh_app_prov_handle_cbp(uint16_t netkey_index, + uuid_128 uuid, + bd_addr mac_address, + uint8_t bearer_type) +{ + (void)netkey_index; + (void)uuid; + (void)mac_address; + (void)bearer_type; +} + +SL_WEAK void btmesh_app_prov_set_cbp_capability(bool capability) +{ + (void)capability; +} diff --git a/app/btmesh/common_host/btmesh_app_remote_prov/btmesh_app_remote_prov.h b/app/btmesh/common_host/btmesh_app_remote_prov/btmesh_app_remote_prov.h new file mode 100644 index 00000000000..4bed2af9fab --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_remote_prov/btmesh_app_remote_prov.h @@ -0,0 +1,180 @@ +/**************************************************************************//** + * @file + * @brief BT Mesh Remote Provisioner Application component - CLI handler + ****************************************************************************** + * # License + * Copyright 2021 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 BTMESH_APP_REMOTE_PROV_H +#define BTMESH_APP_REMOTE_PROV_H + +#include +#include "sl_status.h" +#include "btmesh_app_prov.h" +#include "ncp_host.h" + +#ifdef SL_CATALOG_APP_PROV_CBP_PRESENT +#include "btmesh_app_prov_cbp.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif +/// Optstring argument for getopt +#define REMOTE_PROV_OPTLENGTH 4 + +/// Optstring argument for getopt +#define REMOTE_PROV_OPTSTRING "a:mo:v:" + +/// Usage info +#define REMOTE_PROV_USAGE \ + " [--remote_provision --remote_server ]" \ + " [--remote_scan ]" \ + " [--remote_serverlist]" \ + +// Options info +#define REMOTE_PROV_OPTIONS \ + "\nRemote Provisioner-related options:\n" \ + " -v --remote_provision -a --remote_server
\n" \ + " Remote provision an unprovisioned node\n" \ + " The UUID of the node to be provisioned.\n" \ + " Can be acquired by --remote_scan.\n" \ + "
The server addres for remote provisioning\n" \ + " Can be acquired by --remote_serverlist.\n" \ + " -o --remote_scan
\n" \ + " Scan and list remote unprovisioned nodes\n" \ + "
The server addres used for executing the " \ + "remote scan operation\n" \ + " Can be acquired by --remote_serverlist command.\n" \ + " -m --remote_serverlist List all available remote servers for further " \ + "remote operations\n\n" \ + "The
parameter should be a 16 bit hexadecimal number, the usage " \ + "of the 0x before the number is optional\n\n" + +// If CBP is not used, define its macros +#ifndef SL_CATALOG_APP_PROV_CBP_PRESENT +#define CBP_OPTLENGTH 0 +#define CBP_OPTSTRING +#define CBP_USAGE +#define CBP_OPTIONS +#endif // SL_CATALOG_APP_PROV_CBP_PRESENT + +// Size of long options struct array size +#define LONG_OPT_SIZE PROV_OPTLENGTH + REMOTE_PROV_OPTLENGTH + CBP_OPTLENGTH + LAST_OPTION_ELEMENT +// Optstring argument for getopt. +#define OPTSTRING NCP_HOST_OPTSTRING PROV_OPTSTRING REMOTE_PROV_OPTSTRING CBP_OPTSTRING "h" + +// Usage info. +#define USAGE "\n%s " NCP_HOST_USAGE PROV_USAGE REMOTE_PROV_USAGE CBP_USAGE " [-h]\n" + +// Options info. +#define OPTIONS \ + "\nConnection options\n" \ + NCP_HOST_OPTIONS \ + PROV_OPTIONS \ + REMOTE_PROV_OPTIONS \ + CBP_OPTIONS \ + " -h Print this help message.\n" + +/**************************************************************************//** +* Remote Provisioner Command Line Application Init +* +* @param[in] cmd_opt Command option +* @param[in] cmd_optarg Command argument +* @retval SL_STATUS_OK if command started successfully +* SL_STATUS_NOT_FOUND if command is unknown +******************************************************************************/ +sl_status_t btmesh_app_remote_prov_init(int cmd_opt, char *cmd_optarg); + +/**************************************************************************//** +* Remote Provisioner Application Process Action +* +******************************************************************************/ +void btmesh_app_remote_prov_process_action(void); + +/**************************************************************************//** + * Bluetooth Mesh stack event handler + * + * @param[in] evt Event coming from the Bluetooth Mesh stack + *****************************************************************************/ +void btmesh_app_remote_prov_on_event(sl_btmesh_msg_t *evt); + +/**************************************************************************//** + * Get the remote provisioner command and command status + * + * @param[out] remote_prov_command Current command + * @param[out] remote_prov_command_state Current command status + *****************************************************************************/ +void btmesh_app_remote_prov_get_command(command_t *remote_prov_command, command_state_t *remote_prov_command_state); + +/**************************************************************************//** + * Set the remote provisioner command + * + * @param[in] remote_prov_command New command + *****************************************************************************/ +void btmesh_app_remote_prov_set_command(command_t remote_prov_command); + +/**************************************************************************//** + * Set the remote provisioner command status + * + * @param[out] remote_prov_command_state New command status + *****************************************************************************/ +void btmesh_app_remote_prov_set_command_state(command_state_t remote_prov_command_state); + +/**************************************************************************//** + * Callback to inform when the command ends + * + *****************************************************************************/ +void btmesh_app_remote_prov_end_of_cmd(void); + +/**************************************************************************//** + * Get remote provisioning server address from UI + * + * @param[out] ui_server_address The variable to fill with server address + * @retval false the returned server address is not valid + * true if valid server address was returned + *****************************************************************************/ +bool btmesh_app_remote_prov_get_server_address(uint16_t *ui_server_address); + +/**************************************************************************//** + * Get remote provisioning server address and unprovisioned node uuid from UI + * + * @param[out] remote_prov_server_addr The variable to fill with server address + * @param[out] remote_prov_uuid The variable to fill with unprovisioned node uuid + * @param[out] remote_prov_oob_capabilities The variable to fill with unprovisioned + * node OOB capability bitmask + * @retval false the returned provisioning data is not valid + * true if valid provisioning data was returned + *****************************************************************************/ +bool btmesh_app_remote_prov_get_prov_data(uint16_t *remote_prov_server_addr, + uuid_128 *remote_prov_uuid, + uint16_t *remote_prov_oob_capabilities); + +#ifdef __cplusplus +}; +#endif + +#endif // BTMESH_APP_REMOTE_PROV_H diff --git a/app/btmesh/common_host/btmesh_app_remote_prov_ui/btmesh_app_remote_prov_ui.c b/app/btmesh/common_host/btmesh_app_remote_prov_ui/btmesh_app_remote_prov_ui.c new file mode 100644 index 00000000000..f244ef746e0 --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_remote_prov_ui/btmesh_app_remote_prov_ui.c @@ -0,0 +1,226 @@ +/**************************************************************************//** +* @file +* @brief BT Mesh Host Remote Provisioner Example Project - UI mode handler. +******************************************************************************* +* # License +* Copyright 2021 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. +* +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// Includes +#include + +#include "app_log.h" +#include "app_assert.h" +#include "btmesh_app_remote_prov.h" +#include "btmesh_app_prov_ui.h" +#include "btmesh_remote_prov.h" +#include "btmesh_app_remote_prov_ui.h" + +// ---------------------------------------------------------------------------- +// Static Variables + +/// The remote provisioner server address used throughout remote provisioning process +static uint16_t remote_address; + +// ---------------------------------------------------------------------------- +// Function definitions + +sl_status_t btmesh_app_prov_ui_handle_remote_prov_cmd(char cmd_id) +{ + sl_status_t sc = SL_STATUS_NOT_FOUND; + + switch (cmd_id) { + case REMOTE_SERVERLIST_COMMAND: + btmesh_app_remote_prov_set_command(REMOTE_SERVERLIST); + btmesh_app_remote_prov_set_command_state(START); + sc = SL_STATUS_OK; + break; + case REMOTE_SCAN_COMMAND: + btmesh_app_remote_prov_set_command(REMOTE_SCAN); + btmesh_app_remote_prov_set_command_state(START); + sc = SL_STATUS_OK; + break; + case REMOTE_PROVISION_COMMAND: + btmesh_app_remote_prov_set_command(REMOTE_PROVISION); + btmesh_app_remote_prov_set_command_state(START); + sc = SL_STATUS_OK; + break; + default: + break; + } + return sc; +} + +bool btmesh_app_remote_prov_get_server_address(uint16_t *ui_server_address) +{ + bool return_value = false; + sl_status_t sc; + + sl_ui_state prov_ui_state = btmesh_app_prov_ui_get_ui_state(); + + if (UI_CMD_PROCESSING == prov_ui_state) { + app_log("Select a remote provisioning server" APP_LOG_NEW_LINE); + app_log("Type either the ID or the address from the list below" APP_LOG_NEW_LINE); + app_log_nl(); + sc = btmesh_remote_prov_list_active_servers(); + app_log_nl(); + if (SL_STATUS_EMPTY == sc) { + app_log_info("No remote provisioning server nodes available" APP_LOG_NEW_LINE); + app_log_info("Check the available active remote provisioning server list first" APP_LOG_NEW_LINE); + btmesh_app_remote_prov_end_of_cmd(); + } else { + // push ui in UI_WAITING_FOR_INPUT state and waiting for server address + // return value is not important + btmesh_app_prov_ui_get_input_buffer(NULL); + } + } else if (UI_WAITING_FOR_INPUT == prov_ui_state) { + char *ui_input_data; + return_value = btmesh_app_prov_ui_get_input_buffer(&ui_input_data); + if (true == return_value) { + size_t len = strlen(ui_input_data); + if (ADDRESS_LEN_WITHOUT_PREFIX > len) { + uint16_t id = (uint16_t)atoi(ui_input_data); + sc = btmesh_remote_prov_get_server_address_by_id(id, ui_server_address); + if (SL_STATUS_OK != sc) { + app_log_warning("Server with ID: %d not found"APP_LOG_NEW_LINE, id); + return_value = false; + } + } else if (ADDRESS_LEN_WITHOUT_PREFIX == len + || ADDRESS_LEN_WITH_PREFIX == len) { + app_parse_address(ui_input_data, len, ui_server_address); + } else { + app_log_error("Invalid input format!" APP_LOG_NEW_LINE); + return_value = false; + } + } + } + + return return_value; +} + +bool btmesh_app_remote_prov_get_prov_data(uint16_t *remote_prov_server_addr, + uuid_128 *remote_prov_uuid, + uint16_t *remote_prov_oob_capabilities) +{ + bool return_value = false; + sl_status_t sc; + uint16_t id; + char *ui_input_data = NULL; + size_t len; + + sl_ui_state prov_ui_state = btmesh_app_prov_ui_get_ui_state(); + + // get server address from UI + if (0 == remote_address) { + return_value = btmesh_app_remote_prov_get_server_address(&remote_address); + if (true == return_value) { + if (0 != remote_address) { + return_value = false; + app_log_info("Selected remote provisioning server address 0x%04x"APP_LOG_NEW_LINE, remote_address); + } else { + app_log_warning("Invalid remote server address 0x%04x"APP_LOG_NEW_LINE, remote_address); + return_value = false; + } + } + } else { + if (UI_CMD_PROCESSING == prov_ui_state) { + app_log_nl(); + app_log("Select the unprovisioned node for remote provisioning" APP_LOG_NEW_LINE); + app_log("Type either the ID, or UUID from the list below" APP_LOG_NEW_LINE); + app_log_nl(); + sc = btmesh_remote_prov_list_unprovisioned_nodes_by_addr(remote_address); + if (SL_STATUS_EMPTY == sc) { + app_log_nl(); + app_log_info("No unprovisioned nodes available" APP_LOG_NEW_LINE); + app_log_info("Try remote scanning with server: 0x%04x for unprovisioned nodes first"APP_LOG_NEW_LINE, remote_address); + btmesh_app_remote_prov_end_of_cmd(); + } else { + // push ui in UI_WAITING_FOR_INPUT state and waiting for unprovisioned node uuid + // return value is not important + btmesh_app_prov_ui_get_input_buffer(NULL); + } + } else if (UI_WAITING_FOR_INPUT == prov_ui_state) { + return_value = btmesh_app_prov_ui_get_input_buffer(&ui_input_data); + if (true == return_value) { + len = strlen(ui_input_data); + sc = SL_STATUS_OK; + if (ADDRESS_LEN_WITHOUT_PREFIX > len) { + // Unprovisioned node by ID + id = (uint16_t)atoi(ui_input_data); + sc = btmesh_remote_prov_get_unprov_uuid_by_id(id, remote_address, remote_prov_uuid, remote_prov_oob_capabilities); + } else if (UUID_LEN_WITHOUT_SEPARATORS == len + || UUID_LEN_WITH_SEPARATORS == len) { + // Unprovisioned node by UUID + app_parse_uuid(ui_input_data, len, remote_prov_uuid); + } else { + app_log_error("Invalid input format!" APP_LOG_NEW_LINE); + return_value = false; + } + if (SL_STATUS_EMPTY == sc) { + app_log_nl(); + app_log_info("No unprovisioned nodes available" APP_LOG_NEW_LINE); + app_log_info("Try scanning for unprovisioned nodes first" APP_LOG_NEW_LINE); + return_value = false; + btmesh_app_remote_prov_end_of_cmd(); + } else { + *remote_prov_server_addr = remote_address; + remote_address = 0; + } + } + } + } + + return return_value; +} + +// ---------------------------------------------------------------------------- +// Private function definitions + +// ---------------------------------------------------------------------------- +// Callbacks + +void btmesh_remote_prov_on_unprovisioned_node_list(uint16_t id, + uuid_128 uuid) +{ + app_log_info("Unprovisioned node" APP_LOG_NEW_LINE); + app_log_info("ID: %d" APP_LOG_NEW_LINE, id); + app_log_info("UUID: "); + btmesh_app_prov_append_uuid(&uuid); + app_log_nl(); +} + +void btmesh_app_remote_prov_end_of_cmd(void) +{ + btmesh_app_remote_prov_set_command(NONE); + btmesh_app_remote_prov_set_command_state(START); + remote_address = 0; + btmesh_app_prov_end_of_cmd(); +} + +void btmesh_remote_prov_on_serverlist(uint16_t id, uint16_t server) +{ + app_log_info("%u. Remote provisioning server: 0x%04x"APP_LOG_NEW_LINE, id, server); +} diff --git a/app/btmesh/common_host/btmesh_app_remote_prov_ui/btmesh_app_remote_prov_ui.h b/app/btmesh/common_host/btmesh_app_remote_prov_ui/btmesh_app_remote_prov_ui.h new file mode 100644 index 00000000000..2e961d47370 --- /dev/null +++ b/app/btmesh/common_host/btmesh_app_remote_prov_ui/btmesh_app_remote_prov_ui.h @@ -0,0 +1,60 @@ +/**************************************************************************//** + * @file + * @brief BT Mesh Host Remote Provisioner Example Project. + ****************************************************************************** + * # License + * Copyright 2021 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 BTMESH_APP_REMOTE_PROV_UI_H +#define BTMESH_APP_REMOTE_PROV_UI_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define REMOTE_SERVERLIST_COMMAND 'm' +#define REMOTE_SCAN_COMMAND 'o' +#define REMOTE_PROVISION_COMMAND 'v' + +#define PROV_UI_MENU \ + "Please select a functionality\n\n" \ + "s - Scan available nodes\n" \ + "p - Provision a beaconing node\n" \ + "l - List nodes in the network\n" \ + "i - Information about a node in the network\n" \ + "r - Remove node from the network\n" \ + "k - Refresh the network key and app key\n" \ + "m - List available remote provisioning servers\n" \ + "o - Remote scan unprovisioned nodes\n" \ + "v - Remote provision an unprovisioned node\n" \ + "e - Reset provisioner node\n" \ + "q - Exit application\n\n" + +#ifdef __cplusplus +}; +#endif + +#endif // BTMESH_APP_REMOTE_PROV_UI_H diff --git a/app/btmesh/common_host/btmesh_conf/btmesh_conf.c b/app/btmesh/common_host/btmesh_conf/btmesh_conf.c new file mode 100644 index 00000000000..6c9a783ca80 --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/btmesh_conf.c @@ -0,0 +1,937 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Configurator Component + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include "btmesh_conf.h" +#include "btmesh_conf_config.h" +#include "btmesh_conf_distributor.h" +#include "btmesh_conf_job.h" +#include "btmesh_conf_task.h" +#include "btmesh_db.h" + +#include +#include + +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_model_specification_defs.h" +#include "sl_btmesh_model_specification_v1_1_defs.h" + +#include "app_log.h" +#include "app_assert.h" + +// The BT Mesh Configurator dynamic memory allocation and deallocation is +// managed by create and destroy functions. The following rules were established +// to have consistent, uniform and correct interface and implementation: +// Create functions: +// => Req01: Allocation and initialization of objects. +// => Req02: The return type of the function shall be a pointer type to the +// created struct. The parameters are object dependent. (~constructor) +// => Req03: Create shall return a pointer to the allocated and initialized object +// => Req04: Create shall validate the parameters first and return NULL in case +// of invalid parameters. +// => Req05: If the parameters are valid then create shall allocate the dynamic +// memory for itself. +// - This can mean multiple dynamic memory allocation calls. +// - Example: Allocation of struct and allocation of array member of the +// allocated struct +// => Req06: Create shall invoke the create function of other classes to +// initialize aggregated objects. +// => Req07: If any allocation fails except for the allocation of the object +// itself then the destroy function shall be called and NULL shall +// be returned. Every unallocated field shall be NULL when the destroy +// function is called. +// - Note: The destroy function shall be able to distinguish the allocated +// and not allocated pointers. If malloc allocates dynamic memory +// then the memory of the object is uninitialized so the pointers +// in the objects are uninitialized as well. +// => Req08: The attributes of the object shall be initialized after allocation +// was successful. +// +// Destroy function: +// => Req20: Deallocation and deinitialization of objects. +// => Req21: Destroy function shall have void return type and it shall have +// one parameter which is a pointer to the struct which shall be +// deallocated. This parameter shall be named to self. +// => Req22: The destroy function shall return immediately if the self +// parameter is NULL. (same behavior as free stdlib function) +// => Req23: The memory deallocation of dynamic memory of the object and +// destroy function calls of aggregated objects shall be executed +// in reverse order of allocation. +// => Req24: The destroy function shall support the deallocation of partially +// created objects. +// - This is necessary in order to support the call of destroy function +// inside create function when the allocation fails. (see Req06) + +/***************************************************************************//** + * @addtogroup btmesh_conf BT Mesh Configurator Component + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_internal BT Mesh Configurator Internal + * @brief Internal type definitions, variables and functions. + * @{ + ******************************************************************************/ +/// Local log new line shortcut definition +#define NL APP_LOG_NL + +/// BT Mesh configuration server model ID +#define BTMESH_CONF_CONFIG_SERVER_MODEL_ID 0x0000 +/// BT Mesh configuration client model ID +#define BTMESH_CONF_CONFIG_CLIENT_MODEL_ID 0x0001 +/// BT Mesh health server model ID +#define BTMESH_CONF_HEALTH_SERVER_MODEL_ID 0x0002 +/// BT Mesh health client model ID +#define BTMESH_CONF_HEALTH_CLIENT_MODEL_ID 0x0003 + +/// BT Mesh Stack BGAPI class ID mask +#define BTMESH_CONF_CLASS_ID_MASK (0x00FF0000UL) +/// BT Mesh Stack BGAPI class ID shift +#define BTMESH_CONF_CLASS_ID_SHIFT (16) +/// Return BT Mesh Stack BGAPI class ID from the event identifier +#define BTMESH_CONF_GET_CLASS_ID(event_id) (((event_id) & BTMESH_CONF_CLASS_ID_MASK) \ + >> BTMESH_CONF_CLASS_ID_SHIFT) +/// Class ID of BT Mesh Stack BGAPI Configuration Client class +#define BTMESH_CONF_CLASS_ID BTMESH_CONF_GET_CLASS_ID(sl_btmesh_cmd_config_client_get_dcd_id) + +/// BT Mesh Model Information +typedef struct { + const char *name; ///< Name of the model based + uint16_t id; ///< Model identifier (BT Mesh specification) + bool appkey_binding : 1; ///< Model application key binding support + bool subscription : 1; ///< Model subscription support + bool publication : 1; ///< Model publication support +} btmesh_conf_model_info_t; + +/***************************************************************************//** + * Provides model information belonging to the specified Bluetooth SIG model ID. + * + * @param[in] sig_model_id Bluetooth SIG model identifier + * @returns Pointer to the model information + * @retval NULL if the model ID does not exists in @ref model_info_array + ******************************************************************************/ +static const btmesh_conf_model_info_t *get_model_info(uint16_t sig_model_id); + +/***************************************************************************//** + * Submit a configuration job for execution. + * If @auto_destroy_on_submit_failure parameter is true and submit operation + * fails then the configuration job is deallocated (destroyed). + * + * @param[in] job Configuration job which aggregates the configuration tasks + * @param[in] auto_destroy_on_submit_failure If it is true then the configuration + * job is deallocated after the submit operation fails. + * @returns Status of the job submit operation. + * @retval SL_STATUS_OK If the job is submitted successfully. + * @retval SL_STATUS_INVALID_STATE If the BT Mesh configurator is not initialized. + ******************************************************************************/ +static sl_status_t submit_job(btmesh_conf_job_t *job, + bool auto_destroy_on_submit_failure); + +/// BT Mesh model information array which contains the information about +/// Bluetooth SIG Mesh models. +/// @warning The model information shall be in ascending order of model ID. +static const btmesh_conf_model_info_t model_info_array[]; + +/// Number of elements in model_info_array +static const uint16_t model_info_count; + +/// BT Mesh Configuration Distributor singleton pointer +static btmesh_conf_distributor_t *btmesh_conf_dist = NULL; +/// BT Mesh Configurator callback active flag +static bool btmesh_conf_callback_active = false; + +/** @} (end addtogroup btmesh_conf_internal) */ + +sl_status_t btmesh_conf_init(void) +{ + sl_status_t sc = SL_STATUS_OK; + for (uint16_t idx = 1; idx < model_info_count; idx++) { + // Model information array shall be ordered by model id to use binary search + if (model_info_array[idx].id <= model_info_array[idx - 1].id) { + sc = SL_STATUS_INVALID_CONFIGURATION; + break; + } + } + + if (SL_STATUS_OK == sc) { + btmesh_conf_dist = btmesh_conf_distributor_create(SL_BTMESH_CONF_EXECUTOR_COUNT_CFG_VAL); + if (NULL == btmesh_conf_dist) { + sc = SL_STATUS_ALLOCATION_FAILED; + } else { + sc = SL_STATUS_OK; + } + } + return sc; +} + +sl_status_t btmesh_conf_deinit(void) +{ + sl_status_t deinit_status; + if (false != btmesh_conf_callback_active) { + deinit_status = SL_STATUS_INVALID_STATE; + } else { + btmesh_conf_distributor_destroy(btmesh_conf_dist); + btmesh_conf_dist = NULL; + deinit_status = SL_STATUS_OK; + } + return deinit_status; +} + +sl_status_t btmesh_conf_submit_job(btmesh_conf_job_t *job) +{ + bool auto_destroy_on_submit_failure = false; + +#if 0 != SL_BTMESH_CONF_JOB_AUTO_DESTROY_ON_SUBMIT_FAILURE_CFG_VAL + if (false != job->auto_destroy) { + auto_destroy_on_submit_failure = true; + } +#endif + + return submit_job(job, auto_destroy_on_submit_failure); +} + +sl_status_t btmesh_conf_dcd_get(uint16_t netkey_index, + uint16_t server_address, + uint8_t page, + btmesh_conf_on_job_notification_t on_job_notification) +{ + if (NULL == btmesh_conf_dist) { + // BT Mesh Configurator is uninitialized + return SL_STATUS_INVALID_STATE; + } + + btmesh_conf_task_t *task = btmesh_conf_task_dcd_get_create(page); + if (NULL == task) { + return SL_STATUS_ALLOCATION_FAILED; + } + + btmesh_conf_job_t *job = btmesh_conf_job_create(netkey_index, + server_address, + task, + on_job_notification, + BTMESH_CONF_VARG_NULL, + true, + NULL); + if (NULL == job) { + task->destroy(task); + return SL_STATUS_ALLOCATION_FAILED; + } + + // The job is created internally and therefore if the submit fails then it + // shall be destroyed internally as well so auto_destroy_on_submit_failure + // parameter is set to true. + return submit_job(job, true); +} + +sl_status_t btmesh_conf_reset_node(uint16_t netkey_index, + uint16_t server_address, + btmesh_conf_on_job_notification_t on_job_notification) +{ + if (NULL == btmesh_conf_dist) { + // BT Mesh Configurator is uninitialized + return SL_STATUS_INVALID_STATE; + } + + btmesh_conf_task_t *task = btmesh_conf_task_reset_node_create(); + if (NULL == task) { + return SL_STATUS_ALLOCATION_FAILED; + } + + btmesh_conf_job_t *job = btmesh_conf_job_create(netkey_index, + server_address, + task, + on_job_notification, + BTMESH_CONF_VARG_NULL, + true, + NULL); + if (NULL == job) { + task->destroy(task); + return SL_STATUS_ALLOCATION_FAILED; + } + + // The job is created internally and therefore if the submit fails then it + // shall be destroyed internally as well so auto_destroy_on_submit_failure + // parameter is set to true. + return submit_job(job, true); +} + +void btmesh_conf_on_event(const sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_prov_initialized_id: + { + sl_status_t sc; + sc = btmesh_conf_init(); + app_assert_status_f(sc, "Failed to init configurator component." NL); + + sc = sl_btmesh_config_client_set_default_timeout(SL_BTMESH_CONF_REQUEST_TIMEOUT_MS_CFG_VAL, + SL_BTMESH_CONF_LPN_REQUEST_TIMEOUT_MS_CFG_VAL); + app_assert_status_f(sc, "Failed to set config client default timeout."); + break; + } + } + + if (NULL != btmesh_conf_dist) { + // Forward events to the distributor if it exists (initialized) + btmesh_conf_distributor_on_event(btmesh_conf_dist, evt); + } +} + +void btmesh_conf_step(void) +{ + if (NULL != btmesh_conf_dist) { + // Execute distributor step function if it exists (initialized) + btmesh_conf_distributor_step(btmesh_conf_dist); + } +} + +void btmesh_conf_on_job_notification(btmesh_conf_job_t *const job) +{ + // If job status notification callback is set then the application is notified + // about the changed job status + if (NULL != job->on_job_notification) { + btmesh_conf_callback_active = true; + job->on_job_notification(job); + btmesh_conf_callback_active = false; + } + + // If the auto destroy is set then the application does not need the config + // job instance after the notification so it shall be deallocated + if (false != job->auto_destroy) { + btmesh_conf_job_destroy(job); + } +} + +sl_status_t btmesh_conf_get_sig_model_attributes(uint16_t model_id, + btmesh_conf_sig_model_attr_bitmask_t *attributes) +{ + if (NULL == attributes) { + return SL_STATUS_NULL_POINTER; + } + + const btmesh_conf_model_info_t *model_info = get_model_info(model_id); + if (NULL == model_info) { + return SL_STATUS_NOT_FOUND; + } + + *attributes = + (model_info->appkey_binding ? BTMESH_CONF_SIG_MODEL_SUPPORTS_APPKEY_BINDING : 0) + | (model_info->subscription ? BTMESH_CONF_SIG_MODEL_SUPPORTS_SUBSCRIPTION : 0) + | (model_info->publication ? BTMESH_CONF_SIG_MODEL_SUPPORTS_PUBLICATION : 0); + return SL_STATUS_OK; +} + +const char *btmesh_conf_sig_model_id_to_string(uint16_t model_id) +{ + const btmesh_conf_model_info_t *model_info = get_model_info(model_id); + if (NULL == model_info) { + // If the model ID is not found then return valid string in order to make + // easier to use this function with snprintf like functions + return "UnknownSigModel"; + } else { + return model_info->name; + } +} + +bool btmesh_conf_is_configuration_event(uint32_t event_id) +{ + uint8_t class_id = BTMESH_CONF_GET_CLASS_ID(event_id); + return (class_id == BTMESH_CONF_CLASS_ID); +} + +sl_status_t btmesh_conf_get_handle_from_event(const sl_btmesh_msg_t *evt, + uint32_t *handle) +{ + sl_status_t sc = SL_STATUS_OK; + if ((NULL == handle) || (NULL == evt)) { + sc = SL_STATUS_NULL_POINTER; + } else { + uint32_t event_id = SL_BT_MSG_ID(evt->header); + switch (event_id) { + case sl_btmesh_evt_config_client_request_modified_id: + *handle = evt->data.evt_config_client_request_modified.handle; + break; + case sl_btmesh_evt_config_client_netkey_status_id: + *handle = evt->data.evt_config_client_netkey_status.handle; + break; + case sl_btmesh_evt_config_client_netkey_list_id: + *handle = evt->data.evt_config_client_netkey_list.handle; + break; + case sl_btmesh_evt_config_client_netkey_list_end_id: + *handle = evt->data.evt_config_client_netkey_list_end.handle; + break; + case sl_btmesh_evt_config_client_appkey_status_id: + *handle = evt->data.evt_config_client_appkey_status.handle; + break; + case sl_btmesh_evt_config_client_appkey_list_id: + *handle = evt->data.evt_config_client_appkey_list.handle; + break; + case sl_btmesh_evt_config_client_appkey_list_end_id: + *handle = evt->data.evt_config_client_appkey_list_end.handle; + break; + case sl_btmesh_evt_config_client_binding_status_id: + *handle = evt->data.evt_config_client_binding_status.handle; + break; + case sl_btmesh_evt_config_client_bindings_list_id: + *handle = evt->data.evt_config_client_bindings_list.handle; + break; + case sl_btmesh_evt_config_client_bindings_list_end_id: + *handle = evt->data.evt_config_client_bindings_list_end.handle; + break; + case sl_btmesh_evt_config_client_model_pub_status_id: + *handle = evt->data.evt_config_client_model_pub_status.handle; + break; + case sl_btmesh_evt_config_client_model_sub_status_id: + *handle = evt->data.evt_config_client_model_sub_status.handle; + break; + case sl_btmesh_evt_config_client_subs_list_id: + *handle = evt->data.evt_config_client_subs_list.handle; + break; + case sl_btmesh_evt_config_client_subs_list_end_id: + *handle = evt->data.evt_config_client_subs_list_end.handle; + break; + case sl_btmesh_evt_config_client_heartbeat_pub_status_id: + *handle = evt->data.evt_config_client_heartbeat_pub_status.handle; + break; + case sl_btmesh_evt_config_client_heartbeat_sub_status_id: + *handle = evt->data.evt_config_client_heartbeat_sub_status.handle; + break; + case sl_btmesh_evt_config_client_beacon_status_id: + *handle = evt->data.evt_config_client_beacon_status.handle; + break; + case sl_btmesh_evt_config_client_default_ttl_status_id: + *handle = evt->data.evt_config_client_default_ttl_status.handle; + break; + case sl_btmesh_evt_config_client_gatt_proxy_status_id: + *handle = evt->data.evt_config_client_gatt_proxy_status.handle; + break; + case sl_btmesh_evt_config_client_relay_status_id: + *handle = evt->data.evt_config_client_relay_status.handle; + break; + case sl_btmesh_evt_config_client_network_transmit_status_id: + *handle = evt->data.evt_config_client_network_transmit_status.handle; + break; + case sl_btmesh_evt_config_client_identity_status_id: + *handle = evt->data.evt_config_client_identity_status.handle; + break; + case sl_btmesh_evt_config_client_friend_status_id: + *handle = evt->data.evt_config_client_friend_status.handle; + break; + case sl_btmesh_evt_config_client_key_refresh_phase_status_id: + *handle = evt->data.evt_config_client_key_refresh_phase_status.handle; + break; + case sl_btmesh_evt_config_client_lpn_polltimeout_status_id: + *handle = evt->data.evt_config_client_lpn_polltimeout_status.handle; + break; + case sl_btmesh_evt_config_client_dcd_data_id: + *handle = evt->data.evt_config_client_dcd_data.handle; + break; + case sl_btmesh_evt_config_client_dcd_data_end_id: + *handle = evt->data.evt_config_client_dcd_data_end.handle; + break; + case sl_btmesh_evt_config_client_reset_status_id: + *handle = evt->data.evt_config_client_reset_status.handle; + break; + default: + app_assert(false == btmesh_conf_is_configuration_event(event_id), + "Unhandled configuration event."); + sc = SL_STATUS_NOT_FOUND; + break; + } + } + return sc; +} + +bool btmesh_conf_any_severe_log_level(uint8_t start_level) +{ + bool enabled = false; + for (int16_t level = start_level; 0 <= level; level--) { + enabled = enabled || _app_log_check_level(level); + } + return enabled; +} + +/***************************************************************************//** + * @addtogroup btmesh_conf_internal BT Mesh Configurator Internal + * @{ + ******************************************************************************/ +static sl_status_t submit_job(btmesh_conf_job_t *job, + bool auto_destroy_on_submit_failure) +{ + sl_status_t sc; + if (NULL == btmesh_conf_dist) { + // BT Mesh Configurator is uninitialized + sc = SL_STATUS_INVALID_STATE; + } else { + sc = btmesh_conf_distributor_submit_job(btmesh_conf_dist, job); + + if ((SL_STATUS_OK != sc) && (false != auto_destroy_on_submit_failure)) { + btmesh_conf_job_destroy(job); + } + } + return sc; +} + +static const btmesh_conf_model_info_t *get_model_info(uint16_t sig_model_id) +{ + int32_t start_idx = 0; + int32_t end_idx = model_info_count - 1; + int32_t middle_idx; + // Binary search in the model information array which is ordered by ascending + // model identifiers. The ascending order is checked by btmesh_conf_init. + while (start_idx <= end_idx) { + middle_idx = (start_idx + end_idx) / 2; + if (sig_model_id < model_info_array[middle_idx].id) { + end_idx = middle_idx - 1; + } else if (model_info_array[middle_idx].id < sig_model_id) { + start_idx = middle_idx + 1; + } else { + return &model_info_array[middle_idx]; + } + } + return NULL; +} + +// WARNING! The model information shall be in ascending order of model ID. +static const btmesh_conf_model_info_t model_info_array[] = { + { + .id = BTMESH_CONF_CONFIG_SERVER_MODEL_ID, + .name = "Configuration Server", + .appkey_binding = false, + .subscription = false, + .publication = false, + }, + { + .id = BTMESH_CONF_CONFIG_CLIENT_MODEL_ID, + .name = "Configuration Client", + .appkey_binding = false, + .subscription = false, + .publication = false, + }, + { + .id = BTMESH_CONF_HEALTH_SERVER_MODEL_ID, + .name = "Health Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = BTMESH_CONF_HEALTH_CLIENT_MODEL_ID, + .name = "Health Client", + .appkey_binding = true, + .subscription = false, + .publication = false, + }, + { + .id = MESH_REMOTE_PROV_SERVER_MODEL_ID, + .name = "Remote Provisioning Server", + .appkey_binding = false, + .subscription = false, + .publication = false, + }, + { + .id = MESH_REMOTE_PROV_CLIENT_MODEL_ID, + .name = "Remote Provisioning Client", + .appkey_binding = false, + .subscription = false, + .publication = false, + }, + { + .id = MESH_GENERIC_ON_OFF_SERVER_MODEL_ID, + .name = "Generic OnOff Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_ON_OFF_CLIENT_MODEL_ID, + .name = "Generic OnOff Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_LEVEL_SERVER_MODEL_ID, + .name = "Generic Level Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_LEVEL_CLIENT_MODEL_ID, + .name = "Generic Level Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_TRANSITION_TIME_SERVER_MODEL_ID, + .name = "Generic Default Transition Time Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_TRANSITION_TIME_CLIENT_MODEL_ID, + .name = "Generic Default Transition Time Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_POWER_ON_OFF_SERVER_MODEL_ID, + .name = "Generic Power OnOff Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_POWER_ON_OFF_SETUP_SERVER_MODEL_ID, + .name = "Generic Power OnOff Setup Server", + .appkey_binding = true, + .subscription = true, + .publication = false, + }, + { + .id = MESH_GENERIC_POWER_ON_OFF_CLIENT_MODEL_ID, + .name = "Generic Power OnOff Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_POWER_LEVEL_SERVER_MODEL_ID, + .name = "Generic Power Level Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_POWER_LEVEL_SETUP_SERVER_MODEL_ID, + .name = "Generic Power Level Setup Server", + .appkey_binding = true, + .subscription = true, + .publication = false, + }, + { + .id = MESH_GENERIC_POWER_LEVEL_CLIENT_MODEL_ID, + .name = "Generic Power Level Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_BATTERY_SERVER_MODEL_ID, + .name = "Generic Battery Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_BATTERY_CLIENT_MODEL_ID, + .name = "Generic Battery Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_LOCATION_SERVER_MODEL_ID, + .name = "Generic Location Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_LOCATION_SETUP_SERVER_MODEL_ID, + .name = "Generic Location Setup Server", + .appkey_binding = true, + .subscription = true, + .publication = false, + }, + { + .id = MESH_GENERIC_LOCATION_CLIENT_MODEL_ID, + .name = "Generic Location Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_ADMIN_PROPERTY_SERVER_MODEL_ID, + .name = "Generic Admin Property Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_MANUF_PROPERTY_SERVER_MODEL_ID, + .name = "Generic Manufacturer Property Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_USER_PROPERTY_SERVER_MODEL_ID, + .name = "Generic User Property Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_CLIENT_PROPERTY_SERVER_MODEL_ID, + .name = "Generic Client Property Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_GENERIC_PROPERTY_CLIENT_MODEL_ID, + .name = "Generic Property Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_SENSOR_SERVER_MODEL_ID, + .name = "Sensor Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_SENSOR_SETUP_SERVER_MODEL_ID, + .name = "Sensor Setup Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_SENSOR_CLIENT_MODEL_ID, + .name = "Sensor Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_TIME_SERVER_MODEL_ID, + .name = "Time Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_TIME_SETUP_SERVER_MODEL_ID, + .name = "Time Setup Server", + .appkey_binding = true, + .subscription = false, + .publication = false, + }, + { + .id = MESH_TIME_CLIENT_MODEL_ID, + .name = "Time Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_SCENE_SERVER_MODEL_ID, + .name = "Scene Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_SCENE_SETUP_SERVER_MODEL_ID, + .name = "Scene Setup Server", + .appkey_binding = true, + .subscription = true, + .publication = false, + }, + { + .id = MESH_SCENE_CLIENT_MODEL_ID, + .name = "Scene Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_SCHEDULER_SERVER_MODEL_ID, + .name = "Scheduler Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_SCHEDULER_SETUP_SERVER_MODEL_ID, + .name = "Scheduler Setup Server", + .appkey_binding = true, + .subscription = true, + .publication = false, + }, + { + .id = MESH_SCHEDULER_CLIENT_MODEL_ID, + .name = "Scheduler Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID, + .name = "Light Lightness Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LIGHTING_LIGHTNESS_SETUP_SERVER_MODEL_ID, + .name = "Light Lightness Setup Server", + .appkey_binding = true, + .subscription = true, + .publication = false, + }, + { + .id = MESH_LIGHTING_LIGHTNESS_CLIENT_MODEL_ID, + .name = "Light Lightness Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LIGHTING_CTL_SERVER_MODEL_ID, + .name = "Light CTL Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LIGHTING_CTL_SETUP_SERVER_MODEL_ID, + .name = "Light CTL Setup Server", + .appkey_binding = true, + .subscription = true, + .publication = false, + }, + { + .id = MESH_LIGHTING_CTL_CLIENT_MODEL_ID, + .name = "Light CTL Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LIGHTING_CTL_TEMPERATURE_SERVER_MODEL_ID, + .name = "Light CTL Temperature Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LIGHTING_HSL_SERVER_MODEL_ID, + .name = "Light HSL Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LIGHTING_HSL_SETUP_SERVER_MODEL_ID, + .name = "Light HSL Setup Server", + .appkey_binding = true, + .subscription = true, + .publication = false, + }, + { + .id = MESH_LIGHTING_HSL_CLIENT_MODEL_ID, + .name = "Light HSL Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LIGHTING_HSL_HUE_SERVER_MODEL_ID, + .name = "Light HSL Hue Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LIGHTING_HSL_SATURATION_SERVER_MODEL_ID, + .name = "Light HSL Saturation Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LIGHTING_XYL_SERVER_MODEL_ID, + .name = "Light xyL Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LIGHTING_XYL_SETUP_SERVER_MODEL_ID, + .name = "Light xyL Setup Server", + .appkey_binding = true, + .subscription = true, + .publication = false, + }, + { + .id = MESH_LIGHTING_XYL_CLIENT_MODEL_ID, + .name = "Light xyL Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LC_SERVER_MODEL_ID, + .name = "Light LC Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LC_SETUP_SERVER_MODEL_ID, + .name = "Light LC Setup Server", + .appkey_binding = true, + .subscription = true, + .publication = true, + }, + { + .id = MESH_LC_CLIENT_MODEL_ID, + .name = "Light LC Client", + .appkey_binding = true, + .subscription = true, + .publication = true, + } +}; + +static const uint16_t model_info_count = sizeof(model_info_array) + / sizeof(model_info_array[0]); + +/** @} (end addtogroup btmesh_conf_internal) */ +/** @} (end addtogroup btmesh_conf) */ diff --git a/app/btmesh/common_host/btmesh_conf/btmesh_conf.h b/app/btmesh/common_host/btmesh_conf/btmesh_conf.h new file mode 100644 index 00000000000..0b6d59d6866 --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/btmesh_conf.h @@ -0,0 +1,317 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Configurator Component + ******************************************************************************* + * # License + * Copyright 2021 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 BTMESH_CONF_H +#define BTMESH_CONF_H + +#include "btmesh_conf_types.h" +#include "btmesh_conf_job.h" +#include "btmesh_conf_task.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/***************************************************************************//** + * @addtogroup btmesh_conf BT Mesh Configurator Component + * @brief Robust execution of configuration jobs over BT Mesh Stack. + * + * BT Mesh configuration jobs can be created from one or more configuration tasks. + * In order to create configuration jobs and tasks the following header files + * shall be checked: + * - BT Mesh Configuration Job interface can be found in btmesh_conf_job.h + * header file (@ref btmesh_conf_job group). + * - BT Mesh Configuration Task interface can be found in btmesh_conf_task.h + * header file (@ref btmesh_conf_task group). + * + * The created jobs can be submitted for execution to BT Mesh Configurator by + * calling the @ref btmesh_conf_submit_job. + * + * If the application provides a callback (@ref btmesh_conf_on_job_notification_t) + * when it creates the configuration job then the application is notified about + * changed job status. + * @n The btmesh_conf_job_t::result can be checked in the notification callback + * to figure out if the configuration job was successful or not. + * The allocation and deallocation and ownership of configuration jobs are + * described in @ref btmesh_conf_submit_job. + * + * There are some common configuration use cases when the execution of job with + * a single configuration task is necessary. Some utility functions are provided + * in order to simplify the submission of these common configuration jobs: + * - @ref btmesh_conf_dcd_get + * - @ref btmesh_conf_reset_node + * + * These utility functions create configuration jobs and tasks and submit them + * with @ref btmesh_conf_submit_job function the same way as the application + * would do. The finished configuration job which is created by utility function + * is deallocated automatically. + * @{ + ******************************************************************************/ + +/// Information about the supported configuration operations on a model +typedef enum { + /// No attribute flags + BTMESH_CONF_SIG_MODEL_ATTRIBUTES_NONE = 0, + /// Subscription supported + BTMESH_CONF_SIG_MODEL_SUPPORTS_SUBSCRIPTION = (1 << 0), + /// Publication supported + BTMESH_CONF_SIG_MODEL_SUPPORTS_PUBLICATION = (1 << 1), + /// Application key binding supported + BTMESH_CONF_SIG_MODEL_SUPPORTS_APPKEY_BINDING = (1 << 2) +} btmesh_conf_sig_model_attr_bitmask_t; + +/***************************************************************************//** + * Initialize the BT Mesh Configurator component + * + * @returns Status of the initialization. + * @retval SL_STATUS_OK If the initialization is successful. + * @retval SL_STATUS_ALLOCATION_FAILED If the dynamic memory allocation of + * internal data structures is failed. + * @retval SL_STATUS_INVALID_CONFIGURATION If the configured model information + * is not valid. (array elems are not arranged in ascending order by model ID) + * + * The initialization is performed automatically when the BT Mesh Stack triggers + * the sl_btmesh_evt_prov_initialized_id event. The application code shall call + * this function if it deinitialized the configurator component beforehand + * (@ref btmesh_conf_deinit). + ******************************************************************************/ +sl_status_t btmesh_conf_init(void); + +/***************************************************************************//** + * Deinitialize the BT Mesh Configurator component + * + * @returns Status of the deinitialization. + * @retval SL_STATUS_OK If the deinitialization is successful. + * @retval SL_STATUS_INVALID_STATE If the deinitialization can't be started + * because it is initiated from @ref btmesh_conf_job_t::on_job_notification + * callback. + * + * Deallocates the internal data structures and stops the processing of BT Mesh + * stack events. Deinitialization shall not be called from + * @ref btmesh_conf_job_t::on_job_notification callback. + * + ******************************************************************************/ +sl_status_t btmesh_conf_deinit(void); + +/***************************************************************************//** + * Submit a configuration job for execution + * + * @param[in] job Configuration job which aggregates the configuration tasks + * @returns Status of the job submission. + * @retval SL_STATUS_OK If the job is submitted successfully. + * @retval SL_STATUS_INVALID_STATE If the BT Mesh configurator is not initialized. + * + * Each configuration job aggregates configuration tasks which targets the same + * remote node (configuration server model). + * + * If a configuration job is submitted to the BT Mesh Configurator then it is + * added to the end of a wait queue. Therefore it is not guaranteed that the + * execution a job is started immediately. + * Configuration jobs with the same server addresses are executed in the order + * of submission however jobs with different server addresses might be executed + * in parallel. + * + * If the submit operation is successful then the BT Mesh Configurator takes + * over the ownership of the job and consequently the application is no longer + * allowed to modify the submitted job or its tasks. + * If the submit operation fails and @ref btmesh_conf_job_t::auto_destroy is set + * and @ref SL_BTMESH_CONF_JOB_AUTO_DESTROY_ON_SUBMIT_FAILURE_CFG_VAL is turned on then the + * job is deallocated automatically in the submit call and consequently the job + * shall not be referenced when the submit returns with failure. + * + * If task execution path ends in the configuration job then the job ends as + * well and @ref btmesh_conf_job_t::on_job_notification callback is called with + * the result. The btmesh_conf_job_t::result structure member contains the + * result of the job. + * If the @ref btmesh_conf_job_t::auto_destroy is set to true then the job and + * its tasks are deallocated automatically after the callback returns. + * + * @warning If the auto destroy feature is used then the job shall not be + * referenced after the callback is executed. + * + * @note Te BT Mesh Stack does not allow the parallel execution of two + * configuration requests with the same server address (primary element). + * The limitation is added to the BT Mesh Stack because the configuration + * messages don't contain any transaction identifier in accordance with BT + * Mesh Profile specification so the status messages could not be differentiated. + * + ******************************************************************************/ +sl_status_t btmesh_conf_submit_job(btmesh_conf_job_t *job); + +/***************************************************************************//** + * Submit a configuration job with a DCD get task + * + * @param[in] netkey_index Network key used to encrypt request on network layer + * @param[in] server_address Destination node primary element address + * @param[in] page Composition data page to query + * @param[in] on_job_notification Callback to notify the app about job status + * @returns Status of the DCD get request. + * @retval SL_STATUS_OK If the job is submitted successfully. + * @retval SL_STATUS_INVALID_STATE If the BT Mesh configurator is not initialized. + * @retval SL_STATUS_ALLOCATION_FAILED If allocation of job or task is failed. + * + * Configuration job with DCD get task is created automatically and submitted + * for execution. The allocation and deallocation of task and job is handled + * automatically in this function. + * + * @note It is a quite common usecase to get the DCD first and based on the + * content of the DCD further configuration tasks are defined and executed. + * @n This utility function makes it easier to get the DCD however it is + * possible to query the DCD with the following (basic) API calls as well: + * - @ref btmesh_conf_task_dcd_get_create + * - @ref btmesh_conf_job_create + * - @ref btmesh_conf_submit_job + ******************************************************************************/ +sl_status_t btmesh_conf_dcd_get(uint16_t netkey_index, + uint16_t server_address, + uint8_t page, + btmesh_conf_on_job_notification_t on_job_notification); + +/***************************************************************************//** + * Submit a configuration job with a reset node task + * + * @param[in] netkey_index Network key used to encrypt request on network layer + * @param[in] server_address Destination node primary element address + * @param[in] on_job_notification Callback to notify the app about job status + * @returns Status of the reset node request. + * @retval SL_STATUS_OK If the job is submitted successfully. + * @retval SL_STATUS_INVALID_STATE If the BT Mesh configurator is not initialized. + * @retval SL_STATUS_ALLOCATION_FAILED If allocation of job or task is failed. + * + * Configuration job with reset node task is created automatically and submitted + * for execution. The allocation and deallocation of task and job is handled + * automatically in this function. + * + * @note This utility function makes it easier to reset a node however it is + * possible to reset a node with the following (basic) API calls as well: + * - @ref btmesh_conf_task_reset_node_create + * - @ref btmesh_conf_job_create + * - @ref btmesh_conf_submit_job + ******************************************************************************/ +sl_status_t btmesh_conf_reset_node(uint16_t netkey_index, + uint16_t server_address, + btmesh_conf_on_job_notification_t on_job_notification); + +/***************************************************************************//** + * BT Mesh Configurator event handler + * + * @param[in] evt BT Mesh Stack event + * + * The BT Mesh Configurator event handler shall be called with event provided + * sl_btmesh_pop_event or sl_btmesh_wait_event BT Mesh Stack API functions. + ******************************************************************************/ +void btmesh_conf_on_event(const sl_btmesh_msg_t *evt); + +/***************************************************************************//** + * Process one step of BT Mesh Configurator + * + * The step API shall be called periodically from the main loop of the application. + ******************************************************************************/ +void btmesh_conf_step(void); + +/***************************************************************************//** + * Job status notification callback for lower layers + * + * @param[in] job Reference of the job with changed status + * + * This callback is called when the status of the job changes because its + * execution is ended. The result of the job is provided in the + * @ref btmesh_conf_job_t::result structure member. + * This callback calls btmesh_conf_job_t::on_job_notification with the @p job + * to notify the application. If btmesh_conf_job_t::on_job_notification is NULL + * then the application is not notified. + ******************************************************************************/ +void btmesh_conf_on_job_notification(btmesh_conf_job_t *const job); + +/***************************************************************************//** + * Provides the handle value from Configuration Client events of BT Mesh Stack + * + * @param[in] evt BT Mesh Stack event + * @param[out] handle Handle from configuration client event is stored here + * @returns Status of the handle retrieval from event. + * @retval SL_STATUS_OK If config client handle is retrieved successfully. + * @retval SL_STATUS_NOT_FOUND If the given event is not a config client event. + * @retval SL_STATUS_NULL_POINTER If any of its parameter is a NULL pointer. + ******************************************************************************/ +sl_status_t btmesh_conf_get_handle_from_event(const sl_btmesh_msg_t *evt, + uint32_t *handle); + +/***************************************************************************//** + * Provide the model attributes of the given BT Mesh SIG model ID + * + * @param[in] model_id Model ID for the BT Mesh SIG model + * @param[out] attributes Attributes of the model is stored here + * @returns Status of the get model attributes. + * @retval SL_STATUS_OK If model attributes are provided successfully. + * @retval SL_STATUS_NOT_FOUND If the model ID is unknown. + * @retval SL_STATUS_NULL_POINTER If NULL pointer is given as @ref attributes. + ******************************************************************************/ +sl_status_t btmesh_conf_get_sig_model_attributes(uint16_t model_id, + btmesh_conf_sig_model_attr_bitmask_t *attributes); + +/***************************************************************************//** + * Return string representation of the given BT Mesh SIG model ID + * + * @param[in] model_id Model ID for the BT Mesh SIG model + * @returns String representation of BT Mesh SIG model ID (model name) + * @retval "UnknownSigModel" If the model ID is unknown. + * + * @note This function always returns a valid string which makes it easier to + * use this function with snprintf like functions because those expects valid + * (non-NULL) for %s format specifier. + ******************************************************************************/ +const char *btmesh_conf_sig_model_id_to_string(uint16_t model_id); + +/***************************************************************************//** + * Check if a given BT Mesh Stack event is a configuration client event + * + * @param[in] event_id Identifier of the given BT Mesh Stack event + * @retval true If the event is a configuration client event. + * @retval false If the event is NOT a configuration client event. + ******************************************************************************/ +bool btmesh_conf_is_configuration_event(uint32_t event_id); + +/***************************************************************************//** + * Check if a given log level or other more severe log levels are enabled + * + * @param[in] start_level Least severe log level checked + * @retval true If given log level or other more severe log levels are enabled. + * @retval false If no severe log levels are enabled. + ******************************************************************************/ +bool btmesh_conf_any_severe_log_level(uint8_t start_level); + +/** @} (end addtogroup btmesh_conf) */ + +#ifdef __cplusplus +}; +#endif + +#endif /* BTMESH_CONF_H */ diff --git a/app/btmesh/common_host/btmesh_conf/btmesh_conf_distributor.c b/app/btmesh/common_host/btmesh_conf/btmesh_conf_distributor.c new file mode 100644 index 00000000000..86f8f4b5d07 --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/btmesh_conf_distributor.c @@ -0,0 +1,345 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Configurator Component - Job Distributor + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include + +#include "btmesh_conf.h" +#include "btmesh_conf_distributor.h" +#include "btmesh_conf_executor.h" +#include "sl_slist.h" + +/***************************************************************************//** + * @addtogroup btmesh_conf BT Mesh Configurator Component + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_distributor BT Mesh Configuration Distributor + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_distributor_internal \ + * BT Mesh Configuration Distributor Internal + * @{ + ******************************************************************************/ +/// BT Mesh Configuration Distributor schedule type +typedef enum { + /// Schedule is executed immediately + BTMESH_CONF_SCHEDULE_NORMAL, + /// Schedule is deferred until the next @ref btmesh_conf_step + BTMESH_CONF_SCHEDULE_DEFERRED +} btmesh_conf_schedule_t; + +/***************************************************************************//** + * Schedule one or more waiting @ref btmesh_conf_job for execution on one or + * more idle @ref btmesh_conf_executor. + * + * @param[in] self Pointer to the configuration distributor instance + * @param[in] schedule_type Normal or deferred scheduling + * + * If deferred scheduling type is specified then the scheduling is deferred + * until the next @ref btmesh_conf_step. + * + * The scheduling algorithm does not assign a configuration job to an idle + * executor if another configuration job is in progress with the same server + * address (same target node) so these jobs are skipped because only one BT Mesh + * Stack configuration request can be active with the same server address at any + * given point of time. Therefore, configuration jobs with different server + * addresses can be executed in parallel and configuration jobs with same server + * address are executed in the order of @ref btmesh_conf_distributor_submit_job + * function calls. + ******************************************************************************/ +static void btmesh_conf_distributor_schedule(btmesh_conf_distributor_t *const self, + btmesh_conf_schedule_t schedule_type); + +/***************************************************************************//** + * Start a configuration job on an idle configuration executor + * + * @param[in] self Pointer to the configuration distributor instance + * @param[in] job Configuration job which aggregates the configuration tasks + * @returns + * @retval SL_STATUS_OK Job is started on an executor + * @retval SL_STATUS_NO_MORE_RESOURCE All executors are busy with job execution + * @retval SL_STATUS_IN_PROGRESS Another job is ongoing with the same target node + * @retval SL_STATUS_FAIL Job start failed unexpectedly + ******************************************************************************/ +static sl_status_t btmesh_conf_distributor_start_job(btmesh_conf_distributor_t *const self, + btmesh_conf_job_t *job); + +/** @} (end addtogroup btmesh_conf_distributor_internal) */ + +btmesh_conf_distributor_t *btmesh_conf_distributor_create(uint16_t executor_count) +{ + btmesh_conf_distributor_t* self; + uint16_t idx; + + // Parameter checks: executor count shall be greater than zero + if (0 == executor_count) { + return NULL; + } + + self = malloc(sizeof(btmesh_conf_distributor_t)); + + // If the allocation fails then NULL shall be returned + if (NULL == self) { + return NULL; + } + + // Initialize configuration distributor struct members + self->executor_count = executor_count; + sl_slist_init(&self->waiting_jobs); + self->deferred_schedule_request = false; + + // Allocate an array of pointers to configuration executors. + // This makes it possible to allocate configuration executors with + // btmesh_conf_executor_create function. + // The executor pointer array is allocated with calloc to initialize them to + // NULL to support the deallocation of partially created distributor with + // btmesh_conf_distributor_destroy function if this create function fails. + self->executors = (btmesh_conf_executor_t **) + calloc(self->executor_count, sizeof(btmesh_conf_executor_t *)); + + if (NULL == self->executors) { + // If the allocation of executor pointer array fails then the distributor + // shall destroy itself. + btmesh_conf_distributor_destroy(self); + return NULL; + } + + for (idx = 0; idx < self->executor_count; idx++) { + // Create configuration executor and store the pointer in the array + self->executors[idx] = btmesh_conf_executor_create(idx, self); + if (NULL == self->executors[idx]) { + break; + } + } + + // If at least one executor allocation fails then object creation shall fail + if (idx != self->executor_count) { + // If the allocation of any executor fails then the distributor shall + // destroy itself. + btmesh_conf_distributor_destroy(self); + return NULL; + } + + return self; +} + +void btmesh_conf_distributor_destroy(btmesh_conf_distributor_t* self) +{ + if (NULL == self) { + return; + } + + // Destroy waiting jobs + while (NULL != self->waiting_jobs) { + btmesh_conf_job_t *job = SL_SLIST_ENTRY(sl_slist_pop(&self->waiting_jobs), + btmesh_conf_job_t, + list_elem); + btmesh_conf_job_destroy(job); + } + + if (NULL != self->executors) { + for (uint16_t idx = 0; idx < self->executor_count; idx++) { + // All destroy interfaces shall handle null pointers and it is guaranteed + // by btmesh_conf_distributor_create that all non-allocated pointers in + // the array are set to NULL. + btmesh_conf_executor_destroy(self->executors[idx]); + } + // Deallocate the array of pointers + free(self->executors); + } + // Deallocate the configuration distributor instance itself + free(self); +} + +sl_status_t btmesh_conf_distributor_submit_job(btmesh_conf_distributor_t *const self, + btmesh_conf_job_t* job) +{ + sl_status_t submit_job_status = SL_STATUS_OK; + + if ((NULL == job) || (NULL == job->task_tree)) { + submit_job_status = SL_STATUS_NULL_POINTER; + } else if (BTMESH_CONF_JOB_RESULT_UNKNOWN != job->result) { + // The job was already executed + submit_job_status = SL_STATUS_INVALID_PARAMETER; + } else { + // Add configuration job to the wait queue + sl_slist_push_back(&self->waiting_jobs, + &job->list_elem); + btmesh_conf_distributor_schedule(self, BTMESH_CONF_SCHEDULE_DEFERRED); + } + return submit_job_status; +} + +void btmesh_conf_distributor_on_job_notification(btmesh_conf_distributor_t *const self, + btmesh_conf_executor_t *const executor, + btmesh_conf_job_t *const job) +{ + // Notify the upper layer about the changed job status + btmesh_conf_on_job_notification(job); + + // The configuration executor has just become idle so schedule is called to + // start the execution of a waiting job + btmesh_conf_distributor_schedule(self, BTMESH_CONF_SCHEDULE_NORMAL); +} + +void btmesh_conf_distributor_on_event(btmesh_conf_distributor_t *const self, + const sl_btmesh_msg_t *evt) +{ + // Forward BT Mesh stack event to configuration executors + for (uint16_t idx = 0; idx < self->executor_count; idx++) { + btmesh_conf_executor_on_event(self->executors[idx], evt); + } +} + +void btmesh_conf_distributor_step(btmesh_conf_distributor_t *const self) +{ + // Deferred scheduling request is executed in the cyclic step function + if (false != self->deferred_schedule_request) { + btmesh_conf_distributor_schedule(self, BTMESH_CONF_SCHEDULE_NORMAL); + } +} + +/***************************************************************************//** + * @addtogroup btmesh_conf_distributor_internal \ + * BT Mesh Configuration Distributor Internal + * @{ + ******************************************************************************/ +static sl_status_t btmesh_conf_distributor_start_job(btmesh_conf_distributor_t *const self, + btmesh_conf_job_t *job) +{ + btmesh_conf_executor_t *idle_executor = NULL; + sl_status_t sc = SL_STATUS_OK; + + for (uint16_t exec_idx = 0; exec_idx < self->executor_count; exec_idx++) { + btmesh_conf_executor_status_t executor_status; + + // Note: self->executors is an array of pointers to struct therefore the + // address of (&) operator should not be used here + btmesh_conf_executor_get_status(self->executors[exec_idx], &executor_status); + + if ((BTMESH_CONF_EXEC_STATE_IDLE == executor_status.state) + && (NULL == idle_executor)) { + // First idle configuration executor is found + idle_executor = self->executors[exec_idx]; + } else { + if ((executor_status.enc_netkey_index == job->enc_netkey_index) + && (executor_status.server_address == job->server_address)) { + // Only one configuration job with the same target node can be active at + // any given point of time however others can be in waiting state. + sc = SL_STATUS_IN_PROGRESS; + break; + } + } + } + + if (SL_STATUS_OK == sc) { + if (NULL == idle_executor) { + // All executors are busy with another job + sc = SL_STATUS_NO_MORE_RESOURCE; + } else { + sc = btmesh_conf_executor_start_job(idle_executor, job); + } + } + return sc; +} + +static void btmesh_conf_distributor_schedule(btmesh_conf_distributor_t *const self, + btmesh_conf_schedule_t schedule_type) +{ + if (BTMESH_CONF_SCHEDULE_DEFERRED == schedule_type) { + self->deferred_schedule_request = true; + } else { + sl_status_t start_job_status; + sl_slist_node_t **next_ptr_of_prev_list_elem = &self->waiting_jobs; + + // Deferred schedule request is accepted when normal scheduling is performed + self->deferred_schedule_request = false; + + // The first job in the waiting jobs queue is the one which is referenced + // by the waiting_jobs pointer (linked list head) + btmesh_conf_job_t *job = SL_SLIST_ENTRY(self->waiting_jobs, + btmesh_conf_job_t, + list_elem); + while (NULL != job) { + // If a job is removed from the wait queue (linked list) with sl_slist_pop + // then it is no longer possible to retrieve the next job because + // sl_slist_pop sets the next pointer of the job to NULL and consequently + // the next job is calculated at the beginning of each iteration. + btmesh_conf_job_t *next_job = SL_SLIST_ENTRY(job->list_elem.node, + btmesh_conf_job_t, + list_elem); + + start_job_status = btmesh_conf_distributor_start_job(self, job); + + if (SL_STATUS_OK == start_job_status) { + // In order to remove a job from the linked list the previous element + // of the linked list (or the head) shall be stored because this way the + // current job can be removed by sl_slist_pop which assigns simply the + // pointer of the previous element to the next element of linked list. + // Note: In case of sl_slist the elements and the head have the same type + // which makes the implementation more simple. + // The prev_list_elem is not modified because it remains the same + // due to the removal of the current element. + sl_slist_pop(next_ptr_of_prev_list_elem); + } else if (SL_STATUS_NO_MORE_RESOURCE == start_job_status) { + break; // All executors are busy with configuration jobs so stop scheduling + } else if (SL_STATUS_IN_PROGRESS == start_job_status) { + // Only one configuration job with the same target node can be active at + // any given point of time however others can be in waiting state so the + // iteration shall be continued. + next_ptr_of_prev_list_elem = &job->list_elem.node; + } else { + // The whole job is failed (all requests in job have failed in sequence) + // so the job shall be removed from the queue and the notification shall + // be triggered to notify the higher layers about the failure. + // The notification is not triggered by the executor because it was not + // possible to start the job at all consequently the ownership transfer + // to the specific executor is not completed because the job is still in + // the wait queue. + // Note: In order to remove the job from the queue the previous element + // of the linked list is stored. Therefore the job is removed with + // a simple pop operation from the list. (O(1) operation) + // The previous list element is not modified because it remains + // the same due to the removal of the current element. + sl_slist_pop(next_ptr_of_prev_list_elem); + btmesh_conf_on_job_notification(job); + } + // The iteration is continued with the next job in the wait queue + job = next_job; + } + } +} + +/** @} (end addtogroup btmesh_conf_distributor_internal) */ +/** @} (end addtogroup btmesh_conf_distributor) */ +/** @} (end addtogroup btmesh_conf) */ diff --git a/app/btmesh/common_host/btmesh_conf/btmesh_conf_distributor.h b/app/btmesh/common_host/btmesh_conf/btmesh_conf_distributor.h new file mode 100644 index 00000000000..e7cfbbd537e --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/btmesh_conf_distributor.h @@ -0,0 +1,192 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Configurator Component - Job Distributor + ******************************************************************************* + * # License + * Copyright 2021 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 BTMESH_CONF_DISTRIBUTOR_H +#define BTMESH_CONF_DISTRIBUTOR_H + +#include "sl_slist.h" +#include "btmesh_conf_types.h" +#include "btmesh_conf_executor.h" +#include "btmesh_conf_job.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/***************************************************************************//** + * @addtogroup btmesh_conf BT Mesh Configurator Component + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_distributor BT Mesh Configuration Distributor + * @brief BT Mesh Configuration Distributor supports the parallel execution of + * multiple configuration jobs by distributing the jobs between executors. + * + * BT Mesh Configuration Distributor instance is created by calling the + * @ref btmesh_conf_distributor_create function. + * The specified number (@p executor_count) of @ref btmesh_conf_executor instances + * are created which are assigned to the created distributor instance (composition). + * + * BT Mesh Configuration jobs can be submitted to configuration distributor + * with @ref btmesh_conf_distributor_submit_job function which stores the job in + * a wait queue. + * + * The configuration jobs are assigned to executors from the wait queue during + * distributor scheduling process. The BT Mesh Stack does not support parallel + * execution of two configuration job with the same server address. + * Therefore, the scheduling process guarantees that the configuration jobs with + * the same server addresses are executed one-by-one in the order of submission + * however jobs with different server addresses might be executed in parallel. + * + * The configuration executors report the job status through + * @ref btmesh_conf_distributor_on_job_notification function. + * + * @note The BT Mesh Stack does not allow the parallel execution of two + * configuration requests with the same server address (primary element). + * The limitation is added to the BT Mesh Stack because the configuration + * messages don't contain any transaction identifier in accordance with BT Mesh + * Profile specification so the status messages could not be differentiated. + * + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @brief BT Mesh Configuration Distributor supports the parallel execution of + * multiple configuration jobs by distributing the jobs between executors. + ******************************************************************************/ +struct btmesh_conf_distributor_t { + /// List of waiting jobs + sl_slist_node_t *waiting_jobs; + /// Number of @ref btmesh_conf_executor which belongs to this distributor. + uint16_t executor_count; + /// @brief Array of @ref btmesh_conf_executor references. + /// @n Array of pointers are used in order to make it possible to allocate the + /// executor instances by calling the @ref btmesh_conf_executor_create function. + btmesh_conf_executor_t **executors; + /// @brief Deferred schedule request flag is set when new configuration jobs + /// are submitted in order to indicate the @ref btmesh_conf_distributor_step + /// shall schedule the waiting jobs. + bool deferred_schedule_request; +}; + +/***************************************************************************//** + * Create BT Mesh Configuration Distributor instance with the specified number + * of configuration executors. + * + * @param[in] executor_count Number of configuration executors which shall be + * created and added to this distributor instance. + * @returns Created configuration distributor. + * @retval NULL If the configuration distributor creation fails. + ******************************************************************************/ +btmesh_conf_distributor_t *btmesh_conf_distributor_create(uint16_t executor_count); + +/***************************************************************************//** + * Deallocate the BT Mesh Configuration Distributor instance + * + * @param[in] self Pointer to configuration distributor which shall be destroyed + ******************************************************************************/ +void btmesh_conf_distributor_destroy(btmesh_conf_distributor_t *const self); + +/***************************************************************************//** + * Submit a configuration job for execution + * + * @param[in] self Pointer to the configuration distributor instance + * @param[in] job Configuration job which aggregates the configuration tasks + * @returns Status of the job submission. + * @retval SL_STATUS_OK If the job is submitted successfully. + * + * BT Mesh Configuration Distributor appends the submitted configuration job + * to the wait queue and requests a deferred scheduling in order to assign the + * job to an idle @ref btmesh_conf_executor. If all executors are busy then + * the configuration job remains in the wait queue until an executor transitions + * to idle state and there is no previously submitted configuration jobs which + * can be started. + * + * It is important to note that a configuration job might be executed sooner + * than another configuration job which was submitted earlier if the latter + * configurator job can't be started because one executor runs a third + * configuration job with the same server address. + * + * If the execution of a configuration job is finished then the configuration + * executor calls the @ref btmesh_conf_distributor_on_job_notification to notify + * the distributor. + ******************************************************************************/ +sl_status_t btmesh_conf_distributor_submit_job(btmesh_conf_distributor_t *const self, + btmesh_conf_job_t *job); + +/***************************************************************************//** + * BT Mesh Configuration Distributor job status notification callback for + * @ref btmesh_conf_executor + * + * @param[in] self Pointer to the configuration distributor instance + * @param[in] executor Pointer to the executor which ran the configuration job + * @param[in] job Pointer to the job with changed status + * + * This callback is called when the status of the job changes because its + * execution is ended. + ******************************************************************************/ +void btmesh_conf_distributor_on_job_notification(btmesh_conf_distributor_t *const self, + btmesh_conf_executor_t *const executor, + btmesh_conf_job_t *const job); + +/***************************************************************************//** + * Event handler of BT Mesh Configuration Distributor instance + * + * @param[in] self Pointer to the configuration distributor instance + * @param[in] evt BT Mesh Stack event + * + * BT Mesh Configuration Distributor forwards the BT Mesh Stack events to all + * of its @ref btmesh_conf_executor instances by calling the + * @ref btmesh_conf_executor_on_event function with each configuration executor + * instance. + ******************************************************************************/ +void btmesh_conf_distributor_on_event(btmesh_conf_distributor_t *const self, + const sl_btmesh_msg_t *evt); + +/***************************************************************************//** + * Process one step of BT Mesh Configurator + * + * @param[in] self Pointer to the configuration distributor instance + * + * The step function shall be called periodically by higher layer to perform + * deferred scheduling. + ******************************************************************************/ +void btmesh_conf_distributor_step(btmesh_conf_distributor_t *const self); + +/** @} (end addtogroup btmesh_conf_distributor) */ +/** @} (end addtogroup btmesh_conf) */ + +#ifdef __cplusplus +}; +#endif + +#endif /* BTMESH_CONF_DISTRIBUTOR_H */ diff --git a/app/btmesh/common_host/btmesh_conf/btmesh_conf_executor.c b/app/btmesh/common_host/btmesh_conf/btmesh_conf_executor.c new file mode 100644 index 00000000000..8d65918e135 --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/btmesh_conf_executor.c @@ -0,0 +1,790 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Configurator Component - Job Executor + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "app_assert.h" +#include "app_log.h" + +#include "btmesh_conf.h" +#include "btmesh_conf_types.h" +#include "btmesh_conf_config.h" +#include "btmesh_conf_executor.h" +#include "btmesh_conf_distributor.h" + +/***************************************************************************//** + * @addtogroup btmesh_conf BT Mesh Configurator Component + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_executor BT Mesh Configuration Executor + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_executor_internal \ + * BT Mesh Configuration Executor Internal + * @{ + ******************************************************************************/ +/// Local log new line shortcut definition +#define NL APP_LOG_NL + +/// BT Mesh Configuration Executor notification status +typedef enum { + BTMESH_CONF_NOTIFICATION_ENABLE, ///< Jobs status notification is enabled + BTMESH_CONF_NOTIFICATION_DISABLE, ///< Jobs status notification is disabled +} btmesh_conf_notification_status_t; + +/***************************************************************************//** + * Send configuration request to destination node. + * + * @param[in] self Pointer to the configuration executor instance + * @param[in] notification_status Job status notification is enabled or disabled + * @returns Status of the configuration request. + * @retval SL_STATUS_OK Configuration request is accepted. + * @retval SL_STATUS_BUSY Request is rejected due to busy lower layers. + * @retval SL_STATUS_FAIL Requests are rejected due to unrecoverable error. + * Multiple task request could fail here. If one task request fails then the + * next task is set until one task request is not failed or the last task fails. + * + * The current configuration task specific configuration request is sent to the + * configuration server model on the primary element of destination node. + * + * If the btmesh_conf_task_t::conf_request is successful (SL_STATUS_OK) then + * an event timeout timer is started to detect missing events. This is extremely + * rare but the state machine would be stuck in case of missing events without + * this safety net. + * + * If the btmesh_conf_task_t::conf_request is rejected due to busy lower layers + * (SL_STATUS_BUSY) and the maximum number of retries is not reached then a timer + * is started with retry interval in order to try to send the configuration + * request again. + * The BT Mesh Stack can be busy due to unavailable resources for example when + * the maximum number of segmented TX messages is reached. + * See @a SL_BTMESH_CONFIG_MAX_SEND_SEGS and @a SL_BTMESH_CONFIG_APP_TXQ_SIZE + * BT Mesh Stack configuration defines in sl_btmesh_config.h. + * + * If the btmesh_conf_task_t::conf_request is rejected due unrecoverable error + * (SL_STATUS_FAIL) then the next configuration task is selected and the + * btmesh_conf_task_t::conf_request of next task is called and this procedure is + * repeated until the btmesh_conf_task_t::conf_request doesn't fail or the last + * task fails. + ******************************************************************************/ +static sl_status_t executor_conf_request(btmesh_conf_executor_t *const self, + btmesh_conf_notification_status_t notification_status); + +/***************************************************************************//** + * Process the status of configuration task event handler. + * + * @param[in] self Pointer to the configuration executor instance + * @param[in] task_status Status of configuration task event handler + * + * The status of configuration task is returned by btmesh_conf_task_t::on_event. + * + * If the configuration task is successful (SL_STATUS_OK) then the executor sets + * the next configuration task and calls @ref executor_conf_request in order + * to send the configuration request to the destination node. + * + * If the configuration task fails due to server side error (SL_STATUS_FAIL) or + * due to unexpected critical error (SL_STATUS_ABORT) then the executor sets the + * next configuration task and calls @ref executor_conf_request in order + * to send the configuration request to the destination node. + * In case of SL_STATUS_ABORT the configuration request is canceled first + * because the it is still in progress. + * + * If configuration task timeout occurs (SL_STATUS_TIMEOUT) and the maximum + * number of retries is not reached then configuration request is sent to the + * destination node by @ref executor_conf_request function call. + * If the maximum number of retries is reached then the current configuration + * task fails and the executor sets the next configuration task and calls + * @ref executor_conf_request in order to send the configuration request to the + * destination node. + * + * If the configuration task is in progress (SL_STATUS_IN_PROGRESS) then the + * task is waiting for additional events so no operation is required. + * + * @note The next configuration task is set by @ref btmesh_conf_job_set_next_task + * based on the result of the current configuration task. If the current task + * is the last task then @ref executor_finish_job is called to transition into + * idle state and to notify the configuration distributor. + ******************************************************************************/ +static void executor_process_task_status(btmesh_conf_executor_t *const self, + sl_status_t task_status); + +/***************************************************************************//** + * Set next BT Mesh configuration task based on the current active task of a job + * + * @param[in] self Pointer to the configuration executor instance + * @return Status of the next task setup + * @retval SL_STATUS_OK If next task is set properly. + * @retval SL_STATUS_NOT_FOUND If next is not set because this was the last task. + * @retval SL_STATUS_FAIL If fatal error occurred. + ******************************************************************************/ +static sl_status_t executor_set_next_task(btmesh_conf_executor_t *const self); + +/***************************************************************************//** + * Transition BT Mesh Configuration Executor to idle state and notify + * configuration distributor about the finished configuration job. + * + * @param[in] self Pointer to the configuration executor instance + * @param[in] job_result Result of BT Mesh Configuration job + * @param[in] notification_status Job status notification is enabled or disabled + * + * The configuration distributor is notified only if @p notification_status is + * set to @p BTMESH_CONF_NOTIFICATION_ENABLE. + ******************************************************************************/ +static void executor_finish_job(btmesh_conf_executor_t *const self, + btmesh_conf_job_result_t job_result, + btmesh_conf_notification_status_t notification_status); + +/***************************************************************************//** + * Execute state transition of BT Mesh Configuration Executor instance + * + * @param[in] self Pointer to the configuration executor instance + * @param[in] target_state Target state of the state transition + * + * State transition has three steps: + * - Exit action of source state + * - Transition action + * - Entry action of target state + * @note If source and target state of the transition is the same then the + * implementation considers it a self-transition and executes the exit and + * entry action of that state. + * + * The state transition function controls timeout and retry interval measurement. + * The lifecycle of each timer is bound to a state in order to guarantee: + * - Only one timer runs at any given point of time and therefore the timer + * structure in @ref btmesh_conf_executor_t can be shared. + * - Running timer is stopped when the current state is left. + * The retry counters are cleared at the beginning of each configuration task + * because each configuration task has the same amount of retry opportunities. + ******************************************************************************/ +static void executor_state_transition(btmesh_conf_executor_t *const self, + btmesh_conf_executor_state_t target_state); + +/***************************************************************************//** + * Provide string representation of BT Mesh Configuration Executor state. + * + * @param[in] state Configuration executor state + * @returns String representation of configuration executor state. + * @retval "unknown" If the state parameter contains invalid value. + ******************************************************************************/ +const char *executor_state_to_string(btmesh_conf_executor_state_t state) +{ + switch (state) { + case BTMESH_CONF_EXEC_STATE_IDLE: + return "idle"; + case BTMESH_CONF_EXEC_STATE_TASK_SET: + return "task set"; + case BTMESH_CONF_EXEC_STATE_TASK_EVENT_WAIT: + return "event wait"; + case BTMESH_CONF_EXEC_STATE_TASK_REQUEST_BUSY: + return "request busy"; + default: + return "invalid"; + } +} + +/***************************************************************************//** + * Callback which is called when the executor timer elapses + * + * @param[in] timer Pointer to the elapsed timer instance + * @param[in] data Pointer to the configuration executor instance + ******************************************************************************/ +static void executor_on_timer_elapsed(sl_simple_timer_t *timer, void *data); + +/***************************************************************************//** + * Provide information about retry occurrence during the execution of current + * configuration task. + * + * @param[in] self Pointer to the configuration executor instance + * @returns Retry occurrence during the execution of current configuration task. + * @retval true If at least one retry occurred during task execution. + * @retval false If no retry occurred during task execution. + ******************************************************************************/ +static inline bool executor_retry_occurred(btmesh_conf_executor_t *const self) +{ + return (0 < self->local_retry_counter) + || (0 < self->communication_retry_counter); +} + +/** @} (end addtogroup btmesh_conf_executor_internal) */ + +btmesh_conf_executor_t *btmesh_conf_executor_create(uint16_t id, + btmesh_conf_distributor_t *const parent) +{ + btmesh_conf_executor_t *self; + + if (NULL == parent) { + // If the parent parameter is NULL then the configuration executor creation + // fails and therefore NULL is returned to the caller. + return NULL; + } + + self = malloc(sizeof(btmesh_conf_executor_t)); + + if (NULL != self) { + self->id = id; + self->parent = parent; + self->state = BTMESH_CONF_EXEC_STATE_IDLE; + self->current_job = NULL; + self->local_retry_counter = 0; + self->local_retry_max = SL_BTMESH_CONF_REQUEST_BUSY_RETRY_MAX_CFG_VAL; + self->communication_retry_counter = 0; + self->communication_retry_max = SL_BTMESH_CONF_COMMUNICATION_RETRY_MAX_CFG_VAL; + self->timer_active = false; + } + return self; +} + +void btmesh_conf_executor_destroy(btmesh_conf_executor_t* self) +{ + // Destroy function shall behave as free if NULL pointer is passed + if (NULL == self) { + return; + } + if (BTMESH_CONF_EXEC_STATE_IDLE != self->state) { + // Configuration executor shall transition to idle state in order to + // stop the timer. + // Note: If the timer was not stopped then the timer callback would use a + // pointer to an already deallocated configuration executor instance. + executor_state_transition(self, BTMESH_CONF_EXEC_STATE_IDLE); + btmesh_conf_job_destroy(self->current_job); + } + free(self); +} + +sl_status_t btmesh_conf_executor_start_job(btmesh_conf_executor_t *const self, + btmesh_conf_job_t *job) +{ + app_assert_s(NULL != self); + app_assert_s(NULL != job); + + sl_status_t sc = SL_STATUS_INVALID_STATE; + + if (BTMESH_CONF_EXEC_STATE_IDLE == self->state) { + self->current_job = job; + sc = executor_set_next_task(self); + if (SL_STATUS_OK == sc) { + // Notifications are not allowed to avoid destroying the job before + // it is removed from the distributor wait queue during scheduling + sc = executor_conf_request(self, BTMESH_CONF_NOTIFICATION_DISABLE); + // If the status of configuration request is busy then it means that the + // BT Mesh stack was not able to accept the request temporarily but the + // executor will try again when the retry time elapses. + // Therefore, the configuration job start is considered to be successful. + sc = (SL_STATUS_BUSY == sc) ? SL_STATUS_OK : sc; + } else { + // The configuration task which shall be executed first could not be set + sc = SL_STATUS_NOT_FOUND; + } + } + return sc; +} + +void btmesh_conf_executor_get_status(btmesh_conf_executor_t *const self, + btmesh_conf_executor_status_t *status) +{ + app_assert_s(NULL != self); + app_assert_s(NULL != status); + + status->state = self->state; + if (BTMESH_CONF_EXEC_STATE_IDLE == self->state) { + status->enc_netkey_index = BTMESH_CONF_NETKEY_INDEX_UNASSIGNED; + status->server_address = MESH_ADDR_UNASSIGNED; + } else { + status->enc_netkey_index = self->current_job->enc_netkey_index; + status->server_address = self->current_job->server_address; + } +} + +void btmesh_conf_executor_on_event(btmesh_conf_executor_t *const self, + const sl_btmesh_msg_t *evt) +{ + uint32_t handle; + + if (BTMESH_CONF_EXEC_STATE_TASK_EVENT_WAIT == self->state) { + sl_status_t handle_status = btmesh_conf_get_handle_from_event(evt, &handle); + + // The configuration events shall be forwarded if the handle in the event + // is the same as the handle in the executor. The executor shall ignore + // events which belong to parallel configuration of other nodes. + // Note: other executors with configuration job targeting different config + // server might be active as well. + // Non-configuration events are always forwareded + bool forward_event = ((SL_STATUS_OK == handle_status) + && (handle == self->handle)) + || (SL_STATUS_NOT_FOUND == handle_status); + + if (false != forward_event) { + sl_status_t task_status; + btmesh_conf_job_t *job = self->current_job; + // Forward the BT Mesh Stack event with matching handle to the event + // handler of the current configuration task. + task_status = job->current_task->on_event(job->current_task, + job->enc_netkey_index, + job->server_address, + evt); + // Process the status of the current task after it handled this new + // BT Mesh Stack event + executor_process_task_status(self, task_status); + } + } +} + +/***************************************************************************//** + * @addtogroup btmesh_conf_executor_internal \ + * BT Mesh Configuration Executor Internal + * @{ + ******************************************************************************/ +static sl_status_t executor_conf_request(btmesh_conf_executor_t *const self, + btmesh_conf_notification_status_t notification_status) +{ + sl_status_t conf_request_status, set_next_task_status; + btmesh_conf_job_t *job = self->current_job; + bool conf_request_required = true; + bool current_task_failed = false; + char task_str[SL_BTMESH_CONF_MAX_LOG_MSG_FRAGMENT_SIZE_CFG_VAL]; + char node_str[SL_BTMESH_CONF_MAX_LOG_MSG_FRAGMENT_SIZE_CFG_VAL]; + + // Loop is necessary because it is possible that BT Mesh Stack configuration + // request of the current task fails. If a configuration request fails with + // unrecoverable error then there are two possibilities: + // - If the negative branch (next_on_failure) of the current task + // (in task_tree) is NULL then there is no task which could be executed + // - If the negative branch (next_on_failure) of the current task + // (in task_tree) references another configuration task then it is set + // as the current task and the loop body is executed again. + // Note: In the worst case if there is a general error then multiple task in + // series can fail and whole job ends in this function call. + // For example if there is no node with given server address in device + // database and therefore it is not possible to retrieve the device key. + while (false != conf_request_required) { + // Call the configuration task specific BT Mesh Stack configuration request. + // Handle returned by the BT Mesh Stack is stored by the executor in order + // to forward configuration events with matching handle to the task in + // the btmesh_conf_executor_on_event function. + conf_request_status = job->current_task->conf_request(job->current_task, + job->enc_netkey_index, + job->server_address, + &self->handle); + + // If any log level is enabled which is used in this function then it is + // necessary to build the log message fragments. + if (btmesh_conf_any_severe_log_level(APP_LOG_LEVEL_INFO)) { + int32_t str_retval; + // Get the string representation of the current configuration task + str_retval = job->current_task->to_string(job->current_task, + &task_str[0], + sizeof(task_str)); + app_assert(0 <= str_retval, "String formatting failed." NL); + + // Build log message fragment with node information + str_retval = snprintf(node_str, + sizeof(node_str), + "node (netkey_idx=%d,addr=0x%04x,handle=0x%08lx)", + job->enc_netkey_index, + job->server_address, + (unsigned long)self->handle); + app_assert(0 <= str_retval, "String formatting failed." NL); + } + + // Defensive programming: make sure that the string is null terminated + task_str[sizeof(task_str) - 1] = '\0'; + node_str[sizeof(node_str) - 1] = '\0'; + + switch (conf_request_status) { + case SL_STATUS_OK: + // Configuration request is successful so the configuration task shall + // wait for the results (BT Mesh Stack event). + app_log_level(executor_retry_occurred(self) + ? APP_LOG_LEVEL_WARNING + : APP_LOG_LEVEL_INFO, + "Task %s request%s to %s is sent." NL, + task_str, + executor_retry_occurred(self) ? " (retry)" : "", + node_str); + executor_state_transition(self, BTMESH_CONF_EXEC_STATE_TASK_EVENT_WAIT); + conf_request_required = false; + break; + case SL_STATUS_BUSY: + // Configuration request is busy which indicates that some resources in + // the BT Mesh Stack are not available temporarily so the configuration + // request shall be repeated later (retry). + if (self->local_retry_counter < self->local_retry_max) { + app_log_warning("Task %s request%s to %s is busy (result=0x%04lx)." NL, + task_str, + executor_retry_occurred(self) ? " (retry)" : "", + node_str, + (unsigned long) job->current_task->result); + self->local_retry_counter++; + executor_state_transition(self, BTMESH_CONF_EXEC_STATE_TASK_REQUEST_BUSY); + conf_request_required = false; + } else { + app_log_error("Task %s request%s to %s is failed (result=0x%04lx) " + "because too many configuration requests were busy." NL, + task_str, + executor_retry_occurred(self) ? " (retry)" : "", + node_str, + (unsigned long)job->current_task->result); + current_task_failed = true; + } + break; + default: + // Unrecoverable task failure + app_log_error("Task %s request%s to %s is failed (result=0x%04lx)." NL, + task_str, + executor_retry_occurred(self) ? " (retry)" : "", + node_str, + (unsigned long)job->current_task->result); + current_task_failed = true; + break; + } + + if (false != current_task_failed) { + // The negative branch (next_on_failure) of the current task shall be + // set as the current task in the configuration job. + set_next_task_status = executor_set_next_task(self); + self->current_job->result = BTMESH_CONF_JOB_RESULT_FAIL; + if (SL_STATUS_OK != set_next_task_status) { + // If there is no further configuration task in the task_tree which + // can be executed then the whole job fails. + executor_finish_job(self, + BTMESH_CONF_JOB_RESULT_FAIL, + notification_status); + conf_request_required = false; + } + } + } + + return conf_request_status; +} + +static void executor_process_task_status(btmesh_conf_executor_t *const self, + sl_status_t task_status) +{ + bool current_task_finished = true; + bool retry_required = false; + btmesh_conf_job_t *job = self->current_job; + char task_str[SL_BTMESH_CONF_MAX_LOG_MSG_FRAGMENT_SIZE_CFG_VAL]; + char node_str[SL_BTMESH_CONF_MAX_LOG_MSG_FRAGMENT_SIZE_CFG_VAL]; + + // If any log level is enabled which is used in this function then it is + // necessary to build the log message fragments. + if (btmesh_conf_any_severe_log_level(APP_LOG_LEVEL_INFO)) { + int32_t str_retval; + // Get the string representation of the current configuration task + str_retval = job->current_task->to_string(job->current_task, + &task_str[0], + sizeof(task_str)); + app_assert(0 < str_retval, "String formatting failed." NL); + + // Build log message fragment with node information + str_retval = snprintf(node_str, + sizeof(node_str), + "node (netkey_idx=%d,addr=0x%04x,handle=0x%08lx)", + job->enc_netkey_index, + job->server_address, + (unsigned long)self->handle); + app_assert(0 < str_retval, "String formatting failed." NL); + } + // Defensive programming: make sure that the string is null terminated + task_str[sizeof(task_str) - 1] = '\0'; + node_str[sizeof(node_str) - 1] = '\0'; + + switch (task_status) { + case SL_STATUS_OK: + { + // The configuration task is finished successfully + app_log_info("Task %s of %s is completed successfully." NL, + task_str, + node_str); + current_task_finished = true; + break; + } + + case SL_STATUS_IN_PROGRESS: + { + // Task is waiting for additional events so nothing shall be done here. + current_task_finished = false; + break; + } + + case SL_STATUS_TIMEOUT: + { + // Configuration request in the BT Mesh Stack triggers message transmission + // to the configuration server which responds with a status message to the + // configuration client. If any of these messages are lost then the + // configuration request timeout occurs in the BT Mesh Stack. + // Note: BT Mesh Stack sends the acknowledged configuration messages which + // is more robust but even these messages might be lost. + if (self->communication_retry_counter < self->communication_retry_max) { + // In order to make the configuration procedure more robust the + // configuration requests are repeated a configurable amount of times. + // Note: it is possible that the node is not available because it was + // removed or turned off so it does not make sense to retry forever. + self->communication_retry_counter++; + retry_required = true; + current_task_finished = false; + } else { + // The maximum number of retries are exceeded so the task is failed + app_log_error("Task %s of %s is timed out (result=0x%04lx)." NL, + task_str, + node_str, + (unsigned long) job->current_task->result); + self->current_job->result = BTMESH_CONF_JOB_RESULT_FAIL; + current_task_finished = true; + } + break; + } + + case SL_STATUS_FAIL: + { + // Error occurred because configuration server rejected the configuration + // request and responded to the configuration client with status message + // with non-zero error status. + app_log_error("Task %s of %s is failed (result=0x%04lx)." NL, + task_str, + node_str, + (unsigned long) job->current_task->result); + self->current_job->result = BTMESH_CONF_JOB_RESULT_FAIL; + current_task_finished = true; + break; + } + + case SL_STATUS_ABORT: + { + // Local error occurred in the configuration task during the BT Mesh Stack + // event processing and the execution of the current task shall be aborted. + app_log_error("Task %s of %s is aborted (result=0x%04lx)." NL, + task_str, + node_str, + (unsigned long)job->current_task->result); + // Cancel the configuration request in the BT Mesh stack to make sure the + // next configuration task won't be rejected because the current one is + // considered active in the BT Mesh Stack. + sl_status_t cancel_req_status = + sl_btmesh_config_client_cancel_request(self->handle); + app_log_status_warning_f(cancel_req_status, + "Task %s request cancellation of %s is failed." NL, + task_str, + node_str); + self->current_job->result = BTMESH_CONF_JOB_RESULT_FAIL; + current_task_finished = true; + break; + } + } + + if (false != retry_required) { + // It is not necessary to check the return value because the function handles + // the errors and the error code can't be returned to any SW modules + (void) executor_conf_request(self, BTMESH_CONF_NOTIFICATION_ENABLE); + } else if (false != current_task_finished) { + sl_status_t next_task_status = executor_set_next_task(self); + if (SL_STATUS_OK == next_task_status) { + // It is not necessary to check the return value because the function handles + // the errors and the error code can't be returned to any SW modules + (void) executor_conf_request(self, BTMESH_CONF_NOTIFICATION_ENABLE); + } else if (SL_STATUS_NOT_FOUND == next_task_status) { + btmesh_conf_job_result_t job_result = self->current_job->result; + // The last task of job is finished. If the job result was not set to + // failure by any task then the job shall be considered successful + if (BTMESH_CONF_JOB_RESULT_UNKNOWN == job_result) { + job_result = BTMESH_CONF_JOB_RESULT_SUCCESS; + } + executor_finish_job(self, job_result, BTMESH_CONF_NOTIFICATION_ENABLE); + } else { + // Critical error occurred during the setup of the next task + executor_finish_job(self, + BTMESH_CONF_JOB_RESULT_CRITICAL_ERROR, + BTMESH_CONF_NOTIFICATION_ENABLE); + } + } +} + +static sl_status_t executor_set_next_task(btmesh_conf_executor_t *const self) +{ + sl_status_t next_task_status = btmesh_conf_job_set_next_task(self->current_job); + if (SL_STATUS_OK == next_task_status) { + executor_state_transition(self, BTMESH_CONF_EXEC_STATE_TASK_SET); + } + return next_task_status; +} + +static void executor_finish_job(btmesh_conf_executor_t *const self, + btmesh_conf_job_result_t job_result, + btmesh_conf_notification_status_t notification_status) +{ + // The configuration executor shall transition to idle state before it notifies + // the configuration distributor in order to make it possible to start a new + // configuration job. Configuration distributor assumes if the job execution + // is ended then it is able to schedule new configuration job. + btmesh_conf_job_t *finished_job = self->current_job; + self->current_job->result = job_result; + self->current_job = NULL; + self->local_retry_counter = 0; + self->communication_retry_counter = 0; + executor_state_transition(self, BTMESH_CONF_EXEC_STATE_IDLE); + if (BTMESH_CONF_NOTIFICATION_ENABLE == notification_status) { + btmesh_conf_distributor_on_job_notification(self->parent, + self, + finished_job); + } +} + +static void executor_state_transition(btmesh_conf_executor_t *const self, + btmesh_conf_executor_state_t target_state) +{ + app_assert(target_state < BTMESH_CONF_EXEC_STATE_COUNT, + "Invalid configuration executor state." NL); + btmesh_conf_executor_state_t source_state = self->state; + + switch (source_state) { + case BTMESH_CONF_EXEC_STATE_TASK_REQUEST_BUSY: + if (false != self->timer_active) { + app_log_debug("BT Mesh Config Executor (id=%d) stops " + "request busy retry timer." NL, + self->id); + sl_status_t sc = sl_simple_timer_stop(&self->timer); + app_assert_status_f(sc, "Failed to stop btmesh_conf_executor timer." NL); + self->timer_active = false; + } + break; + + case BTMESH_CONF_EXEC_STATE_TASK_EVENT_WAIT: + if (false != self->timer_active) { + app_log_debug("BT Mesh Config Executor (id=%d) stops " + "waiting for event timeout timer." NL, + self->id); + sl_status_t sc = sl_simple_timer_stop(&self->timer); + app_assert_status_f(sc, "Failed to stop btmesh_conf_executor timer." NL); + self->timer_active = false; + } + break; + + default: + break; + } + + self->state = target_state; + app_log_debug("BT Mesh Config Executor (id=%d) state transition to \"%s\"." NL, + self->id, + executor_state_to_string(target_state)); + + switch (target_state) { + case BTMESH_CONF_EXEC_STATE_TASK_SET: + // The retry counters are cleared because each configuration task has the + // same number of retry opportunities. + self->local_retry_counter = 0; + self->communication_retry_counter = 0; + break; + + case BTMESH_CONF_EXEC_STATE_TASK_REQUEST_BUSY: + { + sl_status_t sc; + app_log_debug("BT Mesh Config Executor (id=%d) starts " + "request busy retry timer." NL, + self->id); + sc = sl_simple_timer_start(&self->timer, + SL_BTMESH_CONF_REQUEST_BUSY_RETRY_INTERVAL_MS_CFG_VAL, + executor_on_timer_elapsed, + self, + false); + app_assert_status_f(sc, "Failed to start btmesh_conf_executor timer." NL); + self->timer_active = true; + break; + } + + case BTMESH_CONF_EXEC_STATE_TASK_EVENT_WAIT: + { + sl_status_t sc; + app_log_debug("BT Mesh Config Executor (id=%d) starts " + "waiting for event timeout timer." NL, + self->id); + sc = sl_simple_timer_start(&self->timer, + SL_BTMESH_CONF_EVENT_WAIT_TIMEOUT_MS_CFG_VAL, + executor_on_timer_elapsed, + self, + false); + app_assert_status_f(sc, "Failed to start btmesh_conf_executor timer." NL); + self->timer_active = true; + break; + } + + default: + break; + } +} + +static void executor_on_timer_elapsed(sl_simple_timer_t *timer, void *data) +{ + btmesh_conf_executor_t *const self = (btmesh_conf_executor_t *const)data; + switch (self->state) { + case BTMESH_CONF_EXEC_STATE_TASK_REQUEST_BUSY: + app_log_debug("BT Mesh Config Executor (id=%d) " + "request busy retry timer has elapsed." NL, + self->id); + self->timer_active = false; + // The last configuration request was busy due to unavailable resources + // in the BT Mesh Stack. The retry interval has just elapsed and therefore + // configuration request retry is executed. + executor_conf_request(self, BTMESH_CONF_NOTIFICATION_ENABLE); + break; + + case BTMESH_CONF_EXEC_STATE_TASK_EVENT_WAIT: + app_log_debug("BT Mesh Config Executor (id=%d) " + "waiting for event timeout timer has elapsed." NL, + self->id); + self->timer_active = false; + // No BT Mesh Stack configuration event was received with the matching + // configuration handle which can happen if the event is lost. + // If no configuration message is received from the configuration server + // then the BT Mesh Stack generates a configuration event with + // SL_STATUS_TIMEOUT result so it is guaranteed that an event is generated + // by the BT Mesh Stack under normal circumstances. + // A configuration event might be lost due to lack of resources or due to + // transfer errors during NCP communication. + // This is extremely rare but the executor state machine would be stuck in + // case of missing events without this safety net. + // The solution is to handle the missing event as if BT Mesh Stack + // configuration event with SL_STATUS_TIMEOUT result had been received + // because the status of the configuration request is not known so it + // makes sense to send the configuration request again (retry). + executor_process_task_status(self, SL_STATUS_TIMEOUT); + break; + + default: + app_log_error("Configuration executor timeout occurred in unexpected state." NL); + break; + } +} + +/** @} (end addtogroup btmesh_conf_executor_internal) */ +/** @} (end addtogroup btmesh_conf_executor) */ +/** @} (end addtogroup btmesh_conf) */ diff --git a/app/btmesh/common_host/btmesh_conf/btmesh_conf_executor.h b/app/btmesh/common_host/btmesh_conf/btmesh_conf_executor.h new file mode 100644 index 00000000000..6baa0a6dca5 --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/btmesh_conf_executor.h @@ -0,0 +1,239 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Configurator Component - Job Executor + ******************************************************************************* + * # License + * Copyright 2021 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 BTMESH_CONF_EXECUTOR_H +#define BTMESH_CONF_EXECUTOR_H + +#include "btmesh_conf_types.h" +#include "btmesh_conf_job.h" +#include "sl_simple_timer.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/***************************************************************************//** + * @addtogroup btmesh_conf BT Mesh Configurator Component + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_executor BT Mesh Configuration Executor + * @brief BT Mesh Configuration Executor executes configuration jobs by executing + * the tasks in the task tree of the configuration job. + * + * Each executor shall have one parent @ref btmesh_conf_distributor. + * Parent distributor can command the executor to start configuration job + * execution by calling @ref btmesh_conf_executor_start_job function. + * The configuration executor reports the status of job execution by calling + * @ref btmesh_conf_distributor_on_job_notification function of parent distributor. + * + * The relationship between the configuration distributor and its executors is + * composition so the executors are owned by its parent distributor completely. + * Only the parent distributor is allowed to start configuration jobs because + * the executors always report its job statuses to the parent distributor. + * + * The robust execution of configuration tasks is guaranteed by the retry + * mechanism of the executor. + * @n Retry mechanism is used in the following cases: + * - Configuration request timeout in the BT Mesh Stack due to the following: + * - BT Mesh message sent to the configuration server is lost + * - BT Mesh status message sent by the configuration server is lost + * - Configuration event is not received maybe due to event lost over + * NCP communication (quite rare) + * - Configuration request is busy due to unavailable resources in the + * BT Mesh Stack + * @{ + ******************************************************************************/ + +typedef struct btmesh_conf_distributor_t btmesh_conf_distributor_t; + +/// State constants of BT Mesh Configuration Executor +typedef enum btmesh_conf_executor_state_t { + /// Configuration Executor is ready to execute waiting configuration jobs + BTMESH_CONF_EXEC_STATE_IDLE, + /// Configuration Executor advanced to the next configuration task + BTMESH_CONF_EXEC_STATE_TASK_SET, + /// Configuration Executor forwards events to current task and waits for result + BTMESH_CONF_EXEC_STATE_TASK_EVENT_WAIT, + /// @brief Configuration Executor waits the retry time because the previous + /// task request was busy due to unavailable resources. + /// + /// For example the following conditions could lead to busy requests: + /// - Maximum number segments allowed for transmitted packets is exceeded + /// - Access Layer TX Queue Size + /// + /// See @a SL_BTMESH_CONFIG_MAX_SEND_SEGS and @a SL_BTMESH_CONFIG_APP_TXQ_SIZE + /// BT Mesh Stack configuration defines in sl_btmesh_config.h. + BTMESH_CONF_EXEC_STATE_TASK_REQUEST_BUSY, + /// Number of Configuration Executor states + BTMESH_CONF_EXEC_STATE_COUNT +} btmesh_conf_executor_state_t; + +/// Current status of Configuration Executor +typedef struct btmesh_conf_executor_status_t { + /// State of Configuration Executor + btmesh_conf_executor_state_t state; + /// @brief Network key index of the executed configuration job + /// @n It is valid if the @p state is not @ref BTMESH_CONF_EXEC_STATE_IDLE. + uint16_t enc_netkey_index; + /// @brief Destination node primary element address of executed configuration job + /// @n It is valid if the @p state is not @ref BTMESH_CONF_EXEC_STATE_IDLE. + uint16_t server_address; +} btmesh_conf_executor_status_t; + +/***************************************************************************//** + * @brief BT Mesh Configuration Executor executes configuration jobs by executing + * the tasks in the task tree of the configuration job. + ******************************************************************************/ +typedef struct btmesh_conf_executor { + /// BT Mesh Configuration Distributor which the executor belongs to + btmesh_conf_distributor_t *parent; + /// Pointer to configuration job which is executed + btmesh_conf_job_t *current_job; + /// @brief BT Mesh stack configuration handle which is returned by the last + /// configuration request (BT Mesh Stack API call). Configuration executor + /// processes those configuration events only which matches this handle. + uint32_t handle; + /// Current state of the configuration executor + btmesh_conf_executor_state_t state; + /// @brief Identifier of BT Mesh Configuration Executor instance. + /// @n The identifier of configuration executor instance shall be unique in + /// the context of parent configuration distributor. + uint16_t id; + /// @brief Number of configuration task request retries were executed due to + /// busy BT Mesh Stack. The BT Mesh Stack might reject configuration client + /// requests temporarily due to lack of resources. For example maximum number + /// of parallel segmented message transmissions is reached. + /// @n The local refers to the fact that no messages were sent to the + /// configuration server because the BT Mesh Stack did not accept the request. + uint16_t local_retry_counter; + /// @brief Maximum number of configuration task request retries were executed + /// due to busy BT Mesh Stack. + /// @n The local refers to the fact that no messages were sent to the + /// configuration server because the BT Mesh Stack did not accept the request. + uint16_t local_retry_max; + /// @brief Number of configuration task request retries were executed already + /// due to BT Mesh Stack timeout. An ongoing BT Mesh Stack configuration client + /// request might timeout because the configuration request message sent to + /// the configuration server or the configuration status message sent back to + /// the configuration client is lost. + /// This counter is cleared at the beginning of each configuration task of the + /// configuration job. + uint16_t communication_retry_counter; + /// @brief Maximum number of configuration task request retries due to BT Mesh + /// Stack timeout which indicates lost configuration messages. + uint16_t communication_retry_max; + /// Timer to measure event timeout and configuration request retry interval + sl_simple_timer_t timer; + /// @brief Timer is active from the the moment it is started until it elapses + /// or until it is stopped explicitly. + bool timer_active; +} btmesh_conf_executor_t; + +/***************************************************************************//** + * Create BT Mesh Configuration Executor instance which belongs to the + * specified configuration distributor + * + * @param[in] id Identifier of BT Mesh Configuration Executor instance + * @param[in] parent BT Mesh Configuration Distributor which executor belongs to + * @returns Created configuration executor. + * @retval NULL If the configuration executor creation fails. + * + * BT Mesh Configuration Executor is allocated and initialized with the provided + * BT Mesh Configuration Distributor parent. The initialized configuration + * executor is in idle state and therefore it does not execute any jobs. + * The identifier of configuration executor shall be unique in the context of + * parent configuration distributor. + ******************************************************************************/ +btmesh_conf_executor_t *btmesh_conf_executor_create(uint16_t id, + btmesh_conf_distributor_t *const parent); + +/***************************************************************************//** + * Deallocates the BT Mesh Configuration Executor instance + * + * @param[in] self Pointer to the configuration executor which shall be destroyed + * + * If the configuration executor runs a configuration job then the job and all + * of its tasks are deallocated as well. + ******************************************************************************/ +void btmesh_conf_executor_destroy(btmesh_conf_executor_t *const self); + +/***************************************************************************//** + * Start execution of the specified configuration job in a BT Mesh Configuration + * Executor instance + * + * @param[in] self Pointer to the configuration executor instance + * @param[in] job Configuration job which shall be started + * @returns Status of configuration job execution start. + * @retval SL_STATUS_OK If the configuration job is started properly. + * @retval SL_STATUS_INVALID_STATE If the executor is busy with the execution of + * another configuration job. + * @retval SL_STATUS_NOT_FOUND If the first task of configuration job could not + * be set. + * @retval SL_STATUS_FAIL If one or more configuration requests are failed and + * no further configuration task remains in the task tree which can be executed. + ******************************************************************************/ +sl_status_t btmesh_conf_executor_start_job(btmesh_conf_executor_t *const self, + btmesh_conf_job_t *job); + +/***************************************************************************//** + * Get status BT Mesh Configuration Executor instance + * + * @param[in] self Pointer to the configuration executor instance + * @param[out] status Pointer where status of the executor instance is written + ******************************************************************************/ +void btmesh_conf_executor_get_status(btmesh_conf_executor_t *const self, + btmesh_conf_executor_status_t *status); + +/***************************************************************************//** + * Event handler of BT Mesh Configuration Executor instance + * + * @param[in] self Pointer to the configuration executor instance + * @param[in] evt BT Mesh Stack event + * + * The BT Mesh Configuration Executor event handler forwards events to the + * current task of the configuration job which is executed at the moment. + * If the event is a configuration event then it is forwarded only if the handle + * in the event matches the handle returned by the last configuration BT Mesh + * Stack request which belongs to the same configuration task. + ******************************************************************************/ +void btmesh_conf_executor_on_event(btmesh_conf_executor_t *const self, + const sl_btmesh_msg_t *evt); + +/** @} (end addtogroup btmesh_conf_executor) */ +/** @} (end addtogroup btmesh_conf) */ + +#ifdef __cplusplus +}; +#endif + +#endif /* BTMESH_CONF_EXECUTOR_H */ diff --git a/app/btmesh/common_host/btmesh_conf/btmesh_conf_job.c b/app/btmesh/common_host/btmesh_conf/btmesh_conf_job.c new file mode 100644 index 00000000000..57b907ae21d --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/btmesh_conf_job.c @@ -0,0 +1,139 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Configurator Component - Job + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include "sl_common.h" +#include "btmesh_conf_job.h" +#include "btmesh_conf_config.h" + +/***************************************************************************//** + * @addtogroup btmesh_conf BT Mesh Configurator Component + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_job BT Mesh Configuration Job + * @{ + ******************************************************************************/ +btmesh_conf_job_t *btmesh_conf_job_create_default(uint16_t enc_netkey_index, + uint16_t server_address, + btmesh_conf_task_t *task_tree, + btmesh_conf_on_job_notification_t on_job_notification) +{ + // Call general btmesh_conf_job_create with default parameters + return btmesh_conf_job_create(enc_netkey_index, + server_address, + task_tree, + on_job_notification, + BTMESH_CONF_VARG_NULL, + SL_BTMESH_CONF_JOB_AUTO_DESTROY_CFG_VAL, + NULL); +} + +btmesh_conf_job_t *btmesh_conf_job_create(uint16_t enc_netkey_index, + uint16_t server_address, + btmesh_conf_task_t *task_tree, + btmesh_conf_on_job_notification_t on_job_notification, + btmesh_conf_varg_t job_status_param, + bool auto_destroy, + uint32_t *const job_id) +{ + btmesh_conf_job_t *self; + self = malloc(sizeof(btmesh_conf_job_t)); + + if (NULL != self) { + // Generate configuration job identifier to differentiate jobs easily + self->job_id = btmesh_conf_job_id_generator(); + self->list_elem.node = NULL; + self->current_task = NULL; + self->enc_netkey_index = enc_netkey_index; + self->server_address = server_address; + self->task_tree = task_tree; + self->result = BTMESH_CONF_JOB_RESULT_UNKNOWN; + self->on_job_notification = on_job_notification; + self->job_status_param = job_status_param; + self->auto_destroy = auto_destroy; + + if (NULL != job_id) { + // It is not mandatory to store the job identifier in the application + *job_id = self->job_id; + } + } + return self; +} + +void btmesh_conf_job_destroy(btmesh_conf_job_t *const self) +{ + // Destroy function shall behave as free if NULL pointer is passed + if (NULL == self) { + return; + } + // Destroy all configuration tasks in task_tree + btmesh_conf_task_destroy(self->task_tree); + free(self); +} + +sl_status_t btmesh_conf_job_set_next_task(btmesh_conf_job_t *const self) +{ + sl_status_t sc; + if (NULL == self->current_task) { + // First task of the configuration job shall be set + if (self->task_tree == NULL) { + sc = SL_STATUS_FAIL; + } else { + self->current_task = self->task_tree; + sc = SL_STATUS_OK; + } + } else { + // Set the next configuration task based on the result of the current task + if (SL_STATUS_OK == self->current_task->result) { + self->current_task = self->current_task->next_on_success; + } else { + self->current_task = self->current_task->next_on_failure; + } + + if (NULL == self->current_task) { + // There is no additional task in the task_tree of the configuration job + sc = SL_STATUS_NOT_FOUND; + } else { + sc = SL_STATUS_OK; + } + } + return sc; +} + +SL_WEAK uint32_t btmesh_conf_job_id_generator(void) +{ + // Job identifiers are generated by incrementing the previous one + static uint32_t job_id = 0; + return job_id++; +} + +/** @} (end addtogroup btmesh_conf_job) */ +/** @} (end addtogroup btmesh_conf) */ diff --git a/app/btmesh/common_host/btmesh_conf/btmesh_conf_job.h b/app/btmesh/common_host/btmesh_conf/btmesh_conf_job.h new file mode 100644 index 00000000000..14bf68d83e1 --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/btmesh_conf_job.h @@ -0,0 +1,208 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Configurator Component - Job + ******************************************************************************* + * # License + * Copyright 2021 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 BTMESH_CONF_JOB_H +#define BTMESH_CONF_JOB_H + +#include "sl_slist.h" +#include "btmesh_conf_types.h" +#include "btmesh_conf_task.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/***************************************************************************//** + * @addtogroup btmesh_conf BT Mesh Configurator Component + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_job BT Mesh Configuration Job + * @brief BT Mesh Configuration Job aggregates group of configuration tasks which + * targets the same configuration server model on a remote node. + * @{ + ******************************************************************************/ + +/// Result of BT Mesh Configuration job +typedef enum btmesh_conf_job_result_t { + /// Every executed task of configuration job is successful + BTMESH_CONF_JOB_RESULT_SUCCESS, + /// At least one executed task is failed during configuration job execution + BTMESH_CONF_JOB_RESULT_FAIL, + /// Internal error occurred during configuration job execution + BTMESH_CONF_JOB_RESULT_CRITICAL_ERROR, + /// The configuration job is canceled because the configurator is deinitialized + BTMESH_CONF_JOB_RESULT_CANCEL, + /// The result of configuration job is not known yet + BTMESH_CONF_JOB_RESULT_UNKNOWN +} btmesh_conf_job_result_t; + +/// Type definition of @ref struct btmesh_conf_job_t +typedef struct btmesh_conf_job_t btmesh_conf_job_t; + +/***************************************************************************//** + * Type of BT Mesh Configuration Job status notification callback + * + * @param[in] job Configuration job with changed status + * + * If task execution path ends in the configuration job then the job ends as + * well and job status notification callback is called with the result. + ******************************************************************************/ +typedef void (*btmesh_conf_on_job_notification_t)(const btmesh_conf_job_t *job); + +/***************************************************************************//** + * @brief BT Mesh Configuration Job aggregates group of configuration tasks which + * targets the same configuration server model on a remote node. + ******************************************************************************/ +struct btmesh_conf_job_t { + /// List element (node) to support placement of jobs in singly-linked list + sl_slist_node_t list_elem; + /// Unique job identifier generated by @ref btmesh_conf_job_id_generator + uint32_t job_id; + /// Configuration tasks which shall be executed in the specified order + btmesh_conf_task_t *task_tree; + /// Active configuration task + btmesh_conf_task_t *current_task; + /// Network key used to encrypt the config requests on the network layer + uint16_t enc_netkey_index; + /// Destination node primary element address + uint16_t server_address; + /// Result of configuration job + btmesh_conf_job_result_t result; + /// @brief Configuration job status notification callback which is called when + /// the status of the job changes at the end of the job + void (*on_job_notification)(const btmesh_conf_job_t *job); + /// @brief Job status param can be set by the application to differentiate + /// config jobs if the same callback function is used in multiple jobs + btmesh_conf_varg_t job_status_param; + /// @brief Auto destroy deallocates the configuration job and its tasks + /// automatically after the job status notification callback returns. + /// If @ref btmesh_conf_submit_job operation fails and the definition + /// SL_BTMESH_CONF_JOB_AUTO_DESTROY_ON_SUBMIT_FAILURE_CFG_VAL is turned on + /// then the job is deallocated automatically on submit failure. + bool auto_destroy; +}; + +/***************************************************************************//** + * Create BT Mesh Configuration Job with default parameters + * + * @param[in] enc_netkey_index Network key used to encrypt the config requests + * @param[in] server_address Destination node primary element address + * @param[in] task_tree Config tasks which shall be executed in specified order + * @param[in] on_job_notification Configuration job status notification callback + * which is called when the status of the job changes at the end of the job + * @returns Created configuration job. + * @retval NULL If the configuration job creation fails. + * + * This function calls @ref btmesh_conf_job_create with the following parameters: + * - @a job_status_param: @ref BTMESH_CONF_VARG_NULL + * - @a auto_destroy: @ref SL_BTMESH_CONF_JOB_AUTO_DESTROY_CFG_VAL + * - @a job_id: NULL + ******************************************************************************/ +btmesh_conf_job_t *btmesh_conf_job_create_default(uint16_t enc_netkey_index, + uint16_t server_address, + btmesh_conf_task_t *task_tree, + btmesh_conf_on_job_notification_t on_job_notification); + +/***************************************************************************//** + * Create BT Mesh Configuration Job with given tasks + * + * @param[in] enc_netkey_index Network key used to encrypt the config requests + * @param[in] server_address Destination node primary element address + * @param[in] task_tree Config tasks which shall be executed in specified order + * @param[in] on_job_notification Configuration job status notification callback + * which is called when the status of the job changes at the end of the job + * @param[in] job_status_param Job status param can be set by the application to + * differentiate config jobs if the same jobs status notification callback + * function is used in multiple jobs + * @param[in] auto_destroy Auto destroy deallocates the configuration job and + * its tasks automatically after the job status notification callback returns. + * If @ref btmesh_conf_submit_job operation fails and the definition + * @ref SL_BTMESH_CONF_JOB_AUTO_DESTROY_ON_SUBMIT_FAILURE_CFG_VAL is turned on then the + * job is deallocated automatically on submit failure. + * @param[out] job_id Unique job ID generated by @ref btmesh_conf_job_id_generator + * @returns Created configuration job. + * @retval NULL If the configuration job creation fails. + * + * Configuration job can be created if the tasks are created and linked first + * in order to provide the @p task_tree parameter. The created configuration + * job can be submitted for execution by calling @ref btmesh_conf_submit_job + * function. + ******************************************************************************/ +btmesh_conf_job_t *btmesh_conf_job_create(uint16_t enc_netkey_index, + uint16_t server_address, + btmesh_conf_task_t *task_tree, + btmesh_conf_on_job_notification_t on_job_notification, + btmesh_conf_varg_t job_status_param, + bool auto_destroy, + uint32_t *const job_id); + +/***************************************************************************//** + * Deallocates the BT Mesh Configuration Job instance and all of its tasks + * + * @param[in] self Pointer to the configuration job which shall be destroyed + ******************************************************************************/ +void btmesh_conf_job_destroy(btmesh_conf_job_t *const self); + +/***************************************************************************//** + * Return generated unique BT Mesh Configuration Job identifier. + * + * @returns Unique configuration job identifier + * + * Default implementation is provided in btmesh_conf_job.c and it generates job + * identifiers by incrementing the last one. If the deault implementation is not + * sufficient for the application then the function can be overridden in the + * application by function definition with strong symbol. + * + * @note Default implementation is provided with weak symbol. + ******************************************************************************/ +uint32_t btmesh_conf_job_id_generator(void); + +/***************************************************************************//** + * Set next BT Mesh configuration task based on the current active task of a job + * + * @param[in] self Pointer to the configuration job instance + * @return Status of the next task setup + * @retval SL_STATUS_OK If next task is set properly. + * @retval SL_STATUS_NOT_FOUND If next is not set because this was the last task. + * @retval SL_STATUS_FAIL If fatal error occurred. + ******************************************************************************/ +sl_status_t btmesh_conf_job_set_next_task(btmesh_conf_job_t *const self); + +/** @} (end addtogroup btmesh_conf_job) */ +/** @} (end addtogroup btmesh_conf) */ + +#ifdef __cplusplus +}; +#endif + +#endif /* BTMESH_CONF_JOB_H */ diff --git a/app/btmesh/common_host/btmesh_conf/btmesh_conf_task.c b/app/btmesh/common_host/btmesh_conf/btmesh_conf_task.c new file mode 100644 index 00000000000..85c017ab6ce --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/btmesh_conf_task.c @@ -0,0 +1,3528 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Configurator Component - Task + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include "btmesh_conf_task.h" + +#include +#include +#include "sl_status.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_capi_types.h" +#include "app_log.h" +#include "app_assert.h" +#include "btmesh_db.h" +#include "btmesh_conf.h" +#include "btmesh_conf_task.h" +#include "btmesh_conf_config.h" + +/***************************************************************************//** + * @addtogroup btmesh_conf BT Mesh Configurator Component + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_task BT Mesh Configuration Task + * @{ + ******************************************************************************/ +/// Local log new line shortcut definition +#define NL APP_LOG_NL + +/***************************************************************************//** + * Provide 16-bit unsigned value from little endian byte array + * + * @param[in] ptr Minimum two byte long little endian byte array + * @returns 16-bit unsigned value read from byte array + ******************************************************************************/ +static uint16_t uint16_from_buf_le(const uint8_t *ptr) +{ + return ((uint16_t)ptr[0]) | ((uint16_t)ptr[1] << 8); +} + +/***************************************************************************//** + * Collect all 16-bit unsigned values from a bytearray and append it to the + * passed unsigned 16-bit array by reallocating it to the proper size. + * + * @param[inout] buffer_ptr Pointer to the address of the existing dynamically + * allocated 16-bit array. The @p buffer_ptr shall have non-NULL value but + * the dereferenced value of @p buffer_ptr can be NULL. + * @param[inout] buffer_len Length of @p buffer_ptr 16-bit array. + * The new length of the reallocated buffer is stored here. + * @param[in] buffer_len_max Maximum length of @p buffer_ptr 16-bit array. + * @param[in] array_data Bytearray where the 16-bit unsigned values shall be + * collected from. + * @param[in] array_size Size of @p array_data bytearray. + * @returns Status of collection. + * @retval SL_STATUS_OK If every 16-bit value is collected from the bytearray + * and stored in the reallocated unsigned 16-bit array. + * @retval SL_STATUS_NULL_POINTER If @p buffer_ptr is NULL. + * @retval SL_STATUS_INVALID_COUNT If the @p buffer_len after reallocation would + * exceed @p buffer_len_max or the @p array_size is odd. + * @retval SL_STATUS_ALLOCATION_FAILED If the reallocation of the @p buffer_ptr + * fails. The original buffer is not deallocated in this case. + * + * The @p buffer_ptr pointer shall reference the address of an existing + * dynamically allocated (malloc, realloc, calloc) 16-bit array or the + * dereferenced value shall be a NULL pointer. If the dereferenced @p buffer_ptr + * is NULL then this function allocates a new buffer otherwise it reallocates an + * existing buffer. This behavior makes it possible to build an unsigned 16-bit + * array from multiple byte arrays by calling this function multiple times. + ******************************************************************************/ +static sl_status_t collect_uint16_le_data_from_array(uint16_t **const buffer_ptr, + uint16_t *const buffer_len, + uint16_t buffer_len_max, + const uint8_t *const array_data, + uint8_t array_size) +{ + const uint16_t elem_size = (uint16_t)sizeof(uint16_t); + sl_status_t collect_status = SL_STATUS_FAIL; + uint16_t current_buffer_len = *buffer_len; + uint32_t new_buffer_len = current_buffer_len + (array_size / elem_size); + if (NULL == buffer_ptr) { + // The buffer_ptr shall not be NULL because the pointer to reallocated + // unsigned 16-bit array shall be stored somewhere (avoid memory leaks) + collect_status = SL_STATUS_NULL_POINTER; + } else if ((0 != (array_size % elem_size)) + || (buffer_len_max < new_buffer_len)) { + // The size of the new unsigned 16-bit array shall not exceed the maximum + // and the input bytearray which contains 16-bit values shall have even + // number of bytes. + collect_status = SL_STATUS_INVALID_COUNT; + } else { + // If the pointer parameter of realloc is NULL then it behaves like malloc + uint16_t *reallocated_buffer_ptr = + (uint16_t *)realloc(*buffer_ptr, + new_buffer_len * sizeof(uint16_t)); + + if (NULL == reallocated_buffer_ptr) { + collect_status = SL_STATUS_ALLOCATION_FAILED; + } else { + // Append the new 16-bit unsigned values + for (uint16_t data_idx = 0; data_idx < array_size; data_idx += 2) { + reallocated_buffer_ptr[current_buffer_len++] = + uint16_from_buf_le(&array_data[data_idx]); + } + *buffer_ptr = reallocated_buffer_ptr; + *buffer_len = current_buffer_len; + collect_status = SL_STATUS_OK; + } + } + return collect_status; +} + +/***************************************************************************//** + * Process configuration request status from BT Mesh Stack API. + * + * @param[in] self Pointer to the configuration task + * @param[in] request_status Status code returned from BT Mesh Stack + * configuration request. + * @returns Mapped configuration request status. + * @retval SL_STATUS_OK If request is accepted. + * @retval SL_STATUS_BUSY If request is rejected due to busy lower layers. + * @retval SL_STATUS_FAIL If request is rejected due to unrecoverable error. + * + * The @ref btmesh_conf_task_t::result is set to @p request_status. + * The different BT Mesh Stack Configuration Client API functions have consistent + * return values so this function maps these common return values to match the + * interface description of @ref btmesh_conf_task_t::conf_request. + ******************************************************************************/ +static sl_status_t process_request_status_from_api(btmesh_conf_task_t *const self, + sl_status_t request_status) +{ + if (SL_STATUS_OK != request_status) { + // If BT Mesh Stack configuration request fails then the task fails so the + // configuration task result is set to specific BT Mesh Stack return value. + // If the configuration request is successful then configuration task result + // is not set because it will be determined by the BT Mesh Stack events. + self->result = request_status; + } + + switch (request_status) { + case SL_STATUS_OK: + return request_status; + case SL_STATUS_NO_MORE_RESOURCE: + return SL_STATUS_BUSY; + default: + return SL_STATUS_FAIL; + } +} + +/***************************************************************************//** + * Process event result from BT Mesh Stack configuration client events. + * + * @param[in] self Pointer to the configuration task + * @param[in] event_result Event result from the BT Mesh Stack configuration + * client event. + * @returns Mapped configuration event result. + * @retval SL_STATUS_OK If task is finished successfully. + * @retval SL_STATUS_TIMEOUT If task timed out while it was waiting for events. + * @retval SL_STATUS_FAIL If task failed due to server side error. + * + * The @ref btmesh_conf_task_t::result is set to @p event_result. + * Note: some BT Mesh Stack configuration client events does not have result + * member because these events are intermediate events. + ******************************************************************************/ +static sl_status_t process_event_result_from_api(btmesh_conf_task_t *const self, + sl_status_t event_result) +{ + self->result = event_result; + + switch (event_result) { + case SL_STATUS_OK: + case SL_STATUS_TIMEOUT: + return event_result; + default: + return SL_STATUS_FAIL; + } +} + +// ----------------------------------------------------------------------------- +// Generic Configuration Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t btmesh_conf_task_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t btmesh_conf_task_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_create(btmesh_conf_task_id_t task_id) +{ + btmesh_conf_task_t *self; + + self = malloc(sizeof(btmesh_conf_task_t)); + + if (NULL != self) { + self->task_id = task_id; + self->result = BTMESH_CONF_TASK_RESULT_UNKNOWN; + self->conf_request = btmesh_conf_task_request; + self->on_event = btmesh_conf_task_on_event; + self->to_string = btmesh_conf_task_to_string; + self->destroy = btmesh_conf_task_destroy; + self->next_on_success = NULL; + self->next_on_failure = NULL; + } + return self; +} + +void btmesh_conf_task_destroy(btmesh_conf_task_t *self) +{ + // Destroy function shall behave as free if NULL pointer is passed + if (NULL == self) { + return; + } + // Avoid double destroy if next task is set unconditionally + if (self->next_on_failure == self->next_on_success + && NULL != self->next_on_success) { + self->next_on_failure->destroy(self->next_on_failure); + } else { + if (NULL != self->next_on_failure) { + self->next_on_failure->destroy(self->next_on_failure); + } + if (NULL != self->next_on_success) { + self->next_on_success->destroy(self->next_on_success); + } + } + free(self); +} + +sl_status_t btmesh_conf_task_set_next_unconditional(btmesh_conf_task_t *self, + btmesh_conf_task_t *const next_task) +{ + if ((NULL == self) || (NULL == next_task)) { + return SL_STATUS_NULL_POINTER; + } + // The task tree shall be built from the root node to the leaf nodes which + // makes it possible to avoid cycle in the graph + if ((self == next_task) + || (next_task->next_on_success != NULL) + || (next_task->next_on_failure != NULL)) { + return SL_STATUS_INVALID_PARAMETER; + } + self->next_on_failure = next_task; + self->next_on_success = next_task; + return SL_STATUS_OK; +} + +sl_status_t btmesh_conf_task_set_next_on_success(btmesh_conf_task_t *self, + btmesh_conf_task_t *const next_task) +{ + if ((NULL == self) || (NULL == next_task)) { + return SL_STATUS_NULL_POINTER; + } + // The task tree shall be built from the root node to the leaf nodes which + // makes it possible to avoid cycle in the graph + if ((self == next_task) + || (next_task->next_on_success != NULL) + || (next_task->next_on_failure != NULL)) { + return SL_STATUS_INVALID_PARAMETER; + } + self->next_on_success = next_task; + return SL_STATUS_OK; +} + +sl_status_t btmesh_conf_task_set_next_on_failure(btmesh_conf_task_t *self, + btmesh_conf_task_t *const next_task) +{ + if ((NULL == self) || (NULL == next_task)) { + return SL_STATUS_NULL_POINTER; + } + // The task tree shall be built from the root node to the leaf nodes which + // makes it possible to avoid cycle in the graph + if ((self == next_task) + || (next_task->next_on_success != NULL) + || (next_task->next_on_failure != NULL)) { + return SL_STATUS_INVALID_PARAMETER; + } + self->next_on_failure = next_task; + return SL_STATUS_OK; +} + +static sl_status_t btmesh_conf_task_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + return SL_STATUS_FAIL; +} + +static sl_status_t btmesh_conf_task_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + return SL_STATUS_FAIL; +} + +static int32_t btmesh_conf_task_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, size, "generic (id=%d)", self->task_id); +} + +// ----------------------------------------------------------------------------- +// Appkey Add Task Functions +// ----------------------------------------------------------------------------- + +static sl_status_t +btmesh_conf_task_appkey_add_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_appkey_add_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_appkey_add_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_appkey_add_create(uint16_t appkey_index, + uint16_t netkey_index) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_APPKEY_ADD); + if (NULL != self) { + self->conf_request = btmesh_conf_task_appkey_add_request; + self->on_event = btmesh_conf_task_appkey_add_on_event; + self->destroy = btmesh_conf_task_appkey_add_destroy; + self->to_string = btmesh_conf_task_appkey_add_to_string; + self->ext.appkey.appkey_index = appkey_index; + self->ext.appkey.netkey_index = netkey_index; + } + return self; +} + +void btmesh_conf_task_appkey_add_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_appkey_add_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint16_t appkey_index = self->ext.appkey.appkey_index; + uint16_t netkey_index = self->ext.appkey.netkey_index; + + api_status = sl_btmesh_config_client_add_appkey(enc_netkey_index, + server_address, + appkey_index, + netkey_index, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_appkey_add_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_appkey_status_id: + { + const sl_btmesh_evt_config_client_appkey_status_t *appkey_status = + &evt->data.evt_config_client_appkey_status; + + // If timeout is returned as event status then the upper layer might send + // the configuration message again. If configuration server receives the + // same Config AppKey Add message twice (same indexes with same appkey) + // then it sends back the Config AppKey Status message with success status. + sl_status_t event_result = appkey_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_appkey_add_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "appkey add (appkey_idx=%u,netkey_idx=%u)", + self->ext.appkey.appkey_index, + self->ext.appkey.netkey_index); +} + +// ----------------------------------------------------------------------------- +// Appkey Remove Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_appkey_remove_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_appkey_remove_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_appkey_remove_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_appkey_remove_create(uint16_t appkey_index, + uint16_t netkey_index) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_APPKEY_REMOVE); + if (NULL != self) { + self->conf_request = btmesh_conf_task_appkey_remove_request; + self->on_event = btmesh_conf_task_appkey_remove_on_event; + self->destroy = btmesh_conf_task_appkey_remove_destroy; + self->to_string = btmesh_conf_task_appkey_remove_to_string; + self->ext.appkey.appkey_index = appkey_index; + self->ext.appkey.netkey_index = netkey_index; + } + return self; +} + +void btmesh_conf_task_appkey_remove_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_appkey_remove_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint16_t appkey_index = self->ext.appkey.appkey_index; + uint16_t netkey_index = self->ext.appkey.netkey_index; + + api_status = sl_btmesh_config_client_remove_appkey(enc_netkey_index, + server_address, + appkey_index, + netkey_index, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_appkey_remove_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_appkey_status_id: + { + const sl_btmesh_evt_config_client_appkey_status_t *appkey_status = + &evt->data.evt_config_client_appkey_status; + + // If timeout is returned as event status then the upper layer might send + // the configuration message again. If configuration server receives the + // same Config AppKey Delete message twice (same indexes with same appkey) + // then it sends back the Config AppKey Status message with success status. + sl_status_t event_result = appkey_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_appkey_remove_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "appkey remove (appkey_idx=%u,netkey_idx=%u)", + self->ext.appkey.appkey_index, + self->ext.appkey.netkey_index); +} + +// ----------------------------------------------------------------------------- +// Appkey List Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_appkey_list_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_appkey_list_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_appkey_list_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_appkey_list_create(uint16_t netkey_index) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_APPKEY_LIST); + if (NULL != self) { + self->conf_request = btmesh_conf_task_appkey_list_request; + self->on_event = btmesh_conf_task_appkey_list_on_event; + self->destroy = btmesh_conf_task_appkey_list_destroy; + self->to_string = btmesh_conf_task_appkey_list_to_string; + self->ext.appkey_list.netkey_index = netkey_index; + self->ext.appkey_list.appkey_indexes = NULL; + self->ext.appkey_list.appkey_count = 0; + } + return self; +} + +void btmesh_conf_task_appkey_list_destroy(btmesh_conf_task_t *self) +{ + free(self->ext.appkey_list.appkey_indexes); + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_appkey_list_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint16_t netkey_index = self->ext.appkey_list.netkey_index; + + // Make sure if this is a retry then dynamic memory allocated to store appkey + // data is deallocated in order to restore the initial state of the task. + if (0 < self->ext.appkey_list.appkey_count) { + free(self->ext.appkey_list.appkey_indexes); + self->ext.appkey_list.appkey_indexes = NULL; + self->ext.appkey_list.appkey_count = 0; + } + + api_status = sl_btmesh_config_client_list_appkeys(enc_netkey_index, + server_address, + netkey_index, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_appkey_list_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_appkey_list_id: + { + const sl_btmesh_evt_config_client_appkey_list_t *appkey_list = + &evt->data.evt_config_client_appkey_list; + // This event might be generated more than once so it is possible that + // some appkeys has already been processed. + + sl_status_t collect_status = + collect_uint16_le_data_from_array(&self->ext.appkey_list.appkey_indexes, + &self->ext.appkey_list.appkey_count, + BTMESH_CONF_MAX_APPKEY_COUNT, + appkey_list->appkey_indices.data, + appkey_list->appkey_indices.len); + + if (SL_STATUS_OK != collect_status) { + app_log_status_error_f(collect_status, + "Node (netkey_idx=%d,addr=0x%04x) failed to " + "collect appkeys from appkey list event." NL, + enc_netkey_index, + server_address); + event_status = SL_STATUS_ABORT; + } + break; + } + + case sl_btmesh_evt_config_client_appkey_list_end_id: + { + const sl_btmesh_evt_config_client_appkey_list_end_t *appkey_list_end = + &evt->data.evt_config_client_appkey_list_end; + sl_status_t event_result = appkey_list_end->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_appkey_list_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + int32_t required_space; + int32_t total_required_space = 0; + uint32_t remaining_size = size; + if (SL_STATUS_OK != self->result) { + // Response with the appkey list is not received from the remote node yet + return snprintf(buffer, + size, + "appkey list (netkey_idx=%u)", + self->ext.appkey_list.netkey_index); + } + + required_space = snprintf(buffer, + size, + "appkey list (netkey_idx=%u,appkey_cnt=%d%s", + self->ext.appkey_list.netkey_index, + self->ext.appkey_list.appkey_count, + (0 == self->ext.appkey_list.appkey_count) + ? ")" : ",appkey_idxs="); + if (required_space < 0) { + return required_space; + } else if (remaining_size <= required_space) { + remaining_size = 0; + } else { + remaining_size -= required_space; + } + total_required_space += required_space; + + uint16_t appkey_count = self->ext.appkey_list.appkey_count; + for (uint16_t idx = 0; idx < appkey_count; idx++) { + required_space = snprintf(&buffer[total_required_space], + remaining_size, + (idx != (appkey_count - 1)) ? "%d," : "%d)", + self->ext.appkey_list.appkey_indexes[idx]); + // The loop is not terminated if the buffer space runs out in order to + // calculate the total required buffer size. + // Note: return value of to_string functions shall be interpreted as snprintf + if (required_space < 0) { + return required_space; + } else if (remaining_size <= required_space) { + remaining_size = 0; + } else { + remaining_size -= required_space; + } + total_required_space += required_space; + } + return total_required_space; +} + +// ----------------------------------------------------------------------------- +// Model Bind Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_model_bind_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_model_bind_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_model_bind_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_model_bind_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t appkey_index) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_MODEL_BIND); + if (NULL != self) { + self->conf_request = btmesh_conf_task_model_bind_request; + self->on_event = btmesh_conf_task_model_bind_on_event; + self->destroy = btmesh_conf_task_model_bind_destroy; + self->to_string = btmesh_conf_task_model_bind_to_string; + self->ext.model_binding.elem_index = elem_index; + self->ext.model_binding.vendor_id = vendor_id; + self->ext.model_binding.model_id = model_id; + self->ext.model_binding.appkey_index = appkey_index; + } + return self; +} + +void btmesh_conf_task_model_bind_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_model_bind_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint8_t elem_index = self->ext.model_binding.elem_index; + uint16_t vendor_id = self->ext.model_binding.vendor_id; + uint16_t model_id = self->ext.model_binding.model_id; + uint16_t appkey_index = self->ext.model_binding.appkey_index; + + api_status = sl_btmesh_config_client_bind_model(enc_netkey_index, + server_address, + elem_index, + vendor_id, + model_id, + appkey_index, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_model_bind_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_binding_status_id: + { + const sl_btmesh_evt_config_client_binding_status_t *binding_status = + &evt->data.evt_config_client_binding_status; + + // If timeout is returned as event status then the upper layer might send + // the configuration message again. If configuration server receives the + // same Config Model App Bind message twice with same content then it + // sends back the Config Model App Status message with success status. + sl_status_t event_result = binding_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_model_bind_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "model bind (elem=%u,vendor=0x%04x,model=0x%04x,appkey_idx=%u)", + self->ext.model_binding.elem_index, + self->ext.model_binding.vendor_id, + self->ext.model_binding.model_id, + self->ext.model_binding.appkey_index); +} + +// ----------------------------------------------------------------------------- +// Model Unbind Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_model_unbind_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_model_unbind_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_model_unbind_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_model_unbind_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t appkey_index) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_MODEL_UNBIND); + if (NULL != self) { + self->conf_request = btmesh_conf_task_model_unbind_request; + self->on_event = btmesh_conf_task_model_unbind_on_event; + self->destroy = btmesh_conf_task_model_unbind_destroy; + self->to_string = btmesh_conf_task_model_unbind_to_string; + self->ext.model_binding.elem_index = elem_index; + self->ext.model_binding.vendor_id = vendor_id; + self->ext.model_binding.model_id = model_id; + self->ext.model_binding.appkey_index = appkey_index; + } + return self; +} + +void btmesh_conf_task_model_unbind_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_model_unbind_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint8_t elem_index = self->ext.model_binding.elem_index; + uint16_t vendor_id = self->ext.model_binding.vendor_id; + uint16_t model_id = self->ext.model_binding.model_id; + uint16_t appkey_index = self->ext.model_binding.appkey_index; + + api_status = sl_btmesh_config_client_unbind_model(enc_netkey_index, + server_address, + elem_index, + vendor_id, + model_id, + appkey_index, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_model_unbind_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_binding_status_id: + { + const sl_btmesh_evt_config_client_binding_status_t *binding_status = + &evt->data.evt_config_client_binding_status; + + // If timeout is returned as event status then the upper layer might send + // the configuration message again. If configuration server receives the + // same Config Model App Unbind message twice with same content then it + // sends back the Config Model App Status message with success status. + sl_status_t event_result = binding_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_model_unbind_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "model unbind (elem=%u,vendor=0x%04x,model=0x%04x,appkey_idx=%u)", + self->ext.model_binding.elem_index, + self->ext.model_binding.vendor_id, + self->ext.model_binding.model_id, + self->ext.model_binding.appkey_index); +} + +// ----------------------------------------------------------------------------- +// Model Bindings List Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_model_bindings_list_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_model_bindings_list_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_model_bindings_list_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_model_bindings_list_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_MODEL_BINDINGS_LIST); + if (NULL != self) { + self->conf_request = btmesh_conf_task_model_bindings_list_request; + self->on_event = btmesh_conf_task_model_bindings_list_on_event; + self->destroy = btmesh_conf_task_model_bindings_list_destroy; + self->to_string = btmesh_conf_task_model_bindings_list_to_string; + self->ext.model_bindings_list.elem_index = elem_index; + self->ext.model_bindings_list.vendor_id = vendor_id; + self->ext.model_bindings_list.model_id = model_id; + self->ext.model_bindings_list.appkey_indexes = NULL; + self->ext.model_bindings_list.appkey_count = 0; + } + return self; +} + +void btmesh_conf_task_model_bindings_list_destroy(btmesh_conf_task_t *self) +{ + free(self->ext.model_bindings_list.appkey_indexes); + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_model_bindings_list_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint8_t elem_index = self->ext.model_bindings_list.elem_index; + uint16_t vendor_id = self->ext.model_bindings_list.vendor_id; + uint16_t model_id = self->ext.model_bindings_list.model_id; + + // Make sure if this is a retry then dynamic memory allocated to store appkey + // data is deallocated in order to restore the initial state of the task. + if (0 < self->ext.model_bindings_list.appkey_count) { + free(self->ext.model_bindings_list.appkey_indexes); + self->ext.model_bindings_list.appkey_indexes = NULL; + self->ext.model_bindings_list.appkey_count = 0; + } + + api_status = sl_btmesh_config_client_list_bindings(enc_netkey_index, + server_address, + elem_index, + vendor_id, + model_id, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_model_bindings_list_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_bindings_list_id: { + const sl_btmesh_evt_config_client_bindings_list_t *bindings_list = + &evt->data.evt_config_client_bindings_list; + // This event might be generated more than once so it is possible that + // some appkeys has already been processed. + sl_status_t collect_status = + collect_uint16_le_data_from_array(&self->ext.model_bindings_list.appkey_indexes, + &self->ext.model_bindings_list.appkey_count, + BTMESH_CONF_MAX_APPKEY_COUNT, + bindings_list->appkey_indices.data, + bindings_list->appkey_indices.len); + + if (SL_STATUS_OK != collect_status) { + app_log_status_error_f(collect_status, + "Node (netkey_idx=%d,addr=0x%04x) failed to " + "collect appkeys from bindings list event." NL, + enc_netkey_index, + server_address); + event_status = SL_STATUS_ABORT; + } + break; + } + + case sl_btmesh_evt_config_client_bindings_list_end_id: + { + const sl_btmesh_evt_config_client_bindings_list_end_t *bindings_list_end = + &evt->data.evt_config_client_bindings_list_end; + sl_status_t event_result = bindings_list_end->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_model_bindings_list_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + int32_t required_space; + int32_t total_required_space = 0; + uint32_t remaining_size = size; + if (SL_STATUS_OK != self->result) { + // Response with the bindings list is not received from the remote node yet + return snprintf(buffer, + size, + "model bindings list (elem=%u,vendor=0x%04x,model=0x%04x)", + self->ext.model_bindings_list.elem_index, + self->ext.model_bindings_list.vendor_id, + self->ext.model_bindings_list.model_id); + } + + required_space = snprintf(buffer, + size, + "model bindings list (elem=%u,vendor=0x%04x," + "model=0x%04x,appkey_cnt=%d%s", + self->ext.model_bindings_list.elem_index, + self->ext.model_bindings_list.vendor_id, + self->ext.model_bindings_list.model_id, + self->ext.model_bindings_list.appkey_count, + (0 == self->ext.model_bindings_list.appkey_count) + ? ")" : ",appkey_idxs="); + if (required_space < 0) { + return required_space; + } else if (remaining_size <= required_space) { + remaining_size = 0; + } else { + remaining_size -= required_space; + } + total_required_space += required_space; + + uint16_t appkey_count = self->ext.model_bindings_list.appkey_count; + for (uint16_t idx = 0; idx < appkey_count; idx++) { + required_space = snprintf(&buffer[total_required_space], + remaining_size, + (idx != (appkey_count - 1)) ? "%d," : "%d)", + self->ext.model_bindings_list.appkey_indexes[idx]); + // The loop is not terminated if the buffer space runs out in order to + // calculate the total required buffer size. + // Note: return value of to_string functions shall be interpreted as snprintf + if (required_space < 0) { + return required_space; + } else if (remaining_size <= required_space) { + remaining_size = 0; + } else { + remaining_size -= required_space; + } + total_required_space += required_space; + } + return total_required_space; +} + +// ----------------------------------------------------------------------------- +// Model Publication Set Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_model_pub_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_model_pub_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_model_pub_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_model_pub_set_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t address, + uint16_t appkey_index, + uint8_t credentials, + uint8_t ttl, + uint32_t period_ms, + uint8_t retransmit_count, + uint16_t retransmit_interval_ms) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_MODEL_PUB_SET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_model_pub_set_request; + self->on_event = btmesh_conf_task_model_pub_set_on_event; + self->destroy = btmesh_conf_task_model_pub_set_destroy; + self->to_string = btmesh_conf_task_model_pub_set_to_string; + self->ext.model_pub.elem_index = elem_index; + self->ext.model_pub.vendor_id = vendor_id; + self->ext.model_pub.model_id = model_id; + self->ext.model_pub.address = address; + self->ext.model_pub.appkey_index = appkey_index; + self->ext.model_pub.credentials = credentials; + self->ext.model_pub.ttl = ttl; + self->ext.model_pub.period_ms = period_ms; + self->ext.model_pub.retransmit_count = retransmit_count; + self->ext.model_pub.retransmit_interval_ms = retransmit_interval_ms; + } + return self; +} + +void btmesh_conf_task_model_pub_set_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_model_pub_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + btmesh_conf_task_model_pub_t *model_pub = &self->ext.model_pub; + api_status = sl_btmesh_config_client_set_model_pub(enc_netkey_index, + server_address, + model_pub->elem_index, + model_pub->vendor_id, + model_pub->model_id, + model_pub->address, + model_pub->appkey_index, + model_pub->credentials, + model_pub->ttl, + model_pub->period_ms, + model_pub->retransmit_count, + model_pub->retransmit_interval_ms, + handle); + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_model_pub_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_model_pub_status_id: + { + const sl_btmesh_evt_config_client_model_pub_status_t *model_pub_status = + &evt->data.evt_config_client_model_pub_status; + sl_status_t event_result = model_pub_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_model_pub_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + btmesh_conf_task_model_pub_t *model_pub = &self->ext.model_pub; + return snprintf(buffer, + size, + "model pub set (elem=%u,vendor=0x%04x,model=0x%04x,addr=0x%04x," + "appkey_idx=%u,cred=%u,ttl=%u,period_ms=%lums,tx_cnt=%u,tx_interval_ms=%u)", + model_pub->elem_index, + model_pub->vendor_id, + model_pub->model_id, + model_pub->address, + model_pub->appkey_index, + model_pub->credentials, + model_pub->ttl, + (unsigned long) model_pub->period_ms, + model_pub->retransmit_count, + model_pub->retransmit_interval_ms); +} +// ----------------------------------------------------------------------------- +// Model Publication Get Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_model_pub_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_model_pub_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_model_pub_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_model_pub_get_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_MODEL_PUB_GET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_model_pub_get_request; + self->on_event = btmesh_conf_task_model_pub_get_on_event; + self->destroy = btmesh_conf_task_model_pub_get_destroy; + self->to_string = btmesh_conf_task_model_pub_get_to_string; + self->ext.model_pub.elem_index = elem_index; + self->ext.model_pub.vendor_id = vendor_id; + self->ext.model_pub.model_id = model_id; + self->ext.model_pub.address = BTMESH_CONF_PUB_ADDRESS_UNKNOWN; + self->ext.model_pub.appkey_index = BTMESH_CONF_PUB_APPKEY_INDEX_UNKNOWN; + self->ext.model_pub.credentials = BTMESH_CONF_PUB_CREDENTIALS_UNKNOWN; + self->ext.model_pub.ttl = BTMESH_CONF_PUB_TTL_UNKNOWN; + self->ext.model_pub.period_ms = BTMESH_CONF_PUB_PERIOD_MS_UNKNOWN; + self->ext.model_pub.retransmit_count = BTMESH_CONF_PUB_RETRANSMIT_CNT_UNKNOWN; + self->ext.model_pub.retransmit_interval_ms = + BTMESH_CONF_PUB_RETRANSMIT_INT_MS_UNKNOWN; + } + return self; +} + +void btmesh_conf_task_model_pub_get_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_model_pub_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + btmesh_conf_task_model_pub_t *model_pub = &self->ext.model_pub; + api_status = sl_btmesh_config_client_get_model_pub(enc_netkey_index, + server_address, + model_pub->elem_index, + model_pub->vendor_id, + model_pub->model_id, + handle); + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_model_pub_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_model_pub_status_id: + { + const sl_btmesh_evt_config_client_model_pub_status_t *model_pub_status = + &evt->data.evt_config_client_model_pub_status; + sl_status_t event_result = model_pub_status->result; + event_status = process_event_result_from_api(self, event_result); + if (SL_STATUS_OK == event_result) { + self->ext.model_pub.address = model_pub_status->address; + self->ext.model_pub.appkey_index = model_pub_status->appkey_index; + self->ext.model_pub.credentials = model_pub_status->credentials; + self->ext.model_pub.ttl = model_pub_status->ttl; + self->ext.model_pub.period_ms = model_pub_status->period_ms; + self->ext.model_pub.retransmit_count = + model_pub_status->retransmit_count; + self->ext.model_pub.retransmit_interval_ms = + model_pub_status->retransmit_interval_ms; + } + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_model_pub_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + btmesh_conf_task_model_pub_t *model_pub = &self->ext.model_pub; + if (SL_STATUS_OK == self->result) { + return snprintf(buffer, + size, + "model pub get (elem=%u,vendor=0x%04x,model=0x%04x,addr=0x%04x," + "appkey_idx=%u,cred=%u,ttl=%u,period_ms=%lums,tx_cnt=%u,tx_interval_ms=%u)", + model_pub->elem_index, + model_pub->vendor_id, + model_pub->model_id, + model_pub->address, + model_pub->appkey_index, + model_pub->credentials, + model_pub->ttl, + (unsigned long) model_pub->period_ms, + model_pub->retransmit_count, + model_pub->retransmit_interval_ms); + } else { + return snprintf(buffer, + size, + "model pub get (elem=%u,vendor=0x%04x,model=0x%04x)", + model_pub->elem_index, + model_pub->vendor_id, + model_pub->model_id); + } +} + +// ----------------------------------------------------------------------------- +// Model Subscription Add Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_model_sub_add_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_model_sub_add_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_model_sub_add_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_model_sub_add_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_MODEL_SUB_ADD); + if (NULL != self) { + self->conf_request = btmesh_conf_task_model_sub_add_request; + self->on_event = btmesh_conf_task_model_sub_add_on_event; + self->destroy = btmesh_conf_task_model_sub_add_destroy; + self->to_string = btmesh_conf_task_model_sub_add_to_string; + self->ext.model_sub.elem_index = elem_index; + self->ext.model_sub.vendor_id = vendor_id; + self->ext.model_sub.model_id = model_id; + self->ext.model_sub.sub_address = sub_address; + } + return self; +} + +void btmesh_conf_task_model_sub_add_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_model_sub_add_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + btmesh_conf_task_model_sub_t *model_sub = &self->ext.model_sub; + api_status = sl_btmesh_config_client_add_model_sub(enc_netkey_index, + server_address, + model_sub->elem_index, + model_sub->vendor_id, + model_sub->model_id, + model_sub->sub_address, + handle); + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_model_sub_add_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_model_sub_status_id: + { + const sl_btmesh_evt_config_client_model_sub_status_t *model_sub_status = + &evt->data.evt_config_client_model_sub_status; + sl_status_t event_result = model_sub_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_model_sub_add_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + btmesh_conf_task_model_sub_t *model_sub = &self->ext.model_sub; + return snprintf(buffer, + size, + "model sub add (elem=%u,vendor=0x%04x,model=0x%04x,sub_addr=0x%04x)", + model_sub->elem_index, + model_sub->vendor_id, + model_sub->model_id, + model_sub->sub_address); +} + +// ----------------------------------------------------------------------------- +// Model Subscription Remove Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_model_sub_remove_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_model_sub_remove_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_model_sub_remove_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_model_sub_remove_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_MODEL_SUB_REMOVE); + if (NULL != self) { + self->conf_request = btmesh_conf_task_model_sub_remove_request; + self->on_event = btmesh_conf_task_model_sub_remove_on_event; + self->destroy = btmesh_conf_task_model_sub_remove_destroy; + self->to_string = btmesh_conf_task_model_sub_remove_to_string; + self->ext.model_sub.elem_index = elem_index; + self->ext.model_sub.vendor_id = vendor_id; + self->ext.model_sub.model_id = model_id; + self->ext.model_sub.sub_address = sub_address; + } + return self; +} + +void btmesh_conf_task_model_sub_remove_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_model_sub_remove_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + btmesh_conf_task_model_sub_t *model_sub = &self->ext.model_sub; + api_status = sl_btmesh_config_client_remove_model_sub(enc_netkey_index, + server_address, + model_sub->elem_index, + model_sub->vendor_id, + model_sub->model_id, + model_sub->sub_address, + handle); + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_model_sub_remove_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_model_sub_status_id: + { + const sl_btmesh_evt_config_client_model_sub_status_t *model_sub_status = + &evt->data.evt_config_client_model_sub_status; + sl_status_t event_result = model_sub_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_model_sub_remove_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + btmesh_conf_task_model_sub_t *model_sub = &self->ext.model_sub; + return snprintf(buffer, + size, + "model sub remove (elem=%u,vendor=0x%04x,model=0x%04x,sub_addr=0x%04x)", + model_sub->elem_index, + model_sub->vendor_id, + model_sub->model_id, + model_sub->sub_address); +} + +// ----------------------------------------------------------------------------- +// Model Subscription Set Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_model_sub_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_model_sub_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_model_sub_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_model_sub_set_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_MODEL_SUB_SET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_model_sub_set_request; + self->on_event = btmesh_conf_task_model_sub_set_on_event; + self->destroy = btmesh_conf_task_model_sub_set_destroy; + self->to_string = btmesh_conf_task_model_sub_set_to_string; + self->ext.model_sub.elem_index = elem_index; + self->ext.model_sub.vendor_id = vendor_id; + self->ext.model_sub.model_id = model_id; + self->ext.model_sub.sub_address = sub_address; + } + return self; +} + +void btmesh_conf_task_model_sub_set_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_model_sub_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + btmesh_conf_task_model_sub_t *model_sub = &self->ext.model_sub; + api_status = sl_btmesh_config_client_set_model_sub(enc_netkey_index, + server_address, + model_sub->elem_index, + model_sub->vendor_id, + model_sub->model_id, + model_sub->sub_address, + handle); + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_model_sub_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_model_sub_status_id: + { + const sl_btmesh_evt_config_client_model_sub_status_t *model_sub_status = + &evt->data.evt_config_client_model_sub_status; + sl_status_t event_result = model_sub_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_model_sub_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + btmesh_conf_task_model_sub_t *model_sub = &self->ext.model_sub; + return snprintf(buffer, + size, + "model sub set (elem=%u,vendor=0x%04x,model=0x%04x,sub_addr=0x%04x)", + model_sub->elem_index, + model_sub->vendor_id, + model_sub->model_id, + model_sub->sub_address); +} + +// ----------------------------------------------------------------------------- +// Model Subscription Clear Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_model_sub_clear_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_model_sub_clear_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_model_sub_clear_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_model_sub_clear_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_MODEL_SUB_CLEAR); + if (NULL != self) { + self->conf_request = btmesh_conf_task_model_sub_clear_request; + self->on_event = btmesh_conf_task_model_sub_clear_on_event; + self->destroy = btmesh_conf_task_model_sub_clear_destroy; + self->to_string = btmesh_conf_task_model_sub_clear_to_string; + self->ext.model_sub_clear.elem_index = elem_index; + self->ext.model_sub_clear.vendor_id = vendor_id; + self->ext.model_sub_clear.model_id = model_id; + } + return self; +} + +void btmesh_conf_task_model_sub_clear_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_model_sub_clear_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + btmesh_conf_task_model_sub_clear_t *model_sub_clear = &self->ext.model_sub_clear; + api_status = sl_btmesh_config_client_clear_model_sub(enc_netkey_index, + server_address, + model_sub_clear->elem_index, + model_sub_clear->vendor_id, + model_sub_clear->model_id, + handle); + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_model_sub_clear_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_model_sub_status_id: + { + const sl_btmesh_evt_config_client_model_sub_status_t *model_sub_status = + &evt->data.evt_config_client_model_sub_status; + sl_status_t event_result = model_sub_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_model_sub_clear_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + btmesh_conf_task_model_sub_clear_t *model_sub_clear = &self->ext.model_sub_clear; + return snprintf(buffer, + size, + "model sub clear (elem=%u,vendor=0x%04x,model=0x%04x)", + model_sub_clear->elem_index, + model_sub_clear->vendor_id, + model_sub_clear->model_id); +} + +// ----------------------------------------------------------------------------- +// Model Subscription List Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_model_sub_list_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_model_sub_list_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_model_sub_list_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_model_sub_list_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_MODEL_SUB_LIST); + if (NULL != self) { + self->conf_request = btmesh_conf_task_model_sub_list_request; + self->on_event = btmesh_conf_task_model_sub_list_on_event; + self->destroy = btmesh_conf_task_model_sub_list_destroy; + self->to_string = btmesh_conf_task_model_sub_list_to_string; + self->ext.model_sub_list.elem_index = elem_index; + self->ext.model_sub_list.vendor_id = vendor_id; + self->ext.model_sub_list.model_id = model_id; + self->ext.model_sub_list.addresses = NULL; + self->ext.model_sub_list.address_count = 0; + } + return self; +} + +void btmesh_conf_task_model_sub_list_destroy(btmesh_conf_task_t *self) +{ + free(self->ext.model_sub_list.addresses); + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_model_sub_list_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint8_t elem_index = self->ext.model_sub_list.elem_index; + uint16_t vendor_id = self->ext.model_sub_list.vendor_id; + uint16_t model_id = self->ext.model_sub_list.model_id; + + // Make sure if this is a retry then dynamic memory allocated to store address + // data is deallocated in order to restore the initial state of the task. + if (0 < self->ext.model_sub_list.address_count) { + free(self->ext.model_sub_list.addresses); + self->ext.model_sub_list.addresses = NULL; + self->ext.model_sub_list.address_count = 0; + } + + api_status = sl_btmesh_config_client_list_subs(enc_netkey_index, + server_address, + elem_index, + vendor_id, + model_id, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_model_sub_list_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_subs_list_id: { + const sl_btmesh_evt_config_client_subs_list_t *subs_list = + &evt->data.evt_config_client_subs_list; + // This event might be generated more than once so it is possible that + // some addresses has already been processed. + sl_status_t collect_status = + collect_uint16_le_data_from_array(&self->ext.model_sub_list.addresses, + &self->ext.model_sub_list.address_count, + BTMESH_CONF_MAX_SUB_ADDR_COUNT, + subs_list->addresses.data, + subs_list->addresses.len); + + if (SL_STATUS_OK != collect_status) { + app_log_status_error_f(collect_status, + "Node (netkey_idx=%d,addr=0x%04x) failed to " + "collect addresses from subs list event." NL, + enc_netkey_index, + server_address); + event_status = SL_STATUS_ABORT; + } + break; + } + + case sl_btmesh_evt_config_client_subs_list_end_id: + { + const sl_btmesh_evt_config_client_subs_list_end_t *subs_list_end = + &evt->data.evt_config_client_subs_list_end; + sl_status_t event_result = subs_list_end->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_model_sub_list_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + int32_t required_space; + int32_t total_required_space = 0; + uint32_t remaining_size = size; + if (SL_STATUS_OK != self->result) { + // Response with the subs list is not received from the remote node yet + return snprintf(buffer, + size, + "model subs list (elem=%u,vendor=0x%04x,model=0x%04x)", + self->ext.model_sub_list.elem_index, + self->ext.model_sub_list.vendor_id, + self->ext.model_sub_list.model_id); + } + + required_space = snprintf(buffer, + size, + "model subs list (elem=%u,vendor=0x%04x," + "model=0x%04x,addr_cnt=%d%s", + self->ext.model_sub_list.elem_index, + self->ext.model_sub_list.vendor_id, + self->ext.model_sub_list.model_id, + self->ext.model_sub_list.address_count, + (0 == self->ext.model_sub_list.address_count) + ? ")" : ",addrs="); + if (required_space < 0) { + return required_space; + } else if (remaining_size <= required_space) { + remaining_size = 0; + } else { + remaining_size -= required_space; + } + total_required_space += required_space; + + uint16_t addr_count = self->ext.model_sub_list.address_count; + for (uint16_t idx = 0; idx < addr_count; idx++) { + required_space = snprintf(&buffer[total_required_space], + remaining_size, + (idx != (addr_count - 1)) ? "0x%04x," : "0x%04x)", + self->ext.model_sub_list.addresses[idx]); + // The loop is not terminated if the buffer space runs out in order to + // calculate the total required buffer size. + // Note: return value of to_string functions shall be interpreted as snprintf + if (required_space < 0) { + return required_space; + } else if (remaining_size <= required_space) { + remaining_size = 0; + } else { + remaining_size -= required_space; + } + total_required_space += required_space; + } + return total_required_space; +} + +// ----------------------------------------------------------------------------- +// Beacon Set Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_beacon_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_beacon_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_beacon_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_beacon_set_create(uint8_t value) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_BEACON_SET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_beacon_set_request; + self->on_event = btmesh_conf_task_beacon_set_on_event; + self->destroy = btmesh_conf_task_beacon_set_destroy; + self->to_string = btmesh_conf_task_beacon_set_to_string; + self->ext.beacon.value = value; + } + return self; +} + +void btmesh_conf_task_beacon_set_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_beacon_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint8_t value = self->ext.beacon.value; + + api_status = sl_btmesh_config_client_set_beacon(enc_netkey_index, + server_address, + value, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_beacon_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_beacon_status_id: + { + const sl_btmesh_evt_config_client_beacon_status_t *beacon_status = + &evt->data.evt_config_client_beacon_status; + + sl_status_t event_result = beacon_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_beacon_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "beacon set (value=%d)", + self->ext.beacon.value); +} +// ----------------------------------------------------------------------------- +// Beacon Get Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_beacon_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_beacon_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_beacon_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_beacon_get_create(void) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_BEACON_GET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_beacon_get_request; + self->on_event = btmesh_conf_task_beacon_get_on_event; + self->destroy = btmesh_conf_task_beacon_get_destroy; + self->to_string = btmesh_conf_task_beacon_get_to_string; + self->ext.beacon.value = BTMESH_CONF_BEACON_UNKNOWN; + } + return self; +} + +void btmesh_conf_task_beacon_get_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_beacon_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + + api_status = sl_btmesh_config_client_get_beacon(enc_netkey_index, + server_address, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_beacon_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_beacon_status_id: + { + const sl_btmesh_evt_config_client_beacon_status_t *beacon_status = + &evt->data.evt_config_client_beacon_status; + + sl_status_t event_result = beacon_status->result; + event_status = process_event_result_from_api(self, event_result); + if (SL_STATUS_OK == event_result) { + self->ext.beacon.value = beacon_status->value; + } + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_beacon_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + if (SL_STATUS_OK == self->result) { + return snprintf(buffer, + size, + "beacon get (value=%d)", + self->ext.beacon.value); + } else { + return snprintf(buffer, + size, + "beacon get"); + } +} + +// ----------------------------------------------------------------------------- +// Default TTL Set Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_default_ttl_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_default_ttl_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_default_ttl_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_default_ttl_set_create(uint8_t default_ttl) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_DEFAULT_TTL_SET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_default_ttl_set_request; + self->on_event = btmesh_conf_task_default_ttl_set_on_event; + self->destroy = btmesh_conf_task_default_ttl_set_destroy; + self->to_string = btmesh_conf_task_default_ttl_set_to_string; + self->ext.default_ttl.ttl = default_ttl; + } + return self; +} + +void btmesh_conf_task_default_ttl_set_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_default_ttl_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint8_t default_ttl = self->ext.default_ttl.ttl; + + api_status = sl_btmesh_config_client_set_default_ttl(enc_netkey_index, + server_address, + default_ttl, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_default_ttl_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_default_ttl_status_id: + { + const sl_btmesh_evt_config_client_default_ttl_status_t *default_ttl_status = + &evt->data.evt_config_client_default_ttl_status; + + sl_status_t event_result = default_ttl_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_default_ttl_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "default ttl set (ttl=%d)", + self->ext.default_ttl.ttl); +} +// ----------------------------------------------------------------------------- +// Default TTL Get Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_default_ttl_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_default_ttl_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_default_ttl_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_default_ttl_get_create(void) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_DEFAULT_TTL_GET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_default_ttl_get_request; + self->on_event = btmesh_conf_task_default_ttl_get_on_event; + self->destroy = btmesh_conf_task_default_ttl_get_destroy; + self->to_string = btmesh_conf_task_default_ttl_get_to_string; + self->ext.default_ttl.ttl = BTMESH_CONF_DEFAULT_TTL_UNKNOWN; + } + return self; +} + +void btmesh_conf_task_default_ttl_get_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_default_ttl_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + + api_status = sl_btmesh_config_client_get_default_ttl(enc_netkey_index, + server_address, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_default_ttl_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_default_ttl_status_id: + { + const sl_btmesh_evt_config_client_default_ttl_status_t *default_ttl_status = + &evt->data.evt_config_client_default_ttl_status; + + sl_status_t event_result = default_ttl_status->result; + event_status = process_event_result_from_api(self, event_result); + if (SL_STATUS_OK == event_result) { + self->ext.default_ttl.ttl = default_ttl_status->value; + } + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_default_ttl_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + if (SL_STATUS_OK == self->result) { + return snprintf(buffer, + size, + "default ttl get (ttl=%d)", + self->ext.default_ttl.ttl); + } else { + return snprintf(buffer, + size, + "default ttl get"); + } +} + +// ----------------------------------------------------------------------------- +// GATT Proxy Set Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_gatt_proxy_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_gatt_proxy_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_gatt_proxy_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_gatt_proxy_set_create(uint8_t value) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_GATT_PROXY_SET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_gatt_proxy_set_request; + self->on_event = btmesh_conf_task_gatt_proxy_set_on_event; + self->destroy = btmesh_conf_task_gatt_proxy_set_destroy; + self->to_string = btmesh_conf_task_gatt_proxy_set_to_string; + self->ext.gatt_proxy.value = value; + } + return self; +} + +void btmesh_conf_task_gatt_proxy_set_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_gatt_proxy_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint8_t value = self->ext.gatt_proxy.value; + + api_status = sl_btmesh_config_client_set_gatt_proxy(enc_netkey_index, + server_address, + value, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_gatt_proxy_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_gatt_proxy_status_id: + { + const sl_btmesh_evt_config_client_gatt_proxy_status_t *gatt_proxy_status = + &evt->data.evt_config_client_gatt_proxy_status; + + sl_status_t event_result = gatt_proxy_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_gatt_proxy_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "gatt_proxy set (val=%d)", + self->ext.gatt_proxy.value); +} + +// ----------------------------------------------------------------------------- +// GATT Proxy Get Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_gatt_proxy_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_gatt_proxy_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_gatt_proxy_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_gatt_proxy_get_create(void) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_GATT_PROXY_GET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_gatt_proxy_get_request; + self->on_event = btmesh_conf_task_gatt_proxy_get_on_event; + self->destroy = btmesh_conf_task_gatt_proxy_get_destroy; + self->to_string = btmesh_conf_task_gatt_proxy_get_to_string; + self->ext.gatt_proxy.value = BTMESH_CONF_PROXY_VALUE_UNKNOWN; + } + return self; +} + +void btmesh_conf_task_gatt_proxy_get_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_gatt_proxy_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + + api_status = sl_btmesh_config_client_get_gatt_proxy(enc_netkey_index, + server_address, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_gatt_proxy_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_gatt_proxy_status_id: + { + const sl_btmesh_evt_config_client_gatt_proxy_status_t *gatt_proxy_status = + &evt->data.evt_config_client_gatt_proxy_status; + + sl_status_t event_result = gatt_proxy_status->result; + event_status = process_event_result_from_api(self, event_result); + if (SL_STATUS_OK == event_result) { + self->ext.gatt_proxy.value = gatt_proxy_status->value; + } + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_gatt_proxy_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + if (SL_STATUS_OK == self->result) { + return snprintf(buffer, + size, + "gatt_proxy get (val=%d)", + self->ext.gatt_proxy.value); + } else { + return snprintf(buffer, + size, + "gatt_proxy get"); + } +} + +// ----------------------------------------------------------------------------- +// Relay Set Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_relay_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_relay_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_relay_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_relay_set_create(uint8_t value, + uint8_t retransmit_count, + uint16_t retransmit_interval_ms) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_RELAY_SET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_relay_set_request; + self->on_event = btmesh_conf_task_relay_set_on_event; + self->destroy = btmesh_conf_task_relay_set_destroy; + self->to_string = btmesh_conf_task_relay_set_to_string; + self->ext.relay.value = value; + self->ext.relay.retransmit_count = retransmit_count; + self->ext.relay.retransmit_interval_ms = retransmit_interval_ms; + } + return self; +} + +void btmesh_conf_task_relay_set_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_relay_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint8_t value = self->ext.relay.value; + uint8_t retransmit_count = self->ext.relay.retransmit_count; + uint16_t retransmit_interval_ms = self->ext.relay.retransmit_interval_ms; + + api_status = sl_btmesh_config_client_set_relay(enc_netkey_index, + server_address, + value, + retransmit_count, + retransmit_interval_ms, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_relay_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_relay_status_id: + { + const sl_btmesh_evt_config_client_relay_status_t *relay_status = + &evt->data.evt_config_client_relay_status; + + sl_status_t event_result = relay_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_relay_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "relay set (val=%d,cnt=%d,interval=%dms)", + self->ext.relay.value, + self->ext.relay.retransmit_count, + self->ext.relay.retransmit_interval_ms); +} + +// ----------------------------------------------------------------------------- +// Relay Get Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_relay_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_relay_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_relay_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_relay_get_create(void) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_RELAY_GET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_relay_get_request; + self->on_event = btmesh_conf_task_relay_get_on_event; + self->destroy = btmesh_conf_task_relay_get_destroy; + self->to_string = btmesh_conf_task_relay_get_to_string; + self->ext.relay.value = BTMESH_CONF_RELAY_VALUE_UNKNOWN; + self->ext.relay.retransmit_count = BTMESH_CONF_RELAY_RETRANSMIT_CNT_UNKNOWN; + self->ext.relay.retransmit_interval_ms = + BTMESH_CONF_RELAY_RETRANSMIT_INT_MS_UNKNOWN; + } + return self; +} + +void btmesh_conf_task_relay_get_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_relay_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + + api_status = sl_btmesh_config_client_get_relay(enc_netkey_index, + server_address, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_relay_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_relay_status_id: + { + const sl_btmesh_evt_config_client_relay_status_t *relay_status = + &evt->data.evt_config_client_relay_status; + + sl_status_t event_result = relay_status->result; + event_status = process_event_result_from_api(self, event_result); + if (SL_STATUS_OK == event_result) { + self->ext.relay.value = relay_status->relay; + self->ext.relay.retransmit_count = relay_status->retransmit_count; + self->ext.relay.retransmit_interval_ms = + relay_status->retransmit_interval_ms; + } + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_relay_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + if (SL_STATUS_OK == self->result) { + return snprintf(buffer, + size, + "relay get (val=%d,cnt=%d,interval=%dms)", + self->ext.relay.value, + self->ext.relay.retransmit_count, + self->ext.relay.retransmit_interval_ms); + } else { + return snprintf(buffer, + size, + "relay get"); + } +} + +// ----------------------------------------------------------------------------- +// Network Transmit Count Set Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_network_transmit_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_network_transmit_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_network_transmit_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_network_transmit_set_create(uint8_t transmit_count, + uint16_t transmit_interval_ms) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_NETWORK_TRANSMIT_SET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_network_transmit_set_request; + self->on_event = btmesh_conf_task_network_transmit_set_on_event; + self->destroy = btmesh_conf_task_network_transmit_set_destroy; + self->to_string = btmesh_conf_task_network_transmit_set_to_string; + self->ext.network_transmit.transmit_count = transmit_count; + self->ext.network_transmit.transmit_interval_ms = transmit_interval_ms; + } + return self; +} + +void btmesh_conf_task_network_transmit_set_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_network_transmit_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint8_t transmit_count = self->ext.network_transmit.transmit_count; + uint16_t transmit_interval_ms = + self->ext.network_transmit.transmit_interval_ms; + + api_status = sl_btmesh_config_client_set_network_transmit(enc_netkey_index, + server_address, + transmit_count, + transmit_interval_ms, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_network_transmit_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_network_transmit_status_id: + { + const sl_btmesh_evt_config_client_network_transmit_status_t *network_transmit_status = + &evt->data.evt_config_client_network_transmit_status; + + sl_status_t event_result = network_transmit_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_network_transmit_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "network transmit set (cnt=%d,interval=%dms)", + self->ext.network_transmit.transmit_count, + self->ext.network_transmit.transmit_interval_ms); +} + +// ----------------------------------------------------------------------------- +// Network Transmit Count Get Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_network_transmit_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_network_transmit_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_network_transmit_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_network_transmit_get_create(void) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_NETWORK_TRANSMIT_GET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_network_transmit_get_request; + self->on_event = btmesh_conf_task_network_transmit_get_on_event; + self->destroy = btmesh_conf_task_network_transmit_get_destroy; + self->to_string = btmesh_conf_task_network_transmit_get_to_string; + self->ext.network_transmit.transmit_count = BTMESH_CONF_NW_TRANSMIT_CNT_UNKNOWN; + self->ext.network_transmit.transmit_interval_ms = + BTMESH_CONF_NW_TRANSMIT_INT_MS_UNKNOWN; + } + return self; +} + +void btmesh_conf_task_network_transmit_get_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_network_transmit_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + + api_status = sl_btmesh_config_client_get_network_transmit(enc_netkey_index, + server_address, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_network_transmit_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_network_transmit_status_id: + { + const sl_btmesh_evt_config_client_network_transmit_status_t *network_transmit_status = + &evt->data.evt_config_client_network_transmit_status; + + sl_status_t event_result = network_transmit_status->result; + event_status = process_event_result_from_api(self, event_result); + if (SL_STATUS_OK == event_result) { + self->ext.network_transmit.transmit_count = + network_transmit_status->transmit_count; + self->ext.network_transmit.transmit_interval_ms = + network_transmit_status->transmit_interval_ms; + } + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_network_transmit_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + if (SL_STATUS_OK == self->result) { + return snprintf(buffer, + size, + "network transmit get (cnt=%d,interval=%dms)", + self->ext.network_transmit.transmit_count, + self->ext.network_transmit.transmit_interval_ms); + } else { + return snprintf(buffer, + size, + "network transmit get"); + } +} + +// ----------------------------------------------------------------------------- +// Friend Set Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_friend_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_friend_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_friend_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_friend_set_create(uint8_t value) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_FRIEND_SET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_friend_set_request; + self->on_event = btmesh_conf_task_friend_set_on_event; + self->destroy = btmesh_conf_task_friend_set_destroy; + self->to_string = btmesh_conf_task_friend_set_to_string; + self->ext.friend.value = value; + } + return self; +} + +void btmesh_conf_task_friend_set_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_friend_set_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + uint8_t value = self->ext.friend.value; + + api_status = sl_btmesh_config_client_set_friend(enc_netkey_index, + server_address, + value, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_friend_set_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_friend_status_id: + { + const sl_btmesh_evt_config_client_friend_status_t *friend_status = + &evt->data.evt_config_client_friend_status; + + sl_status_t event_result = friend_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_friend_set_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "friend set (val=%d)", + self->ext.friend.value); +} + +// ----------------------------------------------------------------------------- +// Friend Get Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_friend_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_friend_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_friend_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_friend_get_create(void) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_FRIEND_GET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_friend_get_request; + self->on_event = btmesh_conf_task_friend_get_on_event; + self->destroy = btmesh_conf_task_friend_get_destroy; + self->to_string = btmesh_conf_task_friend_get_to_string; + self->ext.friend.value = BTMESH_CONF_FRIEND_VALUE_UNKNOWN; + } + return self; +} + +void btmesh_conf_task_friend_get_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_friend_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + + api_status = sl_btmesh_config_client_get_friend(enc_netkey_index, + server_address, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_friend_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_friend_status_id: + { + const sl_btmesh_evt_config_client_friend_status_t *friend_status = + &evt->data.evt_config_client_friend_status; + + sl_status_t event_result = friend_status->result; + event_status = process_event_result_from_api(self, event_result); + if (SL_STATUS_OK == event_result) { + self->ext.friend.value = friend_status->value; + } + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_friend_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + if (SL_STATUS_OK == self->result) { + return snprintf(buffer, + size, + "friend get (val=%d)", + self->ext.friend.value); + } else { + return snprintf(buffer, + size, + "friend get"); + } +} + +// ----------------------------------------------------------------------------- +// DCD Get Task Functions +// ----------------------------------------------------------------------------- + +#define DCD_FEATURE_RELAY_BYTE 0x00 +#define DCD_FEATURE_PROXY_BYTE 0x00 +#define DCD_FEATURE_FRIEND_BYTE 0x00 +#define DCD_FEATURE_LOW_POWER_BYTE 0x00 + +#define DCD_FEATURE_RELAY_MASK 0x01 +#define DCD_FEATURE_PROXY_MASK 0x02 +#define DCD_FEATURE_FRIEND_MASK 0x04 +#define DCD_FEATURE_LOW_POWER_MASK 0x08 + +#define DCD_RAW_VENDOR_ID_SIZE 2 + +typedef struct btmesh_conf_dcd_raw_element_t { + uint8_t location[2]; + uint8_t num_sig_model_ids; + uint8_t num_vendor_model_ids; + uint8_t models[]; +} btmesh_conf_dcd_raw_element_t; + +typedef struct btmesh_conf_dcd_raw_header_t { + uint8_t cid[2]; + uint8_t pid[2]; + uint8_t vid[2]; + uint8_t crpl[2]; + uint8_t features[2]; + uint8_t elements[]; +} btmesh_conf_dcd_raw_header_t; + +typedef enum btmesh_conf_task_dcd_iter_cmd_t { + BTMESH_CONF_TASK_DCD_ITER_CMD_CHECK_SIZE, + BTMESH_CONF_TASK_DCD_ITER_CMD_UPDATE_DB +} btmesh_conf_task_dcd_iter_cmd_t; + +static sl_status_t btmesh_conf_task_dcd_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t btmesh_conf_task_dcd_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static sl_status_t btmesh_conf_task_dcd_process(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address); + +static sl_status_t btmesh_conf_task_dcd_element_iterate(uint16_t enc_netkey_index, + uint16_t server_address, + const uint8_t *raw_dcd_data, + uint16_t raw_dcd_data_size, + btmesh_conf_task_dcd_iter_cmd_t command); + +static int32_t btmesh_conf_task_dcd_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_dcd_get_create(uint8_t page) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_DCD_GET); + if (NULL != self) { + self->conf_request = btmesh_conf_task_dcd_get_request; + self->on_event = btmesh_conf_task_dcd_get_on_event; + self->to_string = btmesh_conf_task_dcd_get_to_string; + self->destroy = btmesh_conf_task_dcd_get_destroy; + self->ext.dcd.page = page; + self->ext.dcd.raw_dcd_data = NULL; + self->ext.dcd.raw_dcd_data_size = 0; + } + return self; +} + +void btmesh_conf_task_dcd_get_destroy(btmesh_conf_task_t *self) +{ + free(self->ext.dcd.raw_dcd_data); + btmesh_conf_task_destroy(self); +} + +static sl_status_t btmesh_conf_task_dcd_get_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + + app_log_debug("Config task get dcd request " + "(nwkey=%d,addr=0x%04x,page=%d)" NL, + enc_netkey_index, + server_address, + self->ext.dcd.page); + // Make sure if this is a retry then dynamic memory allocated to store DCD data + // is deallocated in order to restore the initial state of the task. + if (0 != self->ext.dcd.raw_dcd_data_size) { + free(self->ext.dcd.raw_dcd_data); + self->ext.dcd.raw_dcd_data = NULL; + self->ext.dcd.raw_dcd_data_size = 0; + } + + api_status = sl_btmesh_config_client_get_dcd(enc_netkey_index, + server_address, + self->ext.dcd.page, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t btmesh_conf_task_dcd_get_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_dcd_data_id: + { + const sl_btmesh_evt_config_client_dcd_data_t *evt_dcd_data = + &evt->data.evt_config_client_dcd_data; + + const uint8_t *dcd_chunk_data = evt_dcd_data->data.data; + uint16_t dcd_chunk_size = evt_dcd_data->data.len; + uint16_t current_raw_dcd_data_size = self->ext.dcd.raw_dcd_data_size; + uint16_t new_raw_dcd_data_size = current_raw_dcd_data_size + dcd_chunk_size; + // If the pointer parameter of realloc is NULL then it behaves like malloc + uint8_t *reallocated_dcd_data_ptr = realloc(self->ext.dcd.raw_dcd_data, + new_raw_dcd_data_size); + + if (NULL == reallocated_dcd_data_ptr) { + // The get dcd task shall be cancelled in the stack due to memory issues + // on the host machine. The allocated memory will be released when the + // task object is destroyed. + event_status = SL_STATUS_ABORT; + self->result = SL_STATUS_ALLOCATION_FAILED; + } else { + self->ext.dcd.raw_dcd_data = reallocated_dcd_data_ptr; + memcpy(&self->ext.dcd.raw_dcd_data[current_raw_dcd_data_size], + dcd_chunk_data, + dcd_chunk_size); + self->ext.dcd.raw_dcd_data_size = new_raw_dcd_data_size; + } + break; + } + + case sl_btmesh_evt_config_client_dcd_data_end_id: + { + const sl_btmesh_evt_config_client_dcd_data_end_t *dcd_data_end_evt = + &evt->data.evt_config_client_dcd_data_end; + + sl_status_t event_result = dcd_data_end_evt->result; + event_status = process_event_result_from_api(self, event_result); + + if (SL_STATUS_OK == event_result) { + sl_status_t process_dcd_result; + process_dcd_result = btmesh_conf_task_dcd_process(self, + enc_netkey_index, + server_address); + self->result = process_dcd_result; + event_status = (SL_STATUS_OK == process_dcd_result) + ? SL_STATUS_OK : SL_STATUS_FAIL; + } + break; + } + + default: + break; + } + + return event_status; +} + +static sl_status_t btmesh_conf_task_dcd_process(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address) +{ + sl_status_t process_dcd_status = SL_STATUS_OK; + btmesh_db_node_t *node = btmesh_db_node_get_by_addr(server_address); + if (NULL == node) { + process_dcd_status = SL_STATUS_NOT_FOUND; + } else if (false != node->dcd_available) { + process_dcd_status = SL_STATUS_INVALID_STATE; + } else { + char node_str[SL_BTMESH_CONF_MAX_LOG_MSG_FRAGMENT_SIZE_CFG_VAL]; + uint16_t remaining_size = self->ext.dcd.raw_dcd_data_size; + btmesh_conf_dcd_raw_header_t *dcd_raw_hdr = + (btmesh_conf_dcd_raw_header_t*) self->ext.dcd.raw_dcd_data; + + if (remaining_size < sizeof(btmesh_conf_dcd_raw_header_t)) { + process_dcd_status = SL_STATUS_INVALID_COUNT; + } else { + if (btmesh_conf_any_severe_log_level(APP_LOG_LEVEL_INFO)) { + int32_t str_retval; + str_retval = snprintf(node_str, + sizeof(node_str), + "Node (netkey_idx=%d,addr=0x%04x)", + enc_netkey_index, + server_address); + app_assert(0 < str_retval, "String formatting failed." NL); + } + node_str[sizeof(node_str) - 1] = '\0'; + + uint16_t company_id = uint16_from_buf_le(&dcd_raw_hdr->cid[0]); + uint16_t product_id = uint16_from_buf_le(&dcd_raw_hdr->pid[0]); + uint16_t version_id = uint16_from_buf_le(&dcd_raw_hdr->vid[0]); + uint16_t min_replay_prot_list_len = uint16_from_buf_le(&dcd_raw_hdr->crpl[0]); + + bool feature_relay = dcd_raw_hdr->features[DCD_FEATURE_RELAY_BYTE] + & DCD_FEATURE_RELAY_MASK; + + bool feature_proxy = dcd_raw_hdr->features[DCD_FEATURE_PROXY_BYTE] + & DCD_FEATURE_PROXY_MASK; + + bool feature_friend = dcd_raw_hdr->features[DCD_FEATURE_FRIEND_BYTE] + & DCD_FEATURE_FRIEND_MASK; + + bool feature_low_power = dcd_raw_hdr->features[DCD_FEATURE_LOW_POWER_BYTE] + & DCD_FEATURE_LOW_POWER_MASK; + + sl_status_t dcd_status = btmesh_db_node_dcd_set_header(server_address, + company_id, + product_id, + version_id, + min_replay_prot_list_len, + feature_relay, + feature_proxy, + feature_friend, + feature_low_power); + app_log_info("%s DCD company id: 0x%04x" NL, node_str, company_id); + app_log_info("%s DCD product id: 0x%04x" NL, node_str, product_id); + app_log_info("%s DCD version id: 0x%04x" NL, node_str, version_id); + app_log_info("%s DCD min replay prot list length: %d" NL, + node_str, + min_replay_prot_list_len); + app_log_info("%s DCD feature relay: %d" NL, node_str, feature_relay); + app_log_info("%s DCD feature proxy: %d" NL, node_str, feature_proxy); + app_log_info("%s DCD feature friend: %d" NL, node_str, feature_friend); + app_log_info("%s DCD feature lpn: %d" NL, node_str, feature_low_power); + if (SL_STATUS_OK != process_dcd_status) { + process_dcd_status = dcd_status; + } else { + sl_status_t check_dcd_status = + btmesh_conf_task_dcd_element_iterate(enc_netkey_index, + server_address, + self->ext.dcd.raw_dcd_data, + self->ext.dcd.raw_dcd_data_size, + BTMESH_CONF_TASK_DCD_ITER_CMD_CHECK_SIZE); + if (SL_STATUS_OK != check_dcd_status) { + process_dcd_status = dcd_status; + } else { + sl_status_t update_db_status = + btmesh_conf_task_dcd_element_iterate(enc_netkey_index, + server_address, + self->ext.dcd.raw_dcd_data, + self->ext.dcd.raw_dcd_data_size, + BTMESH_CONF_TASK_DCD_ITER_CMD_UPDATE_DB); + process_dcd_status = update_db_status; + if (SL_STATUS_OK != update_db_status) { + sl_status_t dcd_clear_status = btmesh_db_node_dcd_clear(server_address); + app_assert_status_f(dcd_clear_status, + "Failed to clear DCD of node (addr=0x%04x)" NL, + server_address); + } else { + sl_status_t dcd_available_status = + btmesh_db_node_dcd_set_available(server_address); + // This call should not fail because it can fail only if the node + // does not exists but in that case the previous calls would have + // failed as well. + app_assert_status_f(dcd_available_status, + "Failed to set DCD available of node (addr=0x%04x)" NL, + server_address); + } + } + } + } + } + return process_dcd_status; +} + +/// Iterate over the elements and models of each element in the DCD and performs +/// the following operations: +/// - It checks if the size of the DCD raw data is consistent with its content +/// - If @p command is set to BTMESH_CONF_TASK_DCD_ITER_CMD_UPDATE_DB then +/// it updates the BT Mesh database with elements and models parsed from +/// the raw DCD data. The parsed elements and models are logged. +static sl_status_t btmesh_conf_task_dcd_element_iterate(uint16_t enc_netkey_index, + uint16_t server_address, + const uint8_t *raw_dcd_data, + uint16_t raw_dcd_data_size, + btmesh_conf_task_dcd_iter_cmd_t command) +{ + const uint16_t sig_model_size = 2, vendor_model_size = 4; + uint16_t remaining_size = raw_dcd_data_size; + uint16_t data_idx = 0; + uint16_t element_index = 0; + char node_str[SL_BTMESH_CONF_MAX_LOG_MSG_FRAGMENT_SIZE_CFG_VAL]; + + if (remaining_size < sizeof(btmesh_conf_dcd_raw_header_t)) { + return SL_STATUS_INVALID_COUNT; + } + remaining_size -= sizeof(btmesh_conf_dcd_raw_header_t); + data_idx += sizeof(btmesh_conf_dcd_raw_header_t); + + if (btmesh_conf_any_severe_log_level(APP_LOG_LEVEL_INFO)) { + int32_t str_retval; + str_retval = snprintf(node_str, + sizeof(node_str), + "Node (netkey_idx=%d,addr=0x%04x)", + enc_netkey_index, + server_address); + app_assert(0 < str_retval, "String formatting failed." NL); + } + node_str[sizeof(node_str) - 1] = '\0'; + + while (0 < remaining_size) { + uint16_t total_element_size; + + if (remaining_size < sizeof(btmesh_conf_dcd_raw_element_t)) { + return SL_STATUS_INVALID_COUNT; + } + const btmesh_conf_dcd_raw_element_t *element = + (const btmesh_conf_dcd_raw_element_t *)&raw_dcd_data[data_idx]; + + uint8_t num_sig_model_ids = element->num_sig_model_ids; + uint8_t num_vendor_model_ids = element->num_vendor_model_ids; + uint16_t element_model_data_size = (num_sig_model_ids * sig_model_size) + + (num_vendor_model_ids * vendor_model_size); + + total_element_size = sizeof(btmesh_conf_dcd_raw_element_t) + + element_model_data_size; + + if (remaining_size < total_element_size) { + return SL_STATUS_INVALID_COUNT; + } + + if (BTMESH_CONF_TASK_DCD_ITER_CMD_UPDATE_DB == command) { + uint16_t location = uint16_from_buf_le(&element->location[0]); + sl_status_t add_elem_status = btmesh_db_node_dcd_add_element(server_address, + location); + app_log_info("%s DCD element index %u with location 0x%04x " + "(sig_models=%u,vendor_models=%u)" NL, + node_str, + element_index, + location, + num_sig_model_ids, + num_vendor_model_ids); + if (SL_STATUS_OK != add_elem_status) { + return add_elem_status; + } + + const uint8_t *models_data = element->models; + uint16_t model_data_idx; + btmesh_db_model_id_t model_id; + + // Process SIG models + for (model_data_idx = 0; + model_data_idx < (num_sig_model_ids * sig_model_size); + model_data_idx += sig_model_size) { + model_id.vendor = MESH_SPEC_VENDOR_ID; + model_id.model = uint16_from_buf_le(&models_data[model_data_idx]); + sl_status_t add_mdl_status = btmesh_db_node_dcd_add_model(server_address, + element_index, + model_id); + app_log_info("%s DCD SIG model 0x%04x-%s (elem=%u)" NL, + node_str, + model_id.model, + btmesh_conf_sig_model_id_to_string(model_id.model), + element_index); + if (SL_STATUS_OK != add_mdl_status) { + return add_mdl_status; + } + } + + // Process vendor models + for (; model_data_idx < element_model_data_size; + model_data_idx += vendor_model_size) { + model_id.vendor = uint16_from_buf_le(&models_data[model_data_idx]); + model_id.model = uint16_from_buf_le(&models_data[model_data_idx + sizeof(uint16_t)]); + sl_status_t add_mdl_status = btmesh_db_node_dcd_add_model(server_address, + element_index, + model_id); + app_log_info("%s DCD vendor model 0x%04x (elem=%u,vendor=0x%04x)" NL, + node_str, + model_id.model, + element_index, + model_id.vendor); + if (SL_STATUS_OK != add_mdl_status) { + return add_mdl_status; + } + } + } + + remaining_size -= total_element_size; + data_idx += total_element_size; + element_index++; + } + return SL_STATUS_OK; +} + +static int32_t btmesh_conf_task_dcd_get_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "DCD get (page=%d)", + self->ext.dcd.page); +} + +// ----------------------------------------------------------------------------- +// Reset Node Task Functions +// ----------------------------------------------------------------------------- +static sl_status_t +btmesh_conf_task_reset_node_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +static sl_status_t +btmesh_conf_task_reset_node_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + +static int32_t btmesh_conf_task_reset_node_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + +btmesh_conf_task_t *btmesh_conf_task_reset_node_create(void) +{ + btmesh_conf_task_t *self; + self = btmesh_conf_task_create(BTMESH_CONF_TASK_ID_RESET_NODE); + if (NULL != self) { + self->conf_request = btmesh_conf_task_reset_node_request; + self->on_event = btmesh_conf_task_reset_node_on_event; + self->destroy = btmesh_conf_task_reset_node_destroy; + self->to_string = btmesh_conf_task_reset_node_to_string; + } + return self; +} + +void btmesh_conf_task_reset_node_destroy(btmesh_conf_task_t *self) +{ + btmesh_conf_task_destroy(self); +} + +static sl_status_t +btmesh_conf_task_reset_node_request(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) +{ + sl_status_t request_status, api_status; + + api_status = sl_btmesh_config_client_reset_node(enc_netkey_index, + server_address, + handle); + + request_status = process_request_status_from_api(self, api_status); + return request_status; +} + +static sl_status_t +btmesh_conf_task_reset_node_on_event(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt) +{ + sl_status_t event_status = SL_STATUS_IN_PROGRESS; + + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_config_client_reset_status_id: + { + const sl_btmesh_evt_config_client_reset_status_t *reset_status = + &evt->data.evt_config_client_reset_status; + + sl_status_t event_result = reset_status->result; + event_status = process_event_result_from_api(self, event_result); + break; + } + } + return event_status; +} + +static int32_t btmesh_conf_task_reset_node_to_string(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size) +{ + return snprintf(buffer, + size, + "node reset"); +} + +/** @} (end addtogroup btmesh_conf_task) */ +/** @} (end addtogroup btmesh_conf) */ diff --git a/app/btmesh/common_host/btmesh_conf/btmesh_conf_task.h b/app/btmesh/common_host/btmesh_conf/btmesh_conf_task.h new file mode 100644 index 00000000000..c3cbb99c374 --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/btmesh_conf_task.h @@ -0,0 +1,1143 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Configurator Component - Task + ******************************************************************************* + * # License + * Copyright 2021 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 BTMESH_CONF_TASK_H +#define BTMESH_CONF_TASK_H + +#include +#include "sl_status.h" +#include "sl_btmesh_api.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/***************************************************************************//** + * @addtogroup btmesh_conf BT Mesh Configurator Component + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_task BT Mesh Configuration Task + * @brief BT Mesh Configuration Tasks implement the different configuration + * procedures to set and get configuration server state of a node. + * @n Each specific configuration task type implements the interface specified + * in @ref btmesh_conf_task_t structure. + * @{ + ******************************************************************************/ + +/// BT Mesh Configuration Task result is unknown because it is not finished yet +#define BTMESH_CONF_TASK_RESULT_UNKNOWN ((sl_status_t) 0xFFFFFFFF) + +/// BT Mesh Configuration Task identifiers +typedef enum btmesh_conf_task_id_t { + /// Add application key + BTMESH_CONF_TASK_ID_APPKEY_ADD, + /// Remove application key + BTMESH_CONF_TASK_ID_APPKEY_REMOVE, + /// List application keys (all) + BTMESH_CONF_TASK_ID_APPKEY_LIST, + /// Bind application key to model + BTMESH_CONF_TASK_ID_MODEL_BIND, + /// Unbind application key to model + BTMESH_CONF_TASK_ID_MODEL_UNBIND, + /// List application keys bound to model + BTMESH_CONF_TASK_ID_MODEL_BINDINGS_LIST, + /// Set model publication data + BTMESH_CONF_TASK_ID_MODEL_PUB_SET, + /// Get model publication data + BTMESH_CONF_TASK_ID_MODEL_PUB_GET, + /// Add address to subscription list of a model + BTMESH_CONF_TASK_ID_MODEL_SUB_ADD, + /// Overwrite existing address in the subscription list of a model + BTMESH_CONF_TASK_ID_MODEL_SUB_SET, + /// Remove address from the subscription list of a model + BTMESH_CONF_TASK_ID_MODEL_SUB_REMOVE, + /// Clear addresses from the subscription list of a model + BTMESH_CONF_TASK_ID_MODEL_SUB_CLEAR, + /// List addresses in the subscription list of a model + BTMESH_CONF_TASK_ID_MODEL_SUB_LIST, + /// Set Beacon + BTMESH_CONF_TASK_ID_BEACON_SET, + /// Get Beacon + BTMESH_CONF_TASK_ID_BEACON_GET, + /// Set default TTL + BTMESH_CONF_TASK_ID_DEFAULT_TTL_SET, + /// Get default TTL + BTMESH_CONF_TASK_ID_DEFAULT_TTL_GET, + /// Set proxy feature + BTMESH_CONF_TASK_ID_GATT_PROXY_SET, + /// Get proxy feature + BTMESH_CONF_TASK_ID_GATT_PROXY_GET, + /// Set relay feature (feature turn on/off and retransmission parameters) + BTMESH_CONF_TASK_ID_RELAY_SET, + /// Get relay feature (feature on/off and retransmission parameters) + BTMESH_CONF_TASK_ID_RELAY_GET, + /// Set network transmit count and interval + BTMESH_CONF_TASK_ID_NETWORK_TRANSMIT_SET, + /// Get network transmit count and interval + BTMESH_CONF_TASK_ID_NETWORK_TRANSMIT_GET, + /// Set friend feature + BTMESH_CONF_TASK_ID_FRIEND_SET, + /// Get friend feature + BTMESH_CONF_TASK_ID_FRIEND_GET, + /// Get Device Composition Data + BTMESH_CONF_TASK_ID_DCD_GET, + /// Reset remote node + BTMESH_CONF_TASK_ID_RESET_NODE, + /// Number of configuration tasks + BTMESH_CONF_TASK_ID_COUNT, + /// Invalid configuration task + BTMESH_CONF_TASK_ID_INVALID +} btmesh_conf_task_id_t; + +/// Task specific data of add/remove application key data +typedef struct { + /// Index of the application key + uint16_t appkey_index; + /// Index of the network key which the application key is bound to + uint16_t netkey_index; +} btmesh_conf_task_appkey_t; + +/// Task specific data of list application keys (all) +typedef struct { + /// Network key index for the key used as the query parameter + uint16_t netkey_index; + /// List of application key indexes which are bound to the network key index + uint16_t *appkey_indexes; + /// Number of application key indexes which are bound to the network key index + uint16_t appkey_count; +} btmesh_conf_task_appkey_list_t; + +/// Task specific data of bind/unbind application key to model +typedef struct { + /// Index of the element where the model resides on the node + uint8_t elem_index; + /// Vendor ID for the model (0xFFFF for Bluetooth SIG models) + uint16_t vendor_id; + /// Model ID for the model + uint16_t model_id; + /// Index of the application key bound to the model + uint16_t appkey_index; +} btmesh_conf_task_model_binding_t; + +/// Task specific data of list application keys bound to model +typedef struct { + /// Index of the element where the model resides on the node + uint8_t elem_index; + /// Vendor ID for the model (0xFFFF for Bluetooth SIG models) + uint16_t vendor_id; + /// Model ID for the model + uint16_t model_id; + /// List of key indexes for the application keys which are bound to a model + uint16_t *appkey_indexes; + /// Number of key indexes for the application keys which are bound to a model + uint16_t appkey_count; +} btmesh_conf_task_model_bindings_list_t; + +/// Task specific data of set/get model publication data +typedef struct { + /// Index of the element where the model resides on the node + uint8_t elem_index; + /// Vendor ID for the model (0xFFFF for Bluetooth SIG models) + uint16_t vendor_id; + /// Model ID for the model + uint16_t model_id; + /// @brief The unicast or group address to publish to. + /// It can also be the unassigned address to stop the model from publishing. + /// Note: Task type determines whether @p address or @p va_addres is used. + uint16_t address; + /// @brief The virtual address to publish to. + /// Note: Task type determines whether @p address or @p va_addres is used. + uuid_128 va_address; + /// The application key index to use for the published messages. + uint16_t appkey_index; + /// @brief Friendship credential flag. If zero, publication is done using + /// normal credentials. If one, it is done with friendship credentials, + /// meaning only the friend can decrypt the published message and relay it + /// forward using the normal credentials. The default value is 0. + uint8_t credentials; + /// Publication time-to-live value + uint8_t ttl; + /// @brief Publication period in milliseconds. Note that the resolution of the + /// publication period is limited by the specification to 100 ms up to a + /// period of 6.3 s, 1 s up to a period of 63 s, 10 s up to a period + /// of 630 s, and 10 minutes above that. Maximum period allowed is 630 minutes. + uint32_t period_ms; + /// Publication retransmission count. Valid values range from 0 to 7. + uint8_t retransmit_count; + /// @brief Publication retransmission interval in millisecond units. The range of + /// value is 50 to 1600 ms, and the resolution of the value is 50 milliseconds. + uint16_t retransmit_interval_ms; +} btmesh_conf_task_model_pub_t; + +/// @brief Task specific data of the following model subscription list operations +/// - Add address to model subscription list +/// - Set address to model subscription list (clear list & add group address) +/// - Remove address to model subscription list +typedef struct { + /// Index of the element where the model resides on the node + uint8_t elem_index; + /// Vendor ID for the model (0xFFFF for Bluetooth SIG models) + uint16_t vendor_id; + /// Model ID for the model + uint16_t model_id; + /// @brief The group address in the subscription list. + /// Note: Task type determines whether @ref sub_address or @ref sub_address_va + /// is used. + uint16_t sub_address; + /// @brief The full virtual address in the subscription list. + /// Note: Task type determines whether @ref sub_address or @ref sub_address_va + /// is used. + uuid_128 sub_address_va; +} btmesh_conf_task_model_sub_t; + +/// Task specific data of clear addresses from the subscription list of a model +typedef struct { + /// Index of the element where the model resides on the node + uint8_t elem_index; + /// Vendor ID for the model (0xFFFF for Bluetooth SIG models) + uint16_t vendor_id; + /// Model ID for the model + uint16_t model_id; +} btmesh_conf_task_model_sub_clear_t; + +/// Task specific data of list addresses in the subscription list of a model +typedef struct { + /// Index of the element where the model resides on the node + uint8_t elem_index; + /// Vendor ID for the model (0xFFFF for Bluetooth SIG models) + uint16_t vendor_id; + /// Model ID for the model + uint16_t model_id; + /// @brief List of subscription addresses + /// @n If the subscription address list entry is a Label UUID + /// (full virtual address) then the corresponding virtual address + /// hash is returned in this event. + uint16_t *addresses; + /// Number of subscription addresses + uint16_t address_count; +} btmesh_conf_task_model_sub_list_t; + +/// Task specific data of set/get Beacon +typedef struct { + /// @brief Secure network beacon value. Valid values are: + /// - 0: Node is not broadcasting secure network beacons + /// - 1: Node is broadcasting secure network beacons + uint8_t value; +} btmesh_conf_task_beacon_t; + +/// Task specific data of set/get default TTL +typedef struct { + /// @brief Default TTL value. Valid value range is from 2 to 127 for relayed + /// PDUs, and 0 to indicate none - relayed PDUs + uint8_t ttl; +} btmesh_conf_task_default_ttl_t; + +/// Task specific data of set/get proxy feature +typedef struct { + /// @brief GATT proxy value. Valid values are: + /// - 0: Proxy feature is disabled + /// - 1: Proxy feature is enabled + uint8_t value; +} btmesh_conf_task_gatt_proxy_t; + +/// Task specific data of set/get relay feature +typedef struct { + /// @brief Relay value. Valid values are: + /// - 0: Relay feature is disabled + /// - 1: Relay feature is enabled + uint8_t value; + /// @brief Relay retransmit count. Valid values range from 0 to 7; + /// default value is 0 (no retransmissions). + uint8_t retransmit_count; + /// @brief Relay retransmit interval in milliseconds. + /// Valid values range from 10 ms to 320 ms, with a resolution of 10 ms. + /// The value is ignored if the retransmission count is set to zero. + uint16_t retransmit_interval_ms; +} btmesh_conf_task_relay_t; + +/// Task specific data of set/get network transmit count and interval +typedef struct { + /// @brief Network transmit count. Valid values range from 1 to 8; + /// default value is 1 (single transmission; no retransmissions). + uint8_t transmit_count; + /// @brief Network transmit interval in milliseconds. + /// Valid values range from 10 ms to 320 ms, with a resolution of 10 ms. + /// The value is ignored if the transmission count is set to one. + uint16_t transmit_interval_ms; +} btmesh_conf_task_network_transmit_t; + +/// Task specific data of set/get friend feature +typedef struct { + /// @brief Friend value. Valid values are: + /// - 0: Friend feature is not enabled + /// - 1: Friend feature is enabled + uint8_t value; +} btmesh_conf_task_friend_t; + +/// Task specific data of get Device Composition Data (DCD) +typedef struct { + /// Composition data page containing data + uint8_t page; + /// Raw DCD data of the remote node + uint8_t *raw_dcd_data; + /// Size of raw DCD data + uint16_t raw_dcd_data_size; +} btmesh_conf_task_dcd_get_t; + +/// Union of BT Mesh Configuration Task specific data structures +typedef union btmesh_conf_task_ext_t { + /// Task specific data of add/remove application key data + btmesh_conf_task_appkey_t appkey; + /// Task specific data of list application keys (all) + btmesh_conf_task_appkey_list_t appkey_list; + /// Task specific data of bind/unbind application key to model + btmesh_conf_task_model_binding_t model_binding; + /// Task specific data of list application keys bound to model + btmesh_conf_task_model_bindings_list_t model_bindings_list; + /// Task specific data of set/get model publication data + btmesh_conf_task_model_pub_t model_pub; + /// Task specific data of add/set/remove model subscription list operations + btmesh_conf_task_model_sub_t model_sub; + /// Task specific data of clear addresses from the subscription list of a model + btmesh_conf_task_model_sub_clear_t model_sub_clear; + /// Task specific data of list addresses in the subscription list of a model + btmesh_conf_task_model_sub_list_t model_sub_list; + /// Task specific data of set/get beacon + btmesh_conf_task_beacon_t beacon; + /// Task specific data of set/get default TTL + btmesh_conf_task_default_ttl_t default_ttl; + /// Task specific data of set/get proxy feature + btmesh_conf_task_gatt_proxy_t gatt_proxy; + /// Task specific data of set/get relay feature + btmesh_conf_task_relay_t relay; + /// Task specific data of set/get network transmit count and interval + btmesh_conf_task_network_transmit_t network_transmit; + /// Task specific data of set/get friend feature + btmesh_conf_task_friend_t friend; + /// Task specific data of get Device Composition Data (DCD) + btmesh_conf_task_dcd_get_t dcd; +} btmesh_conf_task_ext_t; + +typedef struct btmesh_conf_task_t btmesh_conf_task_t; + +/// @brief BT Mesh Configuration Task is abstraction of configuration procedures +/// @n The specific configuration tasks are instances of this structure with +/// different task identifiers and function pointers (e.g. @p conf_request, +/// @p on_event etc.) furthermore different members of the +/// @p btmesh_conf_task_ext_t union is used based on the task type. +struct btmesh_conf_task_t { + /// Task identifier which determines the specific task type + btmesh_conf_task_id_t task_id; + /// @brief Task result. + /// Initialized to @ref BTMESH_CONF_TASK_RESULT_UNKNOWN and it set to the + /// final value at the end of task. + /// @n If the configuration task was successful then it is set to SL_STATUS_OK. + /// @n If @p conf_request or @p on_event fails then it set to an error code + /// returned by the BT Mesh Stack. + sl_status_t result; + /// @brief Abstract configuration request which sends the task specific + /// configuration request to the configuration server on a node. + /// @param[in] self Pointer to the configuration task instance + /// @param[in] enc_netkey_index Network key used to encrypt the config request + /// @param[in] server_address Destination node primary element address + /// @param[out] handle BT Mesh Stack configuration handle which is returned + /// by the BT Mesh Stack configuration request (BT Mesh Stack API) + /// @return Task request status + /// @retval SL_STATUS_OK If request is accepted. + /// @retval SL_STATUS_BUSY If request is rejected due to busy lower layers. + /// @retval SL_STATUS_FAIL If request is rejected due to unrecoverable error. + sl_status_t (*conf_request)(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + /// @brief Abstract configuration event handler which processes the BT Mesh + /// Stack event. + /// @n Only those BT Mesh Configuration Client events shall be forwarded to + /// this task event handler which matches the configuration handle of the last + /// @p conf_request in order to make task implementation simpler. + /// @param[in] self Pointer to the configuration task instance + /// @param[in] enc_netkey_index Network key used to encrypt the config request + /// @param[in] server_address Destination node primary element address + /// @param[in] evt BT Mesh Stack event + /// @return Current status of the task. + /// @retval SL_STATUS_OK Task is finished successfully. + /// @retval SL_STATUS_IN_PROGRESS Task is waiting for additional events. + /// @retval SL_STATUS_TIMEOUT Task timed out while it was waiting for events. + /// @retval SL_STATUS_FAIL Task failed due to server side error. + /// @retval SL_STATUS_ABORT Task failed unexpectedly and config task shall be. + /// aborted so cancellation of config request is required. + sl_status_t (*on_event)(btmesh_conf_task_t *const self, + uint16_t enc_netkey_index, + uint16_t server_address, + const sl_btmesh_msg_t *evt); + /// @brief Abstract function which provides the string representation of the + /// configuration task. + /// @n The function always writes null terminated string into the @p buffer. + /// @param[in] self Pointer to the configuration task instance + /// @param[out] buffer Buffer where the string representation is written to + /// @param[in] size Size of the output @p buffer + /// @return Return value of functions shall be interpreted as snprintf. + int32_t (*to_string)(btmesh_conf_task_t *const self, + char *buffer, + uint32_t size); + /// @brief Deallocation of BT Mesh Configuration Task instance + /// @param[in] self Pointer to the configuration task instance + void (*destroy)(btmesh_conf_task_t *const self); + /// Next task if this task is successful (@p result is SL_STATUS_OK) + btmesh_conf_task_t *next_on_success; + /// Next task if this task fails (@p result is not SL_STATUS_OK) + btmesh_conf_task_t *next_on_failure; + /// @brief Task specific data (parameters, runtime data, results) + /// @n Union of task specific data structures. + btmesh_conf_task_ext_t ext; +}; + +/***************************************************************************//** + * Create generic BT Mesh Configuration Task + * + * @param[in] task_id Task identifier which shall be set + * @return Created configuration task. + * @retval NULL If the configuration task creation fails. + * + * Allocates and initializes a generic configuration task. + * @warning This function shall be called from derived (specific) configuration + * task create functions only to create an initialized task instance which + * is further customized by the specific configuration task create function. + * For example @ref btmesh_conf_task_appkey_add_create. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_create(btmesh_conf_task_id_t task_id); + +/***************************************************************************//** + * Deallocates the BT Mesh Configuration Task instance + * + * @param[in] self Pointer to the configuration task which shall be destroyed + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Set next task pointers of the BT Mesh Configuration Task to the specified + * other task. + * + * @param[in] self Pointer to the configuration task + * @param[in] next_task Next task which shall be executed after this task (@p self) + * @returns Status of next task setup. + * @retval SL_STATUS_OK If the next task is set successfully. + * @retval SL_STATUS_NULL_POINTER If @p self or @p next_task is NULL. + * @retval SL_STATUS_INVALID_PARAMETER If the @p self and @p next_task is the + * same or the next task of @p next_task is not NULL. + * + * The task which shall be executed after the end of @p self task is set to + * @p next_task. The @p next_task is independent from the result of @p self task. + * + * @warning It is expected that the @p next_task does not have any next task + * when this function is called in order to guarantee that there will be no + * cyclic references in the task tree. Therefore, the task tree shall be built + * in the order of execution. This is enforced by the implementation and + * SL_STATUS_INVALID_PARAMETER is returned if this rule is not respected. + ******************************************************************************/ +sl_status_t btmesh_conf_task_set_next_unconditional(btmesh_conf_task_t *self, + btmesh_conf_task_t *const next_task); + +/***************************************************************************//** + * Set next task pointer of the BT Mesh Configuration Task to the specified + * other task if this task is completed successfully. + * + * @param[in] self Pointer to the configuration task + * @param[in] next_task Next task which shall be executed if this task (@p self) + * is completed successfully. + * @returns Status of next task setup. + * @retval SL_STATUS_OK If the next task is set successfully. + * @retval SL_STATUS_NULL_POINTER If @p self or @p next_task is NULL. + * @retval SL_STATUS_INVALID_PARAMETER If the @p self and @p next_task is the + * same or the next task of @p next_task is not NULL. + * + * @warning It is expected that the @p next_task does not have any next task + * when this function is called in order to guarantee that there will be no + * cyclic references in the task tree. Therefore, the task tree shall be built + * in the order of execution. This is enforced by the implementation and + * SL_STATUS_INVALID_PARAMETER is returned if this rule is not respected. + ******************************************************************************/ +sl_status_t btmesh_conf_task_set_next_on_success(btmesh_conf_task_t *self, + btmesh_conf_task_t *const next_task); + +/***************************************************************************//** + * Set next task pointer of the BT Mesh Configuration Task to the specified + * other task if this task fails. + * + * @param[in] self Pointer to the configuration task + * @param[in] next_task Next task which shall be executed if this task + * (@p self) fails. + * @returns Status of next task setup. + * @retval SL_STATUS_OK If the next task is set successfully. + * @retval SL_STATUS_NULL_POINTER If @p self or @p next_task is NULL. + * @retval SL_STATUS_INVALID_PARAMETER If the @p self and @p next_task is the + * same or the next task of @p next_task is not NULL. + * + * @warning It is expected that the @p next_task does not have any next task + * when this function is called in order to guarantee that there will be no + * cyclic references in the task tree. Therefore, the task tree shall be built + * in the order of execution. This is enforced by the implementation and + * SL_STATUS_INVALID_PARAMETER is returned if this rule is not respected. + ******************************************************************************/ +sl_status_t btmesh_conf_task_set_next_on_failure(btmesh_conf_task_t *self, + btmesh_conf_task_t *const next_task); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to add an application key to a node. + * + * @param[in] appkey_index Index of the application key + * @param[in] netkey_index Index of the network key which the application key + * is bound to + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_appkey_add_create(uint16_t appkey_index, + uint16_t netkey_index); +/***************************************************************************//** + * Deallocation of Add Application Key BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_appkey_add_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to remove an application key from a node. + * + * @param[in] appkey_index Index of the application key + * @param[in] netkey_index Index of the network key which the application key + * is bound to + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_appkey_remove_create(uint16_t appkey_index, + uint16_t netkey_index); + +/***************************************************************************//** + * Deallocation of Remove Application Key BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_appkey_remove_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to list the application keys on a node. + * + * @param[in] netkey_index Network key index for the key used as query parameter + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_appkey_list_create(uint16_t netkey_index); + +/***************************************************************************//** + * Deallocation of List Application Keys BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_appkey_list_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to bind an application key to a model. + * + * @param[in] elem_index Index of the element where the model resides on the node + * @param[in] vendor_id Vendor ID for the model (0xFFFF for Bluetooth SIG models) + * @param[in] model_id Model ID for the model + * @param[in] appkey_index Index of the application key to bind to the model + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_model_bind_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t appkey_index); + +/***************************************************************************//** + * Deallocation of Bind Model BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_model_bind_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to unbind an application key from a model. + * + * @param[in] elem_index Index of the element where the model resides on the node + * @param[in] vendor_id Vendor ID for the model (0xFFFF for Bluetooth SIG models) + * @param[in] model_id Model ID for the model + * @param[in] appkey_index Index of the application key to unbind from the model + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_model_unbind_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t appkey_index); +/***************************************************************************//** + * Deallocation of Unbind Model BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_model_unbind_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to list application key bindings of a model. + * + * @param[in] elem_index Index of the element where the model resides on the node + * @param[in] vendor_id Vendor ID for the model (0xFFFF for Bluetooth SIG models) + * @param[in] model_id Model ID for the model + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_model_bindings_list_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id); + +/***************************************************************************//** + * Deallocation of BT List Model Bindings Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_model_bindings_list_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to set the model publication state. + * + * @param[in] elem_index Index of the element where the model resides on the node. + * @param[in] vendor_id Vendor ID for the model. (0xFFFF for Bluetooth SIG models) + * @param[in] model_id Model ID for the model. + * @param[in] address The unicast or group address to publish to. It can also be + * the unassigned address to stop the model from publishing. + * @param[in] appkey_index Application key index to use for published messages. + * @param[in] credentials Friendship credential flag. The default value is 0. + * - If zero, publication is done using normal credentials. + * - If one, it is done with friendship credentials, meaning only the friend + * can decrypt the published message and relay it forward using the normal + * credentials. + * @param[in] ttl Publication time-to-live value + * @param[in] period_ms Publication period in milliseconds. + * Note that the resolution of the publication period is limited by the + * specification to 100ms up to a period of 6.3s, 1s up to a period of 63s, + * 10s up to a period of 630s, and 10 minutes above that. + * Maximum period allowed is 630 minutes. + * @param[in] retransmit_count Publication retransmission count. Valid values + * range from 0 to 7. + * @param[in] retransmit_interval_ms Publication retransmission interval in + * millisecond units. The range of value is 50 to 1600 ms, and the resolution + * of the value is 50 milliseconds. + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_model_pub_set_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t address, + uint16_t appkey_index, + uint8_t credentials, + uint8_t ttl, + uint32_t period_ms, + uint8_t retransmit_count, + uint16_t retransmit_interval_ms); + +/***************************************************************************//** + * Deallocation of Set Model Publication BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_model_pub_set_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to get the model publication state. + * + * @param[in] elem_index Index of the element where the model resides on the node. + * @param[in] vendor_id Vendor ID for the model. (0xFFFF for Bluetooth SIG models) + * @param[in] model_id Model ID for the model. + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_model_pub_get_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id); +/***************************************************************************//** + * Deallocation of Get Model Publication BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_model_pub_get_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to add an address to the model + * subscription list. + * + * @param[in] elem_index Index of the element where the model resides on the node. + * @param[in] vendor_id Vendor ID for the model. (0xFFFF for Bluetooth SIG models) + * @param[in] model_id Model ID for the model. + * @param[in] sub_address Group address which shall be added to the subscription + * list of the model. + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_model_sub_add_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address); + +/***************************************************************************//** + * Deallocation of Add Model Subscription BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_model_sub_add_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to set (overwrite) model subscription + * address list to a single address. + * See Config Model Subscription Overwrite BT Mesh message in foundation models + * chapter of BT Mesh Profile Specification. + * + * @param[in] elem_index Index of the element where the model resides on the node. + * @param[in] vendor_id Vendor ID for the model. (0xFFFF for Bluetooth SIG models) + * @param[in] model_id Model ID for the model. + * @param[in] sub_address Group address which shall be added to the cleared + * subscription list of the model. + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_model_sub_set_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address); + +/***************************************************************************//** + * Deallocation of Set Model Subscription BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_model_sub_set_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to remove an address from the model + * subscription list. + * + * @param[in] elem_index Index of the element where the model resides on the node. + * @param[in] vendor_id Vendor ID for the model. (0xFFFF for Bluetooth SIG models) + * @param[in] model_id Model ID for the model. + * @param[in] sub_address Group address which shall be removed from the + * subscription list of the model. + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_model_sub_remove_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address); +/***************************************************************************//** + * Deallocation of Remove Model Subscription BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_model_sub_remove_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to clear (empty) the model subscription + * address list. + * + * @param[in] elem_index Index of the element where the model resides on the node. + * @param[in] vendor_id Vendor ID for the model. (0xFFFF for Bluetooth SIG models) + * @param[in] model_id Model ID for the model. + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_model_sub_clear_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id); + +/***************************************************************************//** + * Deallocation of Clear Model Subscription List BT Mesh Configuration + * Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_model_sub_clear_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to get the subscription address list of + * a model. + * + * @param[in] elem_index Index of the element where the model resides on the node. + * @param[in] vendor_id Vendor ID for the model. (0xFFFF for Bluetooth SIG models) + * @param[in] model_id Model ID for the model. + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_model_sub_list_create(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id); +/***************************************************************************//** + * Deallocation of List Model Subscription BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_model_sub_list_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to set node beacon state. + * + * @param[in] beacon Beacon value. + * Valid values are: + * - 0: Node is not broadcasting secure network beacons + * - 1: Node is broadcasting secure network beacons + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_beacon_set_create(uint8_t value); + +/***************************************************************************//** + * Deallocation of Set Beacon BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_beacon_set_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to get node beacon state. + * + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_beacon_get_create(void); + +/***************************************************************************//** + * Deallocation of Get Beacon BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_beacon_get_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to set node default TTL state. + * + * @param[in] default_ttl Default TTL value. Valid value range is from 2 to 127 + * for relayed PDUs, and 0 to indicate non-relayed PDUs. + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_default_ttl_set_create(uint8_t default_ttl); + +/***************************************************************************//** + * Deallocation of Set Default TTL BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_default_ttl_set_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to get node default TTL state. + * + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_default_ttl_get_create(void); + +/***************************************************************************//** + * Deallocation of Get Default TTL BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_default_ttl_get_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to set node GATT proxy state. + * + * @param[in] value GATT proxy value to set. + * Valid values are: + * - 0: Proxy feature is disabled + * - 1: Proxy feature is enabled + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_gatt_proxy_set_create(uint8_t value); + +/***************************************************************************//** + * Deallocation of Set GATT Proxy BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_gatt_proxy_set_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to get node GATT proxy state. + * + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_gatt_proxy_get_create(void); + +/***************************************************************************//** + * Deallocation of Get GATT Proxy BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_gatt_proxy_get_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to set node relay state. + * + * @param[in] value Relay value to set. + * Valid values are: + * - 0: Relay feature is disabled + * - 1: Relay feature is enabled + * @param[in] retransmit_count Relay retransmit count. Valid values range from 0 + * to 7; default value is 0 (no retransmissions). + * @param[in] retransmit_interval_ms Relay retransmit interval in milliseconds. + * Valid values range from 10 ms to 320 ms, with a resolution of 10 ms. The + * value is ignored if the retransmission count is set to zero. + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_relay_set_create(uint8_t value, + uint8_t retransmit_count, + uint16_t retransmit_interval_ms); +/***************************************************************************//** + * Deallocation of Set Relay BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_relay_set_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to get node relay state. + * + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_relay_get_create(void); + +/***************************************************************************//** + * Deallocation of Get Relay BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_relay_get_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to set node network transmit state. + * + * @param[in] transmit_count Network transmit count. Valid values range from 1 + * to 8; default value is 1 (single transmission; no retransmissions). + * @param[in] transmit_interval_ms Network transmit interval in milliseconds. + * Valid values range from 10 ms to 320 ms, with a resolution of 10 ms. + * The value is ignored if the transmission count is set to one. + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_network_transmit_set_create(uint8_t transmit_count, + uint16_t transmit_interval_ms); + +/***************************************************************************//** + * Deallocation of Set Network Transmit BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_network_transmit_set_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to get node network transmit state. + * + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_network_transmit_get_create(void); + +/***************************************************************************//** + * Deallocation of Get Network Transmit BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_network_transmit_get_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to set node friend state. + * + * @param[in] value Friend value to set. Valid values are: + * - 0: Friend feature is not enabled + * - 1: Friend feature is enabled + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_friend_set_create(uint8_t value); + +/***************************************************************************//** + * Deallocation of Set Friend BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_friend_set_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to get node friend state. + * + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_friend_get_create(void); + +/***************************************************************************//** + * Deallocation of Get Friend BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_friend_get_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to get composition data of a device. + * + * @param[in] page Composition data page to query + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_dcd_get_create(uint8_t page); + +/***************************************************************************//** + * Deallocation of Get DCD BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_dcd_get_destroy(btmesh_conf_task_t *self); + +/***************************************************************************//** + * Create BT Mesh Configuration Task to request a node to unprovision itself. + * Use this function when a node shall be removed from the network. + * + * @returns Created configuration task. + * @retval NULL If the configuration task creation fails. + ******************************************************************************/ +btmesh_conf_task_t *btmesh_conf_task_reset_node_create(void); + +/***************************************************************************//** + * Deallocation of Reset Node BT Mesh Configuration Task instance. + * + * @param[in] self Pointer to the configuration task instance + * + * If btmesh_conf_task_t::next_on_success or btmesh_conf_task_t::next_on_failure + * is set then those tasks are destroyed as well. + ******************************************************************************/ +void btmesh_conf_task_reset_node_destroy(btmesh_conf_task_t *self); + +/** @} (end addtogroup btmesh_conf_task) */ +/** @} (end addtogroup btmesh_conf) */ + +#ifdef __cplusplus +}; +#endif + +#endif /* BTMESH_CONF_TASK_H */ diff --git a/app/btmesh/common_host/btmesh_conf/btmesh_conf_types.h b/app/btmesh/common_host/btmesh_conf/btmesh_conf_types.h new file mode 100644 index 00000000000..b3d559dadde --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/btmesh_conf_types.h @@ -0,0 +1,132 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Configurator Component + ******************************************************************************* + * # License + * Copyright 2021 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 BTMESH_CONF_TYPES_H +#define BTMESH_CONF_TYPES_H + +#include +#include +#include + +#include "sl_status.h" +#include "sl_slist.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_capi_types.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/***************************************************************************//** + * @addtogroup btmesh_conf BT Mesh Configurator Component + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_conf_types BT Mesh Configuration Types + * @brief BT Mesh Configuration Types provides common definitions and types. + * @{ + ******************************************************************************/ + +/// Unknown network key index value +#define BTMESH_CONF_NETKEY_INDEX_UNASSIGNED 0xFFFF + +/// Unknown model publication element index value +#define BTMESH_CONF_PUB_ELEM_INDEX_UNKNOWN 0xFF +/// Unknown model publication vendor ID value +#define BTMESH_CONF_PUB_VENDOR_ID_UNKNOWN 0xFFFF +/// Unknown model publication model ID value +#define BTMESH_CONF_PUB_MODEL_ID_UNKNOWN 0xFFFF +/// Unknown model publication address value +#define BTMESH_CONF_PUB_ADDRESS_UNKNOWN 0xFFFF +/// Unknown model publication application key value +#define BTMESH_CONF_PUB_APPKEY_INDEX_UNKNOWN 0xFFFF +/// Unknown model publication friendship credentials flag value +#define BTMESH_CONF_PUB_CREDENTIALS_UNKNOWN 0xFF +/// Unknown model publication TTL value +#define BTMESH_CONF_PUB_TTL_UNKNOWN 0xFF +/// Unknown model publication period value +#define BTMESH_CONF_PUB_PERIOD_MS_UNKNOWN 0xFFFFFFFF +/// Unknown model publication retransmit count value +#define BTMESH_CONF_PUB_RETRANSMIT_CNT_UNKNOWN 0xFF +/// Unknown model publication retransmit interval value +#define BTMESH_CONF_PUB_RETRANSMIT_INT_MS_UNKNOWN 0xFFFF + +/// Unknown node beacon value +#define BTMESH_CONF_BEACON_UNKNOWN 0xFF +/// Unknown node default TTL value +#define BTMESH_CONF_DEFAULT_TTL_UNKNOWN 0xFF +/// Unknown node proxy value +#define BTMESH_CONF_PROXY_VALUE_UNKNOWN 0xFF +/// Unknown node relay value +#define BTMESH_CONF_RELAY_VALUE_UNKNOWN 0xFF +/// Unknown node relay retransmit count +#define BTMESH_CONF_RELAY_RETRANSMIT_CNT_UNKNOWN 0xFF +/// Unknown node relay retransmit interval +#define BTMESH_CONF_RELAY_RETRANSMIT_INT_MS_UNKNOWN 0xFFFF +/// Unknown node network transmit count +#define BTMESH_CONF_NW_TRANSMIT_CNT_UNKNOWN 0xFF +/// Unknown node network transmit interval +#define BTMESH_CONF_NW_TRANSMIT_INT_MS_UNKNOWN 0xFFFF +/// Unknown node friend value +#define BTMESH_CONF_FRIEND_VALUE_UNKNOWN 0xFF + +/// Maximum theoretical number of application keys +#define BTMESH_CONF_MAX_APPKEY_COUNT (1 << 12) +/// Maximum theoretical number of network keys +#define BTMESH_CONF_MAX_NETKEY_COUNT (1 << 12) +/// @brief Maximum theoretical number of subscription addresses +/// BT Mesh model can subscribe to group addresses (14bit) and to virtual +/// addresses (14bit) and to unicast address of the node element which the +/// model resides on. +#define BTMESH_CONF_MAX_SUB_ADDR_COUNT ((1 << 14) + (1 << 14) + 1) + +/// Variable argument unsigned initializer macro +#define BTMESH_CONF_VARG_U32(u32) (btmesh_conf_varg_t){ .u32 = u32 } +/// Variable argument pointer initializer macro +#define BTMESH_CONF_VARG_PTR(ptr) (btmesh_conf_varg_t){ .ptr = ptr } +/// Variable argument NULL pointer initializer macro +#define BTMESH_CONF_VARG_NULL (btmesh_conf_varg_t){ .ptr = NULL } + +/// Variable argument union type to provide application specific information +typedef union { + uint32_t u32; ///< Unsigned 32bit variable + void *ptr; ///< Pointer variable +} btmesh_conf_varg_t; + +/** @} (end addtogroup btmesh_conf_types) */ +/** @} (end addtogroup btmesh_conf) */ + +#ifdef __cplusplus +}; +#endif + +#endif /* BTMESH_CONF_TYPES_H */ diff --git a/app/btmesh/common_host/btmesh_conf/config/btmesh_conf_config.h b/app/btmesh/common_host/btmesh_conf/config/btmesh_conf_config.h new file mode 100644 index 00000000000..daae8542812 --- /dev/null +++ b/app/btmesh/common_host/btmesh_conf/config/btmesh_conf_config.h @@ -0,0 +1,129 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Configurator Component - Default Configuration + ******************************************************************************* + * # License + * Copyright 2021 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 BTMESH_CONF_CONFIG_H +#define BTMESH_CONF_CONFIG_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +// <<< Use Configuration Wizard in Context Menu >>> + +// Log message fragment buffer size +// Default: 256 +// <8-1024:1> +// Log message fragment buffers are allocated on stack and used to format parts of log messages. +#define SL_BTMESH_CONF_MAX_LOG_MSG_FRAGMENT_SIZE_CFG_VAL 256 + +// Configuration executor count +// Default: 1 +// <1-256:1> +// Specifies the maximum number of parallel active configuration jobs. +// The executor count shall be less than SL_BTMESH_CONFIG_MAX_SEND_SEGS and SL_BTMESH_CONFIG_APP_TXQ_SIZE in sl_btmesh_config.h of NCP embedded code. +#define SL_BTMESH_CONF_EXECUTOR_COUNT_CFG_VAL 1 + +// Configuration client request timeout (ms) +// Default: 5000 +// <1-4294967295:1> +// Default timeout in milliseconds of configuration client requests. +// The BT Mesh Stack emits a configuration client event with SL_STATUS_TIMEOUT result if no reponse is received from configuration server. +#define SL_BTMESH_CONF_REQUEST_TIMEOUT_MS_CFG_VAL 5000 + +// Configuration client LPN request timeout (ms) +// Default: 15000 +// <1-4294967295:1> +// Default timeout in milliseconds of configuration client requests when communicating with an LPN node. +// The BT Mesh Stack emits a configuration client event with SL_STATUS_TIMEOUT result if no reponse is received from configuration server. +#define SL_BTMESH_CONF_LPN_REQUEST_TIMEOUT_MS_CFG_VAL 15000 + +// Wait for event timeout (ms) +// Default: 30000 +// <1-4294967295:1> +// Timeout in milliseconds to wait for configuration client events. +// It shall be greater than SL_BTMESH_CONF_REQUEST_TIMEOUT_MS_CFG_VAL and SL_BTMESH_CONF_LPN_REQUEST_TIMEOUT_MS_CFG_VAL. +// The BT Mesh Stack triggers configuration events if the configuration client request timeout occurs. +// Wait for event timeout handles the extremely rare case of missing events. (e.g. too many events through NCP protocol) +#define SL_BTMESH_CONF_EVENT_WAIT_TIMEOUT_MS_CFG_VAL 30000 + +// Maximum number of request retry due to communication issues +// Default: 3 +// <0-1000:1> +// The maximum number of configuration request retry due to communication issues (BT Mesh Stack configuration request timeout). +#define SL_BTMESH_CONF_COMMUNICATION_RETRY_MAX_CFG_VAL 3 + +// Retry interval in case of busy configuration request (ms) +// Default: 1000 +// <1-4294967295:1> +// Retry interval in milliseconds in case of busy configuration client requests. Config requests can be busy due to unavailable resources in BT Mesh Stack. +#define SL_BTMESH_CONF_REQUEST_BUSY_RETRY_INTERVAL_MS_CFG_VAL 1000 + +// Maximum number of configuration request retry due to busy BT Mesh Stack +// Default: 10 +// <0-10000:1> +// The maximum number of configuration request retry because of rejected configuration request due to busy BT Mesh Stack. +// The BT Mesh Stack might reject configuration client requests temporarily due to lack of resources. +// For example maximum number of parallel segmented message transmissions is reached. +#define SL_BTMESH_CONF_REQUEST_BUSY_RETRY_MAX_CFG_VAL 10 + +// Configuration Job Auto Destroy +// Default: 1 +// The default configuration job is deallocated automatically after the job status notification. +// If auto destroy feature is turned off (0) then the job deallocation shall be performed manually (btmesh_conf_job_destroy) after job execution ends. +#define SL_BTMESH_CONF_JOB_AUTO_DESTROY_CFG_VAL 1 + +// Configuration Job Auto Destroy on Submit failure +// Default: 1 +// The default configuration job is deallocated automatically if the submit job operation is failed. +// If auto destroy feature is turned off (0) then the job deallocation shall be performed manually (btmesh_conf_job_destroy) after submit operation fails. +#define SL_BTMESH_CONF_JOB_AUTO_DESTROY_ON_SUBMIT_FAILURE_CFG_VAL 1 + +// + +// <<< end of configuration section >>> + +#if (0 == SL_BTMESH_CONF_JOB_AUTO_DESTROY_CFG_VAL) \ + && (0 != SL_BTMESH_CONF_JOB_AUTO_DESTROY_ON_SUBMIT_FAILURE_CFG_VAL) +#error "If the auto destroy feature is turned off then the auto destroy on " \ + "submit failure option shall be disabled as well." +#endif + +#if (SL_BTMESH_CONF_EVENT_WAIT_TIMEOUT_MS_CFG_VAL <= SL_BTMESH_CONF_REQUEST_TIMEOUT_MS_CFG_VAL) \ + || (SL_BTMESH_CONF_EVENT_WAIT_TIMEOUT_MS_CFG_VAL <= SL_BTMESH_CONF_LPN_REQUEST_TIMEOUT_MS_CFG_VAL) +#error "Wait for event timeout shall be greater than configuration client " \ + "request timeout in the BT Mesh Stack." +#endif + +#ifdef __cplusplus +}; +#endif + +#endif /* BTMESH_CONF_CONFIG_H */ diff --git a/app/btmesh/common_host/btmesh_db/btmesh_db.c b/app/btmesh/common_host/btmesh_db/btmesh_db.c new file mode 100644 index 00000000000..813f127c812 --- /dev/null +++ b/app/btmesh/common_host/btmesh_db/btmesh_db.c @@ -0,0 +1,600 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Node Database component + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes + +#include +#include "btmesh_db.h" +#include "app_assert.h" +#include "sl_slist.h" + +// ----------------------------------------------------------------------------- +// Macros + +#define NL APP_LOG_NL + +// ----------------------------------------------------------------------------- +// Type definitions + +// ----------------------------------------------------------------------------- +// Static Function Declarations + +/***************************************************************************//** + * Allocate a node element for a network's node list + * + * @return Pointer to the newly created node. NULL if allocation fails. + ******************************************************************************/ +static btmesh_db_nodelist_elem_t* allocate_network_node(void); + +/***************************************************************************//** + * Return a node in a network's node list by its UUID + * + * @param[in] nodelist Pointer to the head of the network's node list + * @param[in] uuid UUID of the node + * @return Pointer to the nodelist element. NULL if UUID does not match any + * nodes in the list. + ******************************************************************************/ +static btmesh_db_nodelist_elem_t* get_nodelist_elem_by_uuid(sl_slist_node_t *nodelist, + uuid_128 uuid); + +/***************************************************************************//** + * Remove a node from a network's node list + * + * @param[in] node Pointer to the node that needs to be removed + ******************************************************************************/ +static void btmesh_db_remove_node_from_dcd(btmesh_db_node_t *node); + +/***************************************************************************//** + * Remove a node from all networks' node list + * + * @param[in] node Pointer to the node that needs to be removed + * @return Status of the removal. + * @retval SL_STATUS_OK If the node was successfully removed from all networks. + * Error code otherwise. + ******************************************************************************/ +static sl_status_t btmesh_db_remove_node_from_all_networks(btmesh_db_node_t *node); + +// ----------------------------------------------------------------------------- +// Static Variables + +static sl_slist_node_t *node_list; ///< Linked list of all known nodes +static sl_slist_node_t *network_list; ///< Linked list of all known networks + +// ----------------------------------------------------------------------------- +// Function definitions + +void btmesh_db_init(void) +{ + sl_slist_init(&node_list); + sl_slist_init(&network_list); +} + +sl_slist_node_t *btmesh_db_get_node_list(void) +{ + return node_list; +} +sl_slist_node_t *btmesh_db_get_network_list(void) +{ + return network_list; +} + +sl_status_t btmesh_db_create_network(uint16_t netkey_index) +{ + btmesh_db_network_t *network; + SL_SLIST_FOR_EACH_ENTRY(network_list, network, btmesh_db_network_t, list_elem) { + if (network->netkey_index == netkey_index) { + return SL_STATUS_ALREADY_EXISTS; + } + } + network = (btmesh_db_network_t *)malloc(sizeof(btmesh_db_network_t)); + if (NULL == network) { + return SL_STATUS_ALLOCATION_FAILED; + } + sl_slist_init(&network->node_list); + network->netkey_index = netkey_index; + network->node_count = 0; + sl_slist_push_back(&network_list, &network->list_elem); + return SL_STATUS_OK; +} + +sl_status_t btmesh_db_create_node(uuid_128 uuid, + bd_addr mac_address, + uint16_t prim_address, + uint8_t element_count, + uint8_t bearer_type, + uint16_t oob_capabilities) +{ + btmesh_db_node_t *node; + SL_SLIST_FOR_EACH_ENTRY(node_list, node, btmesh_db_node_t, list_elem) { + if (0 == memcmp(&node->prov.uuid, &uuid, sizeof(uuid_128))) { + return SL_STATUS_ALREADY_EXISTS; + } + } + node = (btmesh_db_node_t *)malloc(sizeof(btmesh_db_node_t)); + if (NULL == node) { + return SL_STATUS_ALLOCATION_FAILED; + } + node->prov.uuid = uuid; + node->prov.mac_address = mac_address; + node->prov.bearer_type = bearer_type; + node->prov.prim_address = prim_address; + node->prov.element_count = element_count; + node->prov.oob_capabilities = oob_capabilities; + node->dcd_available = false; + node->dcd_modified = false; + memset(&node->dcd, 0, sizeof(node->dcd)); + node->node_available = false; + node->primary_subnet = NULL; + sl_slist_push_back(&node_list, &node->list_elem); + + return SL_STATUS_OK; +} + +static void btmesh_db_remove_node_from_dcd(btmesh_db_node_t *node) +{ + if (NULL == node) { + return; + } + sl_status_t clear_dcd_status = btmesh_db_node_dcd_clear(node->prov.prim_address); + // The DCD clear shall not fail because the node pointer shall have a valid + // value when this function is called. (validation in caller functions) + app_assert_status_f(clear_dcd_status, + "Failed to clear DCD of node (addr=0x%04x)." NL, + node->prov.prim_address); +} + +sl_status_t btmesh_db_remove_node_by_uuid(uuid_128 uuid) +{ + btmesh_db_node_t *node = btmesh_db_node_get_by_uuid(uuid); + if (NULL == node) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + return btmesh_db_remove_node_from_all_networks(node); +} + +sl_status_t btmesh_db_remove_node_by_addr(uint16_t prim_address) +{ + btmesh_db_node_t *node = btmesh_db_node_get_by_addr(prim_address); + if (NULL == node) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + return btmesh_db_remove_node_from_all_networks(node); +} + +sl_status_t btmesh_db_remove_node_by_mac(bd_addr mac) +{ + btmesh_db_node_t *node = btmesh_db_node_get_by_mac(mac); + if (NULL == node) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + return btmesh_db_remove_node_from_all_networks(node); +} + +void btmesh_db_remove_network(btmesh_db_network_t *network) +{ + sl_status_t sc = btmesh_db_remove_all_nodes_from_network(network->netkey_index); + if (SL_STATUS_OK == sc) { + sl_slist_remove(&network_list, &network->list_elem); + free(network); + } +} + +sl_status_t btmesh_db_add_node_to_network_by_uuid(uint16_t netkey_index, + uuid_128 uuid) +{ + btmesh_db_node_t *curr_node = btmesh_db_node_get_by_uuid(uuid); + btmesh_db_network_t *curr_network = btmesh_db_network_get_network(netkey_index); + + if (NULL == curr_node || NULL == curr_network) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + + if (btmesh_db_is_node_in_network(netkey_index, curr_node)) { + return SL_STATUS_ALREADY_EXISTS; + } + + btmesh_db_nodelist_elem_t *nodelist_elem = allocate_network_node(); + if (NULL == nodelist_elem) { + return SL_STATUS_ALLOCATION_FAILED; + } + + nodelist_elem->node = curr_node; + curr_node->primary_subnet = curr_network; + curr_node->node_available = true; + + sl_slist_push_back(&curr_network->node_list, &nodelist_elem->list_elem); + curr_network->node_count++; + return SL_STATUS_OK; +} + +sl_status_t btmesh_db_node_dcd_set_available(uint16_t prim_address) +{ + sl_status_t sc = SL_STATUS_OK; + btmesh_db_node_t *node = btmesh_db_node_get_by_addr(prim_address); + if (NULL == node) { + sc = SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } else { + node->dcd_available = true; + node->dcd_modified = false; + } + return sc; +} + +sl_status_t btmesh_db_node_dcd_set_header(uint16_t prim_address, + uint16_t company_id, + uint16_t product_id, + uint16_t version_id, + uint16_t min_replay_prot_list_len, + bool feature_relay, + bool feature_proxy, + bool feature_friend, + bool feature_low_power) +{ + sl_status_t sc = SL_STATUS_OK; + btmesh_db_node_t *node = btmesh_db_node_get_by_addr(prim_address); + if (NULL == node) { + sc = SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } else if (false != node->dcd_available) { + // The DCD can be modified if it is invalidated first. + // Note: DCD might change in case of firmware update only. + sc = SL_STATUS_INVALID_STATE; + } else { + node->dcd.company_id = company_id; + node->dcd.product_id = product_id; + node->dcd.version_id = version_id; + node->dcd.min_replay_prot_list_len = min_replay_prot_list_len; + node->dcd.feature_relay = feature_relay; + node->dcd.feature_proxy = feature_proxy; + node->dcd.feature_friend = feature_friend; + node->dcd.feature_low_power = feature_low_power; + node->dcd_modified = true; + } + return sc; +} + +sl_status_t btmesh_db_node_dcd_add_element(uint16_t prim_address, + uint16_t location) +{ + sl_status_t sc = SL_STATUS_OK; + btmesh_db_node_t *node = btmesh_db_node_get_by_addr(prim_address); + if (NULL == node) { + sc = SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } else if (false != node->dcd_available) { + // The DCD can be modified if it is invalidated first. + // Note: DCD might change in case of firmware update only. + sc = SL_STATUS_INVALID_STATE; + } else { + btmesh_db_element_t *allocated_elements; + if (0 == node->dcd.element_count) { + node->dcd.elements = NULL; + } + allocated_elements = realloc(node->dcd.elements, + (node->dcd.element_count + 1) + * sizeof(btmesh_db_element_t)); + if (NULL == allocated_elements) { + sc = SL_STATUS_ALLOCATION_FAILED; + } else { + uint16_t element_idx = node->dcd.element_count; + node->dcd.elements = allocated_elements; + node->dcd.elements[element_idx].address = prim_address + element_idx; + node->dcd.elements[element_idx].location = location; + node->dcd.elements[element_idx].model_count = 0; + node->dcd.elements[element_idx].models = NULL; + node->dcd.element_count++; + node->dcd_modified = true; + } + } + return sc; +} + +sl_status_t btmesh_db_node_dcd_add_model(uint16_t prim_address, + uint16_t element_index, + btmesh_db_model_id_t model_id) +{ + sl_status_t sc = SL_STATUS_OK; + btmesh_db_node_t *node = btmesh_db_node_get_by_addr(prim_address); + + if ((NULL == node) + || (node->dcd.element_count <= element_index)) { + sc = SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } else if (false != node->dcd_available) { + // The DCD can be modified if it is invalidated first. + // Note: DCD might change in case of firmware update only. + sc = SL_STATUS_INVALID_STATE; + } else { + btmesh_db_element_t *element = &node->dcd.elements[element_index]; + for (uint16_t idx = 0; idx < element->model_count; idx++) { + if ((element->models[idx].model == model_id.model) + && (element->models[idx].vendor == model_id.vendor)) { + // The model IDs shall be unique in the context of a node element + sc = SL_STATUS_ALREADY_EXISTS; + break; + } + } + + if (SL_STATUS_OK == sc) { + btmesh_db_model_id_t *allocated_models; + if (0 == element->model_count) { + element->models = NULL; + } + allocated_models = realloc(element->models, + (element->model_count + 1) + * sizeof(btmesh_db_model_id_t)); + if (NULL == allocated_models) { + sc = SL_STATUS_ALLOCATION_FAILED; + } else { + uint16_t model_idx = element->model_count; + element->models = allocated_models; + element->models[model_idx] = model_id; + element->model_count++; + node->dcd_modified = true; + } + } + } + return sc; +} + +sl_status_t btmesh_db_node_dcd_clear(uint16_t prim_address) +{ + sl_status_t sc = SL_STATUS_FAIL; + btmesh_db_node_t *node = btmesh_db_node_get_by_addr(prim_address); + if (NULL == node) { + sc = SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } else if ((false == node->dcd_available) + && (false == node->dcd_modified)) { + // Check whether the DCD is available at all because if it is then + // no operation is required + sc = SL_STATUS_OK; + } else if (NULL != node->dcd.elements) { + for (uint16_t elem_idx = 0; elem_idx < node->dcd.element_count; elem_idx++) { + if (0 < node->dcd.elements[elem_idx].model_count) { + free(node->dcd.elements[elem_idx].models); + } + } + free(node->dcd.elements); + node->dcd.elements = NULL; + node->dcd.element_count = 0; + node->dcd_available = false; + node->dcd_modified = false; + sc = SL_STATUS_OK; + } + return sc; +} + +static sl_status_t btmesh_db_remove_node_from_all_networks(btmesh_db_node_t *node) +{ + btmesh_db_network_t *network; + sl_status_t remove_status = SL_STATUS_OK; + + SL_SLIST_FOR_EACH_ENTRY(network_list, network, btmesh_db_network_t, list_elem) { + sl_status_t network_status = btmesh_db_remove_node_from_network(network->netkey_index, + node); + // The node is removed from every network and it is possible that it is + // part of only a subset of networks. + if ((SL_STATUS_OK != network_status) + && (SL_STATUS_BT_MESH_DOES_NOT_EXIST != network_status)) { + // If error occurs in one network then the iteration shall be continued + // because it can occur at any point of iteration and this approach provides + // the most unifrom result. + remove_status = network_status; + } + } + return remove_status; +} + +sl_status_t btmesh_db_remove_node_from_network(uint16_t netkey_index, btmesh_db_node_t *node) +{ + btmesh_db_network_t *network = btmesh_db_network_get_network(netkey_index); + if (NULL == network) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + + if (true == btmesh_db_is_node_in_network(netkey_index, node)) { + btmesh_db_nodelist_elem_t *nodelist_elem = get_nodelist_elem_by_uuid(network->node_list, + node->prov.uuid); + network->node_count--; + sl_slist_remove(&network->node_list, &nodelist_elem->list_elem); + free(nodelist_elem); + if (false == btmesh_db_is_node_in_any_network(node)) { + // If node is not present anywhere anymore, set it as unprovisioned + btmesh_db_node_set_availability(node, false); + btmesh_db_node_set_primary_address(node, 0x0000); + btmesh_db_remove_node_from_dcd(node); + } + return SL_STATUS_OK; + } + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; +} + +sl_status_t btmesh_db_remove_node_from_network_by_addr(uint16_t netkey_index, + uint16_t prim_address) +{ + btmesh_db_node_t *node = btmesh_db_node_get_by_addr(prim_address); + if (NULL == node) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + sl_status_t sc = btmesh_db_remove_node_from_network(netkey_index, node); + return sc; +} + +sl_status_t btmesh_db_remove_node_from_network_by_uuid(uint16_t netkey_index, uuid_128 uuid) +{ + btmesh_db_node_t *node = btmesh_db_node_get_by_uuid(uuid); + if (NULL == node) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + sl_status_t sc = btmesh_db_remove_node_from_network(netkey_index, node); + return sc; +} + +sl_status_t btmesh_db_remove_node_from_network_by_mac(uint16_t netkey_index, bd_addr mac) +{ + btmesh_db_node_t *node = btmesh_db_node_get_by_mac(mac); + if (NULL == node) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + sl_status_t sc = btmesh_db_remove_node_from_network(netkey_index, node); + return sc; +} + +sl_status_t btmesh_db_remove_all_nodes_from_network(uint16_t netkey_index) +{ + btmesh_db_network_t *network = btmesh_db_network_get_network(netkey_index); + if (NULL == network) { + return SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + + btmesh_db_nodelist_elem_t *nodelist_elem; + SL_SLIST_FOR_EACH_ENTRY(network->node_list, nodelist_elem, btmesh_db_nodelist_elem_t, list_elem) { + network->node_count--; + sl_slist_remove(&network->node_list, &nodelist_elem->list_elem); + btmesh_db_node_t *node = nodelist_elem->node; + if (false == btmesh_db_is_node_in_any_network(node)) { + // If node is not present anywhere anymore, set it as unprovisioned + btmesh_db_node_set_availability(node, false); + btmesh_db_node_set_primary_address(node, 0x0000); + btmesh_db_remove_node_from_dcd(node); + } + } + return SL_STATUS_OK; +} + +btmesh_db_node_t* btmesh_db_node_get_by_addr(uint16_t address) +{ + btmesh_db_node_t *node; + SL_SLIST_FOR_EACH_ENTRY(node_list, node, btmesh_db_node_t, list_elem) { + if (node->prov.prim_address == address) { + return node; + } + } + return NULL; +} + +btmesh_db_node_t* btmesh_db_node_get_by_uuid(uuid_128 uuid) +{ + btmesh_db_node_t *node; + SL_SLIST_FOR_EACH_ENTRY(node_list, node, btmesh_db_node_t, list_elem) { + if (0 == memcmp(&node->prov.uuid, &uuid, sizeof(uuid_128))) { + return node; + } + } + return NULL; +} + +btmesh_db_node_t* btmesh_db_node_get_by_mac(bd_addr mac) +{ + btmesh_db_node_t *node; + SL_SLIST_FOR_EACH_ENTRY(node_list, node, btmesh_db_node_t, list_elem) { + if (0 == memcmp(&node->prov.mac_address, &mac, sizeof(bd_addr))) { + return node; + } + } + return NULL; +} + +sl_status_t btmesh_db_node_set_availability(btmesh_db_node_t *node, + bool availability) +{ + if (NULL == node) { + return SL_STATUS_NULL_POINTER; + } + node->node_available = availability; + return SL_STATUS_OK; +} + +sl_status_t btmesh_db_node_set_primary_address(btmesh_db_node_t *node, + uint16_t primary_address) +{ + if (NULL == node) { + return SL_STATUS_NULL_POINTER; + } + node->prov.prim_address = primary_address; + return SL_STATUS_OK; +} + +btmesh_db_network_t* btmesh_db_network_get_network(uint16_t netkey_index) +{ + btmesh_db_network_t *network; + SL_SLIST_FOR_EACH_ENTRY(network_list, network, btmesh_db_network_t, list_elem) { + if (network->netkey_index == netkey_index) { + return network; + } + } + return NULL; +} + +bool btmesh_db_is_node_in_network(uint16_t netkey_index, btmesh_db_node_t *node) +{ + btmesh_db_network_t *network = btmesh_db_network_get_network(netkey_index); + sl_slist_node_t *nodes_in_network = network->node_list; + btmesh_db_nodelist_elem_t *curr_nodelist_elem; + SL_SLIST_FOR_EACH_ENTRY(nodes_in_network, curr_nodelist_elem, btmesh_db_nodelist_elem_t, list_elem) { + if (node == curr_nodelist_elem->node) { + return true; + } + } + return false; +} + +bool btmesh_db_is_node_in_any_network(btmesh_db_node_t *node) +{ + btmesh_db_network_t *curr_network; + SL_SLIST_FOR_EACH_ENTRY(network_list, curr_network, btmesh_db_network_t, list_elem) { + sl_slist_node_t *nodes_in_network = curr_network->node_list; + btmesh_db_nodelist_elem_t *curr_nodelist_elem; + SL_SLIST_FOR_EACH_ENTRY(nodes_in_network, curr_nodelist_elem, btmesh_db_nodelist_elem_t, list_elem) { + if (node == curr_nodelist_elem->node) { + return true; + } + } + } + return false; +} + +btmesh_db_nodelist_elem_t* allocate_network_node(void) +{ + btmesh_db_nodelist_elem_t *new_node; + new_node = (btmesh_db_nodelist_elem_t *)malloc(sizeof(btmesh_db_nodelist_elem_t)); + return new_node; +} + +btmesh_db_nodelist_elem_t* get_nodelist_elem_by_uuid(sl_slist_node_t *nodelist, + uuid_128 uuid) +{ + btmesh_db_nodelist_elem_t *curr_elem; + SL_SLIST_FOR_EACH_ENTRY(nodelist, curr_elem, btmesh_db_nodelist_elem_t, list_elem) { + btmesh_db_node_t *curr_node = curr_elem->node; + if (0 == memcmp(&uuid, &curr_node->prov.uuid, sizeof(uuid_128))) { + return curr_elem; + } + } + return NULL; +} diff --git a/app/btmesh/common_host/btmesh_db/btmesh_db.h b/app/btmesh/common_host/btmesh_db/btmesh_db.h new file mode 100644 index 00000000000..184d0991736 --- /dev/null +++ b/app/btmesh/common_host/btmesh_db/btmesh_db.h @@ -0,0 +1,513 @@ +/***************************************************************************/ /** +* @file +* @brief BT Mesh Node Database component +******************************************************************************* +* # License +* Copyright 2021 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 BTMESH_DB_H +#define BTMESH_DB_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include +#include +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_slist.h" + +/***************************************************************************//** + * @addtogroup btmesh_db BT Mesh Database + * @{ + ******************************************************************************/ + +typedef struct btmesh_db_network_t btmesh_db_network_t; + +/// Common model identifier structure for Bluetooth SIG and Vendor models +typedef struct btmesh_db_model_id_t { + /// Vendor ID of the model (@p MESH_SPEC_VENDOR_ID for Bluetooth SIG models) + uint16_t vendor; + /// Model ID of the Vendor or Bluetooth SIG model + uint16_t model; +} btmesh_db_model_id_t; + +/// Node element represention in the Device Composition Data (DCD) +typedef struct btmesh_db_element_t { + /// Network address of the element (each element has its own address) + uint16_t address; + /// @brief Location description as defined in the GATT Bluetooth Namespace + /// Descriptors section of the Bluetooth SIG Assigned Numbers + uint16_t location; + /// Total number of models in this element (Bluetooth SIG plus Vendor models) + uint16_t model_count; + /// Array of models in this element (Bluetooth SIG plus Vendor models) + btmesh_db_model_id_t *models; +} btmesh_db_element_t; + +/// Representation of Device Composition Data (DCD) +typedef struct btmesh_db_node_dcd_t { + /// Company identifier assigned by the Bluetooth SIG + uint16_t company_id; + /// Vendor-assigned product identifier + uint16_t product_id; + /// Vendor-assigned product version identifier + uint16_t version_id; + /// @brief Value representing the minimum number of replay protection list + /// entries in a device + uint16_t min_replay_prot_list_len; + /// Relay feature support + bool feature_relay; + /// Proxy feature support + bool feature_proxy; + /// Friend feature support + bool feature_friend; + /// Low power feature support + bool feature_low_power; + /// Number of elements + uint16_t element_count; + /// Array of elements + btmesh_db_element_t *elements; +} btmesh_db_node_dcd_t; + +/// The provisioning-related information of a node +typedef struct btmesh_db_node_prov_t { + /// UUID of the node. + uuid_128 uuid; + /// Bluetooth address of the node. This is only known + /// if the node is unprovisioned beaconing. + bd_addr mac_address; + /// Type of the provisioning bearer. One of PB-ADV(0) or PB-GATT(1). + uint8_t bearer_type; + /// Primary element address of the node. This is only known + /// if the node is part of a network. + uint16_t prim_address; + /// Element count of the node. + uint16_t element_count; + /// Out of band capability mask + uint16_t oob_capabilities; +} btmesh_db_node_prov_t; + +/// Struct representing one single node +typedef struct btmesh_db_node_t { + sl_slist_node_t list_elem; ///< Linked list of nodes + btmesh_db_node_prov_t prov; ///< Provisioning information + bool dcd_available; ///< DCD data available + bool dcd_modified; ///< DCD data modified + btmesh_db_node_dcd_t dcd; ///< DCD information + bool node_available; ///< Node is part of a network + btmesh_db_network_t *primary_subnet; ///< The node's primary subnet's address +} btmesh_db_node_t; + +/// Struct representing one single network +struct btmesh_db_network_t { + sl_slist_node_t list_elem; ///< Linked list of networks + uint16_t netkey_index; ///< Netkey index of the network + uint16_t node_count; ///< Number of nodes in the network + sl_slist_node_t *node_list; ///< Linked list of nodes in the network +}; + +/// Helper struct to keep track of which nodes are part of a given network +typedef struct btmesh_db_nodelist_elem_t { + sl_slist_node_t list_elem; ///< Linked list of nodes + btmesh_db_node_t *node; ///< Pointer to the node +} btmesh_db_nodelist_elem_t; + +/***************************************************************************//** +* Initialize the database. +*******************************************************************************/ +void btmesh_db_init(void); + +/***************************************************************************//** +* Get the node list. +* +* @return Pointer to the head of the node linked list +*******************************************************************************/ +sl_slist_node_t *btmesh_db_get_node_list(void); + +/**************************************************************************/ /** +* Get the network list. +* +* @return Pointer to the head of the network linked list +*******************************************************************************/ +sl_slist_node_t *btmesh_db_get_network_list(void); + +/***************************************************************************//** +* Create a new BT Mesh network in the database. +* +* @param[in] netkey_index netkey_index of the network +* +* @return Status of the network creation. +* @retval SL_STATUS_OK If network is correctly created. +* @retval SL_STATUS_ALREADY_EXIST If a network with the given +* netkey_index already exists. +* @retval SL_STATUS_ALLOCATION_FAILED If allocating memory for the +* network struct fails. +*******************************************************************************/ +sl_status_t btmesh_db_create_network(uint16_t netkey_index); + +/***************************************************************************//** +* Remove network from the database. This also removes the reference to the +* network in all nodes that were part of it. +* +* @param[in] network Pointer to the network to be deleted +*******************************************************************************/ +void btmesh_db_remove_network(btmesh_db_network_t *network); + +/**************************************************************************/ /** +* Create a new node and add it to the node list. +* +* @param[in] uuid UUID of the node +* @param[in] mac_address Bluetooth address of the node +* @param[in] prim_address Primary address of the node in a network +* @param[in] element_count Element count of the node +* @param[in] bearer_type Type of the provisioning bearer layer. Can be +* PB-ADV (0) or PB-GATT (1). +* @return Status of the node creation. +* @retval SL_STATUS_OK If node is successfully created. +* @retval SL_STATUS_ALREADY_EXIST If a node with the given UUID already exists. +* @retval SL_STATUS_ALLOCATION_FAILED If allocating memory for +* the node struct fails. +*******************************************************************************/ +sl_status_t btmesh_db_create_node(uuid_128 uuid, + bd_addr mac_address, + uint16_t prim_address, + uint8_t element_count, + uint8_t bearer_type, + uint16_t oob_capabilities); + +/***************************************************************************//** +* Remove a node from the database by its UUID. This function removes the node +* from all networks it is present in. +* +* @param[in] uuid UUID of the node to be removed +* @return Status of the removal. +* @retval SL_STATUS_OK If node is successfully removed. +* @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If the node does not exist. +*******************************************************************************/ +sl_status_t btmesh_db_remove_node_by_uuid(uuid_128 uuid); + +/***************************************************************************//** +* Remove a node from the database by its primary element address. This +* function removes the node from all networks it is present in. +* +* @param[in] prim_address Primary element address of the node to be removed +* @return Status of the removal. +* @retval SL_STATUS_OK If node is successfully removed. +* @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If the node does not exist. +*******************************************************************************/ +sl_status_t btmesh_db_remove_node_by_addr(uint16_t prim_address); + +/***************************************************************************//** +* Remove a node from the database by its Bluetooth address. This +* function removes the node from all networks it is present in. +* +* @param[in] mac Bluetooth address of the node to be removed +* @return Status of the removal. +* @retval SL_STATUS_OK If node is successfully removed. +* @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If the node does not exist. +*******************************************************************************/ +sl_status_t btmesh_db_remove_node_by_mac(bd_addr mac); + +/***************************************************************************//** +* Add an already created node to a network by UUID +* +* @param[in] netkey_index Netkey index of the network +* @param[in] uuid UUID of the node +* @return Status of the addition. +* @retval SL_STATUS_OK If node is successfully added to the network. +* @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If either the node or the network +* does not exist. +* @retval SL_STATUS_ALREADY_EXISTS If the node is already in the network. +* @retval SL_STATUS_ALLOCATION_FAILED If the node \a pointer can't be added +* to the network's list. +*******************************************************************************/ +sl_status_t btmesh_db_add_node_to_network_by_uuid(uint16_t netkey_index, + uuid_128 uuid); + +/***************************************************************************//** + * Makes the DCD information available for reading in the BT Mesh database + * + * @param[in] prim_address Primary element address of the node + * @returns Status of the set available operation + * @retval SL_STATUS_OK If DCD information is set available + * @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If the node does not exist. + * + * The DCD information of a node is built in several steps in btmesh database: + * - @ref btmesh_db_node_dcd_set_header (once) + * - @ref btmesh_db_node_dcd_add_element (element count times) + * - @ref btmesh_db_node_dcd_add_model (on each element model count times) + * + * The DCD information is not valid until all necessary functions are called. + * This function marks when the DCD information is complete in the database. + ******************************************************************************/ +sl_status_t btmesh_db_node_dcd_set_available(uint16_t prim_address); + +/***************************************************************************//** + * Sets the DCD header data (page 0) in the BT Mesh database + * + * @param[in] prim_address Primary element address of the node + * @param[in] company_id Company identifier assigned by the Bluetooth SIG + * @param[in] product_id Vendor-assigned product identifier + * @param[in] version_id Vendor-assigned product version identifier + * @param[in] min_replay_prot_list_len Min number of replay protection list entries + * @param[in] feature_relay Relay feature support + * @param[in] feature_proxy Proxy feature support + * @param[in] feature_friend Friend feature support + * @param[in] feature_low_power Low power feature support + * @returns Status of the set node DCD header operation + * @retval SL_STATUS_OK If DCD header data is set successfully. + * @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If the node does not exist. + * @retval SL_STATUS_INVALID_STATE If the DCD can't be modified because it was + * set available previously. + * + * Sets DCD header data of the node chosen by @ref prim_address in BT Mesh + * database. The DCD header data not vary with the number of elements or models. + * + * If the DCD is set available then the DCD data can be modified only if it is + * cleared first by the @ref btmesh_db_node_dcd_clear function. + * + * @note If the firmware is updated on the node then the DCD of the node might + * change (not necessarily). The BT Mesh specification guarantees that the DCD + * is constant between firmware updates. + * + ******************************************************************************/ +sl_status_t btmesh_db_node_dcd_set_header(uint16_t prim_address, + uint16_t company_id, + uint16_t product_id, + uint16_t version_id, + uint16_t min_replay_prot_list_len, + bool feature_relay, + bool feature_proxy, + bool feature_friend, + bool feature_low_power); + +/***************************************************************************//** + * Adds an empty element to the DCD of specified node in BT Mesh database + * + * @param[in] prim_address Primary element address of the node + * @param[in] location Location description as defined in the GATT Bluetooth + * Namespace Descriptors section of the Bluetooth SIG Assigned Numbers + * @returns Status of element addition + * @retval SL_STATUS_OK If the element is added successfully. + * @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If the node does not exist. + * @retval SL_STATUS_INVALID_STATE If the DCD can't be modified because it was + * set available previously. + * @retval SL_STATUS_ALLOCATION_FAILED If the memory allocation for the new + * element is failed. + * + * The new empty element is added to end of element array of DCD in BT Mesh + * database. Therefore the elements shall be added in the increasing order of + * element indexes. + * + ******************************************************************************/ +sl_status_t btmesh_db_node_dcd_add_element(uint16_t prim_address, + uint16_t location); + +/***************************************************************************//** + * Adds a model to the specified DCD element in BT Mesh database + * + * @param[in] prim_address Primary element address of the node + * @param[in] element_index Index of element where the model resides on the node + * @param[in] model_id Model ID of the model + * @returns Status of the model addition + * @retval SL_STATUS_OK If the model is added successfully. + * @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If the node or element does not exist. + * @retval SL_STATUS_INVALID_STATE If the DCD can't be modified because it was + * set available previously. + * @retval SL_STATUS_ALREADY_EXISTS If the model ID is already added to element. + * The model IDs shall be unique in the context of a node element. + * @retval SL_STATUS_ALLOCATION_FAILED If the memory allocation for the new + * model is failed. + * + ******************************************************************************/ +sl_status_t btmesh_db_node_dcd_add_model(uint16_t prim_address, + uint16_t element_index, + btmesh_db_model_id_t model_id); + +/***************************************************************************//** + * Clears the DCD of the specified node in BT Mesh database + * + * @param[in] prim_address Primary element address of the node + * @returns Status of the DCD clear operation + * @retval SL_STATUS_OK If the DCD is cleared successfully. + * @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If the node does not exist. + * + * The DCD clear operation deallocates all dynamically allocated resources + * belonging to the DCD of the specified node and sets the DCD unavailable. + * If the DCD was set available then it can be modified only if the current + * DCD of the node is cleared first by calling this function. + ******************************************************************************/ +sl_status_t btmesh_db_node_dcd_clear(uint16_t prim_address); + +/***************************************************************************//** +* Remove a node from a given network. +* +* @param[in] netkey_index Netkey index of the network +* @param[in] node Pointer to the node +* @return Status of the node removal. +* @retval SL_STATUS_OK If node is successfully removed. +* @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If either the network does +* not exist or the node is not +* in the network. +*******************************************************************************/ +sl_status_t btmesh_db_remove_node_from_network(uint16_t netkey_index, + btmesh_db_node_t *node); + +/***************************************************************************//** +* Remove a node from a given network by the node's primary element address. +* +* @param[in] netkey_index Netkey index of the network +* @param[in] prim_address Primary address of the node +* @return Status of the node removal. +* @retval SL_STATUS_OK If node is successfully removed. +* @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If either the network or node does +* not exist, or the node is not +* in the network. +*******************************************************************************/ +sl_status_t btmesh_db_remove_node_from_network_by_addr(uint16_t netkey_index, + uint16_t prim_address); + +/***************************************************************************//** +* Remove a node from a given network by the node's UUID. +* +* @param[in] netkey_index Netkey index of the network +* @param[in] uuid UUID of the network +* @return Status of the node removal. +* @retval SL_STATUS_OK If node is successfully removed. +* @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If either the network or node does +* not exist, or the node is not +* in the network. +*******************************************************************************/ +sl_status_t btmesh_db_remove_node_from_network_by_uuid(uint16_t netkey_index, uuid_128 uuid); + +/***************************************************************************//** +* Remove a node from a given network by the node's Bluetooth address. +* +* @param[in] netkey_index Netkey index of the network +* @param[in] mac Bluetooth address of the node +* @return Status of the node removal. +* @retval SL_STATUS_OK If node is successfully removed. +* @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If either the network or node does +* not exist, or the node is not +* in the network. +*******************************************************************************/ +sl_status_t btmesh_db_remove_node_from_network_by_mac(uint16_t netkey_index, bd_addr mac); + +/***************************************************************************//** +* Remove all nodes from a give network +* +* @param[in] netkey_index Netkey index of the network +* @return Status of the node removal. +* @retval SL_STATUS_OK If nodes are successfully removed. +* @retval SL_STATUS_BT_MESH_DOES_NOT_EXIST If the network does not exist. +*******************************************************************************/ +sl_status_t btmesh_db_remove_all_nodes_from_network(uint16_t netkey_index); + +/***************************************************************************//** +* Get a node by its primary element address +* +* @param[in] address Primary element address of the node +* @return Pointer to the node, NULL if it does not exist. +*******************************************************************************/ +btmesh_db_node_t* btmesh_db_node_get_by_addr(uint16_t address); + +/***************************************************************************//** +* Get a node by its UUID +* +* @param[in] uuid UUID of the node +* @return Pointer to the node, NULL if it does not exist. +*******************************************************************************/ +btmesh_db_node_t* btmesh_db_node_get_by_uuid(uuid_128 uuid); + +/***************************************************************************//** +* Get a node by its Bluetooth address +* +* @param[in] mac Bluetooth address of the node +* @return Pointer to the node, NULL if it does not exist. +*******************************************************************************/ +btmesh_db_node_t* btmesh_db_node_get_by_mac(bd_addr mac); + +/***************************************************************************//** +* Set the availability parameter of a given node +* +* @param[in] node Pointer to the node +* @param[in] availability The requested status of the availability flag +* @return Status of the command. +* @retval SL_STATUS_OK If availability flag is set. +* @retval SL_STATUS_NULL_POINTER If the node does not exist. +*******************************************************************************/ +sl_status_t btmesh_db_node_set_availability(btmesh_db_node_t *node, + bool availability); + +/***************************************************************************//** +* Set the Primary element address of a given node +* +* @param[in] node Pointer to the node +* @param[in] primary_address The requested primary element address +* @return Status of the command. +* @retval SL_STATUS_OK If primary element address is set. +* @retval SL_STATUS_NULL_POINTER If the node does not exist. +*******************************************************************************/ +sl_status_t btmesh_db_node_set_primary_address(btmesh_db_node_t *node, + uint16_t primary_address); + +/***************************************************************************//** +* Get a network by its netkey index +* +* @param[in] netkey_index Netkey index of the requested network +* @return pointer to the network. NULL if network does not exist. +*******************************************************************************/ +btmesh_db_network_t *btmesh_db_network_get_network(uint16_t netkey_index); + +/***************************************************************************//** +* Check if a given node is part of a network +* +* @param[in] netkey_index Netkey index of the network +* @param[in] node Pointer to the node +* @retval TRUE If the node is part of the network. +* @retval FALSE If the node is not part of the network. +*******************************************************************************/ +bool btmesh_db_is_node_in_network(uint16_t netkey_index, btmesh_db_node_t *node); + +/***************************************************************************//** +* Check if a given node is part of any network +* +* @param[in] node Pointer to the node +* @retval TRUE If the node is part of a network. +* @retval FALSE If the node is not part of any network. +*******************************************************************************/ +bool btmesh_db_is_node_in_any_network(btmesh_db_node_t *node); + +/** @} (end addtogroup btmesh_db) */ + +#ifdef __cplusplus +}; +#endif + +#endif /* BTMESH_DB_H */ diff --git a/app/btmesh/common_host/btmesh_key_export/btmesh_key_export.c b/app/btmesh/common_host/btmesh_key_export/btmesh_key_export.c new file mode 100644 index 00000000000..75d9006ce45 --- /dev/null +++ b/app/btmesh/common_host/btmesh_key_export/btmesh_key_export.c @@ -0,0 +1,235 @@ +/**************************************************************************//** +* @file +* @brief BT Mesh Key export functionality +******************************************************************************* +* # 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. +* +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// Includes + +#include +#include +#include "app_assert.h" +#include "app_log.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#include "sl_common.h" + +// ---------------------------------------------------------------------------- +// Macros + +#define NET_KEY 0 +#define APP_KEY 1 + +#define OLD_KEY 0 +#define CURRENT_KEY 1 + +#define A16_AS_ARGS(A) \ + (A)[0], (A)[1], (A)[2], (A)[3], \ + (A)[4], (A)[5], (A)[6], (A)[7], \ + (A)[8], (A)[9], (A)[10], (A)[11], \ + (A)[12], (A)[13], (A)[14], (A)[15] + +// ---------------------------------------------------------------------------- +// Type definitions + +// This structure holds the exported data for the device keys +typedef struct { + uuid_128 uuid; + uint16_t address; + aes_key_128 key; +} devkey_t; + +// ---------------------------------------------------------------------------- +// Static Variables + +// This enum holds the state of the task +static enum { + IDLE, + START, + GET_DEVICES, + WRITE_FILE, +} state = IDLE; + +// File name +static char *file_name = "BtMeshKeys.json"; +// Index to track +static int ddb_index = 0; + +// Array containing the device keys +static devkey_t *devkeys = NULL; +// length of the devkeys array +static uint16_t devkeys_count = 0; + +// ---------------------------------------------------------------------------- +// Function definitions + +void btmesh_key_export_set_file_name(char* name) +{ + file_name = name; +} + +void btmesh_key_export_start() +{ + state = START; +} + +bool btmesh_key_export_is_idle() +{ + return state == IDLE; +} + +void btmesh_key_export_task() +{ + sl_status_t sc; + switch (state) { + case START: + sc = sl_btmesh_prov_list_ddb_entries(&devkeys_count); + app_assert_status_f(sc, "Failed to list ddb entries"); + if (devkeys_count > 0) { + devkeys = malloc(devkeys_count * sizeof(devkey_t)); + app_assert(devkeys != NULL, "Memory allocation failed"); + ddb_index = 0; + state = GET_DEVICES; + } else { + state = WRITE_FILE; + } + break; + case GET_DEVICES: + //if devkeys array is filled -> WRITE_FILE; + break; + case WRITE_FILE: { + FILE *fptr = fopen(file_name, "w"); + app_assert(fptr != NULL, "File open failed"); + uint32_t iv_index; + uint8_t iv_update_state; + sc = sl_btmesh_node_get_ivupdate_state(&iv_index, &iv_update_state); + app_assert_status(sc); + fprintf(fptr, "{\n"); + fprintf(fptr, " \"ivIndex\": %d,\n", iv_index); + + fprintf(fptr, " \"netKeys\": [\n"); + uint32_t netkey_count; + sc = sl_btmesh_node_get_key_count(NET_KEY, &netkey_count); + app_assert_status(sc); + for (uint32_t i = 0; i < netkey_count; i++) { + uint16_t id; + uint16_t netkey_index; + aes_key_128 key; + sc = sl_btmesh_node_get_key(NET_KEY, i, CURRENT_KEY, &id, &netkey_index, &key); + app_assert_status(sc); + fprintf(fptr, " {\n"); + fprintf(fptr, " \"index\": \"%d\",\n", id); + fprintf(fptr, + " \"value\": \"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\"\n", + A16_AS_ARGS(key.data)); + if (i + 1 == netkey_count) { + fprintf(fptr, " }\n"); + } else { + fprintf(fptr, " },\n"); + } + } + fprintf(fptr, " ],\n"); + + fprintf(fptr, " \"appKeys\": [\n"); + uint32_t appkey_count; + sc = sl_btmesh_node_get_key_count(1, &appkey_count); + app_assert_status(sc); + for (uint32_t i = 0; i < appkey_count; i++) { + uint16_t id; + uint16_t netkey_index; + aes_key_128 key; + sc = sl_btmesh_node_get_key(APP_KEY, i, CURRENT_KEY, &id, &netkey_index, &key); + app_assert_status(sc); + fprintf(fptr, " {\n"); + fprintf(fptr, " \"boundNetKeyIndex\": \"%d\",\n", netkey_index); + fprintf(fptr, " \"index\": \"%d\",\n", id); + fprintf(fptr, + " \"value\": \"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\"\n", + A16_AS_ARGS(key.data)); + if (i + 1 == appkey_count) { + fprintf(fptr, " }\n"); + } else { + fprintf(fptr, " },\n"); + } + } + fprintf(fptr, " ],\n"); + + fprintf(fptr, " \"devKeys\": [\n"); + for (uint32_t i = 0; i < devkeys_count; i++) { + devkey_t devkey = devkeys[i]; + fprintf(fptr, " {\n"); + fprintf(fptr, " \"primaryAddress\": \"%d\",\n", devkey.address); + fprintf(fptr, + " \"uuid\": \"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\",\n", + A16_AS_ARGS(devkey.uuid.data)); + fprintf(fptr, + " \"value\": \"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\"\n", + A16_AS_ARGS(devkey.key.data)); + if (i + 1 == devkeys_count) { + fprintf(fptr, " }\n"); + } else { + fprintf(fptr, " },\n"); + } + } + fprintf(fptr, " ]\n"); + + fprintf(fptr, "}\n"); + free(devkeys); + fclose(fptr); + state = IDLE; + break; + } + case IDLE: + //do nothing + break; + default: + break; + } +} + +void btmesh_key_export_on_event(sl_btmesh_msg_t *evt) +{ + uint32_t evt_id = SL_BT_MSG_ID(evt->header); + if (state == GET_DEVICES + && evt_id == sl_btmesh_evt_prov_ddb_list_id) { + uuid_128 uuid = evt->data.evt_prov_ddb_list.uuid; + uint16_t address; + aes_key_128 key; + uint16_t netkey_index; + uint8_t elements; + sl_status_t sc = sl_btmesh_prov_get_ddb_entry(uuid, &key, &netkey_index, &address, &elements); + app_assert_status(sc); + devkeys[ddb_index] = (devkey_t){ uuid, address, key }; + + ddb_index++; + if (ddb_index == devkeys_count) { + state = WRITE_FILE; + } + } +} diff --git a/app/btmesh/common_host/btmesh_key_export/btmesh_key_export.h b/app/btmesh/common_host/btmesh_key_export/btmesh_key_export.h new file mode 100644 index 00000000000..29930bcb765 --- /dev/null +++ b/app/btmesh/common_host/btmesh_key_export/btmesh_key_export.h @@ -0,0 +1,71 @@ +/**************************************************************************//** +* @file +* @brief BT Mesh Key export functionality +******************************************************************************* +* # 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 BTMESH_KEY_EXPORT_H +#define BTMESH_KEY_EXPORT_H + +#include +#include "sl_btmesh_api.h" + +/**************************************************************************//** + * @brief Set the output file name + * + * @param name File name + *****************************************************************************/ +void btmesh_key_export_set_file_name(char* name); + +/**************************************************************************//** + * @brief Start the key export task + * + *****************************************************************************/ +void btmesh_key_export_start(); + +/**************************************************************************//** + * @brief Check if the key export task is idle + * + * @return true - idle + * @return false - running + *****************************************************************************/ +bool btmesh_key_export_is_idle(); + +/**************************************************************************//** + * @brief Key export task + * + *****************************************************************************/ +void btmesh_key_export_task(); + +/**************************************************************************//** + * @brief Key export event handler + * + * @param evt Event coming from the Bluetooth Mesh stack + *****************************************************************************/ +void btmesh_key_export_on_event(sl_btmesh_msg_t *evt); + +#endif //BTMESH_KEY_EXPORT_H diff --git a/app/btmesh/common_host/btmesh_prov/btmesh_prov.c b/app/btmesh/common_host/btmesh_prov/btmesh_prov.c new file mode 100644 index 00000000000..abbba667ee8 --- /dev/null +++ b/app/btmesh/common_host/btmesh_prov/btmesh_prov.c @@ -0,0 +1,522 @@ +/**************************************************************************//** +* @file +* @brief BT Mesh Provisioner component +******************************************************************************* +* # 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. +* +******************************************************************************/ + +// ---------------------------------------------------------------------------- +// Includes + +#include "app_assert.h" +#include "app_log.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#include "btmesh_conf.h" +#include "btmesh_db.h" +#include "btmesh_prov.h" + +#include "sl_common.h" + +// ---------------------------------------------------------------------------- +// Macros + +#define PB_ADV 0 +#define PB_GATT 1 +#define PB_REMOTE 2 + +/// Utility macro to convert two 8 bit values to 16 bit +#define TOUINT16(a, b) (((uint16_t)a << 8) | b) +/// Maximum number of already available networks to check on startup +#define MAX_NETWORKS_TO_CHECK 5 + +// ---------------------------------------------------------------------------- +// Type definitions + +/// A helper struct to store network status info on provisioner init +typedef struct btmesh_prov_network_on_init_t { + uint16_t netkey_index; ///< Netkey index of the primary network + uint16_t count; ///< Number of networks on the provisioner + uint16_t nodes; ///< Number of nodes in the provisioner's DDB +} btmesh_prov_network_on_init_t; + +// ---------------------------------------------------------------------------- +// Static Function Declarations + +/**************************************************************************//** +* Remove a node from the network +* +* @param[in] node The node to remove +* @param[in] on_job_notification Job status notification callback +* @return Status of starting the node removal process +* @retval SL_STATUS_OK If the node removal job started successfully. +* Error code otherwise. +******************************************************************************/ +static sl_status_t btmesh_prov_remove_node(btmesh_db_node_t *node, + btmesh_conf_on_job_notification_t on_job_notification); + +// ---------------------------------------------------------------------------- +// Static Variables + +/// Variable to store information about the primary network available on +/// provisioner init +static btmesh_prov_network_on_init_t startup_network; +/// The UUID of the provisioner +static uuid_128 provisioner_uuid; + +// ---------------------------------------------------------------------------- +// Function definitions + +void btmesh_prov_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_prov_initialized_id: { + sl_btmesh_evt_prov_initialized_t *prov_initialized_evt; + prov_initialized_evt = (sl_btmesh_evt_prov_initialized_t *)&(evt->data); + uint8_t networks = prov_initialized_evt->networks; + if (0 < networks) { + // The network list is an uint8_t array, addresses are uint16_t + uint8_t network_list[MAX_NETWORKS_TO_CHECK * 2] = { 0 }; + size_t max_list_size = MAX_NETWORKS_TO_CHECK; + size_t list_len_in_bytes; + sl_btmesh_node_get_networks(max_list_size, &list_len_in_bytes, network_list); + for (size_t i = 0; i < networks; i++) { + // Netkey indices are stored little-endian + uint16_t current_netkey_index = TOUINT16(network_list[max_list_size - 2 * i], + network_list[max_list_size - 2 * i - 1]); + sl_status_t sc = btmesh_db_create_network(current_netkey_index); + if (SL_STATUS_OK != sc) { + app_log_warning("Can't add network to database" APP_LOG_NEW_LINE); + } + } + // List known nodes to build database + btmesh_prov_list_ddb_entries(&startup_network.nodes); + if (0 == startup_network.nodes) { + // Inform app that there are no nodes present in DDB + btmesh_prov_on_ddb_list_ready(startup_network.nodes); + } + } + // Init provisioning records if CBP is present + // Otherwise it's a weak function doing nothing + sl_status_t sc = btmesh_prov_init_provisioning_records(); + app_assert_status_f(sc, "Failed to init provisioning records"); + break; + } + case sl_btmesh_evt_node_provisioning_started_id: + app_log_info("Provisioning started" APP_LOG_NEW_LINE); + break; + case sl_btmesh_evt_node_provisioning_failed_id: + app_log_info("Provisioning failed" APP_LOG_NEW_LINE); + break; + case sl_btmesh_evt_prov_unprov_beacon_id: { + // Unprovisioned beacon seen + sl_btmesh_evt_prov_unprov_beacon_t *unprov_beacon_evt; + unprov_beacon_evt = (sl_btmesh_evt_prov_unprov_beacon_t *)&(evt->data); + uint8_t bearer = unprov_beacon_evt->bearer; + bd_addr address = unprov_beacon_evt->address; + uuid_128 uuid = unprov_beacon_evt->uuid; + uint16_t oob_capabilities = unprov_beacon_evt->oob_capabilities; + // Create node in database only once + // note: this will initialize as not available, i.e. unprovisoned + if (NULL == btmesh_db_node_get_by_uuid(uuid) && PB_ADV == bearer) { + btmesh_db_create_node(uuid, address, 0, 0, PB_ADV, oob_capabilities); + } + break; + } + case sl_btmesh_evt_prov_device_provisioned_id: { + sl_status_t sc; + sl_btmesh_evt_prov_device_provisioned_t *prov_evt; + prov_evt = (sl_btmesh_evt_prov_device_provisioned_t *)&(evt->data); + uint16_t address = prov_evt->address; + uuid_128 uuid = prov_evt->uuid; + btmesh_db_node_t *provisioned_node = btmesh_db_node_get_by_uuid(uuid); + if (NULL != provisioned_node) { + // Set node to available, i.e. provisioned + sc = btmesh_db_node_set_availability(provisioned_node, true); + app_log_status_warning_f(sc, "Unable to set node availability" APP_LOG_NEW_LINE); + sc = btmesh_db_node_set_primary_address(provisioned_node, address); + app_log_status_warning_f(sc, "Unable to set primary address" APP_LOG_NEW_LINE); + } + btmesh_prov_on_device_provisioned_evt(address, uuid); + break; + } + case sl_btmesh_evt_prov_provisioning_failed_id: { + sl_status_t sc; + sl_btmesh_evt_prov_provisioning_failed_t *prov_failed_evt; + prov_failed_evt = (sl_btmesh_evt_prov_provisioning_failed_t *)&(evt->data); + uint8_t reason = prov_failed_evt->reason; + uuid_128 uuid = prov_failed_evt->uuid; + btmesh_db_node_t *provisioned_node = btmesh_db_node_get_by_uuid(uuid); + if (NULL != provisioned_node) { + // Remove node from network if present. + // note: this should not happen as the node was and still is unprovisioned + sc = btmesh_db_remove_node_from_network_by_uuid(provisioned_node->primary_subnet->netkey_index, + uuid); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to remove node form network" APP_LOG_NEW_LINE); + } + } + btmesh_prov_on_provision_failed_evt(reason, uuid); + app_log_error("Provisioning failed, reason: 0x%02x" APP_LOG_NEW_LINE, prov_failed_evt->reason); + break; + } + case sl_btmesh_evt_prov_ddb_list_id: { + sl_status_t sc; + sl_btmesh_evt_prov_ddb_list_t *ddb_list_evt; + ddb_list_evt = (sl_btmesh_evt_prov_ddb_list_t *)&(evt->data); + uuid_128 uuid = ddb_list_evt->uuid; + uint16_t address = ddb_list_evt->address; + uint8_t elements = ddb_list_evt->elements; + bd_addr mac = { 0 }; //unknown at this point + sc = btmesh_db_create_node(uuid, mac, address, elements, PB_ADV, 0); + if (SL_STATUS_OK != sc && SL_STATUS_ALREADY_EXISTS != sc) { + app_log_warning("Failed to create node in database!" APP_LOG_NEW_LINE); + } + sc = btmesh_db_add_node_to_network_by_uuid(startup_network.netkey_index, uuid); + if (SL_STATUS_OK != sc && SL_STATUS_ALREADY_EXISTS != sc) { + app_log_warning("Failed to add node to network in database!" APP_LOG_NEW_LINE); + } + startup_network.count--; + if (0 == startup_network.count) { + btmesh_prov_on_ddb_list_ready(startup_network.nodes); + } + break; + } + case sl_btmesh_evt_prov_delete_ddb_entry_complete_id: { + sl_status_t sc; + sl_btmesh_evt_prov_delete_ddb_entry_complete_t *ddb_delete_evt; + ddb_delete_evt = (sl_btmesh_evt_prov_delete_ddb_entry_complete_t *)&(evt->data); + uint16_t result = ddb_delete_evt->result; + uuid_128 uuid = ddb_delete_evt->uuid; + if (0 == result) { + sc = btmesh_db_remove_node_by_uuid(uuid); + if (SL_STATUS_OK != sc) { + app_log_error("Could not remove node from database!" APP_LOG_NEW_LINE); + } + } else { + app_log_warning("Could not delete DDB entry!" APP_LOG_NEW_LINE); + } + } + default: + break; + } + // Let subcomponents handle other events + btmesh_cbp_on_event(evt); +} + +sl_status_t btmesh_prov_start_scanning(void) +{ + sl_status_t sc = sl_btmesh_prov_scan_unprov_beacons(); + return sc; +} + +sl_status_t btmesh_prov_stop_scanning(void) +{ + sl_status_t sc = sl_btmesh_prov_stop_scan_unprov_beacons(); + return sc; +} + +sl_status_t btmesh_prov_setup_provisioning(uint16_t netkey_index, + uuid_128 uuid, + uint8_t bearer_type, + uint8_t attention_timer_sec) +{ + (void)bearer_type; + sl_status_t sc; + sc = sl_btmesh_prov_create_provisioning_session(netkey_index, + uuid, + attention_timer_sec); + if (SL_STATUS_OK != sc) { + app_log_warning("Failed to create provisioning session" APP_LOG_NEW_LINE); + + return sc; + } + + // Setup CBP if enabled, otherwise do nothing + sc = btmesh_prov_setup_cbp(uuid); + return sc; +} + +sl_status_t btmesh_prov_provision_adv_device(uint16_t netkey_index, + uuid_128 uuid, + bd_addr mac_address, + uint8_t bearer_type, + uint8_t attention_timer_sec) +{ + sl_status_t sc; + sc = sl_btmesh_prov_provision_adv_device(uuid); + if (SL_STATUS_OK != sc) { + app_log_status_error_f(sc, "Failed to start provisioning" APP_LOG_NEW_LINE); + return sc; + } + sc = btmesh_db_create_node(uuid, mac_address, netkey_index, 0, bearer_type, 0); + if ((SL_STATUS_OK != sc) && (SL_STATUS_ALREADY_EXISTS != sc)) { + app_log_status_warning_f(sc, "Failed to create node in database!" APP_LOG_NEW_LINE); + } + sc = btmesh_db_add_node_to_network_by_uuid(netkey_index, uuid); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to add node to network in database!" APP_LOG_NEW_LINE); + } + // Return OK even if DB is wrong because the network is actually working at this time + return SL_STATUS_OK; +} + +sl_status_t btmesh_prov_get_unprov_uuid_by_id(uint16_t id, uuid_128 *uuid) +{ + sl_status_t sc; + uint16_t node_cnt = 0; + sl_slist_node_t *node_list = btmesh_db_get_node_list(); + btmesh_db_node_t *node; + SL_SLIST_FOR_EACH_ENTRY(node_list, node, btmesh_db_node_t, list_elem) { + if ( false == node->node_available) { + if (node_cnt == id) { + memcpy(uuid, &(node->prov.uuid), sizeof(uuid_128)); + sc = SL_STATUS_OK; + break; + } + node_cnt++; + } + } + if ( id != node_cnt) { + // ID overflow + sc = SL_STATUS_BT_MESH_DOES_NOT_EXIST; + } + return sc; +} + +sl_status_t btmesh_prov_get_prov_uuid_by_id(uint16_t id, uuid_128 *uuid) +{ + sl_status_t sc; + uint16_t node_cnt = 0; + sl_slist_node_t *node_list = btmesh_db_get_node_list(); + btmesh_db_node_t *node; + SL_SLIST_FOR_EACH_ENTRY(node_list, node, btmesh_db_node_t, list_elem) { + if (true == node->node_available) { + if (0 == memcmp(&provisioner_uuid, &node->prov.uuid, sizeof(uuid_128))) { + // Skip the provisioner itself as self-configuration is not supported + continue; + } + if (node_cnt == id) { + memcpy(uuid, &(node->prov.uuid), sizeof(uuid_128)); + sc = SL_STATUS_OK; + break; + } + node_cnt++; + } + } + if (NULL == node) { + app_log_error("Node not found!" APP_LOG_NEW_LINE); + sc = SL_STATUS_NOT_FOUND; + } + return sc; +} + +sl_status_t btmesh_prov_get_prov_uuid_by_address(uint16_t primary_address, uuid_128 *uuid) +{ + sl_status_t sc; + btmesh_db_node_t *node = btmesh_db_node_get_by_addr(primary_address); + if (NULL == node) { + app_log_error("Node not found!" APP_LOG_NEW_LINE); + sc = SL_STATUS_NOT_FOUND; + } else { + memcpy(uuid, &(node->prov.uuid), sizeof(uuid_128)); + sc = SL_STATUS_OK; + } + return sc; +} + +sl_status_t btmesh_prov_remove_node(btmesh_db_node_t *node, + btmesh_conf_on_job_notification_t on_job_notification) +{ + sl_status_t sc = btmesh_conf_reset_node(node->primary_subnet->netkey_index, + node->prov.prim_address, + on_job_notification); + app_log_status_error_f(sc, "Reset node request failed" APP_LOG_NEW_LINE); + return sc; +} + +sl_status_t btmesh_prov_remove_node_by_uuid(uuid_128 uuid, + btmesh_conf_on_job_notification_t on_job_notification) +{ + btmesh_db_node_t *node = btmesh_db_node_get_by_uuid(uuid); + if (NULL == node) { + app_log_error("Node not found!" APP_LOG_NEW_LINE); + return SL_STATUS_NOT_FOUND; + } else { + sl_status_t sc = btmesh_prov_remove_node(node, on_job_notification); + return sc; + } +} + +sl_status_t btmesh_prov_list_unprovisioned_nodes(void) +{ + static uint16_t id = 0; + btmesh_db_node_t *node; + SL_SLIST_FOR_EACH_ENTRY(btmesh_db_get_node_list(), node, btmesh_db_node_t, list_elem) { + if (false == node->node_available) { + btmesh_prov_on_unprovisioned_node_list_evt(id, node->prov.uuid, node->prov.oob_capabilities); + id++; + } + } + if (0 == id) { + return SL_STATUS_EMPTY; + } + id = 0; + return SL_STATUS_OK; +} + +sl_status_t btmesh_prov_list_provisioned_nodes(void) +{ + static uint16_t id = 0; + sl_status_t sc = sl_btmesh_node_get_uuid(&provisioner_uuid); + if (SL_STATUS_OK != sc) { + app_log_warning("Provisioner device UUID is unknown" APP_LOG_NEW_LINE); + } + btmesh_db_node_t *node; + SL_SLIST_FOR_EACH_ENTRY(btmesh_db_get_node_list(), node, btmesh_db_node_t, list_elem) { + if (true == node->node_available) { + if (0 == memcmp(&provisioner_uuid, &node->prov.uuid, sizeof(uuid_128))) { + // Skip the provisioner itself as self-configuration is not supported + continue; + } + btmesh_prov_on_provisioned_node_list_evt(id, node->prov.uuid, node->prov.prim_address); + id++; + } + } + if (0 == id) { + return SL_STATUS_EMPTY; + } + id = 0; + return SL_STATUS_OK; +} + +sl_status_t btmesh_prov_list_ddb_entries(uint16_t *count) +{ + sl_status_t sc = sl_btmesh_prov_list_ddb_entries(count); + if (SL_STATUS_OK == sc) { + startup_network.count = *count; + startup_network.nodes = *count; + } + return sc; +} + +sl_status_t btmesh_prov_delete_ddb_entry(uuid_128 uuid) +{ + sl_status_t sc = sl_btmesh_prov_delete_ddb_entry(uuid); + return sc; +} + +sl_status_t btmesh_prov_create_appkey(uint16_t netkey_index, + uint16_t appkey_index, + size_t key_len, + const uint8_t *key, + size_t max_application_key_size, + size_t *application_key_len, + uint8_t *application_key) +{ + sl_status_t sc = sl_btmesh_prov_create_appkey(netkey_index, + appkey_index, + key_len, + key, + max_application_key_size, + application_key_len, + application_key); + return sc; +} + +sl_status_t btmesh_prov_create_network(uint16_t netkey_index, + size_t key_len, + const uint8_t *key) +{ + sl_status_t sc = btmesh_db_create_network(netkey_index); + if (SL_STATUS_OK != sc && SL_STATUS_ALREADY_EXISTS != sc) { + app_log_error("Failed to add network to database" APP_LOG_NEW_LINE); + } + + sc = sl_btmesh_prov_create_network(netkey_index, + key_len, + key); + return sc; +} + +// ---------------------------------------------------------------------------- +// Weak implementations of callbacks + +SL_WEAK void btmesh_prov_on_device_provisioned_evt(uint16_t address, uuid_128 uuid) +{ + (void)address; + (void)uuid; +} + +SL_WEAK void btmesh_prov_on_provision_failed_evt(uint8_t reason, uuid_128 uuid) +{ + (void)reason; + (void)uuid; +} + +SL_WEAK void btmesh_prov_on_unprovisioned_node_list_evt(uint16_t id, + uuid_128 uuid, + uint16_t oob_capabilities) +{ + (void)id; + (void)uuid; + (void)oob_capabilities; +} + +SL_WEAK void btmesh_prov_on_provisioned_node_list_evt(uint16_t id, + uuid_128 uuid, + uint16_t primary_address) +{ + (void)id; + (void)uuid; + (void)primary_address; +} + +SL_WEAK void btmesh_prov_free_remote_serverlist(void) +{ +} + +SL_WEAK void btmesh_prov_on_ddb_list_ready(uint16_t count) +{ + (void)count; +} + +SL_WEAK sl_status_t btmesh_prov_init_provisioning_records(void) +{ + return SL_STATUS_OK; +} + +SL_WEAK sl_status_t btmesh_prov_setup_cbp(uuid_128 uuid) +{ + (void)uuid; + return SL_STATUS_OK; +} + +SL_WEAK void btmesh_cbp_on_event(sl_btmesh_msg_t *evt) +{ + (void)evt; +} diff --git a/app/btmesh/common_host/btmesh_prov/btmesh_prov.h b/app/btmesh/common_host/btmesh_prov/btmesh_prov.h new file mode 100644 index 00000000000..85ff2ce2576 --- /dev/null +++ b/app/btmesh/common_host/btmesh_prov/btmesh_prov.h @@ -0,0 +1,311 @@ +/**************************************************************************//** +* @file +* @brief BT Mesh Provisioner component +****************************************************************************** +* # 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 BTMESH_PROV_H +#define BTMESH_PROV_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "sl_btmesh_api.h" +#include "btmesh_conf.h" + +// Bits 7 and 8 of the oob_capabilities flag indicate that the node +// supports CBP +#define BTMESH_OOB_FLAG_CBP_CAPABLE 0x180 + +/***************************************************************************//** +* Provisioner Process Action. +* +* @param[in] evt Received BT Mesh event +*******************************************************************************/ +void btmesh_prov_on_event(sl_btmesh_msg_t *evt); + +/***************************************************************************//** +* Start scanning for unprovisioned beaconing nodes +* +* @return Status of the scan. +* @retval SL_STATUS_OK if scan started successfully. +* Error value otherwise. +*******************************************************************************/ +sl_status_t btmesh_prov_start_scanning(void); + +/***************************************************************************//** +* Stop scanning of unprovisioned beaconing nodes +* +* @return Status of the scan. +* @retval SL_STATUS_OK if scan stopped successfully. +* Error value otherwise. +*******************************************************************************/ +sl_status_t btmesh_prov_stop_scanning(void); + +/***************************************************************************//** +* Setup provisioning +* +* @param[in] netkey_index Netkey index of the network +* @param[in] uuid UUID of the node +* @param[in] bearer_type Provisioning bearer type. Either PB-ADV or PB-GATT +* @param[in] attention_timer_sec Attention timer value in seconds +* @return Status of the provisioning. +* @retval SL_STATUS_OK If provisioning is set up successfully. +* Error code otherwise. +*******************************************************************************/ +sl_status_t btmesh_prov_setup_provisioning(uint16_t netkey_index, + uuid_128 uuid, + uint8_t bearer_type, + uint8_t attention_timer_sec); + +/***************************************************************************//** +* Provision device into network +* +* @param[in] netkey_index Netkey index of the network +* @param[in] uuid UUID of the node +* @param[in] mac_address Bluetooth address of the node +* @param[in] bearer_type Provisioning bearer type. Either PB-ADV or PB-GATT +* @param[in] attention_timer_sec Attention timer value in seconds +* @return Status of the provisioning. +* @retval SL_STATUS_OK If provisioning is \a started successfully. +* Error code otherwise. +*******************************************************************************/ +sl_status_t btmesh_prov_provision_adv_device(uint16_t netkey_index, + uuid_128 uuid, + bd_addr mac_address, + uint8_t bearer_type, + uint8_t attention_timer_sec); + +/**************************************************************************//** +* Get UUID based on the ID of an unprovisioned node +* +* @param[in] id ID for which the UUID was requested +* @param[out] uuid UUID of the node +* @return Status of the provisioning. +* @retval SL_STATUS_OK If the ID is valid and the related UUID was copied +* to the output parameter +* Error code otherwise. +******************************************************************************/ +sl_status_t btmesh_prov_get_unprov_uuid_by_id(uint16_t id, uuid_128 *uuid); + +/**************************************************************************//** +* Get UUID based on the ID of a provisioned node +* +* @param[in] id ID for which the UUID was requested +* @param[out] uuid UUID of the node +* @return Status of the provisioning. +* @retval SL_STATUS_OK If the ID is valid and the related UUID was copied +* to the output parameter +* Error code otherwise. +******************************************************************************/ +sl_status_t btmesh_prov_get_prov_uuid_by_id(uint16_t id, uuid_128 *uuid); + +/**************************************************************************//** +* Get UUID based on the primary address of a node +* +* @param[in] primary_address primary address for which UUID was requested +* @param[out] uuid UUID of the node +* @return Status of the provisioning. +* @retval SL_STATUS_OK If the address is valid and the related UUID was copied +* to the output parameter +* Error code otherwise. +******************************************************************************/ +sl_status_t btmesh_prov_get_prov_uuid_by_address(uint16_t primary_address, uuid_128 *uuid); + +/**************************************************************************//** +* Remove a node from a network by UUID +* +* @param[in] uuid UUID of the node +* @param[in] on_job_notification Job status notification callback +* @return Status of the node removal. +* @retval SL_STATUS_OK if node removal \a started successfully. +* Error code otherwise. +* +* Node removal success or failure is reported in on_job_notification callback. +******************************************************************************/ +sl_status_t btmesh_prov_remove_node_by_uuid(uuid_128 uuid, + btmesh_conf_on_job_notification_t on_job_notification); + +/**************************************************************************//** +* List all unprovisioned nodes found in a previous scan +* +* @return Status of the command. +* @retval SL_STATUS_OK If all known nodes are listed. +* @retval SL_STATUS_EMPTY If no unprovisioned nodes are known. +******************************************************************************/ +sl_status_t btmesh_prov_list_unprovisioned_nodes(void); + +/**************************************************************************//** +* List all provisioned nodes present +* +* @return Status of the command. +* @retval SL_STATUS_OK If all known nodes are listed. +* @retval SL_STATUS_EMPTY If no provisioned nodes are known. +******************************************************************************/ +sl_status_t btmesh_prov_list_provisioned_nodes(void); + +/**************************************************************************//** +* List all entries in the device database of the provisioner node +* +* @param[out] count Number of nodes in the DDB +* @return Status of the list command. +* @retval SL_STATUS_OK If the listing started successfully. +* Error code otherwise. +* +* The provisioner will trigger \a count sl_btmesh_evt_prov_ddb_list events. +******************************************************************************/ +sl_status_t btmesh_prov_list_ddb_entries(uint16_t *count); + +/**************************************************************************//** +* Delete a node from the device database of the provisioner node +* +* @param[in] uuid UUID of the node to be deleted +* @return Status of the command. +* @retval SL_STATUS_OK If deletion started successfully. +* Error code otherwise. +* +* The provisioner will trigger an sl_btmesh_evt_prov_delete_ddb_entry_complete +* event when the deletion is finished. +******************************************************************************/ +sl_status_t btmesh_prov_delete_ddb_entry(uuid_128 uuid); + +/**************************************************************************//** +* Create a new application key on the provisioner node +* +* @param[in] netkey_index Netkey index of the network. +* @param[in] appkey_index Appkey index to use. +* @param[in] key_len Length of the appkey data. +* @param[in] key Key value to use. Set to zero-length to generate random key. +* @param[in] max_application_key_size Size of output buffer passed in application_key. +* @param[out] application_key_len The length of output data written to application_key. +* @param[out] application_key New application key. Ignore it if the result was non-zero. +* @return Status of the key creation procedure. +* @retval SL_STATUS_OK If successful. +* Error code otherwise. +******************************************************************************/ +sl_status_t btmesh_prov_create_appkey(uint16_t netkey_index, + uint16_t appkey_index, + size_t key_len, + const uint8_t *key, + size_t max_application_key_size, + size_t *application_key_len, + uint8_t *application_key); + +/**************************************************************************//** +* Create a new network on the provisioner node +* +* @param[in] netkey_index Netkey index to use. +* @param[in] key_len Length of the netkey data. +* @param[in] key Key value to use. Set to zero-length array to generate a random key. +* @return Status of the network creation. +* @retval SL_STATUS_OK If successful. +* Error code otherwise. +******************************************************************************/ +sl_status_t btmesh_prov_create_network(uint16_t netkey_index, + size_t key_len, + const uint8_t *key); + +/**************************************************************************//** +* Callback to inform the application that a new node was provisioned +* +* @param[in] address Primary element address of the node +* @param[in] uuid UUID of the node +******************************************************************************/ +void btmesh_prov_on_device_provisioned_evt(uint16_t address, uuid_128 uuid); + +/**************************************************************************//** +* Callback to inform the application that a provisioning session failed +* +* @param[in] reason Reason of the failure +* @param[in] uuid UUID of the node +******************************************************************************/ +void btmesh_prov_on_provision_failed_evt(uint8_t reason, uuid_128 uuid); + +/**************************************************************************//** +* Callback to inform the application of an unprovisioned node +* +* @param[in] id List ID of the node +* @param[in] uuid UUID of the node +* @param[in] oob_capabilities OOB capability bitmask +******************************************************************************/ +void btmesh_prov_on_unprovisioned_node_list_evt(uint16_t id, + uuid_128 uuid, + uint16_t oob_capabilities); + +/**************************************************************************//** +* Callback to inform the application of a provisioned node +* +* @param[in] id List ID of the node +* @param[in] uuid UUID of the node +* @param[in] primary_address Primary element address of the node +******************************************************************************/ +void btmesh_prov_on_provisioned_node_list_evt(uint16_t id, + uuid_128 uuid, + uint16_t primary_address); + +/**************************************************************************//** +* Callback to inform the application that the DDB list is ready +* +* @param[in] count Number of nodes in the DDB +******************************************************************************/ +void btmesh_prov_on_ddb_list_ready(uint16_t count); + +/**************************************************************************//** + * Free remote provisioner internal server lists + * + *****************************************************************************/ +void btmesh_prov_free_remote_serverlist(void); + +/***************************************************************************//** +* Setup certificate-based provisioning +* +* @param[in] uuid UUID of the device to be provisioned +* @return Status of the setup sequence +* @retval SL_STATUS_OK If successful +* Error code otherwise +*******************************************************************************/ +sl_status_t btmesh_prov_setup_cbp(uuid_128 uuid); + +/***************************************************************************//** +* Wrapper for provisioning records initialization +* +* @return Status of the initialization sequence +*******************************************************************************/ +sl_status_t btmesh_prov_init_provisioning_records(void); + +/***************************************************************************//** +* BT Mesh event handler for CBP +* +* @param[in] evt The received event +*******************************************************************************/ +void btmesh_cbp_on_event(sl_btmesh_msg_t *evt); + +#ifdef __cplusplus +} +#endif + +#endif // BTMESH_PROV_H diff --git a/app/btmesh/common_host/btmesh_remote_prov/btmesh_remote_prov.c b/app/btmesh/common_host/btmesh_remote_prov/btmesh_remote_prov.c new file mode 100644 index 00000000000..4c5c9814206 --- /dev/null +++ b/app/btmesh/common_host/btmesh_remote_prov/btmesh_remote_prov.c @@ -0,0 +1,625 @@ +/***************************************************************************/ /** + * @file + * @brief BT Mesh Remote Provisioner Component + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes + +#include +#include "app_assert.h" +#include "app_log.h" +#include "sl_common.h" +#include "sl_slist.h" +#include "btmesh_prov.h" +#include "btmesh_remote_prov.h" +#include "btmesh_db.h" +#include "sl_simple_timer.h" + +// ----------------------------------------------------------------------------- +// Macros + +/// Indication that remote provisioning server is available +#define REMOTE_PROV_SERVER_AVAILABLE 1 +/// Maximum number of UUIDs that can be reported during scanning +#define REMOTE_SCAN_ITEM_LIMIT 10 +/// Perform multiple remote target scan +#define MULTIPLE_TARGET_SCAN 0 +/// Link open type to disable NPPI procedure +#define REMOTE_PROV_NPPI_DISABLE (uint8_t)0xFF +/// Link open timeout in seconds +#define LINK_OPEN_TIMEOUT (uint8_t)10 +/// Retry number of server scan capabilies +#define SCAN_CAPABILITIES_RETRY (uint8_t)0 +/// Server scan capabilities timeout in miliseconds +#define SCAN_CAPABILITIES_TIMEOUT (uint32_t)1000 +/// Element index which contains the remote provisioning client model on host provisioner +#define REMOTE_PROV_CLIENT_ELEMENT_INDEX 0 + +// ----------------------------------------------------------------------------- +// Type definitions + +/// Internal structure for remote provisioning server parameters storage +struct remote_provisioning_server_s{ + uint16_t index; + uint16_t server_address; + uint8_t max_items; + uint8_t server_status; + uint8_t unprov_dev_count; + uuid_128 *unprov_uuid; + uint16_t *unprov_oob_capabilities; +}; + +typedef struct remote_provisioning_server_s remote_provisioning_server_t; + +// ----------------------------------------------------------------------------- +// Static Variables + +/// UUID of the unprovisioned device during remote provisioning operation +static uuid_128 rp_uuid; +/// List of available remote provisioning servers +static remote_provisioning_server_t *serverlist = NULL; +/// Number of nodes in the network +static uint16_t node_count; +/// Number of available active remote provisioning servers +static uint16_t active_server_count; +/// Netkey index of the ongoing command +static uint16_t active_netkey_index; +/// Index of the current server in the serverlist +static uint8_t serverlist_index; +/// Current retry numbers of server scan capabilities +static uint8_t scan_capabilities_retry_count; +/// Timer for server scan capabilities report +static sl_simple_timer_t get_capabilities_timer; +/// Timer for remote scanning unprovisioned devices +static sl_simple_timer_t unprov_scan_timer; + +// ----------------------------------------------------------------------------- +// Static Function Declarations + +/***************************************************************************//** +* Server related list reorder by eliminating the non available or non active +* remote provisioning server elements from serverlist +* +*******************************************************************************/ +static void serverlist_reorder(void); + +/***************************************************************************//** +* Timer start and capabilities scan start for current server in serverlist +* @retval SL_STATUS_OK If the next server scan capabilities check started +* successfully +* Error code otherwise +*******************************************************************************/ +static sl_status_t start_next_capabilities_scan(void); + +/***************************************************************************//** +* Get server capabilities timer callback +* +* @param[in] timer Pointer to the timer used +* @param[in] data Data from the timer +*******************************************************************************/ +static void on_get_capabilities_timer(sl_simple_timer_t *timer, void *data); + +/***************************************************************************//** +* Get unprovisioned nodes scan timer callback +* +* @param[in] timer Pointer to the timer used +* @param[in] data Data from the timer +*******************************************************************************/ +static void on_unprov_scan_timer(sl_simple_timer_t *timer, void *data); + +// ----------------------------------------------------------------------------- +// Function definitions + +void btmesh_remote_prov_on_event(const sl_btmesh_msg_t *evt) +{ + sl_status_t sc; + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_remote_provisioning_client_scan_capabilities_id: { + const sl_btmesh_evt_remote_provisioning_client_scan_capabilities_t *rem_prov_scan_cap_evt; + rem_prov_scan_cap_evt = &(evt->data.evt_remote_provisioning_client_scan_capabilities); + if (rem_prov_scan_cap_evt->max_items > 0) { + serverlist[serverlist_index].index = active_server_count; + serverlist[serverlist_index].max_items = rem_prov_scan_cap_evt->max_items; + serverlist[serverlist_index].server_status = REMOTE_PROV_SERVER_AVAILABLE; + active_server_count++; + btmesh_remote_prov_on_client_scan_capabilities(rem_prov_scan_cap_evt->server, + rem_prov_scan_cap_evt->max_items); + sc = start_next_capabilities_scan(); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, + "Failed to start next server scan capabilities check addr: 0x%04x!" APP_LOG_NEW_LINE, + rem_prov_scan_cap_evt->server); + } + } + break; + } + + case sl_btmesh_evt_remote_provisioning_client_scan_report_id: { + uint16_t server_idx; + const sl_btmesh_evt_remote_provisioning_client_scan_report_t *rem_prov_scan_report_evt; + rem_prov_scan_report_evt = &(evt->data.evt_remote_provisioning_client_scan_report); + uint16_t oob = rem_prov_scan_report_evt->oob; + for (server_idx = 0; server_idx < active_server_count; server_idx++) { + if (rem_prov_scan_report_evt->server == serverlist[server_idx].server_address) { + uint16_t unprov_cnt = serverlist[server_idx].unprov_dev_count; + serverlist[server_idx].unprov_uuid = realloc(serverlist[server_idx].unprov_uuid, (unprov_cnt + 1) * sizeof(uuid_128)); + if (NULL != serverlist[server_idx].unprov_uuid) { + memcpy(serverlist[server_idx].unprov_uuid[unprov_cnt].data, rem_prov_scan_report_evt->uuid.data, sizeof(uuid_128)); + serverlist[server_idx].unprov_dev_count++; + } else { + app_log_error("Memory realloc error for remote prov scanning"APP_LOG_NEW_LINE); + } + serverlist[server_idx].unprov_oob_capabilities = realloc(serverlist[server_idx].unprov_oob_capabilities, (unprov_cnt + 1) * sizeof(uint16_t)); + if (NULL != serverlist[server_idx].unprov_oob_capabilities) { + serverlist[server_idx].unprov_oob_capabilities[unprov_cnt] = oob; + } else { + app_log_error("Memory realloc error for remote prov scanning"APP_LOG_NEW_LINE); + } + } + } + btmesh_remote_prov_on_client_scan_report(rem_prov_scan_report_evt->uuid); + break; + } + + case sl_btmesh_evt_remote_provisioning_client_link_report_id: { + const sl_btmesh_evt_remote_provisioning_client_link_report_t *rem_prov_link_report_evt; + rem_prov_link_report_evt = &(evt->data.evt_remote_provisioning_client_link_report); + if ((sl_btmesh_remote_provisioning_server_success == rem_prov_link_report_evt->status) + && (sl_btmesh_remote_provisioning_client_link_state_active == rem_prov_link_report_evt->state)) { + sc = sl_btmesh_prov_provision_remote_device(rp_uuid, rem_prov_link_report_evt->server); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to start device remote provisioning!" APP_LOG_NEW_LINE); + } + } else if (sl_btmesh_remote_provisioning_server_link_closed_by_client != rem_prov_link_report_evt->status) { + btmesh_prov_on_provision_failed_evt(rem_prov_link_report_evt->status, + rp_uuid); + } + break; + } + case sl_btmesh_evt_remote_provisioning_client_scan_status_id: { + const sl_btmesh_evt_remote_provisioning_client_scan_status_t *rem_prov_scan_status_evt; + rem_prov_scan_status_evt = &(evt->data.evt_remote_provisioning_client_scan_status); + btmesh_remote_prov_on_client_scan_status(rem_prov_scan_status_evt->server, + rem_prov_scan_status_evt->status, + rem_prov_scan_status_evt->state); + break; + } + case sl_btmesh_evt_remote_provisioning_client_link_status_id: { + const sl_btmesh_evt_remote_provisioning_client_link_status_t *rem_prov_link_status_evt; + rem_prov_link_status_evt = &(evt->data.evt_remote_provisioning_client_link_status); + btmesh_remote_prov_on_client_link_status(rem_prov_link_status_evt->server, + rem_prov_link_status_evt->status, + rem_prov_link_status_evt->state); + break; + } + default: + break; + } +} + +sl_status_t btmesh_remote_prov_start_server_capabilities_scan(uint16_t netkey_index) +{ + sl_status_t sc = SL_STATUS_OK; + sl_slist_node_t *node_list; + btmesh_db_node_t *node; + btmesh_db_network_t *network = NULL; + uint16_t idx = 0; + + node_count = 0; + network = btmesh_db_network_get_network(netkey_index); + + if (NULL != network) { + node_count = network->node_count; + } + + if (0 < node_count) { + active_netkey_index = netkey_index; + // Clear remote serverlist + btmesh_prov_free_remote_serverlist(); + // Create serverlist for all possible nodes + serverlist = (remote_provisioning_server_t*)calloc(node_count, sizeof(remote_provisioning_server_t)); + if (NULL == serverlist) { + sc = SL_STATUS_ALLOCATION_FAILED; + } else { + // Get the available nodelist + node_list = btmesh_db_get_node_list(); + // Go trough nodelist and read the address of every available node + idx = 0; + SL_SLIST_FOR_EACH_ENTRY(node_list, node, btmesh_db_node_t, list_elem) { + if (true == node->node_available) { + serverlist[idx].server_address = node->prov.prim_address; + serverlist[idx].index = REMOTE_PROV_UNUSED_ID; + idx++; + } + } + // Start scanning available servers with first element in the list + sc = sl_btmesh_remote_provisioning_client_get_scan_capabilities(netkey_index, + serverlist[serverlist_index].server_address, + REMOTE_PROV_CLIENT_ELEMENT_INDEX); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, + "Failed to start scan capabilities for server: 0x%04x!" APP_LOG_NEW_LINE, + serverlist[serverlist_index].server_address); + } else { + // Start timer for scan capabilities response timeout + sc = sl_simple_timer_start(&get_capabilities_timer, + SCAN_CAPABILITIES_TIMEOUT, + on_get_capabilities_timer, + NULL, + false); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to start capabilities timer" APP_LOG_NEW_LINE); + } + } + } + } else { + sc = SL_STATUS_EMPTY; + } + return sc; +} + +sl_status_t btmesh_remote_prov_start_device_scan_by_address(uint16_t netkey_index, uint16_t server, uint8_t timeout) +{ + uuid_128 dummy_uuid = { 0 }; + uint16_t idx; + uint32_t timeout_ms; + + sl_status_t sc = sl_btmesh_remote_provisioning_client_start_scan(netkey_index, + server, + REMOTE_PROV_CLIENT_ELEMENT_INDEX, + REMOTE_SCAN_ITEM_LIMIT, + timeout, + MULTIPLE_TARGET_SCAN, + dummy_uuid); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to start remote scan!" APP_LOG_NEW_LINE); + } else { + timeout_ms = timeout * 1000; + sc = sl_simple_timer_start(&unprov_scan_timer, + timeout_ms, + on_unprov_scan_timer, + NULL, + false); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to start scanning timer" APP_LOG_NEW_LINE); + } + for (idx = 0; idx < active_server_count; idx++) { + if (server == serverlist[idx].server_address) { + free(serverlist[idx].unprov_uuid); + serverlist[idx].unprov_uuid = NULL; + free(serverlist[idx].unprov_oob_capabilities); + serverlist[idx].unprov_oob_capabilities = NULL; + serverlist[idx].unprov_dev_count = 0; + } + } + } + + return sc; +} + +sl_status_t btmesh_remote_prov_list_unprovisioned_nodes_by_addr(uint16_t addr) +{ + uint16_t server_idx; + uint16_t uuid_idx; + + for (server_idx = 0; server_idx < active_server_count; server_idx++) { + if (addr == serverlist[server_idx].server_address) { + for (uuid_idx = 0; uuid_idx < serverlist[server_idx].unprov_dev_count; uuid_idx++) { + btmesh_remote_prov_on_unprovisioned_node_list(uuid_idx, + serverlist[server_idx].unprov_uuid[uuid_idx]); + } + if (0 != uuid_idx) { + return SL_STATUS_OK; + } else { + return SL_STATUS_EMPTY; + } + } + } + return SL_STATUS_EMPTY; +} + +sl_status_t btmesh_remote_prov_start_provisioning(uint16_t netkey_index, + uint16_t server, + uuid_128 uuid, + uint8_t bearer_type, + uint8_t attention_timer_sec) +{ + sl_status_t sc; + rp_uuid = uuid; + bd_addr rp_mac = { 0 }; + sc = btmesh_prov_setup_provisioning(netkey_index, rp_uuid, bearer_type, attention_timer_sec); + if (SL_STATUS_BT_MESH_ALREADY_EXISTS == sc) { + btmesh_db_add_node_to_network_by_uuid(netkey_index, rp_uuid); + btmesh_prov_delete_ddb_entry(rp_uuid); + } else if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to create provisioning session!" APP_LOG_NEW_LINE); + } else { + sc = btmesh_db_create_node(rp_uuid, rp_mac, server, 0, bearer_type, 0); + if ((SL_STATUS_OK != sc) && (SL_STATUS_ALREADY_EXISTS != sc)) { + app_log_status_warning_f(sc, "Failed to create node in database!" APP_LOG_NEW_LINE); + } + + sc = btmesh_db_add_node_to_network_by_uuid(netkey_index, rp_uuid); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to add node to network in database!" APP_LOG_NEW_LINE); + } + + sc = sl_btmesh_remote_provisioning_client_open_link(netkey_index, + server, + REMOTE_PROV_CLIENT_ELEMENT_INDEX, + LINK_OPEN_TIMEOUT, + REMOTE_PROV_NPPI_DISABLE, + rp_uuid); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Remote provisioning failed to open link!" APP_LOG_NEW_LINE); + } + } + + return sc; +} + +sl_status_t btmesh_remote_prov_get_server_address_by_id(uint16_t id, uint16_t *server) +{ + uint16_t server_idx; + + for (server_idx = 0; server_idx < active_server_count; server_idx++) { + if (id == serverlist[server_idx].index) { + *server = serverlist[server_idx].server_address; + return SL_STATUS_OK; + } + } + return SL_STATUS_NOT_FOUND; +} + +sl_status_t btmesh_remote_prov_get_unprov_uuid_by_id(uint16_t id, uint16_t server, uuid_128 *uuid, uint16_t *oob_capabilities) +{ + uint16_t server_idx; + uint16_t uuid_idx; + + for (server_idx = 0; server_idx < active_server_count; server_idx++) { + if (server == serverlist[server_idx].server_address) { + for (uuid_idx = 0; uuid_idx < serverlist[server_idx].unprov_dev_count; uuid_idx++) { + if (id == uuid_idx) { + *uuid = serverlist[server_idx].unprov_uuid[uuid_idx]; + *oob_capabilities = serverlist[server_idx].unprov_oob_capabilities[uuid_idx]; + return SL_STATUS_OK; + } + } + } + } + return SL_STATUS_EMPTY; +} + +void btmesh_prov_free_remote_serverlist(void) +{ + uint16_t idx; + if (NULL != serverlist) { + for (idx = 0; idx < active_server_count; idx++) { + free(serverlist[idx].unprov_uuid); + serverlist[idx].unprov_uuid = NULL; + } + free(serverlist); + serverlist = NULL; + active_server_count = 0; + serverlist_index = 0; + scan_capabilities_retry_count = 0; + } +} + +sl_status_t btmesh_remote_prov_list_active_servers(void) +{ + uint16_t idx = 0; + uint16_t cnt = 0; + + while (idx < active_server_count) { + if (REMOTE_PROV_SERVER_AVAILABLE == serverlist[cnt].server_status) { + btmesh_remote_prov_on_serverlist(serverlist[cnt].index, serverlist[cnt].server_address); + idx++; + } + cnt++; + } + if (0 == idx) { + return SL_STATUS_EMPTY; + } + + return SL_STATUS_OK; +} + +// ----------------------------------------------------------------------------- +// Local static functions + +static void serverlist_reorder(void) +{ + remote_provisioning_server_t *tmp_serverlist = NULL; + uint16_t idx; + + tmp_serverlist = (remote_provisioning_server_t*)calloc(active_server_count, sizeof(remote_provisioning_server_t)); + + if (NULL != tmp_serverlist) { + for (idx = 0; idx < node_count; idx++) { + if ((REMOTE_PROV_SERVER_AVAILABLE == serverlist[idx].server_status) && (0 != serverlist[idx].server_address)) { + memcpy(tmp_serverlist + serverlist[idx].index, serverlist + idx, sizeof(remote_provisioning_server_t) ); + } + } + + free(serverlist); + serverlist = tmp_serverlist; + } +} + +static sl_status_t start_next_capabilities_scan(void) +{ + sl_status_t ret_val = SL_STATUS_OK; + sl_status_t sc = sl_simple_timer_stop(&get_capabilities_timer); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to stop timer!" APP_LOG_NEW_LINE); + ret_val = sc; + } + serverlist_index++; + if (node_count > serverlist_index) { + // Initialize retry counter at first scan capabilities call for next node in list + scan_capabilities_retry_count = 0; + + sc = sl_btmesh_remote_provisioning_client_get_scan_capabilities(active_netkey_index, + serverlist[serverlist_index].server_address, + REMOTE_PROV_CLIENT_ELEMENT_INDEX); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, + "Failed to start scan capabilities for next server: 0x%04x!" APP_LOG_NEW_LINE, + serverlist[serverlist_index].server_address); + ret_val = sc; + } + sc = sl_simple_timer_start(&get_capabilities_timer, + SCAN_CAPABILITIES_TIMEOUT, + on_get_capabilities_timer, + NULL, + false); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to start capabilities timer next server" APP_LOG_NEW_LINE); + ret_val = sc; + } + } else { + serverlist_reorder(); + btmesh_remote_prov_on_client_scan_capabilities_finished(); + } + return ret_val; +} + +// ----------------------------------------------------------------------------- +// Timer callbacks + +static void on_get_capabilities_timer(sl_simple_timer_t *timer, void *data) +{ + (void)data; + (void)timer; + + sl_status_t sc; + if (SCAN_CAPABILITIES_RETRY > scan_capabilities_retry_count) { + scan_capabilities_retry_count++; + sc = sl_btmesh_remote_provisioning_client_get_scan_capabilities(active_netkey_index, + serverlist[serverlist_index].server_address, + REMOTE_PROV_CLIENT_ELEMENT_INDEX); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, + "Failed to restart scan capabilities for server: 0x%04x in cb!" APP_LOG_NEW_LINE, + serverlist[serverlist_index].server_address); + } + sc = sl_simple_timer_start(&get_capabilities_timer, + SCAN_CAPABILITIES_TIMEOUT, + on_get_capabilities_timer, + NULL, + false); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to start capabilities timer in callback retry" APP_LOG_NEW_LINE); + } + } else { + serverlist_index++; + if (node_count > serverlist_index) { + // Initialize retry counter at first scan capabilities call for next node in list + scan_capabilities_retry_count = 0; + sc = sl_btmesh_remote_provisioning_client_get_scan_capabilities(active_netkey_index, + serverlist[serverlist_index].server_address, + REMOTE_PROV_CLIENT_ELEMENT_INDEX); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, + "Failed to start scan capabilities for next server: 0x%04x in cb!" APP_LOG_NEW_LINE, + serverlist[serverlist_index].server_address); + } + sc = sl_simple_timer_start(&get_capabilities_timer, + SCAN_CAPABILITIES_TIMEOUT, + on_get_capabilities_timer, + NULL, + false); + if (SL_STATUS_OK != sc) { + app_log_status_warning_f(sc, "Failed to start capabilities timer in callback next server" APP_LOG_NEW_LINE); + } + } else { + // If all servers capabilities scan are finalized reorganize the list by removing the non-active servers + serverlist_reorder(); + btmesh_remote_prov_on_client_scan_capabilities_finished(); + } + } +} + +static void on_unprov_scan_timer(sl_simple_timer_t *timer, void *data) +{ + (void)data; + (void)timer; + + btmesh_remote_prov_on_client_scan_finished(); +} + +// ----------------------------------------------------------------------------- +// Weak implementations of callbacks + +SL_WEAK void btmesh_remote_prov_on_client_scan_capabilities(uint16_t server, + uint8_t max_items) +{ + (void)server; + (void)max_items; +} + +SL_WEAK void btmesh_remote_prov_on_client_scan_capabilities_finished(void) +{ +} + +SL_WEAK void btmesh_remote_prov_on_client_scan_report(uuid_128 uuid) +{ + (void)uuid; +} + +SL_WEAK void btmesh_remote_prov_on_client_scan_finished(void) +{ +} + +SL_WEAK void btmesh_remote_prov_on_unprovisioned_node_list(uint16_t id, + uuid_128 uuid) +{ + (void)id; + (void)uuid; +} + +SL_WEAK void btmesh_remote_prov_on_serverlist(uint16_t id, + uint16_t server) +{ + (void)id; + (void)server; +} + +SL_WEAK void btmesh_remote_prov_on_client_scan_status(uint16_t server, + uint8_t status, + uint8_t state) +{ +} + +SL_WEAK void btmesh_remote_prov_on_client_link_status(uint16_t server, + uint8_t status, + uint8_t state) +{ +} diff --git a/app/btmesh/common_host/btmesh_remote_prov/btmesh_remote_prov.h b/app/btmesh/common_host/btmesh_remote_prov/btmesh_remote_prov.h new file mode 100644 index 00000000000..f9dce4f815d --- /dev/null +++ b/app/btmesh/common_host/btmesh_remote_prov/btmesh_remote_prov.h @@ -0,0 +1,226 @@ +/**************************************************************************//** + * @file + * @brief BT Mesh Remote Provisioner Component + ****************************************************************************** + * # License + * Copyright 2021 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 BTMESH_REMOTE_PROV_H +#define BTMESH_REMOTE_PROV_H + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "sl_btmesh_api.h" + +/// Unassociated remote provisioning server or unprovisioned node ID +#define REMOTE_PROV_UNUSED_ID 0xffff + +/**************************************************************************//** + * Provisioner Process Action + * + * @param[in] evt Received BT Mesh event + *****************************************************************************/ +void btmesh_remote_prov_on_event(const sl_btmesh_msg_t *evt); + +/**************************************************************************//** +* Start scanning for available remote provisioning servers +* +* @param[in] netkey_index Netkey index of the network +* @return Status of the remote provisioning server scan +* @retval SL_STATUS_OK if scan started successfully +* Error value otherwise +******************************************************************************/ +sl_status_t btmesh_remote_prov_start_server_capabilities_scan(uint16_t netkey_index); + +/**************************************************************************//** +* Start scanning for remote unprovisioned devices by server address +* +* @param[in] netkey_index Netkey index of the network +* @param[in] server Address of the server used for remote scan +* @param[in] timeout Time limit for a scan (in seconds) +* @return Status of the remote provisioning scan +* @retval SL_STATUS_OK if scan started successfully +* Error value otherwise +******************************************************************************/ +sl_status_t btmesh_remote_prov_start_device_scan_by_address(uint16_t netkey_index, + uint16_t server, + uint8_t timeout); + +/**************************************************************************//** +* Start remote provisioning an unprovisioned node +* +* @param[in] netkey_index Netkey index of the network +* @param[in] server Address of the server used for remote provisioning +* @param[in] uuid UUID of the unprovisioned node +* @param[in] bearer_type Provisioning bearer type, PB_ADV or PB_GATT +* @param[in] attention_timer_sec Attention timer value in seconds +* @return Status of the provisioning +* @retval SL_STATUS_OK If the provisioning started successfully +* Error code otherwise +******************************************************************************/ +sl_status_t btmesh_remote_prov_start_provisioning(uint16_t netkey_index, + uint16_t server, + uuid_128 uuid, + uint8_t bearer_type, + uint8_t attention_timer_sec); + +/**************************************************************************//** +* Callback to inform the application that a new active remote provisioning +* server was found +* +* @param[in] server Address of the found server +* @param[in] max_items The maximum number of UUIDs that can be reported +* by the server during scanning +******************************************************************************/ +void btmesh_remote_prov_on_client_scan_capabilities(uint16_t server, + uint8_t max_items); + +/**************************************************************************//** +* Callback to inform the application that remote provisioning server capabilities +* scannig of all known nodes from network is finished +* +******************************************************************************/ +void btmesh_remote_prov_on_client_scan_capabilities_finished(void); + +/**************************************************************************//** +* Callback to inform the application that a new unprovisioned node was found +* +* @param[in] uuid UUID of the node +******************************************************************************/ +void btmesh_remote_prov_on_client_scan_report(uuid_128 uuid); + +/**************************************************************************//** +* Callback to inform the application that the remote scanning of unprovisioned +* nodes is finished +* +******************************************************************************/ +void btmesh_remote_prov_on_client_scan_finished(void); + +/**************************************************************************//** +* Callback to inform the application of an unprovisioned node +* +* @param[in] id List ID of the unprovisioned node +* @param[in] uuid UUID of the unprovisioned node +******************************************************************************/ +void btmesh_remote_prov_on_unprovisioned_node_list(uint16_t id, uuid_128 uuid); + +/**************************************************************************//** +* Callback to inform the application of an active remote provisioning server +* +* @param[in] id List ID of the remote provisioning server +* @param[in] server Address of the remote provisioning server +******************************************************************************/ +void btmesh_remote_prov_on_serverlist(uint16_t id, uint16_t server); + +/**************************************************************************//** +* Callback to inform the application that the remote scan command was received +* by the addressed remote provisioning server +* +* @param[in] server Server address +* @param[in] status Server status +* @param[in] state Scan state +******************************************************************************/ +void btmesh_remote_prov_on_client_scan_status(uint16_t server, + uint8_t status, + uint8_t state); + +/**************************************************************************//** +* Callback to inform the application that the open link command was received +* by the addressed remote provisioning server +* +* @param[in] server Server address +* @param[in] status Server status +* @param[in] state Scan state +******************************************************************************/ +void btmesh_remote_prov_on_client_link_status(uint16_t server, + uint8_t status, + uint8_t state); + +/**************************************************************************//** +* List all active remote provisioning servers found in a previous +* server capabilities scan +* +* @return Status of the command +* @retval SL_STATUS_OK If all known servers are listed +* @retval SL_STATUS_EMPTY If no remote provisioning servers are known +******************************************************************************/ +sl_status_t btmesh_remote_prov_list_active_servers(void); + +/**************************************************************************//** +* List all unprovisioned nodes found in a previous remote scan using a +* server address +* +* @param[in] server Address of the remote server used during previous remote scan +* @return Status of the command +* @retval SL_STATUS_OK If all known unprovisioned nodes are listed +* @retval SL_STATUS_EMPTY If no unprovisioned nodes are known by this server +******************************************************************************/ +sl_status_t btmesh_remote_prov_list_unprovisioned_nodes_by_addr(uint16_t server); + +/**************************************************************************//** +* Get the server address associated to a server list ID +* Remote provisioning server capabilities scan is necessary earlier +* +* @param[in] id List ID to which the associated address is requested +* @param[out] server Address of the server associated to the list ID +* @return Status of the command +* @retval SL_STATUS_OK If server was found +* @retval SL_STATUS_EMPTY If server not found +******************************************************************************/ +sl_status_t btmesh_remote_prov_get_server_address_by_id(uint16_t id, + uint16_t *server); + +/**************************************************************************//** +* Get the uuid of an unprovisioned node associated to a list ID +* Remote provisioning server capabilities scan and remote scan is necessary earlier +* +* @param[in] id List ID to which the associated uuid is requested +* @param[in] server Address of the server which was used during remote scan +* @param[out] uuid uuid of the unprovisioned node associated to the list ID +* @param[out] oob_capabilities OOB capability bitmask of the unprovisioned node +* @return Status of the command +* @retval SL_STATUS_OK If server was found +* @retval SL_STATUS_EMPTY If server not found +******************************************************************************/ +sl_status_t btmesh_remote_prov_get_unprov_uuid_by_id(uint16_t id, + uint16_t server, + uuid_128 *uuid, + uint16_t *oob_capabilities); + +/**************************************************************************//** +* Clear all remote provisioning server related lists +* +******************************************************************************/ +void btmesh_remote_prov_free_serverlist(void); + +#ifdef __cplusplus +}; +#endif + +#endif /* BTMESH_REMOTE_PROV_H */ diff --git a/app/btmesh/component/app_btmesh_util.slcc b/app/btmesh/component/app_btmesh_util.slcc new file mode 100644 index 00000000000..5ca0d663659 --- /dev/null +++ b/app/btmesh/component/app_btmesh_util.slcc @@ -0,0 +1,25 @@ +id: "app_btmesh_util" +label: "App Utility" +package: "Btmesh" +description: > + The App BT Mesh Utility provides collection of stateless utility functions and + macros to solve recurring tasks in the BT Mesh components and examples. This + component supports logging of missing application key binding and missing + model publication data configuration errors. + The logging level of these errors are configurable. +category: "Bluetooth Mesh|Utility" +quality: "production" +root_path: "app/btmesh/common/app_btmesh_util" +config_file: + - path: "config/app_btmesh_util_config.h" +include: + - path: "" + file_list: + - path: "app_btmesh_util.h" +source: + - path: "app_btmesh_util.c" +provides: + - name: "app_btmesh_util" +requires: + - name: "btmesh_stack" + - name: "status" \ No newline at end of file diff --git a/app/btmesh/component/btmesh_ae_client.slcc b/app/btmesh/component/btmesh_ae_client.slcc new file mode 100644 index 00000000000..f605a861c8f --- /dev/null +++ b/app/btmesh/component/btmesh_ae_client.slcc @@ -0,0 +1,32 @@ +id: "btmesh_ae_client" +label: "Advertisement Extension Client" +package: "Btmesh" +description: > + Advertisement Extension Client component enables the Silabs Configuration Client vendor model for the node. + Silabs Configuration Client can setup other nodes with Silabs Configuration Server Feature enabled (e.g. by the + Advertisement Extension Server component). + This is a proprietary feature which breaks compliance with AE in BT Mesh 1.1 specification. +category: "Bluetooth Mesh|Models|Proprietary" +quality: "production" +root_path: "app/btmesh/common/btmesh_ae_client" +config_file: + - path: btmesh_ae_client.dcd + directory: btmeshconf +source: + - path: "sl_btmesh_ae_client.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_ae_client.h" +provides: + - name: "btmesh_ae_client" +requires: + - name: "app_assert" + - name: "btmesh_stack_advertiser_extended" + - name: "btmesh_stack_silabs_config_client" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_ae_client.h" + function: "sl_btmesh_ae_client_on_event" diff --git a/app/btmesh/component/btmesh_ae_server.slcc b/app/btmesh/component/btmesh_ae_server.slcc new file mode 100644 index 00000000000..57d68b8d5a7 --- /dev/null +++ b/app/btmesh/component/btmesh_ae_server.slcc @@ -0,0 +1,37 @@ +id: "btmesh_ae_server" +label: "Advertisement Extension Server" +package: "Btmesh" +description: > + Advertisement Extension Server component enables the Silabs Configuration Server vendor model for the node to allow data + transfer over Advertisement Extension. This is a proprietary feature which breaks compliance with AE in + BT Mesh 1.1 specification. + Mesh data over Advertisement Extension can be used in message-heavy applications (e.g. Device Firmware Update) to + speed up data transfer between nodes. All nodes must have the Silabs Configuration Server vendor model enabled, and a + Silabs Configuration Client (enabled by e.g. the Advertisement Extension Client component) must configure the clients + to use Advertisement Extension. +category: "Bluetooth Mesh|Models|Proprietary" +quality: "production" +root_path: "app/btmesh/common/btmesh_ae_server" +config_file: + - path: btmesh_ae_server.dcd + directory: btmeshconf +source: + - path: "sl_btmesh_ae_server.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_ae_server.h" +provides: + - name: "btmesh_ae_server" +requires: + - name: "app_assert" + - name: "btmesh_stack_advertiser_extended" + - name: "btmesh_stack_silabs_config_server" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_ae_server.h" + function: "sl_btmesh_ae_server_on_event" + - name: component_catalog + value: btmesh_ae_server diff --git a/app/btmesh/component/btmesh_blob_storage.slcc b/app/btmesh/component/btmesh_blob_storage.slcc new file mode 100644 index 00000000000..504c5063a73 --- /dev/null +++ b/app/btmesh/component/btmesh_blob_storage.slcc @@ -0,0 +1,50 @@ +id: btmesh_blob_storage +label: BLOB Storage +package: Btmesh +description: > + Provides an API for storing binary large objects (BLOB) via the bootloader. + + The number and size of the bootloader slots determines the number and maximum + size of BLOBs that can be stored on the device. Please check the bootloader + configuration. +category: "Bluetooth Mesh|Utility" +quality: production +root_path: app/btmesh/common/btmesh_blob_storage +config_file: + - path: config/sl_btmesh_blob_storage_config.h +source: + - path: sl_btmesh_blob_storage.c + - path: sl_btmesh_blob_storage_erase.c +include: + - path: "" + file_list: + - path: sl_btmesh_blob_storage.h + - path: sli_btmesh_blob_storage.h + - path: sl_btmesh_blob_storage_app_id.h +provides: + - name: btmesh_blob_storage +requires: + - name: bootloader_interface + - name: silabs_core_sl_malloc + - name: simple_timer + - name: status +recommends: + - id: simple_timer +template_contribution: + - name: component_catalog + value: btmesh_blob_storage + - name: event_handler + value: + event: internal_app_init + include: sl_btmesh_blob_storage.h + handler: sl_btmesh_blob_storage_init + - name: event_handler + value: + event: internal_app_process_action + include: sl_btmesh_blob_storage.h + handler: sl_btmesh_blob_storage_delete_step_handle + - name: power_manager_handler + value: + event: is_ok_to_sleep + include: sl_btmesh_blob_storage.h + handler: sl_btmesh_blob_storage_is_ok_to_sleep \ No newline at end of file diff --git a/app/btmesh/component/btmesh_blob_transfer_client.slcc b/app/btmesh/component/btmesh_blob_transfer_client.slcc new file mode 100644 index 00000000000..7af11290fc1 --- /dev/null +++ b/app/btmesh/component/btmesh_blob_transfer_client.slcc @@ -0,0 +1,44 @@ +id: btmesh_blob_transfer_client +label: BLOB Transfer Client +package: Btmesh +description: > + Provides BT Mesh BLOB (binary large object) Transfer Client functionality, + defined in mesh specification. + + The BLOB Transfer Client model is used by a higher-layer application to + transfer a BLOB to one or more BLOB Transfer Servers. The higher-layer + application provides the inputs to the procedures executed by the client. +category: "Bluetooth Mesh|Models|Transport" +quality: production +root_path: app/btmesh/common/btmesh_blob_transfer_client +config_file: + - path: btmesh_blob_transfer_client.dcd + directory: btmeshconf + - path: config/sl_btmesh_blob_transfer_client_config.h +source: + - path: sl_btmesh_blob_transfer_client.c +include: + - path: "" + file_list: + - path: sl_btmesh_blob_transfer_client.h +provides: + - name: btmesh_blob_transfer_client +requires: + - name: app_assert + - name: app_btmesh_util + - name: btmesh_blob_storage + - name: btmesh_core + - name: btmesh_stack_mbt_client + - name: btmesh_stack + - name: simple_timer +recommends: + - id: simple_timer + +template_contribution: + - name: btmesh_on_event + value: + include: sl_btmesh_blob_transfer_client.h + function: sl_btmesh_blob_transfer_client_on_event + priority: -1004 + - name: component_catalog + value: btmesh_blob_transfer_client \ No newline at end of file diff --git a/app/btmesh/component/btmesh_blob_transfer_server.slcc b/app/btmesh/component/btmesh_blob_transfer_server.slcc new file mode 100644 index 00000000000..a738f51ec40 --- /dev/null +++ b/app/btmesh/component/btmesh_blob_transfer_server.slcc @@ -0,0 +1,50 @@ +id: btmesh_blob_transfer_server +label: BLOB Transfer Server +package: Btmesh +description: > + Provides BT Mesh BLOB (binary large object) Transfer Server functionality, + defined in mesh specification. + + The BLOB Transfer Server model is used to receive a BLOB from a BLOB Transfer + Client. The BLOB is delivered to a higher-layer application for further + processing once the transfer is complete. +category: "Bluetooth Mesh|Models|Transport" +quality: production +root_path: app/btmesh/common/btmesh_blob_transfer_server +config_file: + - path: btmesh_blob_transfer_server.dcd + directory: btmeshconf + - path: config/sl_btmesh_blob_transfer_server_config.h +source: + - path: sl_btmesh_blob_transfer_server.c + - path: sl_btmesh_blob_transfer_server_api.c +include: + - path: "" + file_list: + - path: sl_btmesh_blob_transfer_server.h + - path: sl_btmesh_blob_transfer_server_api.h +requires: + - name: app_assert + - name: app_btmesh_util + - name: btmesh_stack + - name: btmesh_core + - name: btmesh_blob_storage + - name: btmesh_stack_mbt_server + - name: silabs_core_sl_malloc +provides: + - name: btmesh_blob_transfer_server + +template_contribution: + - name: btmesh_on_event + value: + include: sl_btmesh_blob_transfer_server.h + function: sl_btmesh_blob_transfer_server_on_event + - name: component_catalog + value: blob_transfer_server + - name: event_handler + value: + event: internal_app_process_action + include: sl_btmesh_blob_transfer_server.h + handler: sl_btmesh_blob_transfer_server_step_handle +validation_helper: + - path: btmesh_blob_transfer_server_validation.lua \ No newline at end of file diff --git a/app/btmesh/component/btmesh_ctl_client.slcc b/app/btmesh/component/btmesh_ctl_client.slcc new file mode 100644 index 00000000000..524c62c97dd --- /dev/null +++ b/app/btmesh/component/btmesh_ctl_client.slcc @@ -0,0 +1,41 @@ +id: "btmesh_ctl_client" +label: "CTL Client" +package: "Btmesh" +description: > + Color Tunable Lighting (CTL) Client model. Used to set the dim level or the + color temperature of a light source (CTL Server) on another node. + + This component extends the lighting client with functions to change the + temperature by, or to change the temperature to a certain percentage. + + For more details about lighting please see Lighting Client. +category: "Bluetooth Mesh|Models|Lighting" +quality: "production" +root_path: "app/btmesh/common/btmesh_ctl_client" +config_file: + - path: btmesh_ctl_client.dcd + directory: btmeshconf + - path: "config/sl_btmesh_ctl_client_config.h" +source: + - path: "sl_btmesh_ctl_client.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_ctl_client.h" +provides: + - name: "btmesh_ctl_client" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "btmesh_stack_generic_client" + - name: "btmesh_stack_node" + - name: "btmesh_generic_client" + - name: "btmesh_lighting_client" + - name: "btmesh_stack" + - name: "simple_timer" +recommends: + - id: "simple_timer" + +template_contribution: + - name: component_catalog + value: btmesh_ctl_client diff --git a/app/btmesh/component/btmesh_ctl_server.slcc b/app/btmesh/component/btmesh_ctl_server.slcc new file mode 100644 index 00000000000..a2af9faf8cb --- /dev/null +++ b/app/btmesh/component/btmesh_ctl_server.slcc @@ -0,0 +1,54 @@ +id: "btmesh_ctl_server" +label: "CTL Server" +package: "Btmesh" +description: > + Color Tunable Lighting (CTL) Server model. Used to support the control and + reporting functionality of a node with a light source that is dimmable and whose + color temperature can be selected. + + This component implements this control and reporting functionality, extending + on lighting server, and also provides callbacks on lighting related events. + + For more details about lighting, please see Lighting Server. +category: "Bluetooth Mesh|Models|Lighting" +quality: "production" +root_path: "app/btmesh/common/btmesh_ctl_server" +config_file: + - path: btmesh_ctl_server.dcd + directory: btmeshconf + - path: "config/sl_btmesh_ctl_server_config.h" +source: + - path: "sl_btmesh_ctl_signal_transition_handler.c" + - path: "sl_btmesh_ctl_server.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_ctl_server.h" + - path: "sl_btmesh_ctl_signal_transition_handler.h" +provides: + - name: "btmesh_ctl_server" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "bluetooth_feature_nvm" + - name: "btmesh_stack_generic_server" + - name: "btmesh_stack_node" + - name: "btmesh_generic_server" + - name: "btmesh_lighting_server" + - name: "btmesh_stack" + - name: "simple_timer" +recommends: + - id: "simple_timer" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_ctl_server.h" + function: "sl_btmesh_ctl_server_on_event" + priority: -9 + - name: btmesh_generic_handler + value: + name: ctl_server + count: 4 + - name: component_catalog + value: "btmesh_ctl_server" diff --git a/app/btmesh/component/btmesh_dcd_configuration.slcc b/app/btmesh/component/btmesh_dcd_configuration.slcc new file mode 100644 index 00000000000..f131a9667d0 --- /dev/null +++ b/app/btmesh/component/btmesh_dcd_configuration.slcc @@ -0,0 +1,25 @@ +id: "btmesh_dcd_configuration" +label: "DCD Configuration" +package: "Btmesh" +description: "Bluetooth Mesh Configuration" +category: "Bluetooth Mesh|DCD" +quality: "production" +root_path: "app/btmesh/common/btmesh_dcd_configuration" +config_file: + - path: "dcd_config.btmeshconf" + file_id: dcd_configuration_file_id + directory: "btmeshconf" + +provides: + - name: "btmesh_dcd_configuration" + - name: "dcd_configuration" + +requires: + - name: "btmesh_stack" + +template_contribution: + - name: component_catalog + value: btmesh_dcd_configuration + +ui_hints: + visibility: never diff --git a/app/btmesh/component/btmesh_distributor.slcc b/app/btmesh/component/btmesh_distributor.slcc new file mode 100644 index 00000000000..06f45c613b2 --- /dev/null +++ b/app/btmesh/component/btmesh_distributor.slcc @@ -0,0 +1,10 @@ +id: btmesh_distributor +label: DFU distributor +package: Btmesh +description: > + Wrapper software component for DFU distributor role in Bluetooth Mesh applications. +category: "Bluetooth Mesh|DFU Roles" +quality: production +root_path: app/bluetooth +requires: + - name: btmesh_fw_distribution_server \ No newline at end of file diff --git a/app/btmesh/component/btmesh_event_log.slcc b/app/btmesh/component/btmesh_event_log.slcc new file mode 100644 index 00000000000..8cc54bb5860 --- /dev/null +++ b/app/btmesh/component/btmesh_event_log.slcc @@ -0,0 +1,32 @@ +id: "btmesh_event_log" +label: "Event Logging" +package: "Btmesh" +description: > + The Event Logging is an application-level software module that + logs stack events. Its main purpose is to log application related stack events. + Both Bluetooth LE and Bluetooth mesh events are handled by the Event Logging + component. +category: "Bluetooth Mesh|Utility" +quality: "production" +root_path: "app/btmesh/common/btmesh_event_log" +config_file: + - path: "config/sl_btmesh_event_log_config.h" +source: + - path: "sl_btmesh_event_log.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_event_log.h" +provides: + - name: "btmesh_event_log" +requires: + - name: "app_btmesh_util" + - name: "app_log" + - name: "btmesh_stack" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_event_log.h" + function: "sl_btmesh_handle_btmesh_logging_events" + priority: -9000 diff --git a/app/btmesh/component/btmesh_factory_reset.slcc b/app/btmesh/component/btmesh_factory_reset.slcc new file mode 100644 index 00000000000..5ff72e8331b --- /dev/null +++ b/app/btmesh/component/btmesh_factory_reset.slcc @@ -0,0 +1,69 @@ +id: "btmesh_factory_reset" +label: "Factory Reset" +package: "Btmesh" +description: > + The Factory Reset is an application-level software module that + manages two types of device resets. The Factory Reset provides possibility + for node reset and full reset. Node reset removes all the keys and other + settings that have been configured for this node previously. Full reset removes + all NVM data as well. Callback is available for both reset types. After callback + execution the node reboots itself. After reboot in both reset cases the node + enters to unprovisioned state. These interface functions are available also + for CLI calls. +category: "Bluetooth Mesh|Utility" +quality: "production" +root_path: "app/btmesh/common/btmesh_factory_reset" +source: + - path: "sl_btmesh_factory_reset.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_factory_reset.h" +provides: + - name: "btmesh_factory_reset" +requires: + - name: "app_assert" + - name: "bluetooth_feature_nvm" + - name: "bluetooth_feature_system" + - name: "btmesh_stack_node" + - name: "btmesh_stack" + - name: "simple_timer" +recommends: + - id: "simple_timer" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_factory_reset.h" + function: "sl_btmesh_factory_reset_on_event" + + - name: cli_command + value: + group: factory + name: full_reset + handler: factory_reset_from_cli + shortcuts: + - name: r + help: "Triggers a factory reset that erase all NVM keys" + condition: + - "cli" + + - name: cli_command + value: + group: factory + name: node_reset + handler: node_reset_from_cli + shortcuts: + - name: n + help: "Triggers a node reset that erase all mesh stack data" + condition: + - "cli" + + - name: cli_group + value: + name: factory + help: "Factory functions (e.g. factory reset)." + shortcuts: + - name: f + condition: + - "cli" diff --git a/app/btmesh/component/btmesh_firmware_update_client.slcc b/app/btmesh/component/btmesh_firmware_update_client.slcc new file mode 100644 index 00000000000..a7bed903aee --- /dev/null +++ b/app/btmesh/component/btmesh_firmware_update_client.slcc @@ -0,0 +1,49 @@ +id: btmesh_firmware_update_client +label: Firmware Update Client +package: Btmesh +description: > + Provides BT Mesh Firmware Update Client functionality, defined in mesh + specification. + + The Firmware Update Client model is used by the Distributor and Initiator. + + The Initiator uses this model to retrieve the information about the firmware + subsystems installed on the Updating node, and to get the location of the new + firmware images. The Initiator receives the list of Updating nodes from the + higher-layer application. + + The Distributor uses this model to start a firmware image transfer to the + Updating nodes. The Distributor receives the list of Updating nodes from the + Initiator. The Distributor uses the procedures on the Firmware Update Client + model with the inputs to these procedures being chosen by the Firmware + Distribution Server. +category: "Bluetooth Mesh|Models|Firmware Update" +quality: production +root_path: app/btmesh/common/btmesh_firmware_update_client +config_file: + - path: btmesh_firmware_update_client.dcd + directory: btmeshconf +source: + - path: sl_btmesh_firmware_update_client.c +include: + - path: "" + file_list: + - path: sl_btmesh_firmware_update_client.h +provides: + - name: btmesh_firmware_update_client +requires: + - name: app_assert + - name: app_btmesh_util + - name: btmesh_core + - name: btmesh_blob_transfer_client + - name: btmesh_stack_fw_update_client + - name: btmesh_stack + +template_contribution: + - name: btmesh_on_event + value: + include: sl_btmesh_firmware_update_client.h + function: sl_btmesh_firmware_update_client_on_event + priority: -1002 + - name: component_catalog + value: btmesh_firmware_update_client \ No newline at end of file diff --git a/app/btmesh/component/btmesh_firmware_update_server.slcc b/app/btmesh/component/btmesh_firmware_update_server.slcc new file mode 100644 index 00000000000..037d06e68a6 --- /dev/null +++ b/app/btmesh/component/btmesh_firmware_update_server.slcc @@ -0,0 +1,65 @@ +id: btmesh_firmware_update_server +label: "Firmware Update Server" +package: Btmesh +description: > + Provides BT Mesh Firmware Update Server functionality, defined in mesh + specification. + + This model is used by the Updating node to report the firmware images + installed on the node and the location of new firmware images, and to initiate + a firmware update in order to receive a new firmware. The firmware image will + be transferred using the BLOB Transfer Server model. +category: "Bluetooth Mesh|Models|Firmware Update" +quality: production +root_path: app/btmesh/common/btmesh_firmware_update_server +config_file: + - path: btmesh_firmware_update_server.dcd + directory: btmeshconf + - path: config/sl_btmesh_firmware_update_server_config.h +source: + - path: sl_btmesh_firmware_update_server.c + - path: sl_btmesh_firmware_update_server_api.c +include: + - path: "" + file_list: + - path: sl_btmesh_firmware_update_server.h + - path: sl_btmesh_firmware_update_server_api.h +requires: + - name: app_assert + - name: app_btmesh_util + - name: btmesh_core + - name: btmesh_stack + - name: btmesh_blob_transfer_server + - name: btmesh_stack_fw_update_server + - name: power_manager + - name: simple_timer + - name: silabs_core_sl_malloc +provides: + - name: btmesh_firmware_update_server +recommends: + - id: simple_timer + +template_contribution: + - name: btmesh_on_event + value: + include: sl_btmesh_firmware_update_server.h + function: sl_btmesh_firmware_update_server_on_event + - name: component_catalog + value: firmware_update_server + - name: event_handler + value: + event: internal_app_process_action + include: sl_btmesh_firmware_update_server.h + handler: sl_btmesh_firmware_update_server_verify_step_handle + - name: event_handler + value: + event: internal_app_process_action + include: sl_btmesh_firmware_update_server.h + handler: sl_btmesh_firmware_update_server_metadata_check_step_handle + - name: power_manager_handler + value: + event: is_ok_to_sleep + include: sl_btmesh_firmware_update_server.h + handler: sl_btmesh_firmware_update_server_is_ok_to_sleep +validation_helper: + - path: btmesh_firmware_update_server_validation.lua \ No newline at end of file diff --git a/app/btmesh/component/btmesh_friend.slcc b/app/btmesh/component/btmesh_friend.slcc new file mode 100644 index 00000000000..6b9df69ca95 --- /dev/null +++ b/app/btmesh/component/btmesh_friend.slcc @@ -0,0 +1,34 @@ +id: "btmesh_friend" +label: "Friend" +package: "Btmesh" +description: > + Friend component enables Bluetooth Mesh Friend Feature for the node. Friend nodes are required when + Low Power Nodes (LPN) are present in the mesh network. When a friendship is established between an LPN and Friend node, + the friend node starts to store incoming messages targeted for the LPN. These mesages are forwarded to the LPN upon request. + Logging for these messages can be enabled as a configuration option in Simplicity Studio. + Callback functions are provided for friendship establishment and termination. + Friend functionality can be enabled or disabled during runtime via node configuration. +category: "Bluetooth Mesh|Features" +quality: "production" +root_path: "app/btmesh/common/btmesh_friend" +config_file: + - path: "config/sl_btmesh_friend_config.h" +source: + - path: "sl_btmesh_friend.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_friend.h" +provides: + - name: "btmesh_friend" +requires: + - name: "app_btmesh_util" + - name: "btmesh_stack_friend" + - name: "btmesh_stack_node" + - name: "btmesh_stack" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_friend.h" + function: "sl_btmesh_friend_on_event" diff --git a/app/btmesh/component/btmesh_fw_distribution_server.slcc b/app/btmesh/component/btmesh_fw_distribution_server.slcc new file mode 100644 index 00000000000..7a735f8e583 --- /dev/null +++ b/app/btmesh/component/btmesh_fw_distribution_server.slcc @@ -0,0 +1,57 @@ +id: btmesh_fw_distribution_server +label: Firmware Distribution Server +package: Btmesh +description: > + Provides BT Mesh Firmware Distribution Server functionality, defined in mesh + specification. + + This model is used by the Distributor to receive from the Initiator the + firmware update parameters, the set of Updating nodes to update, and the + firmware image to transfer. This model uses the Firmware Update Client model + and the BLOB Transfer Client model to manage the firmware update. The Firmware + Distribution Server can transfer one firmware image at a time. +category: "Bluetooth Mesh|Models|Firmware Update" +quality: production +root_path: app/btmesh/common/btmesh_fw_distribution_server +config_file: + - path: btmesh_fw_distribution_server.dcd + directory: btmeshconf + - path: config/sl_btmesh_fw_distribution_server_config.h +source: + - path: sl_btmesh_fw_distribution_server.c +include: + - path: "" + file_list: + - path: sl_btmesh_fw_distribution_server.h + - path: sli_btmesh_fw_distribution_server.h +provides: + - name: btmesh_fw_distribution_server +requires: + - name: app_assert + - name: app_btmesh_util + - name: btmesh_blob_storage + - name: btmesh_blob_transfer_client + - name: btmesh_blob_transfer_server + - name: btmesh_core + - name: btmesh_stack_fw_distribution_server + - name: btmesh_firmware_update_client + - name: btmesh_stack + - name: nvm3_lib + - name: silabs_core_sl_malloc + - name: simple_timer +recommends: + - id: simple_timer + +template_contribution: + - name: btmesh_on_event + value: + include: sl_btmesh_fw_distribution_server.h + function: sl_btmesh_fw_distribution_server_on_event + priority: -1001 + - name: event_handler + value: + event: internal_app_process_action + include: sl_btmesh_fw_distribution_server.h + handler: sl_btmesh_fw_distribution_server_delete_step_handle + - name: component_catalog + value: btmesh_fw_distribution_server \ No newline at end of file diff --git a/app/btmesh/component/btmesh_generic_base.slcc b/app/btmesh/component/btmesh_generic_base.slcc new file mode 100644 index 00000000000..2e798d3a481 --- /dev/null +++ b/app/btmesh/component/btmesh_generic_base.slcc @@ -0,0 +1,43 @@ +id: "btmesh_generic_base" +label: "Generic Base" +package: "Btmesh" +description: > + This Component initializes the Generic Server and Client Models which are added to the project + as components and provides an interface to register handlers for their events. + Note that the Generic Base Component alone does not add support for Generic Models + (e.g. Generic OnOff Server/Client, Generic Level Server/Client, etc), that has to be done from + another component or application software. +category: "Bluetooth Mesh|Models|Generic" +quality: "production" +root_path: "app/btmesh/common/btmesh_generic_base" +config_file: + - path: "config/sl_btmesh_generic_base_config.h" +source: + - path: "sl_btmesh_generic_base.c" +template_file: + - path: "sl_btmesh_generic_base.h.jinja" +requires: + - name: "app_assert" + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_generic_server" + condition: + - btmesh_stack_generic_server + - name: "btmesh_generic_client" + condition: + - btmesh_stack_generic_client + - name: "btmesh_generic_model" + allow_multiple: true + +template_contribution: + - name: "btmesh_stack_init" + value: + include: "sl_btmesh_generic_base.h" + function: "sl_btmesh_generic_base_init" + priority: -7000 + - name: "btmesh_on_event" + value: + include: "sl_btmesh_generic_base.h" + function: "sl_btmesh_generic_base_on_event" + priority: -7000 diff --git a/app/btmesh/component/btmesh_hsl_server.slcc b/app/btmesh/component/btmesh_hsl_server.slcc new file mode 100644 index 00000000000..7dd95a4f32d --- /dev/null +++ b/app/btmesh/component/btmesh_hsl_server.slcc @@ -0,0 +1,52 @@ +id: "btmesh_hsl_server" +label: "HSL Server" +package: "Btmesh" +description: > + Hue, Saturation and Lightness (HSL) Server model. Used to support the control + and reporting functionality of a node with a light source that is dimmable and + whose color can be selected. It extends Lightness Server and corresponds with + HSL Hue Server and HSL Saturation Server models. It also has a corresponding + HSL Setup Server model. + + This component implements callbacks, control, and report functionality. +category: "Bluetooth Mesh|Models|Lighting" +quality: "production" +root_path: "app/btmesh/common/btmesh_hsl_server" +config_file: + - path: btmesh_hsl_server.dcd + directory: btmeshconf + - path: "config/sl_btmesh_hsl_server_config.h" +source: + - path: "sl_btmesh_hsl_signal_transition_handler.c" + - path: "sl_btmesh_hsl_server.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_hsl_server.h" + - path: "sl_btmesh_hsl_signal_transition_handler.h" +provides: + - name: "btmesh_hsl_server" +requires: + - name: "app_assert" + - name: "bluetooth_feature_nvm" + - name: "btmesh_stack_generic_server" + - name: "btmesh_stack_node" + - name: "btmesh_generic_server" + - name: "btmesh_lighting_server" + - name: "btmesh_stack" + - name: "simple_timer" +recommends: + - id: "simple_timer" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_hsl_server.h" + function: "sl_btmesh_hsl_server_on_event" + priority: -9 + - name: component_catalog + value: "btmesh_hsl_server" + - name: btmesh_generic_handler + value: + name: hsl_server + count: 6 diff --git a/app/btmesh/component/btmesh_iv_update.slcc b/app/btmesh/component/btmesh_iv_update.slcc new file mode 100644 index 00000000000..7a38a79ecd6 --- /dev/null +++ b/app/btmesh/component/btmesh_iv_update.slcc @@ -0,0 +1,42 @@ +id: "btmesh_iv_update" +label: "Btmesh Automatic IV update" +package: "Btmesh" +description: > + This component provides 3 optional functionalities: + - periodic IV Update age backup. Restore on reset. + - automatic IV Update request, if a sequence number exceeds a threshold. + - automatic IV Update request, after a configured time in Normal operation. + Turning on this component may increase power consumption. +category: "Bluetooth Mesh" +quality: "production" +root_path: "app/btmesh/common/btmesh_iv_update" +config_file: + - path: "config/sl_btmesh_iv_update_config.h" +source: + - path: "sl_btmesh_iv_update.c" + - path: "sl_btmesh_iv_update_age_backup.c" + - path: "sl_btmesh_iv_update_by_age.c" + - path: "sl_btmesh_iv_update_by_seq_num.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_iv_update.h" + - path: "sl_btmesh_iv_update_age_backup.h" + - path: "sl_btmesh_iv_update_by_age.h" + - path: "sl_btmesh_iv_update_by_seq_num.h" +provides: + - name: "btmesh_iv_update" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "btmesh_stack_node" + - name: "btmesh_stack" + - name: "simple_timer" +recommends: + - id: "simple_timer" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_iv_update.h" + function: "sl_btmesh_iv_update_on_event" \ No newline at end of file diff --git a/app/btmesh/component/btmesh_lc_server.slcc b/app/btmesh/component/btmesh_lc_server.slcc new file mode 100644 index 00000000000..d80da4b3040 --- /dev/null +++ b/app/btmesh/component/btmesh_lc_server.slcc @@ -0,0 +1,49 @@ +id: "btmesh_lc_server" +label: "LC Server" +package: "Btmesh" +description: > + Lightness Control (LC) Server model. Used to support the control and reporting + functionality of a node with a light lightness controller that can monitor + occupancy and ambient light level sensors and adjust the dim level of a light. + LC Server extends Lightness Server model and Generic OnOff Server. It also has + a corresponding LC Setup Server model which is present in the same element. +category: "Bluetooth Mesh|Models|Lighting" +quality: "production" +root_path: "app/btmesh/common/btmesh_lc_server" +config_file: + - path: "config/sl_btmesh_lc_server_config.h" + - path: btmesh_lc_server.dcd + directory: btmeshconf +source: + - path: "sl_btmesh_lc_server.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_lc_server.h" +provides: + - name: "btmesh_lc_server" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "bluetooth_feature_nvm" + - name: "btmesh_stack_generic_server" + - name: "btmesh_stack_lc_setup_server" + - name: "btmesh_stack_lc_server" + - name: "btmesh_stack_node" + - name: "btmesh_generic_server" + - name: "btmesh_lighting_server" + - name: "btmesh_stack" + - name: "simple_timer" +recommends: + - id: "simple_timer" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_lc_server.h" + function: "sl_btmesh_lc_server_on_event" + priority: -5 + - name: btmesh_generic_handler + value: + name: lc_server + count: 1 diff --git a/app/btmesh/component/btmesh_lighting_client.slcc b/app/btmesh/component/btmesh_lighting_client.slcc new file mode 100644 index 00000000000..1c2c0e95419 --- /dev/null +++ b/app/btmesh/component/btmesh_lighting_client.slcc @@ -0,0 +1,39 @@ +id: "btmesh_lighting_client" +label: "Lightness Client" +package: "Btmesh" +description: > + Used to support the functionality of a node that can set the dim level of a + light source (Lightness Server) on another node. + + This component integrates the Generic OnOff Client functionality, for ease of + use. It provides functions to change the dim value by, or set the dim value to + a certain percentage, and a function for getting the current lightness level. +category: "Bluetooth Mesh|Models|Lighting" +quality: "production" +root_path: "app/btmesh/common/btmesh_lighting_client" +config_file: + - path: btmesh_lighting_client.dcd + directory: btmeshconf + - path: "config/sl_btmesh_lighting_client_config.h" +source: + - path: "sl_btmesh_lighting_client.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_lighting_client.h" +provides: + - name: "btmesh_lighting_client" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "btmesh_stack_generic_client" + - name: "btmesh_stack_node" + - name: "btmesh_generic_client" + - name: "btmesh_stack" + - name: "simple_timer" +recommends: + - id: "simple_timer" + +template_contribution: + - name: component_catalog + value: btmesh_lighting_client diff --git a/app/btmesh/component/btmesh_lighting_server.slcc b/app/btmesh/component/btmesh_lighting_server.slcc new file mode 100644 index 00000000000..b7ba7b2d723 --- /dev/null +++ b/app/btmesh/component/btmesh_lighting_server.slcc @@ -0,0 +1,52 @@ +id: "btmesh_lighting_server" +label: "Lightness Server" +package: "Btmesh" +description: > + Used to support the control and reporting functionality of a node with a light + source that is dimmable. Lightness Server extends Generic Power OnOff Server + model and Generic Level Server model. It also has a corresponding Lightness + Setup Server model which is present in the same element. + + The component provides the reporting functions, and the possibility to set current, + default, and last values of the lightness value. +category: "Bluetooth Mesh|Models|Lighting" +quality: "production" +root_path: "app/btmesh/common/btmesh_lighting_server" +config_file: + - path: btmesh_lighting_server.dcd + directory: btmeshconf + - path: "config/sl_btmesh_lighting_server_config.h" +source: + - path: "sl_btmesh_lighting_level_transition_handler.c" + - path: "sl_btmesh_lighting_server.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_lighting_level_transition_handler.h" + - path: "sl_btmesh_lighting_server.h" +provides: + - name: "btmesh_lighting_server" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "bluetooth_feature_nvm" + - name: "btmesh_stack_generic_server" + - name: "btmesh_stack_node" + - name: "btmesh_generic_server" + - name: "btmesh_stack" + - name: "simple_timer" +recommends: + - id: "simple_timer" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_lighting_server.h" + function: "sl_btmesh_lighting_server_on_event" + priority: -10 + - name: btmesh_generic_handler + value: + name: lighting_server + count: 6 + - name: component_catalog + value: btmesh_lighting_server diff --git a/app/btmesh/component/btmesh_lpn.slcc b/app/btmesh/component/btmesh_lpn.slcc new file mode 100644 index 00000000000..80570336ec2 --- /dev/null +++ b/app/btmesh/component/btmesh_lpn.slcc @@ -0,0 +1,39 @@ +id: "btmesh_lpn" +label: "Low Power Node" +package: "Btmesh" +description: > + Low Power component enables Bluetooth Mesh Low Power Node (LPN) Feature for the node. + LPNs consume less power by remaining in sleep for the majority of their operation cycle, + waking up to poll incoming messages from a Friend Node. LPN operation can be achieved only by having an established friendship. + Numerous timing and queue parameters can be configured in Simplicity Studio, more details can be found on the configuration panel + or in sl_btmesh_lpn_config.h. Several callback functions, which can be implemented in the application, + are available for initialization and friendship related events. More details about the functions can be found in sl_btmesh_lpn.h. + LPN functionality can be enabled or disabled during runtime via node configuration. +category: "Bluetooth Mesh|Features" +quality: "production" +root_path: "app/btmesh/common/btmesh_lpn" +config_file: + - path: "config/sl_btmesh_lpn_config.h" +source: + - path: "sl_btmesh_lpn.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_lpn.h" +provides: + - name: "btmesh_lpn" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "btmesh_stack_lpn" + - name: "btmesh_stack_node" + - name: "btmesh_stack" + - name: "simple_timer" +recommends: + - id: "simple_timer" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_lpn.h" + function: "sl_btmesh_lpn_on_event" diff --git a/app/btmesh/component/btmesh_provisionee.slcc b/app/btmesh/component/btmesh_provisionee.slcc new file mode 100644 index 00000000000..b2db01101da --- /dev/null +++ b/app/btmesh/component/btmesh_provisionee.slcc @@ -0,0 +1,40 @@ +id: "btmesh_provisionee" +label: "Btmesh Provisionee" +package: "Btmesh" +description: > + Btmesh Provisionee + This component provides the following features: + - Automatic node initializaton on boot event + - Automatic unprovisioned device beaconing on the selected bearers (PB-ADV, PB-GATT) + - Out-of-band authentication settings + - Helper functions for OOB authentication +category: "Bluetooth Mesh" +quality: "production" +root_path: "app/btmesh/common/btmesh_provisionee" +config_file: + - path: "config/sl_btmesh_provisionee_config.h" +source: + - path: "sl_btmesh_provisionee.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_provisionee.h" +provides: + - name: "btmesh_provisionee" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "btmesh_stack_node" + - name: "btmesh_stack" +validation_helper: + - path: btmesh_provisionee_validation.lua + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_provisionee.h" + function: "sl_btmesh_provisionee_on_event" + - name: "bluetooth_on_event" + value: + include: "sl_btmesh_provisionee.h" + function: "sl_bt_provisionee_on_event" \ No newline at end of file diff --git a/app/btmesh/component/btmesh_provisioning_decorator.slcc b/app/btmesh/component/btmesh_provisioning_decorator.slcc new file mode 100644 index 00000000000..2059ad17b56 --- /dev/null +++ b/app/btmesh/component/btmesh_provisioning_decorator.slcc @@ -0,0 +1,37 @@ +id: "btmesh_provisioning_decorator" +label: "Provisioning Decorator" +package: "Btmesh" +description: > + The Provisioning Decorator is an application-level software module + that ensures callbacks at main provisioning process steps. There are callbacks for + initialization phase, for starting and successful finishing or for failed + provisioning. A general callback for handling Provisioning Decorator events is + also available. +category: "Bluetooth Mesh|Utility" +quality: "production" +root_path: "app/btmesh/common/btmesh_provisioning_decorator" +config_file: + - path: "config/sl_btmesh_provisioning_decorator_config.h" +source: + - path: "sl_btmesh_provisioning_decorator.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_provisioning_decorator.h" +provides: + - name: "btmesh_provisioning_decorator" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "bluetooth_feature_system" + - name: "btmesh_stack" + - name: "simple_timer" +recommends: + - id: "simple_timer" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_provisioning_decorator.h" + function: "sl_btmesh_handle_provisioning_decorator_event" + priority: -8000 diff --git a/app/btmesh/component/btmesh_proxy.slcc b/app/btmesh/component/btmesh_proxy.slcc new file mode 100644 index 00000000000..b48d758284a --- /dev/null +++ b/app/btmesh/component/btmesh_proxy.slcc @@ -0,0 +1,19 @@ +id: "btmesh_proxy" +label: "Proxy" +package: "Btmesh" +description: > + Proxy component enables Bluetooth Mesh Proxy Server Feature for the node. + Proxy nodes send their messages over GATT and ADV bearers (GATT and Advertisement packeges), + which is mandatory if the provisioner is a mobile phone. Proxy functionality can be enabled + or disabled during runtime via node configuration. +category: "Bluetooth Mesh|Features" +quality: "production" +provides: + - name: "btmesh_proxy" +requires: + - name: "bluetooth_feature_connection" + - name: "bluetooth_feature_gatt_server" + - name: "btmesh_stack_node" + - name: "btmesh_stack_proxy" + - name: "btmesh_stack_proxy_server" + - name: "btmesh_stack" diff --git a/app/btmesh/component/btmesh_remote_provisioning_client.slcc b/app/btmesh/component/btmesh_remote_provisioning_client.slcc new file mode 100644 index 00000000000..baa7d41ca51 --- /dev/null +++ b/app/btmesh/component/btmesh_remote_provisioning_client.slcc @@ -0,0 +1,36 @@ +id: "btmesh_remote_provisioning_client" +label: "Remote Provisioning Client" +package: "Btmesh" +description: > + Used to support remote provisioning client functionality of + provisioning devices into a mesh network by interacting with a + mesh node that supports the Remote Provisioning Server model. +category: "Bluetooth Mesh|Models|Remote Provisioning" +quality: "production" +root_path: "app/btmesh/common/btmesh_remote_provisioning_client" +config_file: + - path: "config/sl_btmesh_remote_provisioning_client_config.h" + - path: btmesh_remote_provisioning_client.dcd + directory: btmeshconf +source: + - path: "sl_btmesh_remote_provisioning_client.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_remote_provisioning_client.h" +provides: + - name: "btmesh_remote_provisioning_client" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "btmesh_stack_provisioner" + - name: "btmesh_stack_remote_provisioning_client" + - name: "btmesh_stack" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_remote_provisioning_client.h" + function: "sli_btmesh_handle_remote_provisioning_client_on_event" +validation_helper: + - path: "../../script/validation/remote_provisioning_validation.lua" diff --git a/app/btmesh/component/btmesh_remote_provisioning_server.slcc b/app/btmesh/component/btmesh_remote_provisioning_server.slcc new file mode 100644 index 00000000000..6e870bda31b --- /dev/null +++ b/app/btmesh/component/btmesh_remote_provisioning_server.slcc @@ -0,0 +1,36 @@ +id: "btmesh_remote_provisioning_server" +label: "Remote Provisioning Server" +package: "Btmesh" +description: > + Used to support remote provisioning server functionality of provisioning + a remote device over the mesh network and to perform the Node Provisioning + Protocol Interface procedures. +category: "Bluetooth Mesh|Models|Remote Provisioning" +quality: "production" +root_path: "app/btmesh/common/btmesh_remote_provisioning_server" +config_file: + - path: "config/sl_btmesh_remote_provisioning_server_config.h" + - path: btmesh_remote_provisioning_server.dcd + directory: btmeshconf +source: + - path: "sl_btmesh_remote_provisioning_server.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_remote_provisioning_server.h" +provides: + - name: "btmesh_remote_provisioning_server" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "btmesh_stack_node" + - name: "btmesh_stack_remote_provisioning_server" + - name: "btmesh_stack" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_remote_provisioning_server.h" + function: "sli_btmesh_handle_remote_provisioning_server_on_event" +validation_helper: + - path: "../../script/validation/remote_provisioning_validation.lua" diff --git a/app/btmesh/component/btmesh_scene_client.slcc b/app/btmesh/component/btmesh_scene_client.slcc new file mode 100644 index 00000000000..bf4c2324af2 --- /dev/null +++ b/app/btmesh/component/btmesh_scene_client.slcc @@ -0,0 +1,37 @@ +id: "btmesh_scene_client" +label: "Scene Client" +package: "Btmesh" +description: > + Used to support the functionality of a node that can configure scenes on a + network and trigger a state transition to a scene on another node. + + This component provides a function to recall a scene identified by its number. +category: "Bluetooth Mesh|Models|Time and Scenes" +quality: "production" +root_path: "app/btmesh/common/btmesh_scene_client" +config_file: + - path: btmesh_scene_client.dcd + directory: btmeshconf + - path: "config/sl_btmesh_scene_client_config.h" +source: + - path: "sl_btmesh_scene_client.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_scene_client.h" +provides: + - name: "btmesh_scene_client" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "btmesh_stack_scene_client" + - name: "btmesh_stack" + - name: "simple_timer" +recommends: + - id: "simple_timer" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_scene_client.h" + function: "sl_btmesh_handle_scene_client_on_event" \ No newline at end of file diff --git a/app/btmesh/component/btmesh_scene_server.slcc b/app/btmesh/component/btmesh_scene_server.slcc new file mode 100644 index 00000000000..dc9cdb3d4c5 --- /dev/null +++ b/app/btmesh/component/btmesh_scene_server.slcc @@ -0,0 +1,33 @@ +id: "btmesh_scene_server" +label: "Scene Server" +package: "Btmesh" +description: > + Used to support the control and reporting functionality of a node that can + participate in a scene. +category: "Bluetooth Mesh|Models|Time and Scenes" +quality: "production" +root_path: "app/btmesh/common/btmesh_scene_server" +source: + - path: "sl_btmesh_scene_server.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_scene_server.h" +provides: + - name: "btmesh_scene_server" +requires: + - name: "app_assert" + - name: "btmesh_stack_scene_server" + - name: "btmesh_stack_scene_setup_server" + - name: "btmesh_stack" +config_file: + - path: btmesh_scene_server.dcd + directory: btmeshconf + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_scene_server.h" + function: "sl_btmesh_scene_server_on_event" + - name: component_catalog + value: "btmesh_scene_server" \ No newline at end of file diff --git a/app/btmesh/component/btmesh_scheduler_server.slcc b/app/btmesh/component/btmesh_scheduler_server.slcc new file mode 100644 index 00000000000..d60c1e5633c --- /dev/null +++ b/app/btmesh/component/btmesh_scheduler_server.slcc @@ -0,0 +1,34 @@ +id: "btmesh_scheduler_server" +label: "Scheduler Server" +package: "Btmesh" +description: > + Used to support the control and reporting functionality of a node that can store + a schedule. It has a corresponding Scheduler Setup Server model which is present + in the same element. +category: "Bluetooth Mesh|Models|Time and Scenes" +quality: "production" +root_path: "app/btmesh/common/btmesh_scheduler_server" +config_file: + - path: "config/sl_btmesh_scheduler_server_config.h" + - path: btmesh_scheduler_server.dcd + directory: btmeshconf +source: + - path: "sl_btmesh_scheduler_server.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_scheduler_server.h" +provides: + - name: "btmesh_scheduler_server" +requires: + - name: "app_btmesh_util" + - name: "btmesh_stack_scheduler_server" + - name: "btmesh_time_server" + - name: "btmesh_scene_server" + - name: "btmesh_stack" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_scheduler_server.h" + function: "sl_btmesh_scheduler_server_on_event" \ No newline at end of file diff --git a/app/btmesh/component/btmesh_self_provisioning_cli.slcc b/app/btmesh/component/btmesh_self_provisioning_cli.slcc new file mode 100644 index 00000000000..197fd85e034 --- /dev/null +++ b/app/btmesh/component/btmesh_self_provisioning_cli.slcc @@ -0,0 +1,63 @@ +id: "btmesh_self_provisioning_cli" +label: "Self Provisioning CLI" +package: "Btmesh" +description: > + The Self Provisioning CLI is an application-level software component that provides + a self provisioning functionality trough CLI. The goal of this component is to + provide this function for the users who want to run their devices directly in + a Bluetooth Mesh network without using a provisioner. This component is mainly used + for development and testing purposes and is not recommended to run on final products. + +category: "Bluetooth Mesh|Utility" +quality: "production" +root_path: "app/btmesh/common/btmesh_self_provisioning_cli" +config_file: + - path: "config/sl_btmesh_self_provisioning_cli_config.h" +source: + - path: "sl_btmesh_self_provisioning_cli.c" +provides: + - name: "btmesh_self_provisioning_cli" +requires: + - name: "app_btmesh_util" + - name: "btmesh_stack" + - name: "btmesh_stack_test" + - name: "cli" + +template_contribution: + - name: cli_command + value: + name: self_provisioning + handler: sl_btmesh_self_provisioning_from_cli + shortcuts: + - name: sp + help: "Triggers an unprovisioned device self provisioning" + argument: + - type: hex + help: "Device key 16 bytes in hex format (e.g. {000102030405060708090A0B0C0D0E0F})" + - type: hex + help: "Network key 16 bytes in hex format (e.g. {000102030405060708090A0B0C0D0E0F})" + - type: hex + help: "Primary element address 2 bytes in hex format (e.g. {200A})" + condition: + - "cli" + - name: cli_command + value: + name: system_reset + handler: sl_btmesh_system_reset_from_cli + shortcuts: + - name: sr + help: "Triggers a device system reset" + condition: + - "cli" + - name: cli_command + value: + name: add_app_key + handler: sl_btmesh_add_app_key_from_cli + shortcuts: + - name: ak + help: "Add application key locally" + argument: + - type: hex + help: "Application key 16 bytes in hex format (e.g. {000102030405060708090A0B0C0D0E0F})" + condition: + - "cli" \ No newline at end of file diff --git a/app/btmesh/component/btmesh_sensor_client.slcc b/app/btmesh/component/btmesh_sensor_client.slcc new file mode 100644 index 00000000000..cb8f35b197a --- /dev/null +++ b/app/btmesh/component/btmesh_sensor_client.slcc @@ -0,0 +1,42 @@ +id: "btmesh_sensor_client" +label: "Sensor Client" +package: "Btmesh" +description: > + Used to support the functionality of a node that can monitor sensor data and + configure a set of sensors on another node. + + Sensor Client can connect to multiple Sensor Servers. It may operate on states + defined by Sensor Server model and Sensor Setup model via Sensor messages. + + This component supports temperature, people count, and illuminance data. It + provides callback functions for receiving these data, for events, such as + when Sensor Server discovery has started, when a device is found. + There is an interface to change the current property listened to and request + data on said property. +category: "Bluetooth Mesh|Models|Sensors" +quality: "production" +root_path: "app/btmesh/common/btmesh_sensor_client" +source: + - path: "sl_btmesh_sensor_client.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_sensor_client.h" +config_file: + - path: "config/sl_btmesh_sensor_client_config.h" + - path: btmesh_sensor_client.dcd + directory: btmeshconf +provides: + - name: "btmesh_sensor_client" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "btmesh_stack_node" + - name: "btmesh_stack_sensor_client" + - name: "btmesh_stack" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_sensor_client.h" + function: "sl_btmesh_handle_sensor_client_on_event" \ No newline at end of file diff --git a/app/btmesh/component/btmesh_sensor_people_count.slcc b/app/btmesh/component/btmesh_sensor_people_count.slcc new file mode 100644 index 00000000000..07ccb17d953 --- /dev/null +++ b/app/btmesh/component/btmesh_sensor_people_count.slcc @@ -0,0 +1,83 @@ +id: "btmesh_sensor_people_count" +label: "People Count Sensor" +package: "Btmesh" +description: > + The People Count Sensor is an application-level software module that + simulates a people count sensor behavior. Provides interface for + setting and getting and also for increasing and decreasing the + simulated people count value. +category: "Bluetooth Mesh|Utility" +quality: "production" +root_path: "app/btmesh/common/btmesh_sensor_people_count" +source: + - path: "sl_btmesh_sensor_people_count.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_sensor_people_count.h" +config_file: + - path: "config/sl_btmesh_sensor_people_count_config.h" +provides: + - name: "btmesh_sensor_people_count" +requires: + - name: "btmesh_sensor_server" + +template_contribution: + - name: cli_command + value: + group: peoplecount + name: increase + handler: people_count_increase_from_cli + shortcuts: + - name: i + help: "Increasing people count sensor value." + condition: + - "cli" + + - name: cli_command + value: + group: peoplecount + name: decrease + handler: people_count_decrease_from_cli + shortcuts: + - name: d + help: "Decreasing people count sensor value." + condition: + - "cli" + + - name: cli_command + value: + group: peoplecount + name: set + handler: people_count_set_from_cli + shortcuts: + - name: s + help: "Set people count sensor value" + argument: + - type: uint16 + help: "People count sensor value" + condition: + - "cli" + + - name: cli_command + value: + group: peoplecount + name: get + handler: people_count_get_from_cli + shortcuts: + - name: g + help: "Get people count sensor value" + condition: + - "cli" + + - name: cli_group + value: + name: peoplecount + help: "Controlling people count sensor value." + shortcuts: + - name: pc + condition: + - "cli" + + - name: component_catalog + value: "btmesh_sensor_people_count" diff --git a/app/btmesh/component/btmesh_sensor_server.slcc b/app/btmesh/component/btmesh_sensor_server.slcc new file mode 100644 index 00000000000..e4ad5deffdc --- /dev/null +++ b/app/btmesh/component/btmesh_sensor_server.slcc @@ -0,0 +1,42 @@ +id: "btmesh_sensor_server" +label: "Sensor Server" +package: "Btmesh" +description: > + Used to support the reporting functionality of a node with a set of sensors + whose data is available on the network. It also has a corresponding Sensor + Setup Server model which is present on the same element. + + This component implements temperature, people count, and illuminance measurements. + It provides callback functions for each property. +category: "Bluetooth Mesh|Models|Sensors" +quality: "production" +root_path: "app/btmesh/common/btmesh_sensor_server" +include: + - path: "" + file_list: + - path: "sl_btmesh_sensor_server.h" + - path: "sl_btmesh_sensor_server_cadence.h" +config_file: + - path: "config/sl_btmesh_sensor_server_config.h" + file_id: "btmesh_sensor_server_config" + - path: btmesh_sensor_server.dcd + directory: btmeshconf +source: + - path: "sl_btmesh_sensor_server.c" + - path: "sl_btmesh_sensor_server_cadence.c" +provides: + - name: "btmesh_sensor_server" +requires: + - name: "app_assert" + - name: "app_btmesh_util" + - name: "btmesh_stack_node" + - name: "btmesh_stack_sensor_server" + - name: "btmesh_stack_sensor_setup_server" + - name: "btmesh_stack" + - name: "simple_timer" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_sensor_server.h" + function: "sl_btmesh_handle_sensor_server_events" diff --git a/app/btmesh/component/btmesh_time_server.slcc b/app/btmesh/component/btmesh_time_server.slcc new file mode 100644 index 00000000000..b65e8e29e57 --- /dev/null +++ b/app/btmesh/component/btmesh_time_server.slcc @@ -0,0 +1,32 @@ +id: "btmesh_time_server" +label: "Time Server" +package: "Btmesh" +description: > + Used to support the control and reporting functionality of a node that + tracks time. +category: "Bluetooth Mesh|Models|Time and Scenes" +quality: "production" +root_path: "app/btmesh/common/btmesh_time_server" +config_file: + - path: "config/sl_btmesh_time_server_config.h" + - path: btmesh_time_server.dcd + directory: btmeshconf +source: + - path: "sl_btmesh_time_server.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_time_server.h" +provides: + - name: "btmesh_time_server" +requires: + - name: "app_btmesh_util" + - name: "btmesh_stack_time_server" + - name: "btmesh_stack" + +template_contribution: + - name: "btmesh_on_event" + value: + include: "sl_btmesh_time_server.h" + function: "sl_btmesh_time_server_on_event" + priority: -10 \ No newline at end of file diff --git a/app/btmesh/component/btmesh_updating_node.slcc b/app/btmesh/component/btmesh_updating_node.slcc new file mode 100644 index 00000000000..6d3fd1f194a --- /dev/null +++ b/app/btmesh/component/btmesh_updating_node.slcc @@ -0,0 +1,10 @@ +id: btmesh_updating_node +label: DFU updating node +package: Btmesh +description: > + Wrapper software component for DFU updating node role in Bluetooth Mesh applications. +category: "Bluetooth Mesh|DFU Roles" +quality: production +root_path: app/bluetooth +requires: + - name: btmesh_firmware_update_server \ No newline at end of file diff --git a/app/btmesh/component/btmesh_wstk_lcd.slcc b/app/btmesh/component/btmesh_wstk_lcd.slcc new file mode 100644 index 00000000000..457c41df640 --- /dev/null +++ b/app/btmesh/component/btmesh_wstk_lcd.slcc @@ -0,0 +1,40 @@ +id: "btmesh_wstk_lcd" +label: "WSTK LCD Driver" +package: "Btmesh" +description: > + The WSTK LCD Driver is an application-level software module which + implements an interface for WSTK board's LCD screen usage, ensuring the + uniform display of BT Mesh specific values. The interface contains an + initialization and a write function. The LCD initialization is executed + automatically at startup. The write interface is used to write one specified + line of text to the LCD. +category: "Bluetooth Mesh|Utility" +quality: "production" +root_path: "app/btmesh/common/btmesh_wstk_lcd" +source: + - path: "sl_btmesh_wstk_graphics.c" + - path: "sl_btmesh_wstk_lcd.c" +include: + - path: "" + file_list: + - path: "sl_btmesh_wstk_graphics.h" + - path: "sl_btmesh_wstk_lcd.h" +config_file: + - path: "config/sl_btmesh_wstk_lcd_config.h" +provides: + - name: "btmesh_wstk_lcd" +requires: + - name: "app_assert" + - name: "btmesh_stack" + - name: "dmd_memlcd" + - name: "glib" + - name: "ls013b7dh03" + +template_contribution: + - name: event_handler + value: + event: internal_app_init + include: "sl_btmesh_wstk_lcd.h" + handler: "sl_btmesh_LCD_init" + - name: component_catalog + value: "btmesh_wstk_lcd" \ No newline at end of file diff --git a/app/btmesh/component/ncp_btmesh_dfu.slcc b/app/btmesh/component/ncp_btmesh_dfu.slcc new file mode 100644 index 00000000000..bb2d21e35f5 --- /dev/null +++ b/app/btmesh/component/ncp_btmesh_dfu.slcc @@ -0,0 +1,22 @@ +id: ncp_btmesh_dfu +label: NCP DFU Utility +package: Btmesh +description: > + Implements the Firmware Update Information Status message assembly, with + provided interfaces for setting FWIDs and URIs with indexing. +category: "Bluetooth Mesh|Utility" +quality: production +root_path: app/btmesh/common/ncp_btmesh_dfu +source: + - path: ncp_btmesh_dfu.c +include: + - path: "" + file_list: + - path: ncp_btmesh_dfu.h +provides: + - name: ncp_btmesh_dfu +requires: + - name: btmesh_core + - name: btmesh_stack_fw_update_server + - name: btmesh_stack + - name: ncp \ No newline at end of file diff --git a/app/btmesh/component_host/btmesh_app_prov.mk b/app/btmesh/component_host/btmesh_app_prov.mk new file mode 100644 index 00000000000..50536382630 --- /dev/null +++ b/app/btmesh/component_host/btmesh_app_prov.mk @@ -0,0 +1,19 @@ +################################################################################ +# BT Mesh Provisioner Application Component # +################################################################################ + +include $(SDK_DIR)/app/bluetooth/component_host/app_log.mk +include $(SDK_DIR)/app/bluetooth/component_host/app_assert.mk +include $(SDK_DIR)/app/btmesh/component_host/btmesh_prov.mk +include $(SDK_DIR)/app/btmesh/component_host/btmesh_conf.mk +include $(SDK_DIR)/app/btmesh/component_host/btmesh_key_export.mk +include $(SDK_DIR)/app/bluetooth/component_host/simple_timer.mk + +# SL_CATALOG_APP_PROV_PRESENT flag indicates host provisioner application component present +override CFLAGS += -D SL_CATALOG_APP_PROV_PRESENT + +override INCLUDEPATHS += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_app_prov + +override C_SRC += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_app_prov/btmesh_app_prov.c diff --git a/app/btmesh/component_host/btmesh_app_prov_cbp.mk b/app/btmesh/component_host/btmesh_app_prov_cbp.mk new file mode 100644 index 00000000000..ad654d1bf3a --- /dev/null +++ b/app/btmesh/component_host/btmesh_app_prov_cbp.mk @@ -0,0 +1,35 @@ +################################################################################ +# BT Mesh Remote Provisioner Application Component # +################################################################################ + +include $(SDK_DIR)/app/btmesh/component_host/btmesh_app_prov.mk + +# SL_CATALOG_APP_PROV_CBP_PRESENT flag indicates CBP component is present +override CFLAGS += -D SL_CATALOG_APP_PROV_CBP_PRESENT + +# OpenSSL-related includes + +# OpenSSL headers +# OpenSSL is outside of GSDK. Therefore, add it directly as a compiler flag +# instead of adding it to INCLUDEPATHS. +ifeq ($(UNAME), darwin) + override CFLAGS += -I/usr/local/opt/openssl/include +else + override CFLAGS += -I/usr/include/openssl +endif + +# OpenSSL libraries +ifeq ($(UNAME), darwin) + override LDFLAGS += -L/usr/local/opt/openssl/lib +endif +override LDFLAGS += -lcrypto +ifeq ($(OS), win) + #override LDFLAGS += -lws2_32 +endif + + +override INCLUDEPATHS += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_app_prov_cbp + +override C_SRC += \ +$(wildcard $(SDK_DIR)/app/btmesh/common_host/btmesh_app_prov_cbp/*.c) \ No newline at end of file diff --git a/app/btmesh/component_host/btmesh_app_prov_ui.mk b/app/btmesh/component_host/btmesh_app_prov_ui.mk new file mode 100644 index 00000000000..8e11554fa5d --- /dev/null +++ b/app/btmesh/component_host/btmesh_app_prov_ui.mk @@ -0,0 +1,18 @@ +################################################################################ +# BT Mesh Provisioner Application Component # +################################################################################ + +include $(SDK_DIR)/app/btmesh/component_host/btmesh_app_prov.mk + +# SL_CATALOG_APP_PROV_UI_PRESENT flag indicates host provisioner application component present +override CFLAGS += -D SL_CATALOG_APP_PROV_UI_PRESENT +# User input uses threading +override LDFLAGS += -pthread + +override INCLUDEPATHS += \ +$(SDK_DIR)/app/bluetooth/common_host/app_sleep \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_app_prov_ui + +override C_SRC += \ +$(SDK_DIR)/app/bluetooth/common_host/app_sleep/app_sleep.c \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_app_prov_ui/btmesh_app_prov_ui.c \ No newline at end of file diff --git a/app/btmesh/component_host/btmesh_app_remote_prov.mk b/app/btmesh/component_host/btmesh_app_remote_prov.mk new file mode 100644 index 00000000000..fc7647be5a9 --- /dev/null +++ b/app/btmesh/component_host/btmesh_app_remote_prov.mk @@ -0,0 +1,16 @@ +################################################################################ +# BT Mesh Remote Provisioner Application Component # +################################################################################ + +include $(SDK_DIR)/app/btmesh/component_host/btmesh_remote_prov.mk +include $(SDK_DIR)/app/btmesh/component_host/btmesh_app_prov.mk + +# SL_CATALOG_APP_REMOTE_PROV_PRESENT flag indicates remote provisioner application \ + component present, +override CFLAGS += -D SL_CATALOG_APP_REMOTE_PROV_PRESENT + +override INCLUDEPATHS += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_app_remote_prov + +override C_SRC += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_app_remote_prov/btmesh_app_remote_prov.c \ No newline at end of file diff --git a/app/btmesh/component_host/btmesh_app_remote_prov_ui.mk b/app/btmesh/component_host/btmesh_app_remote_prov_ui.mk new file mode 100644 index 00000000000..48601705218 --- /dev/null +++ b/app/btmesh/component_host/btmesh_app_remote_prov_ui.mk @@ -0,0 +1,12 @@ +################################################################################ +# BT Mesh Provisioner Application Component # +################################################################################ + +include $(SDK_DIR)/app/btmesh/component_host/btmesh_app_prov_ui.mk +include $(SDK_DIR)/app/btmesh/component_host/btmesh_app_remote_prov.mk + +override INCLUDEPATHS += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_app_remote_prov_ui + +override C_SRC += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_app_remote_prov_ui/btmesh_app_remote_prov_ui.c \ No newline at end of file diff --git a/app/btmesh/component_host/btmesh_conf.mk b/app/btmesh/component_host/btmesh_conf.mk new file mode 100644 index 00000000000..8fcc3938d7a --- /dev/null +++ b/app/btmesh/component_host/btmesh_conf.mk @@ -0,0 +1,16 @@ +################################################################################ +# BT Mesh Configurator Component # +################################################################################ + +override INCLUDEPATHS += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_conf \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_conf/config + +override C_SRC += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_conf/btmesh_conf.c \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_conf/btmesh_conf_distributor.c \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_conf/btmesh_conf_executor.c \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_conf/btmesh_conf_job.c \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_conf/btmesh_conf_task.c + +override CFLAGS += -DSL_CATALOG_BTMESH_CONF_PRESENT \ No newline at end of file diff --git a/app/btmesh/component_host/btmesh_db.mk b/app/btmesh/component_host/btmesh_db.mk new file mode 100644 index 00000000000..7ac57d8e6da --- /dev/null +++ b/app/btmesh/component_host/btmesh_db.mk @@ -0,0 +1,9 @@ +################################################################################ +# BT Mesh Database Component # +################################################################################ + +override INCLUDEPATHS += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_db + +override C_SRC += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_db/btmesh_db.c \ No newline at end of file diff --git a/app/btmesh/component_host/btmesh_key_export.mk b/app/btmesh/component_host/btmesh_key_export.mk new file mode 100644 index 00000000000..d77f46d9933 --- /dev/null +++ b/app/btmesh/component_host/btmesh_key_export.mk @@ -0,0 +1,11 @@ +################################################################################ +# BT Mesh Provisioner Application Component # +################################################################################ + +include $(SDK_DIR)/app/bluetooth/component_host/app_log.mk +include $(SDK_DIR)/app/bluetooth/component_host/app_assert.mk + +override INCLUDEPATHS += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_key_export +override C_SRC += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_key_export/btmesh_key_export.c diff --git a/app/btmesh/component_host/btmesh_prov.mk b/app/btmesh/component_host/btmesh_prov.mk new file mode 100644 index 00000000000..32e28f1ed8b --- /dev/null +++ b/app/btmesh/component_host/btmesh_prov.mk @@ -0,0 +1,12 @@ +################################################################################ +# BT Mesh Provisioner Component # +################################################################################ + +include $(SDK_DIR)/app/btmesh/component_host/btmesh_db.mk +include $(SDK_DIR)/app/bluetooth/component_host/slist.mk + +override INCLUDEPATHS += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_prov + +override C_SRC += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_prov/btmesh_prov.c \ No newline at end of file diff --git a/app/btmesh/component_host/btmesh_remote_prov.mk b/app/btmesh/component_host/btmesh_remote_prov.mk new file mode 100644 index 00000000000..139c0e0931e --- /dev/null +++ b/app/btmesh/component_host/btmesh_remote_prov.mk @@ -0,0 +1,12 @@ +################################################################################ +# BT Mesh Remote Provisioner Component # +################################################################################ + +include $(SDK_DIR)/app/btmesh/component_host/btmesh_prov.mk +include $(SDK_DIR)/app/bluetooth/component_host/simple_timer.mk + +override INCLUDEPATHS += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_remote_prov + +override C_SRC += \ +$(SDK_DIR)/app/btmesh/common_host/btmesh_remote_prov/btmesh_remote_prov.c \ No newline at end of file diff --git a/app/btmesh/component_host/ncp_host_btmesh.mk b/app/btmesh/component_host/ncp_host_btmesh.mk new file mode 100644 index 00000000000..2b88e409a08 --- /dev/null +++ b/app/btmesh/component_host/ncp_host_btmesh.mk @@ -0,0 +1,22 @@ +################################################################################ +# NCP host component with threading for Bluetooth Mesh # +################################################################################ + +# Threading is enabled by default. +# In case of an example handling a lot of data over UART, threaded usage +# might incur data loss or corruption. On the other hand, threaded UART +# handling use less CPU and is adequate for less data rate. +HOST_THREADING ?= 1 + +ifeq (1, ${HOST_THREADING}) +include $(SDK_DIR)/app/bluetooth/component_host/ncp_host_bt.mk +else +include $(SDK_DIR)/app/bluetooth/component_host/ncp_host_nothread.mk +endif + +override C_SRC += \ +$(SDK_DIR)/protocol/bluetooth/src/sl_btmesh_ncp_host.c \ +$(SDK_DIR)/protocol/bluetooth/src/sl_btmesh_ncp_host_api.c + +# Let common code know to build BTMESH specific sources. +override CFLAGS += -DBTMESH diff --git a/app/btmesh/documentation/btmesh-release-highlights.txt b/app/btmesh/documentation/btmesh-release-highlights.txt new file mode 100644 index 00000000000..ff6c5d21455 --- /dev/null +++ b/app/btmesh/documentation/btmesh-release-highlights.txt @@ -0,0 +1,10 @@ +Bluetooth Mesh SDK 4.2.0.0 +- Support for Mesh draft specification 1.1 + - Mesh Protocol + - Mesh Binary Large Object Transfer Model (MBT) + - Mesh Device Firmware Update Model (DFU) +- Reduced project flash consumption by optimizing Mesh stack code size +- Support added for xGM240P PCB Modules and BG22/BGM220 Explorer Kits +- Support added for GCC version 10.3-2021.10 and IAR version 9.20.4 + + diff --git a/app/btmesh/documentation/example/btmesh_ncp_empty/readme.md b/app/btmesh/documentation/example/btmesh_ncp_empty/readme.md new file mode 100644 index 00000000000..67fda31c99c --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_ncp_empty/readme.md @@ -0,0 +1,150 @@ +# Bluetooth Mesh - NCP Empty + +At times design constraints drive the need to run the application on a separated host and have the Bluetooth stack running on a dedicated target. This configuration of the stack is called the Network Co-Processor (NCP) mode. NCP mode is illustrated here with the **Bluetooth Mesh - NCP Empty** example application and NCP Commander used as a host application. + +**Bluetooth Mesh - NCP Empty** demonstrates the bare minimum needed for a Bluetooth mesh NCP Target C application to make 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. The communication between the Host Controller and the target can be secured by installing the Secure NCP component. The example requires the BGAPI UART DFU Bootloader. + +## Getting Started + +To get started with Silicon Labs Bluetooth software and Simplicity Studio, see [QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf). + +In the NCP context, the application runs on a host MCU or PC, which is called the NCP Host, while the Bluetooth stack runs on an EFR32, which is called the NCP Target. + +The NCP Host and Target communicate via a serial interface (UART) or, if a mainboard is used, optionally via TCP/IP connection. The communication between the NCP Host and Target is defined in the Silicon Labs proprietary protocol called BGAPI. BGLib is the C reference implementation of the BGAPI protocol, which is to be used on the NCP Host side. + +[AN1259: Using the v3.x Silicon Labs Bluetooth Stack in Network CoProcessor Mode](https://www.silabs.com/documents/public/application-notes/an1259-bt-ncp-mode-sdk-v3x.pdf) provides a detailed description how NCP works and how to configure it for your custom hardware. + +The following figures show the system view of NCP mode. + +![System View](readme_img0.png) + +![System Block Diagram](readme_img1.png) + +## Evaluating with Bluetooth NCP Commander + +NCP Commander can be used to control the target and test NCP firmware without developing your own host application. In Simplicity Studio, browse to the Launcher -> Compatible Tools tab and open NCP Commander. A shortcut to the Compatible Tools can also be found on the top toolbar. Follow these steps to make the NCP target advertise. + +1. Connect your board to a PC via USB and start NCP Commander from Simplicity Studio. + +![step 1](readme_img3.png) + +2. Choose your board from the list and click "Connect". + +![step 2](readme_img4.png) + +3. The NCP host will try to get the Bluetooth address and firmware version from the NCP target. If it succeeds, the connection is established. + +![step 2](readme_img5.png) + +4. Upon connection to the NCP target, you must initialize the node in order for it to emit unprovisioned beacons and then be provisioned. To make sure the device starts from a clean state, do a factory reset to erase the NVM information, as illustrated below, using the `sl_btmesh_node_reset()` command: + +![step 3](readme_img6.png) + +5. Once you have factory-reset the node, you can initialize the stack as a node by calling the initializing routine `sl_btmesh_node_init()`. In the API help menu, select the corresponding routine, copy it in the command field and send it. You can now see the device scanning. If you want to prevent the device scanning (as the display may be flooded with the scan response messages), you can also call `sl_bt_user_manage_event_filter(00 A0 00 05 00)`, `sl_bt_user_manage_event_filter(00 A0 00 05 01)` and `sl_bt_user_manage_event_filter(00 A0 00 05 02)` to block all the Bluetooth LE scan reports. This can be called even before the node initialization. + +![step 3](readme_img7.png) + +6. Once the device stack is initialized as a node, you can start sending unprovisioned beacons. This can be done by calling the routine using the value 0x3 for both advertising and GATT bearers like this `sl_btmesh_node_start_unprov_beaconing(0x3)`: + +![step 3](readme_img8.png) + +7. Open the Silicon Labs Bluetooth Mesh application to see your device advertising as "Silabs Example". You may also connect to the device and discover its GATT database. + +## NCP Host examples + +In addition to **Bluetooth NCP Commander**, Silicon Labs also provides NCP Host examples with source code. + +A C project is in the SDK folder `app/btmesh/example_host/empty_btmesh` + +A pyBGAPI based Python project can be found in the [SiliconLabs / pybgapi-examples](https://github.com/SiliconLabs/pybgapi-examples) GitHub repository. + +For more information, see [AN1259: Using the v3.x Silicon Labs Bluetooth Stack in Network CoProcessor Mode](https://www.silabs.com/documents/public/application-notes/an1259-bt-ncp-mode-sdk-v3x.pdf). + +## Secure NCP + +Secure NCP secures communication between the NCP Host and target by encrypting the commands, events, and any data transmitted between the target and the host. + +### Instructions for Secure NCP using ncp_daemon and empty_btmesh examples + +Components for secure BGAPI communication: + +1. ncp_daemon example (NCP Host) + + All security logic is handled by the security component on the host side. + +2. empty_btmesh example (NCP Host) + + Example host application for demonstrating BGAPI communication. + +3. btmesh_ncp_empty example (NCP Target) + + Example for NCP target role + +BGAPI security is implemented by encrypting the communication between NCP target and Host. To minimize the changes needed for the host application, the security is implemented in a separate component (NCP Daemon). The host application (empty_btmesh) runs in a separate task from the security component. This allows the different applications to easily access the secure NCP. All security logic is handled by this security component. + +Prerequisites for setting up secure BGAPI communication: + +- A POSIX/Mac, MSYS2 or Cygwin platform +- openssl-devel package installed + +Steps for setting up secure BGAPI communication: + +1. btmesh_ncp_empty (NCP Target) example must be programmed to the EFR32 chip: + + - Connect your mainboard to the PC. + - Open Simplicity Studio (with the Bt Mesh SDK installed). + - Select btmesh_ncp_empty (NCP Target) example from **Example Applications & Demos** to flash to the EFR32 device. + - Add the Secure-ncp component to the example, then build the example, and flash it to the EFR32 device. + +2. Compile and start ncp_daemon in a new terminal: + + - Open a new terminal (on POSIX/Mac: any terminal; on Windows: Cygwin or MSYS2. Note: Mingw32/64 will not work). + - Navigate to app/btmesh/example_host/ncp_daemon in the Bt Mesh SDK. + - Build the example by typing 'make'. + - run the example with appropriate parameters (e.g., exe/ncp_daemon.exe /dev/ttyS13 115200 encrypted unencrypted). + - 1st parameter: serial port + - 2nd parameter: serial port speed + - 3rd parameter: file descriptor for encrypted domain socket (it can be any string) + - 4th parameter: file descriptor for unencrypted domain socket (it can be any string) + +3. Compile and start empty_btmesh in a new terminal: + + - Open a new terminal (cygwin/msys2 terminal in Windows). + - Navigate to app/btmesh/example_host/empty_btmesh in the Bt Mesh SDK. + - Build the example by typing 'make'. + - run the example with appropriate parameters (eg ./exe/empty_btmesh.exe -n ../ncp_daemon/encrypted). + - 1st parameter: -n connect to a named socket instead of connecting the standard UART/TCP + - 2nd parameter: file descriptor for encrypted or unencrypted domain socket (it can be any string, but must match appropriate file descriptor string used in Step 2) + - After running mesh-secure-ncp the 'Reset event' and the 'Node Initialized event' should arrive. + - Note that message encryption will happen in the ncp_daemon automatically by connecting to the encrypted socket. + +## Troubleshooting + +Note that Software Example-based projects do not include a bootloader. However, they are configured to expect a bootloader to be present on the device. To install a bootloader, from the Launcher perspective's EXAMPLE PROJECTS & DEMOS tab either build and flash one of the bootloader examples or run one of the precompiled demos. Precompiled demos flash a bootloader as well as the application image. + +- To flash an OTA DFU-capable bootloader to the device, flash the **Bluetooth Mesh - SoC Switch** demo. +- To flash a UART DFU-capable bootloader to the device, flash the **Bluetooth Mesh - NCP Empty** demo. +- For other bootloader types, create your own bootloader project and flash it to the device before flashing your application. +- When you flash your application image to the device, use the *.hex* or *.s37* output file. Flashing *.bin* files may overwrite (erase) the bootloader. +- On Series 1 devices (EFR32xG1x), both first stage and second stage bootloaders have to be flashed. This can be done at once by flashing the *-combined.s37* file found in the bootloader project after building the project. +- For more information, see [UG103.6: Bootloader Fundamentals](https://www.silabs.com/documents/public/user-guides/ug103-06-fundamentals-bootloading.pdf) and [UG489: Silicon Labs Gecko Bootloader User's Guide for GSDK 4.0 and Higher](https://cn.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf). + +Before programming the radio board mounted on the mainboard, make sure the power supply switch the AEM position (right side) as shown below. + +![Radio board power supply switch](readme_img9.png) + +## Resources + +[Bluetooth Documentation](https://docs.silabs.com/bluetooth/latest/) + +[Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf) + +[QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) + +[AN1259: Using the v3.x Silicon Labs Bluetooth Stack in Network Co-Processor Mode](https://www.silabs.com/documents/public/application-notes/an1259-bt-ncp-mode-sdk-v3x.pdf) + +[Bluetooth Training](https://www.silabs.com/support/training/bluetooth) + +## Report Bugs & Get Support + +You are always encouraged and welcome to report any issues you found to us via [Silicon Labs Community](https://www.silabs.com/community). diff --git a/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img0.png b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img0.png new file mode 100644 index 00000000000..e77278a2aab --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37838f924da8a9fd7ad5e0e198dde28be6fe487d6762c4de94b3a9e906c84a0e +size 288257 diff --git a/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img1.png b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img1.png new file mode 100644 index 00000000000..fa197f199d8 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e47349a50b63dde8f24cda1719cd26c5f7229d2e92917074bc37cbaa265d42e +size 89732 diff --git a/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img2.png b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img2.png new file mode 100644 index 00000000000..ad460f410bc --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1cb6c30b6fbb90f7ef9846feecd8bebb48ba161266417c917436b587541c460 +size 148666 diff --git a/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img3.png b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img3.png new file mode 100644 index 00000000000..db09f62a1f0 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c6a394550f39e295f9f60391a55492c5caab4a1a46b7cc402f92f5feae4f5d5f +size 189896 diff --git a/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img4.png b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img4.png new file mode 100644 index 00000000000..c1933fce5bb --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11a01cef62d414ffde753f4f8a1521d0954881f67086e6f00e2df75e56fa6f4a +size 97679 diff --git a/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img5.png b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img5.png new file mode 100644 index 00000000000..52ad7899a89 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5396466b8ea0597951301f82d81b51dc4467de94ed377fed5a5195a1950c73fd +size 118594 diff --git a/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img6.png b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img6.png new file mode 100644 index 00000000000..3586352dedb --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec73f250793ed24edf80c3c544b698dec477ffe5bd988cf7383a607f2123484b +size 175990 diff --git a/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img7.png b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img7.png new file mode 100644 index 00000000000..f831212afdc --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ed018fed7ec8d18bce97f18bef34f03414805ec26affc3505b0bca786fb8335 +size 211019 diff --git a/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img8.png b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img8.png new file mode 100644 index 00000000000..3efe7eb68f2 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2de310134a6b1633868864adc71c7c0ed7ad78adb73bae231f12c46ade2db14d +size 260293 diff --git a/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img9.png b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img9.png new file mode 100644 index 00000000000..dbbd2a8004d --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_ncp_empty/readme_img9.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e4d4f007d6c9dcc867f438330840be39c1be546c24123f9fab5d9533d079380 +size 44396 diff --git a/app/btmesh/documentation/example/btmesh_soc_dfu_distributor/readme.md b/app/btmesh/documentation/example/btmesh_soc_dfu_distributor/readme.md new file mode 100644 index 00000000000..7aa839705b7 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_dfu_distributor/readme.md @@ -0,0 +1,77 @@ +# Bluetooth Mesh - SoC DFU Distributor + +Device Firmware Update (DFU) is a feature introduced in the Bluetooth Mesh Model specification v1.1 that provides a standard way to update device firmware over a Bluetooth mesh network. The **Bluetooth Mesh - SoC DFU Distributor** example demonstrates a Bluetooth mesh node playing the DFU Distributor role responsible for delivering new firmware images to the Updating nodes and monitoring the progress of the firmware update. The Distributor acts as an intermediary on behalf of the Initiator so that the Initiator does not always need to be present on the mesh network. Firmware image delivery is performed using the BLOB Transfer models. + + +This example requires one of the Internal Storage or SPI Flash Storage Bootloader variants depending on device memory and board hardware capabilities. The Distributor stores update images in bootloader storage slots and therefore the storage slot size must be big enough to store update images. + +## Getting Started + +To learn Bluetooth mesh technology basics, see [Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf). + +To get started with Bluetooth Mesh and Simplicity Studio, see **QSG183: Bluetooth Mesh SDK Quick-Start Guide for Bluetooth Mesh 1.1**. + +The term SoC stands for "System on Chip", meaning that this is a standalone application that runs on the EFR32/BGM and does not require any external MCU or other active components to operate. + +This is an example of a Bluetooth Mesh DFU Distributor application. To perform firmware updates with the Distributor, an Initiator, e.g. the Silicon Labs Bluetooth Mesh mobile app, is required as well as the device firmware update target(s). For more information on the DFU examples, see **AN1370: Bluetooth® Mesh Device Firmware Update Example Walkthrough**. To learn the basics of the Bluetooth Mesh Device Firmware Update specification, see **AN1319: Bluetooth® Mesh Device Firmware Update**. + +The example has the Distributor functionality enabled by default because the following components are installed: + +- Firmware Distribution Server +- Firmware Update Client +- BLOB Transfer Client + +The example also has the Updating node functionality enabled by default because the following components are installed: + +- Firmware Update Server +- BLOB Transfer Server + +![Bluetooth Mesh Firmware Update Components](readme_img1.png) + +![Bluetooth Mesh Transfer Components](readme_img2.png) + +To learn more about programming an SoC application, see [UG472: Silicon Labs Bluetooth ® Mesh Configurator User's guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug472-bluetooth-mesh-v2x-node-configuration-users-guide.pdf). + +[UG295: Silicon Labs Bluetooth ® Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) gives code-level information on the stack and the common pitfalls to avoid. + +## Troubleshooting + +Note that Software Example-based projects do not include a bootloader. However, they are configured to expect a bootloader to be present on the device. To install a bootloader, from the Launcher perspective's EXAMPLE PROJECTS & DEMOS tab either build and flash one of the bootloader examples or run one of the precompiled demos. Precompiled demos flash a bootloader as well as the application image. + +- To flash an OTA DFU-capable bootloader to the device, flash the **Bluetooth Mesh - SoC Switch** demo. +- To flash a UART DFU-capable bootloader to the device, flash the **Bluetooth Mesh - NCP Empty** demo. +- For the parts that support the DFU Distributor role and have less than 1 MB of internal flash, the SPI Flash Storage Bootloader is flashed with the demo. +- For other bootloader types, create your own bootloader project and flash it to the device before flashing your application. +- When you flash your application image to the device, use the *.hex* or *.s37* output file. Flashing *.bin* files may overwrite (erase) the bootloader. +- On Series 1 devices (EFR32xG1x), both first stage and second stage bootloaders have to be flashed. This can be done at once by flashing the *-combined.s37* file found in the bootloader project after building the project. +- For more information, see [UG103.6: Bootloader Fundamentals](https://www.silabs.com/documents/public/user-guides/ug103-06-fundamentals-bootloading.pdf) and [UG489: Silicon Labs Gecko Bootloader User's Guide for GSDK 4.0 and Higher](https://cn.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf). + +Before programming the radio board mounted on the mainboard, make sure the power supply switch is in the AEM position (right side) as shown below. + +![Radio board power supply switch](readme_img0.png) + +## Resources + +[Bluetooth Documentation](https://docs.silabs.com/bluetooth/latest/) + +[Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf) + +[QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) + +[AN1315: Bluetooth Mesh Device Power Consumption Measurements](https://www.silabs.com/documents/public/application-notes/an1315-bluetooth-mesh-power-consumption-measurements.pdf) + +[AN1316: Bluetooth Mesh Parameter Tuning for Network Optimization](https://www.silabs.com/documents/public/application-notes/an1316-bluetooth-mesh-network-optimization.pdf) + +[AN1317: Using Network Analyzer with Bluetooth Low Energy ® and Mesh](https://www.silabs.com/documents/public/application-notes/an1317-network-analyzer-with-bluetooth-mesh-le.pdf) + +[AN1318: IV Update in a Bluetooth Mesh Network](https://www.silabs.com/documents/public/application-notes/an1318-bluetooth-mesh-iv-update.pdf) + +[UG295: Silicon Labs Bluetooth Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) + +[UG472: Silicon Labs Bluetooth ® C Application Developer's Guide for SDK v3.x](https://www.silabs.com/documents/public/user-guides/ug434-bluetooth-c-soc-dev-guide-sdk-v3x.pdf) + +[Bluetooth Training](https://www.silabs.com/support/training/bluetooth) + +## Report Bugs & Get Support + +You are always encouraged and welcome to report any issues you found to us via [Silicon Labs Community](https://www.silabs.com/community). diff --git a/app/btmesh/documentation/example/btmesh_soc_dfu_distributor/readme_img0.png b/app/btmesh/documentation/example/btmesh_soc_dfu_distributor/readme_img0.png new file mode 100644 index 00000000000..dbbd2a8004d --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_dfu_distributor/readme_img0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e4d4f007d6c9dcc867f438330840be39c1be546c24123f9fab5d9533d079380 +size 44396 diff --git a/app/btmesh/documentation/example/btmesh_soc_empty/readme.md b/app/btmesh/documentation/example/btmesh_soc_empty/readme.md new file mode 100644 index 00000000000..8d08dfaf401 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_empty/readme.md @@ -0,0 +1,105 @@ +# Bluetooth Mesh - SoC Empty + +This example demonstrates the bare minimum needed for a Bluetooth mesh C application that supports Over-the-Air Device Firmware Upgrading (OTA DFU). The application starts Unprovisioned Device Beaconing after boot, and waits to be provisioned to a Mesh Network. This example can be used as a starting point for an SoC project and it can be customized by adding new components using the Project Configurator or by modifying the application (*app.c*). This example requires one of the Internal Storage Bootloader (single image) variants, depending on device memory. + +## Getting Started + +To learn Bluetooth mesh technology basics, see [Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf). + +To get started with Silicon Labs Bluetooth Mesh and Simplicity Studio, see [QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf). + +The term SoC stands for "System on Chip". In the SoC model the entire system (stack and application) resides on a single chip, whereas in the NCP model the stack processing is done in a separate coprocessor that interacts with the application’s microcontroller through an external serial interface. + +This example is an (almost) empty project that has only the bare minimum with Proxy and Relay features included to make a working Bluetooth Mesh application. + +To add or remove features from the example, follow this process: + +- Add model and feature components to your project +- Optionally configure your Mesh node through the "Bluetooth Mesh Configurator". It is configured to have only one element supporting a minimal set of models. + +![Bluetooth Mesh Configurator](readme_img1.png) + +To learn more about programming an SoC application, see [UG472: Silicon Labs Bluetooth ® Mesh Configurator User's guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug472-bluetooth-mesh-v2x-node-configuration-users-guide.pdf). + +- Some components are configurable, and can be customized using the Component Editor + +![Bluetooth Mesh Components](readme_img5.png) + +- Respond to the events raised by the Bluetooth stack +- Implement additional application logic + +[UG295: Silicon Labs Bluetooth ® Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) gives code-level information on the stack and the common pitfalls to avoid. + +## Responding to Bluetooth Events + +Just like in the Bluetooth Low Energy SDK, a Mesh application is event-driven. The Bluetooth Mesh stack generates events when a remote device connects or disconnects, for example, or when it publishes a message. While it is not necessary to react to all events, the ones requiring action should be handled by the application in the `sl_btmesh_on_event()` function. The prototype of this function is implemented in *app.c*. To handle more events, the switch-case statement of this function is to be extended. For the list of Bluetooth Mesh events, see the HTML documentation present in the Simplicity Studio installation directory: + +* /app/btmesh/documentation/API_BLUETOOTH_MESH_HTML + +## Implementing Application Logic + +Additional application logic has to be implemented in the `app_init()` and `app_process_action()` functions. Find the definitions of these functions in *app.c*. The `app_init()` function is called once when the device is booted, and `app_process_action()` is called repeatedly in a while(1) loop. For example, you can poll peripherals in this function. + +## Features Already Added to Bluetooth Mesh - SoC Empty Application + +The **Bluetooth Mesh - SoC Empty** application is ***almost*** empty. It implements a basic application to demonstrate how to emit unprovisioned beacons on both the advertising and GATT bearer. + +## Testing the Bluetooth Mesh - SoC Empty Application + +As described above, an empty example does nothing except broadcast unprovisioned beacons. To test this feature, do the following: + +1. Clear the NVM Mesh settings, for example by performing an Erase Chip with Simplicity Commander, since the example has no button control. See [UG162: Simplicity Commander Reference Guide](https://www.silabs.com/documents/public/user-guides/ug162-simplicity-commander-reference-guide.pdf) for more information. +2. Make sure a bootloader is installed. See the Troubleshooting section. +3. Build and flash the **Bluetooth Mesh - SoC Empty** example to your device. The flashing can be done, for example, using the Simplicity Studio internal **Flash Programmer** or external **Simplicity Commander** tools. +4. Download the Silicon Labs **Bluetooth Mesh** smartphone application available on [iOS](https://apps.apple.com/us/app/bluetooth-mesh-by-silicon-labs/id1411352948) and [Android](https://play.google.com/store/apps/details?id=com.siliconlabs.bluetoothmesh). Make sure to reset the local database by pressing the "Reset local database" button in the menu "More". + +![Bluetooth Mesh start screen](readme_img4.png) + +5. Open the app, choose the Provision Browser, and tap **Scan**. + +![Bluetooth Mesh start screen](readme_img2.png) + +6. Now you should find your device advertising. Tap **PROVISION**. + +![Bluetooth Browser](readme_img3.png) + +## Troubleshooting + +Note that Software Example-based projects do not include a bootloader. However, they are configured to expect a bootloader to be present on the device. To install a bootloader, from the Launcher perspective's EXAMPLE PROJECTS & DEMOS tab either build and flash one of the bootloader examples or run one of the precompiled demos. Precompiled demos flash a bootloader as well as the application image. + +- To flash an OTA DFU-capable bootloader to the device, flash the **Bluetooth Mesh - SoC Switch** demo. +- To flash a UART DFU-capable bootloader to the device, flash the **Bluetooth Mesh - NCP Empty** demo. +- For other bootloader types, create your own bootloader project and flash it to the device before flashing your application. +- When you flash your application image to the device, use the *.hex* or *.s37* output file. Flashing *.bin* files may overwrite (erase) the bootloader. +- On Series 1 devices (EFR32xG1x), both first stage and second stage bootloaders have to be flashed. This can be done at once by flashing the *-combined.s37* file found in the bootloader project after building the project. +- For more information, see [UG103.6: Bootloader Fundamentals](https://www.silabs.com/documents/public/user-guides/ug103-06-fundamentals-bootloading.pdf) and [UG489: Silicon Labs Gecko Bootloader User's Guide for GSDK 4.0 and Higher](https://cn.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf). + +Before programming the radio board mounted on the mainboard, make sure the power supply switch the AEM position (right side) as shown below. + +![Radio board power supply switch](readme_img0.png) + +## Resources + +[Bluetooth Documentation](https://docs.silabs.com/bluetooth/latest/) + +[Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf) + +[QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) + +[AN1315: Bluetooth Mesh Device Power Consumption Measurements](https://www.silabs.com/documents/public/application-notes/an1315-bluetooth-mesh-power-consumption-measurements.pdf) + +[AN1316: Bluetooth Mesh Parameter Tuning for Network Optimization](https://www.silabs.com/documents/public/application-notes/an1316-bluetooth-mesh-network-optimization.pdf) + +[AN1317: Using Network Analyzer with Bluetooth Low Energy ® and Mesh](https://www.silabs.com/documents/public/application-notes/an1317-network-analyzer-with-bluetooth-mesh-le.pdf) + +[AN1318: IV Update in a Bluetooth Mesh Network](https://www.silabs.com/documents/public/application-notes/an1318-bluetooth-mesh-iv-update.pdf) + +[UG295: Silicon Labs Bluetooth Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) + +[UG472: Silicon Labs Bluetooth ® C Application Developer's Guide for SDK v3.x](https://www.silabs.com/documents/public/user-guides/ug434-bluetooth-c-soc-dev-guide-sdk-v3x.pdf) + +[Bluetooth Training](https://www.silabs.com/support/training/bluetooth) + +## Report Bugs & Get Support + +You are always encouraged and welcome to report any issues you found to us via [Silicon Labs Community](https://www.silabs.com/community). diff --git a/app/btmesh/documentation/example/btmesh_soc_empty/readme_img0.png b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img0.png new file mode 100644 index 00000000000..dbbd2a8004d --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e4d4f007d6c9dcc867f438330840be39c1be546c24123f9fab5d9533d079380 +size 44396 diff --git a/app/btmesh/documentation/example/btmesh_soc_empty/readme_img1.png b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img1.png new file mode 100644 index 00000000000..df7ebe8c2eb --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d19a114ca9084aab9819ff5b7d8c6c4aefe49bd99515e9f01d7c954ddcdf76f +size 64660 diff --git a/app/btmesh/documentation/example/btmesh_soc_empty/readme_img2.png b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img2.png new file mode 100644 index 00000000000..cae4b683d75 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea05a52282bfb26c37a4f8fda2219d62c7042d38bc9f35089af9b91eb42f5f0e +size 44531 diff --git a/app/btmesh/documentation/example/btmesh_soc_empty/readme_img3.png b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img3.png new file mode 100644 index 00000000000..955a786779f --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ed491001ead551c0e5bac22d6953278735f600cc13d44fa750bdd63779a1156 +size 36695 diff --git a/app/btmesh/documentation/example/btmesh_soc_empty/readme_img4.png b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img4.png new file mode 100644 index 00000000000..1fdf2571304 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:badc59c070aae1dae6e6d1ddc5e45b082e4155b6e9bf6bb5bbbbe4ebc75fc5a3 +size 72163 diff --git a/app/btmesh/documentation/example/btmesh_soc_empty/readme_img5.png b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img5.png new file mode 100644 index 00000000000..e5a59f35411 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_empty/readme_img5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b282be723e57e517b24d9ad34bcb864bd69c7785b4d89985761d54d8d503527f +size 151591 diff --git a/app/btmesh/documentation/example/btmesh_soc_empty_cbp/readme.md b/app/btmesh/documentation/example/btmesh_soc_empty_cbp/readme.md new file mode 100644 index 00000000000..d6c09b54094 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_empty_cbp/readme.md @@ -0,0 +1,50 @@ +# Bluetooth Mesh - SoC Empty + + This example demonstrates the bare minimum needed for a Bluetooth Mesh C application that allows Certificate-Based Provisioning (CBP). The application + starts Unprovisioned Device Beaconing after boot waiting to be provisioned to a Mesh Network. This Software Example can be used as a starting point for + an SoC project and it can be customized by adding new components from the Component Browser or by modifying the application (app.c). This example + requires one of the Internal Storage Bootloader (single image) variants depending on device memory. + +## Getting Started + + +## Troubleshooting + +Note that Software Example-based projects do not include a bootloader. However, they are configured to expect a bootloader to be present on the device. To install a bootloader, from the Launcher perspective's EXAMPLE PROJECTS & DEMOS tab either build and flash one of the bootloader examples or run one of the precompiled demos. Precompiled demos flash a bootloader as well as the application image. + +- To flash an OTA DFU-capable bootloader to the device, flash the **Bluetooth Mesh - SoC Switch** demo. +- To flash a UART DFU-capable bootloader to the device, flash the **Bluetooth Mesh - NCP Empty** demo. +- For other bootloader types, create your own bootloader project and flash it to the device before flashing your application. +- When you flash your application image to the device, use the *.hex* or *.s37* output file. Flashing *.bin* files may overwrite (erase) the bootloader. +- On Series 1 devices (EFR32xG1x), both first stage and second stage bootloaders have to be flashed. This can be done at once by flashing the *-combined.s37* file found in the bootloader project after building the project. +- For more information, see [UG103.6: Bootloader Fundamentals](https://www.silabs.com/documents/public/user-guides/ug103-06-fundamentals-bootloading.pdf) and [UG489: Silicon Labs Gecko Bootloader User's Guide for GSDK 4.0 and Higher](https://cn.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf). + +Before programming the radio board mounted on the mainboard, make sure the power supply switch the AEM position (right side) as shown below. + +![Radio board power supply switch](readme_img0.png) + +## Resources + +[Bluetooth Documentation](https://docs.silabs.com/bluetooth/latest/) + +[Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf) + +[QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) + +[AN1315: Bluetooth Mesh Device Power Consumption Measurements](https://www.silabs.com/documents/public/application-notes/an1315-bluetooth-mesh-power-consumption-measurements.pdf) + +[AN1316: Bluetooth Mesh Parameter Tuning for Network Optimization](https://www.silabs.com/documents/public/application-notes/an1316-bluetooth-mesh-network-optimization.pdf) + +[AN1317: Using Network Analyzer with Bluetooth Low Energy ® and Mesh](https://www.silabs.com/documents/public/application-notes/an1317-network-analyzer-with-bluetooth-mesh-le.pdf) + +[AN1318: IV Update in a Bluetooth Mesh Network](https://www.silabs.com/documents/public/application-notes/an1318-bluetooth-mesh-iv-update.pdf) + +[UG295: Silicon Labs Bluetooth Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) + +[UG472: Silicon Labs Bluetooth ® C Application Developer's Guide for SDK v3.x](https://www.silabs.com/documents/public/user-guides/ug434-bluetooth-c-soc-dev-guide-sdk-v3x.pdf) + +[Bluetooth Training](https://www.silabs.com/support/training/bluetooth) + +## Report Bugs & Get Support + +You are always encouraged and welcome to report any issues you found to us via [Silicon Labs Community](https://www.silabs.com/community). diff --git a/app/btmesh/documentation/example/btmesh_soc_empty_cbp/readme_img0.png b/app/btmesh/documentation/example/btmesh_soc_empty_cbp/readme_img0.png new file mode 100644 index 00000000000..dbbd2a8004d --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_empty_cbp/readme_img0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e4d4f007d6c9dcc867f438330840be39c1be546c24123f9fab5d9533d079380 +size 44396 diff --git a/app/btmesh/documentation/example/btmesh_soc_hsl/readme.md b/app/btmesh/documentation/example/btmesh_soc_hsl/readme.md new file mode 100644 index 00000000000..47aef884f06 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_hsl/readme.md @@ -0,0 +1,148 @@ +# Bluetooth Mesh - SoC Light HSL (Hue, Saturation, Lightness) + +The **Bluetooth Mesh - SoC Light HSL** example is a working example application that you can use as a template for Bluetooth Mesh HSL Light applications. + +The example is an out-of-the-box Software Demo where the LEDs of the device can be controlled by button presses on another device (for example **Bluetooth Mesh - SoC Switch**). The LEDs can be switched on and off, and their **lighting intensity** can also be set. **Hue** and **saturation** (shown only on the LCD or in UART logs, depending on the mainboard) can be set by the Light HSL Client model. The example also tries to establish friendship as a Friend node and prints its status to the LCD or UART. The example is based on the Bluetooth Mesh Generic On/Off Model, the Light Lightness Model, the Light HSL Server Model and the Light LC Server Model. This example requires one of the Internal Storage Bootloader (single image) variants, depending on device memory. + +*Note: Currently **Bluetooth Mesh - SoC Switch** does not support HSL Client (i.e. cannot set hue or saturation). Only the mobile application supports HSL Client. All the other features work.* + +![Bluetooth Mesh lighting system - Light](readme_img7.png) + +## Getting Started + +To learn Bluetooth mesh technology basics, see [Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf). + +To get started with Bluetooth Mesh and Simplicity Studio, see [QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf). + +The term SoC stands for "System on Chip", meaning that this is a standalone application that runs on the EFR32/BGM and does not require any external MCU or other active components to operate. + +This is an example of a Bluetooth Mesh HSL light application. It demonstrates how to control a light source, an LED mounted on a mainboard and a radio board or similar hardware, connected to a Bluetooth Mesh network. The light source lightness can be controlled with a light client, such as another radio board running the **Bluetooth Mesh - SoC Switch** application, or with **Bluetooth Mesh** smartphone application. + +*Note: Currently neither **Bluetooth Mesh - SoC Switch** nor the mobile application supports HSL Client. All the other features work.* + +The LED light can be controlled in many ways using different models: + +- **Generic OnOff Server** model can turn the light on and off +- **Generic Level Server** model can control the light brightness +- **Light Lightness Server** model can control the light Lightness +- **Light HSL Server** model can control light Lightness, (Hue and Saturation only virtually, can be seen only in the LCD and logs) +- **Light LC Server** model, that is Light Controller, can automatically control the switch on/&off based on the sensors +- **Scene Server** model saves the light settings to recall them later +- **Scheduler Server** model provides time- and date-dependent lighting operations + +For more information on the HSL light model, see the following [Wikipedia link](https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB_alternative). + +To add or remove features from the example, follow this process: + +- Add model and feature components to your project +- Optionally configure the Mesh node through the "Bluetooth Mesh Configurator" + +![Bluetooth Mesh Configurator](readme_img1.png) + +To learn more about programming an SoC application, see [UG472: Silicon Labs Bluetooth ® Mesh Configurator User's guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug472-bluetooth-mesh-v2x-node-configuration-users-guide.pdf). + +- Some components are configurable, and can be customized using the Component Editor + +![Bluetooth Mesh Components](readme_img8.png) + +- Respond to the events raised by the Bluetooth stack +- Implement additional application logic + +[UG295: Silicon Labs Bluetooth ® Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) gives code-level information on the stack and the common pitfalls to avoid. + +## Device Firmware Update + +Device Firmware Update (DFU) is a new feature introduced in the Bluetooth Mesh Model specification v1.1 that provides a standard way to update device firmware over a Bluetooth mesh network. The example has the Updating node functionality enabled by default that is fulfilled by installing the Firmware Update and BLOB Transfer model components: + +- Firmware Update Server +- BLOB Transfer Server + +![Bluetooth Mesh Firmware Update Components](readme_img9.png) + +![Bluetooth Mesh Transfer Components](readme_img10.png) + +For more information on the DFU examples, see **AN1370: Bluetooth® Mesh Device Firmware Update Example Walkthrough**. To learn the basics of the Bluetooth Mesh Device Firmware Update specification, see **AN1319: Bluetooth® Mesh Device Firmware Update**. + +## Testing the Bluetooth Mesh - SoC Light HSL Application + +To test the application, do the following: + +1. Make sure a bootloader is installed. See the Troubleshooting section. +2. Build and flash the **Bluetooth Mesh - SoC Light HSL** example to your device. +3. Reset the device by pressing and releasing the reset button on the mainboard while pressing BTN0. The message "Factory reset" should appear on the LCD. +4. Provision the device in one of three ways: + + - NCP Host provisioner examples, see for example an SDK folder `app/btmesh/example_host/btmesh_host_provisioner` or [github](https://github.com/SiliconLabs/bluetooth_mesh_stack_features/tree/master/provisioning) + + - NCP Commander with NCP target device, see [Bluetooth NCP Commander guide](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-tools-bluetooth-ncp-commander) or [AN1259: Using the v3.x Silicon Labs Bluetooth Stack in Network Co-Processor Mode](https://www.silabs.com/documents/public/application-notes/an1259-bt-ncp-mode-sdk-v3x.pdf) + + - For Mobile Phone use, see the [QSG176: Bluetooth Mesh SDK v2.x Quick-Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) for more information how to download and use the Silicon Labs Bluetooth Mesh application. + + Mobile Phone provisioning is illustrated in the following figure. + +![Bluetooth Mesh start screen](readme_img6.png) + +5. Open the app, choose the Provision Browser, and tap **Scan**. + +![Bluetooth Mesh Provision Browser](readme_img2.png) + +6. Now you should find your device advertising as "light node" (iOS) or "Unknown" (Android). Tap **PROVISION**. + +![Bluetooth Mesh Provisioning Device](readme_img3.png) + +7. Configure the device as **Light Lightness Server** and select the correct group to which the messages will be published (Demo group). If you want to test the Bluetooth Mesh Generic OnOff Model, the Light HSL Model, the Scene Model or some other Mesh Model, then select the respective client instead. You can use only one at a time in our mobile application. The mobile application does not support Light HSL Model yet, therefore use the Light Lightness Model. + +![Bluetooth Mesh Device Configuration](readme_img4.png) + +8. Use the slider to set the lightness of the mainboard + radio board LED. + +![Lightness slider](readme_img5.png) + +9. The next step is to add a switch or several switches into your network, if it has not already been done. This is required to fully test the whole system, for example the friendship and other features. You can then control the light example by pressing the buttons in the **Bluetooth Mesh - SoC Switch** and **Bluetooth Mesh - SoC Switch Low Power** examples. Read the applicable example project documentation to learn more. + +For more information on the example, see [AN1299: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Lighting Demonstration](https://www.silabs.com/documents/public/application-notes/an1299-understanding-bluetooth-mesh-lighting-demo-sdk-2x.pdf). + +## Troubleshooting + +Note that Software Example-based projects do not include a bootloader. However, they are configured to expect a bootloader to be present on the device. To install a bootloader, from the Launcher perspective's EXAMPLE PROJECTS & DEMOS tab either build and flash one of the bootloader examples or run one of the precompiled demos. Precompiled demos flash a bootloader as well as the application image. + +- To flash an OTA DFU-capable bootloader to the device, flash the **Bluetooth Mesh - SoC Switch** demo. +- To flash a UART DFU-capable bootloader to the device, flash the **Bluetooth Mesh - NCP Empty** demo. +- For other bootloader types, create your own bootloader project and flash it to the device before flashing your application. +- When you flash your application image to the device, use the *.hex* or *.s37* output file. Flashing *.bin* files may overwrite (erase) the bootloader. +- On Series 1 devices (EFR32xG1x), both first stage and second stage bootloaders have to be flashed. This can be done at once by flashing the *-combined.s37* file found in the bootloader project after building the project. +- For more information, see [UG103.6: Bootloader Fundamentals](https://www.silabs.com/documents/public/user-guides/ug103-06-fundamentals-bootloading.pdf) and [UG489: Silicon Labs Gecko Bootloader User's Guide for GSDK 4.0 and Higher](https://cn.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf). + +Before programming the radio board mounted on the mainboard, make sure the power supply switch the AEM position (right side) as shown below. + +![Radio board power supply switch](readme_img0.png) + +## Resources + +[Bluetooth Documentation](https://docs.silabs.com/bluetooth/latest/) + +[Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf) + +[QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) + +[AN1315: Bluetooth Mesh Device Power Consumption Measurements](https://www.silabs.com/documents/public/application-notes/an1315-bluetooth-mesh-power-consumption-measurements.pdf) + +[AN1316: Bluetooth Mesh Parameter Tuning for Network Optimization](https://www.silabs.com/documents/public/application-notes/an1316-bluetooth-mesh-network-optimization.pdf) + +[AN1317: Using Network Analyzer with Bluetooth Low Energy ® and Mesh](https://www.silabs.com/documents/public/application-notes/an1317-network-analyzer-with-bluetooth-mesh-le.pdf) + +[AN1318: IV Update in a Bluetooth Mesh Network](https://www.silabs.com/documents/public/application-notes/an1318-bluetooth-mesh-iv-update.pdf) + +[AN1299: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Lighting Demonstration](https://www.silabs.com/documents/public/application-notes/an1299-understanding-bluetooth-mesh-lighting-demo-sdk-2x.pdf) + +[UG295: Silicon Labs Bluetooth Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) + +[UG472: Silicon Labs Bluetooth ® C Application Developer's Guide for SDK v3.x](https://www.silabs.com/documents/public/user-guides/ug434-bluetooth-c-soc-dev-guide-sdk-v3x.pdf) + +[Wikipedia link](https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB_alternative) + +[Bluetooth Training](https://www.silabs.com/support/training/bluetooth) + +## Report Bugs & Get Support + +You are always encouraged and welcome to report any issues you found to us via [Silicon Labs Community](https://www.silabs.com/community). diff --git a/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img0.png b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img0.png new file mode 100644 index 00000000000..dbbd2a8004d --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e4d4f007d6c9dcc867f438330840be39c1be546c24123f9fab5d9533d079380 +size 44396 diff --git a/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img1.png b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img1.png new file mode 100644 index 00000000000..e562fcd9df0 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9781f85a13862a7af18a0a0b3bb74c4797093549f300bdf8f36e8458d227591a +size 232743 diff --git a/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img2.png b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img2.png new file mode 100644 index 00000000000..6252a69f9dc --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c39b7ab6784e6c7943cea49b99a806f1f78bc15841389612a6975b61b1f2e420 +size 46788 diff --git a/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img3.png b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img3.png new file mode 100644 index 00000000000..be6fb227312 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55c6bf8ff94d233459d3521130485858e742c5068d33653438000520b63cd6b4 +size 38376 diff --git a/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img4.png b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img4.png new file mode 100644 index 00000000000..e4c9c7e1060 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef4adbf486e8f1571fc268bdc8072302b2fcc71a1c4098bed89126fe097122c6 +size 70210 diff --git a/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img5.png b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img5.png new file mode 100644 index 00000000000..961b5ead601 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a6c884a1d84ed2235ad24d42ff69c3705151790b9c8b252d00dc2e48e0cb4ee +size 60607 diff --git a/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img6.png b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img6.png new file mode 100644 index 00000000000..3978d4c9d25 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bceb9056799e05c0446aabcedd453db29088c6e63a025070822d98d60fc3b8f +size 72163 diff --git a/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img7.png b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img7.png new file mode 100644 index 00000000000..306b222bafe --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80524dce752c26916bea11955915b2724c8e2aa3274303e31f7e2ebecff6ad71 +size 30046 diff --git a/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img8.png b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img8.png new file mode 100644 index 00000000000..e5a59f35411 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_hsl/readme_img8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b282be723e57e517b24d9ad34bcb864bd69c7785b4d89985761d54d8d503527f +size 151591 diff --git a/app/btmesh/documentation/example/btmesh_soc_light/readme.md b/app/btmesh/documentation/example/btmesh_soc_light/readme.md new file mode 100644 index 00000000000..912e03c5fe1 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_light/readme.md @@ -0,0 +1,140 @@ +# Bluetooth Mesh - SoC Light + +The **Bluetooth Mesh - SoC Light** example is a working example application that you can use as a template for Bluetooth Mesh Light applications. + +The example is an out-of-the-box Software Demo where the LEDs of the device can be controlled by button presses on another device (for example **Bluetooth Mesh - SoC Switch**). The LEDs can be switched on and off, and the **lighting intensity**, **color temperature**, and **Delta UV** (on some devices shown only on the LCD or in UART logs) can also be set. The example also tries to establish friendship as a Friend node and prints its status to the LCD or UART (the target device determines if the feature is enabled and the output status). The example is based on the Bluetooth Mesh Generic On/Off Model, the Light Lightness Model, the Light CTL Server Model, and the Light LC Server Model. This example requires one of the Internal Storage Bootloader (single image) variants, depending on device memory. + +![Bluetooth Mesh lighting system - Light](readme_img7.png) + +## Getting Started + +To learn Bluetooth mesh technology basics, see [Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf). + +To get started with Bluetooth Mesh and Simplicity Studio, see [QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf). + +The term SoC stands for "System on Chip", meaning that this is a standalone application that runs on the EFR32/BGM and does not require any external MCU or other active components to operate. + +This is an example of a Bluetooth Mesh light application. It demonstrates how to control a light source, an LED mounted on a mainboard and a radio board or similar hardware, connected to a Bluetooth Mesh network. The light source lightness can be controlled with a light client, e.g. another radio board running the **Bluetooth Mesh - SoC Switch** application, or with **Bluetooth Mesh** smartphone application. + +The LED light can be controlled in many ways using different models: + +- **Generic OnOff Server** model can turn the light on and off +- **Generic Level Server** model can control the light brightness +- **Light Lightness Server** model can control the light Lightness +- **Light CTL Server** model can control light Lightness (Color Temperature and Delta UV only virtually) +- **Light LC Server** model, i.e. Light Controller, can automatically control the switch on/&off based on the sensors +- **Scene Server** model saves the light settings to recall them later +- **Scheduler Server** model provides time- and date-dependent lighting operations + +To add or remove features from the example, follow this process: + +- Add model and feature components to your project +- Optionally configure your Mesh node through the "Bluetooth Mesh Configurator" + +![Bluetooth Mesh Configurator](readme_img1.png) + +To learn more about programming an SoC application, see [UG472: Silicon Labs Bluetooth ® Mesh Configurator User's guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug472-bluetooth-mesh-v2x-node-configuration-users-guide.pdf). + +- Some components are configurable, and can be customized using the Component Editor + +![Bluetooth Mesh Components](readme_img8.png) + +- Respond to the events raised by the Bluetooth stack +- Implement additional application logic + +[UG295: Silicon Labs Bluetooth ® Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) gives code-level information on the stack and the common pitfalls to avoid. + +## Device Firmware Update + +Device Firmware Update (DFU) is a new feature introduced in the Bluetooth Mesh Model specification v1.1 that provides a standard way to update device firmware over a Bluetooth mesh network. The example has the Updating node functionality enabled by default that is fulfilled by installing the Firmware Update and BLOB Transfer model components: + +- Firmware Update Server +- BLOB Transfer Server + +![Bluetooth Mesh Firmware Update Components](readme_img9.png) + +![Bluetooth Mesh Transfer Components](readme_img10.png) + +For more information on the DFU examples, see **AN1370: Bluetooth® Mesh Device Firmware Update Example Walkthrough**. To learn the basics of the Bluetooth Mesh Device Firmware Update specification, see **AN1319: Bluetooth® Mesh Device Firmware Update**. + +## Testing the Bluetooth Mesh - SoC Light Application + +To test the application, do the following: + +1. Make sure a bootloader is installed. See the Troubleshooting section. +2. Build and flash the **Bluetooth Mesh - SoC Light** example to your device. +3. Reset the device by pressing and releasing the reset button on the mainboard while pressing BTN0. The message "Factory reset" should appear on the LCD screen. +4. Provision the device in one of three ways: + + - NCP Host provisioner examples, see for example an SDK folder `app/btmesh/example_host/btmesh_host_provisioner` or [github](https://github.com/SiliconLabs/bluetooth_mesh_stack_features/tree/master/provisioning) + + - NCP Commander with NCP target device, see [Bluetooth NCP Commander guide](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-tools-bluetooth-ncp-commander) or [AN1259: Using the v3.x Silicon Labs Bluetooth Stack in Network Co-Processor Mode](https://www.silabs.com/documents/public/application-notes/an1259-bt-ncp-mode-sdk-v3x.pdf) + + - For Mobile Phone use, see the [QSG176: Bluetooth Mesh SDK v2.x Quick-Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) for more information how to download and use the Silicon Labs Bluetooth Mesh application. + + Mobile Phone provisioning is illustrated in the following figure. + +![Bluetooth Mesh start screen](readme_img6.png) + +5. Open the app and choose the Provision Browser and tap **Scan**. + +![Bluetooth Mesh Provision Browser](readme_img2.png) + +6. Now you should find your device advertising as "light node" (iOS) or "Unknown" (Android). Tap **PROVISION**. + +![Bluetooth Mesh Provisioning Device](readme_img3.png) + +7. Configure the device as **Light CTL Server** and select the correct group to which the messages will be published (Demo group). If you want to test the Bluetooth Mesh Generic OnOff Model, the Light Lightness Model, the Scene Model or some other Mesh Model, then select the respective client instead. You can use only one at a time in our mobile application. + +![Bluetooth Mesh Device Configuration](readme_img4.png) + +8. Use the slider to set the lightness of the WSKT + radio board LED. + +![Lightness slider](readme_img5.png) + +9. The next step is to add a switch or several switches into your network, if it has not already been done. This is required to fully test the whole system, for example the friendship and other features. You can then control the light example by pressing the buttons in the **Bluetooth Mesh - SoC Switch** and **Bluetooth Mesh - SoC Switch Low Power** examples. Read the applicable example project documentation to learn more. + +For more information on the example, see [AN1299: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Lighting Demonstration](https://www.silabs.com/documents/public/application-notes/an1299-understanding-bluetooth-mesh-lighting-demo-sdk-2x.pdf). + +## Troubleshooting + +Note that Software Example-based projects do not include a bootloader. However, they are configured to expect a bootloader to be present on the device. To install a bootloader, from the Launcher perspective's EXAMPLE PROJECTS & DEMOS tab either build and flash one of the bootloader examples or run one of the precompiled demos. Precompiled demos flash a bootloader as well as the application image. + +- To flash an OTA DFU-capable bootloader to the device, flash the **Bluetooth Mesh - SoC Switch** demo. +- To flash a UART DFU-capable bootloader to the device, flash the **Bluetooth Mesh - NCP Empty** demo. +- For other bootloader types, create your own bootloader project and flash it to the device before flashing your application. +- When you flash your application image to the device, use the *.hex* or *.s37* output file. Flashing *.bin* files may overwrite (erase) the bootloader. +- On Series 1 devices (EFR32xG1x), both first stage and second stage bootloaders have to be flashed. This can be done at once by flashing the *-combined.s37* file found in the bootloader project after building the project. +- For more information, see [UG103.6: Bootloader Fundamentals](https://www.silabs.com/documents/public/user-guides/ug103-06-fundamentals-bootloading.pdf) and [UG489: Silicon Labs Gecko Bootloader User's Guide for GSDK 4.0 and Higher](https://cn.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf). + +Before programming the radio board mounted on the mainboard, make sure the power supply switch the AEM position (right side) as shown below. + +![Radio board power supply switch](readme_img0.png) + +## Resources + +[Bluetooth Documentation](https://docs.silabs.com/bluetooth/latest/) + +[Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf) + +[QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) + +[AN1315: Bluetooth Mesh Device Power Consumption Measurements](https://www.silabs.com/documents/public/application-notes/an1315-bluetooth-mesh-power-consumption-measurements.pdf) + +[AN1316: Bluetooth Mesh Parameter Tuning for Network Optimization](https://www.silabs.com/documents/public/application-notes/an1316-bluetooth-mesh-network-optimization.pdf) + +[AN1317: Using Network Analyzer with Bluetooth Low Energy ® and Mesh](https://www.silabs.com/documents/public/application-notes/an1317-network-analyzer-with-bluetooth-mesh-le.pdf) + +[AN1318: IV Update in a Bluetooth Mesh Network](https://www.silabs.com/documents/public/application-notes/an1318-bluetooth-mesh-iv-update.pdf) + +[AN1299: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Lighting Demonstration](https://www.silabs.com/documents/public/application-notes/an1299-understanding-bluetooth-mesh-lighting-demo-sdk-2x.pdf) + +[UG295: Silicon Labs Bluetooth Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) + +[UG472: Silicon Labs Bluetooth ® C Application Developer's Guide for SDK v3.x](https://www.silabs.com/documents/public/user-guides/ug434-bluetooth-c-soc-dev-guide-sdk-v3x.pdf) + +[Bluetooth Training](https://www.silabs.com/support/training/bluetooth) + +## Report Bugs & Get Support + +You are always encouraged and welcome to report any issues you found to us via [Silicon Labs Community](https://www.silabs.com/community). diff --git a/app/btmesh/documentation/example/btmesh_soc_light/readme_img0.png b/app/btmesh/documentation/example/btmesh_soc_light/readme_img0.png new file mode 100644 index 00000000000..dbbd2a8004d --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_light/readme_img0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e4d4f007d6c9dcc867f438330840be39c1be546c24123f9fab5d9533d079380 +size 44396 diff --git a/app/btmesh/documentation/example/btmesh_soc_light/readme_img1.png b/app/btmesh/documentation/example/btmesh_soc_light/readme_img1.png new file mode 100644 index 00000000000..b831d364647 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_light/readme_img1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:505897083581faa63f49e52335f6ad9082e223d97f55511618e46515b6760a8c +size 218107 diff --git a/app/btmesh/documentation/example/btmesh_soc_light/readme_img2.png b/app/btmesh/documentation/example/btmesh_soc_light/readme_img2.png new file mode 100644 index 00000000000..793cdb2a789 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_light/readme_img2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6610c222cd5f1ab6249a528a06b00d5e5e9a4252d9a55f281d82e17a2200be9f +size 46788 diff --git a/app/btmesh/documentation/example/btmesh_soc_light/readme_img3.png b/app/btmesh/documentation/example/btmesh_soc_light/readme_img3.png new file mode 100644 index 00000000000..af53dcced62 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_light/readme_img3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf2e1c7fe0a631d4c88c1149312ed46d5cd1f2a8128465d05cef36904fe52765 +size 38376 diff --git a/app/btmesh/documentation/example/btmesh_soc_light/readme_img4.png b/app/btmesh/documentation/example/btmesh_soc_light/readme_img4.png new file mode 100644 index 00000000000..0a778a9c859 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_light/readme_img4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c756c58da084b7730d59d7ef49561d3eee4c18b723abe6be2b72344e62226b00 +size 107850 diff --git a/app/btmesh/documentation/example/btmesh_soc_light/readme_img5.png b/app/btmesh/documentation/example/btmesh_soc_light/readme_img5.png new file mode 100644 index 00000000000..b05eaa9c995 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_light/readme_img5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40db53827fe033b87bb21b2fd75c451d2cc1d5ea836bf942a3d7f466aa15c11c +size 113198 diff --git a/app/btmesh/documentation/example/btmesh_soc_light/readme_img6.png b/app/btmesh/documentation/example/btmesh_soc_light/readme_img6.png new file mode 100644 index 00000000000..a440aa10f13 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_light/readme_img6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:caeada541b8c5f2b4e0d9a6b8150f343cccdc927686b3badc8a63b5484aced14 +size 72163 diff --git a/app/btmesh/documentation/example/btmesh_soc_light/readme_img7.png b/app/btmesh/documentation/example/btmesh_soc_light/readme_img7.png new file mode 100644 index 00000000000..306b222bafe --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_light/readme_img7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80524dce752c26916bea11955915b2724c8e2aa3274303e31f7e2ebecff6ad71 +size 30046 diff --git a/app/btmesh/documentation/example/btmesh_soc_light/readme_img8.png b/app/btmesh/documentation/example/btmesh_soc_light/readme_img8.png new file mode 100644 index 00000000000..e5a59f35411 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_light/readme_img8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b282be723e57e517b24d9ad34bcb864bd69c7785b4d89985761d54d8d503527f +size 151591 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme.md b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme.md new file mode 100644 index 00000000000..ef1f5088923 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme.md @@ -0,0 +1,135 @@ +# Bluetooth Mesh - SoC Sensor Client + +The **Bluetooth Mesh - SoC Sensor Client** example is a working example application that you can use as a template for Bluetooth Mesh Sensor Client applications. + +The example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (for example **Bluetooth Mesh - SoC Sensor Server**). The current status is displayed on the LCD (if one is present on the mainboard) and also sent to UART. CLI commands may substitute for button presses if the mainboard has only one button available. This example requires one of the Internal Storage Bootloader (single image) variants depending on device memory. + +![Bluetooth Mesh sensor system - Client](readme_img7.png) + +## Getting Started + +To learn Bluetooth mesh technology basics, see [Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf). + +To get started with Bluetooth Mesh and Simplicity Studio, see [QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf). + +The term SoC stands for "System on Chip", meaning that this is a standalone application that runs on the EFR32/BGM and does not require any external MCU or other active components to operate. + +**Bluetooth Mesh - SoC Sensor Client** example collects sensor data from the sensor server. If it is used together with the soc-btmesh-sensor-server example then it will display occupancy (people count) sensor data, temperature data and illuminance (on Thunderboard Sense 2). + +To add or remove features from the example, follow this process: + +- Add model and feature components to your project +- Optionally configure your Mesh node through the "Bluetooth Mesh Configurator" + +![Bluetooth Mesh Configurator](readme_img1.png) + +To learn more about programming an SoC application, see [UG472: Silicon Labs Bluetooth ® Mesh Configurator User's guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug472-bluetooth-mesh-v2x-node-configuration-users-guide.pdf). + +- Some components are configurable, and can be customized using the Component Editor + +![Bluetooth Mesh Components](readme_img8.png) + +- Respond to the events raised by the Bluetooth stack +- Implement additional application logic + +[UG295: Silicon Labs Bluetooth ® Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) gives code-level information on the stack and the common pitfalls to avoid. + +## Device Firmware Update + +Device Firmware Update (DFU) is a new feature introduced in the Bluetooth Mesh Model specification v1.1 that provides a standard way to update device firmware over a Bluetooth mesh network. The example has the Updating node functionality enabled by default that is fulfilled by installing the Firmware Update and BLOB Transfer model components: + +- Firmware Update Server +- BLOB Transfer Server + +![Bluetooth Mesh Firmware Update Components](readme_img9.png) + +![Bluetooth Mesh Transfer Components](readme_img10.png) + +For more information on the DFU examples, see **AN1370: Bluetooth® Mesh Device Firmware Update Example Walkthrough**. To learn the basics of the Bluetooth Mesh Device Firmware Update specification, see **AN1319: Bluetooth® Mesh Device Firmware Update**. + +## Testing the Bluetooth Mesh - SoC Sensor Client Application + +To test the application, do the following: + +1. Make sure a bootloader is installed. See Troubleshooting section. +2. Build and flash the **Bluetooth Mesh - SoC Sensor Client** example to your device. +3. Reset the device by pressing and releasing the reset button on the mainboard while pressing BTN0. The message "Factory reset" should appear on the LCD screen. +4. Provision the device in one of three ways: + + - NCP Host provisioner examples, see for example an SDK folder `app/btmesh/example_host/btmesh_host_provisioner` or [github](https://github.com/SiliconLabs/bluetooth_mesh_stack_features/tree/master/provisioning) + + - NCP Commander with NCP target device, see [Bluetooth NCP Commander guide](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-tools-bluetooth-ncp-commander) or [AN1259: Using the v3.x Silicon Labs Bluetooth Stack in Network Co-Processor Mode](https://www.silabs.com/documents/public/application-notes/an1259-bt-ncp-mode-sdk-v3x.pdf) + + - For Mobile Phone use, see the [QSG176: Bluetooth Mesh SDK v2.x Quick-Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) for more information how to download and use the Silicon Labs Bluetooth Mesh application. + + Mobile Phone provisioning is illustrated in the following figure. + +![Bluetooth Mesh start screen](readme_img6.png) + +5. Open the app and choose the Provision Browser and tap **Scan**. The device sending unprovisioned beacons should appear, tap **PROVISION**: + +![Bluetooth Mesh Provision Browser](readme_img2.png) + +6. Start provisioning using the "Continue" button: + +![Bluetooth Mesh Provisioning Device](readme_img3.png) + +7. Configure the device as "Sensor Client" and select the correct group to which the messages will subscribe (Demo group). + +![Bluetooth Mesh Device Configuration](readme_img4.png) + +8. Once the node is provisioned and correctly configured, it is ready to function in your demo network. + +![Sensor client with Proxy connection](readme_img5.png) + +9. The next step is to add a sensor server or several into your network, if it has not already been done. This is required to fully test the whole system. Read the applicable example project documentation to learn more. + +For more information on the example, see [AN1300: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Sensor Model Demonstration](https://www.silabs.com/documents/public/application-notes/an1300-understanding-bluetooth-mesh-sensor-model-demo-sdk-2x.pdf). + +The button presses in this example: + +- Short presses update the registered devices +- Long press of PB0 changes the current property + +## Troubleshooting + +Note that Software Example-based projects do not include a bootloader. However, they are configured to expect a bootloader to be present on the device. To install a bootloader, from the Launcher perspective's EXAMPLE PROJECTS & DEMOS tab either build and flash one of the bootloader examples or run one of the precompiled demos. Precompiled demos flash a bootloader as well as the application image. + +- To flash an OTA DFU-capable bootloader to the device, flash the **Bluetooth Mesh - SoC Switch** demo. +- To flash a UART DFU-capable bootloader to the device, flash the **Bluetooth Mesh - NCP Empty** demo. +- For other bootloader types, create your own bootloader project and flash it to the device before flashing your application. +- When you flash your application image to the device, use the *.hex* or *.s37* output file. Flashing *.bin* files may overwrite (erase) the bootloader. +- On Series 1 devices (EFR32xG1x), both first stage and second stage bootloaders have to be flashed. This can be done at once by flashing the *-combined.s37* file found in the bootloader project after building the project. +- For more information, see [UG103.6: Bootloader Fundamentals](https://www.silabs.com/documents/public/user-guides/ug103-06-fundamentals-bootloading.pdf) and [UG489: Silicon Labs Gecko Bootloader User's Guide for GSDK 4.0 and Higher](https://cn.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf). + +Before programming the radio board mounted on the mainboard, make sure the power supply switch the AEM position (right side) as shown below. + +![Radio board power supply switch](readme_img0.png) + +## Resources + +[Bluetooth Documentation](https://docs.silabs.com/bluetooth/latest/) + +[Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf) + +[QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) + +[AN1315: Bluetooth Mesh Device Power Consumption Measurements](https://www.silabs.com/documents/public/application-notes/an1315-bluetooth-mesh-power-consumption-measurements.pdf) + +[AN1316: Bluetooth Mesh Parameter Tuning for Network Optimization](https://www.silabs.com/documents/public/application-notes/an1316-bluetooth-mesh-network-optimization.pdf) + +[AN1317: Using Network Analyzer with Bluetooth Low Energy ® and Mesh](https://www.silabs.com/documents/public/application-notes/an1317-network-analyzer-with-bluetooth-mesh-le.pdf) + +[AN1318: IV Update in a Bluetooth Mesh Network](https://www.silabs.com/documents/public/application-notes/an1318-bluetooth-mesh-iv-update.pdf) + +[AN1300: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Sensor Model Demonstration](https://www.silabs.com/documents/public/application-notes/an1300-understanding-bluetooth-mesh-sensor-model-demo-sdk-2x.pdf) + +[UG295: Silicon Labs Bluetooth Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) + +[UG472: Silicon Labs Bluetooth ® C Application Developer's Guide for SDK v3.x](https://www.silabs.com/documents/public/user-guides/ug434-bluetooth-c-soc-dev-guide-sdk-v3x.pdf) + +[Bluetooth Training](https://www.silabs.com/support/training/bluetooth) + +## Report Bugs & Get Support + +You are always encouraged and welcome to report any issues you found to us via [Silicon Labs Community](https://www.silabs.com/community). diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img0.png b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img0.png new file mode 100644 index 00000000000..dbbd2a8004d --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e4d4f007d6c9dcc867f438330840be39c1be546c24123f9fab5d9533d079380 +size 44396 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img1.png b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img1.png new file mode 100644 index 00000000000..43a2117d3ef --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de236cafd024a770ebc50273120bcdee1c21d498cf836cce7455a02119d25069 +size 107834 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img2.png b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img2.png new file mode 100644 index 00000000000..f0c4c6a2a84 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23d461e93d92f1628564809f0e839a782a29d4f9ad155b537907e81bb370c4a6 +size 49938 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img3.png b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img3.png new file mode 100644 index 00000000000..1bc554f8056 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a64850ea8e9ab978cfcddfbfdc9272686dea6e74f30e31e34cd940ed79219f4 +size 38850 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img4.png b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img4.png new file mode 100644 index 00000000000..83fef5de1d1 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59e23eb7151655d5eaadf710dd82acf81071e0aec64639c4345520579736bc1a +size 60091 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img5.png b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img5.png new file mode 100644 index 00000000000..0dac52f62d5 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f328622666442bfb5ae7dc9da81694204faad3804b03556606b0ec51c32283e +size 33622 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img6.png b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img6.png new file mode 100644 index 00000000000..5929967e273 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:abed18c7df9dc1b68fd9f9196c9404124d516a20f2ce1ad344e26df3b8cbb87e +size 72163 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img7.png b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img7.png new file mode 100644 index 00000000000..b2c7ff050e1 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1e6cd19fc932f90f9115b61a8561f60649bd9477f8d43ca92bce1170f5768c6 +size 29293 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img8.png b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img8.png new file mode 100644 index 00000000000..e5a59f35411 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_client/readme_img8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b282be723e57e517b24d9ad34bcb864bd69c7785b4d89985761d54d8d503527f +size 151591 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme.md b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme.md new file mode 100644 index 00000000000..fead57efae4 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme.md @@ -0,0 +1,135 @@ +# Bluetooth Mesh - SoC Sensor Server + +The **Bluetooth Mesh - SoC Sensor Server** example is a working example application that you can use as a template for Bluetooth Mesh Sensor Server applications. + +The example demonstrates the Bluetooth Mesh **Sensor Server Model** and **Sensor Setup Server Model**. It measures temperature and people count (and also illuminance with some parts such as *Thunderboard Sense 2* and *Thunderboard EFR32BG22*) and sends the measurement data to a remote device (for example, **Bluetooth Mesh - SoC Sensor Client**). The current status is displayed on the LCD (if one is present on the mainboard) and also sent to UART. CLI commands may substitute for button presses if the mainboard has only one button available. This example requires one of the Internal Storage Bootloader (single image) variants, depending on device memory. + +![Bluetooth Mesh sensor system - Server](readme_img7.png) + +## Getting Started + +To learn Bluetooth mesh technology basics, see [Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf). + +To get started with Bluetooth Mesh and Simplicity Studio, see [QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf). + +The term SoC stands for "System on Chip", meaning that this is a standalone application that runs on the EFR32/BGM and does not require any external MCU or other active components to operate. + +**Bluetooth Mesh - SoC Sensor Server** example makes various sensor measurements and forwards them to another node implementing the sensor client. This example measures and displays occupancy (people count) sensor data, temperature data and illuminance (on Thunderboard Sense 2). + +To add or remove features from the example, follow this process: + +- Add model and feature components to your project +- Optionally configure your Mesh node through the "Bluetooth Mesh Configurator" + +![Bluetooth Mesh Configurator](readme_img1.png) + +To learn more about programming an SoC application, see [UG472: Silicon Labs Bluetooth ® Mesh Configurator User's guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug472-bluetooth-mesh-v2x-node-configuration-users-guide.pdf). + +- Some components are configurable, and can be customized using the Component Editor + +![Bluetooth Mesh Components](readme_img8.png) + +- Respond to the events raised by the Bluetooth stack +- Implement additional application logic + +[UG295: Silicon Labs Bluetooth ® Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) gives code-level information on the stack and the common pitfalls to avoid. + +## Device Firmware Update + +Device Firmware Update (DFU) is a new feature introduced in the Bluetooth Mesh Model specification v1.1 that provides a standard way to update device firmware over a Bluetooth mesh network. The example has the Updating node functionality enabled by default that is fulfilled by installing the Firmware Update and BLOB Transfer model components: + +- Firmware Update Server +- BLOB Transfer Server + +![Bluetooth Mesh Firmware Update Components](readme_img9.png) + +![Bluetooth Mesh Transfer Components](readme_img10.png) + +For more information on the DFU examples, see **AN1370: Bluetooth® Mesh Device Firmware Update Example Walkthrough**. To learn the basics of the Bluetooth Mesh Device Firmware Update specification, see **AN1319: Bluetooth® Mesh Device Firmware Update**. + +## Testing the Bluetooth Mesh - SoC Light Application + +To test the application, do the following: + +1. Make sure a bootloader is installed. See the Troubleshooting section. +2. Build and flash the **Bluetooth Mesh - SoC Sensor Server** example to your device. +3. Reset the device by pressing and releasing the reset button on the mainboard while pressing BTN0. The message "Factory reset" should appear on the LCD screen. +4. Provision the device in one of three ways: + + - NCP Host provisioner examples, see for example an SDK folder `app/btmesh/example_host/btmesh_host_provisioner` or [github](https://github.com/SiliconLabs/bluetooth_mesh_stack_features/tree/master/provisioning) + + - NCP Commander with NCP target device, see [Bluetooth NCP Commander guide](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-tools-bluetooth-ncp-commander) or [AN1259: Using the v3.x Silicon Labs Bluetooth Stack in Network Co-Processor Mode](https://www.silabs.com/documents/public/application-notes/an1259-bt-ncp-mode-sdk-v3x.pdf) + + - For Mobile Phone use, see the [QSG176: Bluetooth Mesh SDK v2.x Quick-Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) for more information how to download and use the Silicon Labs Bluetooth Mesh application. + + Mobile Phone provisioning is illustrated in the following figure. + +![Bluetooth Mesh start screen](readme_img6.png) + +5. Open the app and choose the Provision Browser and tap **Scan**. The device sending unprovisioned beacons should appear, tap **PROVISION**: + +![Bluetooth Mesh Provision Browser](readme_img2.png) + +6. Start provisioning using the "Continue" button: + +![Bluetooth Mesh Provisioning Device](readme_img3.png) + +7. Configure the device as "Sensor Server" (inheriting the server setup model) and select the correct group to which the messages will subscribe (Demo group). + +![Bluetooth Mesh Device Configuration](readme_img4.png) + +8. Once the node is provisioned and correctly configured, it is ready to function in your demo network. + +![Sensor server with Proxy connection](readme_img5.png) + +9. The next step is to add a sensor client or several into your network, if it has not already been done. This is required to fully test the whole system. Read the applicable example project documentation to learn more. + +For more information on the example, see [AN1300: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Sensor Model Demonstration](https://www.silabs.com/documents/public/application-notes/an1300-understanding-bluetooth-mesh-sensor-model-demo-sdk-2x.pdf). + +The button presses in this example: + +- Short presses will control the People Count value +- Medium press will control the People Count value (only one button devices) + +## Troubleshooting + +Note that Software Example-based projects do not include a bootloader. However, they are configured to expect a bootloader to be present on the device. To install a bootloader, from the Launcher perspective's EXAMPLE PROJECTS & DEMOS tab either build and flash one of the bootloader examples or run one of the precompiled demos. Precompiled demos flash a bootloader as well as the application image. + +- To flash an OTA DFU-capable bootloader to the device, flash the **Bluetooth Mesh - SoC Switch** demo. +- To flash a UART DFU-capable bootloader to the device, flash the **Bluetooth Mesh - NCP Empty** demo. +- For other bootloader types, create your own bootloader project and flash it to the device before flashing your application. +- When you flash your application image to the device, use the *.hex* or *.s37* output file. Flashing *.bin* files may overwrite (erase) the bootloader. +- On Series 1 devices (EFR32xG1x), both first stage and second stage bootloaders have to be flashed. This can be done at once by flashing the *-combined.s37* file found in the bootloader project after building the project. +- For more information, see [UG103.6: Bootloader Fundamentals](https://www.silabs.com/documents/public/user-guides/ug103-06-fundamentals-bootloading.pdf) and [UG489: Silicon Labs Gecko Bootloader User's Guide for GSDK 4.0 and Higher](https://cn.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf). + +Before programming the radio board mounted on the mainboard, make sure the power supply switch the AEM position (right side) as shown below. + +![Radio board power supply switch](readme_img0.png) + +## Resources + +[Bluetooth Documentation](https://docs.silabs.com/bluetooth/latest/) + +[Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf) + +[QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) + +[AN1315: Bluetooth Mesh Device Power Consumption Measurements](https://www.silabs.com/documents/public/application-notes/an1315-bluetooth-mesh-power-consumption-measurements.pdf) + +[AN1316: Bluetooth Mesh Parameter Tuning for Network Optimization](https://www.silabs.com/documents/public/application-notes/an1316-bluetooth-mesh-network-optimization.pdf) + +[AN1317: Using Network Analyzer with Bluetooth Low Energy ® and Mesh](https://www.silabs.com/documents/public/application-notes/an1317-network-analyzer-with-bluetooth-mesh-le.pdf) + +[AN1318: IV Update in a Bluetooth Mesh Network](https://www.silabs.com/documents/public/application-notes/an1318-bluetooth-mesh-iv-update.pdf) + +[AN1300: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Sensor Model Demonstration](https://www.silabs.com/documents/public/application-notes/an1300-understanding-bluetooth-mesh-sensor-model-demo-sdk-2x.pdf) + +[UG295: Silicon Labs Bluetooth Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) + +[UG472: Silicon Labs Bluetooth ® C Application Developer's Guide for SDK v3.x](https://www.silabs.com/documents/public/user-guides/ug434-bluetooth-c-soc-dev-guide-sdk-v3x.pdf) + +[Bluetooth Training](https://www.silabs.com/support/training/bluetooth) + +## Report Bugs & Get Support + +You are always encouraged and welcome to report any issues you found to us via [Silicon Labs Community](https://www.silabs.com/community). diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img0.png b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img0.png new file mode 100644 index 00000000000..dbbd2a8004d --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e4d4f007d6c9dcc867f438330840be39c1be546c24123f9fab5d9533d079380 +size 44396 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img1.png b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img1.png new file mode 100644 index 00000000000..1222d8eb375 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5615f7aad578943ad73fda4562c3c8cb1c96b96fde1e60e7cd02016d1424df9c +size 118106 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img2.png b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img2.png new file mode 100644 index 00000000000..dd3bb391c30 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0da54a6efa851d8021e95a118626fc131edfcaeabb54b3a3381505da133e1db9 +size 49586 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img3.png b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img3.png new file mode 100644 index 00000000000..eddf3d7b223 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed0611aa171a5b53b8350ba8dcce95871bee1bec7e0d5d78e064da018d6b097a +size 38374 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img4.png b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img4.png new file mode 100644 index 00000000000..267c37b48c7 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40ffe3c5d627b08cdbfa9718eb42c0460366252ab428ee3caf78c54b7734496f +size 59866 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img5.png b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img5.png new file mode 100644 index 00000000000..0e0a2e90595 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84778f92acb017e5cca7bed9b33fa172f7ba58a279f2104d7d63e4954d82e042 +size 33188 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img6.png b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img6.png new file mode 100644 index 00000000000..f8aa7823ba4 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:39ba2e7221f872b428084e5d371197d5e0a3ee94983815b0fed652a79e4727ae +size 72163 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img7.png b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img7.png new file mode 100644 index 00000000000..3722340e396 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fe3c257deeede51ba6487d6f0fc2f079e5529de77ca91851a2c709a5ca27084 +size 29231 diff --git a/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img8.png b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img8.png new file mode 100644 index 00000000000..e5a59f35411 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_sensor_server/readme_img8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b282be723e57e517b24d9ad34bcb864bd69c7785b4d89985761d54d8d503527f +size 151591 diff --git a/app/btmesh/documentation/example/btmesh_soc_switch/readme.md b/app/btmesh/documentation/example/btmesh_soc_switch/readme.md new file mode 100644 index 00000000000..9951c5a1bd5 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_switch/readme.md @@ -0,0 +1,151 @@ +# Bluetooth Mesh - SoC Switch + +The **Bluetooth Mesh - SoC Switch** example is a working example application that you can use as a template for Bluetooth Mesh Switch applications. + +The example is an out-of-the-box Software Demo optimized for user experience where the device acts as a switch. Button presses on the mainboard or CLI commands can control the state, lightness, and color temperature of the LEDs as well as scenes on a remote device (for example **Bluetooth Mesh - SoC Light**). The example also acts as a Low Power Node and tries to establish friendship. The status messages are displayed on the LCD (if one is present on the mainboard) and also sent to UART. The example is based on the Bluetooth Mesh Generic On/Off Client Model, the Light Lightness Client Model, the Light CTL Client Model, and the Scene Client Model. This example requires one of the Internal Storage Bootloader (single image) variants, depending on device memory. + +In typical cases use the **Bluetooth Mesh - SoC Switch** example, as it is easier to get feedback about the state and operations. But if you want to have the optimal power consumption, use the **Bluetooth Mesh - SoC Switch Low Power** example, which does not have LCD, CLI or logging. Use that especially for the power consumption measurements. + +The switch requires a friend node to function properly. + +![Bluetooth Mesh lighting system - Switch](readme_img7.png) + +## Getting Started + +To learn Bluetooth mesh technology basics, see [Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf). + +To get started with Bluetooth Mesh and Simplicity Studio, see [QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf). + +The term SoC stands for "System on Chip", meaning that this is a standalone application that runs on the EFR32/BGM and does not require any external MCU or other active components to operate. + +This is an example of a Low Power Node-enabled Bluetooth Mesh switch application. Once the node is provisioned and a light server (light node) subscribes to the client, the two buttons of the mainboard are used to publish the messages that will change the light lightness on the server. + +We can use the buttons many other ways using the different models of this example: + +- **Generic OnOff Client** model can turn the light on and off or toggle +- **Generic Level Client** model can control the light brightness +- **Light Lightness Client** model can control the light Lightness +- **Light CTL Client** model can control light Lightness and Color Temperature (Delta UV only virtually) +- **Scene Server** model allows customer to recall the light settings + +A friendship with a light node has to be established for the switch node to start the sleep/poll cycles. + +To add or remove features from the example, follow this process: + +- Add model and feature components to your project +- Optionally configure the Mesh node through the "Bluetooth Mesh Configurator" + +![Bluetooth Mesh Configurator](readme_img1.png) + +To learn more about programming an SoC application, see [UG472: Silicon Labs Bluetooth ® Mesh Configurator User's guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug472-bluetooth-mesh-v2x-node-configuration-users-guide.pdf). + +- Some components are configurable, and can be customized using the Component Editor + +![Bluetooth Mesh Components](readme_img8.png) + +- Respond to the events raised by the Bluetooth stack +- Implement additional application logic + +[UG295: Silicon Labs Bluetooth ® Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) gives code-level information on the stack and the common pitfalls to avoid. + +## Device Firmware Update + +Device Firmware Update (DFU) is a new feature introduced in the Bluetooth Mesh Model specification v1.1 that provides a standard way to update device firmware over a Bluetooth mesh network. The example has the Updating node functionality enabled by default that is fulfilled by installing the Firmware Update and BLOB Transfer model components: + +- Firmware Update Server +- BLOB Transfer Server + +![Bluetooth Mesh Firmware Update Components](readme_img9.png) + +![Bluetooth Mesh Transfer Components](readme_img10.png) + +For more information on the DFU examples, see **AN1370: Bluetooth® Mesh Device Firmware Update Example Walkthrough**. To learn the basics of the Bluetooth Mesh Device Firmware Update specification, see **AN1319: Bluetooth® Mesh Device Firmware Update**. + +## Testing the Bluetooth Mesh - SoC Switch Application + +To test the application, do the following: + +1. Make sure a bootloader is installed. See the Troubleshooting section. +2. Build and flash the **Bluetooth Mesh - SoC Switch** example to the device. +3. Reset the device by pressing and releasing the reset button on the mainboard while pressing BTN0. The message "Factory reset" should appear on the LCD. +4. Provision the device in one of three ways: + + - NCP Host provisioner examples, see for example an SDK folder `app/btmesh/example_host/btmesh_host_provisioner` or [github](https://github.com/SiliconLabs/bluetooth_mesh_stack_features/tree/master/provisioning) + + - NCP Commander with NCP target device, see [Bluetooth NCP Commander guide](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-tools-bluetooth-ncp-commander) or [AN1259: Using the v3.x Silicon Labs Bluetooth Stack in Network Co-Processor Mode](https://www.silabs.com/documents/public/application-notes/an1259-bt-ncp-mode-sdk-v3x.pdf) + + - For Mobile Phone use, see the [QSG176: Bluetooth Mesh SDK v2.x Quick-Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) for more information how to download and use the Silicon Labs Bluetooth Mesh application. + + Mobile Phone provisioning is illustrated in the following figure. + +![Bluetooth Mesh start screen](readme_img6.png) + +5. Open the app, choose the Provision Browser, and tap **Scan**. + +![Bluetooth Mesh Provision Browser](readme_img2.png) + +6. Tap **PROVISION** and continue provisioning. + +![Bluetooth Mesh Provisioning Device](readme_img3.png) + +7. Select the right "Group" and then tap the "Functionality" menu. + +![Bluetooth Mesh Device Configuration](readme_img4.png) + +8. Configure the device as **Light CTL Client**. If you want to test the Bluetooth Mesh Generic OnOff Model, the Light Lightness Model, the Scene Model or some other Mesh Model, then select the respective client instead. You can use only one at a time in our mobile application. With the **SoC Light HSL** demo use the Light Lightness Client. + +![Bluetooth Mesh Functionalities](readme_img5.png) + +9. The next step is to add a light or several lights into your network, if it has not already been done. This is required to fully test the whole system, for example the friendship and other features. You can then control the **Bluetooth Mesh - SoC Light** and **Bluetooth Mesh - SoC HSL Light** examples by pressing the buttons on the device. Read the applicable example project documentation to learn more. + +For more information on the example, see [AN1299: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Lighting Demonstration](https://www.silabs.com/documents/public/application-notes/an1299-understanding-bluetooth-mesh-lighting-demo-sdk-2x.pdf). + +The button presses in this example: + +- Short press controls the Lightness (**Light Lightness Client** and **Light CTL Client** models) +- Medium press controls the Color Temperature (**Light CTL Client** model) +- Long press controls the light On/Off (all Lighting models) +- Very long press recalls the scenes (only when **Scene Server** model is configured) + +## Troubleshooting + +Note that Software Example-based projects do not include a bootloader. However, they are configured to expect a bootloader to be present on the device. To install a bootloader, from the Launcher perspective's EXAMPLE PROJECTS & DEMOS tab either build and flash one of the bootloader examples or run one of the precompiled demos. Precompiled demos flash a bootloader as well as the application image. + +- To flash an OTA DFU-capable bootloader to the device, flash the **Bluetooth Mesh - SoC Switch** demo. +- To flash a UART DFU-capable bootloader to the device, flash the **Bluetooth Mesh - NCP Empty** demo. +- For other bootloader types, create your own bootloader project and flash it to the device before flashing your application. +- When you flash your application image to the device, use the *.hex* or *.s37* output file. Flashing *.bin* files may overwrite (erase) the bootloader. +- On Series 1 devices (EFR32xG1x), both first stage and second stage bootloaders have to be flashed. This can be done at once by flashing the *-combined.s37* file found in the bootloader project after building the project. +- For more information, see [UG103.6: Bootloader Fundamentals](https://www.silabs.com/documents/public/user-guides/ug103-06-fundamentals-bootloading.pdf) and [UG489: Silicon Labs Gecko Bootloader User's Guide for GSDK 4.0 and Higher](https://cn.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf). + +Before programming the radio board mounted on the mainboard, make sure the power supply switch the AEM position (right side) as shown below. + +![Radio board power supply switch](readme_img0.png) + +## Resources + +[Bluetooth Documentation](https://docs.silabs.com/bluetooth/latest/) + +[Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf) + +[QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) + +[AN1315: Bluetooth Mesh Device Power Consumption Measurements](https://www.silabs.com/documents/public/application-notes/an1315-bluetooth-mesh-power-consumption-measurements.pdf) + +[AN1316: Bluetooth Mesh Parameter Tuning for Network Optimization](https://www.silabs.com/documents/public/application-notes/an1316-bluetooth-mesh-network-optimization.pdf) + +[AN1317: Using Network Analyzer with Bluetooth Low Energy ® and Mesh](https://www.silabs.com/documents/public/application-notes/an1317-network-analyzer-with-bluetooth-mesh-le.pdf) + +[AN1318: IV Update in a Bluetooth Mesh Network](https://www.silabs.com/documents/public/application-notes/an1318-bluetooth-mesh-iv-update.pdf) + +[AN1299: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Lighting Demonstration](https://www.silabs.com/documents/public/application-notes/an1299-understanding-bluetooth-mesh-lighting-demo-sdk-2x.pdf) + +[UG295: Silicon Labs Bluetooth Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) + +[UG472: Silicon Labs Bluetooth ® C Application Developer's Guide for SDK v3.x](https://www.silabs.com/documents/public/user-guides/ug434-bluetooth-c-soc-dev-guide-sdk-v3x.pdf) + +[Bluetooth Training](https://www.silabs.com/support/training/bluetooth) + +## Report Bugs & Get Support + +You are always encouraged and welcome to report any issues you found to us via [Silicon Labs Community](https://www.silabs.com/community). diff --git a/app/btmesh/documentation/example/btmesh_soc_switch/readme_img0.png b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img0.png new file mode 100644 index 00000000000..dbbd2a8004d --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e4d4f007d6c9dcc867f438330840be39c1be546c24123f9fab5d9533d079380 +size 44396 diff --git a/app/btmesh/documentation/example/btmesh_soc_switch/readme_img1.png b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img1.png new file mode 100644 index 00000000000..261e291cb2c --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a344cec77461232745b343122cd73c221fcd3f93cd68c5ae336ff604ae6017 +size 80273 diff --git a/app/btmesh/documentation/example/btmesh_soc_switch/readme_img2.png b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img2.png new file mode 100644 index 00000000000..b02cddffe84 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d969bae544c45fd7db299cabb198b41703d979dfa690b28f36d70718fd45468 +size 46741 diff --git a/app/btmesh/documentation/example/btmesh_soc_switch/readme_img3.png b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img3.png new file mode 100644 index 00000000000..e3f63fbc6a8 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img3.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:df496b6fda29a6569b99abbf39ec5c77a14dda270b7e05caf40346574a8f32f4 +size 38809 diff --git a/app/btmesh/documentation/example/btmesh_soc_switch/readme_img4.png b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img4.png new file mode 100644 index 00000000000..a199e6bff4a --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0531df916784ee3cb002ad4e48f99c7638ab259dd735e232a38e7211f4e0c0b8 +size 85186 diff --git a/app/btmesh/documentation/example/btmesh_soc_switch/readme_img5.png b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img5.png new file mode 100644 index 00000000000..64f83365668 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09a15ee575ba9aa1e5ddab37dd8b60274edcbf39738597f8f2008402ba0dd384 +size 38921 diff --git a/app/btmesh/documentation/example/btmesh_soc_switch/readme_img6.png b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img6.png new file mode 100644 index 00000000000..c74655c816f --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8723399efb17cd12e791be025475f0b75fa02b02881261499d87e57a8eefe6a0 +size 72163 diff --git a/app/btmesh/documentation/example/btmesh_soc_switch/readme_img7.png b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img7.png new file mode 100644 index 00000000000..6727271244a --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img7.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72a30d1f96dd79e42f039617a7efe0f78e7e7f44df4cf97b2db03d09594d5884 +size 30090 diff --git a/app/btmesh/documentation/example/btmesh_soc_switch/readme_img8.png b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img8.png new file mode 100644 index 00000000000..e5a59f35411 --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_switch/readme_img8.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b282be723e57e517b24d9ad34bcb864bd69c7785b4d89985761d54d8d503527f +size 151591 diff --git a/app/btmesh/documentation/example/btmesh_soc_switch/readme_low_power.md b/app/btmesh/documentation/example/btmesh_soc_switch/readme_low_power.md new file mode 100644 index 00000000000..122191a5cba --- /dev/null +++ b/app/btmesh/documentation/example/btmesh_soc_switch/readme_low_power.md @@ -0,0 +1,149 @@ +# Bluetooth Mesh - SoC Switch Low Power + +The **Bluetooth Mesh - SoC Switch Low Power** example is a working example application that you can use as a template for Bluetooth Mesh Switch Low Power applications. + +The example is an out-of-the-box Software Demo optimized for low current consumption where the device acts as a switch. It has disabled CLI, logging, and LCD. Button presses on the mainboard can control the state, lightness, and color temperature of the LEDs as well as scenes on a remote device (Bluetooth Mesh - SoC Light). The example also acts as an Low Power Node and tries to establish friendship. The example is based on the Bluetooth Mesh Generic On/Off Client Model, the Light Lightness Client Model, the Light CTL Client Model, and the Scene Client Model. This example requires one of the Internal Storage Bootloader (single image) variants, depending on device memory. + +In typical cases use the **Bluetooth Mesh - SoC Switch** example, as it is easier to get feedback about the state and operations. But if you want to have the optimal power consumption, use the **Bluetooth Mesh - SoC Switch Low Power** example, which does not have LCD, CLI or logging. Use that especially for the power consumption measurements. + +The switch requires a friend node to function properly. +![Bluetooth Mesh lighting system - Switch](readme_img7.png) + +## Getting Started + +To learn Bluetooth mesh technology basics, see [Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf). + +To get started with Bluetooth Mesh and Simplicity Studio, see [QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf). + +The term SoC stands for "System on Chip", meaning that this is a standalone application that runs on the EFR32/BGM and does not require any external MCU or other active components to operate. + +This is an example of a Low Power Node-enabled energy efficient Bluetooth Mesh switch application. The example removes LCD display and logging features. For more information on how to measure power consumption, see [AN1315: Bluetooth Mesh Device Power Consumption Measurements](https://www.silabs.com/documents/public/application-notes/an1315-bluetooth-mesh-power-consumption-measurements.pdf). Once the node is provisioned and a light server (light node) subscribes to the client, the two buttons of the mainboard are used to publish the messages that will change the light lightness on the server. + +We can use the buttons many other ways using the different models of this example: + +- **Generic OnOff Client** model can turn the light on and off or toggle +- **Generic Level Client** model can control the light brightness +- **Light Lightness Client** model can control the light Lightness +- **Light CTL Client** model can control light Lightness and Color Temperature (Delta UV only virtually) +- **Scene Server** model allows customer to recall the light settings + +A friendship with a light node has to be established for the switch node to start the sleep/poll cycles. + +To add or remove features from the example, follow this process: + +- Add model and feature components to your project +- Optionally configure the Mesh node through the "Bluetooth Mesh Configurator" + +![Bluetooth Mesh Configurator](readme_img1.png) + +To learn more about programming an SoC application, see [UG472: Silicon Labs Bluetooth ® Mesh Configurator User's guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug472-bluetooth-mesh-v2x-node-configuration-users-guide.pdf). + +- Some components are configurable, and can be customized using the Component Editor + +![Bluetooth Mesh Components](readme_img8.png) + +- Respond to the events raised by the Bluetooth stack +- Implement additional application logic + +[UG295: Silicon Labs Bluetooth Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) gives code-level information on the stack and the common pitfalls to avoid. + +## Device Firmware Update + +Device Firmware Update (DFU) is a new feature introduced in the Bluetooth Mesh Model specification v1.1 that provides a standard way to update device firmware over a Bluetooth mesh network. The example has the Updating node functionality enabled by default that is fulfilled by installing the Firmware Update and BLOB Transfer model components: + +- Firmware Update Server +- BLOB Transfer Server + +![Bluetooth Mesh Firmware Update Components](readme_img9.png) + +![Bluetooth Mesh Transfer Components](readme_img10.png) + +For more information on the DFU examples, see **AN1370: Bluetooth® Mesh Device Firmware Update Example Walkthrough**. To learn the basics of the Bluetooth Mesh Device Firmware Update specification, see **AN1319: Bluetooth® Mesh Device Firmware Update**. + +## Testing the Bluetooth Mesh - SoC Switch Low Power Application + +To test the application, do the following: + +1. Make sure a bootloader is installed. See the Troubleshooting section. +2. Build and flash the **Bluetooth Mesh - SoC Switch Low Power** example to the device. +3. Reset the device by pressing and releasing the reset button on the mainboard while pressing BTN0. The message "Factory reset" should appear on the LCD screen. +4. Provision the device in one of three ways: + + - NCP Host provisioner examples, see for example an SDK folder `app/btmesh/example_host/btmesh_host_provisioner` or [github](https://github.com/SiliconLabs/bluetooth_mesh_stack_features/tree/master/provisioning) + + - NCP Commander with NCP target device, see [Bluetooth NCP Commander guide](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-tools-bluetooth-ncp-commander) or [AN1259: Using the v3.x Silicon Labs Bluetooth Stack in Network Co-Processor Mode](https://www.silabs.com/documents/public/application-notes/an1259-bt-ncp-mode-sdk-v3x.pdf) + + - For Mobile Phone use, see the [QSG176: Bluetooth Mesh SDK v2.x Quick-Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) for more information how to download and use the Silicon Labs Bluetooth Mesh application. + + Mobile Phone provisioning is illustrated in the following figure. + +![Bluetooth Mesh start screen](readme_img6.png) + +5. Open the app, choose the Provision Browser, and tap **Scan**. + +![Bluetooth Mesh Provision Browser](readme_img2.png) + +6. Tap **PROVISION** and continue provisioning. + +![Bluetooth Mesh Provisioning Device](readme_img3.png) + +7. Select the right "Group" and then tap the "Functionality" menu. + +![Bluetooth Mesh Device Configuration](readme_img4.png) + +8. Configure the device as **Light CTL Client**. If you want to test the Bluetooth Mesh Generic OnOff Model, the Light Lightness Model, the Scene Model or some other Mesh Model, then select the respective client instead. You can use only one at a time in our mobile application. With the **SoC Light HSL** demo use the Light Lightness Client. + +![Bluetooth Mesh Functionalities](readme_img5.png) + +9. The next step is to add a light or several lights into your network, if it has not already been done. This is required to fully test the whole system, for example the friendship and other features. You can then control the **Bluetooth Mesh - SoC Light** and **Bluetooth Mesh - SoC HSL Light** examples by pressing the buttons on the device. Read the applicable example project documentation to learn more. +For more information on the example, see [AN1299: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Lighting Demonstration](https://www.silabs.com/documents/public/application-notes/an1299-understanding-bluetooth-mesh-lighting-demo-sdk-2x.pdf). + +The button presses in this example: + +- Short press controls the Lightness (**Light Lightness Client** and **Light CTL Client** models) +- Medium press controls the Color Temperature (**Light CTL Client** model) +- Long press controls the light On/Off (all Lighting models) +- Very long press recalls the scenes (only when **Scene Server** model is configured) + +## Troubleshooting + +Note that Software Example-based projects do not include a bootloader. However, they are configured to expect a bootloader to be present on the device. To install a bootloader, from the Launcher perspective's EXAMPLE PROJECTS & DEMOS tab either build and flash one of the bootloader examples or run one of the precompiled demos. Precompiled demos flash a bootloader as well as the application image. + +- To flash an OTA DFU-capable bootloader to the device, flash the **Bluetooth Mesh - SoC Switch** demo. +- To flash a UART DFU-capable bootloader to the device, flash the **Bluetooth Mesh - NCP Empty** demo. +- For other bootloader types, create your own bootloader project and flash it to the device before flashing your application. +- When you flash your application image to the device, use the *.hex* or *.s37* output file. Flashing *.bin* files may overwrite (erase) the bootloader. +- On Series 1 devices (EFR32xG1x), both first stage and second stage bootloaders have to be flashed. This can be done at once by flashing the *-combined.s37* file found in the bootloader project after building the project. +- For more information, see [UG103.6: Bootloader Fundamentals](https://www.silabs.com/documents/public/user-guides/ug103-06-fundamentals-bootloading.pdf) and [UG489: Silicon Labs Gecko Bootloader User's Guide for GSDK 4.0 and Higher](https://cn.silabs.com/documents/public/user-guides/ug489-gecko-bootloader-user-guide-gsdk-4.pdf). + +Before programming the radio board mounted on the mainboard, make sure the power supply switch the AEM position (right side) as shown below. + +![Radio board power supply switch](readme_img0.png) + +## Resources + +[Bluetooth Documentation](https://docs.silabs.com/bluetooth/latest/) + +[Bluetooth Mesh Network - An Introduction for Developers](https://www.bluetooth.com/wp-content/uploads/2019/03/Mesh-Technology-Overview.pdf) + +[QSG176: Bluetooth Mesh SDK v2.x Quick Start Guide](https://www.silabs.com/documents/public/quick-start-guides/qsg176-bluetooth-mesh-sdk-v2x-quick-start-guide.pdf) + +[AN1315: Bluetooth Mesh Device Power Consumption Measurements](https://www.silabs.com/documents/public/application-notes/an1315-bluetooth-mesh-power-consumption-measurements.pdf) + +[AN1316: Bluetooth Mesh Parameter Tuning for Network Optimization](https://www.silabs.com/documents/public/application-notes/an1316-bluetooth-mesh-network-optimization.pdf) + +[AN1317: Using Network Analyzer with Bluetooth Low Energy ® and Mesh](https://www.silabs.com/documents/public/application-notes/an1317-network-analyzer-with-bluetooth-mesh-le.pdf) + +[AN1318: IV Update in a Bluetooth Mesh Network](https://www.silabs.com/documents/public/application-notes/an1318-bluetooth-mesh-iv-update.pdf) + +[AN1299: Understanding the Silicon Labs Bluetooth Mesh SDK v2.x Lighting Demonstration](https://www.silabs.com/documents/public/application-notes/an1299-understanding-bluetooth-mesh-lighting-demo-sdk-2x.pdf) + +[UG295: Silicon Labs Bluetooth Mesh C Application Developer's Guide for SDK v2.x](https://www.silabs.com/documents/public/user-guides/ug295-bluetooth-mesh-dev-guide.pdf) + +[UG472: Silicon Labs Bluetooth ® C Application Developer's Guide for SDK v3.x](https://www.silabs.com/documents/public/user-guides/ug434-bluetooth-c-soc-dev-guide-sdk-v3x.pdf) + +[Bluetooth Training](https://www.silabs.com/support/training/bluetooth) + +## Report Bugs & Get Support + +You are always encouraged and welcome to report any issues you found to us via [Silicon Labs Community](https://www.silabs.com/community). diff --git a/app/btmesh/documentation/slBtMesh_docContent.xml b/app/btmesh/documentation/slBtMesh_docContent.xml new file mode 100644 index 00000000000..75a638b0bdf --- /dev/null +++ b/app/btmesh/documentation/slBtMesh_docContent.xml @@ -0,0 +1,336 @@ + + + + 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. + + + + + + + + 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. + + + + + + + + Explains how NVM3 can be used as non-volatile data storage in various protocol implementations. + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + How to program, provision, and configure the anti-tamper module on EFR32 Series 2 devices with Secure Vault. + + + + + + + + Describes how to configure the NCP target and how to program the NCP host when using the Bluetooth Stack in Network Co-Processor mode + + + + + + + + Reviews performing radio frequency physical layer evaluation with EFR32BG SoCs and BGM modules using the Direct Test Mode protocol in Bluetooth SDK v3.x. + + + + + + + + How to authenticate an EFR32 Series 2 device with Secure Vault, using secure device certificates and signatures. + + + + + + + + How to securely "wrap" keys in EFR32 Series 2 devices with Secure Vault, so they can be stored in non-volatile storage. + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + 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 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. + + + + + + + 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. + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + 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. + + + + + + + + Describes how and when to use Simplicity Commander's Command-Line Interface. + + + + + + + + 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. + + + + + + + + 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. + + + + + + + diff --git a/app/btmesh/example/btmesh_ncp_empty/app.c b/app/btmesh/example/btmesh_ncp_empty/app.c new file mode 100644 index 00000000000..9a09b9399df --- /dev/null +++ b/app/btmesh/example/btmesh_ncp_empty/app.c @@ -0,0 +1,131 @@ +/***************************************************************************//** + * @file + * @brief Core application logic. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "em_common.h" +#include "sl_ncp.h" +#include "sl_component_catalog.h" +#include "app.h" + +#ifdef SL_CATALOG_BTMESH_STACK_FW_UPDATE_SERVER_PRESENT +#include "ncp_btmesh_dfu.h" +#endif // SL_CATALOG_BTMESH_STACK_FW_UPDATE_SERVER_PRESENT + +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +SL_WEAK void app_init(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application init code here! // + // This is called once during start-up. // + ///////////////////////////////////////////////////////////////////////////// +} + +/**************************************************************************//** + * Application Process Action. + *****************************************************************************/ +SL_WEAK void app_process_action(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application code here! // + // This is called infinitely. // + // Do not call blocking functions from here! // + ///////////////////////////////////////////////////////////////////////////// +} + +/***************************************************************************//** + * User command (message_to_target) handler callback. + * + * Handles user defined commands received from NCP host. + * The user commands handled here are defined in app.h and are solely meant for + * example purposes. + * @param[in] data Data received from NCP host. + * + * @note This overrides the dummy weak implementation. + ******************************************************************************/ +void sl_ncp_user_cmd_message_to_target_cb(void *data) +{ + uint8array *cmd = (uint8array *)data; + user_cmd_t *user_cmd = (user_cmd_t *)cmd->data; + + switch (user_cmd->hdr) { + // ------------------------------- + // Example: user command 1. + case USER_CMD_1_ID: + ////////////////////////////////////////////// + // Add your user command handler code here! // + ////////////////////////////////////////////// + + // Send response to user command 1 to NCP host. + // Example: sending back received command. + sl_ncp_user_cmd_message_to_target_rsp(SL_STATUS_OK, cmd->len, cmd->data); + break; + + // ------------------------------- + // Example: user command 2. + case USER_CMD_2_ID: + ////////////////////////////////////////////// + // Add your user command handler code here! // + ////////////////////////////////////////////// + + // Send response to user command 2 to NCP host. + // Example: sending back received command. + sl_ncp_user_cmd_message_to_target_rsp(SL_STATUS_OK, cmd->len, cmd->data); + // Send user event too. + // Example: sending back received command as an event. + sl_ncp_user_evt_message_to_host(cmd->len, cmd->data); + break; + +#ifdef SL_CATALOG_BTMESH_STACK_FW_UPDATE_SERVER_PRESENT + case USER_CMD_FWID_ID: { + sl_status_t sc = sl_btmesh_ncp_dfu_set_fwid(user_cmd->data.cmd_fwid.idx, + user_cmd->data.cmd_fwid.len, + user_cmd->data.cmd_fwid.data); + sl_ncp_user_cmd_message_to_target_rsp(sc, cmd->len, cmd->data); + break; + } + + case USER_CMD_URI_ID: { + sl_status_t sc = sl_btmesh_ncp_dfu_set_uri(user_cmd->data.cmd_uri.idx, + user_cmd->data.cmd_uri.type, + user_cmd->data.cmd_uri.len, + user_cmd->data.cmd_uri.data); + sl_ncp_user_cmd_message_to_target_rsp(sc, cmd->len, cmd->data); + break; + } +#endif // SL_CATALOG_BTMESH_STACK_FW_UPDATE_SERVER_PRESENT + + // ------------------------------- + // Unknown user command. + default: + // Send error response to NCP host. + sl_ncp_user_cmd_message_to_target_rsp(SL_STATUS_FAIL, 0, NULL); + break; + } +} diff --git a/app/btmesh/example/btmesh_ncp_empty/app.h b/app/btmesh/example/btmesh_ncp_empty/app.h new file mode 100644 index 00000000000..320960178a4 --- /dev/null +++ b/app/btmesh/example/btmesh_ncp_empty/app.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief Application interface provided to main(). + ******************************************************************************* + * # 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 APP_H +#define APP_H + +#include "sl_bt_api.h" + +// Example: user command 1. +#define USER_CMD_1_ID 0x01 +typedef uint8_t cmd_1_t[16]; + +// Example: user command 2. +#define USER_CMD_2_ID 0x02 +typedef uint8_t cmd_2_t[8]; + +// User command to set FWID +#define USER_CMD_FWID_ID 'F' +typedef struct { + uint8_t idx; + uint8_t len; + uint8_t data[]; +} cmd_fwid_t; + +// User command to set FW URI +#define USER_CMD_URI_ID 'U' +typedef struct { + uint8_t type; + uint8_t idx; + uint8_t len; + uint8_t data[]; +} cmd_uri_t; + +PACKSTRUCT(struct user_cmd { + uint8_t hdr; + // Example: union of user commands. + union { + cmd_1_t cmd_1; + cmd_2_t cmd_2; + cmd_fwid_t cmd_fwid; + cmd_uri_t cmd_uri; + } data; +}); + +typedef struct user_cmd user_cmd_t; + +/**************************************************************************//** + * Application Init. + *****************************************************************************/ +void app_init(void); + +/**************************************************************************//** + * Application Process Action. + *****************************************************************************/ +void app_process_action(void); + +#endif // APP_H diff --git a/app/btmesh/example/btmesh_ncp_empty/btmesh_ncp_empty.slcp b/app/btmesh/example/btmesh_ncp_empty/btmesh_ncp_empty.slcp new file mode 100644 index 00000000000..bd8cd037bf8 --- /dev/null +++ b/app/btmesh/example/btmesh_ncp_empty/btmesh_ncp_empty.slcp @@ -0,0 +1,144 @@ +project_name: btmesh_ncp_empty +package: Btmesh +label: Bluetooth Mesh - NCP Empty +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["NCP"] + - name: "Project Difficulty" + value: ["Beginner"] + +component: + - id: app_assert + - id: gatt_configuration + - id: bluetooth_feature_connection + - id: bluetooth_feature_gatt + - id: bluetooth_feature_gatt_server + - id: bluetooth_feature_nvm + - id: bluetooth_feature_sm + - id: bootloader_interface + - id: btmesh_dcd_configuration + - id: btmesh_stack_config_client + - id: btmesh_stack_friend + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_generic_client + - id: btmesh_stack_generic_server + - id: btmesh_stack_health_client + - id: btmesh_stack_health_server + - id: btmesh_stack_lc_server + - id: btmesh_stack_lc_client + - id: btmesh_stack_lc_setup_server + - id: btmesh_stack_lpn + - id: btmesh_stack_migration + - id: btmesh_stack_node + - id: btmesh_stack_provisioner + - id: btmesh_stack_proxy + - id: btmesh_stack_proxy_server + - id: btmesh_stack_proxy_client + - id: btmesh_stack_relay + - id: btmesh_stack_scene_server + - id: btmesh_stack_scene_client + - id: btmesh_stack_scene_setup_server + - id: btmesh_stack_scheduler_server + - id: btmesh_stack_scheduler_client + - id: btmesh_stack_sensor_server + - id: btmesh_stack_sensor_client + - id: btmesh_stack_sensor_setup_server + - id: btmesh_stack_test + - id: btmesh_stack_time_server + - id: btmesh_stack_time_client + - id: btmesh_stack_vendor_model + - id: btmesh_proxy + - id: btmesh_stack + - id: mpu + - id: ncp + - id: rail_util_pti + - id: uartdrv_usart + instance: + - vcom + +source: + - path: app.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: "btmeshconf" + +readme: + - path: ../../documentation/example/btmesh_ncp_empty/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_ncp_empty/readme_img0.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img1.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img2.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img3.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img4.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img5.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img6.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img7.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img8.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img9.png + +configuration: + - name: NVM3_DEFAULT_NVM_SIZE + value: "0x8800" + - name: SL_BOARD_ENABLE_VCOM + value: 1 + - name: SL_BTMESH_CONFIG_MAX_FOUNDATION_CLIENT_CMDS + value: "4" + - name: SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICE_APPKEYS + value: "4" + - name: SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICE_NETKEYS + value: "4" + - name: SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICES + value: "16" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_HEAP_SIZE + value: "0xa000" + - name: SL_BT_CONFIG_BUFFER_SIZE + value: 3280 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1400" + - name: SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE + value: uartdrvFlowControlNone + condition: + - hardware_board_tb + +tag: + - hardware:device:sdid:89 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_ncp_empty/btmesh_ncp_empty_v1_1.slcp b/app/btmesh/example/btmesh_ncp_empty/btmesh_ncp_empty_v1_1.slcp new file mode 100644 index 00000000000..7f579f072f7 --- /dev/null +++ b/app/btmesh/example/btmesh_ncp_empty/btmesh_ncp_empty_v1_1.slcp @@ -0,0 +1,160 @@ +project_name: btmesh_ncp_empty_v1_1 +package: Btmesh +label: Bluetooth Mesh - NCP Empty v1.1 +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["NCP"] + - name: "Project Difficulty" + value: ["Beginner"] + +component: + - id: app_assert + - id: gatt_configuration + - id: bluetooth_feature_connection + - id: bluetooth_feature_gatt + - id: bluetooth_feature_gatt_server + - id: bluetooth_feature_nvm + - id: bluetooth_feature_sm + - id: bootloader_interface + - id: btmesh_dcd_configuration + - id: btmesh_stack_dfu_model + - id: btmesh_stack_config_client + - id: btmesh_stack_friend + - id: btmesh_stack_fw_distribution_client + - id: btmesh_stack_fw_distribution_server + - id: btmesh_stack_fw_list_cache + - id: btmesh_stack_fw_standalone_updater + - id: btmesh_stack_fw_update_client + - id: btmesh_stack_fw_update_server + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_generic_client + - id: btmesh_stack_generic_server + - id: btmesh_stack_health_client + - id: btmesh_stack_health_server + - id: btmesh_stack_lc_server + - id: btmesh_stack_lc_client + - id: btmesh_stack_lc_setup_server + - id: btmesh_stack_lpn + - id: btmesh_stack_mbt_client + - id: btmesh_stack_mbt_server + - id: btmesh_stack_migration + - id: btmesh_stack_node + - id: btmesh_stack_provisioner + - id: btmesh_stack_proxy + - id: btmesh_stack_proxy_server + - id: btmesh_stack_proxy_client + - id: btmesh_stack_relay + - id: btmesh_stack_remote_provisioning_client + - id: btmesh_stack_remote_provisioning_server + - id: btmesh_stack_sar_config_server + - id: btmesh_stack_scene_server + - id: btmesh_stack_scene_client + - id: btmesh_stack_scene_setup_server + - id: btmesh_stack_scheduler_server + - id: btmesh_stack_scheduler_client + - id: btmesh_stack_sensor_server + - id: btmesh_stack_sensor_client + - id: btmesh_stack_sensor_setup_server + - id: btmesh_stack_silabs_config_client + - id: btmesh_stack_silabs_config_server + - id: btmesh_stack_test + - id: btmesh_stack_time_server + - id: btmesh_stack_time_client + - id: btmesh_stack_vendor_model + - id: btmesh_stack_private_beacon_client + - id: btmesh_stack_private_beacon_server + - id: btmesh_proxy + - id: btmesh_stack + - id: mpu + - id: ncp + - id: ncp_btmesh_dfu + - id: rail_util_pti + - id: uartdrv_usart + instance: + - vcom + +source: + - path: app.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config_v1_1.btmeshconf + directory: "btmeshconf" + +readme: + - path: ../../documentation/example/btmesh_ncp_empty/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_ncp_empty/readme_img0.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img1.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img2.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img3.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img4.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img5.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img6.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img7.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img8.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img9.png + +configuration: + - name: SL_BOARD_ENABLE_VCOM + value: 1 + - name: SL_BTMESH_CONFIG_MAX_FOUNDATION_CLIENT_CMDS + value: "4" + - name: SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICE_APPKEYS + value: "4" + - name: SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICE_NETKEYS + value: "4" + - name: SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICES + value: "16" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_HEAP_SIZE + value: "0xa000" + - name: SL_BT_CONFIG_BUFFER_SIZE + value: 3280 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1200" + - name: SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE + value: uartdrvFlowControlNone + condition: + - hardware_board_tb + +tag: + - hardware:device:sdid:!205 + - hardware:device:sdid:!89 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_ncp_empty/btmesh_ncp_empty_xg22.slcp b/app/btmesh/example/btmesh_ncp_empty/btmesh_ncp_empty_xg22.slcp new file mode 100644 index 00000000000..5bf7f20859a --- /dev/null +++ b/app/btmesh/example/btmesh_ncp_empty/btmesh_ncp_empty_xg22.slcp @@ -0,0 +1,149 @@ +project_name: btmesh_ncp_empty +package: Btmesh +label: Bluetooth Mesh - NCP Empty +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["NCP"] + - name: "Project Difficulty" + value: ["Beginner"] + +component: + - id: app_assert + - id: gatt_configuration + - id: bluetooth_feature_connection + - id: bluetooth_feature_gatt + - id: bluetooth_feature_gatt_server + - id: bluetooth_feature_nvm + - id: bootloader_interface + - id: btmesh_dcd_configuration + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_generic_server + - id: btmesh_stack_health_server + - id: btmesh_stack_relay + - id: btmesh_proxy + - id: btmesh_stack + - id: mpu + - id: ncp + - id: rail_util_pti + - id: uartdrv_usart + instance: + - vcom + +source: + - path: app.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config_xg22.btmeshconf + directory: "btmeshconf" + +readme: + - path: ../../documentation/example/btmesh_ncp_empty/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_ncp_empty/readme_img0.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img1.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img2.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img3.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img4.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img5.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img6.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img7.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img8.png + - path: ../../documentation/example/btmesh_ncp_empty/readme_img9.png + +configuration: + - name: NVM3_DEFAULT_CACHE_SIZE + value: 80 + - name: SL_BOARD_ENABLE_VCOM + value: 1 + - name: SL_BTMESH_CONFIG_FRIEND_MAX_SUBS_LIST + value: "0" + - name: SL_BTMESH_CONFIG_FRIEND_MAX_TOTAL_CACHE + value: "0" + - name: SL_BTMESH_CONFIG_FRIEND_MAX_SINGLE_CACHE + value: "0" + - name: SL_BTMESH_CONFIG_MAX_APPKEYS + value: "2" + - name: SL_BTMESH_CONFIG_MAX_APP_BINDS + value: "2" + - name: SL_BTMESH_CONFIG_MAX_FOUNDATION_CLIENT_CMDS + value: "0" + - name: SL_BTMESH_CONFIG_MAX_FRIENDSHIPS + value: "0" + - name: SL_BTMESH_CONFIG_MAX_NETKEYS + value: "1" + - name: SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICES + value: "0" + - name: SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICE_APPKEYS + value: "0" + - name: SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICE_NETKEYS + value: "0" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_CONFIG_MAX_SEND_SEGS + value: "2" + - name: SL_BTMESH_CONFIG_MAX_SUBSCRIPTIONS + value: "2" + - name: SL_BTMESH_CONFIG_MAX_VAS + value: "0" + - name: SL_BTMESH_CONFIG_NET_CACHE_SIZE + value: "8" + - name: SL_BTMESH_CONFIG_RPL_SIZE + value: "16" + - name: SL_BT_CONFIG_MAX_CONNECTIONS + value: "2" + - name: SL_HEAP_SIZE + value: "0x3800" + - name: SL_BT_CONFIG_BUFFER_SIZE + value: 3280 + - name: SL_NCP_EVT_BUF_SIZE + value: "768" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_COM_TX_BUF_SIZE + value: "768" + - name: SL_STACK_SIZE + value: "0x1000" + - name: SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE + value: uartdrvFlowControlNone + condition: + - hardware_board_tb + +tag: + - hardware:device:sdid:205 + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme_xg22.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_ncp_empty/dcd_config.btmeshconf b/app/btmesh/example/btmesh_ncp_empty/dcd_config.btmeshconf new file mode 100644 index 00000000000..51ec7099059 --- /dev/null +++ b/app/btmesh/example/btmesh_ncp_empty/dcd_config.btmeshconf @@ -0,0 +1,94 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x0000", + "vid": "0x0420", + "elements": [ + { + "name": "Primary Element", + "location": "0x0000", + "sig_models": [ + { "mid": "0x0000", "name": "Configuration Server" }, + { "mid": "0x0001", "name": "Configuration Client" }, + { "mid": "0x0002", "name": "Health Server" }, + { "mid": "0x0003", "name": "Health Client" }, + { "mid": "0x1000", "name": "Generic OnOff Server" }, + { "mid": "0x1001", "name": "Generic OnOff Client" }, + { "mid": "0x1002", "name": "Generic Level Server" }, + { "mid": "0x1003", "name": "Generic Level Client" }, + { "mid": "0x1004", "name": "Generic Default Transition Time Server" }, + { "mid": "0x1005", "name": "Generic Default Transition Time Client" }, + { "mid": "0x1006", "name": "Generic Power OnOff Server" }, + { "mid": "0x1007", "name": "Generic Power OnOff Setup Server" }, + { "mid": "0x1008", "name": "Generic Power OnOff Client" }, + { "mid": "0x1009", "name": "Generic Power Level Server" }, + { "mid": "0x100a", "name": "Generic Power Level Setup Server" }, + { "mid": "0x100b", "name": "Generic Power Level Client" }, + { "mid": "0x100c", "name": "Generic Battery Server" }, + { "mid": "0x100d", "name": "Generic Battery Client" }, + { "mid": "0x100e", "name": "Generic Location Server" }, + { "mid": "0x100f", "name": "Generic Location Setup Server" }, + { "mid": "0x1010", "name": "Generic Location Client" }, + { "mid": "0x1011", "name": "Generic Admin Property Server" }, + { "mid": "0x1012", "name": "Generic Manufacturer Property Server" }, + { "mid": "0x1013", "name": "Generic User Property Server" }, + { "mid": "0x1014", "name": "Generic Client Property Server" }, + { "mid": "0x1015", "name": "Generic Property Client" }, + { "mid": "0x1100", "name": "Sensor Server" }, + { "mid": "0x1101", "name": "Sensor Setup Server" }, + { "mid": "0x1102", "name": "Sensor Client" }, + { "mid": "0x1200", "name": "Time Server" }, + { "mid": "0x1201", "name": "Time Setup Server" }, + { "mid": "0x1202", "name": "Time Client" }, + { "mid": "0x1203", "name": "Scene Server" }, + { "mid": "0x1204", "name": "Scene Setup Server" }, + { "mid": "0x1205", "name": "Scene Client" }, + { "mid": "0x1206", "name": "Scheduler Server" }, + { "mid": "0x1207", "name": "Scheduler Setup Server" }, + { "mid": "0x1208", "name": "Scheduler Client" }, + { "mid": "0x1300", "name": "Light Lightness Server" }, + { "mid": "0x1301", "name": "Light Lightness Setup Server" }, + { "mid": "0x1302", "name": "Light Lightness Client" }, + { "mid": "0x1303", "name": "Light CTL Server" }, + { "mid": "0x1304", "name": "Light CTL Setup Server" }, + { "mid": "0x1305", "name": "Light CTL Client" }, + { "mid": "0x1307", "name": "Light HSL Server" }, + { "mid": "0x1308", "name": "Light HSL Setup Server" }, + { "mid": "0x1309", "name": "Light HSL Client" }, + { "mid": "0x1311", "name": "Light LC Client" } + ], + "vendor_models": [] + }, + { + "name": "Secondary Element", + "location": "0x0000", + "sig_models": [ + { "mid": "0x1306", "name": "Light CTL Temperature Server" }, + { "mid": "0x1002", "name": "Generic Level Server" }, + { "mid": "0x130f", "name": "Light LC Server" }, + { "mid": "0x1310", "name": "Light LC Setup Server" }, + { "mid": "0x1000", "name": "Generic OnOff Server" } + ], + "vendor_models": [] + }, + { + "name": "HSL Hue", + "location": "0x0000", + "sig_models": [ + { "mid": "0x130a", "name": "Light HSL Hue Server" }, + { "mid": "0x1002", "name": "Generic Level Server" } + ], + "vendor_models": [] + }, + { + "name": "HSL Saturation", + "location": "0x0000", + "sig_models": [ + { "mid": "0x130b", "name": "Light HSL Saturation Server" }, + { "mid": "0x1002", "name": "Generic Level Server" } + ], + "vendor_models": [] + } + ] + } +} \ No newline at end of file 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 new file mode 100644 index 00000000000..5340844699b --- /dev/null +++ b/app/btmesh/example/btmesh_ncp_empty/dcd_config_v1_1.btmeshconf @@ -0,0 +1,107 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x0000", + "vid": "0x0420", + "elements": [ + { + "name": "Primary Element", + "location": "0x0000", + "sig_models": [ + { "mid": "0x0000", "name": "Configuration Server" }, + { "mid": "0x0001", "name": "Configuration Client" }, + { "mid": "0x0002", "name": "Health Server" }, + { "mid": "0x0003", "name": "Health Client" }, + { "mid": "0x0004", "name": "Remote Provisioning Server" }, + { "mid": "0x0005", "name": "Remote Provisioning Client" }, + { "mid": "0x1000", "name": "Generic OnOff Server" }, + { "mid": "0x1001", "name": "Generic OnOff Client" }, + { "mid": "0x1002", "name": "Generic Level Server" }, + { "mid": "0x1003", "name": "Generic Level Client" }, + { "mid": "0x1004", "name": "Generic Default Transition Time Server" }, + { "mid": "0x1005", "name": "Generic Default Transition Time Client" }, + { "mid": "0x1006", "name": "Generic Power OnOff Server" }, + { "mid": "0x1007", "name": "Generic Power OnOff Setup Server" }, + { "mid": "0x1008", "name": "Generic Power OnOff Client" }, + { "mid": "0x1009", "name": "Generic Power Level Server" }, + { "mid": "0x100a", "name": "Generic Power Level Setup Server" }, + { "mid": "0x100b", "name": "Generic Power Level Client" }, + { "mid": "0x100c", "name": "Generic Battery Server" }, + { "mid": "0x100d", "name": "Generic Battery Client" }, + { "mid": "0x100e", "name": "Generic Location Server" }, + { "mid": "0x100f", "name": "Generic Location Setup Server" }, + { "mid": "0x1010", "name": "Generic Location Client" }, + { "mid": "0x1011", "name": "Generic Admin Property Server" }, + { "mid": "0x1012", "name": "Generic Manufacturer Property Server" }, + { "mid": "0x1013", "name": "Generic User Property Server" }, + { "mid": "0x1014", "name": "Generic Client Property Server" }, + { "mid": "0x1015", "name": "Generic Property Client" }, + { "mid": "0x1100", "name": "Sensor Server" }, + { "mid": "0x1101", "name": "Sensor Setup Server" }, + { "mid": "0x1102", "name": "Sensor Client" }, + { "mid": "0x1200", "name": "Time Server" }, + { "mid": "0x1201", "name": "Time Setup Server" }, + { "mid": "0x1202", "name": "Time Client" }, + { "mid": "0x1203", "name": "Scene Server" }, + { "mid": "0x1204", "name": "Scene Setup Server" }, + { "mid": "0x1205", "name": "Scene Client" }, + { "mid": "0x1206", "name": "Scheduler Server" }, + { "mid": "0x1207", "name": "Scheduler Setup Server" }, + { "mid": "0x1208", "name": "Scheduler Client" }, + { "mid": "0x1300", "name": "Light Lightness Server" }, + { "mid": "0x1301", "name": "Light Lightness Setup Server" }, + { "mid": "0x1302", "name": "Light Lightness Client" }, + { "mid": "0x1303", "name": "Light CTL Server" }, + { "mid": "0x1304", "name": "Light CTL Setup Server" }, + { "mid": "0x1305", "name": "Light CTL Client" }, + { "mid": "0x1307", "name": "Light HSL Server" }, + { "mid": "0x1308", "name": "Light HSL Setup Server" }, + { "mid": "0x1309", "name": "Light HSL Client" }, + { "mid": "0x1311", "name": "Light LC Client" }, + { "mid": "0x000A", "name": "Private Beacon Server" }, + { "mid": "0x000B", "name": "Private Beacon Client" }, + { "mid": "0x1400", "name": "MBT Server" }, + { "mid": "0x1401", "name": "MBT Client" }, + { "mid": "0x1402", "name": "DFU Update Server" }, + { "mid": "0x1403", "name": "DFU Update Client" }, + { "mid": "0x1404", "name": "DFU Distribution Server" }, + { "mid": "0x1405", "name": "DFU Distribution Client" } + ], + "vendor_models": [ + { "cid": "0x02ff", "mid": "0xfffd", "name": "Silabs Configuration Server" }, + { "cid": "0x02ff", "mid": "0xfffc", "name": "Silabs Configuration Client" } + ] + }, + { + "name": "Secondary Element", + "location": "0x0000", + "sig_models": [ + { "mid": "0x1306", "name": "Light CTL Temperature Server" }, + { "mid": "0x1002", "name": "Generic Level Server" }, + { "mid": "0x130f", "name": "Light LC Server" }, + { "mid": "0x1310", "name": "Light LC Setup Server" }, + { "mid": "0x1000", "name": "Generic OnOff Server" } + ], + "vendor_models": [] + }, + { + "name": "HSL Hue", + "location": "0x0000", + "sig_models": [ + { "mid": "0x130a", "name": "Light HSL Hue Server" }, + { "mid": "0x1002", "name": "Generic Level Server" } + ], + "vendor_models": [] + }, + { + "name": "HSL Saturation", + "location": "0x0000", + "sig_models": [ + { "mid": "0x130b", "name": "Light HSL Saturation Server" }, + { "mid": "0x1002", "name": "Generic Level Server" } + ], + "vendor_models": [] + } + ] + } +} \ No newline at end of file diff --git a/app/btmesh/example/btmesh_ncp_empty/dcd_config_xg22.btmeshconf b/app/btmesh/example/btmesh_ncp_empty/dcd_config_xg22.btmeshconf new file mode 100644 index 00000000000..fc1dd9a23e8 --- /dev/null +++ b/app/btmesh/example/btmesh_ncp_empty/dcd_config_xg22.btmeshconf @@ -0,0 +1,19 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x0000", + "vid": "0x0420", + "elements": [ + { + "name": "Main", + "location": "0x0000", + "sig_models": [ + { "mid": "0x0000", "name": "Configuration Server" }, + { "mid": "0x0002", "name": "Health Server" }, + { "mid": "0x1000", "name": "Generic OnOff Server" } + ], + "vendor_models": [] + } + ] + } +} \ No newline at end of file diff --git a/app/btmesh/example/btmesh_ncp_empty/main.c b/app/btmesh/example/btmesh_ncp_empty/main.c new file mode 100644 index 00000000000..939ed36f5d9 --- /dev/null +++ b/app/btmesh/example/btmesh_ncp_empty/main.c @@ -0,0 +1,71 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif // SL_CATALOG_POWER_MANAGER_PRESENT +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} diff --git a/app/btmesh/example/btmesh_soc_csr_generator/app.c b/app/btmesh/example/btmesh_soc_csr_generator/app.c new file mode 100644 index 00000000000..0322ff53763 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_csr_generator/app.c @@ -0,0 +1,41 @@ +/***************************************************************************//** + * @file + * @brief Core application logic. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "app.h" +#include "sl_common.h" +#include "csr_generator.h" + +/**************************************************************************//** + * Application Init. + *****************************************************************************/ +SL_WEAK void app_init(void) +{ + csr_generate(); +} diff --git a/app/btmesh/example/btmesh_soc_csr_generator/app.h b/app/btmesh/example/btmesh_soc_csr_generator/app.h new file mode 100644 index 00000000000..cdeb6806c93 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_csr_generator/app.h @@ -0,0 +1,39 @@ +/***************************************************************************//** + * @file + * @brief Application interface provided to main(). + ******************************************************************************* + * # 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 APP_H +#define APP_H + +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +void app_init(void); + +#endif // APP_H diff --git a/app/btmesh/example/btmesh_soc_csr_generator/btmesh_soc_csr_generator.slcp b/app/btmesh/example/btmesh_soc_csr_generator/btmesh_soc_csr_generator.slcp new file mode 100644 index 00000000000..b60397165c2 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_csr_generator/btmesh_soc_csr_generator.slcp @@ -0,0 +1,107 @@ +project_name: btmesh_soc_csr_generator +package: Btmesh +label: Bluetooth Mesh - SoC CSR Generator +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bootloader_interface + - id: component_catalog + - id: device_init + - id: emlib_cmu + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: nvm3_lib + - id: nvm3_default + - id: psa_crypto + - id: psa_crypto_cmac + - id: psa_crypto_ccm + - id: psa_crypto_cipher_ecb + - id: psa_crypto_common + - id: psa_crypto_ecdh + - id: psa_crypto_ecdsa + - id: psa_crypto_ecc_secp256r1 + - id: psa_its + - id: psa_crypto_hmac + - id: psa_crypto_sha256 + - id: psa_crypto_sha1 + - id: sl_system + - id: sleeptimer + +requires: + - name: device_security_vault + - name: device_has_radio_2g4hz + +source: + - path: app.c + - path: main.c + - path: csr_generator.c + - path: der.c + +include: + - path: . + file_list: + - path: app.h + - path: csr_generator.h + - path: der.h + +config_file: + - path: config/csr_generator_config.h + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: CSR_GENERATOR_EC_KEY_ALGO + value: "PSA_ALG_ECDH" + - name: CSR_GENERATOR_EC_KEY_USAGE + value: "KEY_USAGE_DERIVE" + - name: CSR_GENERATOR_KEY_LOCATION + value: "PSA_KEY_LOCATION_SLI_SE_OPAQUE" + condition: + - "device_security_vault" + - name: CSR_GENERATOR_PROTOCOL + value: "CSR_PROTOCOL_BTMESH" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - iostream_usart + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_IOSTREAM_USART_VCOM_RESTRICT_ENERGY_MODE_TO_ALLOW_RECEPTION + value: "0" + - name: SL_PSA_ITS_SUPPORT_V2_DRIVER + value: "1" + - name: SL_PSA_ITS_SUPPORT_V3_DRIVER + value: "0" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "1" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1400" + +tag: + - hardware:device:flash:512 + - hardware:device:ram:32 + - prebuilt_demo \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_csr_generator/config/csr_generator_config.h b/app/btmesh/example/btmesh_soc_csr_generator/config/csr_generator_config.h new file mode 100644 index 00000000000..0ee0f91f09f --- /dev/null +++ b/app/btmesh/example/btmesh_soc_csr_generator/config/csr_generator_config.h @@ -0,0 +1,109 @@ +/***************************************************************************//** + * @file + * @brief SoC Certificate Generator Configuration + ******************************************************************************* + * # 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 CSR_GENERATOR_CONFIG_H +#define CSR_GENERATOR_CONFIG_H + +#define KEY_USAGE_SIGN_VERIFY PSA_KEY_USAGE_SIGN_MESSAGE | PSA_KEY_USAGE_VERIFY_MESSAGE +#define KEY_USAGE_DERIVE PSA_KEY_USAGE_DERIVE +#define SIGN_VERIFY_ALGO PSA_ALG_ECDSA(PSA_ALG_SHA_256) + +#define CSR_PROTOCOL_BLE 0 +#define CSR_PROTOCOL_BTMESH 1 + +// <<< Use Configuration Wizard in Context Menu >>> + +// Static Authentication Data +// Generating Static Authentication Data. +#define CSR_GENERATOR_CONFIG_GENERATE_STATIC_AUTH 0 + +// Device EC key +// Generating device EC key. +#define CSR_GENERATOR_CONFIG_GENERATE_EC_KEY 1 + +// Certificate on device +// Should the device hold the certificate or not. +#define CSR_GENERATOR_CONFIG_CERTIFICATE_ON_DEVICE 1 + +// Certificate Request RAM address +// Default: 0x2000FC00 +// The RAM address where the Certificate Request is stored. +#define CSR_GENERATOR_CSR_RAM_ADDRESS 0x2000FC00 + +// NVM3 key region to use +// Default: 0x60000 +// The NVM3 key region which will be used to save security keys and certificates. +#define CSR_GENERATOR_NVM3_REGION 0x60000 + +// Key location +// Vault +// Local Storage +// Default: PSA_KEY_LOCATION_LOCAL_STORAGE +#define CSR_GENERATOR_KEY_LOCATION PSA_KEY_LOCATION_LOCAL_STORAGE + +// Key Usage for EC key pair +// Use for message signing and verification +// Use for key derivation +// Default: KEY_USAGE_SIGN_VERIFY +#define CSR_GENERATOR_EC_KEY_USAGE KEY_USAGE_SIGN_VERIFY + +// Key algorithm +// Algorithm for sign and verification. +// Algorithm for key derivation. +// Default: SIGN_VERIFY_ALGO +#define CSR_GENERATOR_EC_KEY_ALGO SIGN_VERIFY_ALGO + +// Certification Subject Data + +// Country Identifier +// Country Identifier for CSR generation. +#define CSR_GENERATOR_SUBJECT_COUNTRY "FI" + +// State Identifier +// State Identifier for CSR generation. +#define CSR_GENERATOR_SUBJECT_STATE "Uusimaa" + +// Locality Identifier +// Locality Identifier for CSR generation. +#define CSR_GENERATOR_SUBJECT_LOCALITY "Espoo" + +// Organization Identifier +// Organization Unit Identifier for CSR generation. +#define CSR_GENERATOR_SUBJECT_ORGANIZATION "Silicon Labs" + +// Organization Unit Identifier +// Organization Unit Identifier for CSR generation. +#define CSR_GENERATOR_SUBJECT_ORGANIZATION_UNIT "Wireless" + +// + +// <<< end of configuration section >>> + +#endif // CSR_GENERATOR_CONFIG_H diff --git a/app/btmesh/example/btmesh_soc_csr_generator/csr_generator.c b/app/btmesh/example/btmesh_soc_csr_generator/csr_generator.c new file mode 100644 index 00000000000..b100d464971 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_csr_generator/csr_generator.c @@ -0,0 +1,702 @@ +/***************************************************************************//** + * @file + * @brief SoC Certificate Generator + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include + +#include "sl_status.h" +#include "sl_component_catalog.h" +#include "sl_system_init.h" + +#include "app_assert.h" +#include "app_log.h" + +#include "ecode.h" +#include "em_common.h" +#include "em_system.h" +#include "nvm3.h" + +#include "psa/crypto.h" +#include "psa/crypto_values.h" + +#include "csr_generator.h" +#include "csr_generator_config.h" + +#include "der.h" + +// ----------------------------------------------------------------------------- +// Defines + +#define POS_DEVICE_CERTIFICATE 0 +#define POS_DEVICE_EC_KEY 1 +#define POS_STATIC_AUTH_DATA 2 +#define NVM3_ID_CNT 3 + +#define DEVICE_CERTIFICATE_NVM3_START_KEY 1 + +#define CSR_NVM3 (nvm3_defaultHandle) + +#define CSR_NVM3_STATIC_AUTH_DATA 0x00fd +#define CSR_NVM3_DEVICE_EC_KEY 0x00fe + +#define CSR_NVM3_PRODDATA_CONTROL_BLOCK 0x0400 +#define CHAIN_LINK_DATA_LEN 192 + +#define DEVICE_EC_KEY_ID (CSR_GENERATOR_NVM3_REGION | CSR_NVM3_DEVICE_EC_KEY) +#define STATIC_AUTH_DATA_ID (CSR_GENERATOR_NVM3_REGION | CSR_NVM3_STATIC_AUTH_DATA) + +#define UUID_LEN (16) + +#define CRYPTO_EC_PRIVATE_KEY_LEN 32 + +#define PROVISIONING_CONTROL_BLOCK_INIT { 0, \ + CSR_NVM3_PRODDATA_CONTROL_BLOCK, \ + 0, \ + { 0, 0, 0 }, \ + CHAIN_LINK_DATA_LEN } + +// ----------------------------------------------------------------------------- +// Type definitions. + +// Provisioning record control block +typedef struct __attribute__((__packed__)) provisioning_record_control_block { + uint16_t header; + uint16_t next; + uint64_t bitmap; + uint8_t nvm3_id[NVM3_ID_CNT]; + uint16_t max_link_data_len; +} provisioning_record_control_block_t; + +typedef struct __attribute__((__packed__)) csr_output { + uint8_t completed; + uint8_t static_auth[CRYPTO_AUTH_256_LEN]; + uint16_t csr_len; /* DER is binary format so length is required */ + uint8_t csr[]; +} csr_output_t; + +typedef struct csr_config_t { + csr_output_t *output; // Position of RAM structure for communicating with PLT + bool generate_static_auth; // If True, generate 256-bit static authentication data + bool generate_key; // If True, generate device EC key and corresponding CSR + bool certificate_on_device; // If True, mark certificate presence on device in control block + uint8_t certificate_pos; // For recording certificate position in NVM3 to control block + size_t subject_name_field_count; // CSR subject name, excluding CN (see below) + const subject_name_field_t *subject_name_field_array; +} csr_config_t; + +// ----------------------------------------------------------------------------- +// Module variables. + +// UUID Namespace +static const uint8_t uid64_namespace[16] = { + 0x70, 0x0b, 0xaf, 0xdf, 0xd5, 0xec, 0xc3, 0x9b, + 0x37, 0x04, 0xa1, 0x2c, 0x07, 0x67, 0x86, 0x9c, +}; + +// Statich authentication data buffer +static uint8_t auth_data[CRYPTO_AUTH_256_LEN] = { 0 }; + +static char btmesh_common_name_uuid[37] = { 0 }; + +// CSR Subject name fields +static subject_name_field_t subject_name_fields[] = +{ + { + .name_len = 1, + .value_len = (sizeof(CSR_GENERATOR_SUBJECT_COUNTRY) - 1), + .name = "C", // shorthand for "countryName" + .value = CSR_GENERATOR_SUBJECT_COUNTRY + }, + { + .name_len = 2, + .value_len = (sizeof(CSR_GENERATOR_SUBJECT_STATE) - 1), + .name = "ST", // shorthand for "stateOrProvinceName" + .value = CSR_GENERATOR_SUBJECT_STATE + }, + { + .name_len = 1, + .value_len = (sizeof(CSR_GENERATOR_SUBJECT_LOCALITY) - 1), + .name = "L", // shorthand for "locality" + .value = CSR_GENERATOR_SUBJECT_LOCALITY + }, + { + .name_len = 1, + .value_len = (sizeof(CSR_GENERATOR_SUBJECT_ORGANIZATION) - 1), + .name = "O", // shorthand for "organization" + .value = CSR_GENERATOR_SUBJECT_ORGANIZATION + }, + { + .name_len = 2, + .value_len = (sizeof(CSR_GENERATOR_SUBJECT_ORGANIZATION_UNIT) - 1), + .name = "OU", // shorthand for "organizationalUnitName" + .value = CSR_GENERATOR_SUBJECT_ORGANIZATION_UNIT + }, + { + .name_len = 2, + .value_len = 36, // 128-bit Mesh device UUID as hexes and dashes + .name = "CN", // shorthand for "commonName" + .value = btmesh_common_name_uuid // To be filled in + }, +}; + +// CSR configuration +static volatile const csr_config_t config = { + .output = (csr_output_t *)((intptr_t)(CSR_GENERATOR_CSR_RAM_ADDRESS)), + .generate_static_auth = CSR_GENERATOR_CONFIG_GENERATE_STATIC_AUTH, + .generate_key = CSR_GENERATOR_CONFIG_GENERATE_EC_KEY, + .certificate_on_device = CSR_GENERATOR_CONFIG_CERTIFICATE_ON_DEVICE, + .certificate_pos = DEVICE_CERTIFICATE_NVM3_START_KEY, + .subject_name_field_count = 6, + .subject_name_field_array = subject_name_fields, +}; + +static provisioning_record_control_block_t control_block = PROVISIONING_CONTROL_BLOCK_INIT; + +// ----------------------------------------------------------------------------- +// Private function declarations. + +static sl_status_t error_code_to_sl_status(Ecode_t ecode); + +static void update_provisoning_control_block(int32_t index, + bool present, + uint8_t nvm3_id); + +static sl_status_t crypto_init(void); + +static sl_status_t create_static_auth_data(void); + +static sl_status_t create_device_ec_key(mbedtls_svc_key_id_t *ecdh_key_ptr, + mbedtls_svc_key_id_t *signing_key_ptr); + +static sl_status_t generate_uuid(uint8_t *const uuid); + +static sl_status_t read_raw_nvm3(uint32_t domain, + uint16_t tag, + uint8_t *buf, + size_t *len); +static sl_status_t write_raw_nvm3(uint32_t domain, + uint16_t tag, + uint8_t *buf, + size_t len); +static sl_status_t erase_all_nvm3(void); + +static sl_status_t read_provisioning_record_control_block(provisioning_record_control_block_t *block); +static sl_status_t write_provisioning_record_control_block(provisioning_record_control_block_t *block); + +// ----------------------------------------------------------------------------- +// Public function definitions. + +/**************************************************************************//** + * This function is generating the device EC key pair, the signing request + * for the device certificate, and other related data. + *****************************************************************************/ +void csr_generate(void) +{ + sl_status_t sc; + int mbedtls_ret = 0; + size_t auth_len = 0; + + mbedtls_svc_key_id_t signing_key_id = 0; + mbedtls_svc_key_id_t ecdh_key_id = 0; + + uint8_t uuid[UUID_LEN + 1] = { 0 }; + + app_log_info("Starting BT CSR creation" APP_LOG_NL); + + // Clear the RAM output area + memset(config.output, 0, sizeof(csr_config_t)); + + sc = crypto_init(); + app_assert_status(sc); + + // Check if provisioning record control block exists + sc = read_provisioning_record_control_block(&control_block); + switch (sc) { + case SL_STATUS_OK: + app_log_info("Provision record control block already exists." APP_LOG_NL); + if (config.certificate_on_device) { + // Check if certificate exists + uint16_t cert_nvm_tag = control_block.nvm3_id[POS_DEVICE_CERTIFICATE] + | CSR_NVM3_PRODDATA_CONTROL_BLOCK; + uint8_t data; + size_t len = sizeof(data); + sl_status_t sc = SL_STATUS_FAIL; + sc = read_raw_nvm3(CSR_GENERATOR_NVM3_REGION, + cert_nvm_tag, + &data, + &len); + if (sc == SL_STATUS_BT_PS_KEY_NOT_FOUND) { + app_log("Certificate not found, regenerating CSR" APP_LOG_NL); + sc = erase_all_nvm3(); + app_assert_status(sc); + break; + } + } + return; + case SL_STATUS_BT_PS_KEY_NOT_FOUND: + app_log_info("Provisioning record control block does not exist yet." APP_LOG_NL); + break; + default: + app_log_info("Unexpected error occured when reading the provisioning record: 0x%04lx" APP_LOG_NL, sc); + return; + } + + if (!config.generate_static_auth) { + app_log_info("Static authentication data is not requested." APP_LOG_NL); + } else { + // Create static authentication data + sc = create_static_auth_data(); + app_assert((sc == SL_STATUS_OK) || (sc == SL_STATUS_ALREADY_EXISTS), + "Failed to create static authentication data." APP_LOG_NL); + if (sc == SL_STATUS_OK) { + app_log_info("Static authentication data created successfully." APP_LOG_NL); + } else { + app_log_info("Static authentication data already exists." APP_LOG_NL); + sc = SL_STATUS_OK; + } + + update_provisoning_control_block(POS_STATIC_AUTH_DATA, true, 0); + + if (sc == SL_STATUS_OK) { + sc = export_static_auth_data(auth_data, sizeof(auth_data), &auth_len); + app_assert((sc == SL_STATUS_OK), "Failed to read static authentication data." APP_LOG_NL); + memcpy(config.output->static_auth, auth_data, auth_len); + app_log_info("Data: "); + app_log_hexdump_info(auth_data, CRYPTO_AUTH_256_LEN); + app_log_append(APP_LOG_NL); + } + } + + if (!config.generate_key) { + app_log_info("EC key creation is not requested." APP_LOG_NL); + } else { + // Generate EC key + + // Create persistent key for ECDH, temporary key for CSR signing + sc = create_device_ec_key(&ecdh_key_id, &signing_key_id); + app_assert((sc == SL_STATUS_OK) || (sc == SL_STATUS_ALREADY_EXISTS), + "Failed to create EC key ITS." APP_LOG_NL); + if (sc == SL_STATUS_ALREADY_EXISTS) { + app_log_info("Key already exists." APP_LOG_NL); + // If it already exists (and is not exportable) we can't create an equivalent + // signing key anymore + return; + } else { + app_log_info("EC key created successfully in ITS, signing key ID is %04X" APP_LOG_NL, + (int)signing_key_id); + } + + update_provisoning_control_block(POS_DEVICE_EC_KEY, true, 0); + + // Generate UUID + sc = generate_uuid(uuid); + app_assert((sc == SL_STATUS_OK), + "Failed to generate UUID, e: %d" APP_LOG_NL, (int)sc); + app_log_info("Generated UUID: "); + app_log_hexdump_info(uuid, UUID_LEN); + app_log_append(APP_LOG_NL); + + // Generate CSR + unsigned char csr_der_buf[1024] = { 0 }; + size_t csr_der_len = 0; + + /* Fill in CN to subject name */ + char* p = subject_name_fields[5].value; + + for (int i = 0; i < UUID_LEN; i++) { + if ((i > 3) && (i < 11) && ((i & 1) == 0)) { /* index 4, 6, 8, 10) */ + *p++ = '-'; + } + sprintf(p, "%02x", uuid[i]); + p += 2; + } + + mbedtls_ret = der_encode_csr(config.subject_name_field_array, + config.subject_name_field_count, + signing_key_id, + csr_der_buf, + sizeof(csr_der_buf), + &csr_der_len); + app_assert((mbedtls_ret == 0), "Failed to write CSR PEM file, error: %d" APP_LOG_NL, mbedtls_ret); + + app_log_info("CSR created successfully." APP_LOG_NL); + + // Set device certificate as present with the configured NVM3 ID. + update_provisoning_control_block(POS_DEVICE_CERTIFICATE, + config.certificate_on_device, + config.certificate_pos); + + config.output->csr_len = csr_der_len; + memcpy(config.output->csr, csr_der_buf, csr_der_len); + } + + // Store the provisioning record control block + sc = write_provisioning_record_control_block(&control_block); + app_assert((sc == SL_STATUS_OK), "Could not create the provisioning control block." APP_LOG_NL); + + app_log_info("Provisioning control block successfully created." APP_LOG_NL); + app_log_info("RAM output address 0x%08X" APP_LOG_NL, (int)config.output); + config.output->completed = 1; + + return; +} + +// ----------------------------------------------------------------------------- +// Private function definitions. + +static sl_status_t error_code_to_sl_status(Ecode_t ecode) +{ + sl_status_t sc = SL_STATUS_FAIL; + switch (ecode) { + case ECODE_OK: + sc = SL_STATUS_OK; + break; + case ECODE_NVM3_ERR_PARAMETER: + case ECODE_NVM3_ERR_KEY_INVALID: + sc = SL_STATUS_INVALID_PARAMETER; + break; + case ECODE_NVM3_ERR_KEY_NOT_FOUND: + sc = SL_STATUS_BT_PS_KEY_NOT_FOUND; + break; + case ECODE_NVM3_ERR_STORAGE_FULL: + sc = SL_STATUS_BT_PS_STORE_FULL; + break; + default: + sc = (sl_status_t) (SL_STATUS_BLUETOOTH_SPACE + 0x80 + (ecode & (~ECODE_EMDRV_NVM3_BASE))); + break; + } + return sc; +} + +sl_status_t psa_status_to_sl_status(psa_status_t sc) +{ + switch (sc) { + case PSA_SUCCESS: return SL_STATUS_OK; + case PSA_ERROR_GENERIC_ERROR: return SL_STATUS_FAIL; + case PSA_ERROR_NOT_SUPPORTED: return SL_STATUS_NOT_SUPPORTED; + case PSA_ERROR_NOT_PERMITTED: return SL_STATUS_PERMISSION; + case PSA_ERROR_BUFFER_TOO_SMALL: return SL_STATUS_WOULD_OVERFLOW; + case PSA_ERROR_ALREADY_EXISTS: return SL_STATUS_ALREADY_EXISTS; + case PSA_ERROR_DOES_NOT_EXIST: return SL_STATUS_FAIL; + case PSA_ERROR_BAD_STATE: return SL_STATUS_INVALID_STATE; + case PSA_ERROR_INVALID_ARGUMENT: return SL_STATUS_INVALID_PARAMETER; + case PSA_ERROR_INSUFFICIENT_MEMORY: return SL_STATUS_NO_MORE_RESOURCE; + case PSA_ERROR_INSUFFICIENT_STORAGE: return SL_STATUS_NO_MORE_RESOURCE; + case PSA_ERROR_COMMUNICATION_FAILURE: return SL_STATUS_IO; + case PSA_ERROR_STORAGE_FAILURE: return SL_STATUS_BT_HARDWARE; + case PSA_ERROR_HARDWARE_FAILURE: return SL_STATUS_BT_HARDWARE; + case PSA_ERROR_CORRUPTION_DETECTED: return SL_STATUS_BT_DATA_CORRUPTED; + case PSA_ERROR_INSUFFICIENT_ENTROPY: return SL_STATUS_BT_CRYPTO; + case PSA_ERROR_INVALID_SIGNATURE: return SL_STATUS_INVALID_SIGNATURE; + case PSA_ERROR_INVALID_PADDING: return SL_STATUS_BT_CRYPTO; + case PSA_ERROR_INSUFFICIENT_DATA: return SL_STATUS_BT_CRYPTO; + case PSA_ERROR_INVALID_HANDLE: return SL_STATUS_INVALID_HANDLE; + case PSA_ERROR_DATA_CORRUPT: return SL_STATUS_BT_DATA_CORRUPTED; + case PSA_ERROR_DATA_INVALID: return SL_STATUS_BT_CRYPTO; + default: return SL_STATUS_BT_UNSPECIFIED; + } +} + +static void update_provisoning_control_block(int32_t index, + bool present, + uint8_t nvm3_id) +{ + if (present) { + control_block.bitmap |= (1 << index); + control_block.nvm3_id[index] = nvm3_id; + } else { + control_block.bitmap &= ~(1 << index); + control_block.nvm3_id[index] = 0; + } +} + +static sl_status_t crypto_init(void) +{ + psa_status_t sc = PSA_ERROR_NOT_SUPPORTED; + if (SYSTEM_GetSecurityCapability() == securityCapabilityVault) { + sc = psa_crypto_init(); + } + + return psa_status_to_sl_status(sc); +} + +static sl_status_t create_static_auth_data(void) +{ + sl_status_t sc = SL_STATUS_OK; + + mbedtls_svc_key_id_t key = STATIC_AUTH_DATA_ID; + psa_algorithm_t alg = 0; + psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_lifetime_t lifetime = + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_DEFAULT, + CSR_GENERATOR_KEY_LOCATION); + + psa_set_key_algorithm(&attributes, alg); + psa_set_key_type(&attributes, PSA_KEY_TYPE_RAW_DATA); + psa_set_key_bits(&attributes, CRYPTO_AUTH_256_LEN * 8); + psa_set_key_usage_flags(&attributes, PSA_KEY_USAGE_EXPORT); + psa_set_key_id(&attributes, key); + psa_set_key_lifetime(&attributes, lifetime); + + sc = psa_status_to_sl_status(psa_generate_key(&attributes, + &key)); + + return sc; +} + +sl_status_t export_static_auth_data(uint8_t *data, size_t data_size, size_t *data_length) +{ + psa_status_t sc; + mbedtls_svc_key_id_t key = STATIC_AUTH_DATA_ID; + + sc = psa_export_key(key, data, data_size, data_length); + + return psa_status_to_sl_status(sc); +} + +static sl_status_t create_device_ec_key(mbedtls_svc_key_id_t *ecdh_key_ptr, + mbedtls_svc_key_id_t *signing_key_ptr) +{ + psa_key_lifetime_t persistent_wrapped = + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_DEFAULT, + CSR_GENERATOR_KEY_LOCATION); + psa_key_lifetime_t volatile_wrapped = + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_VOLATILE, + CSR_GENERATOR_KEY_LOCATION); + + sl_status_t sc = SL_STATUS_OK; + + mbedtls_svc_key_id_t ecdh_key = 0; + mbedtls_svc_key_id_t signing_key = 0; + + psa_key_attributes_t ecdh_attributes = PSA_KEY_ATTRIBUTES_INIT; + psa_key_attributes_t signing_attributes = PSA_KEY_ATTRIBUTES_INIT; + + if (!ecdh_key_ptr || !signing_key_ptr) { + return SL_STATUS_INVALID_PARAMETER; + } + + psa_set_key_algorithm(&signing_attributes, PSA_ALG_ECDSA(PSA_ALG_SHA_256)); + psa_set_key_type(&signing_attributes, PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1)); + psa_set_key_bits(&signing_attributes, CRYPTO_EC_PRIVATE_KEY_LEN * 8); + psa_set_key_usage_flags(&signing_attributes, PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_EXPORT); + psa_set_key_lifetime(&signing_attributes, volatile_wrapped); + + sc = psa_status_to_sl_status(psa_generate_key(&signing_attributes, &signing_key)); + if (sc != SL_STATUS_OK) { + return sc; + } + + psa_set_key_algorithm(&ecdh_attributes, CSR_GENERATOR_EC_KEY_ALGO); + psa_set_key_type(&ecdh_attributes, PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1)); + psa_set_key_bits(&ecdh_attributes, CRYPTO_EC_PRIVATE_KEY_LEN * 8); + psa_set_key_usage_flags(&ecdh_attributes, CSR_GENERATOR_EC_KEY_USAGE); + psa_set_key_lifetime(&ecdh_attributes, persistent_wrapped); + psa_set_key_id(&ecdh_attributes, DEVICE_EC_KEY_ID); + + uint8_t buf[32]; + size_t buf_len = sizeof(buf); + sc = psa_status_to_sl_status(psa_export_key(signing_key, buf, buf_len, &buf_len)); + if (sc != SL_STATUS_OK) { + return sc; + } + + sc = psa_status_to_sl_status(psa_import_key(&ecdh_attributes, buf, sizeof(buf), &ecdh_key)); + memset(buf, 0, sizeof(buf)); + if (sc != SL_STATUS_OK) { + return sc; + } + + *ecdh_key_ptr = ecdh_key; + ecdh_key = 0; + *signing_key_ptr = signing_key; + signing_key = 0; + + psa_destroy_key(ecdh_key); + psa_destroy_key(signing_key); + + return SL_STATUS_OK; +} + +sl_status_t export_public_key(mbedtls_svc_key_id_t key, uint8_t *data, size_t data_size, size_t *data_length) +{ + psa_status_t sc; + + if (!key || !data || !data_size || !data_length) { + return SL_STATUS_INVALID_PARAMETER; + } + + sc = psa_export_public_key(key, data, data_size, data_length); + + return psa_status_to_sl_status(sc); +} + +sl_status_t calculate_sha_1(const uint8_t *ptr, + size_t len, + uint8_t *hash) +{ + psa_hash_operation_t operation = { 0 }; + psa_algorithm_t alg = PSA_ALG_SHA_1; + size_t out_len = 0; + uint8_t result[CRYPTO_SHA_1_LEN]; + + sl_status_t sc = SL_STATUS_OK; + + if (!ptr || !len || !hash) { + return SL_STATUS_INVALID_PARAMETER; + } + + sc = psa_status_to_sl_status(psa_hash_setup(&operation, alg)); + if (sc != SL_STATUS_OK) { + return sc; + } + + sc = psa_status_to_sl_status(psa_hash_update(&operation, ptr, len)); + if (sc != SL_STATUS_OK) { + return sc; + } + + sc = psa_status_to_sl_status(psa_hash_finish(&operation, result, CRYPTO_SHA_1_LEN, &out_len)); + if (sc != SL_STATUS_OK) { + return sc; + } + + memcpy(hash, result, CRYPTO_SHA_1_LEN); + + return sc; +} + +static sl_status_t generate_uuid(uint8_t *const uuid) +{ + sl_status_t sc = SL_STATUS_OK; + + if (!uuid) { + return SL_STATUS_INVALID_PARAMETER; + } + + // UUID generation procedure shall follow the standard UUID format as defined in RFC4122 + // https://www.ietf.org/rfc/rfc4122.txt + + uint64_t uid = SYSTEM_GetUnique(); + uint8_t tmp[24], digest[CRYPTO_SHA_1_LEN]; + memcpy(tmp, uid64_namespace, 16); + tmp[16] = (uid >> 56) & 0xff; + tmp[17] = (uid >> 48) & 0xff; + tmp[18] = (uid >> 40) & 0xff; + tmp[19] = (uid >> 32) & 0xff; + tmp[20] = (uid >> 24) & 0xff; + tmp[21] = (uid >> 16) & 0xff; + tmp[22] = (uid >> 8) & 0xff; + tmp[23] = (uid >> 0) & 0xff; + + sc = calculate_sha_1(tmp, sizeof(tmp), digest); + + memcpy(uuid, digest, 16); + uuid[7] &= 0x0f; // Set the four most significant bits (bits 12 through 15) of the time_hi_and_version field + uuid[7] |= 0x50; // to the 4-bit version number as randomly generated + uuid[8] &= 0x3f; // Set the two most significant bits (bits 6 and 7) of the clock_seq_hi_and_reserved field + uuid[8] |= 0x80; // to zero and one, respectively + + return sc; +} + +static sl_status_t read_raw_nvm3(uint32_t domain, + uint16_t tag, + uint8_t *buf, + size_t *len) +{ + uint32_t type; + size_t value_len; + size_t read_len; + sl_status_t sc; + + sc = error_code_to_sl_status(nvm3_getObjectInfo(CSR_NVM3, + domain | tag, + &type, + &value_len)); + if (sc != SL_STATUS_OK) { + return sc; + } + + read_len = (value_len > *len) ? *len : value_len; + + sc = error_code_to_sl_status(nvm3_readData(CSR_NVM3, + domain | tag, + buf, + read_len)); + if (sc != SL_STATUS_OK) { + return sc; + } + + *len = value_len; + return SL_STATUS_OK; +} + +static sl_status_t write_raw_nvm3(uint32_t domain, + uint16_t tag, + uint8_t *buf, + size_t len) +{ + return error_code_to_sl_status(nvm3_writeData(CSR_NVM3, + domain | tag, + buf, + len)); +} + +static sl_status_t erase_all_nvm3(void) +{ + return error_code_to_sl_status(nvm3_eraseAll(CSR_NVM3)); +} + +static sl_status_t read_provisioning_record_control_block(provisioning_record_control_block_t *b) +{ + provisioning_record_control_block_t block; + size_t len = sizeof(block); + sl_status_t sc; + + sc = read_raw_nvm3(CSR_GENERATOR_NVM3_REGION, + CSR_NVM3_PRODDATA_CONTROL_BLOCK, + (uint8_t *)&block, + &len); + + if (sc == SL_STATUS_OK) { + memcpy(b, &block, sizeof(block)); + } + + return sc; +} + +static sl_status_t write_provisioning_record_control_block(provisioning_record_control_block_t *block) +{ + return write_raw_nvm3(CSR_GENERATOR_NVM3_REGION, + CSR_NVM3_PRODDATA_CONTROL_BLOCK, + (uint8_t *)block, + sizeof(provisioning_record_control_block_t)); +} diff --git a/app/btmesh/example/btmesh_soc_csr_generator/csr_generator.h b/app/btmesh/example/btmesh_soc_csr_generator/csr_generator.h new file mode 100644 index 00000000000..7db9d5a0c1a --- /dev/null +++ b/app/btmesh/example/btmesh_soc_csr_generator/csr_generator.h @@ -0,0 +1,89 @@ +/***************************************************************************//** + * @file + * @brief SoC Certificate Generator + ******************************************************************************* + * # 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 CSR_GENERATOR_H +#define CSR_GENERATOR_H + +#include +#include "psa/crypto.h" +#include "sl_status.h" + +#define CRYPTO_EC_PUBLIC_KEY_LEN 64 +#define CRYPTO_AUTH_256_LEN 32 +#define CRYPTO_SHA_1_LEN 20 + +typedef struct subject_name_field { + size_t name_len; + size_t value_len; + const char *name; + char *value; +} subject_name_field_t; + +// ----------------------------------------------------------------------------- +// Public functions. + +/**************************************************************************//** + * This function generates the device EC key pair, the signing request + * for the device certificate, and other related data. + *****************************************************************************/ +void csr_generate(void); + +/**************************************************************************//** + * This function exports the randomly generated authentication data + * into the given buffer. Used when the CSR to be generated should + * contain authentication data. + *****************************************************************************/ +sl_status_t export_static_auth_data(uint8_t *data, + size_t data_size, + size_t *data_length); + +/**************************************************************************//** + * This function exports the device public EC key into the given + * buffer. Used when the CSR to be generated should contain + * authentication data. + *****************************************************************************/ +sl_status_t export_public_key(mbedtls_svc_key_id_t key, + uint8_t *data, + size_t data_size, + size_t *data_length); + +/**************************************************************************//** + * This function calculates SHA-1 hash for given data + *****************************************************************************/ +sl_status_t calculate_sha_1(const uint8_t *ptr, + size_t len, + uint8_t *hash); + +/**************************************************************************//** + * This function converts a PSA API status code into the equivalent SL status + *****************************************************************************/ +sl_status_t psa_status_to_sl_status(psa_status_t p); + +#endif // CSR_GENERATOR_H diff --git a/app/btmesh/example/btmesh_soc_csr_generator/der.c b/app/btmesh/example/btmesh_soc_csr_generator/der.c new file mode 100644 index 00000000000..c251bd75794 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_csr_generator/der.c @@ -0,0 +1,1023 @@ +/***************************************************************************//** + * @file + * @brief Certificate signing request structure generation. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include +#include +#include + +#include "psa/crypto.h" +#include "psa/crypto_values.h" + +#include "sl_status.h" +#include "der.h" +#include "app_log.h" + +/* + * This file implements an incomplete DER encoder which provides + * just enough functionality to construct a CBP certificate signing + * request on device, using PSA ctypto API only for key generation, + * SHA-1 calculation, and ECDSA signing. + * + * In general, see X.690 for reference on the encoding syntax; and see + * RFCs 2986, 5280, 5430, and 5758 for particular details on values and + * encodings to use. + */ + +#define X520_DN_MAX_ATTRIBUTES (8) /**< Artificial upper limit to DN components */ + +#define DER_INTEGER_LEN (4) /**< Internal limit */ + +enum der_version { + der_version_1 = 0, +}; + +enum der_type { + DER_PRIMITIVE_BOOLEAN = 0x01, + DER_PRIMITIVE_INTEGER = 0x02, + DER_PRIMITIVE_BIT_STRING = 0x03, + DER_PRIMITIVE_OCTET_STRING = 0x04, + DER_PRIMITIVE_OID = 0x06, + DER_PRIMITIVE_UTF8_STRING = 0x0c, + DER_PRIMITIVE_PRINTABLE_STRING = 0x13, + DER_PRIMITIVE_IA5_STRING = 0x16, + DER_CONSTRUCT_SEQUENCE = 0x30, + DER_CONSTRUCT_SET = 0x31, + DER_CONSTRUCT_CSR_ATTRIBUTES = 0xa0, + DER_PRIMITIVE_BIG_INTEGER = 0x102, // Same as DER_PRIMITIVE_INTEGER but represented as a byte array +}; + +typedef int32_t der_int_t; + +/* + * A single DER value that gets encoded as tag-length-contents; + * for constructed values the contents will be recursively written out + */ +struct der_value { + enum der_type type; + union { + bool boolean; + der_int_t integer; + struct { + size_t len; + uint8_t *ptr; + } big_integer; + const uint8_t *oid; + struct { + size_t bit_len; + uint8_t *ptr; + } bit_string; + struct { + size_t len; + uint8_t *ptr; + } octet_string; + struct { + size_t len; + uint8_t *ptr; + } utf8_string; + struct { + size_t len; + uint8_t *ptr; + } printable_string; + struct { + size_t len; + uint8_t *ptr; + } ia5_string; + struct { + size_t count; + struct der_value *ptr; + } collection; + } data; +}; + +struct x520_dn_component { + const uint8_t *oid; + struct der_value value; +}; + +struct x520_dn { + size_t count; + struct x520_dn_component *component; +}; + +/* + * OIDs are represented merely as strings prefixed with type and length bytes; + * the string length is given in the 2nd byte for each. + */ + +// X.509 ext components are under 2.5.29 +#define X509_EXT_OID_PREFIX "\x06\x03\x55\x1d" +#define X509_EXT_OID(o) ((const uint8_t *)(X509_EXT_OID_PREFIX o)) +#define X509_EXT_OID_SUBJECT_KEY_IDENTIFIER X509_EXT_OID("\x0e") +#define X509_EXT_OID_KEY_USAGE X509_EXT_OID("\x0f") +#define X509_EXT_OID_BASIC_CONSTRAINT X509_EXT_OID("\x13") + +// X.520 DN components are under 2.5.4 +#define X520_DN_OID_PREFIX "\x06\x03\x55\x04" +#define X520_DN_OID(o) ((const uint8_t *)(X520_DN_OID_PREFIX o)) +#define X520_DN_OID_CN X520_DN_OID("\x03") +#define X520_DN_OID_COUNTRY X520_DN_OID("\x06") +#define X520_DN_OID_LOCALITY X520_DN_OID("\x07") +#define X520_DN_OID_STATE_OR_PROVINCE X520_DN_OID("\x08") +#define X520_DN_OID_ORGANIZATION X520_DN_OID("\x0a") +#define X520_DN_OID_ORGANIZATIONAL_UNIT X520_DN_OID("\x0b") + +// PKCS#9 email address is under 1.2.840.113549.1.9 +#define PKCS9_OID_PREFIX "\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x09" +#define PKCS9_OID(o) ((const uint8_t *)(PKCS9_OID_PREFIX o)) +#define PKCS9_OID_EMAIL_ADDRESS PKCS9_OID("\x01") +#define PKCS9_OID_EXTENSION_REQUEST PKCS9_OID("\x0e") + +// ECC algorithm identifiers are under 1.2.840.10045.2 +#define ECC_ALG_OID_PREFIX "\x06\x07\x2a\x86\x48\xce\x3d\x02" +#define ECC_ALG_OID(o) ((const uint8_t *)(ECC_ALG_OID_PREFIX o)) +#define ECC_ALG_OID_EC_PUBLIC_KEY ECC_ALG_OID("\x01") + +// ECC named curves are under 1.2.840.10045.3.1 +#define ECC_CURVE_OID_PREFIX "\x06\x08\x2a\x86\x48\xce\x3d\x03\x01" +#define ECC_CURVE_OID(o) ((const uint8_t *)(ECC_CURVE_OID_PREFIX o)) +#define ECC_CURVE_OID_PRIME256V1 ECC_CURVE_OID("\x07") + +// ECC signatures are under 1.2.840.10045.4.3 +#define ECC_SIGNATURE_OID_PREFIX "\x06\x08\x2a\x86\x48\xce\x3d\x04\x03" +#define ECC_SIGNATURE_OID(o) ((const uint8_t *)(ECC_SIGNATURE_OID_PREFIX o)) +#define ECC_SIGNATURE_OID_ECDSA_WITH_SHA256 ECC_SIGNATURE_OID("\x02") + +static sl_status_t der_encode_oid(const uint8_t *oid, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len); + +static sl_status_t der_encode_string(enum der_type type, + size_t len, + const uint8_t *ptr, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len); + +static sl_status_t der_encode_bit_string(enum der_type type, + size_t bit_len, + const uint8_t *ptr, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len); + +static sl_status_t der_encode_collection(enum der_type type, + const struct der_value *value, + size_t value_count, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len); + +static size_t der_int_length(der_int_t i) +{ + der_int_t a = abs(i); + uint8_t tmp[DER_INTEGER_LEN]; + size_t p; + + for (p = DER_INTEGER_LEN; p; p--) { + tmp[p - 1] = a & 0xff; + a >>= 8; + } + + for (p = 0; p < DER_INTEGER_LEN - 1; p++) { + if (tmp[p] != 0x00 || (tmp[p + 1] & 0x80)) { + return DER_INTEGER_LEN - p; + } + } + return 1; +} + +/* + * All der_encode functions work with and without buffer; without buffer they merely return + * the length of the would-be-constructed encoding. This is needed so that constructed values + * can be recursively encoded. + */ +static sl_status_t der_encode_header(enum der_type type, + size_t length, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len) +{ + size_t header_len; + + if (length < 0x80) { // may use short form + header_len = 2; + } else if (length < 0x100) { // definite long form with 2 octets + header_len = 3; + } else if (length < 0x10000) { // definite long form with 3 octets + header_len = 4; + } else { // too long for practical purposes, not supported + return SL_STATUS_NOT_SUPPORTED; + } + + if (buffer_len < header_len) { + return SL_STATUS_WOULD_OVERFLOW; + } + + if (buffer) { + buffer[0] = type; + if (length < 0x80) { + buffer[1] = length; + } else if (length < 0x100) { + buffer[1] = 0x81; + buffer[2] = length & 0xff; + } else { + buffer[1] = 0x82; + buffer[2] = (length >> 8) & 0xff; + buffer[3] = length & 0xff; + } + } + + *write_len = header_len; + return SL_STATUS_OK; +} + +static sl_status_t der_encode(const struct der_value *value, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len) +{ + size_t len; + + switch (value->type) { + case DER_PRIMITIVE_BOOLEAN: + if (buffer_len < 3) { + return SL_STATUS_WOULD_OVERFLOW; + } + if (buffer) { + buffer[0] = DER_PRIMITIVE_BOOLEAN; + buffer[1] = 1; + buffer[2] = value->data.boolean; + } + *write_len = 3; + return SL_STATUS_OK; + + case DER_PRIMITIVE_INTEGER: + len = der_int_length(value->data.integer); + if (len > DER_INTEGER_LEN) { + return SL_STATUS_NOT_SUPPORTED; + } + if (buffer_len < 2 + len) { + return SL_STATUS_WOULD_OVERFLOW; + } + if (buffer) { + size_t pos; + buffer[0] = DER_PRIMITIVE_INTEGER; + buffer[1] = len; + for (pos = 0; pos < len; pos++) { + uint8_t byte = (value->data.integer >> (8 * (DER_INTEGER_LEN - 1 - pos))) & 0xff; + buffer[2 + pos] = byte; + } + } + *write_len = 2 + len; + return SL_STATUS_OK; + + case DER_PRIMITIVE_BIG_INTEGER: + len = value->data.big_integer.len; + if (value->data.big_integer.ptr[0] > 0x7f) { + len++; + } + if (buffer_len < 2 + len) { + return SL_STATUS_WOULD_OVERFLOW; + } + if (buffer) { + size_t pos = 0; + buffer[pos++] = DER_PRIMITIVE_INTEGER; + buffer[pos++] = len; + if (value->data.big_integer.ptr[0] > 0x7f) { + buffer[pos++] = 0x00; + } + memcpy(buffer + pos, + value->data.big_integer.ptr, + value->data.big_integer.len); + } + *write_len = 2 + len; + return SL_STATUS_OK; + + case DER_PRIMITIVE_OID: + return der_encode_oid(value->data.oid, + buffer, + buffer_len, + write_len); + + case DER_PRIMITIVE_BIT_STRING: + return der_encode_bit_string(value->type, + value->data.bit_string.bit_len, + value->data.bit_string.ptr, + buffer, + buffer_len, + write_len); + + case DER_PRIMITIVE_OCTET_STRING: + return der_encode_string(value->type, + value->data.octet_string.len, + value->data.octet_string.ptr, + buffer, + buffer_len, + write_len); + + case DER_PRIMITIVE_UTF8_STRING: + return der_encode_string(value->type, + value->data.utf8_string.len, + value->data.utf8_string.ptr, + buffer, + buffer_len, + write_len); + + case DER_PRIMITIVE_PRINTABLE_STRING: + return der_encode_string(value->type, + value->data.printable_string.len, + value->data.printable_string.ptr, + buffer, + buffer_len, + write_len); + + case DER_PRIMITIVE_IA5_STRING: + return der_encode_string(value->type, + value->data.ia5_string.len, + value->data.ia5_string.ptr, + buffer, + buffer_len, + write_len); + + case DER_CONSTRUCT_SEQUENCE: + case DER_CONSTRUCT_SET: + case DER_CONSTRUCT_CSR_ATTRIBUTES: + return der_encode_collection(value->type, + value->data.collection.ptr, + value->data.collection.count, + buffer, + buffer_len, + write_len); + + default: + return SL_STATUS_NOT_SUPPORTED; + } +} + +static sl_status_t der_encode_oid(const uint8_t *oid, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len) +{ + // This is ugly; but we know that it works as all OIDs we use are + // encoded using a single octet length + size_t len = 2 + oid[1]; + + if (buffer_len < len) { + return SL_STATUS_WOULD_OVERFLOW; + } + + if (buffer) { + memcpy(buffer, oid, len); + } + + *write_len = len; + return SL_STATUS_OK; +} + +static sl_status_t der_encode_bit_string(enum der_type type, + size_t bit_len, + const uint8_t *ptr, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len) +{ + size_t header_len, len; + sl_status_t e; + + len = (bit_len + 7) / 8; + + e = der_encode_header(type, 1 + len, NULL, buffer_len, &header_len); + if (e != SL_STATUS_OK) { + return e; + } + + if (buffer_len < header_len + 1 + len) { + return SL_STATUS_WOULD_OVERFLOW; + } + + if (buffer) { + e = der_encode_header(type, 1 + len, buffer, buffer_len, &header_len); + if (e != SL_STATUS_OK) { + return e; + } + buffer[header_len] = bit_len % 8; + memcpy(buffer + header_len + 1, ptr, len); + } + + *write_len = header_len + 1 + len; + return SL_STATUS_OK; +} + +static sl_status_t der_encode_string(enum der_type type, + size_t len, + const uint8_t *ptr, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len) +{ + size_t header_len; + sl_status_t e; + + e = der_encode_header(type, len, NULL, buffer_len, &header_len); + if (e != SL_STATUS_OK) { + return e; + } + + if (buffer_len < header_len + len) { + return SL_STATUS_WOULD_OVERFLOW; + } + + if (buffer) { + e = der_encode_header(type, len, buffer, buffer_len, &header_len); + if (e != SL_STATUS_OK) { + return e; + } + + memcpy(buffer + header_len, ptr, len); + } + + *write_len = header_len + len; + return SL_STATUS_OK; +} + +static sl_status_t der_encode_collection(enum der_type type, + const struct der_value *value, + size_t value_count, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len) +{ + size_t write_pos, header_len, i; + sl_status_t e; + + // First, figure out the length needed for encoding the contents + for (write_pos = 0, i = 0; i < value_count; i++) { + size_t chunk; + e = der_encode(&value[i], NULL, ~0, &chunk); + if (e != SL_STATUS_OK) { + return e; + } + write_pos += chunk; + } + + // Check header encoding as well + e = der_encode_header(type, write_pos, NULL, buffer_len, &header_len); + if (e != SL_STATUS_OK) { + return e; + } + + if (buffer_len < header_len + write_pos) { + return SL_STATUS_WOULD_OVERFLOW; + } + + if (buffer) { + e = der_encode_header(type, write_pos, buffer, buffer_len, &header_len); + if (e != SL_STATUS_OK) { + return e; + } + + for (write_pos = 0, i = 0; i < value_count; i++) { + size_t chunk; + e = der_encode(&value[i], buffer + header_len + write_pos, buffer_len - header_len - write_pos, &chunk); + if (e != SL_STATUS_OK) { + return e; + } + write_pos += chunk; + } + } + + *write_len = header_len + write_pos; + return SL_STATUS_OK; +} + +static sl_status_t der_construct_and_sign(enum der_version ver, + const struct x520_dn *dn, + mbedtls_svc_key_id_t device_key, + uint8_t *public_key_ptr, + size_t public_key_bit_len, + uint8_t *subject_key_identifier_ptr, + size_t subject_key_identifier_len, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len) +{ + uint8_t signature_buffer[64] = { 0 }; + size_t signature_len = 0; + uint8_t sig_buf[72] = { 0 }; + size_t sig_len = 0; + psa_algorithm_t signature_alg = PSA_ALG_ECDSA(PSA_ALG_SHA_256); + uint8_t tbs[512] = { 0 }; + size_t tbs_len = 0; + uint8_t ski_buf[2 + CRYPTO_SHA_1_LEN] = { 0 }; + size_t ski_len = 0; + struct der_value attribute[X520_DN_MAX_ATTRIBUTES]; + struct der_value attribute_pair[X520_DN_MAX_ATTRIBUTES][2]; + struct der_value set[X520_DN_MAX_ATTRIBUTES]; + struct der_value dn_sequence; + struct der_value info_sequence[4]; + sl_status_t e; + size_t s = 0; + size_t i; + + memset(set, 0, sizeof(set)); + memset(attribute, 0, sizeof(attribute)); + memset(attribute_pair, 0, sizeof(attribute_pair)); + + if (public_key_bit_len != 520) { + return SL_STATUS_INVALID_PARAMETER; + } + + if (subject_key_identifier_len != CRYPTO_SHA_1_LEN) { + return SL_STATUS_INVALID_PARAMETER; + } + + if (dn->count > X520_DN_MAX_ATTRIBUTES) { + return SL_STATUS_INVALID_PARAMETER; + } + + // 1) + // version is just an integer + + struct der_value version = { + .type = DER_PRIMITIVE_INTEGER, + .data.integer = ver, + }; + + info_sequence[s++] = version; + + // 2) + // Name in RFC 5280 is a SEQUENCE of RDNs; each RDN is a set; each + // set is a sequence of type and value + + // First create an attribute for each DN component and fill + // the set with the attributes. Note: does not check that + // there are no duplicate entries + for (i = 0; i < dn->count; i++) { + attribute_pair[i][0].type = DER_PRIMITIVE_OID; + attribute_pair[i][0].data.oid = dn->component[i].oid; + attribute_pair[i][1].type = dn->component[i].value.type; + attribute_pair[i][1].data = dn->component[i].value.data; + attribute[i].type = DER_CONSTRUCT_SEQUENCE; + attribute[i].data.collection.count = 2; + attribute[i].data.collection.ptr = attribute_pair[i]; + set[i].type = DER_CONSTRUCT_SET; + set[i].data.collection.count = 1; + set[i].data.collection.ptr = &attribute[i]; + } + + // Then create the overall sequence + dn_sequence.type = DER_CONSTRUCT_SEQUENCE; + dn_sequence.data.collection.count = dn->count; + dn_sequence.data.collection.ptr = set; + + info_sequence[s++] = dn_sequence; + + // 3) + // Add the public key; ECC named curve and bit string + + struct der_value algorithm_contents[2] = { + { + .type = DER_PRIMITIVE_OID, + .data = { + .oid = ECC_ALG_OID_EC_PUBLIC_KEY + } + }, { + .type = DER_PRIMITIVE_OID, + .data = { + .oid = ECC_CURVE_OID_PRIME256V1 + } + } + }; + + struct der_value spki_contents[2] = { + { + .type = DER_CONSTRUCT_SEQUENCE, + .data = { + .collection = { + .count = 2, + .ptr = algorithm_contents + } + } + }, { + .type = DER_PRIMITIVE_BIT_STRING, + .data = { + .bit_string = { + .bit_len = public_key_bit_len, + .ptr = public_key_ptr, + } + } + } + }; + + struct der_value spki_sequence = { + .type = DER_CONSTRUCT_SEQUENCE, + .data = { + .collection = { + .count = 2, + .ptr = spki_contents + } + } + }; + + info_sequence[s++] = spki_sequence; + + // 4) Add requested extensions + + // The level of complication here is just lovely. Each extension + // is a pairing of OID and an octet string, which contains the + // DER-encoded object instead of the plain object. Even if the + // value would be an octet string, it still needs to be encoded + // into a wrapping octet string ... + + // 4.1) Add CA=FALSE basic constraint + // CA=FALSE is the default so the parameter sequence can be empty + + uint8_t empty_sequence[2] = { 0x30, 0x00 }; + + struct der_value ext_basic_constraints_contents[2] = { + { + .type = DER_PRIMITIVE_OID, + .data = { + .oid = X509_EXT_OID_BASIC_CONSTRAINT, + } + }, { + .type = DER_PRIMITIVE_OCTET_STRING, + .data = { + .octet_string = { + .len = sizeof(empty_sequence), + .ptr = empty_sequence, + } + } + } + }; + + // 4.2) Add key agreement key usage + + uint8_t key_agreement_bit_string[4] = { 0x03, 0x02, 0x03, 0x08 }; + + struct der_value ext_key_usage_contents[2] = { + { + .type = DER_PRIMITIVE_OID, + .data = { + .oid = X509_EXT_OID_KEY_USAGE, + } + }, { + .type = DER_PRIMITIVE_OCTET_STRING, + .data = { + .octet_string = { + .len = sizeof(key_agreement_bit_string), + .ptr = key_agreement_bit_string, + } + } + } + }; + + // 4.3) Add subject key identifier (?) + + struct der_value subject_key_identifier = { + .type = DER_PRIMITIVE_OCTET_STRING, + .data = { + .octet_string = { + .len = subject_key_identifier_len, + .ptr = subject_key_identifier_ptr, + } + } + }; + + e = der_encode(&subject_key_identifier, ski_buf, sizeof(ski_buf), &ski_len); + if (e != SL_STATUS_OK) { + return e; + } + + struct der_value ext_subject_key_identifier_contents[2] = { + { + .type = DER_PRIMITIVE_OID, + .data = { + .oid = X509_EXT_OID_SUBJECT_KEY_IDENTIFIER, + } + }, { + .type = DER_PRIMITIVE_OCTET_STRING, + .data = { + .octet_string = { + .len = ski_len, + .ptr = ski_buf, + } + } + } + }; + + struct der_value ext_sequence_contents[4] = { + { + .type = DER_CONSTRUCT_SEQUENCE, + .data = { + .collection = { + .count = 2, + .ptr = ext_basic_constraints_contents, + } + } + }, { + .type = DER_CONSTRUCT_SEQUENCE, + .data = { + .collection = { + .count = 2, + .ptr = ext_key_usage_contents, + } + } + }, { + .type = DER_CONSTRUCT_SEQUENCE, + .data = { + .collection = { + .count = 2, + .ptr = ext_subject_key_identifier_contents, + } + } + } + }; + + struct der_value ext_sequence = { + .type = DER_CONSTRUCT_SEQUENCE, + .data = { + .collection = { + .count = 3, + .ptr = ext_sequence_contents + } + } + }; + + struct der_value ext_contents[2] = { + { + .type = DER_PRIMITIVE_OID, + .data = { + .oid = PKCS9_OID_EXTENSION_REQUEST, + } + }, { + .type = DER_CONSTRUCT_SET, + .data = { + .collection = { + .count = 1, + .ptr = &ext_sequence, + } + } + } + }; + + struct der_value ext = { + .type = DER_CONSTRUCT_SEQUENCE, + .data = { + .collection = { + .count = 2, + .ptr = ext_contents, + } + } + }; + + struct der_value attributes = { + .type = DER_CONSTRUCT_CSR_ATTRIBUTES, + .data = { + .collection = { + .count = 1, + .ptr = &ext, + } + } + }; + + info_sequence[s++] = attributes; + + // 5) Encode request information into temporary buffer + + struct der_value info_envelope = { + .type = DER_CONSTRUCT_SEQUENCE, + .data = { + .collection = { + .count = s, + .ptr = info_sequence, + } + } + }; + + e = der_encode(&info_envelope, tbs, sizeof(tbs), &tbs_len); + if (e != SL_STATUS_OK) { + app_log("Failed to DER-encode certificate request information\n"); + return e; + } + + // 6) Self-sign the request information + e = psa_status_to_sl_status(psa_sign_message(device_key, + signature_alg, + tbs, + tbs_len, + signature_buffer, + sizeof(signature_buffer), + &signature_len)); + if (e != SL_STATUS_OK) { + app_log("Failed to sign certificate request information\n"); + return e; + } + + // 7) Construct DER sequence for the signature + + // No parameters for the signature algorithm + + struct der_value signature_algorithm = { + .type = DER_PRIMITIVE_OID, + .data = { + .oid = ECC_SIGNATURE_OID_ECDSA_WITH_SHA256, + } + }; + + struct der_value signature_algorithm_envelope = { + .type = DER_CONSTRUCT_SEQUENCE, + .data = { + .collection = { + .count = 1, + .ptr = &signature_algorithm, + } + } + }; + + // Signature itself is represented as a pair of numbers (r,s) + // which will yet again be encoded into a wrapping construct, + // this time bit string + + struct der_value signature_pair[2] = { + { + .type = DER_PRIMITIVE_BIG_INTEGER, + .data = { + .big_integer = { + .len = signature_len / 2, + .ptr = signature_buffer, + } + } + }, { + .type = DER_PRIMITIVE_BIG_INTEGER, + .data = { + .big_integer = { + .len = signature_len / 2, + .ptr = signature_buffer + signature_len / 2, + } + } + } + }; + + struct der_value signature_envelope = { + .type = DER_CONSTRUCT_SEQUENCE, + .data = { + .collection = { + .count = 2, + .ptr = signature_pair, + } + } + }; + + e = der_encode(&signature_envelope, sig_buf, sizeof(sig_buf), &sig_len); + if (e != SL_STATUS_OK) { + return e; + } + + struct der_value signature_bitstring = { + .type = DER_PRIMITIVE_BIT_STRING, + .data = { + .bit_string = { + .bit_len = 8 * sig_len, + .ptr = sig_buf, + } + } + }; + + // 8) Construct the final request + + struct der_value csr_sequence[3] = { + info_envelope, + signature_algorithm_envelope, + signature_bitstring + }; + + struct der_value csr = { + .type = DER_CONSTRUCT_SEQUENCE, + .data = { + .collection = { + .count = 3, + .ptr = csr_sequence, + } + } + }; + + e = der_encode(&csr, buffer, buffer_len, write_len); + if (e != SL_STATUS_OK) { + app_log("Failed to construct certificate request\n"); + return e; + } + + return SL_STATUS_OK; +} + +sl_status_t der_encode_csr(const struct subject_name_field *subject_name_ptr, + size_t subject_name_len, + mbedtls_svc_key_id_t device_key, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len) +{ + uint8_t public_key_buffer[1 + CRYPTO_EC_PUBLIC_KEY_LEN] = { 0 }; + uint8_t public_key_digest[CRYPTO_SHA_1_LEN] = { 0 }; + struct x520_dn_component dn_component[X520_DN_MAX_ATTRIBUTES] = { 0 }; + struct x520_dn dn = { + subject_name_len, + dn_component, + }; + size_t public_key_len = 0, i; + sl_status_t e = SL_STATUS_OK; + + memset(dn_component, 0, sizeof(dn_component)); + + // Prepare for encoding Certificate Request Info: + // * Construct subject name ASN.1 structures + // * Export public key data into octet array + // * Construct subject public key identifier + + if (subject_name_len > X520_DN_MAX_ATTRIBUTES) { + return SL_STATUS_WOULD_OVERFLOW; + } + + // Limited support for DN components; add more as necessary + for (i = 0; i < subject_name_len; i++) { + if (subject_name_ptr[i].name_len == 1 && strncmp(subject_name_ptr[i].name, "C", 1) == 0) { + dn_component[i].oid = X520_DN_OID_COUNTRY; + } else if (subject_name_ptr[i].name_len == 2 && strncmp(subject_name_ptr[i].name, "ST", 2) == 0) { + dn_component[i].oid = X520_DN_OID_STATE_OR_PROVINCE; + } else if (subject_name_ptr[i].name_len == 1 && strncmp(subject_name_ptr[i].name, "L", 1) == 0) { + dn_component[i].oid = X520_DN_OID_LOCALITY; + } else if (subject_name_ptr[i].name_len == 1 && strncmp(subject_name_ptr[i].name, "O", 1) == 0) { + dn_component[i].oid = X520_DN_OID_ORGANIZATION; + } else if (subject_name_ptr[i].name_len == 2 && strncmp(subject_name_ptr[i].name, "OU", 2) == 0) { + dn_component[i].oid = X520_DN_OID_ORGANIZATIONAL_UNIT; + } else if (subject_name_ptr[i].name_len == 2 && strncmp(subject_name_ptr[i].name, "CN", 2) == 0) { + dn_component[i].oid = X520_DN_OID_CN; + } else { + return SL_STATUS_NOT_SUPPORTED; + } + dn_component[i].value.type = DER_PRIMITIVE_UTF8_STRING; + dn_component[i].value.data.utf8_string.len = subject_name_ptr[i].value_len; + dn_component[i].value.data.utf8_string.ptr = (uint8_t *)subject_name_ptr[i].value; + } + + e = export_public_key(device_key, public_key_buffer, sizeof(public_key_buffer), &public_key_len); + if (e != SL_STATUS_OK) { + app_log("Failed to export public key\n"); + return e; + } + + // Skip 0x04 header byte, calculate digest only the the key data + e = calculate_sha_1(public_key_buffer + 1, CRYPTO_EC_PUBLIC_KEY_LEN, public_key_digest); + if (e != SL_STATUS_OK) { + app_log("Failed to calculate subject key identifier\n"); + return e; + } + + e = der_construct_and_sign(der_version_1, + &dn, + device_key, + public_key_buffer, + 8 * public_key_len, + public_key_digest, + sizeof(public_key_digest), + buffer, + buffer_len, + write_len); + if (e != SL_STATUS_OK) { + app_log("Failed to construct DER\n"); + return e; + } + + return SL_STATUS_OK; +} diff --git a/app/btmesh/example/btmesh_soc_csr_generator/der.h b/app/btmesh/example/btmesh_soc_csr_generator/der.h new file mode 100644 index 00000000000..d4f2b42efdb --- /dev/null +++ b/app/btmesh/example/btmesh_soc_csr_generator/der.h @@ -0,0 +1,63 @@ +/***************************************************************************//** + * @file + * @brief Certificate signing request structure generation. + ******************************************************************************* + * # 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 DER_H +#define DER_H + +#include +#include +#include +#include "psa/crypto.h" +#include "csr_generator.h" + +/** + * @brief Create a DER-encoded CSR + * + * Create a DER-encoded CSR for the given parameters. + * + * @param subject_name_ptr Array of Subject DN components + * @param subject_name_len Length of the array of Subject DN components + * @param key Device EC key; public key will be presented in the CSR and + * the private key will be used in signing the CSR + * @param buffer DER output buffer + * @param buffer_len Length of the DER output buffer + * @param write_len Number of bytes written to the DER output buffer (length of + * constructed structure) + * + * @return SL_STATUS_OK if the CSR could be generated and encoded; an error otherwise + */ +sl_status_t der_encode_csr(const struct subject_name_field *subject_name_ptr, + size_t subject_name_len, + mbedtls_svc_key_id_t key, + uint8_t *buffer, + size_t buffer_len, + size_t *write_len); + +#endif // DER_H diff --git a/app/btmesh/example/btmesh_soc_csr_generator/main.c b/app/btmesh/example/btmesh_soc_csr_generator/main.c new file mode 100644 index 00000000000..046a74f2b53 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_csr_generator/main.c @@ -0,0 +1,67 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif // SL_CATALOG_POWER_MANAGER_PRESENT +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/app.c b/app/btmesh/example/btmesh_soc_dfu_distributor/app.c new file mode 100644 index 00000000000..14dd6fcad8e --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/app.c @@ -0,0 +1,424 @@ +/***************************************************************************//** + * @file + * @brief Silicon Labs SoC BT Mesh DFU Distributor Example Project + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include +#include +#include "em_common.h" + +#include "sl_status.h" + +#include "sl_bluetooth.h" +#include "sl_bt_api.h" +#include "app.h" +#include "gatt_db.h" +#include "app_assert.h" +#include "app_log.h" +#include "app_btmesh_util.h" + +#include "app_button_press.h" +#include "sl_simple_button_instances.h" +#include "sl_simple_led_instances.h" +#include "sl_simple_timer.h" +#include "sl_btmesh_blob_storage.h" +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_provisioning_decorator.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#include "sl_btmesh_wstk_lcd.h" +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +/// Callback has not parameters +#define NO_CALLBACK_DATA (void *)NULL +/// Timeout for Blinking LED during provisioning +#define APP_LED_BLINKING_TIMEOUT 250 +/// Length of the display name buffer +#define NAME_BUF_LEN 20 +/// Length of boot error message buffer +#define BOOT_ERR_MSG_BUF_LEN 30 + +/// Used button indexes +#define BUTTON_PRESS_BUTTON_0 0 +#define BUTTON_PRESS_BUTTON_1 1 + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#define lcd_print(...) sl_btmesh_LCD_write(__VA_ARGS__) +#define lcd_next_page() sl_btmesh_LCD_next_page() +#define lcd_prev_page() sl_btmesh_LCD_prev_page() +#else +#define lcd_print(...) +#define lcd_next_page() +#define lcd_prev_page() +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +/// periodic timer handle +static sl_simple_timer_t app_led_blinking_timer; + +/// periodic timer callback +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, void *data); +// Handles button press and does a factory reset +static bool handle_reset_conditions(void); +// Set device name in the GATT database +static void set_device_name(uuid_128 *uuid); + +/******************************************************************************* + * Global variables + ******************************************************************************/ +/// number of active Bluetooth connections +static uint8_t num_connections = 0; + +static bool init_done = false; + +/***************************************************************************//** + * Change buttons to LEDs in case of shared pin + * + ******************************************************************************/ +void change_buttons_to_leds(void) +{ + app_button_press_disable(); + // Disable button and enable led + sl_simple_button_disable(&sl_button_btn0); + sl_simple_led_init(sl_led_led0.context); + // Disable button and enable led +#ifndef SINGLE_BUTTON + sl_simple_button_disable(&sl_button_btn1); +#endif // SINGLE_BUTTON +#ifndef SINGLE_LED + sl_simple_led_init(sl_led_led1.context); +#endif //SINGLE_LED +} + +/***************************************************************************//** + * Change LEDs to buttons in case of shared pin + * + ******************************************************************************/ +void change_leds_to_buttons(void) +{ + // Enable buttons + sl_simple_button_enable(&sl_button_btn0); +#ifndef SINGLE_BUTTON + sl_simple_button_enable(&sl_button_btn1); +#endif // SINGLE_BUTTON + // Wait + sl_sleeptimer_delay_millisecond(1); + // Enable button presses + app_button_press_enable(); +} + +/******************************************************************************* + * Application Init. + ******************************************************************************/ +SL_WEAK void app_init(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application init code here! // + // This is called once during start-up. // + ///////////////////////////////////////////////////////////////////////////// + app_log("Bt Mesh Distributor initialized" APP_LOG_NL); + // Ensure right init order in case of shared pin for enabling buttons + change_buttons_to_leds(); + // Change LEDs to buttons in case of shared pin + change_leds_to_buttons(); + handle_reset_conditions(); +} + +/******************************************************************************* + * Application Process Action. + ******************************************************************************/ +SL_WEAK void app_process_action(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application code here! // + // This is called infinitely. // + // Do not call blocking functions from here! // + ///////////////////////////////////////////////////////////////////////////// +} + +/***************************************************************************//** + * Set device name in the GATT database. A unique name is generated using + * the two last bytes from the UUID of this device. Name is also + * displayed on the LCD. + * + * @param[in] uuid Pointer to device UUID. + ******************************************************************************/ +static void set_device_name(uuid_128 *uuid) +{ + char name[NAME_BUF_LEN]; + sl_status_t result; + + // Create unique device name using the last two bytes of the device UUID + snprintf(name, + NAME_BUF_LEN, + "distributor %02x%02x", + uuid->data[14], + uuid->data[15]); + + app_log("Device name: '%s'" APP_LOG_NL, name); + + result = sl_bt_gatt_server_write_attribute_value(gattdb_device_name, + 0, + strlen(name), + (uint8_t *)name); + app_log_status_error_f(result, + "sl_bt_gatt_server_write_attribute_value() failed" APP_LOG_NL); + + // Show device name on the LCD + lcd_print(name, SL_BTMESH_WSTK_LCD_ROW_NAME_CFG_VAL); +} + +/***************************************************************************//** + * Configuration of segmentation and reassembly + ******************************************************************************/ +static void set_sar_config(void) +{ + sl_status_t sc; + // The SAR transmitter configuration getter and setter functions don't require + // initialization call and it is not mandatory to have SAR Configuration Server + // in the Device Composition Data. + // These are necessary only to handle SAR Config messages. + uint8_t segment_interval_step; + uint8_t unicast_retrans_count; + uint8_t unicast_retrans_wo_progress_count; + uint16_t unicast_retrans_interval_step; + uint16_t unicast_retrans_interval_increment; + uint8_t multicast_retrans_count; + uint16_t multicast_retrans_interval_step; + // Get the current SAR Configuration Server Transmitter state to modify + // the critical parameter only and keep the default values of others. + sc = sl_btmesh_sar_config_server_get_sar_transmitter(&segment_interval_step, + &unicast_retrans_count, + &unicast_retrans_wo_progress_count, + &unicast_retrans_interval_step, + &unicast_retrans_interval_increment, + &multicast_retrans_count, + &multicast_retrans_interval_step); + app_assert_status_f(sc, "Failed to get SAR Tx Config"); + // The BLOB Transfer procedure has a high-level retransmission logic which + // detects missing chunks and retransmits the missing ones. + // The retransmissions are disabled in Lower Transport layer because it slows + // down the BLOB Transfer significantly. + multicast_retrans_count = 0; + sc = sl_btmesh_sar_config_server_set_sar_transmitter(segment_interval_step, + unicast_retrans_count, + unicast_retrans_wo_progress_count, + unicast_retrans_interval_step, + unicast_retrans_interval_increment, + multicast_retrans_count, + multicast_retrans_interval_step); + app_assert_status_f(sc, "Failed to set SAR Tx Config"); +} + +/***************************************************************************//** + * Handles button press and does a factory reset + * + * @return true if there is no button press + ******************************************************************************/ +static bool handle_reset_conditions(void) +{ + // If PB0 is held down then do full factory reset + if (sl_simple_button_get_state(&sl_button_btn0) == SL_SIMPLE_BUTTON_PRESSED) { + // Disable button presses + app_button_press_disable(); + // Full factory reset + sl_btmesh_initiate_full_reset(); + return false; + } + +#ifndef SINGLE_BUTTON + // If PB1 is held down then do node factory reset + if (sl_simple_button_get_state(&sl_button_btn1) == SL_SIMPLE_BUTTON_PRESSED) { + // Disable button presses + app_button_press_disable(); + // Node factory reset + sl_btmesh_initiate_node_reset(); + return false; + } +#endif // SL_CATALOG_BTN1_PRESENT + return true; +} + +/***************************************************************************//** + * Handling of le stack events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_bt_on_event(sl_bt_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_bt_evt_connection_opened_id: + num_connections++; + lcd_print("connected", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Connected" APP_LOG_NL); + break; + + case sl_bt_evt_connection_closed_id: + if (num_connections > 0) { + if (--num_connections == 0) { + lcd_print("", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Disconnected" APP_LOG_NL); + } + } + break; + + default: + break; + } +} + +/***************************************************************************//** + * Bluetooth Mesh stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Pointer to incoming event from the Bluetooth Mesh stack. + ******************************************************************************/ +void sl_btmesh_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + default: + break; + } +} + +/******************************************************************************* + * Callbacks + ******************************************************************************/ +void app_button_press_cb(uint8_t button, uint8_t duration) +{ + (void) duration; + switch (button) { + case BUTTON_PRESS_BUTTON_0: + lcd_next_page(); + break; + case BUTTON_PRESS_BUTTON_1: + lcd_prev_page(); + break; + } +} + +/***************************************************************************//** + * Handling of provisionee init result + ******************************************************************************/ +void sl_btmesh_provisionee_on_init(sl_status_t result) +{ + if (SL_STATUS_OK != result) { + char buf[BOOT_ERR_MSG_BUF_LEN]; + snprintf(buf, sizeof(buf), "init failed (0x%lx)", result); + lcd_print(buf, SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + } else { + uuid_128 uuid; + sl_status_t sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get UUID"); + set_device_name(&uuid); + set_sar_config(); + } +} + +/***************************************************************************//** + * Provisioning Decorator Callbacks + ******************************************************************************/ +// Called when the Provisioning starts +void sl_btmesh_on_node_provisioning_started(uint16_t result) +{ + // Change buttons to LEDs in case of shared pin + change_buttons_to_leds(); + + sl_status_t sc = sl_simple_timer_start(&app_led_blinking_timer, + APP_LED_BLINKING_TIMEOUT, + app_led_blinking_timer_cb, + NO_CALLBACK_DATA, + true); + + app_assert_status_f(sc, "Failed to start periodic timer"); + + app_show_btmesh_node_provisioning_started(result); +} + +// Called when the Provisioning finishes successfully +void sl_btmesh_on_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + sl_status_t sc = sl_simple_timer_stop(&app_led_blinking_timer); + app_assert_status_f(sc, "Failed to stop periodic timer"); + // Turn off LED + init_done = true; + sl_led_led0.turn_off(sl_led_led0.context); +#ifndef SINGLE_LED + sl_led_led1.turn_off(sl_led_led1.context); +#endif // SINGLE_LED + // Change LEDs to buttons in case of shared pin + change_leds_to_buttons(); + + app_show_btmesh_node_provisioned(address, iv_index); +} + +/***************************************************************************//** + * Timer Callbacks + ******************************************************************************/ +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + if (!init_done) { + // Toggle LEDs + sl_led_led0.toggle(sl_led_led0.context); +#ifndef SINGLE_LED + sl_led_led1.toggle(sl_led_led1.context); +#endif // SINGLE_LED + } +} + +// ----------------------------------------------------------------------------- +// Factory Reset Callbacks + +/******************************************************************************* + * Called during the factory reset of the device. + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void) +{ + app_show_btmesh_factory_reset_full_reset(); + + // Delete all BLOBs from BLOB storage + // Note: Delete all operation may take ~5-15s based on flash type and size + app_log("Erasing BLOB storage objects (duration: ~5-15s)" APP_LOG_NL); + sl_status_t sc = sl_btmesh_blob_storage_delete_all(); + app_assert_status_f(sc, "BLOB storage erase failed"); + + sc = app_btmesh_nvm_erase_all(); + app_assert_status_f(sc, "NVM erase failed"); +} + +/******************************************************************************* + * Called during the factory reset of the node. + ******************************************************************************/ +void sl_btmesh_factory_reset_on_node_reset(void) +{ + app_show_btmesh_factory_reset_node_reset(); +} diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/app.h b/app/btmesh/example/btmesh_soc_dfu_distributor/app.h new file mode 100644 index 00000000000..c72ac776758 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/app.h @@ -0,0 +1,73 @@ +/***************************************************************************//** + * @file + * @brief Application interface provided to main(). + ******************************************************************************* + * # License + * Copyright 2021 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 APP_H +#define APP_H + +#include +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +void app_init(void); + +/***************************************************************************//** + * Application Process Action. + ******************************************************************************/ +void app_process_action(void); + +/***************************************************************************//** + * Shows the provisioning start information + * + * @param[in] result Result code. 0: success, non-zero: error + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result); + +/***************************************************************************//** + * Shows the provisioning completed information + * + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index); + +/***************************************************************************//** + * Shows factory full reset information + ******************************************************************************/ +void app_show_btmesh_factory_reset_full_reset(void); + +/***************************************************************************//** + * Shows factory node reset information + ******************************************************************************/ +void app_show_btmesh_factory_reset_node_reset(void); + +#endif // APP_H diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/app_out_lcd.c b/app/btmesh/example/btmesh_soc_dfu_distributor/app_out_lcd.c new file mode 100644 index 00000000000..3fb756fdc13 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/app_out_lcd.c @@ -0,0 +1,498 @@ +/***************************************************************************//** + * @file + * @brief Application Output LCD code + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include +#include +#include "em_common.h" +#include "sl_status.h" +#include "sl_malloc.h" + +#include "app.h" +#include "app_log.h" +#include "app_btmesh_util.h" + +#include "sl_btmesh_api.h" + +#include "sl_btmesh_wstk_lcd.h" +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_provisioning_decorator.h" +#include "sl_btmesh_fw_distribution_server.h" + +struct dist_status { + uint16_t addr; + sl_btmesh_fw_dist_server_dist_node_phase_t phase; +} *dist_status = NULL; + +#define FIRST_DIST_PAGE 1 +#define FIRST_DIST_LINE 2 +#define NODES_PER_PAGE (LCD_ROW_MAX - FIRST_DIST_LINE + 1) + +// ----------------------------------------------------------------------------- +// Static function prototypes + +/***************************************************************************//** + * Display the number of FW images residing on the device. + * + * Update is needed when adding or deleting firmware images from distributor. + * + * @param[in] current_fw_list_length Length of the FW image list + * @param[in] max_fw_list_length Maximum length of the FW image list. Depends on + * bootloader storage configuration. + ******************************************************************************/ +static void lcd_print_dist_fw_list(uint16_t current_fw_list_length, + uint16_t max_fw_list_length); + +/***************************************************************************//** + * Display the number of nodes participating in the update. + * + * Update is needed when adding a node, removing nodes, or a node fails. + * + * @param[in] num_active_nodes Number of actively updating nodes + * @param[in] node_count Number of nodes that ever participated in the current + * update + ******************************************************************************/ +static void lcd_print_dist_node_list(uint16_t num_active_nodes, + uint16_t node_count); + +/***************************************************************************//** + * Display the state of the distribution. + * + * Updates the distribution state display in human readable form based on the + * state code. + * + * @param[in] state State of the distribution + ******************************************************************************/ +static void lcd_print_dist_state(uint8_t state); + +/***************************************************************************//** + * Display FW update progress in precentage. + * + * @param[in] progress Progress in percentage + * @param[in] node_count Number of nodes that ever participated in the current + * update + ******************************************************************************/ +static void lcd_print_dist_fw_update_progress(float progress, + uint16_t node_count); + +// ----------------------------------------------------------------------------- +// Factory Reset Callbacks + +/******************************************************************************* + * Shows factory full reset information + ******************************************************************************/ +void app_show_btmesh_factory_reset_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Factory reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Shows factory node reset information + ******************************************************************************/ +void app_show_btmesh_factory_reset_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Node reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +// ----------------------------------------------------------------------------- +// BT mesh Friend Node Callbacks + +/******************************************************************************* + * Called when the Friend Node establishes friendship with another node. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_established(uint16_t netkey_index, + uint16_t lpn_address) +{ + app_log("BT mesh Friendship established with LPN " + "(netkey idx: %u, lpn addr: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address); + sl_status_t status = sl_btmesh_LCD_write("FRIEND", + SL_BTMESH_WSTK_LCD_ROW_FRIEND_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)netkey_index; + (void)lpn_address; +} + +/******************************************************************************* + * Called when the friendship that was successfully established with a Low Power + * Node has been terminated. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + * @param[in] reason Reason for friendship termination + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_terminated(uint16_t netkey_index, + uint16_t lpn_address, + uint16_t reason) +{ + app_log("BT mesh Friendship terminated with LPN " + "(netkey idx: %d, lpn addr: 0x%04x, reason: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address, + reason); + sl_status_t status = sl_btmesh_LCD_write("NO LPN", + SL_BTMESH_WSTK_LCD_ROW_FRIEND_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)netkey_index; + (void)lpn_address; + (void)reason; +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called at node initialization time to provide provisioning information + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, started unprovisioned beaconing..." APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("unprovisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + } +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioning_started callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, result); + sl_status_t status = sl_btmesh_LCD_write("provisioning...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)result; +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioned callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + sl_status_t status = sl_btmesh_LCD_write("provisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + + (void)address; + (void)iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + sl_status_t status = sl_btmesh_LCD_write("prov failed...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)result; +} + +// ----------------------------------------------------------------------------- +// Firmware Distributor Server callbacks + +static void lcd_print_dist_fw_list(uint16_t current_fw_list_length, + uint16_t max_fw_list_length) +{ + char tmp_str[LCD_ROW_LEN]; + snprintf(tmp_str, + sizeof(tmp_str), + "Fw list: %d/%d", + current_fw_list_length, + max_fw_list_length); + + sl_status_t status = sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_DIST_FW_LIST_CFG_VAL); + + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +static void lcd_print_dist_node_list(uint16_t num_active_nodes, + uint16_t node_count) +{ + char tmp_str[LCD_ROW_LEN]; + snprintf(tmp_str, + sizeof(tmp_str), + "Dist node:%u/%u", + num_active_nodes, + node_count); + + sl_status_t status = sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_DIST_NODE_LIST_CFG_VAL); + + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +static void lcd_print_dist_state(uint8_t state) +{ + char tmp_str[LCD_ROW_LEN]; + + const char *state_string = + sl_btmesh_fw_distribution_server_distribution_state_to_string((sl_btmesh_fw_dist_server_dist_step_t) state); + + strncpy(tmp_str, state_string, LCD_ROW_LEN); + // Null termination is necessary if the string is truncated + tmp_str[LCD_ROW_LEN - 1] = '\0'; + + sl_status_t status = sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_DIST_STATE_CFG_VAL); + + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +static void lcd_print_dist_fw_update_progress(float progress, + uint16_t node_count) +{ + int integral = (int)progress; + int decimal = ((int)(progress * 10)) % 10; + char buffer[LCD_ROW_LEN] = { 0 }; + for (uint16_t i = 0; i < node_count; ++i) { + switch (dist_status[i].phase) { + case sl_btmesh_fw_dist_server_dist_node_phase_transfer_error: + case sl_btmesh_fw_dist_server_dist_node_phase_verification_failed: + // Empty + break; + default: + sprintf(buffer, + "x%04X: %3d.%01d%%", + dist_status[i].addr, + integral, + decimal); + sl_status_t status = + sl_btmesh_LCD_write_paged(buffer, + i % NODES_PER_PAGE + FIRST_DIST_LINE, + i / NODES_PER_PAGE + FIRST_DIST_PAGE); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + break; + } + } +} + +void sl_btmesh_fw_distribution_server_on_node_added(uint16_t elem_index, + uint16_t server_address, + uint8_t update_fw_image_idx, + uint16_t node_count) +{ + (void) elem_index; + (void) update_fw_image_idx; + char buffer[LCD_ROW_LEN] = { 0 }; + dist_status = sl_realloc(dist_status, node_count * sizeof(struct dist_status)); + dist_status[node_count - 1].addr = server_address; + dist_status[node_count - 1].phase = sl_btmesh_fw_dist_server_dist_node_phase_unknown; + sl_status_t status = + sl_btmesh_LCD_write_paged("Distribution", + 1, + (node_count / NODES_PER_PAGE) + FIRST_DIST_PAGE); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + sprintf(buffer, + "x%04X : -----", + dist_status[node_count - 1].addr); + status = + sl_btmesh_LCD_write_paged(buffer, + (node_count - 1) + % NODES_PER_PAGE + FIRST_DIST_LINE, + (node_count - 1) + / NODES_PER_PAGE + FIRST_DIST_PAGE); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + lcd_print_dist_node_list(node_count, node_count); +} + +void sl_btmesh_fw_distribution_server_on_all_nodes_deleted(uint16_t elem_index) +{ + (void) elem_index; + sl_free(dist_status); + dist_status = NULL; + lcd_print_dist_node_list(0, 0); +} + +void sl_btmesh_fw_distribution_server_on_distribution_state_changed(uint16_t elem_index, + sl_btmesh_fw_dist_server_dist_step_t state, + uint16_t num_active_nodes, + uint16_t node_count) +{ + (void) elem_index; + (void) num_active_nodes; + (void) node_count; + + lcd_print_dist_state(state); +} + +void sl_btmesh_fw_distribution_server_on_distribution_blob_progress_changed(uint16_t elem_index, + uint32_t confirmed_tx_bytes, + uint32_t blob_size, + uint16_t node_count) +{ + (void) elem_index; + float progress = SL_PROG_TO_PCT(blob_size, confirmed_tx_bytes); + + lcd_print_dist_fw_update_progress(progress, node_count); +} + +void sl_btmesh_fw_distribution_server_on_distribution_node_failed(uint16_t elem_index, + uint16_t server_address, + sl_btmesh_fw_dist_server_dist_node_phase_t update_phase, + sl_btmesh_fw_update_server_update_status_t update_status, + uint8_t mbt_status, + uint8_t progress, + uint8_t fw_index, + uint16_t num_active_nodes, + uint16_t node_count) +{ + (void) elem_index; (void) server_address; + (void) update_phase; (void) update_status; + (void) mbt_status; (void) progress; + (void) fw_index; + + char buffer[LCD_ROW_LEN] = { 0 }; + for (uint16_t i = 0; i < node_count; ++i) { + if (dist_status[i].addr == server_address) { + dist_status[i].phase = update_phase; + switch (dist_status[i].phase) { + case sl_btmesh_fw_dist_server_dist_node_phase_transfer_error: + sprintf(buffer, + "x%04X : transfer err.", + dist_status[i].addr); + break; + case sl_btmesh_fw_dist_server_dist_node_phase_verification_failed: + sprintf(buffer, + "x%04X : verif. failed", + dist_status[i].addr); + break; + default: + sprintf(buffer, + "x%04X : unknown err.", + dist_status[i].addr); + } + sl_btmesh_LCD_write_paged(buffer, + i % NODES_PER_PAGE + FIRST_DIST_LINE, + i / NODES_PER_PAGE + FIRST_DIST_PAGE); + } + } + lcd_print_dist_node_list(num_active_nodes, node_count); +} + +void sl_btmesh_fw_distribution_server_on_firmware_added(uint16_t elem_index, + uint16_t client_address, + uint32_t fw_size, + uint16_t fw_list_idx, + uint16_t current_fw_list_length, + uint16_t max_fw_list_length, + const uint8_t *fwid_data, + uint8_t fwid_length) +{ + (void) elem_index; + (void) client_address; + (void) fw_size; + (void) fw_list_idx; + (void) fwid_data; + (void) fwid_length; + + lcd_print_dist_fw_list(current_fw_list_length, max_fw_list_length); +} + +void sl_btmesh_fw_distribution_server_on_firmware_deleted(uint16_t elem_index, + uint16_t client_address, + uint16_t current_fw_list_length, + uint16_t max_fw_list_length, + const uint8_t *fwid_data, + uint8_t fwid_length) +{ + (void) elem_index; + (void) client_address; + (void) fwid_data; + (void) fwid_length; + lcd_print_dist_fw_list(current_fw_list_length, max_fw_list_length); +} + +void sl_btmesh_fw_distribution_server_on_all_firmware_deleted(uint16_t elem_index, + uint16_t client_address, + uint16_t max_fw_list_length) +{ + (void) elem_index; + (void) client_address; + lcd_print_dist_fw_list(0, max_fw_list_length); +} + +// ----------------------------------------------------------------------------- +// BLOB Transfer Server + +static void lcd_print_dist_upload_progress(float progress) +{ + char tmp_str[LCD_ROW_LEN]; + snprintf(tmp_str, + sizeof(tmp_str), + "Upload progress: %d%%", + (uint8_t) progress); + + sl_status_t status = + sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_DIST_UPLOAD_PROGRESS_CFG_VAL); + + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +void sl_btmesh_blob_transfer_server_transfer_start(sl_bt_uuid_64_t const *const blob_id) +{ + (void) blob_id; + lcd_print_dist_upload_progress(0.0); +} + +void sl_btmesh_blob_transfer_server_transfer_progress(sl_bt_uuid_64_t const *const blob_id, + float progress) +{ + (void) blob_id; + lcd_print_dist_upload_progress(progress); +} + +void sl_btmesh_blob_transfer_server_transfer_done(sl_bt_uuid_64_t const *const blob_id) +{ + (void) blob_id; + lcd_print_dist_upload_progress(100.0); +} diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/app_out_log.c b/app/btmesh/example/btmesh_soc_dfu_distributor/app_out_log.c new file mode 100644 index 00000000000..d555da052e7 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/app_out_log.c @@ -0,0 +1,149 @@ +/***************************************************************************//** + * @file + * @brief Application Output Log code + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#include +#include "em_common.h" + +#include "app.h" +#include "app_log.h" + +#include "sl_btmesh_api.h" + +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_provisioning_decorator.h" + +// ----------------------------------------------------------------------------- +// Factory Reset Callbacks + +/******************************************************************************* + * Shows factory full reset information + ******************************************************************************/ +void app_show_btmesh_factory_reset_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); +} + +/******************************************************************************* + * Shows factory node reset information + ******************************************************************************/ +void app_show_btmesh_factory_reset_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); +} + +// ----------------------------------------------------------------------------- +// BT mesh Friend Node Callbacks + +/******************************************************************************* + * Called when the Friend Node establishes friendship with another node. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_established(uint16_t netkey_index, + uint16_t lpn_address) +{ + app_log("BT mesh Friendship established with LPN " + "(netkey idx: %u, lpn addr: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address); + (void)netkey_index; + (void)lpn_address; +} + +/******************************************************************************* + * Called when the friendship that was successfully established with a Low Power + * Node has been terminated. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + * @param[in] reason Reason for friendship termination + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_terminated(uint16_t netkey_index, + uint16_t lpn_address, + uint16_t reason) +{ + app_log("BT mesh Friendship terminated with LPN " + "(netkey idx: %d, lpn addr: 0x%04x, reason: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address, + reason); + (void)netkey_index; + (void)lpn_address; + (void)reason; +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called at node initialization time to provide provisioning information + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, started unprovisioned beaconing..." APP_LOG_NL); + } +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioning_started callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, result); + (void)result; +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioned callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + (void)address; + (void)iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + (void)result; +} diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_display.slcp b/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_display.slcp new file mode 100644 index 00000000000..9a5c95912cc --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_display.slcp @@ -0,0 +1,150 @@ +project_name: btmesh_soc_dfu_distributor +package: Btmesh +label: Bluetooth Mesh - SoC DFU Distributor +description: > + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. + Distributor is responsible for delivering new firmware images to the Updating nodes + and monitoring the progress of the firmware update. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_btmesh_util + - id: app_button_press + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_distributor + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_stack_sar_config_server + - id: btmesh_friend + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_dfu_distributor/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_dfu_distributor/readme_img0.png + +configuration: + - name: APP_LOG_LEVEL + value: APP_LOG_LEVEL_INFO + - name: BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG + value: 0xD + - name: BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK + value: 64 + - name: SL_BOARD_ENABLE_DISPLAY + value: 1 + - name: SL_BOARD_ENABLE_VCOM + value: 1 + condition: + - iostream_usart + - name: SL_BT_CONFIG_BUFFER_SIZE + value: 12600 + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmdist_v1"' + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: 0xA000 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: 0 + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: 1 + - name: SL_STACK_SIZE + value: 0x1400 + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: Prints info about BT address and mesh UUID + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:768 + - hardware:device:ram:96 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_display_eusart.slcp b/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_display_eusart.slcp new file mode 100644 index 00000000000..50d29cd04f6 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_display_eusart.slcp @@ -0,0 +1,156 @@ +project_name: btmesh_soc_dfu_distributor +package: Btmesh +label: Bluetooth Mesh - SoC DFU Distributor +description: > + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. + Distributor is responsible for delivering new firmware images to the Updating nodes + and monitoring the progress of the firmware update. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_btmesh_util + - id: app_button_press + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_distributor + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_stack_sar_config_server + - id: btmesh_friend + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: memlcd_usart + - id: mpu + - id: mx25_flash_shutdown_usart + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_dfu_distributor/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_dfu_distributor/readme_img0.png + +configuration: + - name: APP_LOG_LEVEL + value: APP_LOG_LEVEL_INFO + - name: BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG + value: 0xD + - name: BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK + value: 64 + - name: SL_BOARD_ENABLE_DISPLAY + value: 1 + - name: SL_BOARD_ENABLE_VCOM + value: 1 + condition: + - iostream_eusart + - name: SL_BT_CONFIG_BUFFER_SIZE + value: 12600 + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmdist_v1"' + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: 0xA000 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: 0 + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: 1 + - name: SL_STACK_SIZE + value: 0x1400 + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: Prints info about BT address and mesh UUID + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:768 + - hardware:device:ram:96 + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_log.slcp b/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_log.slcp new file mode 100644 index 00000000000..78ec22973df --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_log.slcp @@ -0,0 +1,144 @@ +project_name: btmesh_soc_dfu_distributor +package: Btmesh +label: Bluetooth Mesh - SoC DFU Distributor +description: > + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. + Distributor is responsible for delivering new firmware images to the Updating nodes + and monitoring the progress of the firmware update. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_button_press + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_distributor + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_stack_sar_config_server + - id: btmesh_friend + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_dfu_distributor/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_dfu_distributor/readme_img0.png + +configuration: + - name: APP_LOG_LEVEL + value: APP_LOG_LEVEL_INFO + - name: BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG + value: 0xD + - name: BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK + value: 64 + - name: SL_BOARD_ENABLE_VCOM + value: 1 + condition: + - iostream_usart + - name: SL_BT_CONFIG_BUFFER_SIZE + value: 12600 + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: 3 + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmdist_v1"' + - name: SL_HEAP_SIZE + value: 0xA000 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: 0 + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: 1 + - name: SL_STACK_SIZE + value: 0x1400 + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: Prints info about BT address and mesh UUID + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:768 + - hardware:device:ram:96 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_log_eusart.slcp b/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_log_eusart.slcp new file mode 100644 index 00000000000..55861293433 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/btmesh_soc_dfu_distributor_log_eusart.slcp @@ -0,0 +1,149 @@ +project_name: btmesh_soc_dfu_distributor +package: Btmesh +label: Bluetooth Mesh - SoC DFU Distributor +description: > + Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. + Distributor is responsible for delivering new firmware images to the Updating nodes + and monitoring the progress of the firmware update. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_button_press + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_distributor + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_stack_sar_config_server + - id: btmesh_friend + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: mpu + - id: mx25_flash_shutdown_usart + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_dfu_distributor/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_dfu_distributor/readme_img0.png + +configuration: + - name: APP_LOG_LEVEL + value: APP_LOG_LEVEL_INFO + - name: BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG + value: 0xD + - name: BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK + value: 64 + - name: SL_BOARD_ENABLE_VCOM + value: 1 + condition: + - iostream_eusart + - name: SL_BT_CONFIG_BUFFER_SIZE + value: 12600 + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: 3 + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmdist_v1"' + - name: SL_HEAP_SIZE + value: 0xA000 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: 0 + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: 1 + - name: SL_STACK_SIZE + value: 0x1400 + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: Prints info about BT address and mesh UUID + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:768 + - hardware:device:ram:96 + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_dfu_distributor/dcd_config.btmeshconf new file mode 100644 index 00000000000..f4f3c039aec --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/dcd_config.btmeshconf @@ -0,0 +1,17 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x000c", + "vid": "0x0420", + "elements": [ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0000", "name":"Configuration Server"}, + {"mid":"0x0002", "name":"Health Server"} + ] + } + ] + } +} \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/gatt_configuration.btconf b/app/btmesh/example/btmesh_soc_dfu_distributor/gatt_configuration.btconf new file mode 100644 index 00000000000..c2caec5325d --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/gatt_configuration.btconf @@ -0,0 +1,48 @@ + + + + + Abstract: The generic_access service contains generic information about the device. All available Characteristics are readonly. + + + dfu distributor node + + + + Abstract: The external appearance of this device. The values are composed of a category (10-bits) and sub-categories (6-bits). + 0000 + + + + + Abstract: The Device Information Service exposes manufacturer and/or vendor information about a device. Summary: This service exposes manufacturer information about a device. The Device Information Service is instantiated as a Primary Service. Only one instance of the Device Information Service is exposed on a device. + + Abstract: The value of this characteristic is a UTF-8 string representing the name of the manufacturer of the device. + Silicon Labs + + + + + + Abstract: The value of this characteristic is a UTF-8 string representing the model number assigned by the device vendor. + 00000000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the hardware revision for the hardware within the device. + 000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the firmware revision for the firmware within the device. + 0.0.0 + + + + Abstract: The SYSTEM ID characteristic consists of a structure with two fields. The first field are the LSOs and the second field contains the MSOs. This is a 64-bit structure which consists of a 40-bit manufacturer-defined identifier concatenated with a 24 bit unique Organizationally Unique Identifier (OUI). The OUI is issued by the IEEE Registration Authority (http://standards.ieee.org/regauth/index.html) and is required to be used in accordance with IEEE Standard 802-2001.6 while the least significant 40 bits are manufacturer defined. If System ID generated based on a Bluetooth Device Address, it is required to be done as follows. System ID and the Bluetooth Device Address have a very similar structure: a Bluetooth Device Address is 48 bits in length and consists of a 24 bit Company Assigned Identifier (manufacturer defined identifier) concatenated with a 24 bit Company Identifier (OUI). In order to encapsulate a Bluetooth Device Address as System ID, the Company Identifier is concatenated with 0xFFFE followed by the Company Assigned Identifier of the Bluetooth Address. For more guidelines related to EUI-64, refer to http://standards.ieee.org/develop/regauth/tut/eui64.pdf. Examples: If the system ID is based of a Bluetooth Device Address with a Company Identifier (OUI) is 0x123456 and the Company Assigned Identifier is 0x9ABCDE, then the System Identifier is required to be 0x123456FFFE9ABCDE. + + + + + + diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/local_cli_commands.c b/app/btmesh/example/btmesh_soc_dfu_distributor/local_cli_commands.c new file mode 100644 index 00000000000..ca900c4a728 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/local_cli_commands.c @@ -0,0 +1,85 @@ +/***************************************************************************//** + * @file + * @brief CLI commands file + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_CLI_PRESENT +#include "sl_btmesh.h" +#include "sl_bluetooth.h" +#include "sl_cli.h" +#include "app_log.h" +#include "app_assert.h" + +/***************************************************************************//** + * CLI Command to read BT Address and mesh UUID. + ******************************************************************************/ +void info(sl_cli_command_arg_t *arguments) +{ + (void) arguments; + bd_addr address; + uint8_t address_type; + uuid_128 uuid; + + sl_status_t sc = sl_bt_system_get_identity_address(&address, &address_type); + app_assert_status_f(sc, "Failed to get Bluetooth address"); + app_log("Bluetooth %s address: %02X:%02X:%02X:%02X:%02X:%02X" APP_LOG_NL, + address_type ? "static random" : "public device", + address.addr[5], + address.addr[4], + address.addr[3], + address.addr[2], + address.addr[1], + address.addr[0]); + + sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get Bluetooth mesh uuid"); + app_log("Bluetooth mesh UUID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X" + "%02X%02X%02X%02X%02X" APP_LOG_NL, + uuid.data[0], + uuid.data[1], + uuid.data[2], + uuid.data[3], + uuid.data[4], + uuid.data[5], + uuid.data[6], + uuid.data[7], + uuid.data[8], + uuid.data[9], + uuid.data[10], + uuid.data[11], + uuid.data[12], + uuid.data[13], + uuid.data[14], + uuid.data[15]); +} + +#endif // SL_CATALOG_CLI_PRESENT diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/main.c b/app/btmesh/example/btmesh_soc_dfu_distributor/main.c new file mode 100644 index 00000000000..24820bdc796 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_dfu_distributor/main.c @@ -0,0 +1,71 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif // SL_CATALOG_POWER_MANAGER_PRESENT +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} diff --git a/app/btmesh/example/btmesh_soc_empty/app.c b/app/btmesh/example/btmesh_soc_empty/app.c new file mode 100644 index 00000000000..be351bd7939 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_empty/app.c @@ -0,0 +1,99 @@ +/***************************************************************************//** + * @file + * @brief Core application logic. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "em_common.h" +#include "app_assert.h" +#include "sl_status.h" +#include "app.h" + +#include "sl_btmesh_api.h" +#include "sl_bt_api.h" + +/**************************************************************************//** + * Application Init. + *****************************************************************************/ +SL_WEAK void app_init(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application init code here! // + // This is called once during start-up. // + ///////////////////////////////////////////////////////////////////////////// +} + +/**************************************************************************//** + * Application Process Action. + *****************************************************************************/ +SL_WEAK void app_process_action(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application code here! // + // This is called infinitely. // + // Do not call blocking functions from here! // + ///////////////////////////////////////////////////////////////////////////// +} + +/**************************************************************************//** + * Bluetooth stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Event coming from the Bluetooth stack. + *****************************************************************************/ +void sl_bt_on_event(struct sl_bt_msg *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + /////////////////////////////////////////////////////////////////////////// + // Add additional event handlers here as your application requires! // + /////////////////////////////////////////////////////////////////////////// + + // ------------------------------- + // Default event handler. + default: + break; + } +} + +/**************************************************************************//** + * Bluetooth Mesh stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Event coming from the Bluetooth Mesh stack. + *****************************************************************************/ +void sl_btmesh_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + /////////////////////////////////////////////////////////////////////////// + // Add additional event handlers here as your application requires! // + /////////////////////////////////////////////////////////////////////////// + + // ------------------------------- + // Default event handler. + default: + break; + } +} diff --git a/app/btmesh/example/btmesh_soc_empty/app.h b/app/btmesh/example/btmesh_soc_empty/app.h new file mode 100644 index 00000000000..4f385da9929 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_empty/app.h @@ -0,0 +1,44 @@ +/***************************************************************************//** + * @file + * @brief Application interface provided to main(). + ******************************************************************************* + * # 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 APP_H +#define APP_H + +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +void app_init(void); + +/***************************************************************************//** + * Application Process Action. + ******************************************************************************/ +void app_process_action(void); + +#endif // APP_H diff --git a/app/btmesh/example/btmesh_soc_empty/btmesh_soc_empty.slcp b/app/btmesh/example/btmesh_soc_empty/btmesh_soc_empty.slcp new file mode 100644 index 00000000000..eb20c5f01d5 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_empty/btmesh_soc_empty.slcp @@ -0,0 +1,85 @@ +project_name: btmesh_soc_empty +package: Btmesh +label: Bluetooth Mesh - SoC Empty +description: > + Demonstrates the bare minimum needed for a Bluetooth Mesh C application. + The application starts Unprovisioned Device Beaconing after booting, and + then waits to be provisioned. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Beginner"] + +component: + - id: app_assert + - id: bootloader_interface + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_node + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_proxy + - id: btmesh_stack + - id: mpu + - id: rail_util_pti + +source: + - path: app.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_empty/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_empty/readme_img0.png + - path: ../../documentation/example/btmesh_soc_empty/readme_img1.png + - path: ../../documentation/example/btmesh_soc_empty/readme_img2.png + - path: ../../documentation/example/btmesh_soc_empty/readme_img3.png + - path: ../../documentation/example/btmesh_soc_empty/readme_img4.png + - path: ../../documentation/example/btmesh_soc_empty/readme_img5.png + +configuration: + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1200" + +tag: + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:rf:band:2400 + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_empty/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_empty/dcd_config.btmeshconf new file mode 100644 index 00000000000..1d60567ad09 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_empty/dcd_config.btmeshconf @@ -0,0 +1,17 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x0001", + "vid": "0x0420", + "elements": [ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0000", "name":"Configuration Server"}, + {"mid":"0x0002", "name":"Health Server"} + ] + } + ] + } +} \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_empty/main.c b/app/btmesh/example/btmesh_soc_empty/main.c new file mode 100644 index 00000000000..939ed36f5d9 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_empty/main.c @@ -0,0 +1,71 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif // SL_CATALOG_POWER_MANAGER_PRESENT +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} diff --git a/app/btmesh/example/btmesh_soc_empty_cbp/app.c b/app/btmesh/example/btmesh_soc_empty_cbp/app.c new file mode 100644 index 00000000000..ca1afa990e1 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_empty_cbp/app.c @@ -0,0 +1,100 @@ +/***************************************************************************//** + * @file + * @brief Core application logic. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "em_common.h" +#include "app_assert.h" +#include "app_log.h" +#include "sl_status.h" +#include "app.h" + +#include "sl_btmesh_api.h" +#include "sl_bt_api.h" + +/**************************************************************************//** + * Application Init. + *****************************************************************************/ +SL_WEAK void app_init(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application init code here! // + // This is called once during start-up. // + ///////////////////////////////////////////////////////////////////////////// +} + +/**************************************************************************//** + * Application Process Action. + *****************************************************************************/ +SL_WEAK void app_process_action(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application code here! // + // This is called infinitely. // + // Do not call blocking functions from here! // + ///////////////////////////////////////////////////////////////////////////// +} + +/**************************************************************************//** + * Bluetooth stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Event coming from the Bluetooth stack. + *****************************************************************************/ +void sl_bt_on_event(struct sl_bt_msg *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + /////////////////////////////////////////////////////////////////////////// + // Add additional event handlers here as your application requires! // + /////////////////////////////////////////////////////////////////////////// + + // ------------------------------- + // Default event handler. + default: + break; + } +} + +/**************************************************************************//** + * Bluetooth Mesh stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Event coming from the Bluetooth Mesh stack. + *****************************************************************************/ +void sl_btmesh_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + /////////////////////////////////////////////////////////////////////////// + // Add additional event handlers here as your application requires! // + /////////////////////////////////////////////////////////////////////////// + + // ------------------------------- + // Default event handler. + default: + break; + } +} diff --git a/app/btmesh/example/btmesh_soc_empty_cbp/app.h b/app/btmesh/example/btmesh_soc_empty_cbp/app.h new file mode 100644 index 00000000000..e2e9d2d64fe --- /dev/null +++ b/app/btmesh/example/btmesh_soc_empty_cbp/app.h @@ -0,0 +1,44 @@ +/***************************************************************************//** + * @file + * @brief Application interface provided to main(). + ******************************************************************************* + * # 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 APP_H +#define APP_H + +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +void app_init(void); + +/***************************************************************************//** + * Application Process Action. + ******************************************************************************/ +void app_process_action(void); + +#endif // APP_H diff --git a/app/btmesh/example/btmesh_soc_empty_cbp/btmesh_soc_empty_cbp.slcp b/app/btmesh/example/btmesh_soc_empty_cbp/btmesh_soc_empty_cbp.slcp new file mode 100644 index 00000000000..dd49e6648b6 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_empty_cbp/btmesh_soc_empty_cbp.slcp @@ -0,0 +1,102 @@ +project_name: btmesh_soc_empty_cbp +package: Btmesh +label: Bluetooth Mesh - SoC Empty with Certificate-Based Provisioning support +description: > + Demonstrates the bare minimum needed for a Bluetooth Mesh C application that + allows Certificate-Based Provisioning (CBP). The application starts Unprovisioned + Device Beaconing after boot waiting to be provisioned to a Mesh Network. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Beginner"] + +component: + - id: app_assert + - id: app_log + - id: bootloader_interface + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_node + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_proxy + - id: btmesh_stack + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + +source: + - path: app.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_empty_cbp/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_empty_cbp/readme_img0.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - iostream_usart + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_PROVISIONEE_INIT_PROV_RECORDS_CFG_VAL + value: 1 + - name: SL_BTMESH_PROVISIONEE_OOB_ENABLE_CFG_VAL + value: 1 + - name: SL_BTMESH_PROVISIONEE_OOB_PUBLIC_KEY_ENABLE_CFG_VAL + value: 1 + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_IOSTREAM_USART_VCOM_RESTRICT_ENERGY_MODE_TO_ALLOW_RECEPTION + value: "0" + - name: SL_PSA_ITS_SUPPORT_V2_DRIVER + value: "1" + - name: SL_PSA_ITS_SUPPORT_V3_DRIVER + value: "0" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1000" + +tag: + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:rf:band:2400 + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_empty_cbp/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_empty_cbp/dcd_config.btmeshconf new file mode 100644 index 00000000000..f4f3c039aec --- /dev/null +++ b/app/btmesh/example/btmesh_soc_empty_cbp/dcd_config.btmeshconf @@ -0,0 +1,17 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x000c", + "vid": "0x0420", + "elements": [ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0000", "name":"Configuration Server"}, + {"mid":"0x0002", "name":"Health Server"} + ] + } + ] + } +} \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_empty_cbp/main.c b/app/btmesh/example/btmesh_soc_empty_cbp/main.c new file mode 100644 index 00000000000..cd1adbeee91 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_empty_cbp/main.c @@ -0,0 +1,71 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif // SL_CATALOG_POWER_MANAGER_PRESENT +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} diff --git a/app/btmesh/example/btmesh_soc_hsl/app.c b/app/btmesh/example/btmesh_soc_hsl/app.c new file mode 100644 index 00000000000..8ae170c174a --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/app.c @@ -0,0 +1,307 @@ +/***************************************************************************//** + * @file app.c + * @brief Application code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include +#include "em_common.h" +#include "sl_status.h" + +#include "sl_btmesh.h" +#include "sl_bluetooth.h" +#include "app.h" +#include "app_assert.h" +#include "app_log.h" + +#include "gatt_db.h" + +#include "sl_simple_timer.h" + +/* Buttons and LEDs headers */ +#include "sl_simple_button_instances.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#include "sl_btmesh_wstk_lcd.h" +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +#include "app_btmesh_util.h" + +/* Light app headers */ +#include "sl_btmesh_hsl_server_config.h" +#include "sl_btmesh_lighting_server_config.h" +#include "sl_btmesh_lc_server_config.h" +#include "sl_btmesh_factory_reset.h" + +#include "app_led.h" +#include "sl_btmesh_provisioning_decorator.h" + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#define lcd_print(...) sl_btmesh_LCD_write(__VA_ARGS__) +#else +#define lcd_print(...) +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +/// High Priority +#define HIGH_PRIORITY 0 +/// No Timer Options +#define NO_FLAGS 0 +/// Callback has no parameters +#define NO_CALLBACK_DATA (void *)NULL +/// Timeout for Blinking LED during provisioning +#define APP_LED_BLINKING_TIMEOUT 250 +/// LED switched off (lightness = 0) +#define LED_LEVEL_OFF 0 +/// Length of the display name buffer +#define NAME_BUF_LEN 20 +/// Length of boot error message buffer +#define BOOT_ERR_MSG_BUF_LEN 30 +// periodic timer handle +static sl_simple_timer_t app_led_blinking_timer; + +// periodic timer callback +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, void *data); +// Handles button press and does a factory reset +static bool handle_reset_conditions(void); + +/******************************************************************************* + * Global variables + ******************************************************************************/ +/// number of active Bluetooth connections +static uint8_t num_connections = 0; + +static bool init_done = false; + +/******************************************************************************* + * Application Init. + ******************************************************************************/ +SL_WEAK void app_init(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application init code here! // + // This is called once during start-up. // + ///////////////////////////////////////////////////////////////////////////// + app_log("BT mesh Light initialized" APP_LOG_NL); + app_led_init(); + handle_reset_conditions(); +} + +/******************************************************************************* + * Application Process Action. + ******************************************************************************/ +SL_WEAK void app_process_action(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application code here! // + // This is called infinitely. // + // Do not call blocking functions from here! // + ///////////////////////////////////////////////////////////////////////////// +} + +/***************************************************************************//** + * Set device name in the GATT database. A unique name is generated using + * the two last bytes from the UUID of this device. Name is also + * displayed on the LCD if present. + * + * @param[in] uuid Pointer to device UUID. + ******************************************************************************/ +static void set_device_name(uuid_128 *uuid) +{ + char name[NAME_BUF_LEN]; + sl_status_t result; + + // Create unique device name using the last two bytes of the device UUID + snprintf(name, NAME_BUF_LEN, "hsl node %02x%02x", + uuid->data[14], uuid->data[15]); + + app_log("Device name: '%s'" APP_LOG_NL, name); + + result = sl_bt_gatt_server_write_attribute_value(gattdb_device_name, + 0, + strlen(name), + (uint8_t *)name); + app_log_status_error_f(result, + "sl_bt_gatt_server_write_attribute_value() failed" APP_LOG_NL); + + // Show device name on the LCD + lcd_print(name, SL_BTMESH_WSTK_LCD_ROW_NAME_CFG_VAL); +} + +/***************************************************************************//** + * Handles button press and does a factory reset + * + * @return true if there is no button press + ******************************************************************************/ +static bool handle_reset_conditions(void) +{ + // If PB0 is held down then do full factory reset + if (sl_simple_button_get_state(&sl_button_btn0) + == SL_SIMPLE_BUTTON_PRESSED) { + // Full factory reset + sl_btmesh_initiate_full_reset(); + return false; + } + +#ifndef SINGLE_BUTTON + // If PB1 is held down then do node factory reset + if (sl_simple_button_get_state(&sl_button_btn1) + == SL_SIMPLE_BUTTON_PRESSED) { + // Node factory reset + sl_btmesh_initiate_node_reset(); + return false; + } +#endif // SL_CATALOG_BTN1_PRESENT + return true; +} + +/***************************************************************************//** + * Handling of le stack events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_bt_on_event(sl_bt_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_bt_evt_connection_opened_id: + num_connections++; + lcd_print("connected", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Connected" APP_LOG_NL); + break; + + case sl_bt_evt_connection_closed_id: + if (num_connections > 0) { + if (--num_connections == 0) { + lcd_print("", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Disconnected" APP_LOG_NL); + } + } + break; + + default: + break; + } +} + +/***************************************************************************//** + * Callbacks + ******************************************************************************/ + +/***************************************************************************//** + * Handling of provisionee init result + ******************************************************************************/ +void sl_btmesh_provisionee_on_init(sl_status_t result) +{ + if (SL_STATUS_OK != result) { + char buf[BOOT_ERR_MSG_BUF_LEN]; + snprintf(buf, sizeof(buf), "init failed (0x%lx)", result); + lcd_print(buf, SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + } else { + uuid_128 uuid; + sl_status_t sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get UUID"); + set_device_name(&uuid); + } +} + +/***************************************************************************//** + * Provisioning Decorator Callbacks + ******************************************************************************/ +// Called when the Provisioning starts +void sl_btmesh_on_node_provisioning_started(uint16_t result) +{ + // Change buttons to LEDs in case of shared pin + app_led_change_buttons_to_leds(); + + sl_status_t sc = sl_simple_timer_start(&app_led_blinking_timer, + APP_LED_BLINKING_TIMEOUT, + app_led_blinking_timer_cb, + NO_CALLBACK_DATA, + true); + + app_assert_status_f(sc, "Failed to start periodic timer"); + + app_show_btmesh_node_provisioning_started(result); +} + +// Called when the Provisioning finishes successfully +void sl_btmesh_on_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + sl_status_t sc = sl_simple_timer_stop(&app_led_blinking_timer); + app_assert_status_f(sc, "Failed to stop periodic timer"); + // Turn off LED + init_done = true; + app_led_set_level(LED_LEVEL_OFF); + + app_show_btmesh_node_provisioned(address, iv_index); +} + +/***************************************************************************//** + * Timer Callbacks + ******************************************************************************/ +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + if (!init_done) { + // Toggle LEDs + static uint16_t level = 0; + level = app_led_get_max() - level; + app_led_set_level(level); + } +} + +void sl_btmesh_lighting_level_pwm_cb(uint16_t level) +{ + app_led_set_level(level); +} + +void sl_btmesh_hsl_hue_cb(uint16_t hue) +{ + app_led_set_hue(hue); +} + +void sl_btmesh_hsl_saturation_cb(uint16_t saturation) +{ + app_led_set_saturation(saturation); +} + +/***************************************************************************//** + * Factory reset Callbacks + ******************************************************************************/ +void sl_btmesh_factory_reset_on_node_reset(void) +{ + app_show_btmesh_node_reset(); + sl_bt_nvm_erase(SL_BTMESH_LIGHTING_SERVER_PS_KEY_CFG_VAL); + sl_bt_nvm_erase(SL_BTMESH_HSL_SERVER_PS_KEY_CFG_VAL); + sl_bt_nvm_erase(SL_BTMESH_LC_SERVER_PS_KEY_CFG_VAL); + sl_bt_nvm_erase(SL_BTMESH_LC_SERVER_PROPERTY_PS_KEY_CFG_VAL); +} diff --git a/app/btmesh/example/btmesh_soc_hsl/app.h b/app/btmesh/example/btmesh_soc_hsl/app.h new file mode 100644 index 00000000000..9a49470e288 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/app.h @@ -0,0 +1,69 @@ +/***************************************************************************//** + * @file + * @brief Application interface provided to main(). + ******************************************************************************* + * # 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 APP_H +#define APP_H + +#include + +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +void app_init(void); + +/***************************************************************************//** + * Application Process Action. + ******************************************************************************/ +void app_process_action(void); + +/***************************************************************************//** + * Shows the provisioning start information + * + * @param[in] result Result code. 0: success, non-zero: error + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result); + +/******************************************************************************* + * Called when the Provisioning finishes successfully + * + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index); + +/***************************************************************************//** + * Shows the node reset information + ******************************************************************************/ +void app_show_btmesh_node_reset(void); + +#endif // APP_H diff --git a/app/btmesh/example/btmesh_soc_hsl/app_led.c b/app/btmesh/example/btmesh_soc_hsl/app_led.c new file mode 100644 index 00000000000..641a0c9c1d9 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/app_led.c @@ -0,0 +1,135 @@ +/***************************************************************************//** + * @file + * @brief LED Application code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "app_led.h" +#include "sl_btmesh.h" +#include "sl_btmesh_lighting_server.h" +#include "sl_btmesh_lighting_server_config.h" +#include "sl_pwm_init_led0_config.h" +#include "sl_pwm_init_led1_config.h" + +#include "sl_pwm.h" +#include "sl_pwm_instances.h" +#include "sl_simple_button.h" +#include "sl_simple_button_instances.h" + +// ----------------------------------------------------------------------------- +// Definitions + +/// 100% PWM duty cycle +#define PWM_MAX_DUTY_CYCLE 100 + +// ----------------------------------------------------------------------------- +// Public function definitions + +/******************************************************************************* + * Sets the lightness level of the LED. + * + * @param[in] level lightness level (0-65535) + * + ******************************************************************************/ +void app_led_set_level(uint16_t level) +{ + uint16_t pwm_duty_cycle = (uint16_t)((uint32_t)level * PWM_MAX_DUTY_CYCLE + / SL_BTMESH_LIGHTING_SERVER_PWM_MAXIMUM_BRIGHTNESS_CFG_VAL); + + if (pwm_duty_cycle > PWM_MAX_DUTY_CYCLE) { + pwm_duty_cycle = PWM_MAX_DUTY_CYCLE; + } + sl_pwm_set_duty_cycle(&sl_pwm_led0, pwm_duty_cycle); + sl_pwm_set_duty_cycle(&sl_pwm_led1, pwm_duty_cycle); +} + +/******************************************************************************* + * Sets the hue of the LED if present. + * + * @param[in] hue hue level (0-65535) + * + ******************************************************************************/ +void app_led_set_hue(uint16_t hue) +{ + (void)hue; +} + +/******************************************************************************* + * Sets the saturation of the LED if present. + * + * @param[in] saturation saturation level (0-65535) + * + ******************************************************************************/ +void app_led_set_saturation(uint16_t saturation) +{ + (void)saturation; +} + +/******************************************************************************* + * Gets the maximum lightness value + * + * @return maximum lightness value. + ******************************************************************************/ +uint16_t app_led_get_max(void) +{ + return SL_BTMESH_LIGHTING_SERVER_PWM_MAXIMUM_BRIGHTNESS_CFG_VAL; +} + +/******************************************************************************* + * Init LED drivers + * + ******************************************************************************/ +void app_led_init(void) +{ + // Enable PWM output + sl_pwm_start(&sl_pwm_led0); + // Enable PWM output + sl_pwm_start(&sl_pwm_led1); +} + +/******************************************************************************* + * Change buttons to leds in case of shared pin + * + ******************************************************************************/ +void app_led_change_buttons_to_leds(void) +{ + sl_simple_button_disable(&sl_button_btn0); + sl_pwm_config_t pwm_led0_config = { + .frequency = SL_PWM_LED0_FREQUENCY, + .polarity = SL_PWM_LED0_POLARITY, + }; + sl_pwm_init(&sl_pwm_led0, &pwm_led0_config); + sl_pwm_start(&sl_pwm_led0); + sl_simple_button_disable(&sl_button_btn1); + + sl_pwm_config_t pwm_led1_config = { + .frequency = SL_PWM_LED1_FREQUENCY, + .polarity = SL_PWM_LED1_POLARITY, + }; + sl_pwm_init(&sl_pwm_led1, &pwm_led1_config); + sl_pwm_start(&sl_pwm_led1); +} diff --git a/app/btmesh/example/btmesh_soc_hsl/app_led.h b/app/btmesh/example/btmesh_soc_hsl/app_led.h new file mode 100644 index 00000000000..14206ab4a41 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/app_led.h @@ -0,0 +1,79 @@ +/***************************************************************************//** + * @file + * @brief Application interface for LEDs + ******************************************************************************* + * # 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 APP_LED_H +#define APP_LED_H + +#include + +/***************************************************************************//** + * Sets the lightness level of the LED. + * + * @param[in] level lightness level (0-65535) + * + ******************************************************************************/ +void app_led_set_level(uint16_t level); + +/***************************************************************************//** + * Sets the hue of the LED if present. + * + * @param[in] hue hue level (0-65535) + * + ******************************************************************************/ +void app_led_set_hue(uint16_t hue); + +/***************************************************************************//** + * Sets the saturation of the LED if present. + * + * @param[in] saturation saturation level (0-65535) + * + ******************************************************************************/ +void app_led_set_saturation(uint16_t saturation); + +/***************************************************************************//** + * Gets the maximum lightness value + * + * @return maximum lightness value. + ******************************************************************************/ +uint16_t app_led_get_max(void); + +/***************************************************************************//** + * Init LED drivers + * + ******************************************************************************/ +void app_led_init(void); + +/***************************************************************************//** + * Change buttons to leds in case of shared pin + * + ******************************************************************************/ +void app_led_change_buttons_to_leds(void); + +#endif // APP_LED_H diff --git a/app/btmesh/example/btmesh_soc_hsl/app_led_rgb.c b/app/btmesh/example/btmesh_soc_hsl/app_led_rgb.c new file mode 100644 index 00000000000..1cdfbda60e6 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/app_led_rgb.c @@ -0,0 +1,235 @@ +/***************************************************************************//** + * @file + * @brief LED Application code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "app_led.h" +#include "sl_btmesh.h" +#include "sl_btmesh_lighting_server.h" +#include "sl_btmesh_lighting_server_config.h" +#include "sl_btmesh_hsl_server.h" +#include + +#ifdef SL_BTMESH_HSL_RGB_BRD4166 +#include "rgbled_brd4166.h" +#elif SL_BTMESH_HSL_RGB_BRD2601 +#include "rgbled_brd2601.h" +#endif + +// ----------------------------------------------------------------------------- +// Definitions + +#define RGB_LED_MASK 0xF // Use all LEDs + +// ----------------------------------------------------------------------------- +// Type definitions + +typedef struct { + uint8_t R; ///< Red value + uint8_t G; ///< Green value + uint8_t B; ///< Blue value +}RGB_t; + +// ----------------------------------------------------------------------------- +// Private variables + +static uint16_t light_level = 0; +static uint16_t hue_level = 0; +static uint16_t saturation_level = 0; + +// ----------------------------------------------------------------------------- +// Private function declaration + +/******************************************************************************* + * Set LED color based on lightness and temperature. + * + * @param[in] m LED instance mask + * @param[in] level Lightness level. + * @param[in] hue Hue level. + * @param[in] saturation Saturation level. + ******************************************************************************/ +static void rgb_led_set(uint8_t m, uint16_t level, uint16_t hue, uint16_t saturation); + +/***************************************************************************//** + * Helper function for calculating RGB values from hue using helper variables. + * If hue value passed to the function is increased by 1/3 it returns red value. + * If hue value passed to the function is unchanged it returns green value. + * If hue value passed to the function is decreased by 1/3 it returns blue value. + * + * @param[in] v1 First helper variable (range 0 to 1). + * @param[in] v2 Second helper variable (range 0 to 1). + * @param[in] vH Hue value. + * + * @return Value of red or green or blue. + ******************************************************************************/ +static double Hue_to_RGB(double v1, double v2, double vH); + +/***************************************************************************//** + * Convert color from HSL space to RGB space + * + * @param[in] hue Hue value. + * @param[in] saturation Saturation value. + * @param[in] lightness Lightness value. + * + * @return RGB color converted from HSL space. + ******************************************************************************/ +static RGB_t HSL_to_RGB(uint16_t hue, uint16_t saturation, uint16_t lightness); + +// ----------------------------------------------------------------------------- +// Public function definitions + +/******************************************************************************* + * Sets the lightness level of the LED. + * + * @param[in] level lightness level (0-65535) + * + ******************************************************************************/ +void app_led_set_level(uint16_t level) +{ + light_level = level; + rgb_led_set(RGB_LED_MASK, light_level, hue_level, saturation_level); +} + +/******************************************************************************* + * Sets the hue of the LED if present. + * + * @param[in] hue Hue level. + * + ******************************************************************************/ +void app_led_set_hue(uint16_t hue) +{ + hue_level = hue; + rgb_led_set(RGB_LED_MASK, light_level, hue_level, saturation_level); +} + +/******************************************************************************* + * Sets the hue of the LED if present. + * + * @param[in] hue Hue level. + * + ******************************************************************************/ +void app_led_set_saturation(uint16_t saturation) +{ + saturation_level = saturation; + rgb_led_set(RGB_LED_MASK, light_level, hue_level, saturation_level); +} + +/******************************************************************************* + * Gets the maximum lightness value + * + * @return maximum lightness value. + ******************************************************************************/ +uint16_t app_led_get_max(void) +{ + return SL_BTMESH_LIGHTING_SERVER_PWM_MAXIMUM_BRIGHTNESS_CFG_VAL; +} + +/******************************************************************************* + * Init LED drivers + * + ******************************************************************************/ +void app_led_init(void) +{ + rgb_led_init(); +} + +/******************************************************************************* + * Change buttons to leds in case of shared pin + * + ******************************************************************************/ +void app_led_change_buttons_to_leds(void) +{ +} + +// ----------------------------------------------------------------------------- +// Private function definitions + +static void rgb_led_set(uint8_t m, uint16_t level, uint16_t hue, uint16_t saturation) +{ + RGB_t color = HSL_to_RGB(hue, saturation, level); + rgb_led_set_rgb(m, + color.R, + color.G, + color.B); +} + +static double Hue_to_RGB(double v1, double v2, double vH) +{ + if ( vH < 0) { + vH += 1; + } + if ( vH > 1) { + vH -= 1; + } + if ( (6 * vH) < 1) { + return (v1 + (v2 - v1) * 6 * vH); + } + if ((2 * vH) < 1) { + return (v2); + } + if ((3 * vH) < 2) { + return (v1 + (v2 - v1) * (2.0 / 3 - vH) * 6); + } + return (v1); +} + +static RGB_t HSL_to_RGB(uint16_t hue, uint16_t saturation, uint16_t lightness) +{ + RGB_t color; + double R, G, B; + double H, S, L; + double var_1, var_2; + + /* Change the range to (0-1) */ + H = (double)hue / 65535; + S = (double)saturation / 65535; + L = (double)lightness / 65535; + + if (S == 0) { + R = L; + G = L; + B = L; + } else { + if (L < 0.5) { + var_2 = L * (1 + S); + } else { + var_2 = (L + S) - (S * L); + } + + var_1 = 2 * L - var_2; + + R = Hue_to_RGB(var_1, var_2, H + 1.0 / 3); + G = Hue_to_RGB(var_1, var_2, H); + B = Hue_to_RGB(var_1, var_2, H - 1.0 / 3); + } + + color.R = (uint8_t)(255.0 * R + 0.5); + color.G = (uint8_t)(255.0 * G + 0.5); + color.B = (uint8_t)(255.0 * B + 0.5); + return color; +} diff --git a/app/btmesh/example/btmesh_soc_hsl/app_out_lcd.c b/app/btmesh/example/btmesh_soc_hsl/app_out_lcd.c new file mode 100644 index 00000000000..db1a19f2897 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/app_out_lcd.c @@ -0,0 +1,264 @@ +/***************************************************************************//** + * @file + * @brief Application Output LCD code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include +#include "em_common.h" +#include "sl_status.h" + +#include "app.h" +#include "app_log.h" + +#include "sl_btmesh_api.h" +#include "sl_btmesh_friend.h" +#include "sl_btmesh_hsl_server.h" +#include "sl_btmesh_lighting_server.h" +#include "sl_btmesh_provisioning_decorator.h" +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_wstk_lcd.h" + +#define UINT16_TO_PERCENTAGE(level) ((((uint32_t)(level) * 100) + 32767) / 65535) +#define UINT16_TO_DEGREE(level) ((((uint32_t)(level) * 360) + 32767) / 65535) + +// ----------------------------------------------------------------------------- +// BT mesh Friend Node Callbacks + +/******************************************************************************* + * Called when the Friend Node establishes friendship with another node. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_established(uint16_t netkey_index, + uint16_t lpn_address) +{ + app_log("BT mesh Friendship established with LPN " + "(netkey idx: %u, lpn addr: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address); + sl_status_t status = sl_btmesh_LCD_write("FRIEND", + SL_BTMESH_WSTK_LCD_ROW_FRIEND_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)netkey_index; + (void)lpn_address; +} + +/******************************************************************************* + * Called when the friendship that was successfully established with a Low Power + * Node has been terminated. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + * @param[in] reason Reason for friendship termination + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_terminated(uint16_t netkey_index, + uint16_t lpn_address, + uint16_t reason) +{ + app_log("BT mesh Friendship terminated with LPN " + "(netkey idx: %d, lpn addr: 0x%04x, reason: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address, + reason); + sl_status_t status = sl_btmesh_LCD_write("NO LPN", + SL_BTMESH_WSTK_LCD_ROW_FRIEND_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)netkey_index; + (void)lpn_address; + (void)reason; +} + +// ----------------------------------------------------------------------------- +// BT mesh HSL Callbacks + +/******************************************************************************* + * Called when the UI shall be updated with the changed HSL Model state during + * a transition. The rate of this callback can be controlled by changing the + * SL_BTMESH_HSL_SERVER_HUE_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * @param[in] hue Hue value. + ******************************************************************************/ +void sl_btmesh_hsl_hue_on_ui_update(uint16_t hue) +{ + // Temporary buffer to format the LCD output text + char tmp_str[LCD_ROW_LEN]; + uint16_t hue_degree = UINT16_TO_DEGREE(hue); + + app_log("BT mesh HSL Hue: %4udeg" APP_LOG_NL, hue_degree); + snprintf(tmp_str, LCD_ROW_LEN, "Hue: %4udeg", hue_degree); + sl_status_t status = sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_HUE_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when the UI shall be updated with the changed HSL Model state during + * a transition. The rate of this callback can be controlled by changing the + * SL_BTMESH_HSL_SERVER_SATURATION_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * @param[in] saturation Saturation value. + ******************************************************************************/ +void sl_btmesh_hsl_saturation_on_ui_update(uint16_t saturation) +{ + // Temporary buffer to format the LCD output text + char tmp_str[LCD_ROW_LEN]; + uint16_t saturation_percent = UINT16_TO_PERCENTAGE(saturation); + + app_log("BT mesh HSL Saturation: %4u%%" APP_LOG_NL, saturation_percent); + snprintf(tmp_str, LCD_ROW_LEN, "Saturation: %4u%%", saturation_percent); + sl_status_t status = sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_SATURATION_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +// ----------------------------------------------------------------------------- +// BT mesh Lightning Server Callbacks + +/******************************************************************************* + * Called when the UI shall be updated with the changed state of + * lightning server during a transition. The rate of this callback can be + * controlled by changing the SL_BTMESH_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * @param[in] lightness_level lightness level (0x0001 - FFFE) + ******************************************************************************/ +void sl_btmesh_lighting_server_on_ui_update(uint16_t lightness_level) +{ + // Temporary buffer to format the LCD output text + char tmp_str[LCD_ROW_LEN]; + uint16_t lightness_percent = UINT16_TO_PERCENTAGE(lightness_level); + + app_log("BT mesh Lightness: %5u%%" APP_LOG_NL, lightness_percent); + snprintf(tmp_str, LCD_ROW_LEN, "Lightness: %5u%%", lightness_percent); + sl_status_t status = sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_LIGHTNESS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called at node initialization time to provide provisioning information + * + * @param[in] provisioned true: provisioned, false: unprovisioned + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, " + "started unprovisioned beaconing..." APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("unprovisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + } +} + +/******************************************************************************* + * Called when the Provisioning starts + * + * @param[in] result Result code. 0: success, non-zero: error + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, + result); + sl_status_t status = sl_btmesh_LCD_write("provisioning...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)result; +} + +/******************************************************************************* + * Called when the Provisioning finishes successfully + * + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + sl_status_t status = sl_btmesh_LCD_write("provisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)address; + (void)iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + * + * @param[in] result Result code. 0: success, non-zero: error + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + sl_status_t status = sl_btmesh_LCD_write("prov failed...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)result; +} + +// ----------------------------------------------------------------------------- +// Factory Reset Callback + +/******************************************************************************* + * Shows the node reset information + ******************************************************************************/ +void app_show_btmesh_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Node reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when full reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Factory reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} diff --git a/app/btmesh/example/btmesh_soc_hsl/app_out_log.c b/app/btmesh/example/btmesh_soc_hsl/app_out_log.c new file mode 100644 index 00000000000..5c8230e1566 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/app_out_log.c @@ -0,0 +1,229 @@ +/***************************************************************************//** + * @file + * @brief Application Output Log code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include "em_common.h" +#include "sl_status.h" + +#include "app.h" +#include "app_log.h" + +#include "sl_btmesh_api.h" +#include "sl_btmesh_friend.h" +#include "sl_btmesh_hsl_server.h" +#include "sl_btmesh_lighting_server.h" +#include "sl_btmesh_provisioning_decorator.h" +#include "sl_btmesh_factory_reset.h" + +#define UINT16_TO_PERCENTAGE(level) ((((uint32_t)(level) * 100) + 32767) / 65535) +#define UINT16_TO_DEGREE(level) ((((uint32_t)(level) * 360) + 32767) / 65535) + +// ----------------------------------------------------------------------------- +// BT mesh Friend Node Callbacks + +/******************************************************************************* + * Called when the Friend Node establishes friendship with another node. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + * + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_established(uint16_t netkey_index, + uint16_t lpn_address) +{ + app_log("BT mesh Friendship established with LPN " + "(netkey idx: %u, lpn addr: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address); + (void)netkey_index; + (void)lpn_address; +} + +/******************************************************************************* + * Called when the friendship that was successfully established with a Low Power + * Node has been terminated. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + * @param[in] reason Reason for friendship termination + * + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_terminated(uint16_t netkey_index, + uint16_t lpn_address, + uint16_t reason) +{ + app_log("BT mesh Friendship terminated with LPN " + "(netkey idx: %d, lpn addr: 0x%04x, reason: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address, + reason); + (void)netkey_index; + (void)lpn_address; + (void)reason; +} + +// ----------------------------------------------------------------------------- +// BT mesh HSL Callbacks + +/******************************************************************************* + * Called when the UI shall be updated with the changed HSL Model state during + * a transition. The rate of this callback can be controlled by changing the + * SL_BTMESH_HSL_SERVER_HUE_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * @param[in] hue Hue value. + ******************************************************************************/ +void sl_btmesh_hsl_hue_on_ui_update(uint16_t hue) +{ + app_log("BT mesh HSL Hue: %4udeg" APP_LOG_NL, UINT16_TO_DEGREE(hue)); + (void)hue; +} + +/******************************************************************************* + * Called when the UI shall be updated with the changed HSL Model state during + * a transition. The rate of this callback can be controlled by changing the + * SL_BTMESH_HSL_SERVER_SATURATION_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * @param[in] saturation Saturation value. + ******************************************************************************/ +void sl_btmesh_hsl_saturation_on_ui_update(uint16_t saturation) +{ + app_log("BT mesh HSL Saturation: %4u%%" APP_LOG_NL, + UINT16_TO_PERCENTAGE(saturation)); + (void)saturation; +} + +// ----------------------------------------------------------------------------- +// BT mesh Lightning Server Callbacks + +/******************************************************************************* + * Called when the UI shall be updated with the changed state of + * lightning server during a transition. The rate of this callback can be + * controlled by changing the SL_BTMESH_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * @param[in] lightness_level lightness level (0x0001 - FFFE) + * + ******************************************************************************/ +void sl_btmesh_lighting_server_on_ui_update(uint16_t lightness_level) +{ + app_log("BT mesh Lightness: %5u%%" APP_LOG_NL, + UINT16_TO_PERCENTAGE(lightness_level)); + (void)lightness_level; +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called at node initialization time to provide provisioning information + * + * @param[in] provisioned true: provisioned, false: unprovisioned + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + * + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, " + "started unprovisioned beaconing..." APP_LOG_NL); + } +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called when the Provisioning starts + * + * @param[in] result Result code. 0: success, non-zero: error + * + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, + result); + (void)result; +} + +/******************************************************************************* + * Called when the Provisioning finishes successfully + * + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + * + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + (void)address; + (void)iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + * + * @param[in] result Result code. 0: success, non-zero: error + * + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + (void) result; +} + +// ----------------------------------------------------------------------------- +// Factory Reset Callback + +/******************************************************************************* + * Shows the node reset information + ******************************************************************************/ +void app_show_btmesh_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); +} + +/******************************************************************************* + * Called when full reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); +} diff --git a/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_brd2601b.slcp b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_brd2601b.slcp new file mode 100644 index 00000000000..242360cc96a --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_brd2601b.slcp @@ -0,0 +1,176 @@ +project_name: btmesh_soc_hsl +package: Btmesh +label: Bluetooth Mesh - SoC HSL Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_hsl_server + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: mpu + - id: mx25_flash_shutdown_usart + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_rgb_pwm_led + instance: + - rgb_led0 + - id: simple_timer + +source: + - path: app.c + - path: app_led_rgb.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + - path: rgbled_brd2601.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + - path: rgbled_brd2601.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_hsl/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_hsl/readme_img0.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img1.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img2.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img3.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img4.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img5.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img6.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img7.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmhsl_v1"' + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_HEAP_SIZE + value: "0x5900" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +define: + - name: SL_BTMESH_HSL_RGB_BRD2601 + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:device:sdid:!205 + - hardware:component:button:2+ + - hardware:component:led:2+ + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_brd4166a.slcp b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_brd4166a.slcp new file mode 100644 index 00000000000..f53fd13f39d --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_brd4166a.slcp @@ -0,0 +1,171 @@ +project_name: btmesh_soc_hsl +package: Btmesh +label: Bluetooth Mesh - SoC HSL Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_hsl_server + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_rgb_pwm_led + instance: + - rgb_led0 + - id: simple_timer + +source: + - path: app.c + - path: app_led_rgb.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + - path: rgbled_brd4166.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + - path: rgbled_brd4166.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_hsl/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_hsl/readme_img0.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img1.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img2.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img3.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img4.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img5.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img6.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img7.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmhsl_v1"' + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_HEAP_SIZE + value: "0x5900" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +define: + - name: SL_BTMESH_HSL_RGB_BRD4166 + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:device:sdid:!205 + - hardware:component:button:2+ + - hardware:component:led:2+ + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_display.slcp b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_display.slcp new file mode 100644 index 00000000000..06bb21a4403 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_display.slcp @@ -0,0 +1,178 @@ +project_name: btmesh_soc_hsl +package: Btmesh +label: Bluetooth Mesh - SoC HSL Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_hsl_server + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: pwm + instance: + - led0 + - led1 + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_timer + +source: + - path: app.c + - path: app_led.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_hsl/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_hsl/readme_img0.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img1.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img2.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img3.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img4.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img5.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img6.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img7.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmhsl_v1"' + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: "0x5900" + condition: + - "device_sdid_89" + - name: SL_HEAP_SIZE + value: "0x5C00" + unless: + - "device_sdid_89" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:sdid:!205 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_display_eusart.slcp b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_display_eusart.slcp new file mode 100644 index 00000000000..da5f5836ffa --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_display_eusart.slcp @@ -0,0 +1,177 @@ +project_name: btmesh_soc_hsl +package: Btmesh +label: Bluetooth Mesh - SoC HSL Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_hsl_server + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: memlcd_usart + - id: mpu + - id: mx25_flash_shutdown_usart + - id: pwm + instance: + - led0 + - led1 + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_timer + +source: + - path: app.c + - path: app_led.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_hsl/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_hsl/readme_img0.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img1.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img2.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img3.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img4.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img5.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img6.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img7.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmhsl_v1"' + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: "0x5C00" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_log.slcp b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_log.slcp new file mode 100644 index 00000000000..0a611675471 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_log.slcp @@ -0,0 +1,169 @@ +project_name: btmesh_soc_hsl +package: Btmesh +label: Bluetooth Mesh - SoC HSL Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_hsl_server + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: pwm + instance: + - led0 + - led1 + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_timer + +source: + - path: app.c + - path: app_led.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_hsl/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_hsl/readme_img0.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img1.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img2.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img3.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img4.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img5.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img6.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img7.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmhsl_v1"' + - name: SL_HEAP_SIZE + value: "0x5900" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:sdid:!205 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_log_eusart.slcp b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_log_eusart.slcp new file mode 100644 index 00000000000..8a41133d8a9 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/btmesh_soc_hsl_log_eusart.slcp @@ -0,0 +1,173 @@ +project_name: btmesh_soc_hsl +package: Btmesh +label: Bluetooth Mesh - SoC HSL Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_hsl_server + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: mpu + - id: mx25_flash_shutdown_usart + - id: pwm + instance: + - led0 + - led1 + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_timer + +source: + - path: app.c + - path: app_led.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_hsl/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_hsl/readme_img0.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img1.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img2.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img3.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img4.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img5.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img6.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img7.png + - path: ../../documentation/example/btmesh_soc_hsl/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmhsl_v1"' + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_HEAP_SIZE + value: "0x5900" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_hsl/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_hsl/dcd_config.btmeshconf new file mode 100644 index 00000000000..47cc55a075e --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/dcd_config.btmeshconf @@ -0,0 +1,17 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x0002", + "vid": "0x0420", + "elements": [ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0000", "name":"Configuration Server"}, + {"mid":"0x0002", "name":"Health Server"} + ] + } + ] + } +} \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_hsl/gatt_configuration.btconf b/app/btmesh/example/btmesh_soc_hsl/gatt_configuration.btconf new file mode 100644 index 00000000000..027641c4dad --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/gatt_configuration.btconf @@ -0,0 +1,48 @@ + + + + + Abstract: The generic_access service contains generic information about the device. All available Characteristics are readonly. + + + light node + + + + Abstract: The external appearance of this device. The values are composed of a category (10-bits) and sub-categories (6-bits). + 0000 + + + + + Abstract: The Device Information Service exposes manufacturer and/or vendor information about a device. Summary: This service exposes manufacturer information about a device. The Device Information Service is instantiated as a Primary Service. Only one instance of the Device Information Service is exposed on a device. + + Abstract: The value of this characteristic is a UTF-8 string representing the name of the manufacturer of the device. + Silicon Labs + + + + + + Abstract: The value of this characteristic is a UTF-8 string representing the model number assigned by the device vendor. + 00000000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the hardware revision for the hardware within the device. + 000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the firmware revision for the firmware within the device. + 0.0.0 + + + + Abstract: The SYSTEM ID characteristic consists of a structure with two fields. The first field are the LSOs and the second field contains the MSOs. This is a 64-bit structure which consists of a 40-bit manufacturer-defined identifier concatenated with a 24 bit unique Organizationally Unique Identifier (OUI). The OUI is issued by the IEEE Registration Authority (http://standards.ieee.org/regauth/index.html) and is required to be used in accordance with IEEE Standard 802-2001.6 while the least significant 40 bits are manufacturer defined. If System ID generated based on a Bluetooth Device Address, it is required to be done as follows. System ID and the Bluetooth Device Address have a very similar structure: a Bluetooth Device Address is 48 bits in length and consists of a 24 bit Company Assigned Identifier (manufacturer defined identifier) concatenated with a 24 bit Company Identifier (OUI). In order to encapsulate a Bluetooth Device Address as System ID, the Company Identifier is concatenated with 0xFFFE followed by the Company Assigned Identifier of the Bluetooth Address. For more guidelines related to EUI-64, refer to http://standards.ieee.org/develop/regauth/tut/eui64.pdf. Examples: If the system ID is based of a Bluetooth Device Address with a Company Identifier (OUI) is 0x123456 and the Company Assigned Identifier is 0x9ABCDE, then the System Identifier is required to be 0x123456FFFE9ABCDE. + + + + + + \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_hsl/local_cli_commands.c b/app/btmesh/example/btmesh_soc_hsl/local_cli_commands.c new file mode 100644 index 00000000000..407e5c505db --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/local_cli_commands.c @@ -0,0 +1,85 @@ +/***************************************************************************//** + * @file local_cli_commands.c + * @brief CLI commands file + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_CLI_PRESENT +#include "sl_btmesh.h" +#include "sl_bluetooth.h" +#include "sl_cli.h" +#include "app_log.h" +#include "app_assert.h" + +/***************************************************************************//** + * CLI Command to read BT Address and mesh UUID. + ******************************************************************************/ +void info(sl_cli_command_arg_t *arguments) +{ + (void) arguments; + bd_addr address; + uint8_t address_type; + uuid_128 uuid; + + sl_status_t sc = sl_bt_system_get_identity_address(&address, &address_type); + app_assert_status_f(sc, "Failed to get Bluetooth address"); + app_log("Bluetooth %s address: %02X:%02X:%02X:%02X:%02X:%02X" APP_LOG_NL, + address_type ? "static random" : "public device", + address.addr[5], + address.addr[4], + address.addr[3], + address.addr[2], + address.addr[1], + address.addr[0]); + + sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get Bluetooth mesh uuid"); + app_log("Bluetooth mesh UUID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X" + "%02X%02X%02X%02X%02X" APP_LOG_NL, + uuid.data[0], + uuid.data[1], + uuid.data[2], + uuid.data[3], + uuid.data[4], + uuid.data[5], + uuid.data[6], + uuid.data[7], + uuid.data[8], + uuid.data[9], + uuid.data[10], + uuid.data[11], + uuid.data[12], + uuid.data[13], + uuid.data[14], + uuid.data[15]); +} + +#endif // SL_CATALOG_CLI_PRESENT diff --git a/app/btmesh/example/btmesh_soc_hsl/main.c b/app/btmesh/example/btmesh_soc_hsl/main.c new file mode 100644 index 00000000000..cd1adbeee91 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/main.c @@ -0,0 +1,71 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif // SL_CATALOG_POWER_MANAGER_PRESENT +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} diff --git a/app/btmesh/example/btmesh_soc_hsl/rgbled_brd2601.c b/app/btmesh/example/btmesh_soc_hsl/rgbled_brd2601.c new file mode 100644 index 00000000000..5eb78e3e260 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/rgbled_brd2601.c @@ -0,0 +1,67 @@ +/***************************************************************************//** + * @file + * @brief RGB LED driver for BRD2601B + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_simple_rgb_pwm_led_instances.h" +#include "sl_simple_rgb_pwm_led.h" +#include "rgbled_brd2601.h" + +// ----------------------------------------------------------------------------- +// Public function definitions + +/******************************************************************************* + * Initialize all LEDs. + ******************************************************************************/ +void rgb_led_init(void) +{ +} + +/******************************************************************************* + * De-initialize all LEDs by disabling them. + ******************************************************************************/ +void rgb_led_deinit(void) +{ +} + +/******************************************************************************* + * Set LED color based on RGB components. + * + * @param[in] mask LED instance mask + * @param[in] r Red component + * @param[in] g Green component + * @param[in] b Blue component + ******************************************************************************/ +void rgb_led_set_rgb(uint8_t m, uint8_t r, uint8_t g, uint8_t b) +{ + (void) m; + sl_led_set_rgb_color(&sl_simple_rgb_pwm_led_rgb_led0, + (uint16_t)r, + (uint16_t)g, + (uint16_t)b); +} diff --git a/app/btmesh/example/btmesh_soc_hsl/rgbled_brd2601.h b/app/btmesh/example/btmesh_soc_hsl/rgbled_brd2601.h new file mode 100644 index 00000000000..85ea8d71cf6 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/rgbled_brd2601.h @@ -0,0 +1,54 @@ +/***************************************************************************//** + * @file + * @brief Board HW abstraction header for BRD2601B + ******************************************************************************* + * # 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 RGBLED_HSL_BRD2601_H +#define RGBLED_HSL_BRD2601_H + +/***************************************************************************//** + * Initialize all LEDs. + ******************************************************************************/ +void rgb_led_init(void); + +/***************************************************************************//** + * De-initialize all LEDs by disabling them. + ******************************************************************************/ +void rgb_led_deinit(void); + +/***************************************************************************//** + * Set LED color based on RGB components. + * + * @param[in] mask LED instance mask + * @param[in] r Red component + * @param[in] g Green component + * @param[in] b Blue component + ******************************************************************************/ +void rgb_led_set_rgb(uint8_t m, uint8_t r, uint8_t g, uint8_t b); + +#endif // RGBLED_HSL_BRD2601_H diff --git a/app/btmesh/example/btmesh_soc_hsl/rgbled_brd4166.c b/app/btmesh/example/btmesh_soc_hsl/rgbled_brd4166.c new file mode 100644 index 00000000000..966e192142d --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/rgbled_brd4166.c @@ -0,0 +1,131 @@ +/***************************************************************************//** + * @file + * @brief RGB LED driver for BRD4166A + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_simple_rgb_pwm_led_instances.h" +#include "sl_simple_rgb_pwm_led.h" +#include "em_gpio.h" +#include "rgbled_brd4166.h" + +// ----------------------------------------------------------------------------- +// Private function definitions + +/***************************************************************************//** + * Enable RGB LEDs with respect to the enabling bitmask. + * + * @param[in] enable Enable or disable the selected LEDs. + * @param[in] mask LED instance mask. + ******************************************************************************/ +static void rgb_led_enable(bool enable, uint8_t mask) +{ + if ( ( (mask != 0) && (enable == true) ) + || ( ( (mask & 0xf) == 0xf) && (enable == false) ) ) { + if ( enable ) { + GPIO_PinOutSet(BOARD_RGBLED_PWR_EN_PORT, BOARD_RGBLED_PWR_EN_PIN); + } else { + GPIO_PinOutClear(BOARD_RGBLED_PWR_EN_PORT, BOARD_RGBLED_PWR_EN_PIN); + } + } + + int i; + uint8_t pins[BOARD_RGBLED_COUNT] = { BOARD_RGBLED_COM0_PIN, + BOARD_RGBLED_COM1_PIN, + BOARD_RGBLED_COM2_PIN, + BOARD_RGBLED_COM3_PIN }; + + for ( i = 0; i < BOARD_RGBLED_COUNT; i++ ) { + if ( ( (mask >> i) & 1) == 1 ) { + if ( enable ) { + GPIO_PinOutSet(BOARD_RGBLED_COM_PORT, + pins[(BOARD_RGBLED_COUNT - 1) - i]); + } else { + GPIO_PinOutClear(BOARD_RGBLED_COM_PORT, + pins[(BOARD_RGBLED_COUNT - 1) - i]); + } + } + } + + return; +} + +// ----------------------------------------------------------------------------- +// Public function definitions + +/******************************************************************************* + * Initialize all LEDs. + ******************************************************************************/ +void rgb_led_init(void) +{ + GPIO_PinModeSet(BOARD_RGBLED_PWR_EN_PORT, + BOARD_RGBLED_PWR_EN_PIN, + gpioModePushPull, + 0); + GPIO_PinModeSet(BOARD_RGBLED_COM0_PORT, + BOARD_RGBLED_COM0_PIN, + gpioModePushPull, + 0); + GPIO_PinModeSet(BOARD_RGBLED_COM1_PORT, + BOARD_RGBLED_COM1_PIN, + gpioModePushPull, + 0); + GPIO_PinModeSet(BOARD_RGBLED_COM2_PORT, + BOARD_RGBLED_COM2_PIN, + gpioModePushPull, + 0); + GPIO_PinModeSet(BOARD_RGBLED_COM3_PORT, + BOARD_RGBLED_COM3_PIN, + gpioModePushPull, + 0); +} + +/******************************************************************************* + * De-initialize all LEDs by disabling them. + ******************************************************************************/ +void rgb_led_deinit(void) +{ + rgb_led_enable(false, 0xf); +} + +/******************************************************************************* + * Set LED color based on RGB components. + * + * @param[in] mask LED instance mask + * @param[in] r Red component + * @param[in] g Green component + * @param[in] b Blue component + ******************************************************************************/ +void rgb_led_set_rgb(uint8_t m, uint8_t r, uint8_t g, uint8_t b) +{ + rgb_led_enable(false, ~m); + rgb_led_enable(true, m); + sl_led_set_rgb_color(&sl_simple_rgb_pwm_led_rgb_led0, + (uint16_t)r, + (uint16_t)g, + (uint16_t)b); +} diff --git a/app/btmesh/example/btmesh_soc_hsl/rgbled_brd4166.h b/app/btmesh/example/btmesh_soc_hsl/rgbled_brd4166.h new file mode 100644 index 00000000000..c68b979d432 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_hsl/rgbled_brd4166.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief Board HW abstraction header for BRD4166A + ******************************************************************************* + * # 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 RGBLED_HSL_BRD4166_H +#define RGBLED_HSL_BRD4166_H + +/// Mask to enable EM4 wake-up BTN0 +#define BOARD_BUTTON0_EM4WUEN_MASK 0x10 + +/// RGB LED present on board +#define BOARD_RGBLED_PRESENT 1 +/// Number of LEDs on board +#define BOARD_RGBLED_COUNT 4 +/// RGB LED Power Enable port +#define BOARD_RGBLED_PWR_EN_PORT gpioPortJ +/// RGB LED Power Enable pin +#define BOARD_RGBLED_PWR_EN_PIN 14 +/// RGB LED COM port +#define BOARD_RGBLED_COM_PORT gpioPortI +/// RGB LED COM0 port +#define BOARD_RGBLED_COM0_PORT gpioPortI +/// RGB LED COM0 pin +#define BOARD_RGBLED_COM0_PIN 0 +/// RGB LED COM1 port +#define BOARD_RGBLED_COM1_PORT gpioPortI +/// RGB LED COM1 pin +#define BOARD_RGBLED_COM1_PIN 1 +/// RGB LED COM2 port +#define BOARD_RGBLED_COM2_PORT gpioPortI +/// RGB LED COM2 pin +#define BOARD_RGBLED_COM2_PIN 2 +/// RGB LED COM3 port +#define BOARD_RGBLED_COM3_PORT gpioPortI +/// RGB LED COM3 pin +#define BOARD_RGBLED_COM3_PIN 3 + +/***************************************************************************//** + * Initialize all LEDs. + ******************************************************************************/ +void rgb_led_init(void); + +/***************************************************************************//** + * De-initialize all LEDs by disabling them. + ******************************************************************************/ +void rgb_led_deinit(void); + +/***************************************************************************//** + * Set LED color based on RGB components. + * + * @param[in] mask LED instance mask + * @param[in] r Red component + * @param[in] g Green component + * @param[in] b Blue component + ******************************************************************************/ +void rgb_led_set_rgb(uint8_t m, uint8_t r, uint8_t g, uint8_t b); + +#endif // RGBLED_HSL_BRD4166_H diff --git a/app/btmesh/example/btmesh_soc_light/app.c b/app/btmesh/example/btmesh_soc_light/app.c new file mode 100644 index 00000000000..f940612d22c --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/app.c @@ -0,0 +1,316 @@ +/***************************************************************************//** + * @file + * @brief Application code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include +#include "em_common.h" +#include "sl_status.h" + +#include "sl_btmesh.h" +#include "sl_bluetooth.h" +#include "app.h" +#include "app_assert.h" +#include "app_log.h" +#include "app_btmesh_util.h" + +#include "gatt_db.h" + +#include "sl_simple_timer.h" + +/* Buttons and LEDs headers */ +#include "sl_simple_button_instances.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#include "sl_btmesh_wstk_lcd.h" +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +/* Light app headers */ +#include "sl_btmesh_ctl_server_config.h" +#include "sl_btmesh_lighting_server_config.h" +#include "sl_btmesh_lc_server_config.h" +#include "sl_btmesh_factory_reset.h" + +#include "app_led.h" +#include "sl_btmesh_provisioning_decorator.h" + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#define lcd_print(...) sl_btmesh_LCD_write(__VA_ARGS__) +#else +#define lcd_print(...) +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +/// High Priority +#define HIGH_PRIORITY 0 +/// No Timer Options +#define NO_FLAGS 0 +/// Callback has no parameters +#define NO_CALLBACK_DATA (void *)NULL +/// Timeout for Blinking LED during provisioning +#define APP_LED_BLINKING_TIMEOUT 250 +/// LED switched off (lightness = 0) +#define LED_LEVEL_OFF 0 +/// Length of the display name buffer +#define NAME_BUF_LEN 20 +/// Length of boot error message buffer +#define BOOT_ERR_MSG_BUF_LEN 30 +// periodic timer handle +static sl_simple_timer_t app_led_blinking_timer; + +// periodic timer callback +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, void *data); + +// Handles button press and does a factory reset +static bool handle_reset_conditions(void); + +/******************************************************************************* + * Global variables + ******************************************************************************/ +/// number of active Bluetooth connections +static uint8_t num_connections = 0; + +static bool init_done = false; + +/******************************************************************************* + * Application Init. + ******************************************************************************/ +SL_WEAK void app_init(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application init code here! // + // This is called once during start-up. // + ///////////////////////////////////////////////////////////////////////////// + app_log("BT mesh Light initialized" APP_LOG_NL); + app_led_init(); + handle_reset_conditions(); +} + +/******************************************************************************* + * Application Process Action. + ******************************************************************************/ +SL_WEAK void app_process_action(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application code here! // + // This is called infinitely. // + // Do not call blocking functions from here! // + ///////////////////////////////////////////////////////////////////////////// +} + +/***************************************************************************//** + * Set device name in the GATT database. A unique name is generated using + * the two last bytes from the UUID of this device. Name is also + * displayed on the LCD if present. + * + * @param[in] uuid Pointer to device UUID. + ******************************************************************************/ +static void set_device_name(uuid_128 *uuid) +{ + char name[NAME_BUF_LEN]; + sl_status_t result; + + // Create unique device name using the last two bytes of the device UUID + snprintf(name, NAME_BUF_LEN, "light node %02x%02x", + uuid->data[14], uuid->data[15]); + + app_log("Device name: '%s'" APP_LOG_NL, name); + + result = sl_bt_gatt_server_write_attribute_value(gattdb_device_name, + 0, + strlen(name), + (uint8_t *)name); + app_log_status_error_f(result, + "sl_bt_gatt_server_write_attribute_value() failed" APP_LOG_NL); + + // Show device name on the LCD + lcd_print(name, SL_BTMESH_WSTK_LCD_ROW_NAME_CFG_VAL); +} + +/***************************************************************************//** + * Handles button press and does a factory reset + * + * @return true if there is no button press + ******************************************************************************/ +static bool handle_reset_conditions(void) +{ + // If PB0 is held down then do full factory reset + if (sl_simple_button_get_state(&sl_button_btn0) + == SL_SIMPLE_BUTTON_PRESSED) { + // Full factory reset + sl_btmesh_initiate_full_reset(); + return false; + } + +#ifndef SINGLE_BUTTON + // If PB1 is held down then do node factory reset + if (sl_simple_button_get_state(&sl_button_btn1) + == SL_SIMPLE_BUTTON_PRESSED) { + // Node factory reset + sl_btmesh_initiate_node_reset(); + return false; + } +#endif // SL_CATALOG_BTN1_PRESENT + return true; +} + +/***************************************************************************//** + * Handling of le stack events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_bt_on_event(sl_bt_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_bt_evt_connection_opened_id: + num_connections++; + lcd_print("connected", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Connected" APP_LOG_NL); + break; + + case sl_bt_evt_connection_closed_id: + if (num_connections > 0) { + if (--num_connections == 0) { + lcd_print("", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Disconnected" APP_LOG_NL); + } + } + break; + + default: + break; + } +} + +/***************************************************************************//** + * Bluetooth Mesh stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Pointer to incoming event from the Bluetooth Mesh stack. + ******************************************************************************/ +void sl_btmesh_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + default: + break; + } +} + +/***************************************************************************//** + * Callbacks + ******************************************************************************/ + +/***************************************************************************//** + * Handling of provisionee init result + ******************************************************************************/ +void sl_btmesh_provisionee_on_init(sl_status_t result) +{ + if (SL_STATUS_OK != result) { + char buf[BOOT_ERR_MSG_BUF_LEN]; + snprintf(buf, sizeof(buf), "init failed (0x%lx)", result); + lcd_print(buf, SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + } else { + uuid_128 uuid; + sl_status_t sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get UUID"); + set_device_name(&uuid); + } +} + +/***************************************************************************//** + * Provisioning Decorator Callbacks + ******************************************************************************/ +// Called when the Provisioning starts +void sl_btmesh_on_node_provisioning_started(uint16_t result) +{ + // Change buttons to LEDs in case of shared pin + app_led_change_buttons_to_leds(); + + sl_status_t sc = sl_simple_timer_start(&app_led_blinking_timer, + APP_LED_BLINKING_TIMEOUT, + app_led_blinking_timer_cb, + NO_CALLBACK_DATA, + true); + + app_assert_status_f(sc, "Failed to start periodic timer"); + + app_show_btmesh_node_provisioning_started(result); +} + +// Called when the Provisioning finishes successfully +void sl_btmesh_on_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + sl_status_t sc = sl_simple_timer_stop(&app_led_blinking_timer); + app_assert_status_f(sc, "Failed to stop periodic timer"); + // Turn off LED + init_done = true; + app_led_set_level(LED_LEVEL_OFF); + + app_show_btmesh_node_provisioned(address, iv_index); +} + +/***************************************************************************//** + * Timer Callbacks + ******************************************************************************/ +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + if (!init_done) { + // Toggle LEDs + static uint16_t level = 0; + level = app_led_get_max() - level; + app_led_set_level(level); + } +} + +void sl_btmesh_lighting_level_pwm_cb(uint16_t level) +{ + app_led_set_level(level); +} + +void sl_btmesh_lighting_color_pwm_cb(uint16_t color) +{ + app_led_set_color(color); +} + +/***************************************************************************//** + * Factory reset Callbacks + ******************************************************************************/ +void sl_btmesh_factory_reset_on_node_reset(void) +{ + app_show_btmesh_node_reset(); + sl_bt_nvm_erase(SL_BTMESH_LIGHTING_SERVER_PS_KEY_CFG_VAL); + sl_bt_nvm_erase(SL_BTMESH_CTL_SERVER_PS_KEY_CFG_VAL); + sl_bt_nvm_erase(SL_BTMESH_LC_SERVER_PS_KEY_CFG_VAL); + sl_bt_nvm_erase(SL_BTMESH_LC_SERVER_PROPERTY_PS_KEY_CFG_VAL); +} diff --git a/app/btmesh/example/btmesh_soc_light/app.h b/app/btmesh/example/btmesh_soc_light/app.h new file mode 100644 index 00000000000..7862adec31b --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/app.h @@ -0,0 +1,69 @@ +/***************************************************************************//** + * @file + * @brief Application interface provided to main(). + ******************************************************************************* + * # 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 APP_H +#define APP_H + +#include + +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +void app_init(void); + +/***************************************************************************//** + * Application Process Action. + ******************************************************************************/ +void app_process_action(void); + +/***************************************************************************//** + * Shows the provisioning start information + * + * @param[in] result Result code. 0: success, non-zero: error + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result); + +/******************************************************************************* + * Called when the Provisioning finishes successfully + * + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index); + +/***************************************************************************//** + * Shows the node reset information + ******************************************************************************/ +void app_show_btmesh_node_reset(void); + +#endif // APP_H diff --git a/app/btmesh/example/btmesh_soc_light/app_led.c b/app/btmesh/example/btmesh_soc_light/app_led.c new file mode 100644 index 00000000000..4bdcee69543 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/app_led.c @@ -0,0 +1,124 @@ +/***************************************************************************//** + * @file + * @brief LED Application code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "app_led.h" +#include "sl_btmesh.h" +#include "sl_btmesh_lighting_server.h" +#include "sl_btmesh_lighting_server_config.h" +#include "sl_pwm_init_led0_config.h" +#include "sl_pwm_init_led1_config.h" + +#include "sl_pwm.h" +#include "sl_pwm_instances.h" +#include "sl_simple_button.h" +#include "sl_simple_button_instances.h" + +// ----------------------------------------------------------------------------- +// Definitions + +/// 100% PWM duty cycle +#define PWM_MAX_DUTY_CYCLE 100 + +// ----------------------------------------------------------------------------- +// Public function definitions + +/******************************************************************************* + * Sets the lightness level of the LED. + * + * @param[in] level lightness level (0-65535) + * + ******************************************************************************/ +void app_led_set_level(uint16_t level) +{ + uint16_t pwm_duty_cycle = (uint16_t)((uint32_t)level * PWM_MAX_DUTY_CYCLE + / SL_BTMESH_LIGHTING_SERVER_PWM_MAXIMUM_BRIGHTNESS_CFG_VAL); + + if (pwm_duty_cycle > PWM_MAX_DUTY_CYCLE) { + pwm_duty_cycle = PWM_MAX_DUTY_CYCLE; + } + sl_pwm_set_duty_cycle(&sl_pwm_led0, pwm_duty_cycle); + sl_pwm_set_duty_cycle(&sl_pwm_led1, pwm_duty_cycle); +} + +/******************************************************************************* + * Sets the color temperature of the LED if present. + * + * @param[in] color Color temperature in Kelvins. + * + ******************************************************************************/ +void app_led_set_color(uint16_t color) +{ + (void)color; +} + +/******************************************************************************* + * Gets the maximum lightness value + * + * @return maximum lightness value. + ******************************************************************************/ +uint16_t app_led_get_max(void) +{ + return SL_BTMESH_LIGHTING_SERVER_PWM_MAXIMUM_BRIGHTNESS_CFG_VAL; +} + +/******************************************************************************* + * Init LED drivers + * + ******************************************************************************/ +void app_led_init(void) +{ + // Enable PWM output + sl_pwm_start(&sl_pwm_led0); + // Enable PWM output + sl_pwm_start(&sl_pwm_led1); +} + +/******************************************************************************* + * Change buttons to leds in case of shared pin + * + ******************************************************************************/ +void app_led_change_buttons_to_leds(void) +{ + sl_simple_button_disable(&sl_button_btn0); + sl_pwm_config_t pwm_led0_config = { + .frequency = SL_PWM_LED0_FREQUENCY, + .polarity = SL_PWM_LED0_POLARITY, + }; + sl_pwm_init(&sl_pwm_led0, &pwm_led0_config); + sl_pwm_start(&sl_pwm_led0); + sl_simple_button_disable(&sl_button_btn1); + + sl_pwm_config_t pwm_led1_config = { + .frequency = SL_PWM_LED1_FREQUENCY, + .polarity = SL_PWM_LED1_POLARITY, + }; + sl_pwm_init(&sl_pwm_led1, &pwm_led1_config); + sl_pwm_start(&sl_pwm_led1); +} diff --git a/app/btmesh/example/btmesh_soc_light/app_led.h b/app/btmesh/example/btmesh_soc_light/app_led.h new file mode 100644 index 00000000000..61c09bf5232 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/app_led.h @@ -0,0 +1,71 @@ +/***************************************************************************//** + * @file + * @brief Application interface for LEDs + ******************************************************************************* + * # 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 APP_LED_H +#define APP_LED_H + +#include + +/***************************************************************************//** + * Sets the lightness level of the LED. + * + * @param[in] level lightness level (0-65535) + * + ******************************************************************************/ +void app_led_set_level(uint16_t level); + +/***************************************************************************//** + * Sets the color temperature of the LED if present. + * + * @param[in] color Color temperature in Kelvins. + * + ******************************************************************************/ +void app_led_set_color(uint16_t color); + +/***************************************************************************//** + * Gets the maximum lightness value + * + * @return maximum lightness value. + ******************************************************************************/ +uint16_t app_led_get_max(void); + +/***************************************************************************//** + * Init LED drivers + * + ******************************************************************************/ +void app_led_init(void); + +/***************************************************************************//** + * Change buttons to leds in case of shared pin + * + ******************************************************************************/ +void app_led_change_buttons_to_leds(void); + +#endif // APP_LED_H diff --git a/app/btmesh/example/btmesh_soc_light/app_led_rgb.c b/app/btmesh/example/btmesh_soc_light/app_led_rgb.c new file mode 100644 index 00000000000..abf8cae6064 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/app_led_rgb.c @@ -0,0 +1,225 @@ +/***************************************************************************//** + * @file + * @brief LED Application code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "app_led.h" +#include "sl_btmesh.h" +#include "sl_btmesh_lighting_server.h" +#include "sl_btmesh_lighting_server_config.h" +#include "sl_btmesh_ctl_server.h" +#include + +#ifdef SL_BTMESH_LIGHT_RGB_BRD4166 +#include "rgbled_brd4166.h" +#elif SL_BTMESH_LIGHT_RGB_BRD2601 +#include "rgbled_brd2601.h" +#endif + +// ----------------------------------------------------------------------------- +// Definitions + +#define RGB_LED_MASK 0xF // Use all LEDs + +// ----------------------------------------------------------------------------- +// Type definitions + +typedef struct { + uint8_t R; ///< Red value + uint8_t G; ///< Green value + uint8_t B; ///< Blue value +}RGB_t; + +// ----------------------------------------------------------------------------- +// Private variables + +static uint16_t light_level = 0; +static uint16_t light_color = 0; + +// ----------------------------------------------------------------------------- +// Private function declaration + +/***************************************************************************//** + * Set LED color based on lightness and temperature. + * + * @param[in] m LED instance mask + * @param[in] level Lightness level. + * @param[in] temperature Color temperature in Kelvins. + ******************************************************************************/ +static void rgb_led_set(uint8_t m, uint16_t level, uint16_t temperature); + +/***************************************************************************//** + * Change lightness of given color temperature. + * + * @param[in] color RGB color representing color temperature. + * @param[in] level Lightness level of given color. + * + * @return RGB color representing given temperature and lightness level. + ******************************************************************************/ +static RGB_t RGB_to_LightnessRGB(RGB_t color, uint16_t level); + +/***************************************************************************//** + * Convert temperature to RGB color using approximation functions. + * + * @param[in] temperature Color temperature in Kelvins. + * + * @return RGB color representing given temperature. + ******************************************************************************/ +static RGB_t Temperature_to_RGB(uint16_t temperature); + +// ----------------------------------------------------------------------------- +// Public function definitions + +/******************************************************************************* + * Sets the lightness level of the LED. + * + * @param[in] level lightness level (0-65535) + * + ******************************************************************************/ +void app_led_set_level(uint16_t level) +{ + light_level = level; + rgb_led_set(RGB_LED_MASK, light_level, light_color); +} + +/******************************************************************************* + * Sets the color temperature of the LED if present. + * + * @param[in] color Color temperature in Kelvins. + * + ******************************************************************************/ +void app_led_set_color(uint16_t color) +{ + light_color = color; + rgb_led_set(RGB_LED_MASK, light_level, light_color); +} + +/******************************************************************************* + * Gets the maximum lightness value + * + * @return maximum lightness value. + ******************************************************************************/ +uint16_t app_led_get_max(void) +{ + return SL_BTMESH_LIGHTING_SERVER_PWM_MAXIMUM_BRIGHTNESS_CFG_VAL; +} + +/******************************************************************************* + * Init LED drivers + * + ******************************************************************************/ +void app_led_init(void) +{ + rgb_led_init(); +} + +/******************************************************************************* + * Change buttons to leds in case of shared pin + * + ******************************************************************************/ +void app_led_change_buttons_to_leds(void) +{ +} + +// ----------------------------------------------------------------------------- +// Private function definitions + +/***************************************************************************//** + * Convert temperature to RGB color using approximation functions. + * + * @param[in] temperature Color temperature in Kelvins. + * + * @return RGB color representing given temperature. + ******************************************************************************/ +static RGB_t Temperature_to_RGB(uint16_t temperature) +{ + RGB_t color; + double temp_R, temp_G, temp_B; + + //approximation of temperature using RGB + if (temperature < 6563) { + temp_R = 255; + if (temperature < 1925) { + temp_B = 0; + } else { + temp_B = temperature - 1918.74282; + temp_B = 2.55822107 * pow(temp_B, 0.546877914); + } + if ( temperature < 909) { + temp_G = 0; + } else { + temp_G = temperature - 636.62578769; + temp_G = 73.13384712 * log(temp_G) - 383.76244858; + } + } else { + temp_R = temperature - 5882.02392431; + temp_R = -29.28670147 * log(temp_R) + 450.50427359; + temp_R = temp_R + 0.5; + temp_G = temperature - 5746.13180276; + temp_G = -18.69512921 * log(temp_G) + 377.39334366; + temp_B = 255; + } + + // Norming + double temp_max = SL_MAX(temp_R, SL_MAX(temp_G, temp_B)); + + temp_R = temp_R * 255 / temp_max; + temp_G = temp_G * 255 / temp_max; + temp_B = temp_B * 255 / temp_max; + + color.R = temp_R > 255 ? 255 : (temp_R >= 0 ? (int)(temp_R + 0.5) : 0); + color.G = temp_G > 255 ? 255 : (temp_G >= 0 ? (int)(temp_G + 0.5) : 0); + color.B = temp_B > 255 ? 255 : (temp_B >= 0 ? (int)(temp_B + 0.5) : 0); + + return color; +} + +static RGB_t RGB_to_LightnessRGB(RGB_t color, uint16_t level) +{ + uint32_t temp_level; + RGB_t new_color; + + temp_level = color.R * (uint32_t) level / 65535; + new_color.R = temp_level; + temp_level = color.G * (uint32_t) level / 65535; + new_color.G = temp_level; + temp_level = color.B * (uint32_t) level / 65535; + new_color.B = temp_level; + + return new_color; +} + +static void rgb_led_set(uint8_t m, uint16_t level, uint16_t temperature) +{ + RGB_t color = Temperature_to_RGB(temperature); + color = RGB_to_LightnessRGB(color, level); + rgb_led_set_rgb(m, + color.R, + color.G, + color.B); +} diff --git a/app/btmesh/example/btmesh_soc_light/app_out_lcd.c b/app/btmesh/example/btmesh_soc_light/app_out_lcd.c new file mode 100644 index 00000000000..912cae988c0 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/app_out_lcd.c @@ -0,0 +1,253 @@ +/***************************************************************************//** + * @file + * @brief Application Output LCD code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include +#include "em_common.h" +#include "sl_status.h" + +#include "app.h" +#include "app_log.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_friend.h" +#include "sl_btmesh_ctl_server.h" +#include "sl_btmesh_lighting_server.h" +#include "sl_btmesh_provisioning_decorator.h" +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_wstk_lcd.h" + +// ----------------------------------------------------------------------------- +// BT mesh Friend Node Callbacks + +/******************************************************************************* + * Called when the Friend Node establishes friendship with another node. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_established(uint16_t netkey_index, + uint16_t lpn_address) +{ + app_log("BT mesh Friendship established with LPN " + "(netkey idx: %u, lpn addr: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address); + sl_status_t status = sl_btmesh_LCD_write("FRIEND", + SL_BTMESH_WSTK_LCD_ROW_FRIEND_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)netkey_index; + (void)lpn_address; +} + +/******************************************************************************* + * Called when the friendship that was successfully established with a Low Power + * Node has been terminated. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + * @param[in] reason Reason for friendship termination + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_terminated(uint16_t netkey_index, + uint16_t lpn_address, + uint16_t reason) +{ + app_log("BT mesh Friendship terminated with LPN " + "(netkey idx: %d, lpn addr: 0x%04x, reason: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address, + reason); + sl_status_t status = sl_btmesh_LCD_write("NO LPN", + SL_BTMESH_WSTK_LCD_ROW_FRIEND_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)netkey_index; + (void)lpn_address; + (void)reason; +} + +// ----------------------------------------------------------------------------- +// BT mesh CTL Callbacks + +/******************************************************************************* + * Called when the UI shall be updated with the changed CTL Model state during + * a transition. The rate of this callback can be controlled by changing the + * SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * @param[in] temperature Temperature of color. + * @param[in] deltauv Delta UV value. + ******************************************************************************/ +void sl_btmesh_ctl_on_ui_update(uint16_t temperature, + uint16_t deltauv) +{ + // Temporary buffer to format the LCD output text + char tmp_str[LCD_ROW_LEN]; + char deltauv_str[8] = { 0 }; + + sl_btmesh_ctl_server_snprint_deltauv(deltauv_str, + sizeof(deltauv_str), + deltauv); + + snprintf(tmp_str, LCD_ROW_LEN, "ColorTemp: %5uK", temperature); + app_log("BT mesh CTL Color temperature: %5uK" APP_LOG_NL, temperature); + sl_status_t status = sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_COLOR_TEMPERATURE_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + + snprintf(tmp_str, LCD_ROW_LEN, "Delta UV: %6s ", deltauv_str); + app_log("BT mesh CTL Delta UV: %6s" APP_LOG_NL, deltauv_str); + status = sl_btmesh_LCD_write(tmp_str, SL_BTMESH_WSTK_LCD_ROW_DELTAUV_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +// ----------------------------------------------------------------------------- +// BT mesh Lightning Server Callbacks + +/******************************************************************************* + * Called when the UI shall be updated with the changed state of + * lightning server during a transition. The rate of this callback can be + * controlled by changing the SL_BTMESH_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * @param[in] lightness_level lightness level (0x0001 - FFFE) + ******************************************************************************/ +void sl_btmesh_lighting_server_on_ui_update(uint16_t lightness_level) +{ + // Temporary buffer to format the LCD output text + char tmp_str[LCD_ROW_LEN]; + uint16_t lightness_percent = (lightness_level * 100 + 99) / 65535; + + app_log("BT mesh Lightness: %5u%%" APP_LOG_NL, lightness_percent); + snprintf(tmp_str, LCD_ROW_LEN, "Lightness: %5u%%", lightness_percent); + sl_status_t status = sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_LIGHTNESS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called at node initialization time to provide provisioning information + * + * @param[in] provisioned true: provisioned, false: unprovisioned + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, " + "started unprovisioned beaconing..." APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("unprovisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + } +} + +/******************************************************************************* + * Called when the Provisioning starts + * + * @param[in] result Result code. 0: success, non-zero: error + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, + result); + sl_status_t status = sl_btmesh_LCD_write("provisioning...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)result; +} + +/******************************************************************************* + * Called when the Provisioning finishes successfully + * + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + sl_status_t status = sl_btmesh_LCD_write("provisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)address; + (void)iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + * + * @param[in] result Result code. 0: success, non-zero: error + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + sl_status_t status = sl_btmesh_LCD_write("prov failed...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)result; +} + +// ----------------------------------------------------------------------------- +// Factory Reset Callback + +/******************************************************************************* + * Shows the node reset information + ******************************************************************************/ +void app_show_btmesh_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Node reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when full reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Factory reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} diff --git a/app/btmesh/example/btmesh_soc_light/app_out_log.c b/app/btmesh/example/btmesh_soc_light/app_out_log.c new file mode 100644 index 00000000000..fc69309b1d2 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/app_out_log.c @@ -0,0 +1,224 @@ +/***************************************************************************//** + * @file + * @brief Application Output Log code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include "em_common.h" +#include "sl_status.h" + +#include "app.h" +#include "app_log.h" + +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_btmesh_friend.h" +#include "sl_btmesh_ctl_server.h" +#include "sl_btmesh_lighting_server.h" +#include "sl_btmesh_provisioning_decorator.h" +#include "sl_btmesh_factory_reset.h" + +#define LIGHTNESS_LEVEL_TO_PERCENTAGE(lev) ((((lev) * 100) + 99) / 65535) + +// ----------------------------------------------------------------------------- +// BT mesh Friend Node Callbacks + +/******************************************************************************* + * Called when the Friend Node establishes friendship with another node. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + * + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_established(uint16_t netkey_index, + uint16_t lpn_address) +{ + app_log("BT mesh Friendship established with LPN " + "(netkey idx: %u, lpn addr: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address); + (void)netkey_index; + (void)lpn_address; +} + +/******************************************************************************* + * Called when the friendship that was successfully established with a Low Power + * Node has been terminated. + * + * @param[in] netkey_index Index of the network key used in friendship + * @param[in] lpn_address Low Power Node address + * @param[in] reason Reason for friendship termination + * + ******************************************************************************/ +void sl_btmesh_friend_on_friendship_terminated(uint16_t netkey_index, + uint16_t lpn_address, + uint16_t reason) +{ + app_log("BT mesh Friendship terminated with LPN " + "(netkey idx: %d, lpn addr: 0x%04x, reason: 0x%04x)" APP_LOG_NL, + netkey_index, + lpn_address, + reason); + (void)netkey_index; + (void)lpn_address; + (void)reason; +} + +// ----------------------------------------------------------------------------- +// BT mesh CTL Callbacks + +/******************************************************************************* + * Called when the UI shall be updated with the changed CTL Model state during + * a transition. The rate of this callback can be controlled by changing the + * SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * @param[in] temperature Temperature of color. + * @param[in] deltauv Delta UV value. + * + ******************************************************************************/ +void sl_btmesh_ctl_on_ui_update(uint16_t temperature, + uint16_t deltauv) +{ + char deltauv_str[8] = { 0 }; + + sl_btmesh_ctl_server_snprint_deltauv(deltauv_str, + sizeof(deltauv_str), + deltauv); + app_log("BT mesh CTL Color Temperature: %5uK" APP_LOG_NL, temperature); + app_log("BT mesh CTL Delta UV: %6s" APP_LOG_NL, deltauv_str); + (void)temperature; +} + +// ----------------------------------------------------------------------------- +// BT mesh Lightning Server Callbacks + +/******************************************************************************* + * Called when the UI shall be updated with the changed state of + * lightning server during a transition. The rate of this callback can be + * controlled by changing the SL_BTMESH_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL macro. + * + * @param[in] lightness_level lightness level (0x0001 - FFFE) + * + ******************************************************************************/ +void sl_btmesh_lighting_server_on_ui_update(uint16_t lightness_level) +{ + app_log("BT mesh Lightness: %5u%%" APP_LOG_NL, + LIGHTNESS_LEVEL_TO_PERCENTAGE(lightness_level)); + (void)lightness_level; +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called at node initialization time to provide provisioning information + * + * @param[in] provisioned true: provisioned, false: unprovisioned + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + * + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, " + "started unprovisioned beaconing..." APP_LOG_NL); + } +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called when the Provisioning starts + * + * @param[in] result Result code. 0: success, non-zero: error + * + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, + result); + (void)result; +} + +/******************************************************************************* + * Called when the Provisioning finishes successfully + * + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + * + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + (void)address; + (void)iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + * + * @param[in] result Result code. 0: success, non-zero: error + * + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + (void) result; +} + +// ----------------------------------------------------------------------------- +// Factory Reset Callback + +/******************************************************************************* + * Shows the node reset information + ******************************************************************************/ +void app_show_btmesh_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); +} + +/******************************************************************************* + * Called when full reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); +} diff --git a/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_brd2601b.slcp b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_brd2601b.slcp new file mode 100644 index 00000000000..54e6f36499c --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_brd2601b.slcp @@ -0,0 +1,176 @@ +project_name: btmesh_soc_light +package: Btmesh +label: Bluetooth Mesh - SoC Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_ctl_server + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: mx25_flash_shutdown_usart + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_rgb_pwm_led + instance: + - rgb_led0 + - id: simple_timer + +source: + - path: app.c + - path: app_led_rgb.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + - path: rgbled_brd2601.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + - path: rgbled_brd2601.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_light/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_light/readme_img0.png + - path: ../../documentation/example/btmesh_soc_light/readme_img1.png + - path: ../../documentation/example/btmesh_soc_light/readme_img2.png + - path: ../../documentation/example/btmesh_soc_light/readme_img3.png + - path: ../../documentation/example/btmesh_soc_light/readme_img4.png + - path: ../../documentation/example/btmesh_soc_light/readme_img5.png + - path: ../../documentation/example/btmesh_soc_light/readme_img6.png + - path: ../../documentation/example/btmesh_soc_light/readme_img7.png + - path: ../../documentation/example/btmesh_soc_light/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmlight_v1"' + - name: SL_HEAP_SIZE + value: "0x5600" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +define: + - name: SL_BTMESH_LIGHT_RGB_BRD2601 + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:device:sdid:!205 + - hardware:component:button:2+ + - hardware:component:led:2+ + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_brd4166a.slcp b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_brd4166a.slcp new file mode 100644 index 00000000000..2ef9a5c725c --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_brd4166a.slcp @@ -0,0 +1,171 @@ +project_name: btmesh_soc_light +package: Btmesh +label: Bluetooth Mesh - SoC Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_ctl_server + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_rgb_pwm_led + instance: + - rgb_led0 + - id: simple_timer + +source: + - path: app.c + - path: app_led_rgb.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + - path: rgbled_brd4166.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + - path: rgbled_brd4166.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_light/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_light/readme_img0.png + - path: ../../documentation/example/btmesh_soc_light/readme_img1.png + - path: ../../documentation/example/btmesh_soc_light/readme_img2.png + - path: ../../documentation/example/btmesh_soc_light/readme_img3.png + - path: ../../documentation/example/btmesh_soc_light/readme_img4.png + - path: ../../documentation/example/btmesh_soc_light/readme_img5.png + - path: ../../documentation/example/btmesh_soc_light/readme_img6.png + - path: ../../documentation/example/btmesh_soc_light/readme_img7.png + - path: ../../documentation/example/btmesh_soc_light/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmlight_v1"' + - name: SL_HEAP_SIZE + value: "0x5600" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +define: + - name: SL_BTMESH_LIGHT_RGB_BRD4166 + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:device:sdid:!205 + - hardware:component:button:2+ + - hardware:component:led:2+ + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_display.slcp b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_display.slcp new file mode 100644 index 00000000000..4ec88ab0737 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_display.slcp @@ -0,0 +1,178 @@ +project_name: btmesh_soc_light +package: Btmesh +label: Bluetooth Mesh - SoC Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_ctl_server + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: pwm + instance: + - led0 + - led1 + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_timer + +source: + - path: app.c + - path: app_led.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_light/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_light/readme_img0.png + - path: ../../documentation/example/btmesh_soc_light/readme_img1.png + - path: ../../documentation/example/btmesh_soc_light/readme_img2.png + - path: ../../documentation/example/btmesh_soc_light/readme_img3.png + - path: ../../documentation/example/btmesh_soc_light/readme_img4.png + - path: ../../documentation/example/btmesh_soc_light/readme_img5.png + - path: ../../documentation/example/btmesh_soc_light/readme_img6.png + - path: ../../documentation/example/btmesh_soc_light/readme_img7.png + - path: ../../documentation/example/btmesh_soc_light/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmlight_v1"' + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: "0x5600" + condition: + - "device_sdid_89" + - name: SL_HEAP_SIZE + value: "0x5900" + unless: + - "device_sdid_89" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:sdid:!205 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_display_eusart.slcp b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_display_eusart.slcp new file mode 100644 index 00000000000..25b4a604dcb --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_display_eusart.slcp @@ -0,0 +1,177 @@ +project_name: btmesh_soc_light +package: Btmesh +label: Bluetooth Mesh - SoC Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_ctl_server + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: memlcd_usart + - id: mpu + - id: mx25_flash_shutdown_usart + - id: pwm + instance: + - led0 + - led1 + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_timer + +source: + - path: app.c + - path: app_led.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_light/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_light/readme_img0.png + - path: ../../documentation/example/btmesh_soc_light/readme_img1.png + - path: ../../documentation/example/btmesh_soc_light/readme_img2.png + - path: ../../documentation/example/btmesh_soc_light/readme_img3.png + - path: ../../documentation/example/btmesh_soc_light/readme_img4.png + - path: ../../documentation/example/btmesh_soc_light/readme_img5.png + - path: ../../documentation/example/btmesh_soc_light/readme_img6.png + - path: ../../documentation/example/btmesh_soc_light/readme_img7.png + - path: ../../documentation/example/btmesh_soc_light/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmlight_v1"' + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: "0x5900" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_log.slcp b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_log.slcp new file mode 100644 index 00000000000..6fe77d65e7a --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_log.slcp @@ -0,0 +1,169 @@ +project_name: btmesh_soc_light +package: Btmesh +label: Bluetooth Mesh - SoC Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_ctl_server + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: pwm + instance: + - led0 + - led1 + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_timer + +source: + - path: app.c + - path: app_led.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_light/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_light/readme_img0.png + - path: ../../documentation/example/btmesh_soc_light/readme_img1.png + - path: ../../documentation/example/btmesh_soc_light/readme_img2.png + - path: ../../documentation/example/btmesh_soc_light/readme_img3.png + - path: ../../documentation/example/btmesh_soc_light/readme_img4.png + - path: ../../documentation/example/btmesh_soc_light/readme_img5.png + - path: ../../documentation/example/btmesh_soc_light/readme_img6.png + - path: ../../documentation/example/btmesh_soc_light/readme_img7.png + - path: ../../documentation/example/btmesh_soc_light/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmlight_v1"' + - name: SL_HEAP_SIZE + value: "0x5600" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:sdid:!205 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_log_eusart.slcp b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_log_eusart.slcp new file mode 100644 index 00000000000..c565a3c66bd --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/btmesh_soc_light_log_eusart.slcp @@ -0,0 +1,173 @@ +project_name: btmesh_soc_light +package: Btmesh +label: Bluetooth Mesh - SoC Light +description: > + 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. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: btmesh_ctl_server + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_friend + - id: btmesh_generic_base + - id: btmesh_lc_server + - id: btmesh_lighting_server + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_server + - id: btmesh_scheduler_server + - id: btmesh_stack + - id: btmesh_time_server + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: mpu + - id: mx25_flash_shutdown_usart + - id: pwm + instance: + - led0 + - led1 + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_timer + +source: + - path: app.c + - path: app_led.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + - path: app_led.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_light/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_light/readme_img0.png + - path: ../../documentation/example/btmesh_soc_light/readme_img1.png + - path: ../../documentation/example/btmesh_soc_light/readme_img2.png + - path: ../../documentation/example/btmesh_soc_light/readme_img3.png + - path: ../../documentation/example/btmesh_soc_light/readme_img4.png + - path: ../../documentation/example/btmesh_soc_light/readme_img5.png + - path: ../../documentation/example/btmesh_soc_light/readme_img6.png + - path: ../../documentation/example/btmesh_soc_light/readme_img7.png + - path: ../../documentation/example/btmesh_soc_light/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_LC_SERVER_PROPERTY_STATE_DEFAULT_ENABLE_CFG_VAL + value: "1" + - name: SL_BTMESH_LC_SERVER_TIME_RUN_ON_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_TIME_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_ON_DEFAULT_CFG_VAL + value: "65535" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_PROLONG_DEFAULT_CFG_VAL + value: "32767" + - name: SL_BTMESH_LC_SERVER_LIGHTNESS_STANDBY_DEFAULT_CFG_VAL + value: "2000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_ON_DEFAULT_CFG_VAL + value: "1000" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_PROLONG_DEFAULT_CFG_VAL + value: "500" + - name: SL_BTMESH_LC_SERVER_AMBIENT_LUX_LEVEL_STANDBY_DEFAULT_CFG_VAL + value: "20" + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmlight_v1"' + - name: SL_HEAP_SIZE + value: "0x5600" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1500" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_light/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_light/dcd_config.btmeshconf new file mode 100644 index 00000000000..cbecf8a26c5 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/dcd_config.btmeshconf @@ -0,0 +1,17 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x0003", + "vid": "0x0420", + "elements": [ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0000", "name":"Configuration Server"}, + {"mid":"0x0002", "name":"Health Server"} + ] + } + ] + } +} \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_light/gatt_configuration.btconf b/app/btmesh/example/btmesh_soc_light/gatt_configuration.btconf new file mode 100644 index 00000000000..027641c4dad --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/gatt_configuration.btconf @@ -0,0 +1,48 @@ + + + + + Abstract: The generic_access service contains generic information about the device. All available Characteristics are readonly. + + + light node + + + + Abstract: The external appearance of this device. The values are composed of a category (10-bits) and sub-categories (6-bits). + 0000 + + + + + Abstract: The Device Information Service exposes manufacturer and/or vendor information about a device. Summary: This service exposes manufacturer information about a device. The Device Information Service is instantiated as a Primary Service. Only one instance of the Device Information Service is exposed on a device. + + Abstract: The value of this characteristic is a UTF-8 string representing the name of the manufacturer of the device. + Silicon Labs + + + + + + Abstract: The value of this characteristic is a UTF-8 string representing the model number assigned by the device vendor. + 00000000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the hardware revision for the hardware within the device. + 000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the firmware revision for the firmware within the device. + 0.0.0 + + + + Abstract: The SYSTEM ID characteristic consists of a structure with two fields. The first field are the LSOs and the second field contains the MSOs. This is a 64-bit structure which consists of a 40-bit manufacturer-defined identifier concatenated with a 24 bit unique Organizationally Unique Identifier (OUI). The OUI is issued by the IEEE Registration Authority (http://standards.ieee.org/regauth/index.html) and is required to be used in accordance with IEEE Standard 802-2001.6 while the least significant 40 bits are manufacturer defined. If System ID generated based on a Bluetooth Device Address, it is required to be done as follows. System ID and the Bluetooth Device Address have a very similar structure: a Bluetooth Device Address is 48 bits in length and consists of a 24 bit Company Assigned Identifier (manufacturer defined identifier) concatenated with a 24 bit Company Identifier (OUI). In order to encapsulate a Bluetooth Device Address as System ID, the Company Identifier is concatenated with 0xFFFE followed by the Company Assigned Identifier of the Bluetooth Address. For more guidelines related to EUI-64, refer to http://standards.ieee.org/develop/regauth/tut/eui64.pdf. Examples: If the system ID is based of a Bluetooth Device Address with a Company Identifier (OUI) is 0x123456 and the Company Assigned Identifier is 0x9ABCDE, then the System Identifier is required to be 0x123456FFFE9ABCDE. + + + + + + \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_light/local_cli_commands.c b/app/btmesh/example/btmesh_soc_light/local_cli_commands.c new file mode 100644 index 00000000000..0b201e0d7b8 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/local_cli_commands.c @@ -0,0 +1,85 @@ +/***************************************************************************//** + * @file + * @brief CLI commands 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. + * + ******************************************************************************/ + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_CLI_PRESENT +#include "sl_btmesh.h" +#include "sl_bluetooth.h" +#include "sl_cli.h" +#include "app_log.h" +#include "app_assert.h" + +/***************************************************************************//** + * CLI Command to read BT Address and mesh UUID. + ******************************************************************************/ +void info(sl_cli_command_arg_t *arguments) +{ + (void) arguments; + bd_addr address; + uint8_t address_type; + uuid_128 uuid; + + sl_status_t sc = sl_bt_system_get_identity_address(&address, &address_type); + app_assert_status_f(sc, "Failed to get Bluetooth address"); + app_log("Bluetooth %s address: %02X:%02X:%02X:%02X:%02X:%02X" APP_LOG_NL, + address_type ? "static random" : "public device", + address.addr[5], + address.addr[4], + address.addr[3], + address.addr[2], + address.addr[1], + address.addr[0]); + + sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get Bluetooth mesh uuid"); + app_log("Bluetooth mesh UUID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X" + "%02X%02X%02X%02X%02X" APP_LOG_NL, + uuid.data[0], + uuid.data[1], + uuid.data[2], + uuid.data[3], + uuid.data[4], + uuid.data[5], + uuid.data[6], + uuid.data[7], + uuid.data[8], + uuid.data[9], + uuid.data[10], + uuid.data[11], + uuid.data[12], + uuid.data[13], + uuid.data[14], + uuid.data[15]); +} + +#endif // SL_CATALOG_CLI_PRESENT diff --git a/app/btmesh/example/btmesh_soc_light/main.c b/app/btmesh/example/btmesh_soc_light/main.c new file mode 100644 index 00000000000..939ed36f5d9 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/main.c @@ -0,0 +1,71 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif // SL_CATALOG_POWER_MANAGER_PRESENT +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} diff --git a/app/btmesh/example/btmesh_soc_light/rgbled_brd2601.c b/app/btmesh/example/btmesh_soc_light/rgbled_brd2601.c new file mode 100644 index 00000000000..792287a4b08 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/rgbled_brd2601.c @@ -0,0 +1,67 @@ +/***************************************************************************//** + * @file + * @brief RGB LED driver for BRD2601B + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_simple_rgb_pwm_led_instances.h" +#include "sl_simple_rgb_pwm_led.h" +#include "rgbled_brd2601.h" + +// ----------------------------------------------------------------------------- +// Public function definitions + +/******************************************************************************* + * Initialize all LEDs. + ******************************************************************************/ +void rgb_led_init(void) +{ +} + +/******************************************************************************* + * De-initialize all LEDs by disabling them. + ******************************************************************************/ +void rgb_led_deinit(void) +{ +} + +/******************************************************************************* + * Set LED color based on RGB components. + * + * @param[in] mask LED instance mask + * @param[in] r Red component + * @param[in] g Green component + * @param[in] b Blue component + ******************************************************************************/ +void rgb_led_set_rgb(uint8_t m, uint8_t r, uint8_t g, uint8_t b) +{ + (void) m; + sl_led_set_rgb_color(&sl_simple_rgb_pwm_led_rgb_led0, + (uint16_t)r, + (uint16_t)g, + (uint16_t)b); +} diff --git a/app/btmesh/example/btmesh_soc_light/rgbled_brd2601.h b/app/btmesh/example/btmesh_soc_light/rgbled_brd2601.h new file mode 100644 index 00000000000..10cd46dbb57 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/rgbled_brd2601.h @@ -0,0 +1,54 @@ +/***************************************************************************//** + * @file + * @brief Board HW abstraction header for BRD2601B + ******************************************************************************* + * # 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 RGBLED_LIGHT_BRD2601_H +#define RGBLED_LIGHT_BRD2601_H + +/***************************************************************************//** + * Initialize all LEDs. + ******************************************************************************/ +void rgb_led_init(void); + +/***************************************************************************//** + * De-initialize all LEDs by disabling them. + ******************************************************************************/ +void rgb_led_deinit(void); + +/***************************************************************************//** + * Set LED color based on RGB components. + * + * @param[in] mask LED instance mask + * @param[in] r Red component + * @param[in] g Green component + * @param[in] b Blue component + ******************************************************************************/ +void rgb_led_set_rgb(uint8_t m, uint8_t r, uint8_t g, uint8_t b); + +#endif // RGBLED_BRD2601_H diff --git a/app/btmesh/example/btmesh_soc_light/rgbled_brd4166.c b/app/btmesh/example/btmesh_soc_light/rgbled_brd4166.c new file mode 100644 index 00000000000..3ac2688ec64 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/rgbled_brd4166.c @@ -0,0 +1,131 @@ +/***************************************************************************//** + * @file + * @brief RGB LED driver for BRD4166A + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_simple_rgb_pwm_led_instances.h" +#include "sl_simple_rgb_pwm_led.h" +#include "em_gpio.h" +#include "rgbled_brd4166.h" + +// ----------------------------------------------------------------------------- +// Private function definitions + +/***************************************************************************//** + * Enable RGB LEDs with respect to the enabling bitmask. + * + * @param[in] enable Enable or disable the selected LEDs. + * @param[in] mask LED instance mask. + ******************************************************************************/ +static void rgb_led_enable(bool enable, uint8_t mask) +{ + if ( ( (mask != 0) && (enable == true) ) + || ( ( (mask & 0xf) == 0xf) && (enable == false) ) ) { + if ( enable ) { + GPIO_PinOutSet(BOARD_RGBLED_PWR_EN_PORT, BOARD_RGBLED_PWR_EN_PIN); + } else { + GPIO_PinOutClear(BOARD_RGBLED_PWR_EN_PORT, BOARD_RGBLED_PWR_EN_PIN); + } + } + + int i; + uint8_t pins[BOARD_RGBLED_COUNT] = { BOARD_RGBLED_COM0_PIN, + BOARD_RGBLED_COM1_PIN, + BOARD_RGBLED_COM2_PIN, + BOARD_RGBLED_COM3_PIN }; + + for ( i = 0; i < BOARD_RGBLED_COUNT; i++ ) { + if ( ( (mask >> i) & 1) == 1 ) { + if ( enable ) { + GPIO_PinOutSet(BOARD_RGBLED_COM_PORT, + pins[(BOARD_RGBLED_COUNT - 1) - i]); + } else { + GPIO_PinOutClear(BOARD_RGBLED_COM_PORT, + pins[(BOARD_RGBLED_COUNT - 1) - i]); + } + } + } + + return; +} + +// ----------------------------------------------------------------------------- +// Public function definitions + +/******************************************************************************* + * Initialize all LEDs. + ******************************************************************************/ +void rgb_led_init(void) +{ + GPIO_PinModeSet(BOARD_RGBLED_PWR_EN_PORT, + BOARD_RGBLED_PWR_EN_PIN, + gpioModePushPull, + 0); + GPIO_PinModeSet(BOARD_RGBLED_COM0_PORT, + BOARD_RGBLED_COM0_PIN, + gpioModePushPull, + 0); + GPIO_PinModeSet(BOARD_RGBLED_COM1_PORT, + BOARD_RGBLED_COM1_PIN, + gpioModePushPull, + 0); + GPIO_PinModeSet(BOARD_RGBLED_COM2_PORT, + BOARD_RGBLED_COM2_PIN, + gpioModePushPull, + 0); + GPIO_PinModeSet(BOARD_RGBLED_COM3_PORT, + BOARD_RGBLED_COM3_PIN, + gpioModePushPull, + 0); +} + +/******************************************************************************* + * De-initialize all LEDs by disabling them. + ******************************************************************************/ +void rgb_led_deinit(void) +{ + rgb_led_enable(false, 0xf); +} + +/******************************************************************************* + * Set LED color based on RGB components. + * + * @param[in] mask LED instance mask + * @param[in] r Red component + * @param[in] g Green component + * @param[in] b Blue component + ******************************************************************************/ +void rgb_led_set_rgb(uint8_t m, uint8_t r, uint8_t g, uint8_t b) +{ + rgb_led_enable(false, ~m); + rgb_led_enable(true, m); + sl_led_set_rgb_color(&sl_simple_rgb_pwm_led_rgb_led0, + (uint16_t)r, + (uint16_t)g, + (uint16_t)b); +} diff --git a/app/btmesh/example/btmesh_soc_light/rgbled_brd4166.h b/app/btmesh/example/btmesh_soc_light/rgbled_brd4166.h new file mode 100644 index 00000000000..a6d2bd808db --- /dev/null +++ b/app/btmesh/example/btmesh_soc_light/rgbled_brd4166.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief Board HW abstraction header for BRD4166A + ******************************************************************************* + * # 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 RGBLED_LIGHT_BRD4166_H +#define RGBLED_LIGHT_BRD4166_H + +/// Mask to enable EM4 wake-up BTN0 +#define BOARD_BUTTON0_EM4WUEN_MASK 0x10 + +/// RGB LED present on board +#define BOARD_RGBLED_PRESENT 1 +/// Number of LEDs on board +#define BOARD_RGBLED_COUNT 4 +/// RGB LED Power Enable port +#define BOARD_RGBLED_PWR_EN_PORT gpioPortJ +/// RGB LED Power Enable pin +#define BOARD_RGBLED_PWR_EN_PIN 14 +/// RGB LED COM port +#define BOARD_RGBLED_COM_PORT gpioPortI +/// RGB LED COM0 port +#define BOARD_RGBLED_COM0_PORT gpioPortI +/// RGB LED COM0 pin +#define BOARD_RGBLED_COM0_PIN 0 +/// RGB LED COM1 port +#define BOARD_RGBLED_COM1_PORT gpioPortI +/// RGB LED COM1 pin +#define BOARD_RGBLED_COM1_PIN 1 +/// RGB LED COM2 port +#define BOARD_RGBLED_COM2_PORT gpioPortI +/// RGB LED COM2 pin +#define BOARD_RGBLED_COM2_PIN 2 +/// RGB LED COM3 port +#define BOARD_RGBLED_COM3_PORT gpioPortI +/// RGB LED COM3 pin +#define BOARD_RGBLED_COM3_PIN 3 + +/***************************************************************************//** + * Initialize all LEDs. + ******************************************************************************/ +void rgb_led_init(void); + +/***************************************************************************//** + * De-initialize all LEDs by disabling them. + ******************************************************************************/ +void rgb_led_deinit(void); + +/***************************************************************************//** + * Set LED color based on RGB components. + * + * @param[in] mask LED instance mask + * @param[in] r Red component + * @param[in] g Green component + * @param[in] b Blue component + ******************************************************************************/ +void rgb_led_set_rgb(uint8_t m, uint8_t r, uint8_t g, uint8_t b); + +#endif // RGBLED_LIGHT_BRD4166_H diff --git a/app/btmesh/example/btmesh_soc_sensor_client/app.c b/app/btmesh/example/btmesh_soc_sensor_client/app.c new file mode 100644 index 00000000000..25f7c04ba66 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/app.c @@ -0,0 +1,480 @@ +/***************************************************************************//** + * @file + * @brief Application code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include +#include +#include "em_common.h" +#include "sl_status.h" + +#include "sl_btmesh.h" +#include "sl_bluetooth.h" +#include "app.h" +#include "app_assert.h" +#include "app_log.h" + +#include "gatt_db.h" + +#include "sl_btmesh_sensor_client.h" + +/* Buttons and LEDs headers */ +#include "app_button_press.h" +#include "sl_simple_button_instances.h" +#include "sl_simple_led_instances.h" +#include "sl_simple_timer.h" +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_provisioning_decorator.h" + +#include "app_btmesh_util.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#include "sl_btmesh_wstk_lcd.h" +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +/// High Priority +#define HIGH_PRIORITY 0 +/// No Timer Options +#define NO_FLAGS 0 +/// Callback has not parameters +#define NO_CALLBACK_DATA (void *)NULL +/// timeout for registering new devices after startup +#define DEVICE_REGISTER_SHORT_TIMEOUT 100 +/// timeout for registering new devices after startup +#define DEVICE_REGISTER_LONG_TIMEOUT 20000 +/// timeout for periodic sensor data update +#define SENSOR_DATA_TIMEOUT 2000 +/// Timeout for Blinking LED during provisioning +#define APP_LED_BLINKING_TIMEOUT 250 +/// Length of the display name buffer +#define NAME_BUF_LEN 20 +/// Length of boot error message buffer +#define BOOT_ERR_MSG_BUF_LEN 30 +/// Used button indexes +#define BUTTON_PRESS_BUTTON_0 0 +#define BUTTON_PRESS_BUTTON_1 1 + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#define lcd_print(...) sl_btmesh_LCD_write(__VA_ARGS__) +#else +#define lcd_print(...) +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +// ------------------------------- +// Periodic timer handles +static sl_simple_timer_t app_sensor_data_timer; +static sl_simple_timer_t app_update_registered_devices_timer; +static sl_simple_timer_t app_led_blinking_timer; + +// ------------------------------- +// Periodic timer callbacks +static void app_sensor_data_timer_cb(sl_simple_timer_t *handle, + void *data); +static void app_update_registered_devices_timer_cb(sl_simple_timer_t *handle, + void *data); +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, + void *data); + +/// Number of active Bluetooth connections +static uint8_t num_connections = 0; + +static bool init_done = false; + +/// Currently displayed property ID +static mesh_device_properties_t current_property = PRESENT_AMBIENT_TEMPERATURE; + +/// Property IDs supported by application +static void sensor_client_change_current_property(void); + +// Handles button press and does a factory reset +static bool handle_reset_conditions(void); + +/***************************************************************************//** + * Change buttons to LEDs in case of shared pin + * + ******************************************************************************/ +void change_buttons_to_leds(void) +{ + app_button_press_disable(); + // Disable button and enable led + sl_simple_button_disable(&sl_button_btn0); + sl_simple_led_init(sl_led_led0.context); + // Disable button and enable led +#ifndef SINGLE_BUTTON + sl_simple_button_disable(&sl_button_btn1); +#endif // SINGLE_BUTTON +#ifndef SINGLE_LED + sl_simple_led_init(sl_led_led1.context); +#endif //SINGLE_LED +} + +/***************************************************************************//** + * Change LEDs to buttons in case of shared pin + * + ******************************************************************************/ +void change_leds_to_buttons(void) +{ + // Enable buttons + sl_simple_button_enable(&sl_button_btn0); +#ifndef SINGLE_BUTTON + sl_simple_button_enable(&sl_button_btn1); +#endif // SINGLE_BUTTON + // Wait + sl_sleeptimer_delay_millisecond(1); + // Enable button presses + app_button_press_enable(); +} + +/******************************************************************************* + * Application Init. + ******************************************************************************/ +SL_WEAK void app_init(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application init code here! // + // This is called once during start-up. // + ///////////////////////////////////////////////////////////////////////////// + app_log("Bt Mesh Sensor Client initialized" APP_LOG_NL); + // Ensure right init order in case of shared pin for enabling buttons + change_buttons_to_leds(); + // Change LEDs to buttons in case of shared pin + change_leds_to_buttons(); + handle_reset_conditions(); +} + +/******************************************************************************* + * Application Process Action. + ******************************************************************************/ +SL_WEAK void app_process_action(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application code here! // + // This is called infinitely. // + // Do not call blocking functions from here! // + ///////////////////////////////////////////////////////////////////////////// +} + +/******************************************************************************* + * Get the currently set property ID + * + * @return Current property ID + ******************************************************************************/ +mesh_device_properties_t app_get_current_property(void) +{ + return current_property; +} + +/***************************************************************************//** + * Set device name in the GATT database. A unique name is generated using + * the two last bytes from the UUID of this device. Name is also + * displayed on the LCD. + * + * @param[in] uuid Pointer to device UUID. + ******************************************************************************/ +static void set_device_name(uuid_128 *uuid) +{ + char name[NAME_BUF_LEN]; + sl_status_t result; + + // Create unique device name using the last two bytes of the device UUID + snprintf(name, + NAME_BUF_LEN, + "sensor client %02x%02x", + uuid->data[14], + uuid->data[15]); + + app_log("Device name: '%s'" APP_LOG_NL, name); + + result = sl_bt_gatt_server_write_attribute_value(gattdb_device_name, + 0, + strlen(name), + (uint8_t *)name); + app_log_status_error_f(result, + "sl_bt_gatt_server_write_attribute_value() failed" APP_LOG_NL); + + // Show device name on the LCD + lcd_print(name, SL_BTMESH_WSTK_LCD_ROW_NAME_CFG_VAL); +} + +/***************************************************************************//** + * Handles button press and does a factory reset + * + * @return true if there is no button press + ******************************************************************************/ +static bool handle_reset_conditions(void) +{ + // If PB0 is held down then do full factory reset + if (sl_simple_button_get_state(&sl_button_btn0) + == SL_SIMPLE_BUTTON_PRESSED) { + // Disable button presses + app_button_press_disable(); + // Full factory reset + sl_btmesh_initiate_full_reset(); + return false; + } + +#ifndef SINGLE_BUTTON + // If PB1 is held down then do node factory reset + if (sl_simple_button_get_state(&sl_button_btn1) + == SL_SIMPLE_BUTTON_PRESSED) { + // Disable button presses + app_button_press_disable(); + // Node factory reset + sl_btmesh_initiate_node_reset(); + return false; + } +#endif // SL_CATALOG_BTN1_PRESENT + return true; +} + +/***************************************************************************//** + * Update registered devices after the specified timeout + * + * @param[in] timeout_ms Timer timeout, in milliseconds. + ******************************************************************************/ +static void schedule_registered_device_update(uint32_t timeout_ms) +{ + sl_status_t sc = + sl_simple_timer_start(&app_update_registered_devices_timer, + timeout_ms, + app_update_registered_devices_timer_cb, + NO_CALLBACK_DATA, + false); + app_assert_status_f(sc, "Failed to start timer"); +} + +/***************************************************************************//** + * Handling of le stack events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_bt_on_event(sl_bt_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_bt_evt_connection_opened_id: + num_connections++; + lcd_print("connected", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Connected" APP_LOG_NL); + break; + + case sl_bt_evt_connection_closed_id: + if (num_connections > 0) { + if (--num_connections == 0) { + lcd_print("", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Disconnected" APP_LOG_NL); + } + } + break; + + default: + break; + } +} + +/***************************************************************************//** + * Bluetooth Mesh stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Pointer to incoming event from the Bluetooth Mesh stack. + ******************************************************************************/ +void sl_btmesh_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + if (evt->data.evt_node_initialized.provisioned) { + schedule_registered_device_update(DEVICE_REGISTER_SHORT_TIMEOUT); + } + break; + case sl_btmesh_evt_node_provisioned_id: + schedule_registered_device_update(DEVICE_REGISTER_LONG_TIMEOUT); + break; + default: + break; + } +} + +void update_registered_devices(void) +{ + sl_status_t sc; + + sl_btmesh_sensor_client_update_registered_devices(current_property); + + sc = sl_simple_timer_start(&app_sensor_data_timer, + SENSOR_DATA_TIMEOUT, + app_sensor_data_timer_cb, + NO_CALLBACK_DATA, + true); + + app_assert_status_f(sc, "Failed to start periodic timer"); +} + +/***************************************************************************//** + * Callbacks + ******************************************************************************/ + +/***************************************************************************//** + * Handling of provisionee init result + ******************************************************************************/ +void sl_btmesh_provisionee_on_init(sl_status_t result) +{ + if (SL_STATUS_OK != result) { + char buf[BOOT_ERR_MSG_BUF_LEN]; + snprintf(buf, sizeof(buf), "init failed (0x%lx)", result); + lcd_print(buf, SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + } else { + uuid_128 uuid; + sl_status_t sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get UUID"); + set_device_name(&uuid); + } +} + +void app_button_press_cb(uint8_t button, uint8_t duration) +{ + (void)duration; + if (duration == APP_BUTTON_PRESS_NONE) { + return; + } + // button pressed + if (button == BUTTON_PRESS_BUTTON_0) { + if (duration < APP_BUTTON_PRESS_DURATION_LONG) { + app_log("PB0 pressed" APP_LOG_NL); + sensor_client_change_current_property(); + } else { + app_log("PB0 long pressed" APP_LOG_NL); + update_registered_devices(); + } + } else if (button == BUTTON_PRESS_BUTTON_1) { + app_log("PB1 pressed" APP_LOG_NL); + update_registered_devices(); + } +} + +/***************************************************************************//** + * Timer Callbacks + ******************************************************************************/ +static void app_sensor_data_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + sl_btmesh_sensor_client_get_sensor_data(current_property); +} + +static void app_update_registered_devices_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + sl_status_t sc; + + sl_btmesh_sensor_client_update_registered_devices(current_property); + + sc = sl_simple_timer_start(&app_sensor_data_timer, + SENSOR_DATA_TIMEOUT, + app_sensor_data_timer_cb, + NO_CALLBACK_DATA, + true); + + app_assert_status_f(sc, "Failed to start periodic timer"); +} + +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, + void *data) +{ + (void)data; + (void)handle; + if (!init_done) { + // Toggle LEDs + sl_led_led0.toggle(sl_led_led0.context); +#ifndef SINGLE_LED + sl_led_led1.toggle(sl_led_led1.context); +#endif // SINGLE_LED + } +} + +/***************************************************************************//** + * It changes currently displayed property ID. + ******************************************************************************/ +static void sensor_client_change_current_property(void) +{ + switch (current_property) { + case PRESENT_AMBIENT_TEMPERATURE: + current_property = PEOPLE_COUNT; + break; + case PEOPLE_COUNT: + current_property = PRESENT_AMBIENT_LIGHT_LEVEL; + break; + case PRESENT_AMBIENT_LIGHT_LEVEL: + current_property = PRESENT_AMBIENT_TEMPERATURE; + break; + default: + app_log("Unsupported property ID change" APP_LOG_NL); + break; + } +} + +/***************************************************************************//** + * Provisioning Decorator Callbacks + ******************************************************************************/ +// Called when the Provisioning starts +void sl_btmesh_on_node_provisioning_started(uint16_t result) +{ + // Change buttons to LEDs in case of shared pin + change_buttons_to_leds(); + + sl_status_t sc = sl_simple_timer_start(&app_led_blinking_timer, + APP_LED_BLINKING_TIMEOUT, + app_led_blinking_timer_cb, + NO_CALLBACK_DATA, + true); + + app_assert_status_f(sc, "Failed to start periodic timer"); + + app_show_btmesh_node_provisioning_started(result); +} + +// Called when the Provisioning finishes successfully +void sl_btmesh_on_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + sl_status_t sc = sl_simple_timer_stop(&app_led_blinking_timer); + app_assert_status_f(sc, "Failed to stop periodic timer"); + // Turn off LED + init_done = true; + sl_led_led0.turn_off(sl_led_led0.context); +#ifndef SINGLE_LED + sl_led_led1.turn_off(sl_led_led1.context); +#endif // SINGLE_LED + // Change LEDs to buttons in case of shared pin + change_leds_to_buttons(); + + app_show_btmesh_node_provisioned(address, iv_index); +} diff --git a/app/btmesh/example/btmesh_soc_sensor_client/app.h b/app/btmesh/example/btmesh_soc_sensor_client/app.h new file mode 100644 index 00000000000..dfa7f2418fe --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/app.h @@ -0,0 +1,72 @@ +/***************************************************************************//** + * @file + * @brief Application interface provided to main(). + ******************************************************************************* + * # 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 APP_H +#define APP_H + +#include +#include "sl_btmesh_device_properties.h" + +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +void app_init(void); + +/***************************************************************************//** + * Application Process Action. + ******************************************************************************/ +void app_process_action(void); + +/***************************************************************************//** + * Get the currently set property ID + * + * @return Current property ID + ******************************************************************************/ +mesh_device_properties_t app_get_current_property(void); + +/***************************************************************************//** + * Shows the provisioning start information + * + * @param[in] result Result code. 0: success, non-zero: error + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result); + +/***************************************************************************//** + * Shows the provisioning completed information + * + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index); + +#endif // APP_H diff --git a/app/btmesh/example/btmesh_soc_sensor_client/app_out_lcd.c b/app/btmesh/example/btmesh_soc_sensor_client/app_out_lcd.c new file mode 100644 index 00000000000..e4a99a15d61 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/app_out_lcd.c @@ -0,0 +1,298 @@ +/***************************************************************************//** + * @file + * @brief Application Output LCD code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include +#include "em_common.h" +#include "sl_status.h" + +#include "app.h" +#include "app_log.h" + +#include "sl_btmesh_api.h" +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_sensor_client.h" +#include "sl_btmesh_wstk_lcd.h" + +/// Integer part of illuminance +#define INT_ILLUM(x) (x / 100) +/// Fractional part of illuminance +#define FRAC_ILLUM(x) (x % 100) +/// Integer part of temperature +#define INT_TEMP(x) (x / 2) +/// Fractional part of temperature +#define FRAC_TEMP(x) ((x * 5) % 10) + +// ----------------------------------------------------------------------------- +// BT mesh Sensor Client Callbacks + +/******************************************************************************* + * Called when Sensor Server discovery is started + * + ******************************************************************************/ +void sl_btmesh_sensor_client_on_discovery_started(uint16_t property_id) +{ + app_log("BT mesh Sensor Device discovery is started. (property_id: 0x%04x)" APP_LOG_NL, + property_id); + // Clear the previous sensor measurement values + for (uint8_t row = SL_BTMESH_WSTK_LCD_ROW_SENSOR_DATA_CFG_VAL; row <= LCD_ROW_MAX; row++) { + sl_status_t lcd_status = sl_btmesh_LCD_write("", row); + app_log_status_error_f(lcd_status, "LCD write failed" APP_LOG_NL); + } + (void)property_id; +} + +/******************************************************************************* + * Called when a Device with the current Device Property ID was found + * + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_device_found(uint16_t property_id, + uint16_t address) +{ + app_log("BT mesh Sensor Device (address: 0x%04x, property_id: 0x%04x) " + "is found." APP_LOG_NL, + address, + property_id); + (void)address; + (void)property_id; +} + +/******************************************************************************* + * Called when temperature sensor data is received from one of the + * registered devices + * + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_temperature_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + temperature_8_t temperature) +{ + // Temporary buffer to format the LCD output text + char tmp_str[LCD_ROW_LEN]; + + if (PRESENT_AMBIENT_TEMPERATURE != app_get_current_property()) { + return; + } + + if (SL_BTMESH_SENSOR_CLIENT_DATA_VALID == status) { + app_log("BT mesh Sensor Temperature (from 0x%04x): %3d.%1d °C" APP_LOG_NL, + address, + INT_TEMP(temperature), + FRAC_TEMP(temperature)); + + snprintf(tmp_str, + LCD_ROW_LEN, + "Adr %4x Temp%3d.%1d C", + address, + INT_TEMP(temperature), + FRAC_TEMP(temperature)); + } else if (SL_BTMESH_SENSOR_CLIENT_DATA_UNKNOWN == status) { + app_log("BT mesh Sensor Temperature (from 0x%04x): UNKNOWN" APP_LOG_NL, + address); + snprintf(tmp_str, LCD_ROW_LEN, "Adr %4x Temp N/K", address); + } else { + app_log("BT mesh Sensor Temperature (from 0x%04x): NOT AVAILABLE" APP_LOG_NL, + address); + snprintf(tmp_str, LCD_ROW_LEN, "Adr %4x Temp N/A", address); + } + + sl_status_t lcd_status = sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_SENSOR_DATA_CFG_VAL + sensor_idx); + app_log_status_error_f(lcd_status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when people count sensor data is received from one of the + * registered devices. + * + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_people_count_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + count16_t people_count) +{ + // Temporary buffer to format the LCD output text + char tmp_str[LCD_ROW_LEN]; + + if (PEOPLE_COUNT != app_get_current_property()) { + return; + } + + if (SL_BTMESH_SENSOR_CLIENT_DATA_VALID == status) { + app_log("BT mesh Sensor People Count (from 0x%04x): %5u" APP_LOG_NL, + address, + people_count); + snprintf(tmp_str, LCD_ROW_LEN, "Adr %4x Count %5u", address, people_count); + } else if (SL_BTMESH_SENSOR_CLIENT_DATA_UNKNOWN == status) { + app_log("BT mesh Sensor People Count (from 0x%04x): UNKNOWN" APP_LOG_NL, + address); + snprintf(tmp_str, LCD_ROW_LEN, "Adr %4x Count N/K", address); + } else { + app_log("BT mesh Sensor People Count (from 0x%04x): NOT AVAILABLE" APP_LOG_NL, + address); + snprintf(tmp_str, LCD_ROW_LEN, "Adr %4x Count N/A", address); + } + + sl_status_t lcd_status = sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_SENSOR_DATA_CFG_VAL + sensor_idx); + app_log_status_error_f(lcd_status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when illuminance sensor data is received from one of the + * registered devices. + * + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_illuminance_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + illuminance_t illuminance) +{ + // Temporary buffer to format the LCD output text + char tmp_str[LCD_ROW_LEN]; + + if (PRESENT_AMBIENT_LIGHT_LEVEL != app_get_current_property()) { + return; + } + + if (SL_BTMESH_SENSOR_CLIENT_DATA_VALID == status) { + app_log("BT mesh Sensor Illuminance (from 0x%04x): %4lu.%02u lx" APP_LOG_NL, + address, + INT_ILLUM(illuminance), + (uint8_t)(FRAC_ILLUM(illuminance))); + snprintf(tmp_str, + LCD_ROW_LEN, + "Adr %4x Lux %4u.%02u", + address, + (uint16_t)(INT_ILLUM(illuminance)), + (uint8_t)(FRAC_ILLUM(illuminance))); + } else if (SL_BTMESH_SENSOR_CLIENT_DATA_UNKNOWN == status) { + app_log("BT mesh Sensor Illuminance (from 0x%04x): UNKNOWN" APP_LOG_NL, + address); + snprintf(tmp_str, LCD_ROW_LEN, "Adr %4x Lux N/K", address); + } else { + app_log("BT mesh Sensor Illuminance (from 0x%04x): NOT AVAILABLE" APP_LOG_NL, + address); + snprintf(tmp_str, LCD_ROW_LEN, "Adr %4x Lux N/A", address); + } + + sl_status_t lcd_status = sl_btmesh_LCD_write(tmp_str, + SL_BTMESH_WSTK_LCD_ROW_SENSOR_DATA_CFG_VAL + sensor_idx); + app_log_status_error_f(lcd_status, "LCD write failed" APP_LOG_NL); +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called at node initialization time to provide provisioning information + * + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, started unprovisioned beaconing..." APP_LOG_NL); + sl_status_t lcd_status = sl_btmesh_LCD_write("unprovisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(lcd_status, "LCD write failed" APP_LOG_NL); + } +} + +/******************************************************************************* + * Called when the Provisioning starts + * + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, result); + sl_status_t lcd_status = sl_btmesh_LCD_write("provisioning...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(lcd_status, "LCD write failed" APP_LOG_NL); + (void)result; +} + +/******************************************************************************* + * Called when the Provisioning finishes successfully + * + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + sl_status_t lcd_status = sl_btmesh_LCD_write("provisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(lcd_status, "LCD write failed" APP_LOG_NL); + (void)address; + (void)iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + * + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + sl_status_t lcd_status = sl_btmesh_LCD_write("prov failed...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(lcd_status, "LCD write failed" APP_LOG_NL); + (void)result; +} + +// ----------------------------------------------------------------------------- +// Factory Reset Callbacks + +/******************************************************************************* + * Called when full reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Factory reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when node reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Node reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} diff --git a/app/btmesh/example/btmesh_soc_sensor_client/app_out_log.c b/app/btmesh/example/btmesh_soc_sensor_client/app_out_log.c new file mode 100644 index 00000000000..de4792db561 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/app_out_log.c @@ -0,0 +1,244 @@ +/***************************************************************************//** + * @file + * @brief Application Output Log code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include "em_common.h" +#include "sl_status.h" + +#include "app.h" +#include "app_log.h" + +#include "sl_btmesh_api.h" +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_sensor_client.h" + +/// Integer part of illuminance +#define INT_ILLUM(x) (x / 100) +/// Fractional part of illuminance +#define FRAC_ILLUM(x) (x % 100) +/// Integer part of temperature +#define INT_TEMP(x) (x / 2) +/// Fractional part of temperature +#define FRAC_TEMP(x) ((x * 5) % 10) + +// ----------------------------------------------------------------------------- +// BT mesh Sensor Client Callbacks + +/******************************************************************************* + * Called when Sensor Server discovery is started + * + ******************************************************************************/ +void sl_btmesh_sensor_client_on_discovery_started(uint16_t property_id) +{ + app_log("BT mesh Sensor Device discovery is started. (property_id: 0x%04x)" APP_LOG_NL, + property_id); + (void)property_id; +} + +/******************************************************************************* + * Called when a Device with the current Device Property ID was found + * + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_device_found(uint16_t property_id, + uint16_t address) +{ + app_log("BT mesh Sensor Device (address: 0x%04x, property_id: 0x%04x) is found." APP_LOG_NL, + address, + property_id); + (void)address; + (void)property_id; +} + +/******************************************************************************* + * Called when temperature sensor data is received from one of the + * registered devices + * + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_temperature_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + temperature_8_t temperature) +{ + (void) sensor_idx; + + if (PRESENT_AMBIENT_TEMPERATURE != app_get_current_property()) { + return; + } + + if (SL_BTMESH_SENSOR_CLIENT_DATA_VALID == status) { + app_log("BT mesh Sensor Temperature (from 0x%04x): %3d.%1d °C" APP_LOG_NL, + address, + INT_TEMP(temperature), + FRAC_TEMP(temperature)); + } else if (SL_BTMESH_SENSOR_CLIENT_DATA_UNKNOWN == status) { + app_log("BT mesh Sensor Temperature (from 0x%04x): UNKNOWN" APP_LOG_NL, + address); + } else { + app_log("BT mesh Sensor Temperature (from 0x%04x): NOT AVAILABLE" APP_LOG_NL, + address); + } + (void)address; + (void)temperature; +} + +/******************************************************************************* + * Called when people count sensor data is received from one of the + * registered devices. + * + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_people_count_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + count16_t people_count) +{ + (void) sensor_idx; + + if (PEOPLE_COUNT != app_get_current_property()) { + return; + } + + if (SL_BTMESH_SENSOR_CLIENT_DATA_VALID == status) { + app_log("BT mesh Sensor People Count (from 0x%04x): %5u" APP_LOG_NL, + address, + people_count); + } else if (SL_BTMESH_SENSOR_CLIENT_DATA_UNKNOWN == status) { + app_log("BT mesh Sensor People Count (from 0x%04x): UNKNOWN" APP_LOG_NL, + address); + } else { + app_log("BT mesh Sensor People Count (from 0x%04x): NOT AVAILABLE" APP_LOG_NL, + address); + } + (void)address; + (void)people_count; +} + +/******************************************************************************* + * Called when illuminance sensor data is received from one of the + * registered devices. + * + ******************************************************************************/ +void sl_btmesh_sensor_client_on_new_illuminance_data(uint8_t sensor_idx, + uint16_t address, + sl_btmesh_sensor_client_data_status_t status, + illuminance_t illuminance) +{ + (void) sensor_idx; + + if (PRESENT_AMBIENT_LIGHT_LEVEL != app_get_current_property()) { + return; + } + + if (SL_BTMESH_SENSOR_CLIENT_DATA_VALID == status) { + app_log("BT mesh Sensor Illuminance (from 0x%04x): %4lu.%02u lx" APP_LOG_NL, + address, + INT_ILLUM(illuminance), + (uint8_t)(FRAC_ILLUM(illuminance))); + } else if (SL_BTMESH_SENSOR_CLIENT_DATA_UNKNOWN == status) { + app_log("BT mesh Sensor Illuminance (from 0x%04x): UNKNOWN" APP_LOG_NL, + address); + } else { + app_log("BT mesh Sensor Illuminance (from 0x%04x): NOT AVAILABLE" APP_LOG_NL, + address); + } + (void)address; + (void)illuminance; +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called at node initialization time to provide provisioning information + * + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, started unprovisioned " + "beaconing..." APP_LOG_NL); + } +} + +/******************************************************************************* + * Called when the Provisioning starts + * + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, result); + (void)result; +} + +/******************************************************************************* + * Called when the Provisioning finishes successfully + * + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + (void)address; + (void)iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + * + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + (void)result; +} + +// ----------------------------------------------------------------------------- +// Factory Reset Callbacks + +/******************************************************************************* + * Called when full reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); +} + +/******************************************************************************* + * Called when node reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); +} diff --git a/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_display.slcp b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_display.slcp new file mode 100644 index 00000000000..a7d5b2ab19b --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_display.slcp @@ -0,0 +1,154 @@ +project_name: btmesh_soc_sensor_client +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Client +description: > + 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). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_client/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img8.png + +configuration: + - name: EMDRV_DMADRV_DMA_CH_COUNT + value: 1 + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensclnt_v1"' + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: "0x4500" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1300" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:device:sdid:!205 + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_display_eusart.slcp b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_display_eusart.slcp new file mode 100644 index 00000000000..232045b5321 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_display_eusart.slcp @@ -0,0 +1,157 @@ +project_name: btmesh_soc_sensor_client +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Client +description: > + 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). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: memlcd_usart + - id: mpu + - id: mx25_flash_shutdown_usart + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_client/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensclnt_v1"' + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: "0x4500" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1300" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log.slcp b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log.slcp new file mode 100644 index 00000000000..35445c9454d --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log.slcp @@ -0,0 +1,147 @@ +project_name: btmesh_soc_sensor_client +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Client +description: > + 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). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_client/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensclnt_v1"' + - name: SL_HEAP_SIZE + value: "0x4100" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1200" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:device:sdid:!205 + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log_eusart.slcp b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log_eusart.slcp new file mode 100644 index 00000000000..a0b2acbf5e6 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log_eusart.slcp @@ -0,0 +1,155 @@ +project_name: btmesh_soc_sensor_client +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Client +description: > + 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). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: mpu + - id: mx25_flash_shutdown_usart + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_client/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensclnt_v1"' + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + condition: + - "device_sdid_205" + - name: SL_HEAP_SIZE + value: "0x4100" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1200" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log_single.slcp b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log_single.slcp new file mode 100644 index 00000000000..ac709816f29 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log_single.slcp @@ -0,0 +1,152 @@ +project_name: btmesh_soc_sensor_client +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Client +description: > + 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). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - id: simple_led + instance: + - led0 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_client/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensclnt_v1"' + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + condition: + - "device_sdid_205" + - name: SL_HEAP_SIZE + value: "0x4100" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1200" + +define: +- name: "SINGLE_BUTTON" + value: "1" +- name: "SINGLE_LED" + value: "1" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:1 + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:1 + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log_xg22.slcp b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log_xg22.slcp new file mode 100644 index 00000000000..f4f966b2c38 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/btmesh_soc_sensor_client_log_xg22.slcp @@ -0,0 +1,147 @@ +project_name: btmesh_soc_sensor_client +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Client +description: > + 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). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_client/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_client/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensclnt_v1"' + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + - name: SL_HEAP_SIZE + value: "0x4100" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1200" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:device:sdid:205 + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:led:2+ + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme_xg22.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_client/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_sensor_client/dcd_config.btmeshconf new file mode 100644 index 00000000000..124a8288c39 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/dcd_config.btmeshconf @@ -0,0 +1,17 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x0004", + "vid": "0x0420", + "elements": [ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0000", "name":"Configuration Server"}, + {"mid":"0x0002", "name":"Health Server"} + ] + } + ] + } +} \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_client/gatt_configuration.btconf b/app/btmesh/example/btmesh_soc_sensor_client/gatt_configuration.btconf new file mode 100644 index 00000000000..29c8812ed47 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/gatt_configuration.btconf @@ -0,0 +1,48 @@ + + + + + Abstract: The generic_access service contains generic information about the device. All available Characteristics are readonly. + + + sensor client + + + + Abstract: The external appearance of this device. The values are composed of a category (10-bits) and sub-categories (6-bits). + 0000 + + + + + Abstract: The Device Information Service exposes manufacturer and/or vendor information about a device. Summary: This service exposes manufacturer information about a device. The Device Information Service is instantiated as a Primary Service. Only one instance of the Device Information Service is exposed on a device. + + Abstract: The value of this characteristic is a UTF-8 string representing the name of the manufacturer of the device. + Silicon Labs + + + + + + Abstract: The value of this characteristic is a UTF-8 string representing the model number assigned by the device vendor. + 00000000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the hardware revision for the hardware within the device. + 000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the firmware revision for the firmware within the device. + 0.0.0 + + + + Abstract: The SYSTEM ID characteristic consists of a structure with two fields. The first field are the LSOs and the second field contains the MSOs. This is a 64-bit structure which consists of a 40-bit manufacturer-defined identifier concatenated with a 24 bit unique Organizationally Unique Identifier (OUI). The OUI is issued by the IEEE Registration Authority (http://standards.ieee.org/regauth/index.html) and is required to be used in accordance with IEEE Standard 802-2001.6 while the least significant 40 bits are manufacturer defined. If System ID generated based on a Bluetooth Device Address, it is required to be done as follows. System ID and the Bluetooth Device Address have a very similar structure: a Bluetooth Device Address is 48 bits in length and consists of a 24 bit Company Assigned Identifier (manufacturer defined identifier) concatenated with a 24 bit Company Identifier (OUI). In order to encapsulate a Bluetooth Device Address as System ID, the Company Identifier is concatenated with 0xFFFE followed by the Company Assigned Identifier of the Bluetooth Address. For more guidelines related to EUI-64, refer to http://standards.ieee.org/develop/regauth/tut/eui64.pdf. Examples: If the system ID is based of a Bluetooth Device Address with a Company Identifier (OUI) is 0x123456 and the Company Assigned Identifier is 0x9ABCDE, then the System Identifier is required to be 0x123456FFFE9ABCDE. + + + + + + diff --git a/app/btmesh/example/btmesh_soc_sensor_client/local_cli_commands.c b/app/btmesh/example/btmesh_soc_sensor_client/local_cli_commands.c new file mode 100644 index 00000000000..0b201e0d7b8 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/local_cli_commands.c @@ -0,0 +1,85 @@ +/***************************************************************************//** + * @file + * @brief CLI commands 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. + * + ******************************************************************************/ + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_CLI_PRESENT +#include "sl_btmesh.h" +#include "sl_bluetooth.h" +#include "sl_cli.h" +#include "app_log.h" +#include "app_assert.h" + +/***************************************************************************//** + * CLI Command to read BT Address and mesh UUID. + ******************************************************************************/ +void info(sl_cli_command_arg_t *arguments) +{ + (void) arguments; + bd_addr address; + uint8_t address_type; + uuid_128 uuid; + + sl_status_t sc = sl_bt_system_get_identity_address(&address, &address_type); + app_assert_status_f(sc, "Failed to get Bluetooth address"); + app_log("Bluetooth %s address: %02X:%02X:%02X:%02X:%02X:%02X" APP_LOG_NL, + address_type ? "static random" : "public device", + address.addr[5], + address.addr[4], + address.addr[3], + address.addr[2], + address.addr[1], + address.addr[0]); + + sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get Bluetooth mesh uuid"); + app_log("Bluetooth mesh UUID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X" + "%02X%02X%02X%02X%02X" APP_LOG_NL, + uuid.data[0], + uuid.data[1], + uuid.data[2], + uuid.data[3], + uuid.data[4], + uuid.data[5], + uuid.data[6], + uuid.data[7], + uuid.data[8], + uuid.data[9], + uuid.data[10], + uuid.data[11], + uuid.data[12], + uuid.data[13], + uuid.data[14], + uuid.data[15]); +} + +#endif // SL_CATALOG_CLI_PRESENT diff --git a/app/btmesh/example/btmesh_soc_sensor_client/main.c b/app/btmesh/example/btmesh_soc_sensor_client/main.c new file mode 100644 index 00000000000..939ed36f5d9 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_client/main.c @@ -0,0 +1,71 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif // SL_CATALOG_POWER_MANAGER_PRESENT +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} diff --git a/app/btmesh/example/btmesh_soc_sensor_server/app.c b/app/btmesh/example/btmesh_soc_sensor_server/app.c new file mode 100644 index 00000000000..b6264e3c8e0 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/app.c @@ -0,0 +1,396 @@ +/***************************************************************************//** + * @file + * @brief Silicon Labs SoC Sensor Server Example Project + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include +#include +#include "em_common.h" +#include "sl_status.h" + +#include "sl_btmesh.h" +#include "sl_bluetooth.h" +#include "app.h" + +#include "gatt_db.h" + +#include "app_log.h" +#include "app_assert.h" +#include "sl_btmesh_sensor_server.h" + +/* Buttons and LEDs headers */ +#include "app_button_press.h" +#include "sl_simple_button.h" +#include "sl_simple_button_instances.h" +#include "sl_simple_led.h" +#include "sl_simple_led_instances.h" +#include "sl_simple_timer.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#include "sl_btmesh_wstk_lcd.h" +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_sensor_people_count.h" +#include "sl_btmesh_provisioning_decorator.h" + +#include "app_btmesh_util.h" + +/// High Priority +#define HIGH_PRIORITY 0 +/// No Timer Options +#define NO_FLAGS 0 +/// Callback has not parameters +#define NO_CALLBACK_DATA (void *)NULL +/// timeout for registering new devices after startup +#define DEVICE_REGISTER_SHORT_TIMEOUT 100 +/// timeout for registering new devices after startup +#define DEVICE_REGISTER_LONG_TIMEOUT 20000 +/// timeout for periodic sensor data update +#define SENSOR_DATA_TIMEOUT 2000 +/// Timout for Blinking LED during provisioning +#define APP_LED_BLINKING_TIMEOUT 250 +/// Length of the display name buffer +#define NAME_BUF_LEN 20 +/// Length of boot error message buffer +#define BOOT_ERR_MSG_BUF_LEN 30 +/// Used button indexes +#define BUTTON_PRESS_BUTTON_0 0 +#define BUTTON_PRESS_BUTTON_1 1 + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#define lcd_print(...) sl_btmesh_LCD_write(__VA_ARGS__) +#else +#define lcd_print(...) +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +/// periodic timer handle +static sl_simple_timer_t app_led_blinking_timer; + +/// periodic timer callback +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, void *data); +/// Handles button press and does a factory reset +static bool handle_reset_conditions(void); +/// Set device name in the GATT database +static void set_device_name(uuid_128 *uuid); + +/// Number of active Bluetooth connections +static uint8_t num_connections = 0; + +static bool init_done = false; + +/***************************************************************************//** + * Change buttons to LEDs in case of shared pin + * + ******************************************************************************/ +void change_buttons_to_leds(void) +{ + app_button_press_disable(); + // Disable button and enable led + sl_simple_button_disable(&sl_button_btn0); + sl_simple_led_init(sl_led_led0.context); + // Disable button and enable led +#ifndef SINGLE_BUTTON + sl_simple_button_disable(&sl_button_btn1); +#endif // SINGLE_BUTTON +#ifndef SINGLE_LED + sl_simple_led_init(sl_led_led1.context); +#endif //SINGLE_LED +} + +/***************************************************************************//** + * Change LEDs to buttons in case of shared pin + * + ******************************************************************************/ +void change_leds_to_buttons(void) +{ + // Enable buttons + sl_simple_button_enable(&sl_button_btn0); +#ifndef SINGLE_BUTTON + sl_simple_button_enable(&sl_button_btn1); +#endif // SINGLE_BUTTON + // Wait + sl_sleeptimer_delay_millisecond(1); + // Enable button presses + app_button_press_enable(); +} + +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +SL_WEAK void app_init(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application init code here! // + // This is called once during start-up. // + ///////////////////////////////////////////////////////////////////////////// + app_log("BT mesh Sensor Server initialized" APP_LOG_NL); + // Ensure right init order in case of shared pin for enabling buttons + change_buttons_to_leds(); + // Change LEDs to buttons in case of shared pin + change_leds_to_buttons(); + handle_reset_conditions(); +} + +/***************************************************************************//** + * Application Process Action. + ******************************************************************************/ +SL_WEAK void app_process_action(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application code here! // + // This is called infinitely. // + // Do not call blocking functions from here! // + ///////////////////////////////////////////////////////////////////////////// +} + +/***************************************************************************//** + * Set device name in the GATT database. A unique name is generated using + * the two last bytes from the UUID of this device. Name is also + * displayed on the LCD. + * + * @param[in] uuid Pointer to device UUID. + ******************************************************************************/ +static void set_device_name(uuid_128 *uuid) +{ + char name[NAME_BUF_LEN]; + sl_status_t result; + + // Create unique device name using the last two bytes of the Bluetooth address + snprintf(name, + sizeof(name), + "sensor server %02x%02x", + uuid->data[14], + uuid->data[15]); + + app_log("Device name: '%s'" APP_LOG_NL, name); + + result = sl_bt_gatt_server_write_attribute_value(gattdb_device_name, + 0, + strlen(name), + (uint8_t *)name); + app_log_status_error_f(result, + "sl_bt_gatt_server_write_attribute_value() failed" APP_LOG_NL); + + // Show device name on the LCD + lcd_print(name, SL_BTMESH_WSTK_LCD_ROW_NAME_CFG_VAL); +} + +/***************************************************************************//** + * Handles button press and does a factory reset + * + * @return true if there is no button press + ******************************************************************************/ +static bool handle_reset_conditions(void) +{ + // If PB0 is held down then do full factory reset + if (sl_simple_button_get_state(&sl_button_btn0) + == SL_SIMPLE_BUTTON_PRESSED) { + // Disable button presses + app_button_press_disable(); + // Full factory reset + sl_btmesh_initiate_full_reset(); + return false; + } + +#ifndef SINGLE_BUTTON + // If PB1 is held down then do node factory reset + if (sl_simple_button_get_state(&sl_button_btn1) + == SL_SIMPLE_BUTTON_PRESSED) { + // Disable button presses + app_button_press_disable(); + // Node factory reset + sl_btmesh_initiate_node_reset(); + return false; + } +#endif // SL_CATALOG_BTN1_PRESENT + return true; +} + +/***************************************************************************//** + * Handling of le stack events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_bt_on_event(sl_bt_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_bt_evt_connection_opened_id: + num_connections++; + lcd_print("connected", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Connected" APP_LOG_NL); + break; + + case sl_bt_evt_connection_closed_id: + if (num_connections > 0) { + if (--num_connections == 0) { + lcd_print("", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Disconnected" APP_LOG_NL); + } + } + break; + + default: + break; + } +} + +/***************************************************************************//** + * Bluetooth Mesh stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Pointer to incoming event from the Bluetooth Mesh stack. + ******************************************************************************/ +void sl_btmesh_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + default: + break; + } +} + +/******************************************************************************* + * Callbacks + ******************************************************************************/ + +/***************************************************************************//** + * Handling of provisionee init result + ******************************************************************************/ +void sl_btmesh_provisionee_on_init(sl_status_t result) +{ + if (SL_STATUS_OK != result) { + char buf[BOOT_ERR_MSG_BUF_LEN]; + snprintf(buf, sizeof(buf), "init failed (0x%lx)", result); + lcd_print(buf, SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + } else { + uuid_128 uuid; + sl_status_t sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get UUID"); + set_device_name(&uuid); + } +} + +/******************************************************************************* + * Callback for button press + * @param button button ID. Either of + * - BUTTON_PRESS_BUTTON_0 + * - BUTTON_PRESS_BUTTON_1 + * @param duration duration of button press. Either of + * - APP_BUTTON_PRESS_NONE + * - APP_BUTTON_PRESS_DURATION_SHORT + * - APP_BUTTON_PRESS_DURATION_MEDIUM + * - APP_BUTTON_PRESS_DURATION_LONG + * - APP_BUTTON_PRESS_DURATION_VERYLONG + ******************************************************************************/ +void app_button_press_cb(uint8_t button, uint8_t duration) +{ + (void)duration; + // button pressed + if (duration == APP_BUTTON_PRESS_DURATION_SHORT) { + if (button == BUTTON_PRESS_BUTTON_0) { + app_log("PB0 pressed" APP_LOG_NL); + sl_btmesh_people_count_decrease(); + } else if (button == BUTTON_PRESS_BUTTON_1) { + app_log("PB1 pressed" APP_LOG_NL); + sl_btmesh_people_count_increase(); + } + } else if (duration == APP_BUTTON_PRESS_DURATION_MEDIUM) { + if ( (button == BUTTON_PRESS_BUTTON_0)) { + app_log("PB0 medium pressed" APP_LOG_NL); + sl_btmesh_people_count_increase(); + } + } +} + +/******************************************************************************* + * Timer Callbacks + ******************************************************************************/ +/***************************************************************************//** + * periodic timer callback + * @param[in] handle Timer descriptor handle + * @param[in] data Callback input arguments + ******************************************************************************/ +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + if (!init_done) { + // Toggle LEDs + sl_simple_led_toggle(sl_led_led0.context); +#ifndef SINGLE_LED + sl_simple_led_toggle(sl_led_led1.context); +#endif // SINGLE_LED + } +} + +/******************************************************************************* + * Provisioning Decorator Callbacks + ******************************************************************************/ +/******************************************************************************* + * Called when the Provisioning starts + * @param[in] result Result code. 0: success, non-zero: error + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_started(uint16_t result) +{ + // Change buttons to LEDs in case of shared pin + change_buttons_to_leds(); + + sl_status_t sc = sl_simple_timer_start(&app_led_blinking_timer, + APP_LED_BLINKING_TIMEOUT, + app_led_blinking_timer_cb, + NO_CALLBACK_DATA, + true); + app_assert_status_f(sc, "Failed to start periodic timer"); + + app_show_btmesh_node_provisioning_started(result); +} + +/******************************************************************************* + * Called when the Provisioning finishes successfully + * @param[in] address Unicast address of the primary element of the node. + * Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + * Ignored if unprovisioned. + ******************************************************************************/ +void sl_btmesh_on_node_provisioned(uint16_t address, uint32_t iv_index) +{ + sl_status_t sc = sl_simple_timer_stop(&app_led_blinking_timer); + app_assert_status_f(sc, "Failed to stop periodic timer"); + // Turn off LED + init_done = true; + sl_simple_led_turn_off(sl_led_led0.context); +#ifndef SINGLE_LED + sl_simple_led_turn_off(sl_led_led1.context); +#endif // SINGLE_LED + // Change LEDs to buttons in case of shared pin + change_leds_to_buttons(); + + app_show_btmesh_node_provisioned(address, iv_index); +} diff --git a/app/btmesh/example/btmesh_soc_sensor_server/app.h b/app/btmesh/example/btmesh_soc_sensor_server/app.h new file mode 100644 index 00000000000..dac4d7af96b --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/app.h @@ -0,0 +1,63 @@ +/***************************************************************************//** + * @file + * @brief Application interface provided to main(). + ******************************************************************************* + * # 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 APP_H +#define APP_H + +#include + +#include "sl_status.h" + +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +void app_init(void); + +/***************************************************************************//** + * Application Process Action. + ******************************************************************************/ +void app_process_action(void); + +/***************************************************************************//** + * Shows the provisioning start information + * @param[in] result Result code. 0: success, non-zero: error + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result); + +/***************************************************************************//** + * Shows the provisioning completed information + * @param[in] address Unicast address of the primary element of the node. + Ignored if unprovisioned. + * @param[in] iv_index IV index for the first network of the node + Ignored if unprovisioned. + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, uint32_t iv_index); + +#endif // APP_H diff --git a/app/btmesh/example/btmesh_soc_sensor_server/app_out_lcd.c b/app/btmesh/example/btmesh_soc_sensor_server/app_out_lcd.c new file mode 100644 index 00000000000..1ae772acd97 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/app_out_lcd.c @@ -0,0 +1,216 @@ +/***************************************************************************//** + * @file + * @brief Application Output LCD code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include +#include "em_common.h" +#include "sl_status.h" + +#include "app.h" +#include "app_log.h" + +#include "sl_btmesh_api.h" +#include "sl_btmesh_wstk_lcd.h" + +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_sensor_server.h" +#include "sl_btmesh_sensor_people_count.h" +#include "sl_btmesh_sensor_people_count_config.h" + +/// Integer part of illuminance +#define INT_ILLUM(x) (x / 100) +/// Fractional part of illuminance +#define FRAC_ILLUM(x) (x % 100) +/// Integer part of temperature +#define INT_TEMP(x) (x / 2) +/// Fractional part of temperature +#define FRAC_TEMP(x) ((x * 5) % 10) + +// ----------------------------------------------------------------------------- +// Factory Reset Callbacks + +/******************************************************************************* + * Called when full reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Factory reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when node reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Node reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +// ----------------------------------------------------------------------------- +// Sensor Server Callbacks + +/******************************************************************************* + * Called when a temperature measurement is done + ******************************************************************************/ +void sl_btmesh_sensor_server_on_temperature_measurement(temperature_8_t temperature) +{ + sl_status_t status = SL_STATUS_OK; + if ((temperature_8_t)SL_BTMESH_SENSOR_TEMPERATURE_VALUE_UNKNOWN + == temperature) { + app_log("Temperature: UNKNOWN" APP_LOG_NL); + status = sl_btmesh_LCD_write("Temperature: N/K ", + SL_BTMESH_WSTK_LCD_ROW_TEMPERATURE_CFG_VAL); + } else { + char str[LCD_ROW_LEN]; + app_log("Temperature: %3d.%1d °C" APP_LOG_NL, + INT_TEMP(temperature), + FRAC_TEMP(temperature)); + snprintf(str, + LCD_ROW_LEN, + "Temperature: %3d.%1d C", + INT_TEMP(temperature), + FRAC_TEMP(temperature)); + status = sl_btmesh_LCD_write(str, SL_BTMESH_WSTK_LCD_ROW_TEMPERATURE_CFG_VAL); + } + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} +/******************************************************************************* + * Called when a light measurement is done + ******************************************************************************/ +void sl_btmesh_sensor_server_on_light_measurement(illuminance_t light) +{ + sl_status_t status = SL_STATUS_OK; + if ((illuminance_t)SL_BTMESH_SENSOR_LIGHT_VALUE_UNKNOWN == light) { + app_log("Illuminance: UNKNOWN" APP_LOG_NL); + status = sl_btmesh_LCD_write("Illuminance: N/K", + SL_BTMESH_WSTK_LCD_ROW_ILLUMINANCE_CFG_VAL); + } else { + app_log("Illuminance: %4lu.%02lu lx" APP_LOG_NL, + INT_ILLUM(light), + FRAC_ILLUM(light)); + char str[LCD_ROW_LEN]; + snprintf(str, + LCD_ROW_LEN, + "Illum: %4u.%02u lx", + (uint16_t)(INT_ILLUM(light)), + (uint8_t)(FRAC_ILLUM(light))); + app_log(str); + status = sl_btmesh_LCD_write(str, SL_BTMESH_WSTK_LCD_ROW_ILLUMINANCE_CFG_VAL); + } + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when a people count measurement is done + ******************************************************************************/ +void sl_btmesh_sensor_server_on_people_count_measurement(count16_t people) +{ + sl_status_t status = SL_STATUS_OK; + if ((count16_t)SL_BTMESH_SENSOR_PEOPLE_COUNT_VALUE_IS_NOT_KNOWN + == people) { + app_log("People count: UNKNOWN" APP_LOG_NL); + status = sl_btmesh_LCD_write("People count: N/K", + SL_BTMESH_WSTK_LCD_ROW_PEOPLE_COUNT_CFG_VAL); + } else { + app_log("People count: %5u" APP_LOG_NL, people); + char str[LCD_ROW_LEN]; + snprintf(str, + LCD_ROW_LEN, + "People count: %5u", + people); + status = sl_btmesh_LCD_write(str, SL_BTMESH_WSTK_LCD_ROW_PEOPLE_COUNT_CFG_VAL); + } + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called at node initialization time to provide provisioning information + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, started unprovisioned beaconing..." APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("unprovisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_level_f(APP_LOG_LEVEL_ERROR, status, "LCD write failed"); + } +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioning_started callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, result); + sl_status_t status = sl_btmesh_LCD_write("provisioning...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)result; +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioned callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + sl_status_t status = sl_btmesh_LCD_write("provisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)address; + (void)iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + sl_status_t status = sl_btmesh_LCD_write("prov failed...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + (void)result; +} diff --git a/app/btmesh/example/btmesh_soc_sensor_server/app_out_log.c b/app/btmesh/example/btmesh_soc_sensor_server/app_out_log.c new file mode 100644 index 00000000000..d76d13d3f28 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/app_out_log.c @@ -0,0 +1,164 @@ +/***************************************************************************//** + * @file + * @brief Application Output Log code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include "em_common.h" +#include "sl_status.h" + +#include "app.h" +#include "app_log.h" + +#include "sl_btmesh_api.h" + +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_sensor_server.h" +#include "sl_btmesh_sensor_people_count.h" +#include "sl_btmesh_sensor_people_count_config.h" + +/// Integer part of illuminance +#define INT_ILLUM(x) (x / 100) +/// Fractional part of illuminance +#define FRAC_ILLUM(x) (x % 100) +/// Integer part of temperature +#define INT_TEMP(x) (x / 2) +/// Fractional part of temperature +#define FRAC_TEMP(x) ((x * 5) % 10) + +// ----------------------------------------------------------------------------- +// Factory Reset Callbacks + +/******************************************************************************* + * Called when full reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); +} + +/******************************************************************************* + * Called when node reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); +} + +// ----------------------------------------------------------------------------- +// Sensor Server Callbacks + +/******************************************************************************* + * Called when a temperature measurement is done + ******************************************************************************/ +void sl_btmesh_sensor_server_on_temperature_measurement(temperature_8_t temperature) +{ + if ((temperature_8_t)SL_BTMESH_SENSOR_TEMPERATURE_VALUE_UNKNOWN + == temperature) { + app_log("Temperature: UNKNOWN" APP_LOG_NL); + } else { + app_log("Temperature: %3d.%1d °C" APP_LOG_NL, + INT_TEMP(temperature), + FRAC_TEMP(temperature)); + } +} +/******************************************************************************* + * Called when a light measurement is done + ******************************************************************************/ +void sl_btmesh_sensor_server_on_light_measurement(illuminance_t light) +{ + if ((illuminance_t)SL_BTMESH_SENSOR_LIGHT_VALUE_UNKNOWN == light) { + app_log("Illuminance: UNKNOWN" APP_LOG_NL); + } else { + app_log("Illuminance: %4lu.%02lu lx" APP_LOG_NL, + INT_ILLUM(light), + FRAC_ILLUM(light)); + } +} + +/******************************************************************************* + * Called when a people count measurement is done + ******************************************************************************/ +void sl_btmesh_sensor_server_on_people_count_measurement(count16_t people) +{ + if ((count16_t)SL_BTMESH_SENSOR_PEOPLE_COUNT_VALUE_IS_NOT_KNOWN + == people) { + app_log("People count: UNKNOWN" APP_LOG_NL); + } else { + app_log("People count: %5u" APP_LOG_NL, people); + } +} + +// ----------------------------------------------------------------------------- +// Provisioning Decorator Callbacks + +/******************************************************************************* + * Called at node initialization time to provide provisioning information + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, started unprovisioned beaconing..." APP_LOG_NL); + } +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioning_started callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, + result); + (void)result; +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioned callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + (void)address; + (void)iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + (void)result; +} diff --git a/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_brd2601b.slcp b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_brd2601b.slcp new file mode 100644 index 00000000000..f69f8b811b7 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_brd2601b.slcp @@ -0,0 +1,166 @@ +project_name: btmesh_soc_sensor_server +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Server +description: > + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor + Setup Server Model. It measures temperature, people count, and illuminance, and + sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_people_count + - id: btmesh_sensor_server + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: i2cspm + instance: + - sensor + - id: iostream_eusart + instance: + - vcom + - id: mpu + - id: mx25_flash_shutdown_usart + - id: rail_util_pti + - id: sensor_lux + - id: sensor_rht + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_server/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_SENSOR_LIGHT + value: "1" + condition: + - "veml6035_driver" + - "i2cspm" + - name: SL_BOARD_ENABLE_SENSOR_RHT + value: "1" + condition: + - "si70xx_driver" + - "i2cspm" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensorserv_v1"' + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1200" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:component:sensor:veml6035 + - hardware:component:sensor:si7021 + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_display.slcp b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_display.slcp new file mode 100644 index 00000000000..0da4ec3a628 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_display.slcp @@ -0,0 +1,166 @@ +project_name: btmesh_soc_sensor_server +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Server +description: > + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor + Setup Server Model. It measures temperature and people count, and sends the + measurement data to a remote device (e.g., btmesh_soc_sensor_client). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_people_count + - id: btmesh_sensor_server + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: i2cspm + instance: + - sensor + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: sensor_rht + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_server/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img8.png + +configuration: + - name: EMDRV_DMADRV_DMA_CH_COUNT + value: 1 + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_SENSOR_RHT + value: "1" + condition: + - si70xx_driver + - i2cspm + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensorserv_v1"' + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: "0x4600" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1300" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:device:sdid:!205 + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:component:sensor:!si1133 + - hardware:component:sensor:si7021 + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_display_eusart.slcp b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_display_eusart.slcp new file mode 100644 index 00000000000..971705cbde8 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_display_eusart.slcp @@ -0,0 +1,179 @@ +project_name: btmesh_soc_sensor_server +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Server +description: > + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor + Setup Server Model. It measures temperature and people count, and sends the + measurement data to a remote device (e.g., btmesh_soc_sensor_client). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_people_count + - id: btmesh_sensor_server + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: i2cspm + instance: + - sensor + - id: iostream_eusart + instance: + - vcom + - id: memlcd_usart + - id: mpu + - id: mx25_flash_shutdown_usart + - id: rail_util_pti + - id: sensor_rht + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_server/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_SENSOR_RHT + value: "1" + condition: + - si70xx_driver + - i2cspm + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensorserv_v1"' + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + condition: + - "device_sdid_205" + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: "0x4600" + unless: + - "device_sdid_205" + - name: SL_HEAP_SIZE + value: "0x3B00" + condition: + - "device_sdid_205" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1300" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:component:sensor:!si1133 + - hardware:component:sensor:si7021 + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_log_xg22.slcp b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_log_xg22.slcp new file mode 100644 index 00000000000..8d86cb86ea2 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_log_xg22.slcp @@ -0,0 +1,160 @@ +project_name: btmesh_soc_sensor_server +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Server +description: > + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor + Setup Server Model. It measures temperature and people count, and sends the + measurement data to a remote device (e.g., btmesh_soc_sensor_client). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_people_count + - id: btmesh_sensor_server + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: i2cspm + instance: + - sensor + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: sensor_rht + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_server/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_SENSOR_RHT + value: "1" + condition: + - si70xx_driver + - i2cspm + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensorserv_v1"' + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + - name: SL_HEAP_SIZE + value: "0x3B00" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1300" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:device:sdid:205 + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:led:2+ + - hardware:component:sensor:!si1133 + - hardware:component:sensor:si7021 + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme_xg22.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_display.slcp b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_display.slcp new file mode 100644 index 00000000000..dec7559ed2a --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_display.slcp @@ -0,0 +1,158 @@ +project_name: btmesh_soc_sensor_server +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Server +description: > + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor + Setup Server Model. It measures temperature and people count, and sends the + measurement data to a remote device (e.g., btmesh_soc_sensor_client). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_people_count + - id: btmesh_sensor_server + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: sensor_rht_mock + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_server/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensorserv_v1"' + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + condition: + - "device_sdid_205" + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1400" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:component:sensor:!si7021 + - hardware:device:ram:32 + - hardware:device:flash:512 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_log.slcp b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_log.slcp new file mode 100644 index 00000000000..66dee362595 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_log.slcp @@ -0,0 +1,153 @@ +project_name: btmesh_soc_sensor_server +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Server +description: > + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor + Setup Server Model. It measures temperature and people count, and sends the + measurement data to a remote device (e.g., btmesh_soc_sensor_client). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_people_count + - id: btmesh_sensor_server + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: sensor_rht_mock + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_server/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensorserv_v1"' + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + condition: + - "device_sdid_205" + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1200" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:component:sensor:!si7021 + - hardware:device:ram:32 + - hardware:device:flash:512 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_log_eusart.slcp b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_log_eusart.slcp new file mode 100644 index 00000000000..fc913417089 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_log_eusart.slcp @@ -0,0 +1,154 @@ +project_name: btmesh_soc_sensor_server +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Server +description: > + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor + Setup Server Model. It measures temperature and people count, and sends the + measurement data to a remote device (e.g., btmesh_soc_sensor_client). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_people_count + - id: btmesh_sensor_server + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: mpu + - id: mx25_flash_shutdown_usart + - id: rail_util_pti + - id: sensor_rht_mock + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_server/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensorserv_v1"' + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1200" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:component:sensor:!si7021 + - hardware:device:ram:32 + - hardware:device:flash:512 + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_log_single.slcp b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_log_single.slcp new file mode 100644 index 00000000000..2d1e9ec12ce --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_mock_log_single.slcp @@ -0,0 +1,155 @@ +project_name: btmesh_soc_sensor_server +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Server +description: > + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor + Setup Server Model. It measures temperature and people count, and sends the + measurement data to a remote device (e.g., btmesh_soc_sensor_client). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_people_count + - id: btmesh_sensor_server + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: sensor_rht_mock + - id: simple_button + instance: + - btn0 + - id: simple_led + instance: + - led0 + - id: simple_timer + +source: + - path: main.c + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_server/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensorserv_v1"' + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + condition: + - "device_sdid_205" + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1200" + +define: +- name: "SINGLE_BUTTON" + value: "1" +- name: "SINGLE_LED" + value: "1" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:1 + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:1 + - hardware:component:sensor:!si7021 + - hardware:device:ram:32 + - hardware:device:flash:512 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_tbbg22a.slcp b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_tbbg22a.slcp new file mode 100644 index 00000000000..a4c832143fc --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_tbbg22a.slcp @@ -0,0 +1,167 @@ +project_name: btmesh_soc_sensor_server +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Server +description: > + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor + Setup Server Model. It measures temperature, people count, and illuminance, and + sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_people_count + - id: btmesh_sensor_server + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: i2cspm + instance: + - sensor + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: sensor_light + - id: sensor_rht + - id: simple_button + instance: + - btn0 + - id: simple_led + instance: + - led0 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_server/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_SENSOR_LIGHT + value: "1" + condition: + - "si1133_driver" + - "i2cspm" + - name: SL_BOARD_ENABLE_SENSOR_RHT + value: "1" + condition: + - "si70xx_driver" + - "i2cspm" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensorserv_v1"' + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1200" + +define: +- name: "SINGLE_LED" + value: "1" +- name: "SINGLE_BUTTON" + value: "1" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:1 + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:1 + - hardware:component:sensor:si1133 + - hardware:component:sensor:si7021 + - hardware:device:ram:32 + - hardware:device:flash:512 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_tbbg22b.slcp b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_tbbg22b.slcp new file mode 100644 index 00000000000..a31e923eb88 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_tbbg22b.slcp @@ -0,0 +1,167 @@ +project_name: btmesh_soc_sensor_server +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Server +description: > + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor + Setup Server Model. It measures temperature, people count, and illuminance, and + sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_people_count + - id: btmesh_sensor_server + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: i2cspm + instance: + - sensor + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: sensor_lux + - id: sensor_rht + - id: simple_button + instance: + - btn0 + - id: simple_led + instance: + - led0 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_server/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img8.png + +configuration: + - name: EMDRV_DMADRV_DMA_CH_COUNT + value: 1 + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BOARD_ENABLE_SENSOR_LIGHT + value: "1" + condition: + - "veml6035_driver" + - "i2cspm" + - name: SL_BOARD_ENABLE_SENSOR_RHT + value: "1" + condition: + - "si70xx_driver" + - "i2cspm" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensorserv_v1"' + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1200" + +define: +- name: "SINGLE_LED" + value: "1" +- name: "SINGLE_BUTTON" + value: "1" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:1 + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:1 + - hardware:component:sensor:veml6035 + - hardware:component:sensor:si7021 + - hardware:device:ram:32 + - hardware:device:flash:512 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_tbsense.slcp b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_tbsense.slcp new file mode 100644 index 00000000000..ce693606a8c --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/btmesh_soc_sensor_server_tbsense.slcp @@ -0,0 +1,161 @@ +project_name: btmesh_soc_sensor_server +package: Btmesh +label: Bluetooth Mesh - SoC Sensor Server +description: > + This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor + Setup Server Model. It measures temperature, people count, and illuminance, and + sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client). + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_sensor_people_count + - id: btmesh_sensor_server + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: i2cspm + instance: + - sensor + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: sensor_light + - id: sensor_rht + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_sensor_server/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img0.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img1.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img2.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img3.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img4.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img5.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img6.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img7.png + - path: ../../documentation/example/btmesh_soc_sensor_server/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_SENSOR_LIGHT + value: "1" + condition: + - "si1133_driver" + - "i2cspm" + - name: SL_BOARD_ENABLE_SENSOR_RHT + value: "1" + condition: + - "si70xx_driver" + - "i2cspm" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmsensorserv_v1"' + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1200" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:component:sensor:si1133 + - hardware:component:sensor:si7021 + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_sensor_server/dcd_config.btmeshconf new file mode 100644 index 00000000000..0169efb3e52 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/dcd_config.btmeshconf @@ -0,0 +1,17 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x0005", + "vid": "0x0420", + "elements": [ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0000", "name":"Configuration Server"}, + {"mid":"0x0002", "name":"Health Server"} + ] + } + ] + } +} \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_sensor_server/gatt_configuration.btconf b/app/btmesh/example/btmesh_soc_sensor_server/gatt_configuration.btconf new file mode 100644 index 00000000000..9f65123493a --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/gatt_configuration.btconf @@ -0,0 +1,48 @@ + + + + + Abstract: The generic_access service contains generic information about the device. All available Characteristics are readonly. + + + sensor server + + + + Abstract: The external appearance of this device. The values are composed of a category (10-bits) and sub-categories (6-bits). + 0000 + + + + + Abstract: The Device Information Service exposes manufacturer and/or vendor information about a device. Summary: This service exposes manufacturer information about a device. The Device Information Service is instantiated as a Primary Service. Only one instance of the Device Information Service is exposed on a device. + + Abstract: The value of this characteristic is a UTF-8 string representing the name of the manufacturer of the device. + Silicon Labs + + + + + + Abstract: The value of this characteristic is a UTF-8 string representing the model number assigned by the device vendor. + 00000000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the hardware revision for the hardware within the device. + 000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the firmware revision for the firmware within the device. + 0.0.0 + + + + Abstract: The SYSTEM ID characteristic consists of a structure with two fields. The first field are the LSOs and the second field contains the MSOs. This is a 64-bit structure which consists of a 40-bit manufacturer-defined identifier concatenated with a 24 bit unique Organizationally Unique Identifier (OUI). The OUI is issued by the IEEE Registration Authority (http://standards.ieee.org/regauth/index.html) and is required to be used in accordance with IEEE Standard 802-2001.6 while the least significant 40 bits are manufacturer defined. If System ID generated based on a Bluetooth Device Address, it is required to be done as follows. System ID and the Bluetooth Device Address have a very similar structure: a Bluetooth Device Address is 48 bits in length and consists of a 24 bit Company Assigned Identifier (manufacturer defined identifier) concatenated with a 24 bit Company Identifier (OUI). In order to encapsulate a Bluetooth Device Address as System ID, the Company Identifier is concatenated with 0xFFFE followed by the Company Assigned Identifier of the Bluetooth Address. For more guidelines related to EUI-64, refer to http://standards.ieee.org/develop/regauth/tut/eui64.pdf. Examples: If the system ID is based of a Bluetooth Device Address with a Company Identifier (OUI) is 0x123456 and the Company Assigned Identifier is 0x9ABCDE, then the System Identifier is required to be 0x123456FFFE9ABCDE. + + + + + + diff --git a/app/btmesh/example/btmesh_soc_sensor_server/local_cli_commands.c b/app/btmesh/example/btmesh_soc_sensor_server/local_cli_commands.c new file mode 100644 index 00000000000..0b201e0d7b8 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/local_cli_commands.c @@ -0,0 +1,85 @@ +/***************************************************************************//** + * @file + * @brief CLI commands 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. + * + ******************************************************************************/ + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_CLI_PRESENT +#include "sl_btmesh.h" +#include "sl_bluetooth.h" +#include "sl_cli.h" +#include "app_log.h" +#include "app_assert.h" + +/***************************************************************************//** + * CLI Command to read BT Address and mesh UUID. + ******************************************************************************/ +void info(sl_cli_command_arg_t *arguments) +{ + (void) arguments; + bd_addr address; + uint8_t address_type; + uuid_128 uuid; + + sl_status_t sc = sl_bt_system_get_identity_address(&address, &address_type); + app_assert_status_f(sc, "Failed to get Bluetooth address"); + app_log("Bluetooth %s address: %02X:%02X:%02X:%02X:%02X:%02X" APP_LOG_NL, + address_type ? "static random" : "public device", + address.addr[5], + address.addr[4], + address.addr[3], + address.addr[2], + address.addr[1], + address.addr[0]); + + sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get Bluetooth mesh uuid"); + app_log("Bluetooth mesh UUID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X" + "%02X%02X%02X%02X%02X" APP_LOG_NL, + uuid.data[0], + uuid.data[1], + uuid.data[2], + uuid.data[3], + uuid.data[4], + uuid.data[5], + uuid.data[6], + uuid.data[7], + uuid.data[8], + uuid.data[9], + uuid.data[10], + uuid.data[11], + uuid.data[12], + uuid.data[13], + uuid.data[14], + uuid.data[15]); +} + +#endif // SL_CATALOG_CLI_PRESENT diff --git a/app/btmesh/example/btmesh_soc_sensor_server/main.c b/app/btmesh/example/btmesh_soc_sensor_server/main.c new file mode 100644 index 00000000000..939ed36f5d9 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_sensor_server/main.c @@ -0,0 +1,71 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif // SL_CATALOG_POWER_MANAGER_PRESENT +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} diff --git a/app/btmesh/example/btmesh_soc_switch/app.c b/app/btmesh/example/btmesh_soc_switch/app.c new file mode 100644 index 00000000000..c0881a84c85 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/app.c @@ -0,0 +1,418 @@ +/***************************************************************************//** + * @file + * @brief Application code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include +#include "em_common.h" +#include "sl_status.h" + +#include "sl_btmesh.h" +#include "sl_bluetooth.h" +#include "app.h" + +#include "gatt_db.h" + +#include "app_assert.h" + +/* Buttons and LEDs headers */ +#include "app_button_press.h" +#include "sl_simple_button.h" +#include "sl_simple_button_instances.h" +#include "sl_simple_led.h" +#include "sl_simple_led_instances.h" + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_APP_LOG_PRESENT +#include "app_log.h" +#endif // SL_CATALOG_APP_LOG_PRESENT + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#include "sl_btmesh_wstk_lcd.h" +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +#include "app_btmesh_util.h" + +/* Switch app headers */ +#include "sl_simple_timer.h" +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_lighting_client.h" +#include "sl_btmesh_ctl_client.h" +#include "sl_btmesh_scene_client.h" +#include "sl_btmesh_provisioning_decorator.h" + +/// High Priority +#define HIGH_PRIORITY 0 +/// No Timer Options +#define NO_FLAGS 0 +/// Callback has no parameters +#define NO_CALLBACK_DATA (void *)NULL +/// Timeout for Blinking LED during provisioning +#define APP_LED_BLINKING_TIMEOUT 250 +/// Increase step of physical values (lightness, color temperature) +#define INCREASE 10 +/// Decrease step of physical values (lightness, color temperature) +#define DECREASE (-10) +/// Length of the display name buffer +#define NAME_BUF_LEN 20 +/// Length of boot error message buffer +#define BOOT_ERR_MSG_BUF_LEN 30 +/// Used button index +#define BUTTON_PRESS_BUTTON_0 0 + +#ifndef SL_CATALOG_APP_LOG_PRESENT +#define app_log(...) +#define app_log_status_error_f(...) +#endif // SL_CATALOG_APP_LOG_PRESENT + +#ifdef SL_CATALOG_BTMESH_WSTK_LCD_PRESENT +#define lcd_print(...) sl_btmesh_LCD_write(__VA_ARGS__) +#else +#define lcd_print(...) +#endif // SL_CATALOG_BTMESH_WSTK_LCD_PRESENT + +/// periodic timer handle +static sl_simple_timer_t app_led_blinking_timer; + +/// periodic timer callback +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, void *data); +// Handles button press and does a factory reset +static bool handle_reset_conditions(void); +// Set device name in the GATT database +static void set_device_name(uuid_128 *uuid); + +/******************************************************************************* + * Global variables + ******************************************************************************/ +/// number of active Bluetooth connections +static uint8_t num_connections = 0; + +static bool init_done = false; + +/***************************************************************************//** + * Change buttons to LEDs in case of shared pin + * + ******************************************************************************/ +void change_buttons_to_leds(void) +{ + app_button_press_disable(); + // Disable button and enable led + sl_simple_button_disable(&sl_button_btn0); + sl_simple_led_init(sl_led_led0.context); + // Disable button and enable led +#ifndef SINGLE_BUTTON + sl_simple_button_disable(&sl_button_btn1); +#endif // SINGLE_BUTTON +#ifndef SINGLE_LED + sl_simple_led_init(sl_led_led1.context); +#endif // SINGLE_LED +} + +/***************************************************************************//** + * Change LEDs to buttons in case of shared pin + * + ******************************************************************************/ +void change_leds_to_buttons(void) +{ + // Enable buttons + sl_simple_button_enable(&sl_button_btn0); +#ifndef SINGLE_BUTTON + sl_simple_button_enable(&sl_button_btn1); +#endif // SINGLE_BUTTON + // Wait + sl_sleeptimer_delay_millisecond(1); + // Enable button presses + app_button_press_enable(); +} + +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +SL_WEAK void app_init(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application init code here! // + // This is called once during start-up. // + ///////////////////////////////////////////////////////////////////////////// + app_log("BT mesh Switch initialized" APP_LOG_NL); + // Ensure right init order in case of shared pin for enabling buttons + change_buttons_to_leds(); + // Change LEDs to buttons in case of shared pin + change_leds_to_buttons(); + handle_reset_conditions(); +} + +/***************************************************************************//** + * Application Process Action. + ******************************************************************************/ +SL_WEAK void app_process_action(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application code here! // + // This is called infinitely. // + // Do not call blocking functions from here! // + ///////////////////////////////////////////////////////////////////////////// +} + +/***************************************************************************//** + * Set device name in the GATT database. A unique name is generated using + * the two last bytes from the UUID of this device. Name is also + * displayed on the LCD. + * + * @param[in] uuid Pointer to device UUID. + ******************************************************************************/ +static void set_device_name(uuid_128 *uuid) +{ + char name[NAME_BUF_LEN]; + sl_status_t result; + + // Create unique device name using the last two bytes of the device UUID + snprintf(name, NAME_BUF_LEN, "switch node %02x%02x", + uuid->data[14], uuid->data[15]); + + app_log("Device name: '%s'" APP_LOG_NL, name); + + result = sl_bt_gatt_server_write_attribute_value(gattdb_device_name, + 0, + strlen(name), + (uint8_t *)name); + app_log_status_error_f(result, + "sl_bt_gatt_server_write_attribute_value() failed" APP_LOG_NL); + + // Show device name on the LCD + lcd_print(name, SL_BTMESH_WSTK_LCD_ROW_NAME_CFG_VAL); + + (void) result; +} + +/***************************************************************************//** + * Handles button press and does a factory reset + * + * @return true if there is no button press + ******************************************************************************/ +static bool handle_reset_conditions(void) +{ + // If PB0 is held down then do full factory reset + if (sl_simple_button_get_state(&sl_button_btn0) + == SL_SIMPLE_BUTTON_PRESSED) { + // Disable button presses + app_button_press_disable(); + // Full factory reset + sl_btmesh_initiate_full_reset(); + return false; + } + +#ifndef SINGLE_BUTTON + // If PB1 is held down then do node factory reset + if (sl_simple_button_get_state(&sl_button_btn1) + == SL_SIMPLE_BUTTON_PRESSED) { + // Disable button presses + app_button_press_disable(); + // Node factory reset + sl_btmesh_initiate_node_reset(); + return false; + } +#endif // SL_CATALOG_BTN1_PRESENT + return true; +} + +/***************************************************************************//** + * Handling of le stack events. + * @param[in] evt Pointer to incoming event. + ******************************************************************************/ +void sl_bt_on_event(sl_bt_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_bt_evt_connection_opened_id: + num_connections++; + lcd_print("connected", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Connected" APP_LOG_NL); + break; + + case sl_bt_evt_connection_closed_id: + if (num_connections > 0) { + if (--num_connections == 0) { + lcd_print("", SL_BTMESH_WSTK_LCD_ROW_CONNECTION_CFG_VAL); + app_log("Disconnected" APP_LOG_NL); + } + } + break; + + default: + break; + } +} + +/***************************************************************************//** + * Bluetooth Mesh stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Pointer to incoming event from the Bluetooth Mesh stack. + ******************************************************************************/ +void sl_btmesh_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + default: + break; + } +} + +/******************************************************************************* + * Callbacks + ******************************************************************************/ + +/***************************************************************************//** + * Handling of provisionee init result + ******************************************************************************/ +void sl_btmesh_provisionee_on_init(sl_status_t result) +{ + if (SL_STATUS_OK != result) { + char buf[BOOT_ERR_MSG_BUF_LEN]; + snprintf(buf, sizeof(buf), "init failed (0x%lx)", result); + lcd_print(buf, SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + } else { + uuid_128 uuid; + sl_status_t sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get UUID"); + set_device_name(&uuid); + } +} + +/***************************************************************************//** + * Button press Callbacks + ******************************************************************************/ +void app_button_press_cb(uint8_t button, uint8_t duration) +{ + // Selecting action by duration + switch (duration) { + case APP_BUTTON_PRESS_DURATION_SHORT: + // Handling of button press less than 0.25s + if (button == BUTTON_PRESS_BUTTON_0) { + sl_btmesh_change_lightness(DECREASE); + } else { + sl_btmesh_change_lightness(INCREASE); + } + break; + case APP_BUTTON_PRESS_DURATION_MEDIUM: + // Handling of button press greater than 0.25s and less than 1s + if (button == BUTTON_PRESS_BUTTON_0) { + sl_btmesh_change_temperature(DECREASE); + } else { + sl_btmesh_change_temperature(INCREASE); + } + break; + case APP_BUTTON_PRESS_DURATION_LONG: + // Handling of button press greater than 1s and less than 5s +#ifdef SINGLE_BUTTON + sl_btmesh_change_switch_position(SL_BTMESH_LIGHTING_CLIENT_TOGGLE); +#else + if (button == BUTTON_PRESS_BUTTON_0) { + sl_btmesh_change_switch_position(SL_BTMESH_LIGHTING_CLIENT_OFF); + } else { + sl_btmesh_change_switch_position(SL_BTMESH_LIGHTING_CLIENT_ON); + } +#endif + break; + case APP_BUTTON_PRESS_DURATION_VERYLONG: + // Handling of button press greater than 5s + if (button == BUTTON_PRESS_BUTTON_0) { + sl_btmesh_select_scene(1); + } else { + sl_btmesh_select_scene(2); + } + break; + default: + break; + } +} + +/******************************************************************************* + * Provisioning Decorator Callbacks + ******************************************************************************/ +// Called when the Provisioning starts +void sl_btmesh_on_node_provisioning_started(uint16_t result) +{ + // Change buttons to LEDs in case of shared pin + change_buttons_to_leds(); + + sl_status_t sc = sl_simple_timer_start(&app_led_blinking_timer, + APP_LED_BLINKING_TIMEOUT, + app_led_blinking_timer_cb, + NO_CALLBACK_DATA, + true); + + app_assert_status_f(sc, "Failed to start periodic timer"); + +#if defined(SL_CATALOG_BTMESH_WSTK_LCD_PRESENT) || defined(SL_CATALOG_APP_LOG_PRESENT) + app_show_btmesh_node_provisioning_started(result); +#else + (void)result; +#endif // defined(SL_CATALOG_BTMESH_WSTK_LCD_PRESENT) || defined(SL_CATALOG_APP_LOG_PRESENT) +} + +// Called when the Provisioning finishes successfully +void sl_btmesh_on_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + sl_status_t sc = sl_simple_timer_stop(&app_led_blinking_timer); + app_assert_status_f(sc, "Failed to stop periodic timer"); + // Turn off LED + init_done = true; + sl_simple_led_turn_off(sl_led_led0.context); +#ifndef SINGLE_LED + sl_simple_led_turn_off(sl_led_led1.context); +#endif // SINGLE_LED + change_leds_to_buttons(); + +#if defined(SL_CATALOG_BTMESH_WSTK_LCD_PRESENT) || defined(SL_CATALOG_APP_LOG_PRESENT) + app_show_btmesh_node_provisioned(address, iv_index); +#else + (void)address; + (void)iv_index; +#endif // defined(SL_CATALOG_BTMESH_WSTK_LCD_PRESENT) || defined(SL_CATALOG_APP_LOG_PRESENT) +} + +/***************************************************************************//** + * Timer Callbacks + ******************************************************************************/ +static void app_led_blinking_timer_cb(sl_simple_timer_t *handle, void *data) +{ + (void)data; + (void)handle; + if (!init_done) { + // Toggle LEDs + sl_simple_led_toggle(sl_led_led0.context); +#ifndef SINGLE_LED + sl_simple_led_toggle(sl_led_led1.context); +#endif // SINGLE_LED + } +} diff --git a/app/btmesh/example/btmesh_soc_switch/app.h b/app/btmesh/example/btmesh_soc_switch/app.h new file mode 100644 index 00000000000..1f896608684 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/app.h @@ -0,0 +1,57 @@ +/***************************************************************************//** + * @file + * @brief Application interface provided to main(). + ******************************************************************************* + * # 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 APP_H +#define APP_H + +#include + +/***************************************************************************//** + * Application Init. + ******************************************************************************/ +void app_init(void); + +/***************************************************************************//** + * Application Process Action. + ******************************************************************************/ +void app_process_action(void); + +/***************************************************************************//** + * Shows the provisioning start information + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result); + +/***************************************************************************//** + * Shows the provisioning completed information + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index); + +#endif // APP_H diff --git a/app/btmesh/example/btmesh_soc_switch/app_out_lcd.c b/app/btmesh/example/btmesh_soc_switch/app_out_lcd.c new file mode 100644 index 00000000000..4fb560a8788 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/app_out_lcd.c @@ -0,0 +1,192 @@ +/***************************************************************************//** + * @file + * @brief Application Output LCD code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include "em_common.h" +#include "sl_status.h" + +#include "app.h" +#include "app_log.h" + +#include "sl_btmesh_api.h" +#include "sl_btmesh_lpn.h" +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_provisioning_decorator.h" +#include "sl_btmesh_wstk_lcd.h" + +/***************************************************************************//** + * @addtogroup btmesh_lpn_cb BT mesh Low Power Node Callbacks + * @{ + ******************************************************************************/ + +/******************************************************************************* + * Called when the Low Power Node is initialized. + ******************************************************************************/ +void sl_btmesh_lpn_on_init(void) +{ + app_log("BT mesh LPN on" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("LPN on", SL_BTMESH_WSTK_LCD_ROW_LPN_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when the Low Power Node is deinitialized. + ******************************************************************************/ +void sl_btmesh_lpn_on_deinit(void) +{ + app_log("BT mesh LPN off" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("LPN off", SL_BTMESH_WSTK_LCD_ROW_LPN_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when the Low Power Node establishes friendship with another node + ******************************************************************************/ +void sl_btmesh_lpn_on_friendship_established(uint16_t node_address) +{ + app_log("BT mesh LPN with friend (node address: 0x%04x)" APP_LOG_NL, node_address); + sl_status_t status = sl_btmesh_LCD_write("LPN with friend", + SL_BTMESH_WSTK_LCD_ROW_LPN_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when the friendship establishment attempt of Low Power Node fails + ******************************************************************************/ +void sl_btmesh_lpn_on_friendship_failed(uint16_t reason) +{ + app_log("BT mesh No friend (reason: 0x%04x)" APP_LOG_NL, reason); + sl_status_t status = sl_btmesh_LCD_write("No friend", + SL_BTMESH_WSTK_LCD_ROW_LPN_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when friendship that was successfully established has been terminated + ******************************************************************************/ +void sl_btmesh_lpn_on_friendship_terminated(uint16_t reason) +{ + app_log("BT mesh Friend lost (reason: 0x%04x)" APP_LOG_NL, reason); + sl_status_t status = sl_btmesh_LCD_write("Friend lost", + SL_BTMESH_WSTK_LCD_ROW_LPN_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/** @} */ // btmesh_lpn_cb + +/***************************************************************************//** + * @addtogroup prov_decor_cb + * @brief Provisioning Decorator Callbacks + * @{ + ******************************************************************************/ +/******************************************************************************* + * Called at node initialization time to provide provisioning information + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, started unprovisioned beaconing..." APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("unprovisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); + } +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioning_started callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, result); + sl_status_t status = sl_btmesh_LCD_write("provisioning...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioned callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, + uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + sl_status_t status = sl_btmesh_LCD_write("provisioned", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when the Provisioning fails + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + sl_status_t status = sl_btmesh_LCD_write("prov failed...", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/** @} */ // prov_decor_cb + +/***************************************************************************//** + * @addtogroup fact_rst_cb + * @brief Factory Reset Callbacks + * @{ + ******************************************************************************/ + +/******************************************************************************* + * Called when full reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Factory reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/******************************************************************************* + * Called when node reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); + sl_status_t status = sl_btmesh_LCD_write("Node reset", + SL_BTMESH_WSTK_LCD_ROW_STATUS_CFG_VAL); + app_log_status_error_f(status, "LCD write failed" APP_LOG_NL); +} + +/** @} */ // fact_rst_cb diff --git a/app/btmesh/example/btmesh_soc_switch/app_out_log.c b/app/btmesh/example/btmesh_soc_switch/app_out_log.c new file mode 100644 index 00000000000..ef4edd880bd --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/app_out_log.c @@ -0,0 +1,167 @@ +/***************************************************************************//** + * @file + * @brief Application Output Log code + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include +#include "em_common.h" +#include "sl_status.h" + +#include "app.h" +#include "app_log.h" + +#include "sl_btmesh_api.h" +#include "sl_btmesh_lpn.h" +#include "sl_btmesh_factory_reset.h" +#include "sl_btmesh_provisioning_decorator.h" + +/***************************************************************************//** + * @addtogroup btmesh_lpn_cb + * @brief BT mesh Low Power Node Callbacks + * @{ + ******************************************************************************/ + +/******************************************************************************* + * Called when the Low Power Node is initialized. + ******************************************************************************/ +void sl_btmesh_lpn_on_init(void) +{ + app_log("BT mesh LPN on" APP_LOG_NL); +} + +/******************************************************************************* + * Called when the Low Power Node is deinitialized. + ******************************************************************************/ +void sl_btmesh_lpn_on_deinit(void) +{ + app_log("BT mesh LPN off" APP_LOG_NL); +} + +/******************************************************************************* + * Called when the Low Power Node establishes friendship with another node + ******************************************************************************/ +void sl_btmesh_lpn_on_friendship_established(uint16_t node_address) +{ + app_log("BT mesh LPN with friend (node address: 0x%04x)" APP_LOG_NL, node_address); + (void)node_address; +} + +/******************************************************************************* + * Called when the friendship establishment attempt of Low Power Node fails + ******************************************************************************/ +void sl_btmesh_lpn_on_friendship_failed(uint16_t reason) +{ + app_log("BT mesh No friend (reason: 0x%04x)" APP_LOG_NL, reason); + (void)reason; +} + +/******************************************************************************* + * Called when friendship that was successfully established has been terminated + ******************************************************************************/ +void sl_btmesh_lpn_on_friendship_terminated(uint16_t reason) +{ + app_log("BT mesh Friend lost (reason: 0x%04x)" APP_LOG_NL, reason); + (void)reason; +} + +/** @} */ // btmesh_lpn_cb + +/***************************************************************************//** + * @addtogroup prov_decor_cb + * @brief Provisioning Decorator Callbacks + * @{ + ******************************************************************************/ +/******************************************************************************* + * Called at node initialization time to provide provisioning information + ******************************************************************************/ +void sl_btmesh_on_provision_init_status(bool provisioned, + uint16_t address, + uint32_t iv_index) +{ + if (provisioned) { + app_show_btmesh_node_provisioned(address, iv_index); + } else { + app_log("BT mesh node is unprovisioned, started unprovisioned beaconing..." APP_LOG_NL); + } +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioning_started callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioning_started(uint16_t result) +{ + app_log("BT mesh node provisioning is started (result: 0x%04x)" APP_LOG_NL, + result); + (void)result; +} + +/******************************************************************************* + * Called from sl_btmesh_on_node_provisioned callback in app.c + ******************************************************************************/ +void app_show_btmesh_node_provisioned(uint16_t address, uint32_t iv_index) +{ + app_log("BT mesh node is provisioned (address: 0x%04x, iv_index: 0x%lx)" APP_LOG_NL, + address, + iv_index); + (void)address; + (void)iv_index; +} + +/******************************************************************************* + * Called when the Provisioning fails + ******************************************************************************/ +void sl_btmesh_on_node_provisioning_failed(uint16_t result) +{ + app_log("BT mesh node provisioning failed (result: 0x%04x)" APP_LOG_NL, result); + (void)result; +} + +/** @} */ // prov_decor_cb + +/***************************************************************************//** + * @addtogroup fact_rst_cb + * @brief Factory Reset Callbacks + * @{ + ******************************************************************************/ +/******************************************************************************* + * Called when full reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_full_reset(void) +{ + app_log("Factory reset" APP_LOG_NL); +} + +/******************************************************************************* + * Called when node reset is established, before system reset + ******************************************************************************/ +void sl_btmesh_factory_reset_on_node_reset(void) +{ + app_log("Node reset" APP_LOG_NL); +} + +/** @} */ // fact_rst_cb diff --git a/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_display.slcp b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_display.slcp new file mode 100644 index 00000000000..1cf2d127995 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_display.slcp @@ -0,0 +1,167 @@ +project_name: btmesh_soc_switch +package: Btmesh +label: Bluetooth Mesh - SoC Switch +description: > + An out-of-the-box Software Demo where the device acts as a switch. + Push Button presses or CLI commands can control the state, lightness, + and color temperature of the LEDs and scenes on a remote device. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_ctl_client + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_lighting_client + - id: btmesh_lpn + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_switch/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_switch/readme_img0.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img1.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img2.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img3.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img4.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img5.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img6.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img7.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL + value: "9" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_MODE_CFG_VAL + value: "1" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNK_SIZE_CFG_VAL + value: "8" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK_CFG_VAL + value: "64" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_PUSH_MODE_CFG_VAL + value: "0" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmswitchlp_v1"' + - name: SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL + value: "31" + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: "0x4600" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1300" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:device:sdid:!205 + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_display_eusart.slcp b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_display_eusart.slcp new file mode 100644 index 00000000000..23e77c77526 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_display_eusart.slcp @@ -0,0 +1,172 @@ +project_name: btmesh_soc_switch +package: Btmesh +label: Bluetooth Mesh - SoC Switch +description: > + An out-of-the-box Software Demo where the device acts as a switch. + Push Button presses or CLI commands can control the state, lightness, + and color temperature of the LEDs and scenes on a remote device. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_ctl_client + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_lighting_client + - id: btmesh_lpn + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: btmesh_wstk_lcd + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: memlcd_usart + - id: mpu + - id: mx25_flash_shutdown_usart + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_lcd.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_switch/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_switch/readme_img0.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img1.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img2.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img3.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img4.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img5.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img6.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img7.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_DISPLAY + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL + value: "9" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_MODE_CFG_VAL + value: "1" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNK_SIZE_CFG_VAL + value: "8" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK_CFG_VAL + value: "64" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_PUSH_MODE_CFG_VAL + value: "0" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmswitchlp_v1"' + - name: SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL + value: "31" + - name: SL_GLIB_FONTNORMAL_8X8 + value: 0 + - name: SL_HEAP_SIZE + value: "0x4600" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1300" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log.slcp b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log.slcp new file mode 100644 index 00000000000..6b8cb3590c1 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log.slcp @@ -0,0 +1,162 @@ +project_name: btmesh_soc_switch +package: Btmesh +label: Bluetooth Mesh - SoC Switch +description: > + An out-of-the-box Software Demo where the device acts as a switch. + Push Button presses or CLI commands can control the state, lightness, + and color temperature of the LEDs and scenes on a remote device. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_ctl_client + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_lighting_client + - id: btmesh_lpn + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_switch/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_switch/readme_img0.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img1.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img2.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img3.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img4.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img5.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img6.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img7.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL + value: "9" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_MODE_CFG_VAL + value: "1" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNK_SIZE_CFG_VAL + value: "8" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK_CFG_VAL + value: "64" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_PUSH_MODE_CFG_VAL + value: "0" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmswitchlp_v1"' + - name: SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL + value: "31" + - name: SL_HEAP_SIZE + value: "0x4300" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1200" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:device:sdid:!205 + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log_eusart.slcp b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log_eusart.slcp new file mode 100644 index 00000000000..bb8fef1f4ea --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log_eusart.slcp @@ -0,0 +1,170 @@ +project_name: btmesh_soc_switch +package: Btmesh +label: Bluetooth Mesh - SoC Switch +description: > + An out-of-the-box Software Demo where the device acts as a switch. + Push Button presses or CLI commands can control the state, lightness, + and color temperature of the LEDs and scenes on a remote device. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_ctl_client + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_lighting_client + - id: btmesh_lpn + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_eusart + instance: + - vcom + - id: mpu + - id: mx25_flash_shutdown_usart + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_switch/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_switch/readme_img0.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img1.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img2.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img3.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img4.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img5.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img6.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img7.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_eusart" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL + value: "9" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_MODE_CFG_VAL + value: "1" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNK_SIZE_CFG_VAL + value: "8" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK_CFG_VAL + value: "64" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_PUSH_MODE_CFG_VAL + value: "0" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmswitchlp_v1"' + - name: SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL + value: "31" + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + condition: + - "device_sdid_205" + - name: SL_HEAP_SIZE + value: "0x4300" + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO + value: 1 + - name: SL_IOSTREAM_EUSART_VCOM_PERIPHERAL + value: EUSART1 + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1200" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:2+ + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log_single.slcp b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log_single.slcp new file mode 100644 index 00000000000..3a86c0e2738 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log_single.slcp @@ -0,0 +1,179 @@ +project_name: btmesh_soc_switch +package: Btmesh +label: Bluetooth Mesh - SoC Switch +description: > + An out-of-the-box Software Demo where the device acts as a switch. Push Button + presses (only PB0 is functional) or CLI commands can control the state, + lightness, and color temperature of the LEDs and scenes on a remote device. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_ctl_client + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_lighting_client + - id: btmesh_lpn + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - id: simple_led + instance: + - led0 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_switch/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_switch/readme_img0.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img1.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img2.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img3.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img4.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img5.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img6.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img7.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img8.png + +configuration: + - name: EMDRV_DMADRV_DMA_CH_COUNT + value: 1 + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: SL_BTMESH_CTL_CLIENT_TEMPERATURE_WRAP_ENABLED_CFG_VAL + value: "1" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BTMESH_LIGHT_LIGHTNESS_WRAP_ENABLED_CFG_VAL + value: "1" + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL + value: "9" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_MODE_CFG_VAL + value: "1" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNK_SIZE_CFG_VAL + value: "8" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK_CFG_VAL + value: "64" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_PUSH_MODE_CFG_VAL + value: "0" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmswitchlp_v1"' + - name: SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL + value: "31" + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + condition: + - "device_sdid_205" + - name: SL_HEAP_SIZE + value: "0x4000" + condition: + - "device_sdid_205" + - name: SL_HEAP_SIZE + value: "0x4200" + unless: + - "device_sdid_205" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1200" + +define: +- name: "SINGLE_BUTTON" + value: "1" +- name: "SINGLE_LED" + value: "1" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:board_only + - hardware:component:button:1 + - hardware:component:display:!ls013b7dh03 + - hardware:component:led:1 + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:device:sdid:!215 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log_xg22.slcp b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log_xg22.slcp new file mode 100644 index 00000000000..b71c8b9c93f --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_log_xg22.slcp @@ -0,0 +1,162 @@ +project_name: btmesh_soc_switch +package: Btmesh +label: Bluetooth Mesh - SoC Switch +description: > + An out-of-the-box Software Demo where the device acts as a switch. + Push Button presses or CLI commands can control the state, lightness, + and color temperature of the LEDs and scenes on a remote device. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: app_log + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_ctl_client + - id: btmesh_event_log + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_stack_relay + - id: btmesh_lighting_client + - id: btmesh_lpn + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: btmesh_iv_update + - id: cli + instance: + - example + - id: gatt_service_device_information + - id: iostream_usart + instance: + - vcom + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: app_out_log.c + - path: local_cli_commands.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_switch/readme.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_switch/readme_img0.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img1.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img2.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img3.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img4.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img5.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img6.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img7.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img8.png + +configuration: + - name: APP_LOG_LEVEL + value: "APP_LOG_LEVEL_INFO" + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BOARD_ENABLE_VCOM + value: "1" + condition: + - "iostream_usart" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL + value: "9" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_MODE_CFG_VAL + value: "1" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNK_SIZE_CFG_VAL + value: "8" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK_CFG_VAL + value: "64" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_PUSH_MODE_CFG_VAL + value: "0" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmswitchlp_v1"' + - name: SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL + value: "31" + - name: SL_CLI_NUM_HISTORY_BYTES + value: "0" + - name: SL_HEAP_SIZE + value: "0x4000" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1200" + +template_contribution: + - name: cli_command + value: + name: info + handler: info + help: "Prints info about BT address and mesh UUID" + condition: + - cli + +tag: + - hardware:device:sdid:205 + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:led:2+ + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme_xg22.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_low_power.slcp b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_low_power.slcp new file mode 100644 index 00000000000..d1191c8a555 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_low_power.slcp @@ -0,0 +1,134 @@ +project_name: btmesh_soc_switch_low_power +package: Btmesh +label: Bluetooth Mesh - SoC Switch Low Power +description: > + An out-of-the-box Software Demo where the device acts as a switch. It is optimized for + low current consumption with disabled CLI, logging, and LCD.Push Button presses can control + the state, lightness, and color temperature of the LEDs and scenes on a remote device. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_ctl_client + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_lighting_client + - id: btmesh_lpn + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: gatt_service_device_information + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - btn1 + - id: simple_led + instance: + - led0 + - led1 + - id: simple_timer + +source: + - path: app.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config_low_power.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_switch/readme_low_power.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_switch/readme_img0.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img1.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img2.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img3.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img4.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img5.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img6.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img7.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img8.png + +configuration: + - name: SL_BTMESH_LPN_POLL_TIMEOUT_CFG_VAL + value: 120000 + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL + value: "9" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_MODE_CFG_VAL + value: "1" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNK_SIZE_CFG_VAL + value: "8" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK_CFG_VAL + value: "64" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_PUSH_MODE_CFG_VAL + value: "0" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmswitchlp_v1"' + - name: SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL + value: "31" + - name: SL_HEAP_SIZE + value: "0x4300" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_SIMPLE_BUTTON_ALLOW_LED_CONFLICT + value: "1" + - name: SL_STACK_SIZE + value: "0x1200" + +tag: + - hardware:board_only + - hardware:component:button:2+ + - hardware:component:led:2+ + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme_low_power.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_low_power_single.slcp b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_low_power_single.slcp new file mode 100644 index 00000000000..5b52dd54b60 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/btmesh_soc_switch_low_power_single.slcp @@ -0,0 +1,140 @@ +project_name: btmesh_soc_switch_low_power +package: Btmesh +label: Bluetooth Mesh - SoC Switch Low Power +description: > + A Software Demo where the device acts as a switch. It is optimized for low current consumption + with disabled CLI, logging, and LCD. Button presses (only PB0 is functional) can control + the state, lightness, and color temperature of the LEDs and scenes on a remote device. + +category: Bluetooth Mesh Examples +quality: production + +filter: + - name: "Wireless Technology" + value: ["Bluetooth Mesh"] + - name: "Device Type" + value: ["SoC"] + - name: "Project Difficulty" + value: ["Advanced"] + +component: + - id: app_assert + - id: bluetooth_feature_system + - id: bootloader_interface + - id: app_button_press + - id: btmesh_ctl_client + - id: btmesh_factory_reset + - id: btmesh_stack_gatt_prov_bearer + - id: btmesh_lighting_client + - id: btmesh_lpn + - id: btmesh_provisionee + - id: btmesh_provisioning_decorator + - id: btmesh_proxy + - id: btmesh_scene_client + - id: btmesh_stack + - id: btmesh_updating_node + - id: gatt_service_device_information + - id: mpu + - id: rail_util_pti + - id: simple_button + instance: + - btn0 + - id: simple_led + instance: + - led0 + - id: simple_timer + +source: + - path: app.c + - path: main.c + +include: + - path: . + file_list: + - path: app.h + +config_file: + - override: + component: gatt_configuration + file_id: gatt_configuration_file_id + path: gatt_configuration.btconf + directory: btconf + - override: + component: btmesh_dcd_configuration + file_id: dcd_configuration_file_id + path: dcd_config_low_power.btmeshconf + directory: btmeshconf + +readme: + - path: ../../documentation/example/btmesh_soc_switch/readme_low_power.md + +other_file: + - path: ../../../bluetooth/script/create_bl_files.bat + - path: ../../../bluetooth/script/create_bl_files.sh + - path: ../../documentation/example/btmesh_soc_switch/readme_img0.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img1.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img2.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img3.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img4.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img5.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img6.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img7.png + - path: ../../documentation/example/btmesh_soc_switch/readme_img8.png + +configuration: + - name: SL_BTMESH_CTL_CLIENT_TEMPERATURE_WRAP_ENABLED_CFG_VAL + value: "1" + - name: SL_BTMESH_LPN_POLL_TIMEOUT_CFG_VAL + value: 120000 + - name: NVM3_DEFAULT_CACHE_SIZE + value: 100 + - name: SL_BTMESH_LIGHT_LIGHTNESS_WRAP_ENABLED_CFG_VAL + value: "1" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_BLOCK_SIZE_LOG_CFG_VAL + value: "9" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_LPN_MODE_CFG_VAL + value: "1" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNK_SIZE_CFG_VAL + value: "8" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_MAX_CHUNKS_PER_BLOCK_CFG_VAL + value: "64" + - name: SL_BTMESH_BLOB_TRANSFER_SERVER_PUSH_MODE_CFG_VAL + value: "0" + - name: SL_BTMESH_CONFIG_MAX_PROV_BEARERS + value: "3" + - name: SL_BTMESH_FW_UPDATE_SERVER_FWID_CFG_VAL + value: '"socbtmswitchlp_v1"' + - name: SL_BTMESH_FW_UPDATE_SERVER_METADATA_LENGTH_CFG_VAL + value: "31" + - name: SL_HEAP_SIZE + value: "0x4300" + - name: SL_PSA_KEY_USER_SLOT_COUNT + value: "0" + condition: + - psa_crypto + - name: SL_STACK_SIZE + value: "0x1200" + +define: +- name: "SINGLE_BUTTON" + value: "1" +- name: "SINGLE_LED" + value: "1" + +tag: + - hardware:board_only + - hardware:component:button:1 + - hardware:component:led:1 + - hardware:device:flash:512 + - hardware:device:ram:32 + - hardware:rf:band:2400 + - prebuilt_demo + +ui_hints: + highlight: + - path: config/btconf/gatt_configuration.btconf + focus: false + - path: config/btmeshconf/dcd_config.btmeshconf + focus: false + - path: readme_low_power.md + focus: true \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_switch/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_switch/dcd_config.btmeshconf new file mode 100644 index 00000000000..57cbb6c61e6 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/dcd_config.btmeshconf @@ -0,0 +1,17 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x0006", + "vid": "0x0420", + "elements": [ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0000", "name":"Configuration Server"}, + {"mid":"0x0002", "name":"Health Server"} + ] + } + ] + } +} \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_switch/dcd_config_low_power.btmeshconf b/app/btmesh/example/btmesh_soc_switch/dcd_config_low_power.btmeshconf new file mode 100644 index 00000000000..24afcd271c6 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/dcd_config_low_power.btmeshconf @@ -0,0 +1,17 @@ +{ + "composition_data": { + "cid": "0x02ff", + "pid": "0x0007", + "vid": "0x0420", + "elements": [ + { + "name": "Main", + "location": "0x0000", + "sig_models" : [ + {"mid":"0x0000", "name":"Configuration Server"}, + {"mid":"0x0002", "name":"Health Server"} + ] + } + ] + } +} \ No newline at end of file diff --git a/app/btmesh/example/btmesh_soc_switch/gatt_configuration.btconf b/app/btmesh/example/btmesh_soc_switch/gatt_configuration.btconf new file mode 100644 index 00000000000..f7ebd623f50 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/gatt_configuration.btconf @@ -0,0 +1,48 @@ + + + + + Abstract: The generic_access service contains generic information about the device. All available Characteristics are readonly. + + + switch node + + + + Abstract: The external appearance of this device. The values are composed of a category (10-bits) and sub-categories (6-bits). + 0000 + + + + + Abstract: The Device Information Service exposes manufacturer and/or vendor information about a device. Summary: This service exposes manufacturer information about a device. The Device Information Service is instantiated as a Primary Service. Only one instance of the Device Information Service is exposed on a device. + + Abstract: The value of this characteristic is a UTF-8 string representing the name of the manufacturer of the device. + Silicon Labs + + + + + + Abstract: The value of this characteristic is a UTF-8 string representing the model number assigned by the device vendor. + 00000000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the hardware revision for the hardware within the device. + 000 + + + + Summary: The value of this characteristic is a UTF-8 string representing the firmware revision for the firmware within the device. + 0.0.0 + + + + Abstract: The SYSTEM ID characteristic consists of a structure with two fields. The first field are the LSOs and the second field contains the MSOs. This is a 64-bit structure which consists of a 40-bit manufacturer-defined identifier concatenated with a 24 bit unique Organizationally Unique Identifier (OUI). The OUI is issued by the IEEE Registration Authority (http://standards.ieee.org/regauth/index.html) and is required to be used in accordance with IEEE Standard 802-2001.6 while the least significant 40 bits are manufacturer defined. If System ID generated based on a Bluetooth Device Address, it is required to be done as follows. System ID and the Bluetooth Device Address have a very similar structure: a Bluetooth Device Address is 48 bits in length and consists of a 24 bit Company Assigned Identifier (manufacturer defined identifier) concatenated with a 24 bit Company Identifier (OUI). In order to encapsulate a Bluetooth Device Address as System ID, the Company Identifier is concatenated with 0xFFFE followed by the Company Assigned Identifier of the Bluetooth Address. For more guidelines related to EUI-64, refer to http://standards.ieee.org/develop/regauth/tut/eui64.pdf. Examples: If the system ID is based of a Bluetooth Device Address with a Company Identifier (OUI) is 0x123456 and the Company Assigned Identifier is 0x9ABCDE, then the System Identifier is required to be 0x123456FFFE9ABCDE. + + + + + + diff --git a/app/btmesh/example/btmesh_soc_switch/local_cli_commands.c b/app/btmesh/example/btmesh_soc_switch/local_cli_commands.c new file mode 100644 index 00000000000..0b201e0d7b8 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/local_cli_commands.c @@ -0,0 +1,85 @@ +/***************************************************************************//** + * @file + * @brief CLI commands 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. + * + ******************************************************************************/ + +#ifdef SL_COMPONENT_CATALOG_PRESENT +#include "sl_component_catalog.h" +#endif // SL_COMPONENT_CATALOG_PRESENT + +#ifdef SL_CATALOG_CLI_PRESENT +#include "sl_btmesh.h" +#include "sl_bluetooth.h" +#include "sl_cli.h" +#include "app_log.h" +#include "app_assert.h" + +/***************************************************************************//** + * CLI Command to read BT Address and mesh UUID. + ******************************************************************************/ +void info(sl_cli_command_arg_t *arguments) +{ + (void) arguments; + bd_addr address; + uint8_t address_type; + uuid_128 uuid; + + sl_status_t sc = sl_bt_system_get_identity_address(&address, &address_type); + app_assert_status_f(sc, "Failed to get Bluetooth address"); + app_log("Bluetooth %s address: %02X:%02X:%02X:%02X:%02X:%02X" APP_LOG_NL, + address_type ? "static random" : "public device", + address.addr[5], + address.addr[4], + address.addr[3], + address.addr[2], + address.addr[1], + address.addr[0]); + + sc = sl_btmesh_node_get_uuid(&uuid); + app_assert_status_f(sc, "Failed to get Bluetooth mesh uuid"); + app_log("Bluetooth mesh UUID: %02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X" + "%02X%02X%02X%02X%02X" APP_LOG_NL, + uuid.data[0], + uuid.data[1], + uuid.data[2], + uuid.data[3], + uuid.data[4], + uuid.data[5], + uuid.data[6], + uuid.data[7], + uuid.data[8], + uuid.data[9], + uuid.data[10], + uuid.data[11], + uuid.data[12], + uuid.data[13], + uuid.data[14], + uuid.data[15]); +} + +#endif // SL_CATALOG_CLI_PRESENT diff --git a/app/btmesh/example/btmesh_soc_switch/main.c b/app/btmesh/example/btmesh_soc_switch/main.c new file mode 100644 index 00000000000..939ed36f5d9 --- /dev/null +++ b/app/btmesh/example/btmesh_soc_switch/main.c @@ -0,0 +1,71 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#include "app.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif // SL_CATALOG_POWER_MANAGER_PRESENT +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT + +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/__init__.py b/app/btmesh/example_host/btmesh_host_dfu/app/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/btmesh.py b/app/btmesh/example_host/btmesh_host_dfu/app/btmesh.py new file mode 100644 index 00000000000..ba9e4282d94 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/btmesh.py @@ -0,0 +1,27 @@ +# 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. + +from btmesh.core import Btmesh + +# The application handles only one NCP device so the Btmesh library can be +# instantiated as a singleton +app_btmesh = Btmesh() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cfg.py b/app/btmesh/example_host/btmesh_host_dfu/app/cfg.py new file mode 100644 index 00000000000..cdbd5650609 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/cfg.py @@ -0,0 +1,1399 @@ +# 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. + +import dataclasses +import io +import logging +import re +from configparser import ConfigParser, ExtendedInterpolation, SectionProxy +from pathlib import Path +from typing import Dict, Iterable, Set + +import btmesh.util +from btmesh.db import ModelID +from btmesh.mdl import NamedModelID +from btmesh.util import BtmeshRetryParams + +DEFAULT_APP_CFG_INI = """# BT Mesh Host DFU configuration file + +[appgroup] +# Automatic binding or unbinding of an appkey to model of an element in the app +# group when the publication or subscription is configured on the model. +# If it is true then the automatic binding is enabled by default. +auto_bind_default = true + +# Strict DCD check raises an error when a model which shall be configured +# (publication, subscription, binding) does not exist on the specified element +# address based on the DCD. +# If it is true then the strict DCD check is enabled by default. +dcd_check_default = false + +# Publication Time-To-Live default value of the app group. +# Valid publication TTL range is 0 or [2,127]. The special 255 value can be set to +# use default TTL of the node. +pub_ttl_default = 5 + +# Publication default friendship credential flag of the app group. +# If zero, publication is done using normal credentials. +# If one, it is done with friendship credentials, meaning only the friend can +# decrypt the published message and relay it forward using the normal credentials. +pub_cred_default = 0 + +# Publication default period in milliseconds of the app group. +# Note that the resolution of the publication period is limited by the +# specification to 100ms up to a period of 6.3s, 1s up to a period of 63s, 10s +# up to a period of 630s, and 10 minutes above that. +# Maximum period allowed is 630 minutes. +pub_period_ms_default = 0 + +# Publication retransmission count of the app group. +# Valid values range from 0 to 7. +pub_tx_cnt_default = 0 + +# Publication default retransmission interval in millisecond units of the +# app group. The range of value is 50 to 1600ms, and the resolution of the +# value is 50 milliseconds. +pub_tx_int_ms_default = 0 + +# App group model profiles make it easier to provide publication, subscription +# and bind model parameters to app group commands. A model profile name refers +# to these model sets. +# The model profile options shall follow the following naming convention: +# - Pattern: profile__ +# - : It identifies the model profile in app group commands. +# - The shall be one of the followings: +# - pub_mdls: Models from option value are appended to publication models. +# - sub_mdls: Models from option value are appended to subscription models. +# - bind_mdls: Models from option value are appended to bind models. +# - auto_bind: If true then the pub_mdls and sub_mdls are added to bind_mdls. +# If this option does not exist then it defaults to false. +# - help: Text added to the command help message. +# - The models shall be separated by commas when more than one is provided. +# - The models can be specified in the following ways: +# - The SIG model identifier can be specified as a binary (0b), octal(0o), +# decimal, hex (0x) integer. +# - The vendor model identifier can be specified as a pair of binary(0b), +# octal(0o), decimal, hex (0x) integers separated by any special +# characters (-/:). +# - The SIG model name can be specified by special model name which contains +# underscore (_) characters instead of spaces. +profile_updating_node_sub_mdls = FIRMWARE_UPDATE_SERVER, BLOB_TRANSFER_SERVER +profile_updating_node_auto_bind = true +profile_updating_node_help = Configuration for updating nodes. + +profile_distributor_sub_mdls = FIRMWARE_UPDATE_SERVER, BLOB_TRANSFER_SERVER +profile_distributor_bind_mdls = FIRMWARE_DISTRIBUTION_SERVER, FIRMWARE_UPDATE_CLIENT, + BLOB_TRANSFER_CLIENT +profile_distributor_auto_bind = true +profile_distributor_help = Configuration for distributor. + +profile_lightness_pub_mdls = GENERIC_ONOFF_CLIENT, GENERIC_LEVEL_CLIENT, + GENERIC_POWER_LEVEL_CLIENT, LIGHT_LIGHTNESS_CLIENT +profile_lightness_sub_mdls = GENERIC_ONOFF_SERVER, GENERIC_LEVEL_SERVER, + GENERIC_POWER_LEVEL_SERVER, LIGHT_LIGHTNESS_SERVER, LIGHT_LIGHTNESS_SETUP_SERVER +profile_lightness_auto_bind = true +profile_lightness_help = Configuration of Light Lightness Client, + Light Lightness Server, Light Lightness Setup Server and related + generic models. + + +[common] +# Maximum command retry count when the expected event is not received or the +# received event means a recoverable error. +# If the maximum retry count is exceeded and the expected event is not found or +# the received event means the same recoverable error then an error is raised. +# Example: the response message of server is lost due to interference. +# Note: this default value is used unless a more specific configuration parameter +# overrides it. See _retry_max_default parameters in this file. +retry_max_default = 5 + +# The retry interval is measured between commands in seconds during retry when the +# expected event is not received or the received event means a recoverable error. +# Example: keep some time between message transmissions to wait for the +# response message of the remote node. +# Note: this default value is used unless a more specific configuration parameter +# overrides it. See _retry_interval_default parameters in this file. +retry_interval_default = 1.0 + +# The retry interval is measured between commands in seconds during retry when the +# expected event is not received or the received event means a recoverable error. +# This retry interval is used when the target node is a Low Power Node or the +# target element address belongs to a Low Power Node. +# Example: keep some time between message transmissions to wait for the response +# message of the remote Low Power Node. +# Note: this default value is used unless a more specific configuration parameter +# overrides it. See _retry_interval_lpn_default parameters in this file. +retry_interval_lpn_default = 5.0 + +# Maximum command retry count when a command fails due to recoverable error. +# If the max command retry count is exceeded and the command still fails with +# the same recoverable error then an error is raised. +# Example for recoverable error: lack of dynamic memory in BT Mesh stack. " +# Note: this default value is used unless a more specific configuration parameter +# overrides it. See _retry_cmd_max_default parameters in this file. +retry_cmd_max_default = 10 + +# The retry command interval is measured between commands in seconds during retry +# when the command fails due to recoverable error. +# Example: keep time between commands to wait to free dynamic memory. +# Note: this default value is used unless a more specific configuration parameter +# overrides it. See _retry_cmd_interval_default parameters in this file. +retry_cmd_interval_default = 0.5 + + +[conf] +# Default maximum number of additional Config Node Reset messages which are sent +# until the Config Node Reset Status message is received from the remote node. +# Note: it is possible that the Config Node Reset or Config Node Reset Status +# message is lost which makes additional retry necessary to make sure that +# the node receives the message. +reset_node_retry_max_default = 8 + +# Default interval in seconds between Config Node Reset messages when the Config +# Node Reset Status message is not received from the remote node. +# Warning! The Config Reset Node message is not idempotent completely because +# the remote node resets itself by removing network, device and application keys +# so it is no longer able to respond with Config Reset Node Status messages. +# Therefore, the remote node starts a timer with configurable timeout (default: 2s) +# when it receives Config Reset Node message so it is able to respond while +# the timer is running to additional messages. (see Factory Reset in SOC projects) +reset_node_retry_interval_default = 0.5 + +# Default interval in seconds between Config Node Reset messages when the Config +# Node Reset Status message is not received from the remote Low Power Node. +reset_node_retry_interval_lpn_default = 5 + +# If true then the node is removed from the NCP node (provisioner) device database +# and from the application database when the retry max is exceeded otherwise no +# operation is performed. +# Note: if true then it assumes that the remote node received Config Reset Node +# message and it responded with status message but it was lost due to +# interference and the node reset itself so it was not able to respond to +# additional messages and hence retry limit was exceeded. +reset_node_local_remove_on_retry_limit = true + +# Default maximum number of additional Config messages which are sent until the +# corresponding status message is not received from the Configuration Server. +# For example: Config Appkey Add, Config Model Publication Set, Config Model +# Subscription Add, Config Model App Bind, Config Composition Data Get, etc. +# Note: this default value is used for BT Mesh Configuration messages unless +# a more specific configuration parameter overrides it like the Config Reset +# Node message is affected by reset_node_retry_max_default. +conf_retry_max_default = 5 + +# Default interval in seconds between Config messages when the corresponding +# status message is not received from the Configuration Server. +# For example: Config Appkey Add, Config Model Publication Set, Config Model +# Subscription Add, Config Model App Bind, Config Composition Data Get, etc. +# Note: this default value is used for BT Mesh Configuration messages unless +# a more specific configuration parameter overrides it like the Config Reset +# Node message is affected by reset_node_retry_interval_default. +conf_retry_interval_default = 1.0 + +# Default interval in seconds between Config messages when the corresponding +# status message is not received from the Configuration Server model of a +# Low Power Node. +# For example: Config Appkey Add, Config Model Publication Set, Config Model +# Subscription Add, Config Model App Bind, Config Composition Data Get, etc. +# Note: this default value is used for BT Mesh Configuration messages unless +# a more specific configuration parameter overrides it like the Config Reset +# Node message is affected by reset_node_retry_interval_lpn_default. +conf_retry_interval_lpn_default = 30.0 + +# Default maximum number of additional Silabs Config Get or Set messages which +# are sent until the Silabs Config Status message is not received from the +# Silabs Config Server. +# Note: The configuration of BT Mesh over Advertisement Extension proprietary +# feature is performed through Silabs Config messages. (see conf ae command) +silabs_retry_max_default = 5 + +# Default interval in seconds between Silabs Config Get or Set messages when the +# Silabs Config Status message is not received from the Silabs Config Server. +# Note: The configuration of BT Mesh over Advertisement Extension proprietary +# feature is performed through Silabs Config messages. (see conf ae command) +silabs_retry_interval_default = 1.0 + +# Default interval in seconds between Silabs Config Get or Set messages when the +# Silabs Config Status message is not received from the Silabs Config Server +# model of a Low Power Node. +# Note: The configuration of BT Mesh over Advertisement Extension proprietary +# feature is performed through Silabs Config messages. (see conf ae command) +silabs_retry_interval_lpn_default = 5.0 + + +[dist_clt] +# Element index of the FW Distribution Client model on NCP node. +elem_index = 0 + +# Default appkey index used for sending FW Distribution messages. +appkey_index_default = 0 + +# Default TTL used for sending FW Distribution messages. +ttl_default = 5 + +# The default timeout base of FW upload to the Distributor including the upload +# start-status timeout and BLOB Transfer timeout. +# Client side timeout is (10000 * (timeout_base + 2)) + (100 * ttl) ms. +# Server side timeout is (10000 * (timeout_base + 1)) ms. +upload_timeout_base_default = 3 + +# Default preferred chunk size during BLOB transfer phase of FW upload procedure. +# The maximum chunk size is limited by the Max Chunk Size capabilities of +# participating BLOB Transfer Servers. +# The minimum chunk size is limited by the calculated block size and the Max +# Total chunk capabilities of participating BLOB Transfer Servers. +# The default chunk size calculation algorithm selects the preferred chunk size +# if it is in the range defined by min and max chunk size limits. Otherwise, +# the algorithm selects the nearest valid value which fills the BT Mesh messages. +# If Silabs BT Mesh over Advertisement Extensions proprietary feature is enabled +# then the network PDU size is selected as the chunk size unless the minimum +# chunk size is higher. +# The standard (non-AE) segmented chunks are able to transfer 12 bytes per +# advertisement minus 1 byte opcode and 2 bytes chunk number and 4 bytes of MIC. +# This means N advertisements are able to transfer 12 x N - 7 bytes of chunk data. +# The standard unsegmented chunk is able to transfer 8 bytes of chunk data. +upload_chunk_size_default = 53 + +# The default appkey index used for the communication between the Distributor +# and Updating Nodes. +dist_appkey_index_default = 0 + +# The default TTL for the Distributor to use when communicating with the +# Updating Nodes. +dist_ttl_default = 5 + +# The default timeout base used for FW distribution including FW update message +# procedures and BLOB transfer. +dist_timeout_base_default = 3 + +# Default poll interval for distribution progress reporting in seconds. +dist_poll_int_default = 5.0 + +# Default maximum number of additional Firmware Distribution messages which are +# sent until the corresponding status message is not received from the Firmware +# Distribution Server. +# For example: FW Distribution Upload Start, FW Distribution Receivers Add, +# FW Distribution Start message etc. +# Note: this default value is used unless a more specific configuration parameter +# overrides it. See delete_retry_max_default parameter in this file. +dist_retry_max_default = 5 + +# Default interval in seconds between Firmware Distribution messages when the +# corresponding status message is not received from the Firmware Distribution +# Server. +# For example: FW Distribution Upload Start, FW Distribution Receivers Add, +# FW Distribution Start messages etc. +# This default retry interval is used for BLOB Transfer during FW Upload +# procedure as the repetition rate of BLOB Transfer messages when the +# corresponding BLOB Transfer status message is not received from the BLOB +# Transfer Server on the Distributor. +# This default retry interval is used for Metadata Check Procedure at the +# beginning of Firmware Distribution procedure between Firmware Update Metadata +# Check messages sent to the updating nodes. +# Note: this default value is used unless a more specific configuration parameter +# overrides it. See delete_retry_interval_default parameter in this file. +dist_retry_interval_default = 1.0 + +# Default interval in seconds between Firmware Update Firmware Metadata Check +# messages when the corresponding status messages are not received from +# the Firmware Update Server model of each selected low power updating nodes. +# Note: This parameters affects the Firmware Metadata Check at the beginning +# of the Firmware Distribution procedure. +dist_retry_interval_lpn_default = 5.0 + +# Default maximum number of additional Firmware Distribution Firmware Delete or +# Delete All messages which are sent until the corresponding status message +# is not received from the Firmware Distribution Server. +# Note: the firmware delete procedure requires specific retry parameters because +# the FW delete operation might take from 5 to 25 seconds and it can be slow +# especially in case of external flash (SPI flash). +delete_retry_max_default = 6 + +# Default interval in seconds between Firmware Distribution Firmware Delete or +# Delete All messages when the corresponding status message is not received from +# the Firmware Distribution Server. +# Note: the firmware delete procedure requires specific retry parameters because +# the FW delete operation might take from 5 to 25 seconds and it can be slow +# especially in case of external flash (SPI flash). +delete_retry_interval_default = 5.0 + + +[dfu_clt] +# Element index of the Firmware Update Client model on NCP node. +elem_index = 0 + +# Default appkey index used for sending FW Update and BLOB Transfer messages +# during Standalone FW Update and FW Information Query procedures. +appkey_index_default = 0 + +# Default TTL used for sending FW Update and BLOB Transfer messages during +# Standalone FW Update and FW Information Query procedures. +ttl_default = 5 + +# The default timeout base of Standalone FW Update procedure including FW update +# procedures and BLOB transfer. +# Client side timeout is (10000 * (timeout_base + 2)) + (100 * ttl) ms. +# Server side timeout is (10000 * (timeout_base + 1)) ms. +timeout_base_default = 3 + +# Maximum number of updating nodes which can be updated simultaneously +max_updating_nodes = 8 + +# Default preferred chunk size during BLOB transfer phase of FW Update procedure. +# The maximum chunk size is limited by the Max Chunk Size capabilities of +# participating BLOB Transfer Servers. +# The minimum chunk size is limited by the calculated block size and the Max +# Total chunk capabilities of participating BLOB Transfer Servers. +# The default chunk size calculation algorithm selects the preferred chunk size +# if it is in the range defined by min and max chunk size limits. Otherwise, +# the algorithm selects the nearest valid value which fills the BT Mesh messages. +# If Silabs BT Mesh over Advertisement Extensions proprietary feature is enabled +# then the network PDU size is selected as the chunk size unless the minimum +# chunk size is higher. +# The standard (non-AE) segmented chunks are able to transfer 12 bytes per +# advertisement minus 1 byte opcode and 2 bytes chunk number and 4 bytes of MIC. +# This means N advertisements are able to transfer 12 x N - 7 bytes of chunk data. +# The standard unsegmented chunk is able to transfer 8 bytes of chunk data. +dfu_chunk_size_default = 53 + +# Default multicast threshold used during the BLOB transfer phase of FW update. +# If the number of uncompleted servers (missing status messages) during any BLOB +# transfer procedure step exceeds or is equal to this number then the group +# address is used. Otherwise, servers are looped through one by one. +# Value of 0 disables the feature. +# Note: Each BT Mesh message sent to a group address triggers the response of +# several nodes which send the corresponding status messages with random delay. +# As the number of nodes increases the probability of collisions increases as well. +# If the number of nodes with missing status messages is low then it is better +# to send multiple unicast messages instead of a single message to the group +# address because the collisions could lead to the loss of the status messages. +dfu_multicast_threshold_default = 1 + +# Default maximum number of additional Firmware Update messages which are sent +# until the corresponding Firmware Update messages are received from the Firmware +# Update Server model of each selected updating nodes. +# This configuration parameter is used during Firmware Information Query and +# Firmware Metadata Check procedures and it is not used during Standalone +# Firmware Update procedure. +# The default maximum number of retransmissions in each Standalone Firmware +# Update phase is determined by the timeout base and dfu_retry_interval_default. +dfu_retry_max_default = 5 + +# Default interval in seconds between Firmware Update and BLOB Transfer messages +# when the corresponding status messages are not received from the Firmware +# Update Server or BLOB Transfer Server model of each selected updating nodes. +# This parameter affects those BLOB Transfers which are initiated by the +# Standalone Firmware Update procedure. +dfu_retry_interval_default = 1.0 + +# Default interval in seconds between Firmware Update and BLOB Transfer messages +# when the corresponding status messages are not received from the Firmware +# Update Server or BLOB Transfer Server model of each selected low power +# updating nodes. +# This parameter affects those BLOB Transfers which are initiated by the +# Standalone Firmware Update procedure. +dfu_retry_interval_lpn_default = 5.0 + + +[mbt_clt] +# Element index of the BLOB Transfer Client model on NCP node. +elem_index = 0 + +# Maximum number of BLOB Transfer Servers participating in a BLOB transfer. +# Note: The BT Mesh stack allocates memory based on this configuration parameter +# when MBT Client model is initialized. +max_servers = 8 + +# Maximum number of blocks during a BLOB transfer. The MBT Client breaks the +# BLOB into suitably sized blocks during BLOB transfer. +# Note: The BT Mesh stack allocates memory based on this configuration parameter +# when MBT Client model is initialized. +max_blocks = 1850 + +# Max number of chunks in a block during a BLOB transfer. +# Each block is composed of identically sized chunks of data, except for the +# last chunk which may be smaller than the other chunks. +# Note: The BT Mesh stack allocates memory based on this configuration parameter +# when MBT Client model is initialized. +max_chunks_per_block = 128 + + +[network] +# Random netkey is created when a new BT Mesh network is created. +random_netkey = true + +# Network key used when a new BT Mesh network is created and random_netkey is +# set to false to use fix key. +netkey = EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE + +# Random appkey is created when a new BT Mesh network is created. +random_appkey = true + +# If random_appkey is set to true then this configuration option determines +# the number of generated random application keys. +random_appkey_cnt = 4 + +# Application key used when a new BT Mesh network is created and random_appkey +# is set to false to use fix key. +# Multiple appkeys can be specified by adding non-negative consecutive decimal +# integer postfix to the "appkey" words starting from 0 to maximum 31. +# If "appkey" exists then no postfixes are checked and only one appkey is created. +appkey0 = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + +# Name of the provisioner node in the BT Mesh database. +prov_node_name = Provisioner + + +[persistence] +# Path of json file which stores the persistent data of program. +path = btmesh_host_dfu_persistence.json + +# If true then default is used when persistent data load fails then otherwise +# the program is terminated. +default_on_failed_load = true + +# If true then a backup is created from the failed persistent data file before +# it is overwritten with the default values. +backup_on_failed_load = true + + +[reset] +# It is necessary to perform a system reset after the persistent data (e.g. keys) +# is removed from the NCP node. The NVM and key storage erase takes some time so +# the system reset shall be delayed in order to guarantee the proper execution +# of factory reset. +factory_reset_delay_s = 2.0 + + +[ui] +# Default text table width on the UI in characters. +# Some data is displayed on the ui in text table format. The optimal width of +# a table depends on the terminal and display size. If the table width is too +# high then the table might not fit on the screen or it might be wrapped into +# multiple lines. If the table width is too low then the content in the cells +# might be wrapped into multiple lines which makes readability worse. +table_width_default = 100 + +# The format determines if the version information part of FW identifier shall +# be converted into hex string or it shall be converted into a regular string +# by utf-8 decoding when it is shown on the UI. +# Valid values: str, hex +fwid_format = str + +# The format determines if the metadata shall be converted into hex string or +# it shall be converted into a regular string by utf-8 decoding when it is +# shown on the UI. +# Valid values: str, hex +metadata_format = str + +# The format determines how the node element is shown on the UI. +# The node element format can be any valid python format string which may use +# the following keyword parameters: +# - name: Node name as string +# - uuid: Node UUID as string (32 hex characters) +# - prim_addr: Node primary address as integer(element index 0) +# - elem_index: Element index on the node as integer +# - elem_addr: Address of node element as integer +# Examples: +# - {name}[{elem_index}] => Node_Light[1] +# - 0x{elem_addr:04X} => 0x200B +# - {name}[{elem_index}] ({elem_addr}) => Node_Light[1] (0x200B) +elem_format={name}[{elem_index}] +""" + +logger = logging.getLogger(__name__) + + +CFG_OPT_INTERNAL_SEP = "," + + +@dataclasses.dataclass +class BtmeshDfuAppMdlProfile: + name: str + pub_mdls: Set[ModelID] = dataclasses.field(default_factory=set) + sub_mdls: Set[ModelID] = dataclasses.field(default_factory=set) + bind_mdls: Set[ModelID] = dataclasses.field(default_factory=set) + help: str = "" + + @property + def mdls(self): + mdls_set = set() + mdls_set |= self.pub_mdls + mdls_set |= self.sub_mdls + mdls_set |= self.bind_mdls + return mdls_set + + +class BtmeshDfuAppGroupCfg: + def __init__(self, section: SectionProxy): + self.section = section + sect = section + # auto_bind_default + self._auto_bind_default = sect.getboolean("auto_bind_default") + # dcd_check_default + self._dcd_check_default = sect.getboolean("dcd_check_default") + # pub_ttl_default + self._pub_ttl_default = sect.getint("pub_ttl_default") + # pub_cred_default + self._pub_cred_default = sect.getint("pub_cred_default") + # pub_period_ms_default + self._pub_period_ms_default = sect.getint("pub_period_ms_default") + # pub_tx_cnt_default + self._pub_tx_cnt_default = sect.getint("pub_tx_cnt_default") + # pub_tx_int_ms_default + self._pub_tx_int_ms_default = sect.getint("pub_tx_int_ms_default") + # profile + self._mdl_profiles = self.process_mdl_profiles() + sectname = sect.name + logger.debug(f"{sectname}:auto_bind_default: {self.auto_bind_default}") + logger.debug(f"{sectname}:dcd_check_default: {self.dcd_check_default}") + logger.debug(f"{sectname}:pub_ttl_default: {self.pub_ttl_default}") + logger.debug(f"{sectname}:pub_cred_default: {self.pub_cred_default}") + logger.debug(f"{sectname}:pub_period_ms_default: {self.pub_period_ms_default}") + logger.debug(f"{sectname}:pub_tx_cnt_default: {self.pub_tx_cnt_default}") + logger.debug(f"{sectname}:pub_tx_int_ms_default: {self.pub_tx_int_ms_default}") + for mp in self.mdl_profiles: + pub_mdls = ", ".join(mdl.pretty_name() for mdl in mp.pub_mdls) + logger.debug(f"{sectname}:profile_{mp.name}:pub_mdls: {pub_mdls}") + sub_mdls = ", ".join(mdl.pretty_name() for mdl in mp.sub_mdls) + logger.debug(f"{sectname}:profile_{mp.name}:sub_mdls: {sub_mdls}") + bind_mdls = ", ".join(mdl.pretty_name() for mdl in mp.bind_mdls) + logger.debug(f"{sectname}:profile_{mp.name}:bind_mdls: {bind_mdls}") + logger.debug(f"{sectname}:profile_{mp.name}:help: {mp.help}") + + @property + def auto_bind_default(self) -> bool: + return self._auto_bind_default + + @property + def dcd_check_default(self) -> bool: + return self._dcd_check_default + + @property + def pub_ttl_default(self) -> int: + return self._pub_ttl_default + + @property + def pub_cred_default(self) -> int: + return self._pub_cred_default + + @property + def pub_period_ms_default(self) -> int: + return self._pub_period_ms_default + + @property + def pub_tx_cnt_default(self) -> int: + return self._pub_tx_cnt_default + + @property + def pub_tx_int_ms_default(self) -> int: + return self._pub_tx_int_ms_default + + @property + def mdl_profiles(self) -> Iterable[BtmeshDfuAppMdlProfile]: + return (mp for mp in self._mdl_profiles.values()) + + def process_mdl_profiles(self): + MDL_PROFILE_POSTFIXES = ( + "pub_mdls", + "sub_mdls", + "bind_mdls", + "auto_bind", + "help", + ) + MDL_PROFILE_POSTFIX_PATTERN = "|".join(MDL_PROFILE_POSTFIXES) + MDL_PROFILE_PATTERN = f"profile_(\\w+)_({MDL_PROFILE_POSTFIX_PATTERN})" + MDL_PROFILE_GENERIC_PATTERN = r"profile_\w+" + sect = self.section + mdl_profiles: Dict[str, BtmeshDfuAppMdlProfile] = {} + mdl_profiles_auto_bind: Dict[str, bool] = {} + for opt_name, opt_value in sect.items(): + match = re.fullmatch(MDL_PROFILE_PATTERN, opt_name) + if not match: + if re.fullmatch(MDL_PROFILE_GENERIC_PATTERN, opt_name): + valid_postfixes = ", ".join(MDL_PROFILE_POSTFIXES) + raise ValueError( + f'The "{sect.name}:{opt_name}" model profile option name ' + f"is invalid because no valid postfix is found " + f"(profile__). " + f"Valid postfixes: {valid_postfixes}." + ) + continue + name = match.group(1) + if name not in mdl_profiles: + mdl_profiles[name] = BtmeshDfuAppMdlProfile(name) + auto_bind_opt_name = f"profile_{name}_auto_bind" + # Process auto_bind as soon as the first profile__ + # option is found with the given because the auto_bind + # information is required to process pub_mdls and sub_mdls opts. + if auto_bind_opt_name in sect: + mdl_profiles_auto_bind[name] = sect[auto_bind_opt_name] + else: + mdl_profiles_auto_bind[name] = False + profile_attr = match.group(2) + if profile_attr == "pub_mdls": + self.add_mdls_from_opt( + mdl_profiles[name].pub_mdls, sect, opt_name, opt_value + ) + if mdl_profiles_auto_bind[name]: + self.add_mdls_from_opt( + mdl_profiles[name].bind_mdls, sect, opt_name, opt_value + ) + elif profile_attr == "sub_mdls": + self.add_mdls_from_opt( + mdl_profiles[name].sub_mdls, sect, opt_name, opt_value + ) + if mdl_profiles_auto_bind[name]: + self.add_mdls_from_opt( + mdl_profiles[name].bind_mdls, sect, opt_name, opt_value + ) + elif profile_attr == "bind_mdls": + self.add_mdls_from_opt( + mdl_profiles[name].bind_mdls, sect, opt_name, opt_value + ) + elif profile_attr == "auto_bind": + # The profile__auto_bind is not processed in sequence + # because it requires early processing to have it available + # when pub_mdls and sub_mdls are processed. + continue + elif profile_attr == "help": + mdl_profiles[name].help = btmesh.util.join_text_lines(opt_value) + else: + # This should not happen if the regex is consistent with + # the if-else structure of the code. + raise ValueError( + f'The "{sect.name}:{opt_name}" model profile option name ' + f'is invalid because the "{profile_attr}" postfix ' + f"is unknown." + ) + return mdl_profiles + + def add_mdls_from_opt( + self, dest_set: Set[ModelID], sect: SectionProxy, opt_name: str, opt_value: str + ): + text = btmesh.util.join_text_lines(opt_value) + if not text: + return + raw_mdls = (raw_mdl.strip() for raw_mdl in text.split(CFG_OPT_INTERNAL_SEP)) + for raw_mdl in raw_mdls: + if re.fullmatch(btmesh.util.INTEGER_PATTERN, raw_mdl): + mdl_id = int(raw_mdl, 0) + mdl = ModelID(model_id=mdl_id) + dest_set.add(mdl) + elif re.fullmatch(btmesh.util.INTEGER_PAIR_PATTERN, raw_mdl): + match = re.fullmatch(btmesh.util.INTEGER_PAIR_PATTERN, raw_mdl) + vendor_id = int(match.group(1), 0) + mdl_id = int(match.group(2), 0) + mdl = ModelID(model_id=mdl_id, vendor_id=vendor_id) + dest_set.add(mdl) + elif NamedModelID.is_name_valid(raw_mdl): + mdl_id = NamedModelID.get_id_by_name(raw_mdl) + mdl = ModelID(model_id=mdl_id) + dest_set.add(mdl) + else: + raise ValueError( + f"Invalid model identifier ({raw_mdl}) found in " + f"{sect.name}:{opt_name} configuration option." + ) + + +class BtmeshDfuCommonCfg: + def __init__(self, section: SectionProxy): + self.section = section + sect = section + # retry_max_default + self._retry_max_default = sect.getint("retry_max_default") + # retry_interval_default + self._retry_interval_default = sect.getfloat("retry_interval_default") + # retry_interval_lpn_default + self._retry_interval_lpn_default = sect.getfloat("retry_interval_lpn_default") + # retry_cmd_max_default + self._retry_cmd_max_default = sect.getint("retry_cmd_max_default") + # retry_cmd_interval_default + self._retry_cmd_interval_default = sect.getfloat("retry_cmd_interval_default") + # Log common configuration + sectname = sect.name + logger.debug(f"{sectname}:retry_max_default: " f"{self.retry_max_default}") + logger.debug( + f"{sectname}:retry_interval_default: " f"{self.retry_interval_default}" + ) + logger.debug( + f"{sectname}:retry_interval_lpn_default: " + f"{self.retry_interval_lpn_default}" + ) + logger.debug( + f"{sectname}:retry_cmd_max_default: " f"{self.retry_cmd_max_default}" + ) + logger.debug( + f"{sectname}:retry_cmd_interval_default: " + f"{self.retry_cmd_interval_default}" + ) + + @property + def retry_max_default(self): + return self._retry_max_default + + @property + def retry_interval_default(self): + return self._retry_interval_default + + @property + def retry_interval_lpn_default(self): + return self._retry_interval_lpn_default + + @property + def retry_cmd_max_default(self): + return self._retry_cmd_max_default + + @property + def retry_cmd_interval_default(self): + return self._retry_cmd_interval_default + + @property + def retry_params_default(self): + return self.btmesh_retry_params_default.to_base() + + @property + def btmesh_retry_params_default(self): + return BtmeshRetryParams( + retry_max=self.retry_max_default, + retry_interval=self.retry_interval_default, + retry_interval_lpn=self.retry_interval_lpn_default, + retry_cmd_max=self.retry_cmd_max_default, + retry_cmd_interval=self.retry_cmd_interval_default, + ) + + +class BtmeshDfuAppConfCfg: + def __init__(self, section: SectionProxy): + self.section = section + sect = section + # reset_node_retry_max_default + self._reset_node_retry_max_default = sect.getint("reset_node_retry_max_default") + # reset_node_retry_interval_default + self._reset_node_retry_interval_default = sect.getfloat( + "reset_node_retry_interval_default" + ) + # reset_node_retry_interval_lpn_default + self._reset_node_retry_interval_lpn_default = sect.getfloat( + "reset_node_retry_interval_lpn_default" + ) + # reset_node_local_remove_on_retry_limit + self._reset_node_local_remove_on_retry_limit = sect.getboolean( + "reset_node_local_remove_on_retry_limit" + ) + # conf_retry_max_default + self._conf_retry_max_default = sect.getint("conf_retry_max_default") + # conf_retry_interval_default + self._conf_retry_interval_default = sect.getfloat("conf_retry_interval_default") + # conf_retry_interval_lpn_default + self._conf_retry_interval_lpn_default = sect.getfloat( + "conf_retry_interval_lpn_default" + ) + # silabs_retry_max_default + self._silabs_retry_max_default = sect.getint("silabs_retry_max_default") + # silabs_retry_interval_default + self._silabs_retry_interval_default = sect.getfloat( + "silabs_retry_interval_default" + ) + # silabs_retry_interval_lpn_default + self._silabs_retry_interval_lpn_default = sect.getfloat( + "silabs_retry_interval_lpn_default" + ) + # Log conf configuration + sectname = sect.name + logger.debug( + f"{sectname}:reset_node_retry_max_default: " + f"{self.reset_node_retry_max_default}" + ) + logger.debug( + f"{sectname}:reset_node_retry_interval_default: " + f"{self.reset_node_retry_interval_default}" + ) + logger.debug( + f"{sectname}:reset_node_retry_interval_lpn_default: " + f"{self.reset_node_retry_interval_lpn_default}" + ) + logger.debug( + f"{sectname}:reset_node_local_remove_on_retry_limit: " + f"{self.reset_node_local_remove_on_retry_limit}" + ) + logger.debug( + f"{sectname}:conf_retry_max_default: " f"{self.conf_retry_max_default}" + ) + logger.debug( + f"{sectname}:conf_retry_interval_default: " + f"{self.conf_retry_interval_default}" + ) + logger.debug( + f"{sectname}:conf_retry_interval_lpn_default: " + f"{self.conf_retry_interval_lpn_default}" + ) + logger.debug( + f"{sectname}:silabs_retry_max_default: " f"{self.silabs_retry_max_default}" + ) + logger.debug( + f"{sectname}:silabs_retry_interval_default: " + f"{self.silabs_retry_interval_default}" + ) + logger.debug( + f"{sectname}:silabs_retry_interval_lpn_default: " + f"{self.silabs_retry_interval_lpn_default}" + ) + + @property + def reset_node_retry_max_default(self): + return self._reset_node_retry_max_default + + @property + def reset_node_retry_interval_default(self): + return self._reset_node_retry_interval_default + + @property + def reset_node_retry_interval_lpn_default(self): + return self._reset_node_retry_interval_lpn_default + + @property + def reset_node_local_remove_on_retry_limit(self): + return self._reset_node_local_remove_on_retry_limit + + @property + def conf_retry_max_default(self): + return self._conf_retry_max_default + + @property + def conf_retry_interval_default(self): + return self._conf_retry_interval_default + + @property + def conf_retry_interval_lpn_default(self): + return self._conf_retry_interval_lpn_default + + @property + def silabs_retry_max_default(self): + return self._silabs_retry_max_default + + @property + def silabs_retry_interval_default(self): + return self._silabs_retry_interval_default + + @property + def silabs_retry_interval_lpn_default(self): + return self._silabs_retry_interval_lpn_default + + +class BtmeshDfuAppFwDistClientCfg: + def __init__(self, section: SectionProxy): + self.section = section + sect = section + # elem_index + self._elem_index = sect.getint("elem_index") + # appkey_index_default + self._appkey_index_default = sect.getint("appkey_index_default") + # ttl_default + self._ttl_default = sect.getint("ttl_default") + # upload_timeout_base_default + self._upload_timeout_base_default = sect.getint("upload_timeout_base_default") + # upload_chunk_size_default + self._upload_chunk_size_default = sect.getint("upload_chunk_size_default") + # dist_appkey_index_default + self._dist_appkey_index_default = sect.getint("dist_appkey_index_default") + # dist_ttl_default + self._dist_ttl_default = sect.getint("dist_ttl_default") + # dist_timeout_base_default + self._dist_timeout_base_default = sect.getint("dist_timeout_base_default") + # dist_poll_int_default + self._dist_poll_int_default = sect.getfloat("dist_poll_int_default") + # dist_retry_max_default + self._dist_retry_max_default = sect.getint("dist_retry_max_default") + # dist_retry_interval_default + self._dist_retry_interval_default = sect.getfloat("dist_retry_interval_default") + # dist_retry_interval_lpn_default + self._dist_retry_interval_lpn_default = sect.getfloat( + "dist_retry_interval_lpn_default" + ) + # delete_retry_max_default + self._delete_retry_max_default = sect.getint("delete_retry_max_default") + # delete_retry_interval_default + self._delete_retry_interval_default = sect.getfloat( + "delete_retry_interval_default" + ) + + # Log dist_clt configuration + sectname = sect.name + logger.debug(f"{sectname}:elem_index: {self.elem_index}") + logger.debug(f"{sectname}:appkey_index_default: {self.appkey_index_default}") + logger.debug(f"{sectname}:ttl_default: {self.ttl_default}") + logger.debug( + f"{sectname}:upload_timeout_base_default: {self.upload_timeout_base_default}" + ) + logger.debug( + f"{sectname}:upload_chunk_size_default: {self.upload_chunk_size_default}" + ) + logger.debug( + f"{sectname}:dist_appkey_index_default: {self.dist_appkey_index_default}" + ) + logger.debug(f"{sectname}:dist_ttl_default: {self.dist_ttl_default}") + logger.debug( + f"{sectname}:dist_timeout_base_default: {self.dist_timeout_base_default}" + ) + logger.debug(f"{sectname}:dist_poll_int_default: {self.dist_poll_int_default}") + logger.debug( + f"{sectname}:dist_retry_max_default: " f"{self.dist_retry_max_default}" + ) + logger.debug( + f"{sectname}:dist_retry_interval_default: " + f"{self.dist_retry_interval_default}" + ) + logger.debug( + f"{sectname}:dist_retry_interval_lpn_default: " + f"{self.dist_retry_interval_lpn_default}" + ) + logger.debug( + f"{sectname}:delete_retry_max_default: " f"{self.delete_retry_max_default}" + ) + logger.debug( + f"{sectname}:delete_retry_interval_default: " + f"{self.delete_retry_interval_default}" + ) + + @property + def elem_index(self): + return self._elem_index + + @property + def appkey_index_default(self): + return self._appkey_index_default + + @property + def ttl_default(self): + return self._ttl_default + + @property + def upload_timeout_base_default(self): + return self._upload_timeout_base_default + + @property + def upload_chunk_size_default(self): + return self._upload_chunk_size_default + + @property + def dist_appkey_index_default(self): + return self._dist_appkey_index_default + + @property + def dist_ttl_default(self): + return self._dist_ttl_default + + @property + def dist_timeout_base_default(self): + return self._dist_timeout_base_default + + @property + def dist_poll_int_default(self): + return self._dist_poll_int_default + + @property + def dist_retry_max_default(self): + return self._dist_retry_max_default + + @property + def dist_retry_interval_default(self): + return self._dist_retry_interval_default + + @property + def dist_retry_interval_lpn_default(self): + return self._dist_retry_interval_lpn_default + + @property + def delete_retry_max_default(self): + return self._delete_retry_max_default + + @property + def delete_retry_interval_default(self): + return self._delete_retry_interval_default + + +class BtmeshDfuAppFwUpdateClientCfg: + def __init__(self, section: SectionProxy): + self.section = section + sect = section + # elem_index + self._elem_index = sect.getint("elem_index") + # appkey_index_default + self._appkey_index_default = sect.getint("appkey_index_default") + # ttl_default + self._ttl_default = sect.getint("ttl_default") + # timeout_base_default + self._timeout_base_default = sect.getint("timeout_base_default") + # max_updating_nodes + self._max_updating_nodes = sect.getint("max_updating_nodes") + # dfu_chunk_size_default + self._dfu_chunk_size_default = sect.getint("dfu_chunk_size_default") + # dfu_multicast_threshold_default + self._dfu_multicast_threshold_default = sect.getint( + "dfu_multicast_threshold_default" + ) + # dfu_retry_max_default + self._dfu_retry_max_default = sect.getint("dfu_retry_max_default") + # dfu_retry_interval_default + self._dfu_retry_interval_default = sect.getfloat("dfu_retry_interval_default") + # dfu_retry_interval_lpn_default + self._dfu_retry_interval_lpn_default = sect.getfloat( + "dfu_retry_interval_lpn_default" + ) + + # Log dfu_clt configuration + sectname = sect.name + logger.debug(f"{sectname}:elem_index: {self.elem_index}") + logger.debug(f"{sectname}:appkey_index_default: {self.appkey_index_default}") + logger.debug(f"{sectname}:ttl_default: {self.ttl_default}") + logger.debug(f"{sectname}:timeout_base_default: {self.timeout_base_default}") + logger.debug(f"{sectname}:max_updating_nodes: {self.max_updating_nodes}") + logger.debug( + f"{sectname}:dfu_chunk_size_default: {self.dfu_chunk_size_default}" + ) + logger.debug( + f"{sectname}:dfu_multicast_threshold_default: {self.dfu_multicast_threshold_default}" + ) + logger.debug(f"{sectname}:dfu_retry_max_default: {self.dfu_retry_max_default}") + logger.debug( + f"{sectname}:dfu_retry_interval_default: " + f"{self.dfu_retry_interval_default}" + ) + logger.debug( + f"{sectname}:dfu_retry_interval_lpn_default: " + f"{self.dfu_retry_interval_lpn_default}" + ) + + @property + def elem_index(self): + return self._elem_index + + @property + def appkey_index_default(self): + return self._appkey_index_default + + @property + def ttl_default(self): + return self._ttl_default + + @property + def timeout_base_default(self): + return self._timeout_base_default + + @property + def max_updating_nodes(self): + return self._max_updating_nodes + + @property + def dfu_chunk_size_default(self): + return self._dfu_chunk_size_default + + @property + def dfu_multicast_threshold_default(self): + return self._dfu_multicast_threshold_default + + @property + def dfu_retry_max_default(self): + return self._dfu_retry_max_default + + @property + def dfu_retry_interval_default(self): + return self._dfu_retry_interval_default + + @property + def dfu_retry_interval_lpn_default(self): + return self._dfu_retry_interval_lpn_default + + +class BtmeshDfuAppBlobTransferClientCfg: + def __init__(self, section: SectionProxy): + self.section = section + sect = section + # elem_index + self._elem_index = sect.getint("elem_index") + # max_servers + self._max_servers = sect.getint("max_servers") + # max_blocks + self._max_blocks = sect.getint("max_blocks") + # max_chunks_per_block + self._max_chunks_per_block = sect.getint("max_chunks_per_block") + # Log mbt_clt configuration + sectname = sect.name + logger.debug(f"{sectname}:elem_index: {self.elem_index}") + logger.debug(f"{sectname}:max_servers: {self.max_servers}") + logger.debug(f"{sectname}:max_blocks: {self.max_blocks}") + logger.debug(f"{sectname}:max_chunks_per_block: {self.max_chunks_per_block}") + + @property + def elem_index(self): + return self._elem_index + + @property + def max_servers(self): + return self._max_servers + + @property + def max_blocks(self): + return self._max_blocks + + @property + def max_chunks_per_block(self): + return self._max_chunks_per_block + + +class BtmeshDfuAppNetworkCfg: + MAX_APPKEY_COUNT = 32 + + def __init__(self, section: SectionProxy): + self.section = section + sect = section + # random_netkey + self._random_netkey = sect.getboolean("random_netkey") + # netkey + nkey = bytes.fromhex(sect["netkey"]) + if (not self.random_netkey) and (len(nkey) != 16): + raise ValueError("Invalid netkey config value size.") + self._netkey = nkey + # random_appkey + self._random_appkey = sect.getboolean("random_appkey") + # appkeys + raw_akeys = [] + if "appkey" in sect: + raw_akeys.append(sect["appkey"]) + else: + for idx in range(self.MAX_APPKEY_COUNT): + appkey_name = f"appkey{idx}" + if appkey_name in sect: + raw_akeys.append(sect[appkey_name]) + else: + break + self._appkeys = [] + for raw_akey in raw_akeys: + akey = bytes.fromhex(raw_akey) + if (not self.random_appkey) and (len(akey) != 16): + raise ValueError("Invalid appkey config value size.") + self._appkeys.append(akey) + if not self.random_appkey and not len(self.appkeys): + raise ValueError("At least one appkey shall be configured.") + # appkey_cnt + if self.random_appkey: + self._appkey_cnt = sect.getint("random_appkey_cnt") + if self.appkey_cnt < 1: + raise ValueError( + f"The random_appkey_cnt shall be positive integer " + f"but it is {self.appkey_cnt}." + ) + else: + self._appkey_cnt = len(self.appkeys) + # prov_node_name + self._prov_node_name = sect.get("prov_node_name") + btmesh.util.validate_name(self.prov_node_name) + # Log network configuration + sectname = sect.name + logger.debug(f"{sectname}:random_netkey: {self.random_netkey}") + logger.debug(f"{sectname}:netkey: {self.netkey.hex().upper()}") + logger.debug(f"{sectname}:random_appkey: {self.random_appkey}") + for idx, appkey in enumerate(self.appkeys): + logger.debug(f"{sectname}:appkey{idx}: {appkey.hex().upper()}") + logger.debug(f"{sectname}:appkey_cnt: {self.appkey_cnt}") + logger.debug(f"{sectname}:prov_node_name: {self.prov_node_name}") + + @property + def random_netkey(self): + return self._random_netkey + + @property + def netkey(self): + return self._netkey + + @property + def random_appkey(self): + return self._random_appkey + + @property + def appkey_cnt(self): + return self._appkey_cnt + + @property + def appkeys(self): + return self._appkeys + + @property + def prov_node_name(self): + return self._prov_node_name + + +class BtmeshDfuAppPersistenceCfg: + def __init__(self, section: SectionProxy): + self.section = section + sect = section + # path + self._path = Path(sect["path"]) + # default_on_failed_load + self._default_on_failed_load = sect.getboolean("default_on_failed_load") + # backup_on_failed_load + self._backup_on_failed_load = sect.getboolean("backup_on_failed_load") + # Log persistence configuration + sectname = sect.name + logger.debug(f"{sectname}:path: {self.path}") + logger.debug( + f"{sectname}:default_on_failed_load: {self.default_on_failed_load}" + ) + logger.debug(f"{sectname}:backup_on_failed_load: {self.backup_on_failed_load}") + + @property + def path(self): + return self._path + + @property + def default_on_failed_load(self): + return self._default_on_failed_load + + @property + def backup_on_failed_load(self): + return self._backup_on_failed_load + + +class BtmeshDfuAppResetCfg: + def __init__(self, section: SectionProxy): + self.section = section + sect = section + # factory_reset_delay_s + self._factory_reset_delay_s = sect.getfloat("factory_reset_delay_s") + # Log reset configuration + sectname = self.section.name + logger.debug(f"{sectname}:factory_reset_delay_s: {self.factory_reset_delay_s}") + + @property + def factory_reset_delay_s(self): + return self._factory_reset_delay_s + + +class BtmeshDfuAppUICfg: + VALID_FORMATS = ("str", "hex") + + def __init__(self, section: SectionProxy): + self.section = section + sect = section + # table_width_default + self._table_width_default = sect.getint("table_width_default") + # fwid_format + self._fwid_format = sect["fwid_format"] + if self.fwid_format not in self.VALID_FORMATS: + opt_name = "fwid_format" + valid_formats = ",".join(self.VALID_FORMATS) + raise ValueError( + f"Invalid {sect.name}:{opt_name} configuration option. " + f"Valid formats are: {valid_formats}." + ) + # metadata_format + self._metadata_format = sect["metadata_format"] + if self.metadata_format not in self.VALID_FORMATS: + opt_name = "metadata_format" + valid_formats = ",".join(self.VALID_FORMATS) + raise ValueError( + f"Invalid {sect.name}:{opt_name} configuration option. " + f"Valid formats are: {valid_formats}." + ) + # elem_format + opt_name = "elem_format" + elem_format = sect[opt_name] + self.validate_elem_format(sect, opt_name, elem_format) + self._elem_format = elem_format + + # Log reset configuration + sectname = self.section.name + logger.debug(f"{sectname}:table_width_default: {self.table_width_default}") + logger.debug(f"{sectname}:fwid_format: {self.fwid_format}") + logger.debug(f"{sectname}:metadata_format: {self.metadata_format}") + logger.debug(f"{sectname}:elem_format: {self.elem_format}") + + def validate_elem_format(self, sect: SectionProxy, opt_name: str, elem_format: str): + # Test the format string with dummy data to make sure that valid + # elem_format string was provided. + try: + elem_format.format( + name="NodeName", + uuid=bytes.fromhex("0123456789ABCDEFFEDCBA9876543210"), + prim_addr=0x2000, + elem_index=0, + elem_addr=0x2003, + ) + except Exception as e: + raise ValueError( + f"Invalid {sect.name}:{opt_name} configuration option. " + f"The format string is invalid." + ) from e + + @property + def table_width_default(self) -> int: + return self._table_width_default + + @property + def fwid_format(self) -> str: + return self._fwid_format + + @property + def metadata_format(self) -> str: + return self._metadata_format + + @property + def elem_format(self) -> str: + return self._elem_format + + +class BtmeshDfuAppCfg: + @staticmethod + def bool2str(b): + return str(bool(b)).lower() + + @staticmethod + def save_default_cfg_file(file): + file.write(DEFAULT_APP_CFG_INI) + + def _create_cfg_sections(self): + self.appgroup = BtmeshDfuAppGroupCfg(self.cp["appgroup"]) + self.common = BtmeshDfuCommonCfg(self.cp["common"]) + self.conf = BtmeshDfuAppConfCfg(self.cp["conf"]) + self.dist_clt = BtmeshDfuAppFwDistClientCfg(self.cp["dist_clt"]) + self.dfu_clt = BtmeshDfuAppFwUpdateClientCfg(self.cp["dfu_clt"]) + self.mbt_clt = BtmeshDfuAppBlobTransferClientCfg(self.cp["mbt_clt"]) + self.network = BtmeshDfuAppNetworkCfg(self.cp["network"]) + self.persistence = BtmeshDfuAppPersistenceCfg(self.cp["persistence"]) + self.reset = BtmeshDfuAppResetCfg(self.cp["reset"]) + self.ui = BtmeshDfuAppUICfg(self.cp["ui"]) + + def load_cfg(self, file): + logger.info("BT Mesh Host DFU configuration is loading...") + self.cp.read_file(file) + self._create_cfg_sections() + + def __init__(self): + self.cp = ConfigParser(interpolation=ExtendedInterpolation()) + default_ini = io.StringIO(DEFAULT_APP_CFG_INI) + self.cp.read_file(default_ini) + self._create_cfg_sections() + + +app_cfg = BtmeshDfuAppCfg() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cli.py b/app/btmesh/example_host/btmesh_host_dfu/app/cli.py new file mode 100644 index 00000000000..ab66c28a7be --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/cli.py @@ -0,0 +1,213 @@ +# 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. + +import configparser +import logging +import sys +from pathlib import Path + +import bgapi + +from bgapix.bglibx import BGLibExt + +from .cfg import app_cfg +from .exec import app_exec +from .ui import app_ui +from .util.argparsex import (ArgumentErrorExt, ArgumentHelpException, + ArgumentParserExt) + +BTMESH_HOST_DFU_FOLDER = Path(__file__).parent.parent.resolve() +LOG_FORMAT = "%(asctime)s.%(msecs)03d-%(levelname)s-%(name)s: %(message)s" + + +logger = logging.getLogger("app") + + +class BtmeshDfuCli: + DEFAULT_CFG_FILE_NAME = Path("btmesh_host_dfu_cfg.ini") + + def __init__(self): + self.default_cfg_file_path = BTMESH_HOST_DFU_FOLDER / self.DEFAULT_CFG_FILE_NAME + self.startup_parser = self.build_startup_parser() + # Setup logging and load the configuration file before other parsers + # are built because those use app_cfg for default argument values. + # The startup_parser does not add help command and therefore it is not + # necessary to handle ArgumentHelpException. + try: + pargs = self.startup_parser.parse_known_args()[0] + except ArgumentErrorExt as e: + message_warn = ( + "The application is terminated due to failure of first phase " + "(startup) argument parsing. Only the startup phase arguments " + "are shown in the error message because further arguments depend " + "on the configuration which is not loaded at this point." + ) + message = f"{e.message}\n{message_warn}" + self.startup_parser.error(message, force_exit=True) + logging.basicConfig( + filename="btmesh_host_dfu.log", + level=pargs.log, + format=LOG_FORMAT, + datefmt="%Y-%m-%d %H:%M:%S", + ) + logger.info(f"{app_exec.APP_NAME} application is started.") + self.load_cfg(pargs.cfg) + self.cmd_parser = app_exec.build_cmd_parser() + self.cli_parser = self.build_cli_parser([self.startup_parser, self.cmd_parser]) + + def build_startup_parser(self, parents=[]) -> ArgumentParserExt: + startup_parser = ArgumentParserExt( + parents=parents, add_help=False, exit_on_error_ext=False + ) + startup_parser.add_argument( + "--log", + type=str.upper, + choices=logging._nameToLevel.keys(), + help="Log level", + default=logging.INFO, + ) + startup_parser.add_argument( + "--cfg", + type=Path, + help="Path of configuration file. (default: %(default)s) " + "Note: if the configuration file exists then it loads that otherwise " + "it creates a new file with the default values.", + default=str(self.default_cfg_file_path), + ) + return startup_parser + + def build_cli_parser(self, parents=[]) -> ArgumentParserExt: + cli_parser = ArgumentParserExt( + parents=parents, add_help=False, exit_on_error_ext=False + ) + cli_parser.add_argument( + "-i", + "--interactive", + help="Starts an interactive session which processes user commands", + action="store_true", + default=False, + ) + cli_parser.add_argument( + "--system-reset", + help="System reset is initiated after the connection is opened.", + action="store_true", + default=False, + ) + cli_parser.add_argument( + "--factory-reset", + help="Factory reset performs btmesh node reset and bt nvm erase in " + "order to remove mesh keys and other persistent data from NCP node. " + "The local BT Mesh Host DFU persistent data is deleted as well. " + "System reset is executed after the persistent data is deleted.", + action="store_true", + default=False, + ) + # Connection shall be specified by USB or IP information. + # These are mutually exclusive but it is mandatory to provide one. + conn_group = cli_parser.add_mutually_exclusive_group(required=True) + conn_group.add_argument( + "--ip", + help="IP address and port of the device to connect (format ip:port)", + default=None, + ) + conn_group.add_argument( + "--usb", + help="USB device file or COM port of the device to connect", + default=None, + ) + cli_parser.add_argument( + "--xapi", + dest="api_xmls", + help="XML file paths for the API references, from the used SDKs", + action="append", + ) + return cli_parser + + def load_cfg(self, cfg_path: Path): + try: + if cfg_path.exists() and cfg_path.is_file(): + with cfg_path.open() as cfg_file: + app_cfg.load_cfg(cfg_file) + else: + if cfg_path == self.default_cfg_file_path: + with cfg_path.open("w") as cfg_file: + app_cfg.save_default_cfg_file(cfg_file) + with cfg_path.open() as cfg_file: + app_cfg.load_cfg(cfg_file) + else: + self.cli_parser.error( + f"Cfg file ({cfg_path}) does not exist.", force_exit=True + ) + except configparser.Error as e: + app_ui.error(f"Configuration parse error in {cfg_path}.") + app_ui.error(e.message) + sys.exit(-1) + except ValueError as e: + app_ui.error(f"Configuration conversion error in {cfg_path}.") + app_ui.error(str(e)) + sys.exit(-1) + + def main(self): + # Process command line arguments when called without parameters + try: + args = self.cli_parser.parse_args() + except ArgumentHelpException as e: + app_ui.info(e.message) + sys.exit(0) + except ArgumentErrorExt as e: + self.cli_parser.error(e.message, force_exit=True) + self.usb = args.usb + if args.ip: + ip_arg_split = args.ip.split(":") + if len(ip_arg_split) != 2: + self.cli_parser.error("Invalid IP argument format (IP:Port)") + self.ip = ip_arg_split[0] + self.port = ip_arg_split[1] + else: + self.ip = None + + if self.usb: + connector = bgapi.SerialConnector(self.usb) + elif self.ip and self.port: + connector = bgapi.SocketConnector(self.ip, self.port) + else: + self.cli_parser.error("USB or IP connection data missing.", force_exit=True) + app_exec.lib = BGLibExt(connector, args.api_xmls, response_timeout=5) + app_exec.interactive = args.interactive + app_exec.open(args.system_reset, args.factory_reset) + command = args.command + try: + if command: + idx = sys.argv.index(command) + # The command shall be set to None before the onecmd call + # otherwise it leads to infinite loop when exception occurs + # in onecmd method + command = None + app_exec.onecmd(args.command + " " + " ".join(sys.argv[idx + 1 :])) + if app_exec.interactive: + app_exec.cmdloop() + finally: + # Close the connection under any circumstances + app_exec.close() + + +app_cli = BtmeshDfuCli() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cmd/__init__.py b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cmd/cmd.py b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/cmd.py new file mode 100644 index 00000000000..df4847ad81d --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/cmd.py @@ -0,0 +1,702 @@ +# 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. + +import abc +import copy +import functools +from typing import Callable, Dict, List, Optional, Sequence, Tuple + +import btmesh.util +from bgapix.bglibx import BGLibExtRetryParams +from btmesh.db import FWID, ModelID, Node +from btmesh.util import BtmeshRetryParams + +from ..db import BtmeshDfuAppGroup, app_db +from ..ui import AppUIColumnInfo, BtmeshDfuAppParseSpecError, app_ui +from ..util.argparsex import ArgumentParserExt + + +def spec_parse_error_handler(func): + @functools.wraps(func) + def wrapper_spec_parse_error_handler(self, *args, **kwargs): + try: + return func(self, *args, **kwargs) + except BtmeshDfuAppParseSpecError as e: + self.current_parser.error(str(e)) + + return wrapper_spec_parse_error_handler + + +class BtmeshCmd(abc.ABC): + GROUP_ADDR_OPT_LONG = "--group-addr" + GROUP_ADDR_OPT_SHORT = "-g" + GROUP_ADDR_OPTS = f"{GROUP_ADDR_OPT_LONG}/{GROUP_ADDR_OPT_SHORT}" + GROUP_OPT_LONG = "--group" + GROUP_OPT_SHORT = "-G" + GROUP_OPTS = f"{GROUP_OPT_LONG}/{GROUP_OPT_SHORT}" + NODES_OPT_LONG = "--nodes" + NODES_OPT_SHORT = "-n" + NODES_OPTS = f"{NODES_OPT_LONG}/{NODES_OPT_SHORT}" + ELEM_OPT_LONG = "--elem" + ELEM_OPT_SHORT = "-e" + ELEM_OPTS = f"{ELEM_OPT_LONG}/{ELEM_OPT_SHORT}" + ELEM_ADDRS_OPT_LONG = "--addrs" + ELEM_ADDRS_OPT_SHORT = "" + ELEM_ADDRS_OPTS = f"{ELEM_ADDRS_OPT_LONG}" + + RETRY_MAX_OPT_LONG = "--retry-max" + RETRY_MAX_OPTS = f"{RETRY_MAX_OPT_LONG}" + RETRY_MAX_ATTR_NAME = RETRY_MAX_OPT_LONG[2:].replace("-", "_") + + RETRY_INT_OPT_LONG = "--retry-interval" + RETRY_INT_OPTS = f"{RETRY_INT_OPT_LONG}" + RETRY_INT_ATTR_NAME = RETRY_INT_OPT_LONG[2:].replace("-", "_") + + RETRY_INT_LPN_OPT_LONG = "--retry-interval-lpn" + RETRY_INT_LPN_OPTS = f"{RETRY_INT_LPN_OPT_LONG}" + RETRY_INT_LPN_ATTR_NAME = RETRY_INT_LPN_OPT_LONG[2:].replace("-", "_") + + RETRY_CMD_MAX_OPT_LONG = "--retry-cmd-max" + RETRY_CMD_MAX_OPTS = f"{RETRY_CMD_MAX_OPT_LONG}" + RETRY_CMD_MAX_ATTR_NAME = RETRY_CMD_MAX_OPT_LONG[2:].replace("-", "_") + + RETRY_CMD_INT_OPT_LONG = "--retry-cmd-interval" + RETRY_CMD_INT_OPTS = f"{RETRY_CMD_INT_OPT_LONG}" + RETRY_CMD_INT_ATTR_NAME = RETRY_CMD_INT_OPT_LONG[2:].replace("-", "_") + + RETRY_MAX_HELP_DEFAULT = ( + "Maximum command retry count when the expected event is not received " + "or the received event means a recoverable error. " + "If the maximum retry count is exceeded and the expected event is not " + "found or the received event means the same recoverable error then " + "an error is raised. " + "Example: the response message of server is lost due to interference. " + ) + + RETRY_INTERVAL_HELP_DEFAULT = ( + "The retry interval is measured between commands in seconds during " + "retry when the expected event is not received or the received event " + "means a recoverable error. " + "Example: keep some time between message transmissions to wait for " + "the response message of the remote node. " + ) + + RETRY_INTERVAL_LPN_HELP_DEFAULT = ( + "The retry interval is measured between commands in seconds during " + "retry when the expected event is not received or the received event " + "means a recoverable error. " + "This retry interval is used when the target node is a Low Power Node " + "or the target element address belongs to a Low Power Node." + "Example: keep some time between message transmissions to wait for " + "the response message of the remote Low Power Node. " + ) + + RETRY_CMD_MAX_HELP_DEFAULT = ( + "Maximum command retry count when a command fails due to recoverable " + "error. If the max command retry count is exceeded and the command " + "still fails with the same error then an error is raised. " + "Example for recoverable error: lack of dynamic memory in BT Mesh stack. " + ) + + RETRY_CMD_INTERVAL_HELP_DEFAULT = ( + "The retry command interval is measured between commands in seconds " + "during retry when the command fails due to recoverable error. " + "Example: keep time between commands to wait to free dynamic memory. " + ) + + COLUMNS_OPT_LONG = "--columns" + COLUMNS_OPTS = f"{COLUMNS_OPT_LONG}" + COLUMNS_ATTR_NAME = COLUMNS_OPT_LONG[2:].replace("-", "_") + + ALL_COLUMNS_OPT_LONG = "--all-columns" + ALL_COLUMNS_OPTS = f"{ALL_COLUMNS_OPT_LONG}" + ALL_COLUMNS_ATTR_NAME = ALL_COLUMNS_OPT_LONG[2:].replace("-", "_") + + @abc.abstractproperty + def parser(self) -> ArgumentParserExt: + raise NotImplementedError() + + @abc.abstractproperty + def current_parser(self) -> Optional[ArgumentParserExt]: + raise NotImplementedError() + + @abc.abstractmethod + def create_parser(self, subparsers) -> ArgumentParserExt: + raise NotImplementedError() + + @abc.abstractmethod + def __call__(self, arg) -> bool: + raise NotImplementedError() + + def help(self): + app_ui.parser_help(self.parser) + + def add_retry_max_arg( + self, + parser: ArgumentParserExt, + default: Optional[int] = None, + help: str = "", + ) -> None: + parser.add_argument( + self.RETRY_MAX_OPT_LONG, + type=int, + default=default, + help=(help if help else self.RETRY_MAX_HELP_DEFAULT), + ) + + def add_retry_interval_arg( + self, + parser: ArgumentParserExt, + default: Optional[float] = None, + help: str = "", + ) -> None: + parser.add_argument( + self.RETRY_INT_OPT_LONG, + type=float, + default=default, + help=(help if help else self.RETRY_INTERVAL_HELP_DEFAULT), + ) + + def add_retry_interval_lpn_arg( + self, + parser: ArgumentParserExt, + default: Optional[float] = None, + help: str = "", + ) -> None: + parser.add_argument( + self.RETRY_INT_LPN_OPT_LONG, + type=float, + default=default, + help=(help if help else self.RETRY_INTERVAL_LPN_HELP_DEFAULT), + ) + + def add_retry_cmd_max_arg( + self, + parser: ArgumentParserExt, + default: Optional[int] = None, + help: str = "", + ) -> None: + parser.add_argument( + self.RETRY_CMD_MAX_OPT_LONG, + type=int, + default=default, + help=(help if help else self.RETRY_CMD_MAX_HELP_DEFAULT), + ) + + def add_retry_cmd_interval_arg( + self, + parser: ArgumentParserExt, + default: Optional[float] = None, + help: str = "", + ) -> None: + parser.add_argument( + self.RETRY_CMD_INT_OPT_LONG, + type=float, + default=default, + help=(help if help else self.RETRY_CMD_INTERVAL_HELP_DEFAULT), + ) + + def add_basic_retry_args( + self, + parser: ArgumentParserExt, + retry_max_default: Optional[int] = None, + retry_interval_default: Optional[float] = None, + retry_max_help: str = "", + retry_interval_help: str = "", + ): + self.add_retry_max_arg( + parser=parser, default=retry_max_default, help=retry_max_help + ) + self.add_retry_interval_arg( + parser=parser, default=retry_interval_default, help=retry_interval_help + ) + + def add_btmesh_basic_retry_args( + self, + parser: ArgumentParserExt, + retry_max_default: Optional[int] = None, + retry_interval_default: Optional[float] = None, + retry_interval_lpn_default: Optional[float] = None, + retry_max_help: str = "", + retry_interval_help: str = "", + retry_interval_lpn_help: str = "", + ): + self.add_basic_retry_args( + parser=parser, + retry_max_default=retry_max_default, + retry_interval_default=retry_interval_default, + retry_max_help=retry_max_help, + retry_interval_help=retry_interval_help, + ) + self.add_retry_interval_lpn_arg( + parser=parser, + default=retry_interval_lpn_default, + help=retry_interval_lpn_help, + ) + + def add_retry_args( + self, + parser: ArgumentParserExt, + retry_max_default: Optional[int] = None, + retry_interval_default: Optional[float] = None, + retry_cmd_max_default: Optional[int] = None, + retry_cmd_interval_default: Optional[float] = None, + retry_max_help: str = "", + retry_interval_help: str = "", + retry_cmd_max_help: str = "", + retry_cmd_interval_help: str = "", + ): + self.add_basic_retry_args( + parser=parser, + retry_max_default=retry_max_default, + retry_interval_default=retry_interval_default, + retry_max_help=retry_max_help, + retry_interval_help=retry_interval_help, + ) + self.add_retry_cmd_max_arg( + parser=parser, default=retry_cmd_max_default, help=retry_cmd_max_help + ) + self.add_retry_cmd_interval_arg( + parser=parser, + default=retry_cmd_interval_default, + help=retry_cmd_interval_help, + ) + + def add_btmesh_retry_args( + self, + parser: ArgumentParserExt, + retry_max_default: Optional[int] = None, + retry_interval_default: Optional[float] = None, + retry_interval_lpn_default: Optional[float] = None, + retry_cmd_max_default: Optional[int] = None, + retry_cmd_interval_default: Optional[float] = None, + retry_max_help: str = "", + retry_interval_help: str = "", + retry_interval_lpn_help: str = "", + retry_cmd_max_help: str = "", + retry_cmd_interval_help: str = "", + ): + self.add_retry_args( + parser=parser, + retry_max_default=retry_max_default, + retry_interval_default=retry_interval_default, + retry_cmd_max_default=retry_cmd_max_default, + retry_cmd_interval_default=retry_cmd_interval_default, + retry_max_help=retry_max_help, + retry_interval_help=retry_interval_help, + retry_cmd_max_help=retry_cmd_max_help, + retry_cmd_interval_help=retry_cmd_interval_help, + ) + self.add_retry_interval_lpn_arg( + parser=parser, + default=retry_interval_lpn_default, + help=retry_interval_lpn_help, + ) + + def process_retry_params( + self, pargs, retry_params_default: BGLibExtRetryParams = None + ) -> BGLibExtRetryParams: + retry_max = getattr(pargs, self.RETRY_MAX_ATTR_NAME, None) + retry_interval = getattr(pargs, self.RETRY_INT_ATTR_NAME, None) + retry_cmd_max = getattr(pargs, self.RETRY_CMD_MAX_ATTR_NAME, None) + retry_cmd_interval = getattr(pargs, self.RETRY_CMD_INT_ATTR_NAME, None) + if retry_params_default: + retry_params = copy.copy(retry_params_default) + if retry_max: + retry_params.retry_max = retry_max + if retry_interval: + retry_params.retry_interval = retry_interval + if retry_cmd_max: + retry_params.retry_cmd_max = retry_cmd_max + if retry_cmd_interval: + retry_params.retry_cmd_interval = retry_cmd_interval + else: + if retry_max is None: + raise ValueError(f"The {self.RETRY_MAX_OPTS} arg is missing.") + if retry_interval is None: + raise ValueError(f"The {self.RETRY_INT_OPTS} arg is missing.") + if retry_cmd_max is None: + raise ValueError(f"The {self.RETRY_CMD_MAX_OPTS} arg is missing.") + if retry_cmd_interval is None: + raise ValueError(f"The {self.RETRY_CMD_INT_OPTS} arg is missing.") + retry_params = BGLibExtRetryParams( + retry_max=retry_max, + retry_interval=retry_interval, + retry_cmd_max=retry_cmd_max, + retry_cmd_interval=retry_cmd_interval, + ) + return retry_params + + def process_btmesh_retry_params( + self, pargs, retry_params_default: BtmeshRetryParams = None + ) -> BtmeshRetryParams: + base_retry_params = self.process_retry_params(pargs, retry_params_default) + retry_interval_lpn = getattr(pargs, self.RETRY_INT_LPN_ATTR_NAME, None) + if retry_params_default: + if retry_interval_lpn is None: + retry_interval_lpn = retry_params_default.retry_interval_lpn + else: + if retry_interval_lpn is None: + raise ValueError(f"The {self.RETRY_INT_LPN_OPTS} arg is missing.") + retry_params = BtmeshRetryParams( + retry_max=base_retry_params.retry_max, + retry_interval=base_retry_params.retry_interval, + retry_cmd_max=base_retry_params.retry_cmd_max, + retry_cmd_interval=base_retry_params.retry_cmd_interval, + retry_interval_lpn=retry_interval_lpn, + ) + return retry_params + + def add_nodes_pos_arg( + self, + parser: ArgumentParserExt, + help: str = "", + ): + parser.add_argument( + "nodespec", + metavar="", + default=[], + nargs="+", + help=f"{help} {app_ui.NODESPEC_HELP}", + ) + + def add_nodes_arg( + self, + parser: ArgumentParserExt, + help: str = "", + ): + parser.add_argument( + self.NODES_OPT_LONG, + self.NODES_OPT_SHORT, + metavar="", + default=[], + nargs="+", + help=f"{help} {app_ui.NODESPEC_HELP}", + ) + + def add_app_group_pos_arg(self, parser: ArgumentParserExt, help: str = ""): + parser.add_argument( + "groupspec", + metavar="", + default=[], + nargs="+", + help=f"{help} {app_ui.GROUPSPEC_HELP}", + ) + + def add_group_nodes_args( + self, + parser: ArgumentParserExt, + add_elem_arg: bool = False, + add_elem_addrs_arg: bool = False, + elem_default: Optional[int] = None, + group_addr_help: str = "", + group_help: str = "", + nodes_help: str = "", + elem_help: str = "", + elem_addrs_help: str = "", + ) -> None: + parser.add_argument( + self.GROUP_ADDR_OPT_LONG, + self.GROUP_ADDR_OPT_SHORT, + help=f"{group_addr_help} The group address can be specified as a " + f"binary (0b), octal(0o), decimal, hex (0x) integer.", + ) + target_group = parser.add_mutually_exclusive_group(required=True) + target_group.add_argument( + self.GROUP_OPT_LONG, + self.GROUP_OPT_SHORT, + metavar="", + help=f"{group_help} {app_ui.GROUPSPEC_HELP}", + ) + target_group.add_argument( + self.NODES_OPT_LONG, + self.NODES_OPT_SHORT, + metavar="", + default=[], + nargs="+", + help=f"{nodes_help} {app_ui.NODESPEC_HELP}", + ) + if add_elem_addrs_arg: + target_group.add_argument( + self.ELEM_ADDRS_OPT_LONG, + metavar="", + nargs="+", + help=f"{elem_addrs_help} {app_ui.ELEMSPEC_HELP}", + ) + if add_elem_arg: + # Argparse documentation: + # If the type keyword is used with the default keyword, the type + # converter is only applied if the default is a string. + # Conclusion: This means that None value is preserved so it can + # be used to indicate that no default value is specified. + if elem_default is None: + elem_default_help = "" + else: + elem_default_help = " (default: %(default)s)" + parser.add_argument( + self.ELEM_OPT_LONG, + self.ELEM_OPT_SHORT, + type=int, + default=elem_default, + help=f"{elem_help} Element shall be specified as a decimal " + f"integer value.{elem_default_help}", + ) + + def process_group_nodes_args( + self, + pargs, + nodes_filter: Callable[[Node], bool] = None, + nodes_order_property: str = None, + nodes_reverse: bool = False, + group_filter: Callable[[Node], bool] = None, + group_order_property: str = None, + group_reverse: bool = False, + elem_addrs_filter: Callable[[int], bool] = None, + ) -> Tuple[int, List[Node], Optional[List[int]]]: + elem_addrs = None + group_addr = btmesh.util.UNASSIGNED_ADDR + # If the add_group_nodes_args was called with false add_elem_arg and + # false add_elem_addrs_arg parameters then the elem and elem_addrs + # arguments are not added to the parser which means the Namespace object + # in pargs parameter doesn't have elem and elem_addrs attributes. + elem_support = hasattr(pargs, "elem") + elem_addr_support = hasattr(pargs, "addrs") + # The --elem and --addrs are mutually exclusive. The --addrs provides + # the element addresses directly while --elem determines the element + # index and the element addresses are calculated from --elem and + # --nodes/--group arguments. The --elem can have default value when + # the elem_default parameter of add_group_nodes_args method is set to + # an integer value so the condition below checks --nodes/--group and + # --addrs arguments to make sure that the mutual exclusion of --elem + # and --addrs arguments are respected. + if ( + elem_support + and elem_addr_support + and not ( + ((not pargs.nodes) and (pargs.group is None)) or (pargs.addrs is None) + ) + ): + # Parser error raises an exception + self.current_parser.error( + f"argument {self.ELEM_OPTS}: not allowed with " + f"argument {self.ELEM_ADDRS_OPTS}." + ) + if elem_support and (pargs.elem is None) and (pargs.nodes or pargs.group): + # Parser error raises an exception + self.current_parser.error( + f"argument {self.ELEM_OPTS}: mandatory when {self.NODES_OPTS} or " + f"{self.GROUP_OPTS} is present." + ) + # If --nodes or --group argument is used then it is mandatory to provide + # --elem argument as well. If the --elem argument has default value then + # it might be an integer even when the --addrs argument is used. + # The --addrs check is essential in the condition to avoid false errors. + if ( + (elem_support and pargs.elem is not None) + and (elem_addr_support and pargs.addrs is None) + and not (pargs.nodes or pargs.group) + ): + # Parser error raises an exception + self.current_parser.error( + f"argument {self.NODES_OPTS} or {self.GROUP_OPTS}: mandatory when " + f"{self.ELEM_OPTS} is present." + ) + + if pargs.nodes: + db_nodes = app_db.btmesh_db.get_node_list( + nodefilter=nodes_filter, + order_property=nodes_order_property, + reverse=nodes_reverse, + ) + nodes = self.parse_nodespecs(pargs.nodes, db_nodes) + elif pargs.group: + db_app_groups = app_db.get_app_group_list( + groupfilter=group_filter, + order_property=group_order_property, + reverse=group_reverse, + ) + app_group = self.parse_groupspec(pargs.group, db_app_groups) + nodes = app_db.get_app_group_node_list( + app_group.name, + nodefilter=nodes_filter, + order_property=nodes_order_property, + reverse=nodes_reverse, + ) + group_addr = app_group.group_addr + elif elem_addr_support and pargs.addrs: + identity = lambda n: n + elem_addrs_filter = elem_addrs_filter if elem_addrs_filter else identity + db_nodes = app_db.btmesh_db.get_node_list( + nodefilter=nodes_filter, + order_property=nodes_order_property, + reverse=nodes_reverse, + ) + elem_addrs = self.parse_elemspecs(pargs.addrs, db_nodes) + elem_addrs = [addr for addr in elem_addrs if elem_addrs_filter(addr)] + nodes_gen = ( + app_db.btmesh_db.get_node_by_elem_addr(addr) for addr in elem_addrs + ) + # Remove duplicate entries from the list + # Note: Dictionaries are ordered from Python 3.7 and the required + # python version is 3.7 as well so the dict can be considered ordered + nodes = list(dict.fromkeys(nodes_gen)) + else: + raise KeyError( + f"One of {self.NODES_OPTS} or {self.GROUP_OPTS} or " + f"{self.ELEM_ADDRS_OPTS} options is mandatory." + ) + if elem_support and not (elem_addr_support and pargs.addrs is not None): + # The --elem and --addrs options are mutually exclusive so elem_addrs + # is None when this condition is true + elem_addrs = [ + addr for node in nodes for addr in node.get_elem_addrs(pargs.elem) + ] + + if group_addr and pargs.group_addr: + # Parser error raises an exception + self.current_parser.error( + f"argument {self.GROUP_ADDR_OPTS}: not allowed with argument " + f"{self.GROUP_OPTS} when the app group specified by " + f"{self.GROUP_OPTS} has non-zero group address" + ) + if pargs.group_addr: + btmesh.util.validate_group_address(pargs.group_addr) + group_addr = btmesh.util.addr_to_int(pargs.group_addr) + elif pargs.group_addr == 0: + # It is allowed to pass an app group by --group option with + # --group-addr 0 as unassigned address. This selects the nodes from + # the app group but the BT Mesh messages are sent to the unicast + # address of each node. + group_addr = 0 + return group_addr, nodes, elem_addrs + + def add_chunk_size_arg( + self, parser: ArgumentParserExt, default: int = None, help="" + ): + HELP_DEFAULT = ( + "Preferred chunk size during BLOB transfer. " + "The maximum chunk size is limited by the Max Chunk Size capabilities " + "of participating BLOB Transfer Servers. " + "The minimum chunk size is limited by the calculated block size and " + "Max Total chunk capabilities of participating BLOB Transfer Servers. " + "The default chunk size calculation algorithm selects the preferred " + "chunk size when it is in the range defined by min and max chunk " + "size limits. Otherwise, the algorithm selects the nearest valid " + "value which fills the BT Mesh messages. " + "If Silabs BT Mesh over Advertisement Extensions proprietary feature " + "is enabled then the network PDU size is selected as the chunk size " + "unless the minimum chunk size is higher. " + "The standard (non-AE) segmented chunks are able to transfer 12 bytes " + "per advertisement minus the 1 byte opcode and 2 byte chunk number " + "and 4 bytes of MIC. This means N advertisements are able to transfer " + "12 x N - 7 bytes of chunk data. The standard unsegmented chunk is " + "able to transfer 8 bytes of chunk data. " + "(default: %(default)s)" + ) + parser.add_argument( + "--chunk-size", + type=int, + default=default, + help=help if help else HELP_DEFAULT, + ) + + def add_column_args( + self, + parser: ArgumentParserExt, + table_name: str, + column_info_dict: Dict[str, AppUIColumnInfo], + ): + parser.add_argument( + self.ALL_COLUMNS_OPT_LONG, + action="store_true", + help=f"All columns of {table_name} table are present.", + ) + parser.add_argument( + self.COLUMNS_OPT_LONG, + nargs="+", + choices=[column for column in column_info_dict.keys()], + default=[ + column + for column in column_info_dict.keys() + if column_info_dict[column].default + ], + help=f"Select columns of {table_name} table.", + ) + + def process_column_args( + self, pargs, column_info_dict: Dict[str, AppUIColumnInfo] + ) -> Dict[str, str]: + all_columns_arg = getattr(pargs, self.ALL_COLUMNS_ATTR_NAME) + columns_arg = getattr(pargs, self.COLUMNS_ATTR_NAME) + if all_columns_arg: + columns = list(column_info_dict.keys()) + else: + columns = columns_arg + selected_columns = {col: column_info_dict[col].header for col in columns} + return selected_columns + + @spec_parse_error_handler + def parse_nodespecs( + self, nodespecs, node_list: Sequence[Node], filter_duplicates: bool = True + ) -> List[Node]: + return app_ui.parse_nodespecs(nodespecs, node_list, filter_duplicates) + + @spec_parse_error_handler + def parse_elemspecs( + self, elemspecs, node_list: Sequence[Node], filter_duplicates: bool = True + ) -> List[int]: + return app_ui.parse_elemspecs(elemspecs, node_list, filter_duplicates) + + @spec_parse_error_handler + def parse_mdlspecs(self, mdlspecs, filter_duplicates: bool = True) -> List[ModelID]: + return app_ui.parse_mdlspecs(mdlspecs, filter_duplicates) + + @spec_parse_error_handler + def parse_fwidspec(self, fwidspec) -> FWID: + return app_ui.parse_fwidspec(fwidspec) + + @spec_parse_error_handler + def parse_fwidspecs(self, fwidspecs, filter_duplicates: bool = True) -> List[FWID]: + return app_ui.parse_fwidspecs(fwidspecs, filter_duplicates) + + @spec_parse_error_handler + def parse_metaspec(self, metaspec) -> bytes: + return app_ui.parse_metaspec(metaspec) + + @spec_parse_error_handler + def parse_metaspecs(self, metaspecs, filter_duplicates: bool = True) -> List[bytes]: + return app_ui.parse_metaspecs(metaspecs, filter_duplicates) + + @spec_parse_error_handler + def parse_groupspec( + self, groupspec, app_group_list: Sequence[BtmeshDfuAppGroup] + ) -> BtmeshDfuAppGroup: + return app_ui.parse_groupspec(groupspec, app_group_list) + + @spec_parse_error_handler + def parse_groupspecs( + self, + groupspecs, + app_group_list: Sequence[BtmeshDfuAppGroup], + filter_duplicates: bool = True, + ) -> List[BtmeshDfuAppGroup]: + return app_ui.parse_groupspecs(groupspecs, app_group_list, filter_duplicates) diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cmd/conf.py b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/conf.py new file mode 100644 index 00000000000..ab9a0943b1e --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/conf.py @@ -0,0 +1,472 @@ +# 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. + +from typing import Optional, Tuple + +import btmesh.util +from bgapix.bglibx import CommandFailedError +from bgapix.slstatus import SlStatus +from btmesh.conf import SilabsConfStatus, SilabsConfTxOpt, SilabsConfTxPhy +from btmesh.db import ModelID +from btmesh.errors import BtmeshError + +from ..btmesh import app_btmesh +from ..cfg import app_cfg +from ..db import app_db +from ..ui import app_ui +from ..util.argparsex import ArgumentParserExt +from .cmd import BtmeshCmd + + +class BtmeshConfCmd(BtmeshCmd): + @property + def parser(self) -> ArgumentParserExt: + return self.conf_parser + + @property + def current_parser(self) -> Optional[ArgumentParserExt]: + return getattr(self, "_current_parser", self.parser) + + def create_parser(self, subparsers) -> ArgumentParserExt: + self.conf_parser = subparsers.add_parser( + "conf", + prog="conf", + help="Configuration Client and Silabs Configuration Client commands.", + description="Configuration Client and Silabs Configuration Client commands.", + exit_on_error_ext=False, + ) + self.conf_subparser = self.conf_parser.add_subparsers( + dest="conf_subcmd_name", + title="Subcommands", + required=True, + ) + self.subparser_dict = dict( + ( + self.create_conf_reset_parser(self.conf_subparser), + self.create_conf_ae_parser(self.conf_subparser), + ) + ) + return self.conf_parser + + def add_mdl_profile_args(self, parser: ArgumentParserExt, sub_help=""): + mdl_profile_choices = [mp.name for mp in app_cfg.appgroup.mdl_profiles] + help_text = [ + f"Model profiles make it easier to select multiple models for " + f"configuration. A model profile name refers to these model sets " + f"from the configuration file." + ] + if sub_help: + help_text.append(sub_help) + for mp in app_cfg.appgroup.mdl_profiles: + help_text.append(f"profile_{mp.name}: {mp.help}") + parser.add_argument( + "--profile", + "-m", + default=[], + choices=mdl_profile_choices, + nargs="+", + help=" ".join(help_text), + ) + + def create_conf_reset_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "reset" + self.conf_reset_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Perform node reset procedure on remote node to remove it from " + "the BT Mesh network.", + description="Perform node reset procedure on remote node to remove " + "it from the BT Mesh network. It is possible to perform node reset " + "locally which means no BT Mesh messages are sent but the node is " + "removed from the database of the NCP node and from the database of " + "the application.", + exit_on_error_ext=False, + ) + self.conf_reset_parser.set_defaults(conf_subcmd=self.conf_reset_cmd) + self.conf_reset_parser.add_argument( + "nodespec", + nargs="+", + metavar="", + help=f"Target nodes of node reset procedure. The provisioner (NCP) " + f"shall be reset by factory reset explicitly so it can't be the " + f"target of this command. {app_ui.NODESPEC_HELP}", + ) + self.conf_reset_parser.add_argument( + "--local", + "-l", + action="store_true", + help="Perform node reset locally only by removing the node from the " + "NCP node (provisioner) device database and from the database of " + "the application. " + "Note: this is essential when the remote node was not reset by the " + "provisioner for example node factory reset was initiated by the " + "push buttons on the board.", + ) + self.add_retry_max_arg( + self.conf_reset_parser, + app_cfg.conf.reset_node_retry_max_default, + help=( + "Maximum number of additional Config Node Reset messages are " + "sent until the Config Node Reset Status message is received " + "from the remote node. " + "(default: %(default)s)" + ), + ) + self.add_retry_interval_arg( + self.conf_reset_parser, + app_cfg.conf.reset_node_retry_interval_default, + help=( + "Interval in seconds between Config Node Reset messages when " + "the Config Node Reset Status message is not received from the " + "remote node. " + "(default: %(default)s)" + ), + ) + self.add_retry_interval_lpn_arg( + self.conf_reset_parser, + app_cfg.conf.reset_node_retry_interval_lpn_default, + help=( + "Interval in seconds between Config Node Reset messages when " + "the Config Node Reset Status message is not received from the " + "remote Low Power Node. " + "(default: %(default)s)" + ), + ) + return SUBPARSER_NAME, self.conf_reset_parser + + def create_conf_ae_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "ae" + self.conf_ae_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Activation of Silabs BT Mesh over Advertisement Extensions " + "proprietary feature.", + description="Activation of Silabs BT Mesh over Advertisement " + "Extensions proprietary feature. The feature is not supported in " + "Silabs BT Mesh SOC and NCP examples so some additional steps are " + "necessary to add it to the embedded code. " + "The NCP projects shall contain the following components: " + "Silicon Labs Configuration Server Model, Silicon Labs Configuration " + "Client Model and Proprietary Extended Advertiser. " + "The SOC projects shall contain Advertisement Extension Server " + "component which pulls in Silicon Labs Configuration Server Model " + "and Proprietary Extended Advertiser components through dependencies. " + "WARNING! If Proprietary Extended Advertiser component is added to " + "the project then the BLE LL layer follows the AuxPtr in AE packets " + "to secondary channels which means it does not scan primary channels " + "in that time interval which lowers the scanning efficiency and " + "makes the packet loss higher. This might be significant if there is " + "considerable non-mesh related AE traffic due to other devices.", + exit_on_error_ext=False, + ) + self.conf_ae_parser.set_defaults(conf_subcmd=self.conf_ae_cmd) + self.conf_ae_onoff_group = self.conf_ae_parser.add_mutually_exclusive_group() + self.conf_ae_onoff_group.add_argument( + "--en", + action="store_true", + help="Activate Silabs BT Mesh over Advertisement Extensions " + "proprietary feature on specified models.", + ) + self.conf_ae_onoff_group.add_argument( + "--dis", + action="store_true", + help="Deactivate Silabs BT Mesh over Advertisement Extensions " + "proprietary feature on specified models.", + ) + self.conf_ae_parser.add_argument( + "--appkey-idx", + "-a", + type=int, + default=app_cfg.dist_clt.appkey_index_default, + help="Appkey index used for sending Silicon Labs configuration " + " messages. (default: %(default)s)", + ) + # The tx_options is not implemented in BT Mesh stack so it is not + # shown on the UI + self.conf_ae_parser.add_argument( + "--tx-phy", + "-t", + choices=["legacy", "1m", "2m"], + help="TX PHY for long packets (packets that would be segmented).", + ) + self.conf_ae_parser.add_argument( + "--nw-pdu", + "-p", + type=int, + help=f"Size of network PDU. The PDU size shall be in " + f"[{btmesh.util.NW_PDU_LEN_MIN},{btmesh.util.NW_PDU_LEN_MAX}] range. " + f"If it is greater than {btmesh.util.LEGACY_NW_PDU_LEN} then the " + f"long packets which would be segmented in case of legacy advertiser " + f"are sent in a single or multiple extended advertisements. " + f"If the network PDU size is {btmesh.util.LEGACY_NW_PDU_LEN} then " + f"the extended advertising packets are ignored by the BT Mesh stack.", + ) + self.conf_ae_parser.add_argument( + "--elems", + "-e", + type=int, + default=[], + nargs="+", + help="List of node elements where the specified models shall be " + "configured to enable or disable the transmission of long packets " + "in extended advertisements.", + ) + self.conf_ae_parser.add_argument( + "--mdls", + "-M", + metavar="", + default=[], + nargs="+", + help=f"List of models which shall enable or disable transmission of " + f"long packets in extended advertisement. If the AE feature is not " + f"enabled for a model it uses legacy advertiser and segmentation for " + f"long packets. {app_ui.MDLSPEC_HELP}", + ) + self.add_mdl_profile_args( + self.conf_ae_parser, + sub_help=( + "The transmission of long packets in extended advertisement is " + "enabled or disabled for all models of the model profile." + ), + ) + self.add_btmesh_basic_retry_args( + self.conf_ae_parser, + retry_max_default=app_cfg.conf.silabs_retry_max_default, + retry_interval_default=app_cfg.conf.silabs_retry_interval_default, + retry_interval_lpn_default=app_cfg.conf.silabs_retry_interval_lpn_default, + retry_max_help=( + "Maximum number of additional Silabs Config Get or Set messages " + "are sent until the Silabs Config Status message is not received " + "from the Silabs Config Server. " + "(default: %(default)s)" + ), + retry_interval_help=( + "Interval in seconds between Silabs Config Get or Set messages " + "when the Silabs Config Status message is not received from " + "the Silabs Config Server. " + "(default: %(default)s)" + ), + retry_interval_lpn_help=( + "Interval in seconds between Silabs Config Get or Set messages " + "when the Silabs Config Status message is not received from " + "the Silabs Config Server model of a Low Power Node. " + "(default: %(default)s)" + ), + ) + self.add_group_nodes_args( + self.conf_ae_parser, + add_elem_arg=False, + add_elem_addrs_arg=False, + elem_default=None, + group_addr_help=( + f"Subscription group address of Silicon Labs Configuration " + f"Server on target nodes. If this option is present then the Silabs " + f"configuration commands are sent to group address otherwise each " + f"server is configured one by one in separate unicast messages. " + ), + group_help=( + f"Specifies the app group which contains the nodes where the " + f"Silicon Labs Configuration Server models shall be configured. " + f"Note: the Silicon Labs Configuration Server shall be present on " + f"primary element." + ), + nodes_help=( + f"List of nodes where the Silicon Labs Configuration Server " + f"models shall be configured. Note: the Silicon Labs Configuration " + f"Server shall be present on the primary element." + ), + ) + return SUBPARSER_NAME, self.conf_ae_parser + + @classmethod + def tx_phy_choice_to_enum(cls, choice): + if choice == "1m": + return SilabsConfTxPhy.LE_1M + if choice == "2m": + return SilabsConfTxPhy.LE_2M + else: + return SilabsConfTxPhy.LE_LEGACY + + def __call__(self, arg) -> bool: + pargs = self.parser.parse_args(arg.split()) + self._current_parser = self.subparser_dict.get( + pargs.conf_subcmd_name, self.parser + ) + pargs.conf_subcmd(pargs) + self._current_parser = self.parser + return False + + def conf_reset_cmd(self, pargs): + nodes = app_db.btmesh_db.get_node_list(order_property="name") + nodes = self.parse_nodespecs(pargs.nodespec, nodes) + # The retry_cmd_max and retry_cmd_interval are used only because the + # other parameters are overwritten by the arguments of conf reset command + retry_params_default = app_cfg.common.btmesh_retry_params_default + retry_params = self.process_btmesh_retry_params(pargs, retry_params_default) + remove_node_on_retry_limit = app_cfg.conf.reset_node_local_remove_on_retry_limit + for node in nodes: + try: + app_btmesh.conf.reset_node( + node=node, + local=pargs.local, + remove_node_on_retry_limit=remove_node_on_retry_limit, + retry_params=retry_params, + ) + if pargs.local: + app_ui.info( + f"Node 0x{node.prim_addr:04X} is removed from NCP node " + f"device database and from application database." + ) + else: + app_ui.info( + f"Node 0x{node.prim_addr:04X} is reset and removed " + f"from network." + ) + except CommandFailedError as e: + status_name = SlStatus.get_name(e.errorcode) + app_ui.error(str(e) + f" ({status_name})") + except BtmeshError as e: + app_ui.error(str(e)) + + def conf_ae_cmd(self, pargs): + appkey_idx = pargs.appkey_idx + mdls: set[ModelID] = set() + group_addr, nodes, _ = self.process_group_nodes_args( + pargs, + nodes_order_property="name", + group_order_property="name", + ) + # The retry_cmd_max and retry_cmd_interval are used only because the + # other parameters are overwritten by the arguments of conf ae command + retry_params_default = app_cfg.common.btmesh_retry_params_default + retry_params = self.process_btmesh_retry_params(pargs, retry_params_default) + if (pargs.mdls or pargs.elems or pargs.en or pargs.dis) and not ( + (pargs.mdls and pargs.elems) and (pargs.en or pargs.dis) + ): + if pargs.en or pargs.dis: + # Parser error raises an exception + self.current_parser.error( + "argument --mdls/-M and --elems/-e: mandatory when --en or " + "--dis is present." + ) + else: + # Parser error raises an exception + self.current_parser.error( + "argument --en or --dis: mandatory when --mdls/-M and " + "--elems/-e are present." + ) + mdls.update(self.parse_mdlspecs(pargs.mdls)) + # Model profile query should not fail because argparse makes sure that + # a value from choices is selected and the choices are constructed + # from configuration. + for mp in app_cfg.appgroup.mdl_profiles: + if mp.name in pargs.profile: + mdls.update(mp.mdls) + enable = pargs.en + if pargs.tx_phy: + tx_phy = self.tx_phy_choice_to_enum(pargs.tx_phy) + else: + tx_phy = None + if pargs.nw_pdu: + nw_pdu_size = pargs.nw_pdu + btmesh.util.validate_nw_pdu_size(nw_pdu_size) + else: + nw_pdu_size = None + if tx_phy is not None: + status_list = app_btmesh.conf.silabs_set_tx( + nodes=nodes, + tx_phy=tx_phy, + tx_opt=SilabsConfTxOpt.DEFAULT, + group_addr=group_addr, + appkey_index=appkey_idx, + retry_params=retry_params, + ) + for status in status_list: + # The tx_options is not implemented in BT Mesh stack so + # it is not shown on the UI + if status.status == SilabsConfStatus.SUCCESS: + app_ui.info( + f"Node 0x{status.node.prim_addr:04X} TX PHY is set to " + f"{status.tx_phy.pretty_name}." + ) + else: + app_ui.error( + f"Node 0x{status.node.prim_addr:04X} TX PHY set " + f"({tx_phy.pretty_name}) procedure failed due to " + f'"{status.status.pretty_name}" error.' + ) + + if pargs.en or pargs.dis: + for elem_idx in pargs.elems: + for mdl in mdls: + status_list = app_btmesh.conf.silabs_set_model_enable( + nodes=nodes, + elem_index=elem_idx, + model=mdl, + enable=enable, + group_addr=group_addr, + appkey_index=appkey_idx, + retry_params=retry_params, + ) + for status in status_list: + if status.status == SilabsConfStatus.SUCCESS: + if status.enabled: + en_str = "enabled" + else: + en_str = "disabled" + app_ui.info( + f"Node 0x{status.node.prim_addr:04X} TX over AE " + f"is {en_str} for {status.model.pretty_name()} " + f"model on {status.elem_index} element." + ) + else: + if enable: + en_str = "enable" + else: + en_str = "disable" + app_ui.error( + f"Node 0x{status.node.prim_addr:04X} TX over AE " + f"{en_str} for {mdl.pretty_name()} model " + f"on {elem_idx} element procedure failed due to " + f'"{status.status.pretty_name}" error.' + ) + if nw_pdu_size: + status_list = app_btmesh.conf.silabs_set_network_pdu( + nodes=nodes, + pdu_max_size=nw_pdu_size, + group_addr=group_addr, + appkey_index=appkey_idx, + retry_params=retry_params, + ) + for status in status_list: + if status.status == SilabsConfStatus.SUCCESS: + app_ui.info( + f"Node 0x{status.node.prim_addr:04X} network PDU max " + f"size is set to {status.pdu_max_size}." + ) + else: + app_ui.error( + f"Node 0x{status.node.prim_addr:04X} network PDU max " + f"size ({nw_pdu_size}) procedure failed due to " + f'"{status.status.pretty_name}" error.' + ) + + +conf_cmd = BtmeshConfCmd() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cmd/dfu.py b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/dfu.py new file mode 100644 index 00000000000..3c9cfc4d74f --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/dfu.py @@ -0,0 +1,573 @@ +# 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. + +from pathlib import Path +from typing import List, Optional, Tuple, Union + +import btmesh.util +from bgapix.bglibx import BGLibExtSyncSignalException +from btmesh.dfu import (FwReceiver, FwReceiverPhase, FwUpdateProgressEvent, + FwUpdateStatus, FwUpdateStep) +from btmesh.mbt import BlobTransferMode + +from ..btmesh import app_btmesh +from ..cfg import app_cfg +from ..ui import AppUIColumnInfo, app_ui +from ..util.argparsex import ArgumentParserExt +from .cmd import BtmeshCmd + + +class BtmeshDfuCmd(BtmeshCmd): + DFU_INFO_COLUMNS = { + "elem": AppUIColumnInfo(header="Element", default=True), + "fw_index": AppUIColumnInfo(header="FW Index", default=False), + "status": AppUIColumnInfo(header="Status", default=True), + "fwid": AppUIColumnInfo(header="FWID", default=True), + "uri": AppUIColumnInfo(header="URI", default=False), + } + + @property + def parser(self) -> ArgumentParserExt: + return self.dfu_parser + + @property + def current_parser(self) -> Optional[ArgumentParserExt]: + return getattr(self, "_current_parser", self.parser) + + def create_parser(self, subparsers) -> ArgumentParserExt: + self.dfu_parser = subparsers.add_parser( + "dfu", + prog="dfu", + help=( + "Start standalone firmware update procedure on updating nodes " + "and query FW information from updating nodes as initiator." + ), + description=( + "Start standalone firmware update procedure on updating nodes " + "or query FW information from updating nodes as initiator. " + ), + exit_on_error_ext=False, + ) + self.dfu_subparser = self.dfu_parser.add_subparsers( + dest="dfu_subcmd_name", + title="Subcommands", + required=True, + ) + self.subparser_dict = dict( + ( + self.create_dfu_info_parser(self.dfu_subparser), + self.create_dfu_start_parser(self.dfu_subparser), + ) + ) + return self.dfu_parser + + def add_appkey_index_arg(self, parser: ArgumentParserExt) -> None: + parser.add_argument( + "--appkey-idx", + "-a", + type=int, + default=app_cfg.dfu_clt.appkey_index_default, + help=( + "Appkey index used for sending FW Update and BLOB Transfer " + "messages. (default: %(default)s)" + ), + ) + + def add_ttl_arg(self, parser: ArgumentParserExt) -> None: + parser.add_argument( + "--ttl", + "-t", + type=int, + default=app_cfg.dfu_clt.ttl_default, + help=( + "TTL used for sending FW Update and BLOB Transfer messages. " + "(default: %(default)s)" + ), + ) + + def add_fwid_arg( + self, + parser: Union[ArgumentParserExt, object], + required=True, + help="Firmware identifier belonging to FW image.", + ) -> None: + parser.add_argument( + "--fwid", + "-f", + metavar="", + type=self.parse_fwidspec, + required=required, + help=f"{help} {app_ui.FWIDSPEC_HELP}", + ) + + def add_metadata_arg( + self, + parser: ArgumentParserExt, + required=False, + help="Metadata belonging to FW image.", + ) -> None: + parser.add_argument( + "--metadata", + "-m", + metavar="", + type=self.parse_metaspec, + required=required, + default=bytes(), + help=f"{help} {app_ui.METASPEC_HELP}", + ) + + def add_fw_idx_arg( + self, + parser: ArgumentParserExt, + default=0, + help="Index of the firmware on updating nodes.", + ) -> None: + parser.add_argument( + "--fw-idx", + type=int, + default=default, + help=help, + ) + + def create_dfu_info_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "info" + self.dfu_info_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Query the FW information from selected Updating Nodes.", + description=( + "The firmware info command queries the Current Firmware ID and " + "Update URI from the specified index of Firmware Information List " + "on the selected updating nodes." + ), + exit_on_error_ext=False, + ) + self.dfu_info_parser.set_defaults(dfu_subcmd=self.dfu_info_cmd) + self.add_fw_idx_arg( + self.dfu_info_parser, + help=( + "Target firmware index of Firmware Information Query procedure " + "on selected Updating Nodes. " + "(default: %(default)s)" + ), + ) + self.add_column_args( + self.dfu_info_parser, + table_name="FW information report", + column_info_dict=self.DFU_INFO_COLUMNS, + ) + self.add_appkey_index_arg(self.dfu_info_parser) + self.add_ttl_arg(self.dfu_info_parser) + self.add_btmesh_basic_retry_args( + self.dfu_info_parser, + retry_max_default=app_cfg.dfu_clt.dfu_retry_max_default, + retry_interval_default=app_cfg.dfu_clt.dfu_retry_interval_default, + retry_interval_lpn_default=app_cfg.dfu_clt.dfu_retry_interval_lpn_default, + retry_max_help=( + "Maximum number of additional Firmware Update Information Get " + "messages which are sent until the corresponding status message " + "is not received from the Firmware Update Server. " + "(default: %(default)s)" + ), + retry_interval_help=( + "Interval in seconds between Firmware Update Information Get " + "messages when the corresponding status message is not received " + "from the Firmware Update Server. " + "(default: %(default)s)" + ), + retry_interval_lpn_help=( + "Interval in seconds between Firmware Update Information Get " + "messages when the corresponding status message is not received " + "from the Firmware Update Server model of a Low Power Node. " + "(default: %(default)s)" + ), + ) + self.add_group_nodes_args( + self.dfu_info_parser, + add_elem_arg=True, + add_elem_addrs_arg=True, + elem_default=0, + group_addr_help=( + f"Group address used for the FW Information Query procedure. " + f"The FW Update Server shall be subscribed to the specified group " + f"address. If it is unassigned address (0) then the FW Information " + f"Get message is sent to each updating node one by one to the " + f"element address of the FW Update Server model." + ), + group_help=( + f"Select the app group which contains group address and updating " + f"nodes which shall participate in the FW Information Query " + f"procedure. The FW Information Get message is sent to the group " + f"address of the app group. " + f"For further details see {self.GROUP_ADDR_OPTS} option." + ), + nodes_help=( + f"Select the updating nodes which shall participate in the " + f"FW Information Query procedure. The FW Information Query " + f"procedure requires the element (unicast) addresses of the " + f"updating nodes. " + f"Those element addresses shall be selected where the FW Update " + f"Server model is located on the updating nodes. " + f"The {self.NODES_OPTS} options selects nodes only so in order " + f"to specify the proper element address the {self.ELEM_OPTS} " + f"option shall be used as well. " + f"The element addresses can be specified directly by the " + f"{self.ELEM_ADDRS_OPTS} option." + ), + elem_help=( + f"Select element on the updating nodes where the FW Update Server " + f"model is located by element index. " + f"This option is mandatory when {self.NODES_OPTS} or " + f"{self.GROUP_OPTS} is used because those selects the nodes only." + ), + elem_addrs_help=( + f"Select the updating nodes which shall participate in the " + f"FW Information Query procedure by selecting the element " + f"addresses of updating nodes with FW Update Server model. " + f"If {self.ELEM_ADDRS_OPTS} is used then {self.NODES_OPTS} and " + f"{self.GROUP_OPTS} and {self.ELEM_OPTS} shall not be used." + ), + ) + return SUBPARSER_NAME, self.dfu_info_parser + + def create_dfu_start_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "start" + self.dfu_start_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Start Firmware Update procedure of specified FW image to the " + "selected updating nodes.", + description=( + "Start Firmware Update procedure of specified FW image " + "to the selected updating nodes. " + "The FW update procedure includes the following steps: " + "FW metadata check, FW update start, BLOB transfer, " + "FW verification, FW application (install) and FW update " + "result check. " + "The result of metadata check determines whether the node " + "becomes unprovisioned after the FW update or not. " + "If the node becomes unprovisioned after a successful FW update " + "then it is removed from the device database and from each app " + "group automatically. The user is responsible for the " + "reprovisioning and reconfiguration of the device. " + "Note: number of elements and models might have changed so only " + "the user has information how the device shall be configured." + ), + exit_on_error_ext=False, + ) + self.dfu_start_parser.set_defaults(dfu_subcmd=self.dfu_start_cmd) + self.dfu_start_parser.add_argument( + "fw_image_path", + type=Path, + help="Path of FW image file which shall be used for FW update.", + ) + self.add_fwid_arg(self.dfu_start_parser) + self.add_metadata_arg(self.dfu_start_parser) + self.dfu_start_parser.add_argument( + "--timeout-base", + "-T", + type=int, + default=app_cfg.dfu_clt.timeout_base_default, + help=f"The timeout base used for Firmware Update and BLOB Transfer " + f"procedures. {app_ui.DFU_CALC_TIMEOUT_HELP} " + "(default: %(default)s)", + ) + self.dfu_start_parser.add_argument( + "--fw-idx", + type=int, + default=0, + help=( + "Index of the firmware on updating nodes which shall be updated." + "(default: %(default)s)" + ), + ) + self.dfu_start_parser.add_argument( + "--transfer-mode", + default="push", + choices=["push", "pull"], + help="Transfer mode for the BLOB transfer phase of FW update. " + "The LPN nodes usually use pull mode.", + ) + self.add_chunk_size_arg( + self.dfu_start_parser, default=app_cfg.dfu_clt.dfu_chunk_size_default + ) + self.dfu_start_parser.add_argument( + "--multicast-threshold", + "--mct", + type=int, + default=app_cfg.dfu_clt.dfu_multicast_threshold_default, + help=( + "If the number of uncompleted servers (missing status messages) " + "during any BLOB transfer procedure step exceeds or is equal to " + "this number then the group address is used. " + "Otherwise, servers are looped through one by one. " + "Value of 0 disables the feature. " + "(default: %(default)s)" + ), + ) + self.add_appkey_index_arg(self.dfu_start_parser) + self.add_ttl_arg(self.dfu_start_parser) + self.add_group_nodes_args( + self.dfu_start_parser, + add_elem_arg=True, + add_elem_addrs_arg=True, + elem_default=0, + group_addr_help=( + f"Group address used for the Firmware Update procedure. " + f"The FW Update Server and BLOB Transfer Server models shall be " + f"subscribed to the specified group address. If it is unassigned " + f"address (0) then the FW Update and BLOB transfer messages are " + f"sent to each updating node one by one to the element address " + f"of the FW Update Server and BLOB Transfer Server models." + ), + group_help=( + f"Select the app group which contains group address and updating " + f"nodes which shall participate in the Firmware Update procedure. " + f"The group address of the app group is used as the destination " + f"address of FW Update and BLOB Transfer messages. " + f"The nodes of the app group are the receivers of the FW image " + f"in the FW Update procedure. " + f"For further details see {self.GROUP_ADDR_OPTS} option." + ), + nodes_help=( + f"Select the updating nodes which shall participate in the " + f"firmware update. The FW Update procedure requires the element " + f"(unicast) addresses of the updating nodes. " + f"Those element addresses shall be selected where the FW Update " + f"Server and BLOB Transfer Server models are located on the " + f"updating nodes. " + f"The {self.NODES_OPTS} option selects nodes only so in order " + f"to specify the proper element address the {self.ELEM_OPTS} " + f"option shall be used as well. " + f"The element addresses can be specified directly by the " + f"{self.ELEM_ADDRS_OPTS} option." + ), + elem_help=( + f"Select element on the updating nodes where the FW Update Server " + f"and BLOB Transfer Server models are located by element index. " + f"This option is mandatory when {self.NODES_OPTS} or " + f"{self.GROUP_OPTS} is used because those selects the nodes only." + ), + elem_addrs_help=( + f"Select the updating nodes which shall participate in the " + f"FW Update procedure by selecting the element addresses of " + f"updating nodes with FW Update Server and BLOB Transfer " + f"Server model. " + f"If {self.ELEM_ADDRS_OPTS} is used then {self.NODES_OPTS} and " + f"{self.GROUP_OPTS} and {self.ELEM_OPTS} shall not be used." + ), + ) + return SUBPARSER_NAME, self.dfu_start_parser + + def __call__(self, arg) -> bool: + pargs = self.parser.parse_args(arg.split()) + self._current_parser = self.subparser_dict.get( + pargs.dfu_subcmd_name, self.parser + ) + pargs.dfu_subcmd(pargs) + self._current_parser = self.parser + return False + + def dfu_info_cmd(self, pargs): + group_addr, nodes, elem_addrs = self.process_group_nodes_args( + pargs, + nodes_order_property="name", + group_order_property="name", + ) + retry_params_default = app_cfg.common.btmesh_retry_params_default + retry_params = self.process_btmesh_retry_params(pargs, retry_params_default) + fw_info_list = app_btmesh.dfu_clt.get_info( + elem_index=app_cfg.dfu_clt.elem_index, + server_addrs=elem_addrs, + first_index=pargs.fw_idx, + max_entries=1, + group_addr=group_addr, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + retry_params=retry_params, + ) + rows = [] + columns = self.process_column_args(pargs, self.DFU_INFO_COLUMNS) + for fw_info in fw_info_list: + elem_str = app_ui.elem_str(fw_info.server_addr) + fw_idx_str = str(pargs.fw_idx) + status_str = fw_info.status.pretty_name + if fw_info.status == FwUpdateStatus.SUCCESS: + fwid_str = app_ui.fwid_str(fw_info.fwid) + uri_str = fw_info.uri + else: + fwid_str = None + uri_str = None + rows.append( + { + "elem": elem_str, + "fw_index": fw_idx_str, + "status": status_str, + "fwid": fwid_str, + "uri": uri_str, + } + ) + app_ui.table_info(rows, columns=columns) + + def dfu_start_cmd(self, pargs): + self.last_progress = -1 + self.last_dfu_state = FwUpdateStep.UNKNOWN_VALUE + if not pargs.fw_image_path.exists(): + self.current_parser.error( + f'The FW image file does not exists on "{pargs.fw_image_path}" path.' + ) + with open(pargs.fw_image_path, "rb") as content_file: + fw_data = content_file.read() + app_ui.info( + f"FW data ({len(fw_data)} bytes) is loaded from " f"{pargs.fw_image_path}." + ) + group_addr, nodes, elem_addrs = self.process_group_nodes_args( + pargs, + nodes_order_property="name", + group_order_property="name", + ) + retry_params_default = app_cfg.common.btmesh_retry_params_default + retry_params = self.process_btmesh_retry_params(pargs, retry_params_default) + fw_idxs = [pargs.fw_idx] * len(elem_addrs) + receivers = [ + FwReceiver(addr, fw_idx) for addr, fw_idx in zip(elem_addrs, fw_idxs) + ] + if pargs.transfer_mode == "push": + transfer_mode = BlobTransferMode.PUSH + else: + transfer_mode = BlobTransferMode.PULL + fwid = pargs.fwid + metadata = pargs.metadata + timeout_base = pargs.timeout_base + multicast_threshold = pargs.multicast_threshold + appkey_index = pargs.appkey_idx + ttl = pargs.ttl + chunk_size_pref = pargs.chunk_size + app_btmesh.subscribe( + "btmesh_levt_dfu_fw_update_progress", + self.handle_fw_update_progress, + ) + try: + dfu_state, receivers_info = app_btmesh.dfu_clt.fw_update( + elem_index=app_cfg.dfu_clt.elem_index, + group_addr=group_addr, + receivers=receivers, + fwid=fwid, + metadata=metadata, + fw_data=fw_data, + timeout_base=timeout_base, + transfer_mode=transfer_mode, + chunk_size_pref=chunk_size_pref, + virtual_addr=bytes(), + multicast_threshold=multicast_threshold, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params, + ) + fwid_str = app_ui.fwid_str(fwid) + if dfu_state == FwUpdateStep.IDLE: + app_ui.info( + f"The FW Update procedure with {fwid_str} FWID is cancelled " + f"on the Initiator." + ) + elif dfu_state in (FwUpdateStep.COMPLETED, FwUpdateStep.FAILED): + app_ui.info( + f"The FW Update procedure with {fwid_str} FWID is " + f"{dfu_state.pretty_name} on the Initiator." + ) + rows = [] + for rec_info in receivers_info: + rec_info_dict = { + "Address": f"0x{rec_info.server_addr:04X}", + "FW Idx": f"{rec_info.fw_index}", + "Phase": rec_info.phase.pretty_name, + "BLOB status": rec_info.mbt_status.pretty_name, + "DFU status": rec_info.dfu_status.pretty_name, + } + rows.append(rec_info_dict) + app_ui.table_info(rows) + except BGLibExtSyncSignalException: + # If an updating node does not respond then the cancellation might + # be as long as the FW update client timeout. + client_timeout = round( + btmesh.util.dfu_calc_client_timeout( + timeout_base=timeout_base, + ttl=ttl, + ) + ) + app_ui.info( + f"The FW Update cancellation procedure is started on Initiator. " + f"The cancellation procedure might last for {client_timeout} " + f"seconds." + ) + app_btmesh.dfu_clt.cancel_fw_update( + elem_index=app_cfg.dfu_clt.elem_index, + timeout_base=timeout_base, + ttl=ttl, + retry_params=retry_params, + ) + fwid_str = app_ui.fwid_str(fwid) + app_ui.info( + f"The FW Update procedure with {fwid_str} FWID is cancelled " + f"on the Initiator." + ) + finally: + app_btmesh.unsubscribe( + "btmesh_levt_dfu_fw_update_progress", + self.handle_fw_update_progress, + ) + + def handle_fw_update_progress(self, event: FwUpdateProgressEvent): + if ( + event.dfu_state != self.last_dfu_state + and event.dfu_state == FwUpdateStep.TRANSFERRING_IMAGE + ): + # It looks better if the transfer active phase change is shown + # before the fw update progress. + app_ui.info(f"FW update state is changed to {event.dfu_state.pretty_name}.") + self.last_dfu_state = event.dfu_state + if event.dfu_state not in ( + FwUpdateStep.IDLE, + FwUpdateStep.FAILED, + FwUpdateStep.UNKNOWN_VALUE, + ): + active_receivers_progress = [ + r.progress + for r in event.receivers_info + if r.phase == FwReceiverPhase.TRANSFER_IN_PROGRESS + ] + if active_receivers_progress: + progress = min(active_receivers_progress) + elif 0 < self.last_progress: + progress = 100 + else: + progress = self.last_progress + if progress != self.last_progress: + app_ui.info(f"FW update progress: {progress:3d}%") + self.last_progress = progress + if ( + event.dfu_state != self.last_dfu_state + and event.dfu_state != FwUpdateStep.TRANSFERRING_IMAGE + ): + app_ui.info(f"FW update state is changed to {event.dfu_state.pretty_name}.") + self.last_dfu_state = event.dfu_state + + +dfu_cmd = BtmeshDfuCmd() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cmd/dist.py b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/dist.py new file mode 100644 index 00000000000..37963fc88d5 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/dist.py @@ -0,0 +1,846 @@ +# 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. + +import math +from pathlib import Path +from typing import List, Optional, Tuple, Union + +import btmesh.util +from bgapix.bglibx import BGLibExtSyncSignalException +from btmesh.dfu import FwReceiver +from btmesh.dist import (FwDistDistributionProgressEvent, FwDistFwStatus, + FwDistPhase, FwDistStatus, FwDistUploadProgressEvent, + FwReceiverPhase) +from btmesh.mbt import BlobTransferMode + +from ..btmesh import app_btmesh +from ..cfg import app_cfg +from ..db import app_db +from ..ui import app_ui +from ..util.argparsex import ArgumentParserExt +from .cmd import BtmeshCmd + + +class BtmeshDistCmd(BtmeshCmd): + @property + def parser(self) -> ArgumentParserExt: + return self.dist_parser + + @property + def current_parser(self) -> Optional[ArgumentParserExt]: + return getattr(self, "_current_parser", self.parser) + + def create_parser(self, subparsers) -> ArgumentParserExt: + self.dist_parser = subparsers.add_parser( + "dist", + prog="dist", + help="Upload, start distribution, delete FW images and query " + "capabilities and FW list from distributor.", + description="Upload, start distribution, delete FW images and query " + "capabilities and FW list from distributor. " + "The upload command transfers the FW image to the distributor node " + "which stores it in its FW list. " + "The delete and delete all commands remove the specified FW or all " + "FW images from the FW list of the distributor. " + "The start command initiates the distribution procedure on the " + "distributor over the specified nodes to perform FW update. " + "The info command queries and shows the capabilities and FW list " + "of the distributor.", + exit_on_error_ext=False, + ) + self.dist_subparser = self.dist_parser.add_subparsers( + dest="dist_subcmd_name", + title="Subcommands", + required=True, + ) + self.subparser_dict = dict( + ( + self.create_dist_info_parser(self.dist_subparser), + self.create_dist_upload_parser(self.dist_subparser), + self.create_dist_delete_parser(self.dist_subparser), + self.create_dist_start_parser(self.dist_subparser), + ) + ) + return self.dist_parser + + def add_appkey_index_arg(self, parser: ArgumentParserExt) -> None: + parser.add_argument( + "--appkey-idx", + "-a", + type=int, + default=app_cfg.dist_clt.appkey_index_default, + help="Appkey index used for sending FW Distribution messages. " + "(default: %(default)s)", + ) + + def add_ttl_arg(self, parser: ArgumentParserExt) -> None: + parser.add_argument( + "--ttl", + "-t", + type=int, + default=app_cfg.dist_clt.ttl_default, + help="TTL used for sending FW Distribution messages. " + "(default: %(default)s)", + ) + + def add_distributor_arg(self, parser: ArgumentParserExt) -> None: + parser.add_argument( + "--distributor", + "-d", + metavar="", + required=True, + help=f"Specifies the target distributor element address. " + f"If the elemspec is resolved to multiple element addresses then " + f"the first one is selected. " + f"{app_ui.ELEMSPEC_HELP} {app_ui.NODESPEC_HELP}", + ) + + def add_fwid_arg( + self, + parser: Union[ArgumentParserExt, object], + required=True, + help="Firmware identifier belonging to FW image.", + ) -> None: + parser.add_argument( + "--fwid", + "-f", + metavar="", + type=self.parse_fwidspec, + required=required, + help=f"{help} {app_ui.FWIDSPEC_HELP}", + ) + + def add_metadata_arg( + self, + parser: ArgumentParserExt, + required=False, + help="Metadata belonging to FW image.", + ) -> None: + parser.add_argument( + "--metadata", + "-m", + metavar="", + type=self.parse_metaspec, + required=required, + default=bytes(), + help=f"{help} {app_ui.METASPEC_HELP}", + ) + + def create_dist_info_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "info" + self.dist_info_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Query the FW list and capabilities from the distributor.", + description="Query the FW list and capabilities from the distributor.", + exit_on_error_ext=False, + ) + self.dist_info_parser.set_defaults(dist_subcmd=self.dist_info_cmd) + self.dist_info_target_group = ( + self.dist_info_parser.add_mutually_exclusive_group(required=True) + ) + self.dist_info_target_group.add_argument( + "--capabilities", + "-c", + action="store_true", + help="Query the FW Distribution Server capabilities.", + ) + self.dist_info_target_group.add_argument( + "--fw-list-idx", + "-i", + type=int, + nargs="+", + help="Distribution FW image list indexes which shall be queried.", + ) + self.dist_info_target_group.add_argument( + "--fw-list", + "-l", + action="store_true", + help="Query the FW Distribution Server FW image list.", + ) + self.add_distributor_arg(self.dist_info_parser) + self.add_appkey_index_arg(self.dist_info_parser) + self.add_ttl_arg(self.dist_info_parser) + self.add_basic_retry_args( + self.dist_info_parser, + retry_max_default=app_cfg.dist_clt.dist_retry_max_default, + retry_interval_default=app_cfg.dist_clt.dist_retry_interval_default, + retry_max_help=( + "Maximum number of additional Firmware Distribution Capabilities " + "Get or Firmware Distribution Firmware Get by Index messages " + "which are sent until the corresponding status message is not " + "received from the Firmware Distribution Server. " + "(default: %(default)s)" + ), + retry_interval_help=( + "Interval in seconds between Firmware Distribution Capabilities " + "Get or Firmware Distribution Firmware Get by Index messages " + "when the corresponding status message is not received from the " + "Firmware Distribution Server. " + "(default: %(default)s)" + ), + ) + return SUBPARSER_NAME, self.dist_info_parser + + def create_dist_upload_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "upload" + self.dist_upload_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Upload selected FW image to the Distributor.", + description="Upload selected FW image to the Distributor. " + "If a signal (Ctrl+C or Command+.) is raised by the user during the " + "firmware upload then the upload is canceled.", + exit_on_error_ext=False, + ) + self.dist_upload_parser.set_defaults(dist_subcmd=self.dist_upload_cmd) + self.dist_upload_parser.add_argument( + "fw_image_path", + type=Path, + help="Path of FW image file which shall be uploaded.", + ) + self.add_distributor_arg(self.dist_upload_parser) + self.add_fwid_arg(self.dist_upload_parser) + self.add_metadata_arg(self.dist_upload_parser) + self.dist_upload_parser.add_argument( + "--timeout-base", + "-T", + type=int, + default=app_cfg.dist_clt.upload_timeout_base_default, + help=f"The timeout base of FW upload including the upload start-status " + f"timeout and BLOB Transfer timeout. {app_ui.DFU_CALC_TIMEOUT_HELP} " + "(default: %(default)s)", + ) + self.add_chunk_size_arg( + self.dist_upload_parser, default=app_cfg.dist_clt.upload_chunk_size_default + ) + self.add_appkey_index_arg(self.dist_upload_parser) + self.add_ttl_arg(self.dist_upload_parser) + self.add_retry_interval_arg( + self.dist_upload_parser, + default=app_cfg.dist_clt.dist_retry_interval_default, + help=( + "Interval in seconds between Firmware Distribution Upload Start " + "or Firmware Distribution Upload Cancel messages when the " + "corresponding status message is not received from the Firmware " + "Distribution Server. " + "This retry interval is used for BLOB Transfer phase of Firmware " + "Upload procedure as the repetition rate of BLOB Transfer " + "messages when the corresponding BLOB Transfer status message is " + "not received from the BLOB Transfer Server on the Distributor. " + "(default: %(default)s)" + ), + ) + return SUBPARSER_NAME, self.dist_upload_parser + + def create_dist_delete_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "delete" + self.dist_delete_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Delete one or more FW image on a Distributor.", + description="Delete one or more FW image on a Distributor. " + "If no FWID is specified with --fwid option then all firmware " + "images are deleted from the FW image list.", + exit_on_error_ext=False, + ) + self.dist_delete_parser.set_defaults(dist_subcmd=self.dist_delete_cmd) + self.add_distributor_arg(self.dist_delete_parser) + self.add_fwid_arg( + self.dist_delete_parser, + required=False, + help="Firmware identifier of FW image which shall be deleted.", + ) + self.add_appkey_index_arg(self.dist_delete_parser) + self.add_ttl_arg(self.dist_delete_parser) + self.add_basic_retry_args( + self.dist_delete_parser, + retry_max_default=app_cfg.dist_clt.delete_retry_max_default, + retry_interval_default=app_cfg.dist_clt.delete_retry_interval_default, + retry_max_help=( + "Maximum number of additional Firmware Distribution Firmware " + "Delete or Firmware Distribution Firmware Delete All messages " + "which are sent until the corresponding status message is not " + "received from the Firmware Distribution Server. " + "(default: %(default)s)" + ), + retry_interval_help=( + "Interval in seconds between Firmware Distribution Firmware " + "Delete or Firmware Distribution Firmware Delete All messages " + "when the corresponding status message is not received from the " + "Firmware Distribution Server. " + "(default: %(default)s)" + ), + ) + return SUBPARSER_NAME, self.dist_delete_parser + + def create_dist_start_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "start" + self.dist_start_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Start distribution of specified FW image to the selected nodes.", + description="Start distribution of specified FW image to the selected nodes.", + exit_on_error_ext=False, + ) + self.dist_start_parser.set_defaults(dist_subcmd=self.dist_start_cmd) + self.add_distributor_arg(self.dist_start_parser) + self.dist_start_fw_group = self.dist_start_parser.add_mutually_exclusive_group( + required=True + ) + self.add_fwid_arg( + self.dist_start_fw_group, + required=False, + help=( + "Firmware identifier of the FW image in the firmware image list " + "of the distributor which shall be used for FW update." + ), + ) + self.dist_start_fw_group.add_argument( + "--fw-list-idx", + "-i", + type=int, + help=( + "Index of the FW image in the firmware image list of the " + "distributor which shall be used for FW update." + ), + ) + self.dist_start_parser.add_argument( + "--transfer-mode", + "-m", + default="push", + choices=["push", "pull"], + help="Transfer mode for the BLOB transfer phase of distribution. " + "The LPN nodes usually use pull mode. " + "(default: %(default)s)", + ) + self.dist_start_parser.add_argument( + "--timeout-base", + "-T", + type=int, + default=app_cfg.dist_clt.dist_timeout_base_default, + help=f"The timeout base used for FW distribution including FW update " + f"message procedures and BLOB transfer. {app_ui.DFU_CALC_TIMEOUT_HELP} " + "(default: %(default)s)", + ) + self.dist_start_parser.add_argument( + "--dist-appkey-idx", + "-A", + type=int, + default=app_cfg.dist_clt.dist_appkey_index_default, + help="Appkey index used for the communication between the " + "Distributor and Updating Nodes. (default: %(default)s)", + ) + self.dist_start_parser.add_argument( + "--dist-ttl", + type=int, + default=app_cfg.dist_clt.dist_ttl_default, + help="The TTL for the Distributor to use when communicating with " + "the Updating Nodes. (default: %(default)s)", + ) + self.add_appkey_index_arg(self.dist_start_parser) + self.add_ttl_arg(self.dist_start_parser) + self.dist_start_parser.add_argument( + "--fw-idx", + type=int, + default=0, + help=( + "Index of the firmware on updating nodes which shall be updated." + "(default: %(default)s)" + ), + ) + self.dist_start_parser.add_argument( + "--poll-int", + type=float, + default=app_cfg.dist_clt.dist_poll_int_default, + help=( + "Poll interval for distribution progress reporting in seconds." + "(default: %(default)s)" + ), + ) + self.add_btmesh_basic_retry_args( + self.dist_start_parser, + retry_max_default=app_cfg.dist_clt.dist_retry_max_default, + retry_interval_default=app_cfg.dist_clt.dist_retry_interval_default, + retry_interval_lpn_default=app_cfg.dist_clt.dist_retry_interval_lpn_default, + retry_max_help=( + "Maximum number of additional Firmware Distribution messages " + "which are sent until the corresponding status message is not " + "received from the Firmware Distribution Server. " + "For example: FW Distribution Receivers Add/Delete All/Get or " + "FW Distribution Start/Get/Cancel messages. " + "This argument is used during Firmware Metadata Check procedure " + "as well at the beginning of the Distribution and it determines " + "the default maximum number of additional Firmware Update " + "Firmware Metadata Check messages which are sent until the " + "corresponding status messages are not received from each " + "updating node. " + "(default: %(default)s)" + ), + retry_interval_help=( + "Interval in seconds between Firmware Distribution messages when " + "the corresponding status message is not received from the " + "Firmware Distribution Server. " + "For example: FW Distribution Receivers Add/Delete All/Get or " + "FW Distribution Start/Get/Cancel messages. " + "This argument is used during Firmware Metadata Check procedure " + "as well at the beginning of the Distribution. It determines " + "the default interval in seconds between Firmware Update " + "Firmware Metadata Check messages when the corresponding " + "status messages are not received from each updating node. " + "(default: %(default)s)" + ), + retry_interval_lpn_help=( + "Interval in seconds between Firmware Update Firmware Metadata " + "Check messages at the beginning of the Distribution when the " + "corresponding status messages are not received from each " + "updating node. " + "Note: Distributor should not be Low Power Node so this argument " + "doesn't affect the retransmission of Distribution messages. " + "(default: %(default)s)" + ), + ) + self.add_group_nodes_args( + self.dist_start_parser, + add_elem_arg=True, + add_elem_addrs_arg=True, + elem_default=0, + group_addr_help=( + f"Group address used for the Firmware Distribution procedure. " + f"The FW Update Server and BLOB Transfer Server models shall " + f"be subscribed to specified group address. " + f"If it is unassigned address (0) then the FW Distribution Server " + f"sends FW Update and BLOB Transfer BT Mesh messages to each " + f"updating node one by one to the element address of FW Update " + f"Server and BLOB Transfer Server models." + ), + group_help=( + f"Select the app group which contains group address and updating " + f"nodes which shall participate in the firmware update. " + f"The group address of the app group is used as the distribution " + f"group address. For further details see {self.GROUP_ADDR_OPTS} " + f"option. " + f"The nodes of the app group are the receivers of the FW image " + f"in the FW Distribution procedure. For further details see " + f"{self.NODES_OPTS} option." + ), + nodes_help=( + f"Select the updating nodes which shall participate in the " + f"firmware update. The FW Distribution procedure requires the " + f"receivers which are the element (unicast) addresses of the " + f"updating nodes. Those element addresses shall be selected " + f"where the FW Update Server and BLOB Transfer Server models " + f"are located on the updating node. " + f"The {self.NODES_OPTS} option selects nodes only so in order " + f"to specify the proper element address the {self.ELEM_OPTS} " + f"option shall be used as well. " + f"The element addresses can be specified directly by the " + f"{self.ELEM_ADDRS_OPTS} option." + ), + elem_help=( + f"Select element on the updating nodes where the FW Update Server " + f"and BLOB Transfer Server models are located by element index. " + f"This option is mandatory when {self.NODES_OPTS} or " + f"{self.GROUP_OPTS} is used because those selects the nodes only." + ), + elem_addrs_help=( + f"Select the updating nodes which participate in the firmware " + f"update by selecting the element addresses of the updating " + f"nodes with FW Update Server and BLOB Transfer Server models. " + f"If {self.ELEM_ADDRS_OPTS} is used then {self.NODES_OPTS} and " + f"{self.GROUP_OPTS} and {self.ELEM_OPTS} shall not be used." + ), + ) + return SUBPARSER_NAME, self.dist_start_parser + + def __call__(self, arg) -> bool: + pargs = self.parser.parse_args(arg.split()) + self._current_parser = self.subparser_dict.get( + pargs.dist_subcmd_name, self.parser + ) + pargs.dist_subcmd(pargs) + self._current_parser = self.parser + return False + + def dist_info_cmd(self, pargs): + nodes = app_db.btmesh_db.get_node_list(order_property="name") + dist_addr = self.parse_elemspecs(pargs.distributor, nodes)[0] + # The retry_cmd_max and retry_cmd_interval are used only because the + # other parameters are overwritten by the arguments of conf ae command + retry_params_default = app_cfg.common.retry_params_default + retry_params = self.process_retry_params(pargs, retry_params_default) + if pargs.capabilities: + capabilities = app_btmesh.dist_clt.get_capabilities( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + retry_params=retry_params, + ) + max_fw_size = capabilities.max_fw_size + max_fw_size_kb = math.floor(max_fw_size / 1024) + max_upload_space = capabilities.max_upload_space + max_upload_space_kb = math.floor(max_upload_space / 1024) + rem_upload_space = capabilities.remaining_upload_space + rem_upload_space_kb = math.floor(rem_upload_space / 1024) + app_ui.info( + f"Max upload space: {max_upload_space} bytes " + f"({max_upload_space_kb}kB)" + ) + app_ui.info( + f"Remaining upload space: {rem_upload_space} bytes " + f"({rem_upload_space_kb}kB)" + ) + app_ui.info(f"Max FW image size: {max_fw_size} bytes ({max_fw_size_kb}kB)") + app_ui.info(f"Max FW image list size: {capabilities.max_fw_list_size}") + app_ui.info( + f"Max distribution receiver list size: " + f"{capabilities.max_nodes_list_size}" + ) + app_ui.info( + f"OOB support: {capabilities.oob_supported.pretty_name.lower()}" + ) + elif pargs.fw_list: + fw_status = app_btmesh.dist_clt.get_fw_by_index( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + index=0, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + err_on_fw_miss=False, + retry_params=retry_params, + ) + if fw_status.status == FwDistStatus.FWID_NOT_FOUND: + app_ui.info("The FW image list is empty on the Distributor.") + elif fw_status.status == FwDistStatus.SUCCESS: + fw_img_status_list = [fw_status] + for index in range(1, fw_status.num_entries): + # All FW image indexes of the loop shall exist on the FW + # Distribution Server because the iteration utilizes the + # Entry Count field of the just received FW Distribution + # FW Status message. + fw_status = app_btmesh.dist_clt.get_fw_by_index( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + index=index, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + err_on_fw_miss=True, + retry_params=retry_params, + ) + if fw_status.status == FwDistStatus.SUCCESS: + fw_img_status_list.append(fw_status) + rows = [] + for fw_status in fw_img_status_list: + fwid_str = app_ui.fwid_str(fw_status.fwid) + rows.append({"Index": fw_status.index, "FWID": fwid_str}) + app_ui.table_info(rows) + elif pargs.fw_list_idx: + fw_img_status_list: List[FwDistFwStatus] = [] + for index in pargs.fw_list_idx: + fw_status = app_btmesh.dist_clt.get_fw_by_index( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + index=index, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + err_on_fw_miss=False, + retry_params=retry_params, + ) + fw_img_status_list.append(fw_status) + rows = [] + for fw_status in fw_img_status_list: + if fw_status.status == FwDistStatus.SUCCESS: + fwid_str = app_ui.fwid_str(fw_status.fwid) + else: + fwid_str = "None" + status_str = fw_status.status.pretty_name + rows.append( + {"Index": fw_status.index, "Status": status_str, "FWID": fwid_str} + ) + app_ui.table_info(rows) + + def dist_upload_cmd(self, pargs): + if not pargs.fw_image_path.exists(): + self.current_parser.error( + f'The FW image file does not exists on "{pargs.fw_image_path}" path.' + ) + with open(pargs.fw_image_path, "rb") as content_file: + fw_data = content_file.read() + app_ui.info( + f"FW data ({len(fw_data)} bytes) is loaded from " f"{pargs.fw_image_path}." + ) + nodes = app_db.btmesh_db.get_node_list(order_property="name") + dist_addr = self.parse_elemspecs(pargs.distributor, nodes)[0] + retry_params_default = app_cfg.common.retry_params_default + retry_params = self.process_retry_params(pargs, retry_params_default) + retry_params.retry_max = app_btmesh.dist_clt.calc_retry_max( + retry_interval=retry_params.retry_interval, + timeout_base=pargs.timeout_base, + ttl=pargs.ttl, + ) + retry_params.retry_cmd_max = app_btmesh.dist_clt.calc_retry_cmd_max( + retry_cmd_interval=retry_params.retry_cmd_interval, + timeout_base=pargs.timeout_base, + ttl=pargs.ttl, + ) + app_btmesh.subscribe( + "btmesh_levt_dist_upload_progress", + self.handle_dist_upload_progress, + ) + try: + app_btmesh.dist_clt.upload( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + fwid=pargs.fwid, + fw_data=fw_data, + metadata=pargs.metadata, + timeout_base=pargs.timeout_base, + chunk_size_pref=pargs.chunk_size, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + retry_interval=retry_params.retry_interval, + retry_cmd_interval=retry_params.retry_cmd_interval, + ) + app_db.add_fwid_metadata_pair(pargs.fwid, pargs.metadata) + app_ui.info( + f"Firmware with {app_ui.fwid_str(pargs.fwid)} FWID is uploaded " + f"to Distributor (0x{dist_addr:04X})." + ) + except BGLibExtSyncSignalException as e: + app_btmesh.dist_clt.cancel_upload( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + retry_params=retry_params, + ) + app_ui.info("Firmware upload canceled.") + finally: + app_btmesh.unsubscribe( + "btmesh_levt_dist_upload_progress", + self.handle_dist_upload_progress, + ) + + def handle_dist_upload_progress(self, event: FwDistUploadProgressEvent): + progress_percentage = 100 * event.done_bytes / event.fw_size + app_ui.info(f"Upload progress: {progress_percentage:5.2f}%") + + def dist_delete_cmd(self, pargs): + nodes = app_db.btmesh_db.get_node_list(order_property="name") + dist_addr = self.parse_elemspecs(pargs.distributor, nodes)[0] + retry_params_default = app_cfg.common.retry_params_default + retry_params = self.process_retry_params(pargs, retry_params_default) + if pargs.fwid: + app_btmesh.dist_clt.delete_fw( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + fwid=pargs.fwid, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + retry_params=retry_params, + ) + app_ui.info( + f"Firmware image with {app_ui.fwid_str(pargs.fwid)} FWID is " + f"deleted on Distributor (0x{dist_addr:04X})" + ) + else: + app_btmesh.dist_clt.delete_all_fw( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + retry_params=retry_params, + ) + app_ui.info( + f"All firmware images are deleted on Distributor (0x{dist_addr:04X})" + ) + + def dist_start_cmd(self, pargs): + self.last_progress = -1 + self.last_dist_phase = FwDistPhase.UNKNOWN_VALUE + nodes = app_db.btmesh_db.get_node_list(order_property="name") + dist_addr = self.parse_elemspecs(pargs.distributor, nodes)[0] + group_addr, nodes, elem_addrs = self.process_group_nodes_args( + pargs, + nodes_order_property="name", + group_order_property="name", + ) + retry_params_default = app_cfg.common.btmesh_retry_params_default + retry_params = self.process_btmesh_retry_params(pargs, retry_params_default) + fw_list_idx = pargs.fw_list_idx + fwid = pargs.fwid + if fwid: + fw_status = app_btmesh.dist_clt.get_fw( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + fwid=fwid, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + err_on_fw_miss=False, + retry_params=retry_params.to_base(), + ) + if fw_status.status == FwDistStatus.FWID_NOT_FOUND: + raise ValueError( + f"The {app_ui.fwid_str(fw_status.fwid)} FWID does not exist in " + f"the FW image list of the Distributor (0x{dist_addr:04X})." + ) + fw_list_idx = fw_status.index + else: + fw_status = app_btmesh.dist_clt.get_fw_by_index( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + index=fw_list_idx, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + err_on_fw_miss=False, + retry_params=retry_params.to_base(), + ) + if fw_status.status == FwDistStatus.FWID_NOT_FOUND: + raise ValueError( + f"The firmware with {fw_list_idx} FW list index does not exist " + f"in the FW image list of the Distributor (0x{dist_addr:04X})." + ) + fwid = fw_status.fwid + fw_idxs = [pargs.fw_idx] * len(elem_addrs) + receivers = [ + FwReceiver(addr, fw_idx) for addr, fw_idx in zip(elem_addrs, fw_idxs) + ] + if pargs.transfer_mode == "push": + transfer_mode = BlobTransferMode.PUSH + else: + transfer_mode = BlobTransferMode.PULL + app_btmesh.subscribe( + "btmesh_levt_dist_distribution_progress", + self.handle_distribution_progress, + ) + # The metadata is stored at upload and it is queried by the FWID. + # This is important because there is a metadata check at the beginning + # of the distribution in order to obtain additional information which + # determines whether the node becomes unprovisioned after the FW update + # or not. The metadata can't be queried from the distributor because the + # Firmware Distribution Firmware Status message contains the FWID only. + metadata = app_db.get_metadata_by_fwid(fwid=fwid, default=bytes()) + try: + dist_status, receivers_info = app_btmesh.dist_clt.distribution( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + group_addr=group_addr, + receivers=receivers, + fw_list_index=fw_list_idx, + dist_timeout_base=pargs.timeout_base, + dist_appkey_index=pargs.dist_appkey_idx, + dist_ttl=pargs.dist_ttl, + metadata=metadata, + transfer_mode=transfer_mode, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + dist_poll_int=pargs.poll_int, + retry_params=retry_params, + ) + if dist_status.phase == FwDistPhase.IDLE: + app_ui.info( + f"The FW distribution of {fw_list_idx} FW list index " + f"is cancelled on the Distributor (0x{dist_addr:04X})." + ) + elif dist_status.phase in (FwDistPhase.COMPLETED, FwDistPhase.FAILED): + app_ui.info( + f"The FW distribution of {fw_list_idx} FW list index is " + f"{dist_status.phase.pretty_name} on the Distributor " + f"(0x{dist_addr:04X})." + ) + rows = [] + for rec_info in receivers_info: + rec_info_dict = { + "Address": f"0x{rec_info.server_addr:04X}", + "FW Idx": f"{rec_info.fw_index}", + "Phase": rec_info.phase.pretty_name, + "BLOB status": rec_info.mbt_status.pretty_name, + "DFU status": rec_info.dfu_status.pretty_name, + } + rows.append(rec_info_dict) + app_ui.table_info(rows) + except BGLibExtSyncSignalException: + # If an updating node does not respond then the cancellation might + # be as long as the distribution client timeout. The distributor is + # poll interval might delay the detection of completed cancellation. + client_timeout = btmesh.util.dfu_calc_client_timeout( + timeout_base=pargs.timeout_base, + ttl=pargs.dist_ttl, + ) + cancel_max_duration = round(client_timeout + pargs.poll_int) + app_ui.info( + f"The FW distribution cancellation procedure is started on the " + f"Distributor (0x{dist_addr:04X}). The cancellation procedure " + f"might last for {cancel_max_duration} seconds." + ) + app_btmesh.dist_clt.cancel_distribution( + elem_index=app_cfg.dist_clt.elem_index, + dist_addr=dist_addr, + appkey_index=pargs.appkey_idx, + ttl=pargs.ttl, + dist_poll_int=pargs.poll_int, + retry_params=retry_params.to_base(), + ) + app_ui.info( + f"The FW distribution of {fw_list_idx} FW list index " + f"is cancelled on the Distributor (0x{dist_addr:04X})." + ) + finally: + app_btmesh.unsubscribe( + "btmesh_levt_dist_distribution_progress", + self.handle_distribution_progress, + ) + + def handle_distribution_progress(self, event: FwDistDistributionProgressEvent): + if ( + event.dist_status.phase != self.last_dist_phase + and event.dist_status.phase == FwDistPhase.TRANSFER_ACTIVE + ): + # It looks better if the transfer active phase change is shown + # before the distribution progress. + app_ui.info( + f"Distribution phase is changed to " + f"{event.dist_status.phase.pretty_name}." + ) + self.last_dist_phase = event.dist_status.phase + if event.dist_status.phase not in (FwDistPhase.IDLE, FwDistPhase.UNKNOWN_VALUE): + active_receivers_progress = [ + r.progress + for r in event.receivers_info + if r.phase == FwReceiverPhase.TRANSFER_IN_PROGRESS + ] + if active_receivers_progress: + progress = min(active_receivers_progress) + elif 0 < self.last_progress: + progress = 100 + else: + progress = self.last_progress + if progress != self.last_progress: + app_ui.info(f"Distribution transfer progress: {progress:3d}%") + self.last_progress = progress + if ( + event.dist_status.phase != self.last_dist_phase + and event.dist_status.phase != FwDistPhase.TRANSFER_ACTIVE + ): + app_ui.info( + f"Distribution phase is changed to " + f"{event.dist_status.phase.pretty_name}." + ) + self.last_dist_phase = event.dist_status.phase + + +dist_cmd = BtmeshDistCmd() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cmd/group.py b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/group.py new file mode 100644 index 00000000000..221e5ad9a69 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/group.py @@ -0,0 +1,971 @@ +# 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. + +from typing import Dict, Iterable, Optional, Set, Tuple + +from btmesh.db import ModelID +from btmesh.util import BtmeshRetryParams + +from ..cfg import BtmeshDfuAppMdlProfile, app_cfg +from ..db import app_db +from ..grpctrl import app_grctrl +from ..ui import app_ui +from ..util.argparsex import ArgumentParserExt +from .cmd import BtmeshCmd + + +class BtmeshGroupCmd(BtmeshCmd): + @property + def parser(self) -> ArgumentParserExt: + return self.group_parser + + @property + def current_parser(self) -> Optional[ArgumentParserExt]: + return getattr(self, "_current_parser", self.parser) + + def create_parser(self, subparsers) -> ArgumentParserExt: + self.group_parser = subparsers.add_parser( + "group", + prog="group", + help="Add, remove, update, rename and list app groups.", + description="Add, remove, update and list app groups. " + "App group update operation adds or removes models of node elements " + "to or from existing app groups and modifies group address, appkey " + "index and some publication parameters as well. " + "App group contains node elements (unicast address) which contains " + "specified models which shall subscribe or publish to the same " + "group address with the same application key.", + epilog=f"Many subcommand options of %(prog)s expects and " + f" type parameters. In order to avoid repetition and make " + f"the argument help text shorter these are introduced in this epilog. " + f"{app_ui.MDLSPEC_HELP} {app_ui.ELEMSPEC_HELP} {app_ui.NODESPEC_HELP}", + exit_on_error_ext=False, + ) + self.group_parser.set_defaults(group_subcmd=self.group_list_cmd) + self.group_subparser = self.group_parser.add_subparsers( + dest="group_subcmd_name", + title="Subcommands", + description="If no subcommand is provided then it defaults to 'list'.", + ) + self.subparser_dict = dict( + ( + self.create_group_add_parser(self.group_subparser), + self.create_group_update_parser(self.group_subparser), + self.create_group_list_parser(self.group_subparser), + self.create_group_info_parser(self.group_subparser), + ) + ) + return self.group_parser + + def add_pub_param_args(self, parser: ArgumentParserExt): + parser.add_argument( + "--pub-ttl", + "-t", + type=int, + default=app_cfg.appgroup.pub_ttl_default, + help="Publication Time-To-Live value of the app group. " + "Valid publication TTL range is 0 or [2,127] and the special 255 value " + "can be set to use default TTL of the node. (default: %(default)s)", + ) + parser.add_argument( + "--pub-cred", + "-c", + type=int, + default=app_cfg.appgroup.pub_cred_default, + help="Publication credentials of the app group. " + "Friendship credential flag. If zero, publication is done using " + "normal credentials. If one, it is done with friendship credentials, " + "meaning only the friend can decrypt the published message and relay " + "it forward using the normal credentials. The default value is 0. " + "(default: %(default)s)", + ) + parser.add_argument( + "--pub-period", + "-T", + type=int, + default=app_cfg.appgroup.pub_period_ms_default, + help="Publication period in milliseconds of the app group." + "Note that the resolution of the publication period is limited by " + "the specification to 100ms up to a period of 6.3s, 1s up to a " + "period of 63s, 10s up to a period of 630s, and 10 minutes above that." + "Maximum period allowed is 630 minutes. (default: %(default)s)", + ) + parser.add_argument( + "--pub-tx-cnt", + "-k", + type=int, + default=app_cfg.appgroup.pub_tx_cnt_default, + help="Publication retransmission count of the app group. " + "Valid values range from 0 to 7. (default: %(default)s)", + ) + parser.add_argument( + "--pub-tx-int", + "-i", + type=int, + default=app_cfg.appgroup.pub_tx_int_ms_default, + help="Publication retransmission interval in millisecond units of " + "the app group. The range of value is 50 to 1600 ms, and the " + "resolution of the value is 50 milliseconds. (default: %(default)s)", + ) + + def add_pub_addr_mdl_args( + self, parser: ArgumentParserExt, support_remove_args=True + ): + parser.add_argument( + "--pub-mdls", + "-P", + metavar="", + default=[], + nargs="+", + help="List of models which shall publish to the app group.", + ) + parser.add_argument( + "--pub-addrs", + "-p", + metavar="", + default=[], + nargs="+", + help="List of element addresses where the specified models shall " + "publish to app group. " + "If the element address contains the subset of specified models " + "then the publication is configured only for this subset based " + "on the DCD unless --strict option is used.", + ) + if support_remove_args: + parser.add_argument( + "--rm-pub-mdls", + metavar="", + default=[], + nargs="+", + help="List of models which shall not publish to the app group " + "any longer.", + ) + parser.add_argument( + "--rm-pub-addrs", + metavar="", + default=[], + nargs="+", + help="List of element addresses where the specified models shall " + "not publish to app group any longer. " + "If the element address contains the subset of specified models " + "then the publication is configured only for this subset based " + "on the DCD unless --strict option is used.", + ) + + def add_sub_addr_mdl_args( + self, parser: ArgumentParserExt, support_remove_args=True + ): + parser.add_argument( + "--sub-mdls", + "-S", + metavar="", + default=[], + nargs="+", + help="List of models which shall subscribe to the app group.", + ) + parser.add_argument( + "--sub-addrs", + "-s", + metavar="", + default=[], + nargs="+", + help="List of element addresses where the specified models shall " + "subscribe to app group. " + "If the element address contains the subset of specified models " + "then the subscription is configured only for this subset based " + "on the DCD unless --strict option is used.", + ) + if support_remove_args: + parser.add_argument( + "--rm-sub-mdls", + metavar="", + default=[], + nargs="+", + help="List of models which shall not subscribe to the app group" + "any longer.", + ) + parser.add_argument( + "--rm-sub-addrs", + metavar="", + default=[], + nargs="+", + help="List of element addresses where the specified models shall " + "not subscribe to app group any longer. " + "If the element address contains the subset of specified models " + "then the subscription is configured only for this subset based " + "on the DCD unless --strict option is used.", + ) + + def add_bind_addr_mdl_args( + self, parser: ArgumentParserExt, support_remove_args=True + ): + parser.add_argument( + "--bind-mdls", + "-B", + metavar="", + default=[], + nargs="+", + help="List of models which shall be bound to the app group.", + ) + parser.add_argument( + "--bind-addrs", + "-b", + metavar="", + default=[], + nargs="+", + help="List of element addresses where the specified models shall " + "be bound to app group. " + "If the element address contains the subset of specified models " + "then the appkey binding is configured only for this subset based " + "on the DCD unless --strict option is used.", + ) + if support_remove_args: + parser.add_argument( + "--rm-bind-mdls", + metavar="", + default=[], + nargs="+", + help="List of models which shall not be bound to the app group " + "any longer.", + ) + parser.add_argument( + "--rm-bind-addrs", + metavar="", + default=[], + nargs="+", + help="List of element addresses where the specified models shall " + "not be bound to app group any longer." + "If the element address contains the subset of specified models " + "then the appkey binding is configured only for this subset based " + "on the DCD unless --strict option is used.", + ) + + def add_mdl_profile_args(self, parser: ArgumentParserExt, support_remove_args=True): + mdl_profile_choices = [mp.name for mp in app_cfg.appgroup.mdl_profiles] + help_text = [ + "App group model profiles make it easier to provide publication, " + "subscription and bind model parameters to app group commands. " + "A model profile name refers to these model sets from the " + "configuration file." + ] + for mp in app_cfg.appgroup.mdl_profiles: + help_text.append(f"profile_{mp.name}: {mp.help}") + parser.add_argument( + "--profile", + "-m", + default=[], + choices=mdl_profile_choices, + nargs="+", + help=" ".join(help_text), + ) + if support_remove_args: + parser.add_argument( + "--rm-profile", + default=[], + choices=mdl_profile_choices, + nargs="+", + help=" ".join(help_text), + ) + + def add_group_addr_args(self, parser: ArgumentParserExt, update=False): + GROUP_ADDR_UPDATE_WARN = "If group address is changed in an existing " + "app group then it leads to the modification of the group address on " + "each publication and subscription models of every publication and " + "subscription element addresses of the app group." + if update: + group_addr_help_ext = f" {GROUP_ADDR_UPDATE_WARN}" + else: + group_addr_help_ext = "" + parser.add_argument( + "--group-addr", + "-g", + required=True, + help=f"Group address of the app group. The selected publish models " + f"are configured to publish to this address and the selected " + f"subscription models are configured to subscribe to this address. " + f"The group address can be specified as a binary (0b), octal(0o), " + f"decimal, hex (0x) integer." + f"{group_addr_help_ext}", + ) + + def add_appkey_index_args(self, parser: ArgumentParserExt, update=False): + APPKEY_INDEX_UPDATE_WARN = "If appkey index is changed in an existing " + "app group then it leads to the modification of the appkey bindings on " + "each models of every element addresses of the app group which have " + "appkey bindings." + if update: + appkey_index_help_ext = f" {APPKEY_INDEX_UPDATE_WARN}" + else: + appkey_index_help_ext = "" + parser.add_argument( + "--appkey-idx", + "-a", + type=int, + required=True, + help="Appkey index of the app group. The appkey index is bound to " + "subscription and publish models and it used for publish messages." + f"{appkey_index_help_ext}", + ) + + def add_auto_bind_args(self, parser: ArgumentParserExt): + self.auto_bind_group = parser.add_mutually_exclusive_group() + AUTO_BIND_BASE_HELP = ( + "Automatic binding or unbinding of an appkey to model of an element" + "is {} in the app group when the publication or subscription is " + "configured on the model. If it is not specified then the auto bind " + "feature is turned {} by default (configuration option)." + ) + onoff_text = "on" if app_cfg.appgroup.auto_bind_default else "off" + AUTO_BIND_HELP = AUTO_BIND_BASE_HELP.format("enabled", onoff_text) + NO_AUTO_BIND_HELP = AUTO_BIND_BASE_HELP.format("disabled", onoff_text) + self.auto_bind_group.add_argument( + "--auto-bind", + dest="auto_bind", + action="store_const", + const=True, + help=AUTO_BIND_HELP, + ) + self.auto_bind_group.add_argument( + "--no-auto-bind", + dest="auto_bind", + action="store_const", + const=False, + help=NO_AUTO_BIND_HELP, + ) + + def add_dcd_args(self, parser: ArgumentParserExt, support_remove_args=True): + self.dcd_check_group = parser.add_mutually_exclusive_group() + onoff_text = "on" if app_cfg.appgroup.dcd_check_default else "off" + DCD_CHECK_DEFAULT = f"DCD check is turned {onoff_text} by default." + self.dcd_check_group.add_argument( + "--strict-dcd-check", + dest="dcd_check", + action="store_const", + const=True, + help=f"Strict DCD check raises an error when a model which shall be " + f"configured (publication, subscription, binding) does not exist on " + f"the specified element address based on the DCD. {DCD_CHECK_DEFAULT}", + ) + self.dcd_check_group.add_argument( + "--no-dcd-check", + dest="dcd_check", + action="store_const", + const=False, + help=f"No DCD check means that no error is raised during configuration " + f"when the target model does not exist on the specified element " + f"address based on the DCD. " + f"No DCD check is useful when different kind of elements are " + f"configured by the same command and DCD filtering is turned on " + f"because it selects the proper subset of models for the specific " + f"element addresses automatically. {DCD_CHECK_DEFAULT}", + ) + parser.add_argument( + "--skip-dcd-filter", + action="store_true", + help="The DCD filtering is used to filter out configuration operations " + "(publication, subscription, binding) when the target model does not " + "exist on the specified element address based on the DCD. " + "The DCD filtering is useful when different kind of elements are " + "configured by the same command and DCD check is turned off " + "because it selects the proper subset of models for the specific " + "element addresses automatically. If this options is present then " + "DCD filtering is skipped.", + ) + parser.add_argument( + "--check-mdl-conf", + action="store_true", + help="If --check-mdl-conf is turned on then the add configuration " + "operation (publication, subscription, unbinding) fails when the " + "target model of the specified element address is already added " + "to the app group. " + "If --check-mdl-conf is turned on then the remove configuration " + "operation (publication, subscription, unbinding) fails when the " + "target model of the specified element address does not belong " + "to the app group. " + "If --check-mdl-conf is turned off then these operations are ignored. " + "Note: --check-mdl-conf is stricter than the --strict-dcd-check " + "because the former checks if the model exists and configured " + "while the latter checks only whether the model exists or not.", + ) + + def add_group_basic_retry_args(self, parser: ArgumentParserExt): + self.add_btmesh_basic_retry_args( + parser, + retry_max_default=app_cfg.conf.conf_retry_max_default, + retry_interval_default=app_cfg.conf.conf_retry_interval_default, + retry_interval_lpn_default=app_cfg.conf.conf_retry_interval_lpn_default, + retry_max_help=( + "Maximum number of additional Config messages which are sent " + "until the corresponding status message is not received from " + "the Configuration Server. " + "(default: %(default)s)" + ), + retry_interval_help=( + "Interval in seconds between Config messages when the " + "corresponding status message is not received from the " + "Configuration Server. " + "(default: %(default)s)" + ), + retry_interval_lpn_help=( + "Interval in seconds between Config messages when the " + "corresponding status message is not received from the " + "Configuration Server model of a Low Power Node. " + "(default: %(default)s)" + ), + ) + + def create_group_add_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "add" + self.group_add_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Create new app group.", + description="Publication, subscription and bindings are configured " + "on the specified models of element addresses. " + "The configuration is performed based on the --group-addr and " + "--appkey-idx parameters of the app group. The publication requires " + "some additional parameters which can be specified as options.", + exit_on_error_ext=False, + ) + self.group_add_parser.set_defaults(group_subcmd=self.group_add_cmd) + self.group_add_parser.add_argument( + "--name", + "-n", + required=True, + help="App group name. The app group name is unique identifier of " + "an group.", + ) + self.add_group_addr_args(self.group_add_parser) + self.add_appkey_index_args(self.group_add_parser) + self.add_pub_param_args(self.group_add_parser) + self.add_pub_addr_mdl_args(self.group_add_parser, support_remove_args=False) + self.add_sub_addr_mdl_args(self.group_add_parser, support_remove_args=False) + self.add_bind_addr_mdl_args(self.group_add_parser, support_remove_args=False) + self.add_mdl_profile_args(self.group_add_parser, support_remove_args=False) + self.add_auto_bind_args(self.group_add_parser) + self.add_dcd_args(self.group_add_parser, support_remove_args=False) + self.add_group_basic_retry_args(self.group_add_parser) + return SUBPARSER_NAME, self.group_add_parser + + def create_group_update_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "update" + self.group_update_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Update existing app group.", + description="Publication, subscription and binding configuration " + "can be added or removed from target models on specified element" + "addresses. " + "The configuration is performed based on the group address and " + "application key belonging to the app group.", + exit_on_error_ext=False, + ) + self.group_update_parser.set_defaults(group_subcmd=self.group_update_cmd) + self.group_update_parser.add_argument( + "--name", + "-n", + metavar="", + required=True, + help=f"Specifies an existing app group which shall be updated. " + f"The app group name is unique identifier of the group. " + f"{app_ui.GROUPSPEC_HELP}", + ) + self.add_pub_addr_mdl_args(self.group_update_parser, support_remove_args=True) + self.add_sub_addr_mdl_args(self.group_update_parser, support_remove_args=True) + self.add_bind_addr_mdl_args(self.group_update_parser, support_remove_args=True) + self.add_mdl_profile_args(self.group_update_parser, support_remove_args=True) + self.add_auto_bind_args(self.group_update_parser) + self.add_dcd_args(self.group_update_parser, support_remove_args=True) + self.add_group_basic_retry_args(self.group_update_parser) + return SUBPARSER_NAME, self.group_update_parser + + def create_group_list_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "list" + self.group_list_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="List app groups from application database.", + description="List app groups from application database.", + exit_on_error_ext=False, + ) + self.group_list_parser.set_defaults(group_subcmd=self.group_list_cmd) + self.add_column_args( + self.group_list_parser, + table_name="app group report", + column_info_dict=app_ui.APP_GROUP_COLUMNS, + ) + return SUBPARSER_NAME, self.group_list_parser + + def create_group_info_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "info" + self.group_info_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Provide information about selected app groups.", + description="Provide information about selected app groups.", + exit_on_error_ext=False, + ) + self.group_info_parser.set_defaults(group_subcmd=self.group_info_cmd) + self.add_app_group_pos_arg( + self.group_info_parser, + help=( + "The %(metavar)s selects app groups which shall appear " + "in %(prog)s report." + ), + ) + return SUBPARSER_NAME, self.group_info_parser + + def __call__(self, arg) -> bool: + pargs = self.parser.parse_args(arg.split()) + self._current_parser = self.subparser_dict.get( + pargs.group_subcmd_name, self.parser + ) + pargs.group_subcmd(pargs) + self._current_parser = self.parser + return False + + def group_add_cmd(self, pargs): + self.app_group_validate_elemspecs( + pargs.pub_addrs, pargs.sub_addrs, pargs.bind_addrs + ) + self.app_group_validate_mdlspecs( + pargs.pub_mdls, pargs.sub_mdls, pargs.bind_mdls + ) + # The retry_cmd_max and retry_cmd_interval are used only because the + # other parameters are overwritten by the arguments of conf reset command + retry_params_default = app_cfg.common.btmesh_retry_params_default + retry_params = self.process_btmesh_retry_params(pargs, retry_params_default) + # Model profile query should not fail because argparse makes sure that + # a value from choices is selected and the choices are constructed + # from configuration. + mdl_profiles = [ + mp for mp in app_cfg.appgroup.mdl_profiles if mp.name in pargs.profile + ] + app_grctrl.add_app_group( + name=pargs.name, + group_addr=pargs.group_addr, + appkey_index=pargs.appkey_idx, + pub_ttl=pargs.pub_ttl, + pub_credentials=pargs.pub_cred, + pub_period_ms=pargs.pub_period, + pub_retransmit_count=pargs.pub_tx_cnt, + pub_retransmit_interval_ms=pargs.pub_tx_int, + ) + auto_bind = pargs.auto_bind + if auto_bind is None: + auto_bind = app_cfg.appgroup.auto_bind_default + dcd_check = pargs.dcd_check + if dcd_check is None: + dcd_check = app_cfg.appgroup.dcd_check_default + self.app_group_add_addr_mdls( + app_group_name=pargs.name, + raw_pub_addrs=pargs.pub_addrs, + raw_pub_mdls=pargs.pub_mdls, + raw_sub_addrs=pargs.sub_addrs, + raw_sub_mdls=pargs.sub_mdls, + raw_bind_addrs=pargs.bind_addrs, + raw_bind_mdls=pargs.bind_mdls, + mdl_profiles=mdl_profiles, + auto_bind=auto_bind, + skip_dcd_filter=pargs.skip_dcd_filter, + strict_dcd_check=dcd_check, + retry_params=retry_params, + ) + + def group_update_cmd(self, pargs): + self.app_group_validate_elemspecs( + pargs.pub_addrs, pargs.sub_addrs, pargs.bind_addrs + ) + self.app_group_validate_elemspecs( + pargs.rm_pub_addrs, pargs.rm_sub_addrs, pargs.rm_bind_addrs + ) + self.app_group_validate_mdlspecs( + pargs.pub_mdls, pargs.sub_mdls, pargs.bind_mdls + ) + self.app_group_validate_mdlspecs( + pargs.rm_pub_mdls, pargs.rm_sub_mdls, pargs.rm_bind_mdls + ) + # The retry_cmd_max and retry_cmd_interval are used only because the + # other parameters are overwritten by the arguments of conf reset command + retry_params_default = app_cfg.common.btmesh_retry_params_default + retry_params = self.process_btmesh_retry_params(pargs, retry_params_default) + # Model profile query should not fail because argparse makes sure that + # a value from choices is selected and the choices are constructed + # from configuration. + mdl_profiles = [ + mp for mp in app_cfg.appgroup.mdl_profiles if mp.name in pargs.profile + ] + rm_mdl_profiles = [ + mp for mp in app_cfg.appgroup.mdl_profiles if mp.name in pargs.rm_profile + ] + auto_bind = pargs.auto_bind + if auto_bind is None: + auto_bind = app_cfg.appgroup.auto_bind_default + dcd_check = pargs.dcd_check + if dcd_check is None: + dcd_check = app_cfg.appgroup.dcd_check_default + # Process the remove operations first because the BT Mesh stack limits + # the maximum app key bindings and subscription of models. + # This way some extra space can be made free before additional app key + # bindings and subscriptions. + self.app_group_remove_addr_mdls( + app_group_name=pargs.name, + raw_pub_addrs=pargs.rm_pub_addrs, + raw_pub_mdls=pargs.rm_pub_mdls, + raw_sub_addrs=pargs.rm_sub_addrs, + raw_sub_mdls=pargs.rm_sub_mdls, + raw_bind_addrs=pargs.rm_bind_addrs, + raw_bind_mdls=pargs.rm_bind_mdls, + mdl_profiles=rm_mdl_profiles, + auto_bind=auto_bind, + skip_dcd_filter=pargs.skip_dcd_filter, + strict_dcd_check=dcd_check, + retry_params=retry_params, + ) + self.app_group_add_addr_mdls( + app_group_name=pargs.name, + raw_pub_addrs=pargs.pub_addrs, + raw_pub_mdls=pargs.pub_mdls, + raw_sub_addrs=pargs.sub_addrs, + raw_sub_mdls=pargs.sub_mdls, + raw_bind_addrs=pargs.bind_addrs, + raw_bind_mdls=pargs.bind_mdls, + mdl_profiles=mdl_profiles, + auto_bind=auto_bind, + skip_dcd_filter=pargs.skip_dcd_filter, + strict_dcd_check=dcd_check, + retry_params=retry_params, + ) + + def group_list_cmd(self, pargs): + columns = self.process_column_args(pargs, app_ui.APP_GROUP_COLUMNS) + app_groups = app_db.get_app_group_list(order_property="name") + app_ui.app_group_table_info(app_groups, columns) + + def group_info_cmd(self, pargs): + all_app_groups = app_db.get_app_group_list(order_property="name") + groupspec_list = pargs.groupspec + selected_app_groups = self.parse_groupspecs( + groupspec_list, all_app_groups, filter_duplicates=True + ) + for app_group in selected_app_groups: + app_ui.app_group_info(app_group) + + def app_group_validate_elemspecs( + self, pub_elemspecs, sub_elemspecs, bind_elemspecs + ): + all_elemspecs = [] + all_elemspecs.extend(pub_elemspecs) + all_elemspecs.extend(sub_elemspecs) + all_elemspecs.extend(bind_elemspecs) + node_list = app_db.btmesh_db.get_node_list(order_property="name") + # The parse_elemspecs checks if the elemspec is valid and the + # referenced element address exists at all + self.parse_elemspecs(elemspecs=all_elemspecs, node_list=node_list) + + def app_group_validate_mdlspecs(self, pub_mdlspecs, sub_mdlspecs, bind_mdlspecs): + all_mdlspecs = [] + all_mdlspecs.extend(pub_mdlspecs) + all_mdlspecs.extend(sub_mdlspecs) + all_mdlspecs.extend(bind_mdlspecs) + # The parse_mdlspecs checks if the mdlspec is valid + self.parse_mdlspecs(all_mdlspecs) + + def filter_addr_mdl_by_dcd( + self, + addr: int, + mdls: Iterable[ModelID], + strict: bool = False, + retry_params: BtmeshRetryParams = None, + ) -> Set[ModelID]: + remote_node = app_db.get_remote_node_by_elem_addr( + addr, retry_params=retry_params + ) + elem_idx = remote_node.get_elem_index(addr) + # If the DCD is not available then it is queried by remote node + dcd = remote_node.dcd + dcd_mdls_set = set(dcd.elements[elem_idx].models) + mdls_set = set(mdls) + final_mdls = mdls_set & dcd_mdls_set + if strict and (final_mdls != mdls): + miss_mdls = mdls_set - final_mdls + miss_mdls_str = ", ".join(f"0x{mdl}" for mdl in miss_mdls) + raise ValueError( + f"Failed to create app group due to missing models " + f"{miss_mdls_str} on 0x{addr:04X} element address." + ) + return final_mdls + + def process_raw_addr_mdls( + self, + pub_addr_mdls_dict: Dict[int, Set[ModelID]], + sub_addr_mdls_dict: Dict[int, Set[ModelID]], + bind_addr_mdls_dict: Dict[int, Set[ModelID]], + raw_pub_addrs: Iterable[str], + raw_pub_mdls: Iterable[str], + raw_sub_addrs: Iterable[str], + raw_sub_mdls: Iterable[str], + raw_bind_addrs: Iterable[str], + raw_bind_mdls: Iterable[str], + mdl_profiles: Iterable[BtmeshDfuAppMdlProfile], + auto_bind: bool = True, + skip_dcd_filter: bool = False, + strict_dcd_check: bool = False, + retry_params: BtmeshRetryParams = None, + ): + node_list = app_db.btmesh_db.get_node_list(order_property="name") + bind_addrs = self.parse_elemspecs(elemspecs=raw_bind_addrs, node_list=node_list) + pub_addrs = self.parse_elemspecs(elemspecs=raw_pub_addrs, node_list=node_list) + sub_addrs = self.parse_elemspecs(elemspecs=raw_sub_addrs, node_list=node_list) + if auto_bind: + bind_addrs.extend(pub_addrs) + bind_addrs.extend(sub_addrs) + bind_addrs = set(bind_addrs) + pub_addrs = set(pub_addrs) + sub_addrs = set(sub_addrs) + + bind_mdls = set(self.parse_mdlspecs(raw_bind_mdls)) + pub_mdls = set(self.parse_mdlspecs(raw_pub_mdls)) + sub_mdls = set(self.parse_mdlspecs(raw_sub_mdls)) + if auto_bind: + bind_mdls.update(pub_mdls) + bind_mdls.update(sub_mdls) + for mp in mdl_profiles: + bind_mdls.update(mp.bind_mdls) + pub_mdls.update(mp.pub_mdls) + sub_mdls.update(mp.sub_mdls) + + for addr in pub_addrs: + if skip_dcd_filter: + pub_addr_mdls_dict[addr] = pub_mdls + else: + pub_addr_mdls_dict[addr] = self.filter_addr_mdl_by_dcd( + addr, pub_mdls, strict=strict_dcd_check, retry_params=retry_params + ) + for addr in sub_addrs: + if skip_dcd_filter: + sub_addr_mdls_dict[addr] = sub_mdls + else: + sub_addr_mdls_dict[addr] = self.filter_addr_mdl_by_dcd( + addr, sub_mdls, strict=strict_dcd_check, retry_params=retry_params + ) + # It is essential to process bind model filtering after publication and + # subscription models because the auto bind feature may add additional + # bind models which needs to be filtered as well. + for addr in bind_addrs: + if skip_dcd_filter: + filtered_bind_addr = bind_mdls + else: + filtered_bind_addr = self.filter_addr_mdl_by_dcd( + addr, bind_mdls, strict=strict_dcd_check, retry_params=retry_params + ) + if addr in bind_addr_mdls_dict: + bind_addr_mdls_dict[addr].update(filtered_bind_addr) + else: + bind_addr_mdls_dict[addr] = set(filtered_bind_addr) + + def app_group_add_addr_mdls( + self, + app_group_name: str, + raw_pub_addrs: Iterable[str], + raw_pub_mdls: Iterable[str], + raw_sub_addrs: Iterable[str], + raw_sub_mdls: Iterable[str], + raw_bind_addrs: Iterable[str], + raw_bind_mdls: Iterable[str], + mdl_profiles: Iterable[BtmeshDfuAppMdlProfile], + auto_bind: bool = True, + skip_dcd_filter: bool = False, + strict_dcd_check: bool = False, + retry_params: BtmeshRetryParams = None, + ): + bind_addr_mdls_dict: Dict[int, Set[ModelID]] = {} + pub_addr_mdls_dict: Dict[int, Set[ModelID]] = {} + sub_addr_mdls_dict: Dict[int, Set[ModelID]] = {} + self.process_raw_addr_mdls( + pub_addr_mdls_dict=pub_addr_mdls_dict, + sub_addr_mdls_dict=sub_addr_mdls_dict, + bind_addr_mdls_dict=bind_addr_mdls_dict, + raw_pub_addrs=raw_pub_addrs, + raw_pub_mdls=raw_pub_mdls, + raw_sub_addrs=raw_sub_addrs, + raw_sub_mdls=raw_sub_mdls, + raw_bind_addrs=raw_bind_addrs, + raw_bind_mdls=raw_bind_mdls, + mdl_profiles=mdl_profiles, + auto_bind=auto_bind, + skip_dcd_filter=skip_dcd_filter, + strict_dcd_check=strict_dcd_check, + retry_params=retry_params, + ) + for addr, mdls in bind_addr_mdls_dict.items(): + for mdl in mdls: + try: + app_grctrl.add_bind_mdl( + app_group_name=app_group_name, + addr=addr, + mdl=mdl, + retry_params=retry_params, + ) + app_ui.info( + f"App group {app_group_name} adds appkey binding to " + f"{mdl.pretty_name()} model on 0x{addr:04X} element address." + ) + except Exception as e: + app_ui.error( + f"App group {app_group_name} failed to bind appkey to " + f"{mdl.pretty_name()} model on 0x{addr:04X} element address. " + f"{str(e)}" + ) + for addr, mdls in pub_addr_mdls_dict.items(): + for mdl in mdls: + try: + app_grctrl.add_pub_mdl( + app_group_name=app_group_name, + addr=addr, + mdl=mdl, + auto_bind=auto_bind, + retry_params=retry_params, + ) + app_ui.info( + f"App group {app_group_name} adds publication to " + f"{mdl.pretty_name()} model on 0x{addr:04X} element address." + ) + except Exception as e: + app_ui.error( + f"App group {app_group_name} failed to add publication " + f"to {mdl.pretty_name()} model on 0x{addr:04X} element " + f"address. {str(e)}" + ) + for addr, mdls in sub_addr_mdls_dict.items(): + for mdl in mdls: + try: + app_grctrl.add_sub_mdl( + app_group_name=app_group_name, + addr=addr, + mdl=mdl, + auto_bind=auto_bind, + retry_params=retry_params, + ) + app_ui.info( + f"App group {app_group_name} adds subscription to " + f"{mdl.pretty_name()} model on 0x{addr:04X} element address." + ) + except Exception as e: + app_ui.error( + f"App group {app_group_name} failed to add subscription " + f"to {mdl.pretty_name()} model on 0x{addr:04X} element " + f"address. {str(e)}" + ) + + def app_group_remove_addr_mdls( + self, + app_group_name: str, + raw_pub_addrs: Iterable[str], + raw_pub_mdls: Iterable[str], + raw_sub_addrs: Iterable[str], + raw_sub_mdls: Iterable[str], + raw_bind_addrs: Iterable[str], + raw_bind_mdls: Iterable[str], + mdl_profiles: Iterable[BtmeshDfuAppMdlProfile], + auto_bind: bool = True, + skip_dcd_filter: bool = False, + strict_dcd_check: bool = False, + retry_params: BtmeshRetryParams = None, + ): + bind_addr_mdls_dict: Dict[int, Set[ModelID]] = {} + pub_addr_mdls_dict: Dict[int, Set[ModelID]] = {} + sub_addr_mdls_dict: Dict[int, Set[ModelID]] = {} + self.process_raw_addr_mdls( + pub_addr_mdls_dict=pub_addr_mdls_dict, + sub_addr_mdls_dict=sub_addr_mdls_dict, + bind_addr_mdls_dict=bind_addr_mdls_dict, + raw_pub_addrs=raw_pub_addrs, + raw_pub_mdls=raw_pub_mdls, + raw_sub_addrs=raw_sub_addrs, + raw_sub_mdls=raw_sub_mdls, + raw_bind_addrs=raw_bind_addrs, + raw_bind_mdls=raw_bind_mdls, + mdl_profiles=mdl_profiles, + auto_bind=auto_bind, + skip_dcd_filter=skip_dcd_filter, + strict_dcd_check=strict_dcd_check, + retry_params=retry_params, + ) + for addr, mdls in bind_addr_mdls_dict.items(): + for mdl in mdls: + try: + app_grctrl.remove_bind_mdl( + app_group_name=app_group_name, + addr=addr, + mdl=mdl, + retry_params=retry_params, + ) + app_ui.info( + f"App group {app_group_name} removes appkey binding to " + f"{mdl.pretty_name()} model on 0x{addr:04X} element address." + ) + except Exception as e: + app_ui.error( + f"App group {app_group_name} failed to unbind appkey to " + f"{mdl.pretty_name()} model on 0x{addr:04X} element address. " + f"{str(e)}" + ) + for addr, mdls in pub_addr_mdls_dict.items(): + for mdl in mdls: + try: + app_grctrl.remove_pub_mdl( + app_group_name=app_group_name, + addr=addr, + mdl=mdl, + auto_unbind=auto_bind, + retry_params=retry_params, + ) + app_ui.info( + f"App group {app_group_name} removes publication to " + f"{mdl.pretty_name()} model on 0x{addr:04X} element address." + ) + except Exception as e: + app_ui.error( + f"App group {app_group_name} failed to remove publication " + f"to {mdl.pretty_name()} model on 0x{addr:04X} element " + f"address. {str(e)}" + ) + for addr, mdls in sub_addr_mdls_dict.items(): + for mdl in mdls: + try: + app_grctrl.remove_sub_mdl( + app_group_name=app_group_name, + addr=addr, + mdl=mdl, + auto_unbind=auto_bind, + retry_params=retry_params, + ) + app_ui.info( + f"App group {app_group_name} removes subscription to " + f"{mdl.pretty_name()} model on 0x{addr:04X} element address." + ) + except Exception as e: + app_ui.error( + f"App group {app_group_name} failed to remove subscription " + f"to {mdl.pretty_name()} model on 0x{addr:04X} element " + f"address. {str(e)}" + ) + + +group_cmd = BtmeshGroupCmd() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cmd/node.py b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/node.py new file mode 100644 index 00000000000..53a5e94f141 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/node.py @@ -0,0 +1,231 @@ +# 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. + +from typing import Optional, Tuple + +from ..btmesh import app_btmesh +from ..cfg import app_cfg +from ..db import app_db +from ..ui import app_ui +from ..util.argparsex import ArgumentParserExt +from .cmd import BtmeshCmd + + +class BtmeshNodeCmd(BtmeshCmd): + @property + def parser(self) -> ArgumentParserExt: + return self.node_parser + + @property + def current_parser(self) -> Optional[ArgumentParserExt]: + return getattr(self, "_current_parser", self.parser) + + def create_parser(self, subparsers) -> ArgumentParserExt: + self.node_parser: ArgumentParserExt = subparsers.add_parser( + "node", + prog="node", + help="Provide information about the nodes in the BT Mesh database.", + description="Provide information about the nodes in the BT Mesh database. " + "The %(prog)s command can be used to list nodes or to provide detailed " + "information about specific nodes.", + exit_on_error_ext=False, + ) + self.node_parser.set_defaults(node_subcmd=self.node_list_cmd) + self.node_parser.set_defaults(node_subcmd_name="list") + self.node_subparser = self.node_parser.add_subparsers( + dest="node_subcmd_name", + title="Subcommands", + description="If no subcommand is provided then it defaults to 'list'.", + ) + self.subparser_dict = dict( + ( + self.create_node_list_parser(self.node_subparser), + self.create_node_info_parser(self.node_subparser), + self.create_node_rename_parser(self.node_subparser), + ) + ) + return self.node_parser + + def create_node_list_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "list" + self.node_list_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="List nodes from BT Mesh database.", + description="List nodes from BT Mesh database.", + exit_on_error_ext=False, + ) + self.node_list_parser.set_defaults(node_subcmd=self.node_list_cmd) + self.node_list_parser.add_argument( + "--all", + action="store_true", + help="All node properties are listed.", + ) + for node_col in app_ui.NODE_COLUMNS: + arg_name = node_col.replace("_", "-") + help_name = app_ui.NODE_COLUMNS[node_col].lower() + self.node_list_parser.add_argument( + f"--{arg_name}", + dest="columns", + action="append_const", + const=f"{node_col}", + help=f"The node {help_name} is listed.", + ) + return SUBPARSER_NAME, self.node_list_parser + + def create_node_info_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "info" + self.node_info_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Provide information about the specified node.", + description="Provide information about the specified node.", + exit_on_error_ext=False, + ) + self.node_info_parser.set_defaults(node_subcmd=self.node_info_cmd) + self.add_nodes_pos_arg( + self.node_info_parser, + help="The %(metavar)s selects nodes which shall appear in %(prog)s report.", + ) + self.node_info_parser.add_argument( + "--force", + "-f", + action="store_true", + help="Force DCD read from nodes to avoid using cached DCD.", + ) + self.add_btmesh_basic_retry_args( + self.node_info_parser, + retry_max_default=app_cfg.conf.conf_retry_max_default, + retry_interval_default=app_cfg.conf.conf_retry_interval_default, + retry_interval_lpn_default=app_cfg.conf.conf_retry_interval_lpn_default, + retry_max_help=( + "Maximum number of additional Config Composition Data Get " + "messages are sent until the Config Composition Data Status " + "message is not received from the Config Server. " + "(default: %(default)s)" + ), + retry_interval_help=( + "Interval in seconds between Config Composition Data Get messages " + "when the Config Composition Data Status message is not received " + "from the Config Server. " + "(default: %(default)s)" + ), + retry_interval_lpn_help=( + "Interval in seconds between Config Composition Data Get messages " + "when the Config Composition Data Status message is not received " + "from the Config Server model of a Low Power Node. " + "(default: %(default)s)" + ), + ) + return SUBPARSER_NAME, self.node_info_parser + + def create_node_rename_parser(self, subparsers) -> Tuple[str, ArgumentParserExt]: + SUBPARSER_NAME = "rename" + self.node_rename_parser: ArgumentParserExt = subparsers.add_parser( + SUBPARSER_NAME, + help="Rename the specified node.", + description="Rename the specified node.", + exit_on_error_ext=False, + ) + self.node_rename_parser.add_argument( + "nodespec", + metavar="", + help="Specifies the node which shall be renamed. " + app_ui.NODESPEC_HELP, + ) + self.node_rename_parser.add_argument( + "newname", + help="New name of the specified node.", + ) + self.node_rename_parser.set_defaults(node_subcmd=self.node_rename_cmd) + return SUBPARSER_NAME, self.node_rename_parser + + def __call__(self, arg) -> bool: + pargs = self.parser.parse_args(arg.split()) + self._current_parser = self.subparser_dict.get( + pargs.node_subcmd_name, self.parser + ) + pargs.node_subcmd(pargs) + self._current_parser = self.parser + return False + + def node_list_cmd(self, pargs): + node_list = app_db.btmesh_db.get_node_list(order_property="name") + # The node command defaults to node list which means the all and columns + # arguments does not exist in pargs so show the default columns in case + # of an empty node command + if hasattr(pargs, "all") and pargs.all: + columns = app_ui.NODE_COLUMNS.keys() + elif hasattr(pargs, "columns") and pargs.columns: + columns = pargs.columns + else: + columns = None + app_ui.nodes_info(node_list, columns) + + def node_info_cmd(self, pargs): + nodes = app_db.btmesh_db.get_node_list(order_property="name") + selected_nodes = self.parse_nodespecs(pargs.nodespec, nodes) + retry_params_default = app_cfg.common.btmesh_retry_params_default + retry_params = self.process_btmesh_retry_params(pargs, retry_params_default) + for node in selected_nodes: + if pargs.force: + dcd = app_btmesh.conf.get_dcd( + node, update_db=True, retry_params=retry_params + ) + else: + dcd = app_btmesh.conf.get_dcd_cached(node, retry_params=retry_params) + + relay_str = "Yes" if dcd.relay else "No" + proxy_str = "Yes" if dcd.proxy else "No" + friend_str = "Yes" if dcd.friend else "No" + lpn_str = "Yes" if dcd.lpn else "No" + app_ui.info(f"{node.name} node:") + app_ui.info(f" - Primary Address: 0x{node.prim_addr:04X}") + app_ui.info(f" - UUID: {node.uuid.hex()}") + app_ui.info(f" - Company ID: 0x{dcd.cid:04X}") + app_ui.info(f" - Product ID: 0x{dcd.pid:04X}") + app_ui.info(f" - Version ID: 0x{dcd.vid:04X}") + app_ui.info(f" - CRPL: {dcd.cid}") + app_ui.info(f" - Features:") + app_ui.info(f" - Relay: {relay_str}") + app_ui.info(f" - Proxy: {proxy_str}") + app_ui.info(f" - Friend: {friend_str}") + app_ui.info(f" - Low Power: {lpn_str}") + app_ui.info(f" - Elements: ({node.elem_count})") + for elem in dcd.elements: + sig_mdls = [mdl for mdl in elem.models if mdl.is_sig_model()] + vendor_mdls = [mdl for mdl in elem.models if mdl.is_vendor_model()] + app_ui.info(f" - Element {elem.idx}:") + app_ui.info(f" - Loc: {elem.loc:04X}") + if len(sig_mdls): + app_ui.info(f" - SIG Models:") + for mdl in sig_mdls: + app_ui.info(f" - {mdl.pretty_name()}") + if len(vendor_mdls): + app_ui.info(f" - Vendor Models:") + for mdl in vendor_mdls: + app_ui.info(f" - {mdl.pretty_name()}") + + def node_rename_cmd(self, pargs): + nodes = app_db.btmesh_db.get_node_list(order_property="name") + node = self.parse_nodespecs(pargs.nodespec, nodes)[0] + app_db.btmesh_db.rename_node(node, pargs.newname) + + +node_cmd = BtmeshNodeCmd() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cmd/prov.py b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/prov.py new file mode 100644 index 00000000000..ce89410f23f --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/prov.py @@ -0,0 +1,146 @@ +# 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. + +import re +from typing import Optional + +from btmesh.errors import BtmeshError + +from ..btmesh import app_btmesh +from ..ui import app_ui +from ..util.argparsex import ArgumentParserExt +from .cmd import BtmeshCmd +from .scan import scan_cmd + + +class BtmeshProvCmd(BtmeshCmd): + @property + def parser(self) -> ArgumentParserExt: + return self.prov_parser + + @property + def current_parser(self) -> Optional[ArgumentParserExt]: + return self.current_parser + + def create_parser(self, subparsers) -> ArgumentParserExt: + self.prov_parser = subparsers.add_parser( + "prov", + help="Provision the selected devices. The devices are selected by " + "uuid or in an interactive provisioning session with scanning.", + exit_on_error_ext=False, + ) + self.prov_parser.add_argument( + "--scan", + type=float, + metavar="TIME", + help="Interactive provisioning which scans for unprovisioned beacons. " + "The devices can be specified by their index or UUID. " + "The TIME specifies the scan duration in seconds. (type: %(type)s)", + ) + self.prov_parser.add_argument( + "device", + nargs="*", + default=[], + help="List of device UUIDs. " + "No devices shall be added when --scan option is used.", + ) + return self.prov_parser + + def __call__(self, arg) -> bool: + pargs = self.parser.parse_args(arg.split()) + if (not pargs.device) and (not pargs.scan): + self.current_parser.error( + "Positional argument device shall be specified when the --scan " + "option is not used.", + ) + uuids = [] + try: + uuids.extend(self._prov_parse_devices(pargs.device)) + except ValueError as e: + self.current_parser.error(str(e)) + if pargs.scan: + beacon_stats = scan_cmd.scan(max_time=pargs.scan, show_beacons=True) + scan_cmd.scan_show_stats(beacon_stats) + if not len(beacon_stats): + # No unprovisioned beacons are found so provisioning is ended + return False + app_ui.info("Select devices to provision") + app_ui.info("Comma/Space separated list of indexes, BT addresses or UUIDs") + devices_input = app_ui.input("Devices:") + try: + uuids.extend(self._prov_parse_devices(devices_input, beacon_stats)) + except ValueError as e: + app_ui.parser_error(self.parser, str(e)) + return False + self._provision(uuids) + return False + + def _prov_parse_devices(self, devices, beacon_stats=None): + uuids = [] + if isinstance(devices, str): + device_list = app_ui.split_text(devices) + else: + device_list = devices + for device in device_list: + device = device.strip() + if re.fullmatch(r"[0-9a-fA-F]{32}", device): + uuid = bytes.fromhex(device) + elif beacon_stats and re.fullmatch(r"(?:[0-9a-fA-F]{2}\:?){6}", device): + addr_uuid_map = {b["address"]: b["uuid"] for b in beacon_stats} + if device not in addr_uuid_map: + raise ValueError( + f"BT Mesh device UUID could not be determined " + f"from {device} BT address." + ) + uuid = addr_uuid_map[device] + elif beacon_stats and re.fullmatch(r"\d+", device): + idx_uuid_map = { + f"{idx}": b["uuid"] for idx, b in enumerate(beacon_stats) + } + if device not in idx_uuid_map: + raise ValueError( + f"BT Mesh device UUID could not be determined " + f"from {device} index." + ) + uuid = idx_uuid_map[device] + else: + raise ValueError( + f"BT Mesh device UUID could not be determined from {device}." + ) + uuids.append(uuid) + # Remove duplicate entries from the list + # Note: Dictionaries are ordered from Python 3.7 and the required python + # version is 3.7 as well so the dict can be considered ordered + return list(dict.fromkeys(uuids)) + + def _provision(self, uuids): + if not isinstance(uuids, (list, tuple)): + uuids = [uuids] + for uuid in uuids: + try: + app_btmesh.prov.provision_adv_device(uuid) + app_ui.info(f"The device with {uuid.hex()} UUID is provisioned.") + except BtmeshError as e: + app_ui.error(e.message) + + +prov_cmd = BtmeshProvCmd() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cmd/reset.py b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/reset.py new file mode 100644 index 00000000000..2a7388f10e2 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/reset.py @@ -0,0 +1,71 @@ +# 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. + +from typing import Optional + +from ..btmesh import app_btmesh +from ..cfg import app_cfg +from ..db import app_db +from ..ui import app_ui +from ..util.argparsex import ArgumentParserExt +from .cmd import BtmeshCmd + + +class BtmeshResetCmd(BtmeshCmd): + @property + def parser(self) -> ArgumentParserExt: + return self.reset_parser + + @property + def current_parser(self) -> Optional[ArgumentParserExt]: + return self.current_parser + + def create_parser(self, subparsers) -> ArgumentParserExt: + self.reset_parser = subparsers.add_parser( + "reset", + prog="reset", + help="Perform system or factory reset based on the type option.", + description="Perform system or factory reset based on the type option.", + exit_on_error_ext=False, + ) + self.reset_parser.add_argument( + "--type", + choices=["system", "factory"], + default="system", + help="System or factory reset selection (default: %(default)s)", + ) + return self.reset_parser + + def __call__(self, arg) -> bool: + pargs = self.parser.parse_args(arg.split()) + if pargs.type == "factory": + app_db.clear() + app_db.save() + app_btmesh.factory_reset(app_cfg.reset.factory_reset_delay_s) + app_ui.info("Factory reset completed") + else: + app_btmesh.system_reset() + app_ui.info("System reset completed") + return False + + +reset_cmd = BtmeshResetCmd() \ No newline at end of file diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/cmd/scan.py b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/scan.py new file mode 100644 index 00000000000..82b9352589f --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/cmd/scan.py @@ -0,0 +1,122 @@ +# 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. + +from typing import Optional + +import btmesh.util + +from ..btmesh import app_btmesh +from ..cfg import app_cfg +from ..ui import app_ui +from ..util.argparsex import ArgumentParserExt +from .cmd import BtmeshCmd + + +class BtmeshScanCmd(BtmeshCmd): + @property + def parser(self) -> ArgumentParserExt: + return self.scan_parser + + @property + def current_parser(self) -> Optional[ArgumentParserExt]: + return self.current_parser + + def create_parser(self, subparsers) -> ArgumentParserExt: + self.scan_parser = subparsers.add_parser( + "scan", + prog="scan", + description="Scan for unprovisioned device beacons.", + exit_on_error_ext=False, + ) + self.scan_parser.add_argument( + "--time", + type=float, + default=2.0, + help="Scan duration in seconds (type: %(type)s, default: %(default)s).", + ) + return self.scan_parser + + def __call__(self, arg) -> bool: + pargs = self.parser.parse_args(arg.split()) + beacon_stats = self.scan(max_time=pargs.time, show_beacons=True) + self.scan_show_stats(beacon_stats) + return False + + def scan(self, show_beacons=False, max_time=2.0): + # Parse the string arguments into pargs variable (parsed args) + app_ui.info("Scanning for unprovisioned nodes...") + beacon_stats = set() + for beacon in app_btmesh.prov.scan_unprov_beacons_gen(max_time): + beacon_static_data = ( + beacon.uuid, + beacon.bearer, + beacon.address, + beacon.address_type, + ) + beacon_stats.add(beacon_static_data) + if show_beacons: + ui_beacon_list = [ + "uuid=" + beacon.uuid.hex(), + "bearer=" + btmesh.util.unprov_beacon_bearer_str(beacon.bearer), + "address=" + beacon.address, + "address_type=" + btmesh.util.bd_addr_type_str(beacon.address_type), + "rssi=" + str(beacon.rssi), + ] + app_ui.info("Unprovisioned beacon: " + " ".join(ui_beacon_list)) + stats = [ + { + "uuid": b[0], + "bearer": b[1], + "address": b[2], + "address_type": b[3], + } + for b in beacon_stats + ] + stats = sorted(stats, key=lambda bs_elem: bs_elem["uuid"]) + return stats + + def scan_show_stats(self, beacon_stats): + beacon_stat_list = [ + { + "idx": str(idx), + "uuid": bs["uuid"].hex(), + "bearer": btmesh.util.unprov_beacon_bearer_str(bs["bearer"]), + "address": bs["address"], + "address_type": btmesh.util.bd_addr_type_str(bs["address_type"]), + } + for idx, bs in enumerate(beacon_stats) + ] + if not len(beacon_stat_list): + app_ui.info("No unprovisioned beacons are found.") + else: + app_ui.table_info( + beacon_stat_list, + columns={ + "idx": "Idx", + "uuid": "UUID", + "bearer": "Bearer", + "address": "Address", + "address_type": "Address Type", + }, + ) + +scan_cmd = BtmeshScanCmd() \ No newline at end of file diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/db.py b/app/btmesh/example_host/btmesh_host_dfu/app/db.py new file mode 100644 index 00000000000..24abe4c8c4c --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/db.py @@ -0,0 +1,508 @@ +# 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. + +import dataclasses +import json +import operator +from datetime import datetime +from pathlib import Path +from typing import ClassVar, Dict, Iterable, Mapping, Optional + +import btmesh.util +from btmesh.db import FWID, BtmeshDatabase, ModelID +from btmesh.event import LocalEvent +from btmesh.statedict import StateDictObject +from btmesh.util import BtmeshRetryParams + +from .btmesh import app_btmesh +from .cfg import app_cfg +from .rnode import RemoteNode + + +class BtmeshDfuAppDbLoadError(Exception): + def __init__(self, json_path, *args: object): + super().__init__(*args) + self.json_path = json_path + + +@dataclasses.dataclass +class BtmeshDfuAppDbClearedEvent(LocalEvent): + name: ClassVar[str] = "btmesh_levt_app_db_cleared" + + +class BtmeshDfuAppGroup(StateDictObject): + @classmethod + def validate_addr(cls, addrs_dict, addr, addrs_name, shall_exist=None): + btmesh.util.validate_unicast_address( + addr, f"Invalid app group {addrs_name} address." + ) + if shall_exist is not None: + if shall_exist and (addr not in addrs_dict): + raise ValueError( + f"App group {addrs_name} address 0x{addr:04X} does not exists." + ) + elif (not shall_exist) and (addr in addrs_dict): + raise ValueError( + f"App group {addrs_name} address 0x{addr:04X} already exists." + ) + + @classmethod + def add_addr(cls, addrs_dict, addr, addrs_name): + cls.validate_addr(addrs_dict, addr, addrs_name, shall_exist=False) + addrs_dict[addr] = set() + + @classmethod + def remove_addr(cls, addrs_dict, addr, addrs_name): + cls.validate_addr(addrs_dict, addr, addrs_name, shall_exist=True) + return addrs_dict.pop(addr) + + @classmethod + def has_addr_mdl(cls, addrs_dict, addr, mdl, addrs_name): + cls.validate_addr(addrs_dict, addr, addrs_name, shall_exist=True) + return mdl in addrs_dict[addr] + + @classmethod + def add_addr_mdl(cls, addrs_dict, addr, mdl, addrs_name): + cls.validate_addr(addrs_dict, addr, addrs_name, shall_exist=None) + if addr not in addrs_dict: + cls.add_addr(addrs_dict, addr, addrs_name) + addrs_dict[addr].add(mdl) + + @classmethod + def remove_addr_mdl(cls, addrs_dict, addr, mdl, addrs_name): + cls.validate_addr(addrs_dict, addr, addrs_name, shall_exist=True) + addrs_dict[addr].remove(mdl) + if not len(addrs_dict[addr]): + del addrs_dict[addr] + + @classmethod + def gen_addr_mdls(cls, addrs_dict, addr, addrs_name) -> Iterable[ModelID]: + cls.validate_addr(addrs_dict, addr, addrs_name, shall_exist=True) + return (mdl for mdl in addrs_dict.get(addr, set())) + + def create_mdl(self, attr_name, raw_mdl): + if isinstance(raw_mdl, Mapping): + mdl = ModelID.create_from_dict(raw_mdl) + elif isinstance(raw_mdl, ModelID): + mdl = raw_mdl + else: + self.raise_construction_error(attr_name, raw_mdl, type_error=True) + return mdl + + def __init__( + self, + name, + group_addr=0, + appkey_index=0, + pub_ttl=5, + pub_credentials=0, + pub_period_ms=0, + pub_retransmit_count=0, + pub_retransmit_interval_ms=0, + pub_addrs={}, + sub_addrs={}, + bind_addrs={}, + ) -> None: + super().__init__() + self.name = name + self.group_addr = group_addr + self.appkey_index = appkey_index + self.pub_ttl = pub_ttl + self.pub_credentials = pub_credentials + self.pub_period_ms = pub_period_ms + self.pub_retransmit_count = pub_retransmit_count + self.pub_retransmit_interval_ms = pub_retransmit_interval_ms + self._pub_addrs = {} + self._sub_addrs = {} + self._bind_addrs = {} + pub_addrs = { + btmesh.util.addr_to_int(addr): mdls for addr, mdls in pub_addrs.items() + } + sub_addrs = { + btmesh.util.addr_to_int(addr): mdls for addr, mdls in sub_addrs.items() + } + bind_addrs = { + btmesh.util.addr_to_int(addr): mdls for addr, mdls in bind_addrs.items() + } + for addr in pub_addrs: + self.add_pub_addr(addr) + for raw_mdl in pub_addrs[addr]: + mdl = self.create_mdl(f"pub_addrs[0x{addr:04X}] mdl", raw_mdl) + self.add_pub_addr_mdl(addr, mdl) + for addr in sub_addrs: + self.add_sub_addr(addr) + for raw_mdl in sub_addrs[addr]: + mdl = self.create_mdl(f"sub_addrs[0x{addr:04X}] mdl", raw_mdl) + self.add_sub_addr_mdl(addr, mdl) + for addr in bind_addrs: + self.add_bind_addr(addr) + for raw_mdl in bind_addrs[addr]: + mdl = self.create_mdl(f"bind_addrs[0x{addr:04X}] mdl", raw_mdl) + self.add_bind_addr_mdl(addr, mdl) + + @property + def name(self): + return self._name + + @name.setter + def name(self, value): + btmesh.util.validate_name(value, "Invalid app group name.") + self._name = value + + @property + def group_addr(self): + return self._group_addr + + @group_addr.setter + def group_addr(self, value): + btmesh.util.validate_group_address(value, "Invalid app group address.") + self._group_addr = btmesh.util.addr_to_int(value) + + @property + def appkey_index(self): + return self._appkey_index + + @appkey_index.setter + def appkey_index(self, value): + ERROR_MSG = "Invalid app group appkey index." + btmesh.util.validate_appkey_index(value, ERROR_MSG) + if app_cfg.network.appkey_cnt <= value: + raise ValueError( + f"{ERROR_MSG} Configured appkey count is {app_cfg.network.appkey_cnt} " + f"but {value} appkey index is set for app group." + ) + self._appkey_index = value + + @property + def pub_ttl(self): + return self._pub_ttl + + @pub_ttl.setter + def pub_ttl(self, value): + btmesh.util.validate_ttl(value, "Invalid app group pub TTL.") + self._pub_ttl = value + + @property + def pub_credentials(self): + return self._pub_credentials + + @pub_credentials.setter + def pub_credentials(self, value): + btmesh.util.validate_pub_credentials( + value, "Invalid app group pub credentials." + ) + self._pub_credentials = value + + @property + def pub_period_ms(self): + return self._pub_period_ms + + @pub_period_ms.setter + def pub_period_ms(self, value): + btmesh.util.validate_pub_period_ms(value, "Invalid app group pub period.") + self._pub_period_ms = value + + @property + def pub_retransmit_count(self): + return self._pub_retransmit_count + + @pub_retransmit_count.setter + def pub_retransmit_count(self, value): + btmesh.util.validate_pub_retransmit_count( + value, "Invalid app group pub retransmit count." + ) + self._pub_retransmit_count = value + + @property + def pub_retransmit_interval_ms(self): + return self._pub_retransmit_interval_ms + + @pub_retransmit_interval_ms.setter + def pub_retransmit_interval_ms(self, value): + btmesh.util.validate_pub_retransmit_interval_ms( + value, "Invalid app group pub retransmit interval." + ) + self._pub_retransmit_interval_ms = value + + # Publication element address methods + @property + def pub_addrs(self): + return (addr for addr in self._pub_addrs) + + def has_pub_addr(self, addr): + return addr in self._pub_addrs + + def add_pub_addr(self, addr): + self.add_addr(self._pub_addrs, addr, "pub") + + def remove_pub_addr(self, addr): + self.remove_addr(self._pub_addrs, addr, "pub") + + def has_pub_addr_mdl(self, addr, mdl): + return self.has_addr_mdl(self._pub_addrs, addr, mdl, "pub") + + def add_pub_addr_mdl(self, addr, mdl): + self.add_addr_mdl(self._pub_addrs, addr, mdl, "pub") + + def remove_pub_addr_mdl(self, addr, mdl): + self.remove_addr_mdl(self._pub_addrs, addr, mdl, "pub") + + def gen_pub_addr_mdls(self, addr) -> Iterable[ModelID]: + return self.gen_addr_mdls(self._pub_addrs, addr, "pub") + + # Subscription element address methods + @property + def sub_addrs(self): + return (addr for addr in self._sub_addrs) + + def has_sub_addr(self, addr): + return addr in self._sub_addrs + + def add_sub_addr(self, addr): + self.add_addr(self._sub_addrs, addr, "sub") + + def remove_sub_addr(self, addr): + self.remove_addr(self._sub_addrs, addr, "sub") + + def has_sub_addr_mdl(self, addr, mdl): + return self.has_addr_mdl(self._sub_addrs, addr, mdl, "sub") + + def add_sub_addr_mdl(self, addr, mdl): + self.add_addr_mdl(self._sub_addrs, addr, mdl, "sub") + + def remove_sub_addr_mdl(self, addr, mdl): + self.remove_addr_mdl(self._sub_addrs, addr, mdl, "sub") + + def gen_sub_addr_mdls(self, addr) -> Iterable[ModelID]: + return self.gen_addr_mdls(self._sub_addrs, addr, "sub") + + # Binding element address methods + @property + def bind_addrs(self): + return (addr for addr in self._bind_addrs) + + def has_bind_addr(self, addr): + return addr in self._bind_addrs + + def add_bind_addr(self, addr): + self.add_addr(self._bind_addrs, addr, "bind") + + def remove_bind_addr(self, addr): + self.remove_addr(self._bind_addrs, addr, "bind") + + def has_bind_addr_mdl(self, addr, mdl): + return self.has_addr_mdl(self._bind_addrs, addr, mdl, "bind") + + def add_bind_addr_mdl(self, addr, mdl): + self.add_addr_mdl(self._bind_addrs, addr, mdl, "bind") + + def remove_bind_addr_mdl(self, addr, mdl): + self.remove_addr_mdl(self._bind_addrs, addr, mdl, "bind") + + def gen_bind_addr_mdls(self, addr) -> Iterable[ModelID]: + return self.gen_addr_mdls(self._bind_addrs, addr, "bind") + + # Binding element address methods + @property + def addrs(self): + # Remove duplicate values because an address might be in publication, + # subscription and bind addresses as well + addrs_set = set(self.pub_addrs) + addrs_set.update(self.sub_addrs) + addrs_set.update(self.bind_addrs) + yield from addrs_set + + +class BtmeshDfuAppDatabase(StateDictObject): + def __init__(self, btmesh_db=None, app_groups={}, fwid_metadata_cache={}): + if isinstance(btmesh_db, BtmeshDatabase): + self.btmesh_db = btmesh_db + elif isinstance(btmesh_db, Mapping): + self.btmesh_db = BtmeshDatabase.create_from_dict(btmesh_db) + else: + self.btmesh_db = BtmeshDatabase() + self.app_groups: Dict[str, BtmeshDfuAppGroup] = {} + for group in app_groups.values(): + if isinstance(group, Mapping): + self.add_app_group(BtmeshDfuAppGroup.create_from_dict(group)) + elif isinstance(group, BtmeshDfuAppGroup): + self.add_app_group(group) + else: + self.raise_construction_error("group", group, type_error=True) + self.fwid_metadata_cache: Dict[bytes, bytes] = {} + for raw_fwid, raw_metadata in fwid_metadata_cache.items(): + fwid_bytes = StateDictObject.to_bytes(raw_fwid) + metadata = StateDictObject.to_bytes(raw_metadata) + self.fwid_metadata_cache[fwid_bytes] = metadata + self.btmesh_db.set_event_emitter(app_btmesh.emit_local_event) + + def clear(self): + self.btmesh_db.clear() + self.app_groups.clear() + self.fwid_metadata_cache.clear() + db_clr_event = BtmeshDfuAppDbClearedEvent() + app_btmesh.emit_local_event(db_clr_event) + + def save(self, path=None): + if path is None: + json_path = app_cfg.persistence.path + else: + # Create path object from parameter to accept string as well. + # Path class handles Path object parameter in its constructor + # gracefully so it is not necessary to check for type. + json_path = Path(path) + with json_path.open("w") as json_file: + json_dict = self.to_dict() + json_text = json.dumps(json_dict, indent=4) + json_file.write(json_text) + + def load(self, path=None): + if path is None: + json_path = app_cfg.persistence.path + else: + # Create path object from parameter to accept string as well. + # Path class handles Path object parameter in its constructor + # gracefully so it is not necessary to check for type. + json_path = Path(path) + if json_path.exists(): + with json_path.open() as json_file: + json_text = json_file.read() + try: + json_dict = json.loads(json_text) + self.from_dict(json_dict) + except (json.JSONDecodeError, ValueError, TypeError) as e: + if app_cfg.persistence.default_on_failed_load: + if app_cfg.persistence.backup_on_failed_load: + p = json_path + date_str = f"_{datetime.now():%Y%m%d_%H%M%S}" + temp_folder_path = p.parent / "temp" + temp_folder_path.mkdir(exist_ok=True) + backup_path = temp_folder_path / Path( + p.stem + date_str + p.suffix + ".bak" + ) + with backup_path.open("w") as backup_file: + backup_file.write(json_text) + self.clear() + self.save() + raise BtmeshDfuAppDbLoadError( + json_path, + f"Failed to load {json_path} persistent data. " + f"JSON load error reason: {e}", + ) from e + else: + self.clear() + + def add_app_group(self, app_group): + if app_group.name in self.app_groups: + raise ValueError(f'App group name "{app_group.name}" already exists.') + self.app_groups[app_group.name] = app_group + + def remove_app_group(self, name): + return self.app_groups.pop(name) + + def has_app_group(self, name): + return name in self.app_groups + + def rename_app_group(self, current_name, new_name): + if current_name not in self.app_groups: + raise ValueError(f'App group with "{current_name}" does not exist.') + if new_name in self.app_groups: + raise ValueError(f'App group name "{new_name}" already exists.') + # It is necessary to remove the app_group on rename because the key + # in the dictionary is the name of the app_group + app_group = self.remove_app_group(current_name) + app_group.name = new_name + self.add_app_group(app_group) + + def gen_app_groups(self): + return (ag for ag in self.app_groups.values()) + + def gen_app_group_names(self): + return (ag for ag in self.app_groups.keys()) + + def get_app_group_list(self, groupfilter=None, order_property=None, reverse=False): + identity = lambda n: n + groupfilter = groupfilter if groupfilter else identity + app_group_gen = self.gen_app_groups() + if order_property: + key = operator.attrgetter(order_property) + return sorted(app_group_gen, key=key, reverse=reverse) + else: + return list(app_group_gen) + + def get_app_group_by_name(self, name): + if name not in self.app_groups: + raise ValueError(f'App group with "{name}" does not exist.') + return self.app_groups[name] + + def gen_app_group_nodes(self, app_group_name): + app_group = self.get_app_group_by_name(app_group_name) + node_dict = dict.fromkeys( + (self.btmesh_db.get_node_by_elem_addr(addr) for addr in app_group.addrs) + ) + yield from node_dict.keys() + + def get_app_group_node_list( + self, app_group_name, nodefilter=None, order_property=None, reverse=False + ): + identity = lambda n: n + nodefilter = nodefilter if nodefilter else identity + node_gen = self.gen_app_group_nodes(app_group_name) + if order_property: + key = operator.attrgetter(order_property) + return sorted(node_gen, key=key, reverse=reverse) + else: + return list(node_gen) + + def get_remote_node_by_name(self, name, retry_params: BtmeshRetryParams = None): + node = self.btmesh_db.get_node_by_name(name) + return RemoteNode(btmesh=app_btmesh, node=node, retry_params=retry_params) + + def get_remote_node_by_uuid(self, uuid, retry_params: BtmeshRetryParams = None): + node = self.btmesh_db.get_node_by_uuid(uuid) + return RemoteNode(btmesh=app_btmesh, node=node, retry_params=retry_params) + + def get_remote_node_by_prim_addr( + self, prim_addr, retry_params: BtmeshRetryParams = None + ): + node = self.btmesh_db.get_node_by_prim_addr(prim_addr) + return RemoteNode(btmesh=app_btmesh, node=node, retry_params=retry_params) + + def get_remote_node_by_elem_addr( + self, elem_addr, retry_params: BtmeshRetryParams = None + ): + node = self.btmesh_db.get_node_by_elem_addr(elem_addr) + return RemoteNode(btmesh=app_btmesh, node=node, retry_params=retry_params) + + def get_metadata_by_fwid( + self, fwid: FWID, default: Optional[bytes] = None + ) -> Optional[bytes]: + return self.fwid_metadata_cache.get(fwid.to_bytes(), default) + + def add_fwid_metadata_pair(self, fwid: FWID, metadata: bytes) -> None: + self.fwid_metadata_cache[fwid.to_bytes()] = metadata + + def clear_fwid_metadata_cache(self) -> None: + self.fwid_metadata_cache.clear() + + +app_db = BtmeshDfuAppDatabase() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/exec.py b/app/btmesh/example_host/btmesh_host_dfu/app/exec.py new file mode 100644 index 00000000000..4533138be0e --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/exec.py @@ -0,0 +1,406 @@ +# 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. + +import cmd +import logging +import sys +from typing import Optional + +from bgapi.bglib import CommandFailedError + +import btmesh.util +from bgapix.bglibx import (BGLibExt, BGLibExtRetryParams, + BGLibExtSyncSignalException) +from bgapix.slstatus import SlStatus +from btmesh.db import ModelID +from btmesh.mdl import NamedModelID +from btmesh.util import BtmeshRetryParams + +from .btmesh import app_btmesh +from .cfg import app_cfg +from .cmd.conf import conf_cmd +from .cmd.dfu import dfu_cmd +from .cmd.dist import dist_cmd +from .cmd.group import group_cmd +from .cmd.node import node_cmd +from .cmd.prov import prov_cmd +from .cmd.reset import reset_cmd +from .cmd.scan import scan_cmd +from .db import BtmeshDfuAppDbLoadError, app_db +from .grpctrl import app_grctrl +from .ui import app_ui +from .util.argparsex import (ArgumentErrorExt, ArgumentHelpException, + ArgumentParserExt) + +logger = logging.getLogger(__name__) + +APP_COMMANDS = [reset_cmd, scan_cmd, prov_cmd, node_cmd, group_cmd, conf_cmd, dfu_cmd, dist_cmd] + + +class BtmeshDfuAppResetException(Exception): + def __init__(self, boot_event, *args: object) -> None: + super().__init__(*args) + self.boot_event = boot_event + + +class BtmeshDfuAppExec(cmd.Cmd): + + APP_NAME = "BT Mesh Host DFU" + intro = """ + ____ _______ __ __ _ _ _ _ _____ __ + | _ \__ __| | \/ | | | | | | | | | | __ \ / _| + | |_) | | | | \ / | ___ ___| |__ | |__| | ___ ___| |_ | | | | |_ _ _ + | _ < | | | |\/| |/ _ \/ __| '_ \ | __ |/ _ \/ __| __| | | | | _| | | | + | |_) | | | | | | | __/\__ \ | | | | | | | (_) \__ \ |_ | |__| | | | |_| | + |____/ |_| |_| |_|\___||___/_| |_| |_| |_|\___/|___/\__| |_____/|_| \__,_| + """ + prompt = ">>>" + + def __init__(self, completekey="tab", stdin=None, stdout=None): + super().__init__(completekey, stdin, stdout) + self.cmd_parser: Optional[ArgumentParserExt] = None + self._subparsers = None + self._interactive = None + self._lib: Optional[BGLibExt] = None + self.async_signal_proc_on = True + self.cmd_active = False + self.reset_cmd_active = False + + def handle_async_signal(self, event): + if self.async_signal_proc_on: + sys.exit(-1) + + def handle_sync_signal(self, event): + raise BGLibExtSyncSignalException(event.signum) + + @property + def subparsers(self): + return self._subparsers + + @property + def interactive(self): + return self._interactive + + @interactive.setter + def interactive(self, value): + self._interactive = value + + @property + def lib(self): + return self._lib + + @lib.setter + def lib(self, value): + self._lib = value + + def build_cmd_parser(self) -> ArgumentParserExt: + self.cmd_parser = ArgumentParserExt(exit_on_error_ext=False) + self._subparsers = self.cmd_parser.add_subparsers(dest="command") + for cmd in APP_COMMANDS: + cmd.create_parser(self._subparsers) + return self.cmd_parser + + def open(self, system_reset=False, factory_reset=False): + if factory_reset: + # Avoid loading the database from file in order to make the app robust. + # Note: If database loading fails then it should be possible to drop + # the problematic database before command execution. + app_db.clear() + else: + try: + app_db.load() + except BtmeshDfuAppDbLoadError as e: + app_ui.error(str(e)) + app_btmesh.setup(lib=self.lib, db=app_db.btmesh_db) + app_btmesh.open() + app_btmesh.subscribe( + event_name="bglibx_evt_signal_async_received", + handler=self.handle_async_signal, + ) + app_btmesh.subscribe( + event_name="bglibx_evt_signal_sync_received", + handler=self.handle_sync_signal, + ) + app_btmesh.subscribe( + event_name="bt_evt_system_boot", handler=self.handle_system_boot + ) + if factory_reset: + app_ui.info("Factory reset...") + app_btmesh.factory_reset(app_cfg.reset.factory_reset_delay_s) + app_db.save() + elif system_reset: + # Optional system reset on the NCP device in order to move it into + # known state because all bt and btmesh stack state machines are + # reset to default state. + app_btmesh.system_reset() + app_grctrl.setup() + + def handle_system_boot(self, boot_event): + if self.cmd_active and not self.reset_cmd_active: + raise BtmeshDfuAppResetException(boot_event) + else: + self.execute_boot_actions(boot_event) + + def execute_boot_actions(self, boot_event): + app_btmesh.on_system_boot(boot_event) + self.prov_init() + + def prov_init(self): + # Initialize the node as provisioner to make sure the NCP device is + # able to receive BT and BT Mesh stack commands. + # The prov_init method does not raise any error when the BT Mesh stack + # is already initialized. + network_count = app_btmesh.prov.init() + # Initialize BT Mesh Stack classes + self.dfu_init() + self.conf_init() + # If there are no networks on the NCP node then one is created by default. + # This scripts support one netkey and appkey only because it demonstrates + # the firmware update and not the provisioner and configurator. + if network_count == 0: + if app_cfg.network.random_netkey: + netkey = bytes() + else: + netkey = app_cfg.network.netkey + if app_cfg.network.random_appkey: + appkeys = [bytes()] * app_cfg.network.appkey_cnt + else: + appkeys = list(app_cfg.network.appkeys) + app_btmesh.prov.create_network( + netkey, appkeys, app_cfg.network._prov_node_name + ) + # Configure local BT Mesh models + self.dfu_local_conf() + self.conf_local_conf() + self.sar_local_conf() + + def dfu_init(self): + dfu_clt_retry_params = BGLibExtRetryParams( + retry_max=app_cfg.dfu_clt.dfu_retry_max_default, + retry_interval=app_cfg.dfu_clt.dfu_retry_interval_default, + retry_cmd_max=app_cfg.common.retry_cmd_max_default, + retry_cmd_interval=app_cfg.common.retry_cmd_interval_default, + ) + dist_clt_retry_params = BtmeshRetryParams( + retry_max=app_cfg.dist_clt.dist_retry_max_default, + retry_interval=app_cfg.dist_clt.dist_retry_interval_default, + retry_interval_lpn=app_cfg.dist_clt.dist_retry_interval_lpn_default, + retry_cmd_max=app_cfg.common.retry_cmd_max_default, + retry_cmd_interval=app_cfg.common.retry_cmd_interval_default, + ) + app_btmesh.mbt_clt.init( + elem_index=app_cfg.mbt_clt.elem_index, + max_servers=app_cfg.mbt_clt.max_servers, + max_blocks=app_cfg.mbt_clt.max_blocks, + max_chunks_per_block=app_cfg.mbt_clt.max_chunks_per_block, + retry_params_default=dfu_clt_retry_params, + ) + app_btmesh.dfu_clt.init( + elem_index=app_cfg.dfu_clt.elem_index, + max_updating_nodes=app_cfg.dfu_clt.max_updating_nodes, + retry_params_default=dfu_clt_retry_params, + ) + app_btmesh.dist_clt.init( + elem_index=app_cfg.dist_clt.elem_index, + retry_params_default=dist_clt_retry_params, + ) + + def conf_init(self): + app_btmesh.conf.silabs_conf_svr_init() + app_btmesh.conf.silabs_conf_clt_init() + conf_retry_params = BtmeshRetryParams( + retry_max=app_cfg.conf.conf_retry_max_default, + retry_interval=app_cfg.conf.conf_retry_interval_default, + retry_interval_lpn=app_cfg.conf.conf_retry_interval_lpn_default, + retry_cmd_max=app_cfg.common.retry_cmd_max_default, + retry_cmd_interval=app_cfg.common.retry_cmd_interval_default, + ) + silabs_conf_retry_params = BtmeshRetryParams( + retry_max=app_cfg.conf.silabs_retry_max_default, + retry_interval=app_cfg.conf.silabs_retry_interval_default, + retry_interval_lpn=app_cfg.conf.silabs_retry_interval_lpn_default, + retry_cmd_max=app_cfg.common.retry_cmd_max_default, + retry_cmd_interval=app_cfg.common.retry_cmd_interval_default, + ) + reset_node_retry_params = BtmeshRetryParams( + retry_max=app_cfg.conf.reset_node_retry_max_default, + retry_interval=app_cfg.conf.reset_node_retry_interval_default, + retry_interval_lpn=app_cfg.conf.reset_node_retry_interval_lpn_default, + retry_cmd_max=app_cfg.common.retry_cmd_max_default, + retry_cmd_interval=app_cfg.common.retry_cmd_interval_default, + ) + app_btmesh.conf.set_conf_retry_params_default(conf_retry_params) + app_btmesh.conf.set_silabs_retry_params_default(silabs_conf_retry_params) + app_btmesh.conf.set_reset_node_retry_params_default(reset_node_retry_params) + + + def dfu_local_conf(self): + # Set appkey bindings to BLOB Transfer Client model + elem_index = app_cfg.mbt_clt.elem_index + mdl = ModelID(NamedModelID.BLOB_TRANSFER_CLIENT) + appkey_idx_list = app_btmesh.conf.list_local_bindings(elem_index, mdl) + if not appkey_idx_list: + for appkey_index in range(app_cfg.network.appkey_cnt): + app_btmesh.conf.bind_local_mdl(elem_index, mdl, appkey_index) + # Set appkey bindings to Firmware Update Client model + elem_index = app_cfg.dfu_clt.elem_index + mdl = ModelID(NamedModelID.FIRMWARE_UPDATE_CLIENT) + appkey_idx_list = app_btmesh.conf.list_local_bindings(elem_index, mdl) + if not appkey_idx_list: + for appkey_index in range(app_cfg.network.appkey_cnt): + app_btmesh.conf.bind_local_mdl(elem_index, mdl, appkey_index) + # Set appkey bindings to Firmware Distribution Client model + elem_index = app_cfg.dist_clt.elem_index + mdl = ModelID(NamedModelID.FIRMWARE_DISTRIBUTION_CLIENT) + appkey_idx_list = app_btmesh.conf.list_local_bindings(elem_index, mdl) + if not appkey_idx_list: + for appkey_index in range(app_cfg.network.appkey_cnt): + app_btmesh.conf.bind_local_mdl(elem_index, mdl, appkey_index) + + def conf_local_conf(self): + if app_btmesh.conf.silabs_conf_support: + elem_index = btmesh.util.PRIM_ELEM_INDEX + mdls = [ + ModelID(NamedModelID.SILABS_CONFIGURATION_SERVER), + ModelID(NamedModelID.SILABS_CONFIGURATION_CLIENT), + ] + for mdl in mdls: + appkey_idx_list = app_btmesh.conf.list_local_bindings(elem_index, mdl) + if not appkey_idx_list: + for appkey_index in range(app_cfg.network.appkey_cnt): + app_btmesh.conf.bind_local_mdl(elem_index, mdl, appkey_index) + + def sar_local_conf(self): + if hasattr(self.lib.btmesh, "sar_config_server"): + # The SAR transmitter configuration getter and setter functions don't + # require initialization call and it is not mandatory to have SAR + # Configuration Server in the Device Composition Data. + # These are necessary only to handle SAR Config messages. + + # Get the current SAR Configuration Server Transmitter state to modify + # the critical parameter only and keep the default values of others. + resp = self.lib.btmesh.sar_config_server.get_sar_transmitter() + # The BLOB Transfer procedure has a high-level retransmission logic + # which detects missing chunks and retransmits the missing ones. + # The retransmissions are disabled in Lower Transport layer because + # it slows down the BLOB Transfer significantly. + multicast_retrans_count = 0 + self.lib.btmesh.sar_config_server.set_sar_transmitter( + resp.segment_interval_step, + resp.unicast_retrans_count, + resp.unicast_retrans_wo_progress_count, + resp.unicast_retrans_interval_step, + resp.unicast_retrans_interval_increment, + multicast_retrans_count, + resp.multicast_retrans_interval_step, + ) + + def close(self): + app_btmesh.close() + + def onecmd(self, line): + self.async_signal_proc_on = False + app_ui.log_user_input(line) + exit_request = not self.interactive + try: + app_btmesh.wait(timeout=0.0, max_time=None) + self.cmd_active = True + exit_request = super().onecmd(line) + app_db.save() + except ArgumentHelpException as e: + app_ui.info(e.message) + except ArgumentErrorExt as e: + app_ui.parser_error(e.parser, e.message) + except CommandFailedError as e: + status_name = SlStatus.get_name(e.errorcode) + app_ui.error(str(e) + f" ({status_name})") + except BGLibExtSyncSignalException as e: + app_ui.info("Command is aborted by user.") + except BtmeshDfuAppResetException as e: + app_ui.info("Unexpected system reset.") + self.execute_boot_actions(e.boot_event) + except Exception as e: + app_ui.error(str(e)) + finally: + self.async_signal_proc_on = True + self.cmd_active = False + self.reset_cmd_active = False + return exit_request + + def do_reset(self, arg): + self.reset_cmd_active = True + exit_request = reset_cmd(arg) + return exit_request + + def help_reset(self): + reset_cmd.help() + + def do_scan(self, arg): + return scan_cmd(arg) + + def help_scan(self): + scan_cmd.help() + + def do_prov(self, arg): + return prov_cmd(arg) + + def help_prov(self): + prov_cmd.help() + + def do_node(self, arg): + return node_cmd(arg) + + def help_node(self): + node_cmd.help() + + def do_group(self, arg): + return group_cmd(arg) + + def help_group(self): + group_cmd.help() + + def do_conf(self, arg): + return conf_cmd(arg) + + def help_conf(self): + conf_cmd.help() + + def do_dfu(self, arg): + return dfu_cmd(arg) + + def help_dfu(self): + dfu_cmd.help() + + def do_dist(self, arg): + return dist_cmd(arg) + + def help_dist(self): + dist_cmd.help() + + def do_exit(self, args): + return True + + def do_print(self, args): + print(args) + + +app_exec = BtmeshDfuAppExec() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/grpctrl.py b/app/btmesh/example_host/btmesh_host_dfu/app/grpctrl.py new file mode 100644 index 00000000000..2a674e14840 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/grpctrl.py @@ -0,0 +1,503 @@ +# 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. + +import logging + +import btmesh.util +from btmesh.db import BtmeshDbNodeRemoved, ModelID, Node +from btmesh.util import BtmeshRetryParams + +from .btmesh import app_btmesh +from .db import BtmeshDfuAppDbClearedEvent, BtmeshDfuAppGroup, app_db + +logger = logging.getLogger(__name__) + + +class BtmeshDfuAppGroupController: + NETKEY_IDX = 0 + + def __init__(self) -> None: + # One for bind, pub, sub + # (addr, mdl) --> app_group1, app_group2 + self.pub_info = {} + self.sub_info = {} + self.bind_info = {} + + def _add_pub_info(self, app_group_name: str, addr: int, mdl: ModelID): + if (addr, mdl) not in self.pub_info: + self.pub_info[(addr, mdl)] = set() + self.pub_info[(addr, mdl)].add(app_group_name) + + def _remove_pub_info(self, app_group_name: str, addr: int, mdl: ModelID): + self.pub_info[(addr, mdl)].remove(app_group_name) + if len(self.pub_info[(addr, mdl)]) == 0: + del self.pub_info[(addr, mdl)] + + def _add_sub_info(self, app_group_name: str, addr: int, mdl: ModelID): + if (addr, mdl) not in self.sub_info: + self.sub_info[(addr, mdl)] = set() + self.sub_info[(addr, mdl)].add(app_group_name) + + def _remove_sub_info(self, app_group_name: str, addr: int, mdl: ModelID): + self.sub_info[(addr, mdl)].remove(app_group_name) + if len(self.sub_info[(addr, mdl)]) == 0: + del self.sub_info[(addr, mdl)] + + def _add_bind_info(self, app_group_name: str, addr: int, mdl: ModelID): + if (addr, mdl) not in self.bind_info: + self.bind_info[(addr, mdl)] = set() + self.bind_info[(addr, mdl)].add(app_group_name) + + def _remove_bind_info(self, app_group_name: str, addr: int, mdl: ModelID): + self.bind_info[(addr, mdl)].remove(app_group_name) + if len(self.bind_info[(addr, mdl)]) == 0: + del self.bind_info[(addr, mdl)] + + def _is_appkey_required_on_node(self, appkey_index: int, node: Node): + for addr in node.elem_addrs: + for bind_addr, bind_mdl in self.bind_info: + if addr == bind_addr: + for app_group_name in self.bind_info[(bind_addr, bind_mdl)]: + app_group = app_db.get_app_group_by_name(app_group_name) + if app_group.appkey_index == appkey_index: + return True + return False + + def _build_pub_info(self): + for app_group in app_db.gen_app_groups(): + for pub_addr in app_group.pub_addrs: + for pub_mdl in app_group.gen_pub_addr_mdls(pub_addr): + self._add_pub_info(app_group.name, pub_addr, pub_mdl) + + def _build_sub_info(self): + for app_group in app_db.gen_app_groups(): + for sub_addr in app_group.sub_addrs: + for sub_mdl in app_group.gen_sub_addr_mdls(sub_addr): + self._add_sub_info(app_group.name, sub_addr, sub_mdl) + + def _build_bind_info(self): + for app_group in app_db.gen_app_groups(): + for bind_addr in app_group.bind_addrs: + for bind_mdl in app_group.gen_bind_addr_mdls(bind_addr): + self._add_bind_info(app_group.name, bind_addr, bind_mdl) + + def build_info(self): + self._build_pub_info() + self._build_sub_info() + self._build_bind_info() + + def clear_info(self): + self.pub_info.clear() + self.sub_info.clear() + self.bind_info.clear() + + def setup(self): + self.build_info() + app_btmesh.subscribe("btmesh_levt_app_db_cleared", self.on_app_db_cleared) + app_btmesh.subscribe("btmesh_levt_db_node_removed", self.on_db_node_removed) + + def on_app_db_cleared(self, event: BtmeshDfuAppDbClearedEvent): + self.clear_info() + + def on_db_node_removed(self, event: BtmeshDbNodeRemoved): + node = event.node + self.remove_node(node, local=True) + + def remove_node(self, node: Node, local: bool = False): + for elem_addr in node.elem_addrs: + self.remove_elem_addr(elem_addr=elem_addr, local=local) + + def remove_elem_addr(self, elem_addr: int, local: bool = False): + btmesh.util.validate_unicast_address(elem_addr) + # Create list of operations for publication, subscription and binding. + # This is essential because the remove_pub_mdl, remove_sub_mdl and + # remove_bind_mdl methods modifies the pub_info, sub_info, bind_info + # dictionaries which needs to be iterated as well. + # Note: It may result in incorrect behavior when a collection is modified + # during the iteration of the same collection. + pub_mdls = [mdl for addr, mdl in self.pub_info.keys() if addr == elem_addr] + sub_mdls = [mdl for addr, mdl in self.sub_info.keys() if addr == elem_addr] + bind_mdls = [mdl for addr, mdl in self.bind_info.keys() if addr == elem_addr] + for mdl in pub_mdls: + app_group_names = set(self.pub_info[(elem_addr, mdl)]) + for app_group_name in app_group_names: + # Each model can publish to a single group address only and + # hence to a single app group. + # Defensive programming: iterate over the values. + # Note: The auto_unbind feature is not used because the whole + # node is removed so all bindings are removed as well. + self.remove_pub_mdl( + app_group_name=app_group_name, + addr=elem_addr, + mdl=mdl, + auto_unbind=False, + local=local, + ) + for mdl in sub_mdls: + app_group_names = set(self.sub_info[(elem_addr, mdl)]) + for app_group_name in app_group_names: + # Each model can be subscribed to multiple group addresses and + # hence to multiple app groups. + # Note: The auto_unbind feature is not used because the whole + # node is removed so all bindings are removed as well. + self.remove_sub_mdl( + app_group_name=app_group_name, + addr=elem_addr, + mdl=mdl, + auto_unbind=False, + local=local, + ) + for mdl in bind_mdls: + app_group_names = set(self.bind_info[(elem_addr, mdl)]) + for app_group_name in app_group_names: + # Each model can be bound to multiple application keys and hence + # to multiple app groups. + self.remove_bind_mdl( + app_group_name=app_group_name, + addr=elem_addr, + mdl=mdl, + local=local, + ) + + def add_app_group( + self, + name: str, + group_addr: int, + appkey_index: int, + pub_ttl: int = 5, + pub_credentials: int = 0, + pub_period_ms: int = 0, + pub_retransmit_count: int = 0, + pub_retransmit_interval_ms: int = 0, + ): + app_group = BtmeshDfuAppGroup( + name=name, + group_addr=group_addr, + appkey_index=appkey_index, + pub_ttl=pub_ttl, + pub_credentials=pub_credentials, + pub_period_ms=pub_period_ms, + pub_retransmit_count=pub_retransmit_count, + pub_retransmit_interval_ms=pub_retransmit_interval_ms, + ) + app_db.add_app_group(app_group) + + def rename_app_group(self, current_name, new_name): + app_db.rename_app_group(current_name=current_name, new_name=new_name) + # If the rename fails then an exception is raised so this code runs only + # when the rename was successful in the application database + for app_group_set in self.pub_info.values(): + if current_name in app_group_set: + app_group_set.remove(current_name) + app_group_set.add(new_name) + for app_group_set in self.sub_info.values(): + if current_name in app_group_set: + app_group_set.remove(current_name) + app_group_set.add(new_name) + for app_group_set in self.bind_info.values(): + if current_name in app_group_set: + app_group_set.remove(current_name) + app_group_set.add(new_name) + + def add_pub_mdl( + self, + app_group_name: str, + addr: int, + mdl: ModelID, + auto_bind=True, + retry_params: BtmeshRetryParams = None, + ): + app_group = app_db.get_app_group_by_name(app_group_name) + other_app_group_names = self.pub_info.get((addr, mdl), None) + if app_group.has_pub_addr(addr) and app_group.has_pub_addr_mdl(addr, mdl): + raise ValueError( + f"The {mdl.pretty_name()} model name on 0x{addr:04X} element " + f"address already publishes to {app_group_name} app group." + ) + if other_app_group_names: + other_app_group_name = next(iter(other_app_group_names)) + raise ValueError( + f"The {mdl.pretty_name()} model name on 0x{addr:04X} element " + f"address can publish to one app group only. It is already in " + f"{other_app_group_name} app group." + ) + node = app_db.btmesh_db.get_node_by_elem_addr(addr) + elem_index = node.get_elem_index(addr) + if auto_bind and not ( + app_group.has_bind_addr(addr) and app_group.has_bind_addr_mdl(addr, mdl) + ): + self.add_bind_mdl(app_group_name=app_group_name, addr=addr, mdl=mdl) + app_btmesh.conf.set_model_pub( + node=node, + elem_index=elem_index, + model=mdl, + pub_address=app_group.group_addr, + appkey_index=app_group.appkey_index, + credentials=app_group.pub_credentials, + ttl=app_group.pub_ttl, + period_ms=app_group.pub_period_ms, + retransmit_count=app_group.pub_retransmit_count, + retransmit_interval_ms=app_group.pub_retransmit_interval_ms, + retry_params=retry_params, + ) + app_group.add_pub_addr_mdl(addr=addr, mdl=mdl) + self._add_pub_info(app_group_name=app_group.name, addr=addr, mdl=mdl) + + def remove_pub_mdl( + self, + app_group_name: str, + addr: int, + mdl: ModelID, + auto_unbind=True, + local: bool = False, + retry_params: BtmeshRetryParams = None, + ): + app_group = app_db.get_app_group_by_name(app_group_name) + if not (app_group.has_pub_addr(addr) and app_group.has_pub_addr_mdl(addr, mdl)): + raise ValueError( + f"The {mdl.pretty_name()} model name on 0x{addr:04X} element " + f"address does not publish to {app_group_name} app group." + ) + if not local: + # If local is set then the operation affects the database only and + # no message is sent to the remote node. + node = app_db.btmesh_db.get_node_by_elem_addr(addr) + elem_index = node.get_elem_index(addr) + app_btmesh.conf.set_model_pub( + node=node, + elem_index=elem_index, + model=mdl, + pub_address=btmesh.util.UNASSIGNED_ADDR, + appkey_index=0, + credentials=0, + ttl=0, + period_ms=0, + retransmit_count=0, + retransmit_interval_ms=0, + retry_params=retry_params, + ) + if ( + auto_unbind + and app_group.has_bind_addr(addr) + and app_group.has_bind_addr_mdl(addr, mdl) + and not ( + app_group.has_sub_addr(addr) + and app_group.has_sub_addr_mdl(addr, mdl) + ) + ): + self.remove_bind_mdl(app_group_name=app_group_name, addr=addr, mdl=mdl) + app_group.remove_pub_addr_mdl(addr=addr, mdl=mdl) + self._remove_pub_info(app_group_name=app_group.name, addr=addr, mdl=mdl) + + def add_sub_mdl( + self, + app_group_name: str, + addr: int, + mdl: ModelID, + auto_bind=True, + retry_params: BtmeshRetryParams = None, + ): + app_group = app_db.get_app_group_by_name(app_group_name) + if app_group.has_sub_addr(addr) and app_group.has_sub_addr_mdl(addr, mdl): + raise ValueError( + f"The {mdl.pretty_name()} model name on 0x{addr:04X} element " + f"address is already subscribed to {app_group_name} app group." + ) + for other_app_group_name in self.sub_info.get((addr, mdl), set()): + # The other app group shall exists so no exception can occur here + other_app_group = app_db.get_app_group_by_name(other_app_group_name) + if app_group.group_addr == other_app_group.group_addr: + # The model is subscribed to the same group address due to + # another app group so no operation shall be performed which + # is forbidden for subscription because it may lead to unexpected + # behavior. + raise ValueError( + f"The {mdl.pretty_name()} model name on 0x{addr:04X} element " + f"is already subscribed to 0x{other_app_group.group_addr:04X} " + f"group address by {other_app_group_name} app group so it " + f"can't be added to {app_group_name} app group." + ) + node = app_db.btmesh_db.get_node_by_elem_addr(addr) + elem_index = node.get_elem_index(addr) + if auto_bind and not ( + app_group.has_bind_addr(addr) and app_group.has_bind_addr_mdl(addr, mdl) + ): + self.add_bind_mdl(app_group_name=app_group_name, addr=addr, mdl=mdl) + app_btmesh.conf.add_model_sub( + node=node, + elem_index=elem_index, + model=mdl, + sub_address=app_group.group_addr, + retry_params=retry_params, + ) + app_group.add_sub_addr_mdl(addr=addr, mdl=mdl) + self._add_sub_info(app_group_name=app_group.name, addr=addr, mdl=mdl) + + def remove_sub_mdl( + self, + app_group_name: str, + addr: int, + mdl: ModelID, + auto_unbind=True, + local: bool = False, + retry_params: BtmeshRetryParams = None, + ): + app_group = app_db.get_app_group_by_name(app_group_name) + if not (app_group.has_sub_addr(addr) and app_group.has_sub_addr_mdl(addr, mdl)): + raise ValueError( + f"The {mdl.pretty_name()} model name on 0x{addr:04X} element " + f"address is not subscribed to {app_group_name} app group." + ) + if not local: + # If local is set then the operation affects the database only and + # no message is sent to the remote node. + node = app_db.btmesh_db.get_node_by_elem_addr(addr) + elem_index = node.get_elem_index(addr) + app_btmesh.conf.remove_model_sub( + node=node, + elem_index=elem_index, + model=mdl, + sub_address=app_group.group_addr, + retry_params=retry_params, + ) + if ( + auto_unbind + and app_group.has_bind_addr(addr) + and app_group.has_bind_addr_mdl(addr, mdl) + and not ( + app_group.has_pub_addr(addr) + and app_group.has_pub_addr_mdl(addr, mdl) + ) + ): + # If the same model on an element publishes and subscribes to + # the same app group then appkey shall not be unbound by the + # auto_unbind feature until both of these are removed. + self.remove_bind_mdl(app_group_name=app_group_name, addr=addr, mdl=mdl) + app_group.remove_sub_addr_mdl(addr=addr, mdl=mdl) + self._remove_sub_info(app_group_name=app_group.name, addr=addr, mdl=mdl) + + def add_bind_mdl( + self, + app_group_name: str, + addr: int, + mdl: ModelID, + auto_bind=False, + retry_params: BtmeshRetryParams = None, + ): + app_group = app_db.get_app_group_by_name(app_group_name) + if app_group.has_bind_addr(addr) and app_group.has_bind_addr_mdl(addr, mdl): + if auto_bind: + return + raise ValueError( + f"The {mdl.pretty_name()} model name on 0x{addr:04X} element " + f"address is already bound to {app_group_name} app group." + ) + for other_app_group_name in self.bind_info.get((addr, mdl), set()): + # The other app group shall exists so no exception can occur here + other_app_group = app_db.get_app_group_by_name(other_app_group_name) + if app_group.appkey_index == other_app_group.appkey_index: + # The appkey_index is not bound to the model by another app group + # so no operation shall be performed + break + else: + # The appkey_index is not bound to the model by another app group + # so the bind operation is necessary + node = app_db.btmesh_db.get_node_by_elem_addr(addr) + elem_index = node.get_elem_index(addr) + if not node.has_appkey_index(app_group.appkey_index): + # The appkey was not uploaded to the node previously so + # this is the first model which will use it + app_btmesh.conf.add_appkey( + node=node, + appkey_index=app_group.appkey_index, + netkey_index=self.NETKEY_IDX, + retry_params=retry_params, + ) + app_btmesh.conf.bind_model( + node=node, + elem_index=elem_index, + model=mdl, + appkey_index=app_group.appkey_index, + retry_params=retry_params, + ) + app_group.add_bind_addr_mdl(addr=addr, mdl=mdl) + self._add_bind_info(app_group_name=app_group.name, addr=addr, mdl=mdl) + + def remove_bind_mdl( + self, + app_group_name: str, + addr: int, + mdl: ModelID, + local: bool = False, + retry_params: BtmeshRetryParams = None, + ): + app_group = app_db.get_app_group_by_name(app_group_name) + if not ( + app_group.has_bind_addr(addr) and app_group.has_bind_addr_mdl(addr, mdl) + ): + raise ValueError( + f"The {mdl.pretty_name()} model name on 0x{addr:04X} element " + f"address is not bound to {app_group_name} app group." + ) + if not local: + for other_app_group_name in self.bind_info.get((addr, mdl), set()): + # The other app group shall exists so no exception can occur here + other_app_group = app_db.get_app_group_by_name(other_app_group_name) + # Iterate over the appkey bindings of other app groups to check + # if other app groups require the binding to the same app key + if app_group_name == other_app_group_name: + continue + if app_group.appkey_index == other_app_group.appkey_index: + # Other app group specifies the same appkey index for the + # model on the element address so the appkey binding shall + # be kept on the remote node but it shall be removed from + # the app group in the app database. + break + else: + node = app_db.btmesh_db.get_node_by_elem_addr(addr) + elem_index = node.get_elem_index(addr) + # The appkey index is bound to the model on the element address + # only due the app group which removes the bind model so the an + # unbind operation is necessary on the remote node + app_btmesh.conf.unbind_model( + node=node, + elem_index=elem_index, + model=mdl, + appkey_index=app_group.appkey_index, + retry_params=retry_params, + ) + app_group.remove_bind_addr_mdl(addr=addr, mdl=mdl) + self._remove_bind_info(app_group_name=app_group.name, addr=addr, mdl=mdl) + if not local and not self._is_appkey_required_on_node( + appkey_index=app_group.appkey_index, node=node + ): + # The appkey is no longer necessary on the node because no model + # is bound to it and therefore it can be removed + app_btmesh.conf.remove_appkey( + node=node, + appkey_index=app_group.appkey_index, + netkey_index=self.NETKEY_IDX, + retry_params=retry_params, + ) + + +app_grctrl = BtmeshDfuAppGroupController() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/rnode.py b/app/btmesh/example_host/btmesh_host_dfu/app/rnode.py new file mode 100644 index 00000000000..af5d06bf93a --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/rnode.py @@ -0,0 +1,63 @@ +# 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. + +from btmesh.core import Btmesh +from btmesh.db import DCD, Node +from btmesh.util import BtmeshRetryParams + +from .cfg import app_cfg + + +class RemoteNode: + def __init__( + self, btmesh: Btmesh, node: Node, retry_params: BtmeshRetryParams = None + ): + self.btmesh = btmesh + self._node = node + if retry_params: + self.retry_params = retry_params + else: + self.retry_params = app_cfg.common.btmesh_retry_params_default + + @property + def node(self) -> Node: + return self._node + + def __getattr__(self, name): + # Python calls the __getattr__ special method if it can't find the + # attribute name in the object. + # The RemoteNode class is a wrapper which adds dynamic behavior to the + # Node class which is a pure data class. The getattr calls are forwarded + # to the Node class which is quite useful because it is not necessary to + # wrap each property and functions of the Node class only those which + # are different. + return getattr(self.node, name) + + @property + def dcd(self) -> DCD: + if self._node.dcd is None: + # The get_dcd function updates the Node object in the database with + # the DCD information + self.btmesh.conf.get_dcd( + self._node, update_db=True, retry_params=self.retry_params + ) + return self._node.dcd diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/ui.py b/app/btmesh/example_host/btmesh_host_dfu/app/ui.py new file mode 100644 index 00000000000..b235dd7019e --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/ui.py @@ -0,0 +1,904 @@ +# 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. + +import argparse +import dataclasses +import enum +import io +import logging +import re +import sys +from typing import Dict, Iterable, List, Mapping, Sequence, Union + +import btmesh.util +from btmesh.db import FWID, ModelID, Node +from btmesh.mdl import NamedModelID + +from .cfg import app_cfg +from .db import BtmeshDfuAppGroup, app_db +from .util.tabletext import table_text_lines + +logger = logging.getLogger(__name__) + + +class BtmeshDfuAppSpecName(enum.Enum): + NODESPEC = enum.auto() + ELEMSPEC = enum.auto() + MDLSPEC = enum.auto() + FWIDSPEC = enum.auto() + METASPEC = enum.auto() + GROUPSPEC = enum.auto() + + +class BtmeshDfuAppParseSpecError(ValueError): + def __init__(self, msg, spec_name, spec_value): + super().__init__(msg) + self.msg = msg + self.spec_name = spec_name + self.spec_value = spec_value + + +@dataclasses.dataclass +class AppUIColumnInfo: + header: str + default: bool + + +class BtmeshDfuAppUI: + SEP_PATTERN = btmesh.util.SEP_PATTERN + TEXT_LIST_SEP = [",", ";", " "] + + NODE_COLUMNS = { + "idx": "Idx", + "uuid": "UUID", + "devkey": "Device Key", + "prim_addr": "Address", + "elem_count": "Elements", + "name": "Name", + "cid": "CID", + "pid": "PID", + "vid": "VID", + "crpl": "CRPL", + "relay": "Relay", + "proxy": "Proxy", + "friend": "Friend", + "lpn": "LPN", + } + + APP_GROUP_COLUMNS = { + "idx": AppUIColumnInfo(header="Idx", default=True), + "name": AppUIColumnInfo(header="Name", default=True), + "group_addr": AppUIColumnInfo(header="Group Address", default=True), + "appkey_index": AppUIColumnInfo(header="Appkey Index", default=True), + "pub_ttl": AppUIColumnInfo(header="Pub TTL", default=False), + "pub_creds": AppUIColumnInfo(header="Pub Credentials", default=False), + "pub_period_ms": AppUIColumnInfo(header="Pub Period", default=False), + "pub_retx_count": AppUIColumnInfo(header="Pub ReTxCnt", default=False), + "pub_retx_int_ms": AppUIColumnInfo(header="Pub ReTxInt", default=False), + } + + NODESPEC_HELP = ( + f"The identifies nodes and it can be UUID, primary address, " + f"node name or list index. " + f"The UUID can be specified as a 32 character long hex string. " + f"The primary address can be specified as a binary (0b), octal(0o), " + f"decimal, hex (0x) integer. " + f"The node name can be a string value with leading non-digit character. " + f"Node name may be specified with globs to match any characters (* and ?). " + f"The node list index can be an integer with a leading # sign. " + ) + + ELEMSPEC_HELP = ( + f"The identifies single or multiple elements of nodes so " + f"these are resolved to unicast addresses. It can be unicast address, " + f" or an indexed . " + f"The unicast address can be specified as a binary (0b), octal(0o), " + f"decimal, hex (0x) integer. " + f"The identifies all elements of the specified node. " + f"If the is not indexed then it can't be a primary address " + f"because that is interpreted as an element address. " + f"The indexed shall have the following form: []. " + f"The can be comma separated list of values. " + f"The can be a single number or pair of numbers separated " + f"by dash (-). A single number identifies a single element by its index " + f"inside the node while the - range identifies the elements by their " + f"indexes from to including the boundaries. " + f"The node elements are indexed from zero. " + f"Example: Node_1225[0,2-3] selects elements 0,2,3 on node with Node_1225 name." + ) + + MDLSPEC_HELP = ( + f"The identifies single or multiple vendor or Bluetooth " + f"SIG models. It can be a model identifier or model name. " + f"The SIG model identifier can be specified as a binary (0b), octal(0o), " + f"decimal, hex (0x) integer. The vendor model identifier can be " + f"specified as a pair of binary (0b), octal(0o), decimal, hex (0x) " + f"integers separated by any special character ({SEP_PATTERN}). " + f"The SIG model name can be specified by special model name which " + f"contains underscore (_) characters instead of spaces. " + f"Model name may be specified with globs to match any characters (* and ?). " + ) + + FWIDSPEC_HELP = ( + f"The identifies single or multiple firmware image. " + f"It can be specified by a composite value containing the company " + f"identifier, version information format and version information " + f"separated by any special character ({SEP_PATTERN}). " + f"The company ID identifier can be specified as a binary (0b), octal(0o), " + f"decimal, hex (0x) integer. " + f"The version information format can be 'h' for hex format and 's' for " + f"string format and it controls how the version information is processed. " + f"If hex format is used then the version information shall contain " + f"hexadecimal characters only and the version information is converted " + f"into a binary value from the provided hexadecimal characters. " + f"If string format is used then the version information can contain any " + f"characters and it is converted into a binary value by utf-8 encoding. " + f"Examples: 0x02FF:h:74657374 or 0x02FF:s:test" + ) + + METASPEC_HELP = ( + f"The identifies the metadata belonging to a firmware image. " + f"It can be specified by metadata format and metadata values separated " + f"by any special character ({SEP_PATTERN}). " + f"The metadata format can be 'h' for hex format and 's' for string " + f"format and it controls how the metadata is processed. " + f"If hex format is used then the metadata shall contain hexadecimal " + f"characters only and the metadata is converted into a binary value " + f"from the provided hexadecimal characters. " + f"If string format is used then the metadata can contain any characters " + f"and it is converted into a binary value by utf-8 encoding. " + f"Examples: h:74657374 or s:test" + ) + + GROUPSPEC_HELP = ( + f"The identifies one or more app groups. It can be specified " + f"by app group name or app group list index. The app group name can be a " + f"string value with leading non-digit character. The app group name may " + f"be specified with globs to match any characters (* and ?). " + f"The app group list index can be an integer with a leading # sign. " + ) + + DFU_CALC_TIMEOUT_HELP = ( + "Client side timeout is (10000 * (timeout_base + 2)) + (100 * ttl) ms. " + "Server side timeout is (10000 * (timeout_base + 1)) ms. " + ) + + INTEGER_PATTERN = btmesh.util.INTEGER_PATTERN + INTEGER_PAIR_PATTERN = btmesh.util.INTEGER_PAIR_PATTERN + LIST_INDEX_PATTERN = r"#\d+" + GLOB_NAME_PATTERN = r"[a-zA-Z_\*\?][\w\*\?]*" + NODESPEC_PATTERN = "|".join( + [ + LIST_INDEX_PATTERN, + GLOB_NAME_PATTERN, + btmesh.util.UUID_PATTERN, + btmesh.util.ADDR_PATTERN, + btmesh.util.NAME_PATTERN, + ] + ) + ELEMSPEC_INDEX_PATTERN = r"\[([\d\s,-]+)\]" + ELEMSPEC_NODESPEC_IDX_PATTERN = ( + "(" + NODESPEC_PATTERN + ")" + ELEMSPEC_INDEX_PATTERN + ) + ELEMSPEC_PATTERN = "|".join( + [btmesh.util.ADDR_PATTERN, ELEMSPEC_NODESPEC_IDX_PATTERN, NODESPEC_PATTERN] + ) + FWIDSPEC_STR_PATTERN = f"({INTEGER_PATTERN}){SEP_PATTERN}s{SEP_PATTERN}(.*)" + FWIDSPEC_HEX_PATTERN = ( + f"({INTEGER_PATTERN})" + f"{SEP_PATTERN}" + f"h" + f"{SEP_PATTERN}" + r"((?:[a-fA-F0-9]{2})*)" + ) + METASPEC_STR_PATTERN = f"s{SEP_PATTERN}(.*)" + METASPEC_HEX_PATTERN = f"h{SEP_PATTERN}" + r"((?:[a-fA-F0-9]{2})*)" + + @staticmethod + def glob_to_regex_pattern(glob_pattern: str): + regex_pattern = glob_pattern + regex_pattern = regex_pattern.replace("*", r"\w*") + regex_pattern = regex_pattern.replace("?", r"\w?") + return regex_pattern + + @classmethod + def is_indexed_nodespec(cls, elemspec): + return bool(re.fullmatch(cls.ELEMSPEC_NODESPEC_IDX_PATTERN, elemspec)) + + @classmethod + def is_nodespec(cls, elemspec): + return bool(re.fullmatch(cls.NODESPEC_PATTERN, elemspec)) + + @staticmethod + def to_int(s): + try: + return int(s, 0) + except ValueError: + return None + + @classmethod + def split_text(cls, text): + sep_map = {k: " " for k in cls.TEXT_LIST_SEP} + text_fragments = str.translate(text, str.maketrans(sep_map)).split() + return [tf.strip() for tf in text_fragments] + + def info(self, text, level=logging.INFO): + text = str(text) + print(text) + logger.log(level, text) + + def error(self, text, level=logging.ERROR): + text = str(text) + print(text, file=sys.stderr) + logger.log(level, text) + + def parser_error(self, parser, message, level=logging.ERROR): + sio = io.StringIO() + parser.print_usage(sio) + self.error(sio.getvalue().strip(), level=level) + sio = io.StringIO() + parser.print_error(message, file=sio) + self.error(sio.getvalue().strip()) + + def parser_help(self, parser: argparse.ArgumentParser, level=logging.INFO): + sio = io.StringIO() + parser.print_help(sio) + self.info(sio.getvalue().strip()) + + def table_info( + self, + rows, + headers_on=True, + width=None, + width_max=None, + column_min_width=5, + columns_rel_width=None, + columns_abs_width=None, + columns={}, + table_fmt="grid", + ): + if width is None: + width = app_cfg.ui.table_width_default + lines = table_text_lines( + rows, + headers_on=headers_on, + width=width, + width_max=width_max, + column_min_width=column_min_width, + columns_rel_width=columns_rel_width, + columns_abs_width=columns_abs_width, + columns=columns, + table_fmt=table_fmt, + ) + for line in lines: + self.info(line) + + def nodes_info(self, nodes: Iterable[Node], columns: Sequence[str]): + rows = [] + selected_columns = {} + if not columns: + columns = ["idx", "name", "uuid", "prim_addr", "elem_count"] + for col in columns: + if col not in self.NODE_COLUMNS: + raise ValueError(f"Invalid node info column {col}.") + selected_columns[col] = self.NODE_COLUMNS[col] + # Dictionaries are ordered from Python 3.7 and the required python + # version is 3.7 as well so the dict can be considered ordered so the + # selected_columns will contain the columns in the correct order + for idx, node in enumerate(nodes): + node_dict = {} + node_dict["idx"] = idx + node_dict["uuid"] = node.uuid.hex() + node_dict["devkey"] = node.devkey.hex() + node_dict["prim_addr"] = f"0x{node.prim_addr:04X}" + node_dict["elem_count"] = node.elem_count + node_dict["name"] = node.name + node_dict["cid"] = node.dcd.cid if node.dcd else None + node_dict["pid"] = node.dcd.pid if node.dcd else None + node_dict["vid"] = node.dcd.vid if node.dcd else None + node_dict["crpl"] = node.dcd.crpl if node.dcd else None + node_dict["relay"] = node.dcd.relay if node.dcd else None + node_dict["proxy"] = node.dcd.proxy if node.dcd else None + node_dict["friend"] = node.dcd.friend if node.dcd else None + node_dict["lpn"] = node.dcd.lpn if node.dcd else None + rows.append(node_dict) + if 0 < len(rows): + self.table_info(rows, columns=selected_columns) + + def app_group_table_info( + self, + app_groups: Sequence[BtmeshDfuAppGroup], + columns: Union[Sequence[str], Dict[str, str]], + ): + rows = [] + if not columns: + selected_columns = { + column: self.APP_GROUP_COLUMNS[column].header + for column in self.APP_GROUP_COLUMNS + if self.APP_GROUP_COLUMNS[column].default + } + else: + selected_columns = {} + if isinstance(columns, Mapping): + selected_columns = columns + else: + for column in columns: + if column not in self.APP_GROUP_COLUMNS: + raise ValueError(f"Invalid app group table column {column}.") + selected_columns[column] = self.APP_GROUP_COLUMNS[column] + # Dictionaries are ordered from Python 3.7 and the required python + # version is 3.7 as well so the dict can be considered ordered so the + # selected_columns will contain the columns in the correct order + for idx, app_group in enumerate(app_groups): + idx_str = f"{idx}" + name_str = app_group.name + group_addr_str = f"0x{app_group.group_addr:04X}" + appkey_index_str = f"{app_group.appkey_index}" + pub_ttl_str = f"{app_group.pub_ttl}" + if app_group.pub_credentials: + pub_credentials_str = "friendship" + else: + pub_credentials_str = "normal" + pub_period_ms_str = f"{app_group.pub_period_ms}ms" + pub_retx_count_str = f"{app_group.pub_retransmit_count}" + pub_retx_int_ms_str = f"{app_group.pub_retransmit_interval_ms}ms" + rows.append( + { + "idx": idx_str, + "name": name_str, + "group_addr": group_addr_str, + "appkey_index": appkey_index_str, + "pub_ttl": pub_ttl_str, + "pub_creds": pub_credentials_str, + "pub_period_ms": pub_period_ms_str, + "pub_retx_count": pub_retx_count_str, + "pub_retx_int_ms": pub_retx_int_ms_str, + } + ) + if 0 < len(rows): + self.table_info(rows, columns=selected_columns) + + def app_group_info(self, app_group: BtmeshDfuAppGroup): + pub_ttl_str = f"{app_group.pub_ttl}" + if app_group.pub_credentials: + pub_credentials_str = "friendship" + else: + pub_credentials_str = "normal" + pub_period_ms_str = f"{app_group.pub_period_ms}ms" + pub_retx_count_str = f"{app_group.pub_retransmit_count}" + pub_retx_int_ms_str = f"{app_group.pub_retransmit_interval_ms}ms" + self.info(f"{app_group.name} app group:") + self.info(f" - Group Address: 0x{app_group.group_addr:04X}") + self.info(f" - Appkey Index: {app_group.appkey_index}") + self.info(f" - Publication TTL: {pub_ttl_str}") + self.info(f" - Publication Credentials: {pub_credentials_str}") + self.info(f" - Publication Period: {pub_period_ms_str}") + self.info(f" - Publication Retransmit Count: {pub_retx_count_str}") + self.info(f" - Publication Retransmit Interval: {pub_retx_int_ms_str}") + app_group_nodes = app_db.get_app_group_node_list( + app_group.name, order_property="name" + ) + for node in app_group_nodes: + self.info(f" - {node.name} node:") + for idx, elem_addr in enumerate(node.elem_addrs): + if elem_addr in app_group.pub_addrs: + pub_mdl_names = sorted( + mdl.pretty_name() + for mdl in app_group.gen_pub_addr_mdls(elem_addr) + ) + else: + pub_mdl_names = [] + if elem_addr in app_group.sub_addrs: + sub_mdl_names = sorted( + mdl.pretty_name() + for mdl in app_group.gen_sub_addr_mdls(elem_addr) + ) + else: + sub_mdl_names = [] + if elem_addr in app_group.bind_addrs: + bind_mdl_names = sorted( + mdl.pretty_name() + for mdl in app_group.gen_bind_addr_mdls(elem_addr) + ) + else: + bind_mdl_names = [] + if pub_mdl_names or sub_mdl_names or bind_mdl_names: + self.info(f" - Element {idx}: (0x{elem_addr:04X})") + if pub_mdl_names: + self.info(f" - Publication models:") + for mdl_name in pub_mdl_names: + self.info(f" - {mdl_name}") + if sub_mdl_names: + self.info(f" - Subscription models:") + for mdl_name in sub_mdl_names: + self.info(f" - {mdl_name}") + if bind_mdl_names: + self.info(f" - Bind models:") + for mdl_name in bind_mdl_names: + self.info(f" - {mdl_name}") + + def elem_str(self, elem_addr: int) -> str: + elem_format = app_cfg.ui.elem_format + node = app_db.btmesh_db.get_node_by_elem_addr(elem_addr) + elem_index = node.get_elem_index(elem_addr) + return elem_format.format( + name=node.name, + uuid=node.uuid.hex(), + prim_addr=node.prim_addr, + elem_index=elem_index, + elem_addr=elem_addr, + ) + + def fwid_str(self, fwid: FWID) -> str: + cid_str = f"0x{fwid.company_id:04X}" + if app_cfg.ui.fwid_format == "hex": + version_info_str = fwid.version_info.hex() + else: + version_info_str = fwid.version_info.decode("utf-8") + return f"{cid_str}:{version_info_str}" + + def metadata_str(self, metadata: bytes): + if app_cfg.ui.metadata_format == "hex": + return metadata.hex() + else: + return metadata.decode("utf-8") + + def log_user_input(self, user_input, level=logging.INFO): + logger.log(level, "[USER] " + user_input) + + def input(self, prompt, level=logging.INFO): + prompt = str(prompt) + logger.log(level, prompt) + input_text = input(prompt) + self.log_user_input(input_text) + return input_text + + def nodes_input(self, prompt, node_list, level=logging.INFO): + nodespecs = app_ui.input(prompt, level=level) + return self.parse_nodespecs(nodespecs, node_list) + + def parse_nodespecs( + self, nodespecs, node_list: Sequence[Node], filter_duplicates: bool = True + ) -> List[Node]: + sel_node_list = [] + if isinstance(nodespecs, str): + nodespec_list = self.split_text(nodespecs) + else: + nodespec_list = nodespecs + for nodespec in nodespec_list: + nodespec = nodespec.strip() + nodes = [] + if Node.is_uuid_valid(nodespec): + uuid = bytes.fromhex(nodespec) + node = next((n for n in node_list if n.uuid == uuid), None) + if node: + nodes.append(node) + elif Node.is_addr_valid(nodespec): + # If the nodespec is not uuid and it starts with a digit then + # it is an integer constant. The second 0 parameter of int makes + # it possible to accept hex (0x), dec, oct (0o) and binary (0b) + # constants. + addr = self.to_int(nodespec) + if addr is None: + raise BtmeshDfuAppParseSpecError( + f"Invalid nodespec ({nodespec}).", + spec_name=BtmeshDfuAppSpecName.NODESPEC, + spec_value=nodespec, + ) + node = next((n for n in node_list if n.prim_addr == addr), None) + if node: + nodes.append(node) + elif re.fullmatch(self.LIST_INDEX_PATTERN, nodespec): + idx = self.to_int(nodespec[1:]) + if idx is None: + raise BtmeshDfuAppParseSpecError( + f"Invalid nodespec ({nodespec}).", + spec_name=BtmeshDfuAppSpecName.NODESPEC, + spec_value=nodespec, + ) + if idx < len(node_list): + node = node_list[idx] + nodes.append(node) + elif Node.is_name_valid(nodespec): + name = nodespec + node = next((n for n in node_list if n.name == name), None) + if node: + nodes.append(node) + elif re.fullmatch(self.GLOB_NAME_PATTERN, nodespec): + node_name_pattern = self.glob_to_regex_pattern(nodespec) + nodes = [ + n for n in node_list if re.fullmatch(node_name_pattern, n.name) + ] + else: + raise BtmeshDfuAppParseSpecError( + f"Invalid nodespec ({nodespec}).", + spec_name=BtmeshDfuAppSpecName.NODESPEC, + spec_value=nodespec, + ) + if not nodes: + raise BtmeshDfuAppParseSpecError( + f'Node with "{nodespec}" nodespec does not exist.', + spec_name=BtmeshDfuAppSpecName.NODESPEC, + spec_value=nodespec, + ) + sel_node_list.extend(nodes) + if filter_duplicates: + # Remove duplicate entries from the list + # Note: Dictionaries are ordered from Python 3.7 and the required + # python version is 3.7 as well so the dict can be considered ordered + sel_node_list = list(dict.fromkeys(sel_node_list)) + return sel_node_list + + def parse_elemspecs( + self, elemspecs, node_list: Sequence[Node], filter_duplicates: bool = True + ) -> List[int]: + elem_addr_list = [] + if isinstance(elemspecs, str): + elemspec_list = self.split_text(elemspecs) + else: + elemspec_list = elemspecs + for elemspec in elemspec_list: + elemspec = elemspec.strip() + elem_addrs = [] + if Node.is_addr_valid(elemspec): + # The second 0 parameter of int makes it possible to accept hex + # (0x), dec, oct (0o) and binary (0b) constants. + addr = self.to_int(elemspec) + if addr is None: + raise BtmeshDfuAppParseSpecError( + f"Invalid elemspec ({elemspec}).", + spec_name=BtmeshDfuAppSpecName.ELEMSPEC, + spec_value=elemspec, + ) + node = next((n for n in node_list if n.is_elem_addr(addr)), None) + if node: + elem_addrs.append(addr) + elif self.is_indexed_nodespec(elemspec): + addrs = self.parse_indexed_nodespec( + elemspec=elemspec, node_list=node_list + ) + elem_addrs.extend(addrs) + elif self.is_nodespec(elemspec): + try: + nodes = self.parse_nodespecs( + nodespecs=elemspec, node_list=node_list + ) + except BtmeshDfuAppParseSpecError as e: + raise BtmeshDfuAppParseSpecError( + e.msg, + spec_name=BtmeshDfuAppSpecName.ELEMSPEC, + spec_value=e.spec_value, + ) from e + for node in nodes: + elem_addrs.extend(node.elem_addrs) + else: + raise BtmeshDfuAppParseSpecError( + f"Invalid elemspec ({elemspec}).", + spec_name=BtmeshDfuAppSpecName.ELEMSPEC, + spec_value=elemspec, + ) + if not elem_addrs: + raise BtmeshDfuAppParseSpecError( + f'Element with "{elemspec}" elemspec does not exist.', + spec_name=BtmeshDfuAppSpecName.ELEMSPEC, + spec_value=elemspec, + ) + elem_addr_list.extend(elem_addrs) + if filter_duplicates: + # Remove duplicate entries from the list + # Note: Dictionaries are ordered from Python 3.7 and the required + # python version is 3.7 as well so the dict can be considered ordered + elem_addr_list = list(dict.fromkeys(elem_addr_list)) + return elem_addr_list + + def parse_indexed_nodespec(self, elemspec, node_list: List[Node]) -> List[Node]: + elem_addrs = [] + match = re.fullmatch(self.ELEMSPEC_NODESPEC_IDX_PATTERN, elemspec) + nodespec = match.group(1) + elemidxspec = match.group(2) + elem_idx_list = [] + elem_idx_ranges = elemidxspec.split(",") + for elem_idx_range in elem_idx_ranges: + if re.fullmatch(self.INTEGER_PATTERN, elem_idx_range): + elem_idx = int(elem_idx_range, 0) + elem_idx_list.append(elem_idx) + else: + elem_idx_range_fragments = elem_idx_range.split("-") + if len(elem_idx_range_fragments) != 2: + raise BtmeshDfuAppParseSpecError( + f"Invalid elemspec ({elem_idx_range} part of {elemspec}).", + spec_name=BtmeshDfuAppSpecName.ELEMSPEC, + spec_value=elemspec, + ) + if all( + re.fullmatch(self.INTEGER_PATTERN, f) + for f in elem_idx_range_fragments + ): + elem_idx_range_min = int(elem_idx_range_fragments[0], 0) + elem_idx_range_max = int(elem_idx_range_fragments[1], 0) + for idx in range(elem_idx_range_min, elem_idx_range_max + 1): + elem_idx_list.append(idx) + else: + raise BtmeshDfuAppParseSpecError( + f"Invalid elemspec ({elem_idx_range} part of {elemspec}).", + spec_name=BtmeshDfuAppSpecName.ELEMSPEC, + spec_value=elemspec, + ) + try: + nodes = self.parse_nodespecs(nodespecs=nodespec, node_list=node_list) + except BtmeshDfuAppParseSpecError as e: + raise BtmeshDfuAppParseSpecError( + e.msg, + spec_name=BtmeshDfuAppSpecName.ELEMSPEC, + spec_value=e.spec_value, + ) from e + for node in nodes: + try: + addrs = node.get_elem_addrs(elem_idx_list) + except ValueError as e: + raise BtmeshDfuAppParseSpecError( + f'Element with "{elemspec}" elemspec does not exist. ' + str(e), + spec_name=BtmeshDfuAppSpecName.ELEMSPEC, + spec_value=elemspec, + ) from e + elem_addrs.extend(addrs) + return elem_addrs + + def _create_model_id( + self, mdlspec, model_id, vendor_id=ModelID.SIG_MODEL_VENDOR_ID + ): + if (model_id is None) or (vendor_id is None): + raise BtmeshDfuAppParseSpecError( + f"Invalid mdlspec ({mdlspec}).", + spec_name=BtmeshDfuAppSpecName.MDLSPEC, + spec_value=mdlspec, + ) + try: + if isinstance(model_id, NamedModelID): + model_id = model_id.value + mdl = ModelID(model_id=model_id, vendor_id=vendor_id) + except ValueError as e: + raise BtmeshDfuAppParseSpecError( + f"Invalid mdlspec ({mdlspec}). " + str(e), + spec_name=BtmeshDfuAppSpecName.MDLSPEC, + spec_value=mdlspec, + ) from e + return mdl + + def parse_mdlspecs(self, mdlspecs, filter_duplicates: bool = True) -> List[ModelID]: + sel_model_list = [] + if isinstance(mdlspecs, str): + mdlspec_list = self.split_text(mdlspecs) + else: + mdlspec_list = mdlspecs + for mdlspec in mdlspec_list: + mdlspec = mdlspec.strip() + models = [] + if re.fullmatch(self.INTEGER_PATTERN, mdlspec): + mdl_id = int(mdlspec, 0) + mdl = self._create_model_id(mdlspec=mdlspec, model_id=mdl_id) + models.append(mdl) + elif re.fullmatch(self.INTEGER_PAIR_PATTERN, mdlspec): + match = re.fullmatch(self.INTEGER_PAIR_PATTERN, mdlspec) + vendor_id = int(match.group(1), 0) + mdl_id = int(match.group(2), 0) + mdl = self._create_model_id( + mdlspec=mdlspec, model_id=mdl_id, vendor_id=vendor_id + ) + models.append(mdl) + elif NamedModelID.is_name_valid(mdlspec): + mdl_id = NamedModelID.get_id_by_name(mdlspec) + mdl = self._create_model_id(mdlspec=mdlspec, model_id=mdl_id) + models.append(mdl) + elif re.fullmatch(self.GLOB_NAME_PATTERN, mdlspec): + mdl_name_pattern = self.glob_to_regex_pattern(mdlspec.upper()) + for mdl_name, mdl_id in NamedModelID.gen_name_id_pairs(): + if re.fullmatch(mdl_name_pattern, mdl_name.upper()): + mdl = self._create_model_id(mdlspec=mdlspec, model_id=mdl_id) + models.append(mdl) + else: + raise BtmeshDfuAppParseSpecError( + f"Invalid mdlspec ({mdlspec}).", + spec_name=BtmeshDfuAppSpecName.MDLSPEC, + spec_value=mdlspec, + ) + if not models: + raise BtmeshDfuAppParseSpecError( + f'Model with "{mdlspec}" mdlspec does not exist.', + spec_name=BtmeshDfuAppSpecName.MDLSPEC, + spec_value=mdlspec, + ) + sel_model_list.extend(models) + if filter_duplicates: + # Remove duplicate entries from the list + # Note: Dictionaries are ordered from Python 3.7 and the required + # python version is 3.7 as well so the dict can be considered ordered + sel_model_list = list(dict.fromkeys(sel_model_list)) + return sel_model_list + + def parse_fwidspec(self, fwidspec) -> FWID: + fwid_list = self.parse_fwidspecs(fwidspecs=fwidspec) + if 1 < len(fwid_list): + fwid_list_str = ",".join((app_ui.fwid_str(fwid) for fwid in fwid_list)) + raise BtmeshDfuAppParseSpecError( + f"The fwidspec is ambiguous. It is resolved to multiple FWIDs " + f"but it is expected to be a single one. ({fwid_list_str})", + spec_name=BtmeshDfuAppSpecName.FWIDSPEC, + spec_value=fwidspec, + ) + return fwid_list[0] + + def parse_fwidspecs(self, fwidspecs, filter_duplicates: bool = True) -> List[FWID]: + sel_fwid_list = [] + if isinstance(fwidspecs, str): + fwidspec_list = self.split_text(fwidspecs) + else: + fwidspec_list = fwidspecs + for fwidspec in fwidspec_list: + fwidspec = fwidspec.strip() + hex_match = re.fullmatch(self.FWIDSPEC_HEX_PATTERN, fwidspec) + if hex_match: + cid = int(hex_match.group(1), 0) + version_info_str = hex_match.group(2) + version_info = bytes.fromhex(version_info_str) + fwid = FWID(company_id=cid, version_info=version_info) + sel_fwid_list.append(fwid) + else: + str_match = re.fullmatch(self.FWIDSPEC_STR_PATTERN, fwidspec) + if str_match: + cid = int(str_match.group(1), 0) + version_info_str = str_match.group(2) + version_info = version_info_str.encode("utf-8") + fwid = FWID(company_id=cid, version_info=version_info) + sel_fwid_list.append(fwid) + else: + raise BtmeshDfuAppParseSpecError( + f"Invalid fwidspec ({fwidspec}).", + spec_name=BtmeshDfuAppSpecName.FWIDSPEC, + spec_value=fwidspec, + ) + if filter_duplicates: + # Remove duplicate entries from the list + # Note: Dictionaries are ordered from Python 3.7 and the required + # python version is 3.7 as well so the dict can be considered ordered + sel_fwid_list = list(dict.fromkeys(sel_fwid_list)) + return sel_fwid_list + + def parse_metaspec(self, metaspec) -> bytes: + metadata_list = self.parse_metaspecs(metaspecs=metaspec) + if 1 < len(metadata_list): + metadata_list_str = ",".join( + (app_ui.metadata_str(md) for md in metadata_list) + ) + raise BtmeshDfuAppParseSpecError( + f"The metaspec is ambiguous. It is resolved to multiple metadata " + f"but it is expected to be a single one. ({metadata_list_str})", + spec_name=BtmeshDfuAppSpecName.METASPEC, + spec_value=metaspec, + ) + return metadata_list[0] + + def parse_metaspecs(self, metaspecs, filter_duplicates: bool = True) -> List[bytes]: + sel_metadata_list = [] + if isinstance(metaspecs, str): + metaspec_list = self.split_text(metaspecs) + else: + metaspec_list = metaspecs + for metaspec in metaspec_list: + metaspec = metaspec.strip() + hex_match = re.fullmatch(self.METASPEC_HEX_PATTERN, metaspec) + if hex_match: + metadata_str = hex_match.group(1) + metadata = bytes.fromhex(metadata_str) + sel_metadata_list.append(metadata) + else: + str_match = re.fullmatch(self.METASPEC_STR_PATTERN, metaspec) + if str_match: + metadata_str = str_match.group(1) + metadata = metadata_str.encode("utf-8") + sel_metadata_list.append(metadata) + else: + raise BtmeshDfuAppParseSpecError( + f"Invalid metaspec ({metaspec}).", + spec_name=BtmeshDfuAppSpecName.METASPEC, + spec_value=metaspec, + ) + if filter_duplicates: + # Remove duplicate entries from the list + # Note: Dictionaries are ordered from Python 3.7 and the required + # python version is 3.7 as well so the dict can be considered ordered + sel_metadata_list = list(dict.fromkeys(sel_metadata_list)) + return sel_metadata_list + + def parse_groupspec( + self, groupspec, app_group_list: Sequence[BtmeshDfuAppGroup] + ) -> BtmeshDfuAppGroup: + app_group_list = self.parse_groupspecs(groupspec, app_group_list) + if 1 < len(app_group_list): + app_group_list_str = ",".join(g.name for g in app_group_list) + raise BtmeshDfuAppParseSpecError( + f"The groupspec is ambiguous. It is resolved to multiple app groups " + f"but it is expected to be a single one. ({app_group_list_str})", + spec_name=BtmeshDfuAppSpecName.GROUPSPEC, + spec_value=groupspec, + ) + return app_group_list[0] + + def parse_groupspecs( + self, + groupspecs, + app_group_list: Sequence[BtmeshDfuAppGroup], + filter_duplicates: bool = True, + ) -> List[BtmeshDfuAppGroup]: + sel_app_group_list = [] + if isinstance(groupspecs, str): + groupspec_list = self.split_text(groupspecs) + else: + groupspec_list = groupspecs + for groupspec in groupspec_list: + groupspec = groupspec.strip() + app_groups = [] + if btmesh.util.is_name_valid(groupspec): + name = groupspec + app_group = next((g for g in app_group_list if g.name == name), None) + if app_group: + app_groups.append(app_group) + elif re.fullmatch(self.GLOB_NAME_PATTERN, groupspec): + app_group_name_pattern = self.glob_to_regex_pattern(groupspec) + app_groups = [ + app_group + for app_group in app_group_list + if re.fullmatch(app_group_name_pattern, app_group.name) + ] + elif re.fullmatch(self.LIST_INDEX_PATTERN, groupspec): + idx = self.to_int(groupspec[1:]) + if idx is None: + raise BtmeshDfuAppParseSpecError( + f"Invalid groupspec ({groupspec}).", + spec_name=BtmeshDfuAppSpecName.GROUPSPEC, + spec_value=groupspec, + ) + if idx < len(app_group_list): + app_group = app_group_list[idx] + app_groups.append(app_group) + else: + raise BtmeshDfuAppParseSpecError( + f"Invalid groupspec ({groupspec}).", + spec_name=BtmeshDfuAppSpecName.GROUPSPEC, + spec_value=groupspec, + ) + if not app_groups: + raise BtmeshDfuAppParseSpecError( + f'App group with "{groupspec}" groupspec does not exist.', + spec_name=BtmeshDfuAppSpecName.GROUPSPEC, + spec_value=groupspec, + ) + sel_app_group_list.extend(app_groups) + if filter_duplicates: + # Remove duplicate entries from the list + # Note: Dictionaries are ordered from Python 3.7 and the required + # python version is 3.7 as well so the dict can be considered ordered + sel_app_group_list = list(dict.fromkeys(sel_app_group_list)) + return sel_app_group_list + + +app_ui = BtmeshDfuAppUI() diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/util/__init__.py b/app/btmesh/example_host/btmesh_host_dfu/app/util/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/util/argparsex.py b/app/btmesh/example_host/btmesh_host_dfu/app/util/argparsex.py new file mode 100644 index 00000000000..380a1e8786c --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/util/argparsex.py @@ -0,0 +1,136 @@ +# 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. + +import argparse +import io +import sys + + +class ArgumentParserExt(argparse.ArgumentParser): + def __init__( + self, + prog=None, + usage=None, + description=None, + epilog=None, + parents=[], + formatter_class=argparse.HelpFormatter, + prefix_chars="-", + fromfile_prefix_chars=None, + argument_default=None, + conflict_handler="error", + add_help=True, + allow_abbrev=True, + help_as_exception=True, + exit_on_error_ext=True, + ): + if add_help and help_as_exception: + # The help command exits the application in argparse.ArgumentParser. + # This might be problematic in case of an interactive application + # where argparse is used to process command parameters in a command + # loop because the application shall run after printing help message. + # If help_as_exception is set to True then ArgumentParserExt raises + # an exception when -h or --help option is found. + # This means that the argparse.ArgumentParser add_help shall be set + # to False when help_as_exception specified. + add_help = False + elif not add_help: + help_as_exception = False + super().__init__( + prog, + usage, + description, + epilog, + parents, + formatter_class, + prefix_chars, + fromfile_prefix_chars, + argument_default, + conflict_handler, + add_help, + allow_abbrev, + ) + self.exit_on_error_ext = exit_on_error_ext + if help_as_exception: + self.add_argument( + "--help", + "-h", + action=HelpActionExt, + help="Show this help message and exit", + ) + + # The exit_on_error feature was added in Python 3.9 but this script needs to + # support Python 3.7 so it can implement this feature by subclassing the + # ArgumentParser class as it is recommended in the Python 3.7 documentation. + # The Python 3.9 argparse exit_on_error feature is different a bit because + # it throws ArgumentError with action parameter which is not available in + # the error function so ArgumentError can't be raised so different parameter + # and exception (exit_on_error_ext and ArgumentErrorExt) is used. + # The Python 3.9 argparse exit_on_error feature is True by default so + # it does not interfere with this code. + def error(self, message, force_exit=False): + if self.exit_on_error_ext or force_exit: + super().error(message) + else: + raise ArgumentErrorExt(self, message) + + def print_error(self, message, file=None): + if file is None: + file = sys.stdout + message = f"prog: {self.prog}, message: {message}" + self._print_message(message + "\n", file=file) + + +class ArgumentErrorExt(Exception): + def __init__(self, parser, message, *args): + super().__init__(*args) + self.parser = parser + self.message = message + + +class ArgumentHelpException(Exception): + def __init__(self, message, *args): + super().__init__(*args) + self.message = message + + +class HelpActionExt(argparse.Action): + def __init__( + self, + option_strings, + dest=argparse.SUPPRESS, + default=argparse.SUPPRESS, + help=None, + ): + super().__init__( + option_strings=option_strings, + dest=dest, + default=default, + nargs=0, + help=help, + ) + + def __call__(self, parser, namespace, values, option_string=None): + sio = io.StringIO() + parser.print_help(sio) + message = sio.getvalue().strip() + raise ArgumentHelpException(message) diff --git a/app/btmesh/example_host/btmesh_host_dfu/app/util/tabletext.py b/app/btmesh/example_host/btmesh_host_dfu/app/util/tabletext.py new file mode 100644 index 00000000000..41eeb39578f --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/app/util/tabletext.py @@ -0,0 +1,380 @@ +# 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. + +import textwrap +from collections import namedtuple +from typing import Mapping + + +def is_namedtuple(obj): + return ( + isinstance(obj, tuple) and hasattr(obj, "_asdict") and hasattr(obj, "_fields") + ) + + +HLineFormat = namedtuple("HLineFormat", ["left", "line", "inner", "right"]) +RowFormat = namedtuple("RowFormat", ["left", "inner", "right"]) +TableTextFormat = namedtuple( + "TableTextFormat", + [ + "top_line", + "header_line", + "row_line", + "bottom_line", + "header_row", + "data_row", + "padding", + ], +) + +_tabletext_formats = { + "simple": TableTextFormat( + top_line=HLineFormat("", "-", " ", ""), + header_line=HLineFormat("", "-", " ", ""), + row_line=None, + bottom_line=HLineFormat("", "-", " ", ""), + header_row=RowFormat("", " ", ""), + data_row=RowFormat("", " ", ""), + padding=1, + ), + "grid": TableTextFormat( + top_line=HLineFormat("+", "-", "+", "+"), + header_line=HLineFormat("+", "=", "+", "+"), + row_line=HLineFormat("+", "-", "+", "+"), + bottom_line=HLineFormat("+", "-", "+", "+"), + header_row=RowFormat("|", "|", "|"), + data_row=RowFormat("|", "|", "|"), + padding=1, + ), + "none": TableTextFormat( + top_line=None, + header_line=None, + row_line=None, + bottom_line=None, + header_row=RowFormat(None, None, None), + data_row=RowFormat(None, None, None), + padding=1, + ), +} + + +def _render_line(columns_width, line_fmt: HLineFormat): + line_elems = [] + if line_fmt.left: + line_elems.append(line_fmt.left) + for idx, col_w in enumerate(columns_width, 1): + if line_fmt.line: + line_elems.append(line_fmt.line * col_w) + if idx < len(columns_width) and line_fmt.inner: + line_elems.append(line_fmt.inner) + if line_fmt.right: + line_elems.append(line_fmt.right) + return "".join(line_elems) + + +def _render_row(row, columns, columns_width, pad, row_fmt: RowFormat): + columns_lines = [] + row_lines = [] + row_filtered_values = [row.get(col, "") for col in columns] + for idx, text in enumerate(row_filtered_values, 0): + columns_lines.append(_cell_text_to_lines(text, columns_width[idx], pad)) + text_done = [False] * len(columns_lines) + while not all(text_done): + row_text_lines = [] + for idx in range(len(columns_lines)): + if 0 < len(columns_lines[idx]): + row_text_lines.append(columns_lines[idx].pop(0)) + else: + row_text_lines.append("") + text_done[idx] = True + if any(text for text in row_text_lines): + line = _render_row_line(row_text_lines, columns_width, row_fmt) + row_lines.append(line) + return row_lines + + +def _render_row_line(row_text_lines, columns_width, row_fmt: RowFormat): + line_elems = [] + if row_fmt.left: + line_elems.append(row_fmt.left) + for idx, text in enumerate(row_text_lines, 0): + format_str = "{:^" + str(columns_width[idx]) + "}" + line_elems.append(format_str.format(text)) + if (idx + 1) < len(columns_width) and row_fmt.inner: + line_elems.append(row_fmt.inner) + if row_fmt.right: + line_elems.append(row_fmt.right) + return "".join(line_elems) + + +def _cell_text_to_lines(text, col_w, pad): + lines = [] + words = text.split() + col_w_char = col_w - 2 * pad + return textwrap.wrap(text, width=col_w_char) + + +def _render_table_text( + rows, columns, columns_width, headers_on, table_fmt: TableTextFormat +): + table_lines = [] + if table_fmt.top_line: + line = _render_line(columns_width, table_fmt.top_line) + table_lines.append(line) + if headers_on: + if table_fmt.header_row: + lines = _render_row( + columns, columns, columns_width, table_fmt.padding, table_fmt.data_row + ) + table_lines.extend(lines) + if table_fmt.header_line: + line = _render_line(columns_width, table_fmt.top_line) + table_lines.append(line) + for row_ctnr, row in enumerate(rows, 1): + lines = _render_row( + row, columns, columns_width, table_fmt.padding, table_fmt.data_row + ) + table_lines.extend(lines) + if table_fmt.row_line and row_ctnr < len(rows): + line = _render_line(columns_width, table_fmt.row_line) + table_lines.append(line) + if table_fmt.bottom_line: + line = _render_line(columns_width, table_fmt.top_line) + table_lines.append(line) + return table_lines + + +def _calc_border_width(column_count, table_fmt): + border_w = 0 + if table_fmt.data_row: + if table_fmt.data_row.left: + border_w += 1 + if table_fmt.data_row.right: + border_w += 1 + if table_fmt.data_row.inner: + border_w += column_count - 1 + return border_w + + +def _rows_to_dict_list(rows, columns_provided): + rows_of_dicts = [] + for row in rows: + if is_namedtuple(row): + row_data = row._asdict() + elif isinstance(row, Mapping): + row_data = row + else: + if not columns_provided: + raise ValueError( + "Table rows are not dicts or namedtuples but columns is not specified." + ) + row_data = vars(row) + # Dictionary conversion + rows_of_dicts.append({k: str(v) for k, v in row_data.items()}) + return rows_of_dicts + + +def _calc_column_stats(rows, min_col_data_w): + max_col_data_w = {} + avg_col_data_w = {} + for row in rows: + for field, value in row.items(): + value_len = len(value) + if field not in max_col_data_w: + max_col_data_w[field] = max(value_len, min_col_data_w) + else: + max_col_data_w[field] = max(max_col_data_w[field], value_len) + if field not in avg_col_data_w: + avg_col_data_w[field] = value_len + else: + avg_col_data_w[field] += value_len + for field in avg_col_data_w: + avg_col_data_w[field] = round(avg_col_data_w[field] / len(rows)) + return max_col_data_w, avg_col_data_w + + +def table_text( + rows, + headers_on=True, + width=None, + width_max=None, + column_min_width=5, + columns_rel_width=None, + columns_abs_width=None, + columns={}, + table_fmt="grid", +): + table_lines = table_text_lines( + rows, + headers_on=headers_on, + width=width, + width_max=width_max, + column_min_width=column_min_width, + columns_rel_width=columns_rel_width, + columns_abs_width=columns_abs_width, + columns=columns, + table_fmt=table_fmt, + ) + return "\n".join(table_lines) + + +def table_text_lines( + rows, + headers_on=True, + width=None, + width_max=None, + column_min_width=5, + columns_rel_width=None, + columns_abs_width=None, + columns={}, + table_fmt="grid", +): + # Dictionaries are ordered from Python 3.7 and the required python + # version is 3.7 as well so the dict can be considered ordered + table_fmt = _tabletext_formats[table_fmt] + pad = table_fmt.padding + columns_provided = bool(columns) + + if not (rows or columns_provided): + raise ValueError( + "Table can't be constructed because neither rows " + "nor columns were provided." + ) + + # Avoid the modification of mutable default parameter + if not columns_provided: + columns = {} + elif not isinstance(columns, Mapping): + columns = {column: column for column in columns} + + if columns_abs_width: + columns_width = columns_abs_width + col_w_rel = False + elif columns_rel_width: + columns_width = columns_rel_width + col_w_rel = True + else: + columns_width = [] + col_w_rel = True + + if columns_rel_width and columns_abs_width: + raise ValueError( + "Table columns_rel_width and columns_abs_width are mutually exclusive." + ) + if width and width_max: + raise ValueError("Table width and width_max are mutually exclusive.") + if columns and columns_width and len(columns) != len(columns_width): + raise ValueError("Table columns and columns_width len is inconsistent.") + if width and columns_width and (not col_w_rel): + raise ValueError("Table width and fix columns_width are mutually exclusive.") + if (not width) and (columns_width and col_w_rel): + raise ValueError( + "Table width is mandatory when relative columns_width is used." + ) + + # This function supports rows with different types so in order to handle + # those the same way in the code all objects are converted into dictionaries + rows = _rows_to_dict_list(rows, columns_provided) + + if not columns_provided: + for row in rows: + for field, value in row.items(): + if field not in columns: + columns[field] = field + if columns_width and len(columns) != len(columns_width): + raise ValueError("Table columns_width and columns length shall be the same.") + + border_w = _calc_border_width(len(columns), table_fmt) + + max_col_data_w, avg_col_data_w = _calc_column_stats( + [columns] + rows if headers_on else rows, column_min_width + ) + + total_width_from_col_max = sum([max_col_data_w[col] for col in columns]) + # Two padding spaces around the column content + total_width_from_col_max += 2 * pad * len(columns) + # Border characters if present + total_width_from_col_max += border_w + + final_width = 0 + if columns_width and (not col_w_rel): + final_width = sum(columns_width) + border_w + elif width: + final_width = width + else: + final_width = total_width_from_col_max + min_width = column_min_width * len(columns) + border_w + if final_width < min_width: + raise ValueError("Table width is less than the minimum.") + + final_columns_width = [] + if columns_width and (not col_w_rel): + final_columns_width = columns_width + elif ( + ((not width) and (not width_max)) + or (width_max and (final_width <= width_max)) + or (width and total_width_from_col_max <= width) + ): + for col in columns: + final_columns_width.append(max_col_data_w[col] + pad) + else: + if width_max and width_max < final_width: + final_width = width_max + if columns_width and col_w_rel: + total_cm_width = sum(columns_width) + final_columns_width = [ + round(final_width * cw / total_cm_width) for cw in columns_width + ] + else: + avg_col_data_w_ordered = [avg_col_data_w[col] + pad for col in columns] + total_cm_width = sum(avg_col_data_w_ordered) + final_columns_width = [ + round((final_width - border_w) * col_w_data / total_cm_width) + for col_w_data in avg_col_data_w_ordered + ] + final_columns_width = [ + max(col_w, column_min_width) for col_w in final_columns_width + ] + # Adjust the size of columns based on the table width + width_diff = sum(final_columns_width) + border_w - final_width + + modifications = 0xFFFFFFFF + while width_diff != 0 and modifications: + modifications = 0 + if len(columns) < abs(width_diff): + delta = abs(width_diff) // len(columns) + else: + delta = 1 + for idx in range(len(columns)): + if width_diff < 0: + modifications += 1 + final_columns_width[idx] += delta + width_diff += delta + elif 0 < width_diff: + if min_width < final_columns_width[idx]: + modifications += 1 + final_columns_width[idx] -= delta + width_diff -= delta + for col_w in final_columns_width: + if col_w < column_min_width: + raise ValueError("Table column length is less than the minimum.") + return _render_table_text(rows, columns, final_columns_width, headers_on, table_fmt) diff --git a/app/btmesh/example_host/btmesh_host_dfu/bgapix/__init__.py b/app/btmesh/example_host/btmesh_host_dfu/bgapix/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/btmesh/example_host/btmesh_host_dfu/bgapix/bglibx.py b/app/btmesh/example_host/btmesh_host_dfu/bgapix/bglibx.py new file mode 100644 index 00000000000..f74030d3464 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/bgapix/bglibx.py @@ -0,0 +1,841 @@ +# 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. + +import abc +import copy +import dataclasses +import io +import logging +import signal +from collections import UserList +from threading import Thread +from typing import Callable, Mapping, NamedTuple + +from bgapi.bglib import BGEvent, BGLib, CommandFailedError + +from bgapix.slstatus import SlStatus + +logger = logging.getLogger(__name__) + +BGLIBX_API = """ + + + + + SL_STATUS_OK if successful. Error code otherwise. + + + + Signed 8-bit integer + + + Unsigned 8-bit integer + + + Signed 16-bit integer + + + Unsigned 16-bit integer + + + Signed 32-bit integer + + + Unsigned 32-bit integer + + + Signed 64-bit integer + + + Unsigned 64-bit integer + + + Variable length byte array. The first byte defines the length + of data that follows, 0 - 255 bytes. + + + Variable length byte array. The first two bytes of uint16 + type define the length of data that follows, 0 - 65535 bytes. + + + + NCP Host signal processing API + + Signal received by the NCP host synchronously. + This event is used to synchronize the signal to the main thread + event processing. + + + Signal number of the received signal. + + + + + Signal received by the NCP host asynchronously. + This event is not synchronized to main thread event processing so it + can occur between any two instructions and therefore the NCP host + shall terminate itself when an exception is raised in an event handler. + If the event handler returns then the NCP host may not terminate. + + + Signal number of the received signal. + + + + + +""" + + +class BGLibExtWaitEventError(Exception): + def __init__(self, *args, events=[]): + super().__init__(*args) + self.events = events + + +class BGLibExtSyncSignalException(Exception): + """Upper layer can raise sync signal exception from bglibx_signal_sync_received + event handler. The advantage of this exception is that a uniform exception can + be raised when a sync signal is received.""" + + def __init__(self, signum, *args: object) -> None: + super().__init__(*args) + self.signum = signum + + +class EventList(UserList): + def __init__(self, initlist=None, final_event_cnt=0): + super().__init__(initlist=initlist) + self._final_event_cnt = 0 + + @property + def final_event_cnt(self) -> int: + return self._final_event_cnt + + @final_event_cnt.setter + def final_event_cnt(self, value: int): + self._final_event_cnt = value + + +class BGLibExt(BGLib): + def is_iterable(obj): + return hasattr(obj, "__iter__") or hasattr(obj, "__getitem__") + + @staticmethod + def get_event_name(event): + return event._str + + def __init__( + self, + connection, + apis, + event_handler=None, + response_timeout=1, + log_id=None, + event_timeout_res=1, + sync_signums=(signal.SIGINT,), + ): + if not isinstance(apis, (list, tuple)): + apis = [apis] + else: + apis = apis[:] + apis.append(io.StringIO(BGLIBX_API)) + super().__init__(connection, apis, event_handler, response_timeout, log_id) + self.event_timeout_res = event_timeout_res + self._event_name_handlers = {} + if sync_signums: + for signum in sync_signums: + signal.signal(signum, self._signal_handler) + + def _signal_handler(self, signum: signal.Signals, frame): + ASYNC_SIG_EVT_NAME = "bglibx_evt_signal_async_received" + async_event = self._create_sig_async_rx_event(signum) + if ASYNC_SIG_EVT_NAME in self._event_name_handlers: + for event_handler in self._event_name_handlers.get(ASYNC_SIG_EVT_NAME, []): + event_handler(async_event) + sync_event = self._create_sig_sync_rx_event(signum) + if self.event_handler is None: + + def put(): + self.event_queue.put(sync_event) + + # New thread is essential because signal handler runs on the main + # thread and it is possible that the main thread is waiting for an + # event (queue.get operation) when the signal handler is called by + # the OS which means deadlock when the signal handler tries to put + # the signal event into the event queue. + thread = Thread(target=put, name="signal_thread") + thread.start() + else: + self.event_handler(sync_event) + + def _create_sig_sync_rx_event(self, signum): + apinode = self._get_api_class_event("bglibx", "signal", "sync_received") + return BGEvent(apinode, [signum]) + + def _create_sig_async_rx_event(self, signum): + apinode = self._get_api_class_event("bglibx", "signal", "async_received") + return BGEvent(apinode, [signum]) + + def _get_api(self, api_name): + return [a for a in self.apis if a.name == api_name][0] + + def _get_api_class(self, api_name, class_name): + return self._get_api(api_name)[class_name] + + def _get_api_class_event(self, api_name, class_name, event_name): + return self._get_api_class(api_name, class_name).events[event_name] + + def get_api_device_id(self, api_name): + api = self._get_api(api_name) + return api.device_id + + def get_api_class_index(self, api_name, class_name): + return self._get_api_class(api_name, class_name).index + + def get_api_class_event_index(self, api_name, class_name, event_name): + return self._get_api_class_event(api_name, class_name, event_name).index + + def get_api_class_event_ids(self, api_name, class_name, event_name): + evt = self._get_api_class_event(api_name, class_name, event_name) + return evt.api_class.api.device_id, evt.api_class.index, evt.index + + def get_event_id(self, api_name, class_name, event_name): + dev_id, cls_idx, evt_idx = self.get_api_class_event_ids( + api_name, class_name, event_name + ) + # Event identifier + # Bit 7: Event (1) or Command (0) + # Bit 3 - 6: Device ID + # Bit 16 - 23: Class index + # Bit 24 - 32: Event index + return (evt_idx & 0xFF) << 24 | (cls_idx & 0xFF) << 16 | 0x80 | (dev_id << 3) + + def subscribe(self, event_name, handler): + handler_list = self._event_name_handlers.setdefault(event_name, []) + if handler not in handler_list: + handler_list.append(handler) + + def unsubscribe(self, event_name, handler): + if (event_name in self._event_name_handlers) and ( + handler in self._event_name_handlers[event_name] + ): + self._event_name_handlers[event_name].remove(handler) + + def get_event(self, timeout=0): + remaining_time = timeout + while 0 <= remaining_time: + # Avoid blocking for too long because it blocks signal handler + if self.event_timeout_res < remaining_time: + event = super().get_event(self.event_timeout_res) + remaining_time -= self.event_timeout_res + else: + event = super().get_event(remaining_time) + remaining_time = -1.0 + if event: + break + if event is not None: + event_name = self.get_event_name(event) + if event_name in self._event_name_handlers: + for event_handler in self._event_name_handlers.get(event_name, []): + event_handler(event) + return event + + def build_event_selector( + self, raw_event_selector, param_subs={}, **event_selector_params + ): + # The wait_events API accepts any object is derived from EventSelector + # base class or any object which event selector can be constructed from. + if EventSelectorPassThrough.is_constructable_from(raw_event_selector): + event_selector = EventSelectorPassThrough() + elif isinstance(raw_event_selector, EventSelector): + event_selector = raw_event_selector + elif EventSelectorNameParam.is_constructable_from(raw_event_selector): + event_selector = EventSelectorNameParam( + raw_event_selector, param_subs=param_subs, **event_selector_params + ) + elif EventSelectorCallable.is_constructable_from(raw_event_selector): + event_selector = EventSelectorCallable(raw_event_selector) + else: + raise TypeError(f"Invalid event selector type: {type(raw_event_selector)}") + return event_selector + + def get_events( + self, + timeout=0.0, + max_events=None, + max_time=None, + event_selector=None, + final_event_count=None, + param_subs={}, + **event_selector_params, + ): + if timeout == None and max_events == None and max_time == None: + raise Exception("One of the arguments has to be other than None") + event_generator = self.gen_events( + timeout=timeout, + max_events=max_events, + max_time=max_time, + event_selector=event_selector, + final_event_count=final_event_count, + param_subs=param_subs, + **event_selector_params, + ) + return [event for event in event_generator] + + def gen_events( + self, + timeout=0.0, + max_events=None, + max_time=None, + event_selector=None, + final_event_count=None, + param_subs={}, + **event_selector_params, + ): + selected_events = [] + current_final_event_count = 0 + evt_sel = self.build_event_selector( + event_selector, param_subs=param_subs, **event_selector_params + ) + for event in super().gen_events( + timeout=timeout, max_events=max_events, max_time=max_time + ): + category = evt_sel.categorize(event, selected_events) + if category in (EventSelector.SELECT_CONTINUE, EventSelector.SELECT_FINAL): + if not evt_sel.stateless: + selected_events.append(event) + yield event + if category == EventSelector.SELECT_FINAL: + if final_event_count is not None: + current_final_event_count += 1 + if final_event_count <= current_final_event_count: + break + + def wait( + self, + max_time, + timeout=None, + max_events=None, + ): + # Wait is a better alternative to sleep because it processes events + # and calls the subscribed event handlers with the proper events so + # the application remains responsive. + # It consumes a bit more CPU cycles than the sleep but most of the + # time it waits for events to process. + for _ in self.gen_events( + timeout=timeout, max_events=max_events, max_time=max_time + ): + pass + + def wait_events( + self, + event_selector, + timeout=None, + max_events=None, + max_time=10, + max_time_rst_on_evt=False, + final_event_count=1, + keep_all_events=False, + param_subs={}, + selected_events=EventList(), + **event_selector_params, + ) -> EventList: + if not selected_events: + # Avoid the modification of default mutable parameter + selected_events = EventList() + evt_sel = self.build_event_selector( + event_selector, param_subs=param_subs, **event_selector_params + ) + gen_events_max_time = True + while gen_events_max_time: + gen_events_max_time = False + for event in super().gen_events( + timeout=timeout, max_events=max_events, max_time=max_time + ): + category = evt_sel.categorize(event, selected_events) + if ( + (category == EventSelector.SELECT_CONTINUE) + or (category == EventSelector.SELECT_FINAL) + or ((category == EventSelector.IGNORE) and keep_all_events) + ): + selected_events.append(event) + if category == EventSelector.SELECT_CONTINUE: + if max_time_rst_on_evt: + logger.debug("Restart wait events max time.") + gen_events_max_time = True + break + elif category == EventSelector.SELECT_FINAL: + selected_events.final_event_cnt += 1 + if selected_events.final_event_cnt < final_event_count: + if max_time_rst_on_evt: + logger.debug("Restart wait events max time.") + gen_events_max_time = True + break + else: + return selected_events + # The execution reaches this point if the desired number of final events + # are not encountered before the timeout or max_time elapsed. + # If the awaited final event is not encountered then it means something + # went wrong so an BGLibExtWaitEventError exception is raised. + # Some events could be selected so those are added to the exception. + raise BGLibExtWaitEventError( + "Expected final event is missing.", events=selected_events + ) + + def wait_event( + self, + event_selector, + timeout=None, + max_events=None, + max_time=10, + param_subs={}, + **event_selector_params, + ): + return self.wait_events( + event_selector=event_selector, + timeout=timeout, + max_events=max_events, + max_time=max_time, + max_time_rst_on_evt=False, + final_event_count=1, + keep_all_events=False, + param_subs=param_subs, + **event_selector_params, + )[0] + + def retry_until( + self, + command, + *args, + retry_max=5, + retry_interval=1.0, + retry_int_rst_on_evt=False, + retry_cmd_max=10, + retry_cmd_interval=1.0, + retry_cmd_err_code=[], + retry_event_selector=None, + event_selector=None, + final_event_count=1, + keep_all_events=False, + **event_selector_params, + ): + if isinstance(retry_cmd_err_code, SlStatus): + retry_cmd_err_code = [retry_cmd_err_code] + elif not BGLibExt.is_iterable(retry_cmd_err_code): + retry_cmd_err_code = [retry_cmd_err_code] + selected_events = EventList() + any_cmd_success = False + last_cmd_failed = False + prev_sel_evt_cnt = 0 + for retry_count in range(0, retry_max + 1): + # The command itself might not be successful but it could mean + # recoverable error so it could make sense to retry is a bit later. + # For example memory allocation could fail in the stack. + for retry_cmd_count in range(0, retry_cmd_max + 1): + try: + # The command return value is not checked because an exception + # is thrown if it is not zero and the retries are maxed + # The arguments shall be packed into the command object + response = command(*args) + if event_selector is None: + # If no event was specified then only the command shall + # be repeated so the method shall return here. + # The command response is returned in this special case + # instead of events. + return response + # The command was successful so the response contains the + # value of command output parameters. A parameter value + # substitution dictionary is built from these values which + # can be used in event selector to wait for an event with + # substituted event parameter values. + if response is not None: + param_subs = { + field: getattr(response, field) + for field in response._fields + } + else: + param_subs = {} + # Build event_selector once after each successful command. + # The event_selector needs to be rebuilt because the + # parameter substitution changes when the command returns + # different response. + evt_selector = self.build_event_selector( + event_selector, + param_subs=param_subs, + **event_selector_params, + ) + # Create an event list after each successful command if the + # event_selector is stateless. + # Corner case: first command successful but the expected + # event is missing or the received event means a recoverable + # error. The retry logic calls the command again but it returns + # a recoverable error. It is possible that the first command + # which was successful triggers some events later when the + # new command calls are failing and waiting for timeout. + # (retry_cmd_interval) + # The events since the last successful commands are kept and + # concatenated and therefore no new event list is created + # when the command fails. + if evt_selector.stateless: + selected_events = EventList() + any_cmd_success = True + last_cmd_failed = False + break + except CommandFailedError as e: + last_cmd_failed = True + # If the last attempt to execute the command fails or the error + # is not recoverable then raise the command error instead of + # event error. + if (retry_cmd_max <= retry_cmd_count) or ( + e.errorcode not in retry_cmd_err_code + ): + raise + if any_cmd_success: + # If at least one command succeeded before then the + # function shall wait for expected events during the + # command retry timeout (retry_cmd_interval). + # This is essential because the succeeded command might + # trigger events later when the retry logic calls the + # command again but retry command fails. + # This is a corner case when the command starts slow + # async processes in the stack but the retry interval + # is low enough to call the command again before the + # processes started by the last command is finished. + # Example: segmented message transfer + try: + prev_sel_evt_cnt = len(selected_events) + selected_events = self.wait_events( + evt_selector, + max_time=retry_cmd_interval, + max_time_rst_on_evt=retry_int_rst_on_evt, + final_event_count=final_event_count, + keep_all_events=keep_all_events, + param_subs=param_subs, + selected_events=selected_events, + **event_selector_params, + ) + break + except BGLibExtWaitEventError as e: + # Some events are missing so command retry is required + logger.warning("Retry due to recoverable command error.") + continue + else: + # If the command error code is a recoverable error + # then wait some time before the command is called again + # (e.g. resource limitation) + self.wait(retry_cmd_interval) + logger.warning("Retry due to recoverable command error.") + continue + if not last_cmd_failed: + try: + prev_sel_evt_cnt = len(selected_events) + selected_events = self.wait_events( + evt_selector, + max_time=retry_interval, + max_time_rst_on_evt=retry_int_rst_on_evt, + final_event_count=final_event_count, + keep_all_events=keep_all_events, + param_subs=param_subs, + selected_events=selected_events, + **event_selector_params, + ) + except BGLibExtWaitEventError as e: + if retry_count < retry_max: + # The retry_until assumes recoverable error when no + # event is received, and consequently it performs a + # retry (e.g. the event is missing due to packet loss) + logger.warning("Retry due to missing events.") + selected_events = e.events + continue + else: + # Maximum number of retry is reached so the same exception + # is raised again + raise + # If the event_selector is stateless then all events are new + # events and prev_sel_evt_cnt is set to 0. + new_events = selected_events[prev_sel_evt_cnt:] + # If the expected events mean a recoverable error then it + # shall be retried to receive the proper event with proper + # parameters. + # If the number of retry attempts are maxed but recoverable + # error occurs again then the events are returned because a + # final event was found so it is the responsibility of the + # caller to evaluate it. + # The recoverable error (retry_event_selector) detection shall + # be performed over the new events only otherwise it could lead + # to constants retry until the retry count is maxed because the + # retry triggering event could be still in selected_events when + # the event_selector is not stateless because events are + # accumulated in each retry iteration. + if (retry_event_selector is not None) and (retry_count < retry_max): + retry_evt_sel = self.build_event_selector( + retry_event_selector, param_subs=param_subs + ) + if any( + EventSelector.IGNORE != retry_evt_sel.categorize(event) + for event in new_events + ): + logger.warning("Retry due to recoverable event error.") + continue + # The required events are found which shall be returned + return selected_events + + + +@dataclasses.dataclass +class BGLibExtRetryParams: + retry_max: int + retry_interval: float + retry_cmd_max: int + retry_cmd_interval: float + + def to_dict(self): + return dataclasses.asdict(self) + + def __post_init__(self): + if self.retry_max < 0: + raise ValueError(f"The retry max is negative.") + if self.retry_interval < 0.0: + raise ValueError(f"The retry interval is negative.") + if self.retry_cmd_max < 0: + raise ValueError(f"The retry command max is negative.") + if self.retry_cmd_interval < 0.0: + raise ValueError(f"The retry command interval is negative.") + + +class EventSelector(abc.ABC): + SELECT_FINAL = 0 + SELECT_CONTINUE = 1 + IGNORE = 2 + + @abc.abstractmethod + def categorize(self, event, selected_events=[]): + return self.SELECT_FINAL + + @abc.abstractproperty + def stateless(self): + return True + + +class EventParamValues(UserList): + """Event selector parameter values. This class is created to avoid using + common iterables in EventSelectorNameParam in order to differentiate multiple + options from iterable values.""" + + def __init__(self, initlist=None): + super().__init__(initlist=initlist) + + +class EventSelectorNameParam(EventSelector): + @staticmethod + def is_constructable_from(raw_event_selector): + if isinstance(raw_event_selector, str): + return True + elif BGLibExt.is_iterable(raw_event_selector): + if all(isinstance(evt_name, str) for evt_name in raw_event_selector): + if isinstance(raw_event_selector, Mapping): + for evt_name in raw_event_selector: + event_params = raw_event_selector[evt_name] + if event_params is None: + event_params = {} + if not isinstance(event_params, Mapping): + return False + elif not all(isinstance(name, str) for name in event_params): + return False + return True + else: + return True + else: + return False + else: + return False + + @classmethod + def is_param_name_keyword(cls, param_name: str): + return param_name.startswith("#") + + def __init__(self, event_names, param_subs={}, **event_params): + # It shall be guaranteed that the event_names is not modified in this + # function to make it reusable for other calls as well. The parameter + # substitutions could modify event_names parameter values so the content + # of event_names is deep copied when param_subs is not empty. + if param_subs: + event_names = copy.deepcopy(event_names) + self.event_name_dict = {} + if not self.is_constructable_from(event_names): + raise TypeError( + f"{self.__class__.__name__} is not constructable " + + f"from {event_names}." + ) + if isinstance(event_names, str): + self.event_name_dict[event_names] = event_params + elif BGLibExt.is_iterable(event_names): + if isinstance(event_names, Mapping): + for evt_name in event_names: + evt_params = event_names[evt_name] + if evt_params: + self.event_name_dict[evt_name] = evt_params + else: + self.event_name_dict[evt_name] = {} + else: + for evt_name in event_names: + self.event_name_dict[evt_name] = event_params + else: + raise TypeError( + f"{self.__class__.__name__} is not constructable " + + f"from {event_names}." + ) + self._stateless = True + for evt_name, evt_params in self.event_name_dict.items(): + for param_name, param_values in evt_params.items(): + if self.is_param_name_keyword(param_name): + continue + if not isinstance(param_values, EventParamValues): + evt_params[param_name] = EventParamValues((param_values,)) + if "#unique" in evt_params: + self._stateless = False + if isinstance(evt_params["#unique"], str): + evt_params["#unique"] = (evt_params["#unique"],) + elif isinstance(evt_params["#unique"], tuple): + for unique_field in evt_params["#unique"]: + if not isinstance(unique_field, str): + raise TypeError( + f"The #unique parameter value of {evt_name} " + f"event in {self.__class__.__name__} shall be " + f"str or tuple[str]." + ) + else: + raise TypeError( + f"The #unique parameter value of {evt_name} " + f"event in {self.__class__.__name__} shall be " + f"str or tuple[str]." + ) + self.resolve_event_params(param_subs) + + @property + def stateless(self): + return self._stateless + + def resolve_event_params(self, param_subs): + for event_name in self.event_name_dict: + for param_name, param_values in self.event_name_dict[event_name].items(): + if self.is_param_name_keyword(param_name): + continue + for idx, param_value in enumerate(param_values): + if isinstance(param_value, str): + param_value = param_value.strip() + if param_value[0] == "$": + param_value = param_subs[param_value[1:]] + self.event_name_dict[event_name][param_name][idx] = param_value + + def categorize(self, event, selected_events=[]): + event_name = BGLibExt.get_event_name(event) + # If the event name is not expected then it shall be ignored + if event_name not in self.event_name_dict: + return self.IGNORE + # If no parameter values are specified for an event name then it is a + # final selected event + if not self.event_name_dict[event_name]: + return self.SELECT_FINAL + expected_event_params = self.event_name_dict[event_name] + event_params_match_list = [ + (getattr(event, param_name) in param_values) + for param_name, param_values in expected_event_params.items() + if not self.is_param_name_keyword(param_name) + ] + # If there is only a single #final entry in the expected_event_params + # then the event_params_match_list is an empty list but all() function + # return True when it is called with an empty iterable which means the + # event is selected + if all(event_params_match_list): + if expected_event_params.get("#final", True): + unique_param_tuple = expected_event_params.get("#unique", None) + if unique_param_tuple: + if self.is_duplicate_event( + event, unique_param_tuple, selected_events + ): + return self.IGNORE + else: + return self.SELECT_FINAL + return self.SELECT_FINAL + else: + # If the special #final entry is added to the expected params + # and it is false then the processed event is not the final one + return self.SELECT_CONTINUE + else: + return self.IGNORE + + def is_duplicate_event(self, event, unique_param_tuple, selected_events): + duplicate = False + for sel_event in selected_events: + event_name = BGLibExt.get_event_name(event) + sel_event_name = BGLibExt.get_event_name(sel_event) + if event_name == sel_event_name: + duplicate = all( + getattr(event, unique_param_name) + == getattr(sel_event, unique_param_name) + for unique_param_name in unique_param_tuple + ) + if duplicate: + break + return duplicate + + def __repr__(self): + return f"{self.__class__.__name__}({self.event_name_dict})" + + +class EventSelectorCallable(EventSelector): + @staticmethod + def is_constructable_from(raw_event_selector): + return isinstance(raw_event_selector, Callable) + + def __init__(self, callable, *args, **kwargs): + super().__init__() + self.callable = callable + self.args = args + self.kwargs = kwargs + + @property + def stateless(self): + return False + + def categorize(self, event, selected_events=[]): + return self.callable(event, selected_events, *self.args, *self.kwargs) + + +class EventSelectorPassThrough(EventSelector): + @staticmethod + def is_constructable_from(raw_event_selector): + return raw_event_selector is None + + def __init__(self, *args, **kwargs): + super().__init__() + + @property + def stateless(self): + return True + + def categorize(self, event, selected_events=[]): + return self.SELECT_CONTINUE diff --git a/app/btmesh/example_host/btmesh_host_dfu/bgapix/slstatus.py b/app/btmesh/example_host/btmesh_host_dfu/bgapix/slstatus.py new file mode 100644 index 00000000000..9aa2dc540be --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/bgapix/slstatus.py @@ -0,0 +1,300 @@ +# 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. + +# __ __ _ _ # +# \ \ / /_ _ _ __ _ __ (_)_ __ __ _| | # +# \ \ /\ / / _` | '__| '_ \| | '_ \ / _` | | # +# \ V V / (_| | | | | | | | | | | (_| |_| # +# \_/\_/ \__,_|_| |_| |_|_|_| |_|\__, (_) # +# |___/ # +# # +# This file is generated by btmesh_host_dfu/gen/slstatus_gen.py script. # + +import enum + + +@enum.unique +class SlStatus(enum.IntEnum): + @classmethod + def get_name(cls, value): + try: + return cls(value).name + except ValueError: + return "UNKNOWN_VALUE" + + @classmethod + def from_int(cls, value): + try: + return cls(value) + except ValueError: + return cls.UNKNOWN_VALUE + + OK = 0x0000 + FAIL = 0x0001 + INVALID_STATE = 0x0002 + NOT_READY = 0x0003 + BUSY = 0x0004 + IN_PROGRESS = 0x0005 + ABORT = 0x0006 + TIMEOUT = 0x0007 + PERMISSION = 0x0008 + WOULD_BLOCK = 0x0009 + IDLE = 0x000A + IS_WAITING = 0x000B + NONE_WAITING = 0x000C + SUSPENDED = 0x000D + NOT_AVAILABLE = 0x000E + NOT_SUPPORTED = 0x000F + INITIALIZATION = 0x0010 + NOT_INITIALIZED = 0x0011 + ALREADY_INITIALIZED = 0x0012 + DELETED = 0x0013 + ISR = 0x0014 + NETWORK_UP = 0x0015 + NETWORK_DOWN = 0x0016 + NOT_JOINED = 0x0017 + NO_BEACONS = 0x0018 + ALLOCATION_FAILED = 0x0019 + NO_MORE_RESOURCE = 0x001A + EMPTY = 0x001B + FULL = 0x001C + WOULD_OVERFLOW = 0x001D + HAS_OVERFLOWED = 0x001E + OWNERSHIP = 0x001F + IS_OWNER = 0x0020 + INVALID_PARAMETER = 0x0021 + NULL_POINTER = 0x0022 + INVALID_CONFIGURATION = 0x0023 + INVALID_MODE = 0x0024 + INVALID_HANDLE = 0x0025 + INVALID_TYPE = 0x0026 + INVALID_INDEX = 0x0027 + INVALID_RANGE = 0x0028 + INVALID_KEY = 0x0029 + INVALID_CREDENTIALS = 0x002A + INVALID_COUNT = 0x002B + INVALID_SIGNATURE = 0x002C + NOT_FOUND = 0x002D + ALREADY_EXISTS = 0x002E + IO = 0x002F + IO_TIMEOUT = 0x0030 + TRANSMIT = 0x0031 + TRANSMIT_UNDERFLOW = 0x0032 + TRANSMIT_INCOMPLETE = 0x0033 + TRANSMIT_BUSY = 0x0034 + RECEIVE = 0x0035 + OBJECT_READ = 0x0036 + OBJECT_WRITE = 0x0037 + MESSAGE_TOO_LONG = 0x0038 + EEPROM_MFG_VERSION_MISMATCH = 0x0039 + EEPROM_STACK_VERSION_MISMATCH = 0x003A + FLASH_WRITE_INHIBITED = 0x003B + FLASH_VERIFY_FAILED = 0x003C + FLASH_PROGRAM_FAILED = 0x003D + FLASH_ERASE_FAILED = 0x003E + MAC_NO_DATA = 0x003F + MAC_NO_ACK_RECEIVED = 0x0040 + MAC_INDIRECT_TIMEOUT = 0x0041 + MAC_UNKNOWN_HEADER_TYPE = 0x0042 + MAC_ACK_HEADER_TYPE = 0x0043 + MAC_COMMAND_TRANSMIT_FAILURE = 0x0044 + CLI_STORAGE_NVM_OPEN_ERROR = 0x0045 + SECURITY_IMAGE_CHECKSUM_ERROR = 0x0046 + SECURITY_DECRYPT_ERROR = 0x0047 + COMMAND_IS_INVALID = 0x0048 + COMMAND_TOO_LONG = 0x0049 + COMMAND_INCOMPLETE = 0x004A + BUS_ERROR = 0x004B + CCA_FAILURE = 0x004C + MAC_SCANNING = 0x004D + MAC_INCORRECT_SCAN_TYPE = 0x004E + INVALID_CHANNEL_MASK = 0x004F + BAD_SCAN_DURATION = 0x0050 + BT_OUT_OF_BONDS = 0x0402 + BT_UNSPECIFIED = 0x0403 + BT_HARDWARE = 0x0404 + BT_NO_BONDING = 0x0406 + BT_CRYPTO = 0x0407 + BT_DATA_CORRUPTED = 0x0408 + BT_INVALID_SYNC_HANDLE = 0x040A + BT_INVALID_MODULE_ACTION = 0x040B + BT_RADIO = 0x040C + BT_L2CAP_REMOTE_DISCONNECTED = 0x040D + BT_L2CAP_LOCAL_DISCONNECTED = 0x040E + BT_L2CAP_CID_NOT_EXIST = 0x040F + BT_L2CAP_LE_DISCONNECTED = 0x0410 + BT_L2CAP_FLOW_CONTROL_VIOLATED = 0x0412 + BT_L2CAP_FLOW_CONTROL_CREDIT_OVERFLOWED = 0x0413 + BT_L2CAP_NO_FLOW_CONTROL_CREDIT = 0x0414 + BT_L2CAP_CONNECTION_REQUEST_TIMEOUT = 0x0415 + BT_L2CAP_INVALID_CID = 0x0416 + BT_L2CAP_WRONG_STATE = 0x0417 + BT_PS_STORE_FULL = 0x041B + BT_PS_KEY_NOT_FOUND = 0x041C + BT_APPLICATION_MISMATCHED_OR_INSUFFICIENT_SECURITY = 0x041D + BT_APPLICATION_ENCRYPTION_DECRYPTION_ERROR = 0x041E + BT_CTRL_UNKNOWN_CONNECTION_IDENTIFIER = 0x1002 + BT_CTRL_AUTHENTICATION_FAILURE = 0x1005 + BT_CTRL_PIN_OR_KEY_MISSING = 0x1006 + BT_CTRL_MEMORY_CAPACITY_EXCEEDED = 0x1007 + BT_CTRL_CONNECTION_TIMEOUT = 0x1008 + BT_CTRL_CONNECTION_LIMIT_EXCEEDED = 0x1009 + BT_CTRL_SYNCHRONOUS_CONNECTION_LIMIT_EXCEEDED = 0x100A + BT_CTRL_ACL_CONNECTION_ALREADY_EXISTS = 0x100B + BT_CTRL_COMMAND_DISALLOWED = 0x100C + BT_CTRL_CONNECTION_REJECTED_DUE_TO_LIMITED_RESOURCES = 0x100D + BT_CTRL_CONNECTION_REJECTED_DUE_TO_SECURITY_REASONS = 0x100E + BT_CTRL_CONNECTION_REJECTED_DUE_TO_UNACCEPTABLE_BD_ADDR = 0x100F + BT_CTRL_CONNECTION_ACCEPT_TIMEOUT_EXCEEDED = 0x1010 + BT_CTRL_UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE = 0x1011 + BT_CTRL_INVALID_COMMAND_PARAMETERS = 0x1012 + BT_CTRL_REMOTE_USER_TERMINATED = 0x1013 + BT_CTRL_REMOTE_DEVICE_TERMINATED_CONNECTION_DUE_TO_LOW_RESOURCES = 0x1014 + BT_CTRL_REMOTE_POWERING_OFF = 0x1015 + BT_CTRL_CONNECTION_TERMINATED_BY_LOCAL_HOST = 0x1016 + BT_CTRL_REPEATED_ATTEMPTS = 0x1017 + BT_CTRL_PAIRING_NOT_ALLOWED = 0x1018 + BT_CTRL_UNSUPPORTED_REMOTE_FEATURE = 0x101A + BT_CTRL_UNSPECIFIED_ERROR = 0x101F + BT_CTRL_LL_RESPONSE_TIMEOUT = 0x1022 + BT_CTRL_LL_PROCEDURE_COLLISION = 0x1023 + BT_CTRL_ENCRYPTION_MODE_NOT_ACCEPTABLE = 0x1025 + BT_CTRL_LINK_KEY_CANNOT_BE_CHANGED = 0x1026 + BT_CTRL_INSTANT_PASSED = 0x1028 + BT_CTRL_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED = 0x1029 + BT_CTRL_DIFFERENT_TRANSACTION_COLLISION = 0x102A + BT_CTRL_CHANNEL_ASSESSMENT_NOT_SUPPORTED = 0x102E + BT_CTRL_INSUFFICIENT_SECURITY = 0x102F + BT_CTRL_PARAMETER_OUT_OF_MANDATORY_RANGE = 0x1030 + BT_CTRL_SIMPLE_PAIRING_NOT_SUPPORTED_BY_HOST = 0x1037 + BT_CTRL_HOST_BUSY_PAIRING = 0x1038 + BT_CTRL_CONNECTION_REJECTED_DUE_TO_NO_SUITABLE_CHANNEL_FOUND = 0x1039 + BT_CTRL_CONTROLLER_BUSY = 0x103A + BT_CTRL_UNACCEPTABLE_CONNECTION_INTERVAL = 0x103B + BT_CTRL_ADVERTISING_TIMEOUT = 0x103C + BT_CTRL_CONNECTION_TERMINATED_DUE_TO_MIC_FAILURE = 0x103D + BT_CTRL_CONNECTION_FAILED_TO_BE_ESTABLISHED = 0x103E + BT_CTRL_MAC_CONNECTION_FAILED = 0x103F + BT_CTRL_COARSE_CLOCK_ADJUSTMENT_REJECTED_BUT_WILL_TRY_TO_ADJUST_USING_CLOCK_DRAGGING = 0x1040 + BT_CTRL_UNKNOWN_ADVERTISING_IDENTIFIER = 0x1042 + BT_CTRL_LIMIT_REACHED = 0x1043 + BT_CTRL_OPERATION_CANCELLED_BY_HOST = 0x1044 + BT_CTRL_PACKET_TOO_LONG = 0x1045 + BT_ATT_INVALID_HANDLE = 0x1101 + BT_ATT_READ_NOT_PERMITTED = 0x1102 + BT_ATT_WRITE_NOT_PERMITTED = 0x1103 + BT_ATT_INVALID_PDU = 0x1104 + BT_ATT_INSUFFICIENT_AUTHENTICATION = 0x1105 + BT_ATT_REQUEST_NOT_SUPPORTED = 0x1106 + BT_ATT_INVALID_OFFSET = 0x1107 + BT_ATT_INSUFFICIENT_AUTHORIZATION = 0x1108 + BT_ATT_PREPARE_QUEUE_FULL = 0x1109 + BT_ATT_ATT_NOT_FOUND = 0x110A + BT_ATT_ATT_NOT_LONG = 0x110B + BT_ATT_INSUFFICIENT_ENC_KEY_SIZE = 0x110C + BT_ATT_INVALID_ATT_LENGTH = 0x110D + BT_ATT_UNLIKELY_ERROR = 0x110E + BT_ATT_INSUFFICIENT_ENCRYPTION = 0x110F + BT_ATT_UNSUPPORTED_GROUP_TYPE = 0x1110 + BT_ATT_INSUFFICIENT_RESOURCES = 0x1111 + BT_ATT_OUT_OF_SYNC = 0x1112 + BT_ATT_VALUE_NOT_ALLOWED = 0x1113 + BT_ATT_APPLICATION = 0x1180 + BT_ATT_WRITE_REQUEST_REJECTED = 0x11FC + BT_ATT_CLIENT_CHARACTERISTIC_CONFIGURATION_DESCRIPTOR_IMPROPERLY_CONFIGURED = 0x11FD + BT_ATT_PROCEDURE_ALREADY_IN_PROGRESS = 0x11FE + BT_ATT_OUT_OF_RANGE = 0x11FF + BT_SMP_PASSKEY_ENTRY_FAILED = 0x1201 + BT_SMP_OOB_NOT_AVAILABLE = 0x1202 + BT_SMP_AUTHENTICATION_REQUIREMENTS = 0x1203 + BT_SMP_CONFIRM_VALUE_FAILED = 0x1204 + BT_SMP_PAIRING_NOT_SUPPORTED = 0x1205 + BT_SMP_ENCRYPTION_KEY_SIZE = 0x1206 + BT_SMP_COMMAND_NOT_SUPPORTED = 0x1207 + BT_SMP_UNSPECIFIED_REASON = 0x1208 + BT_SMP_REPEATED_ATTEMPTS = 0x1209 + BT_SMP_INVALID_PARAMETERS = 0x120A + BT_SMP_DHKEY_CHECK_FAILED = 0x120B + BT_SMP_NUMERIC_COMPARISON_FAILED = 0x120C + BT_SMP_BREDR_PAIRING_IN_PROGRESS = 0x120D + BT_SMP_CROSS_TRANSPORT_KEY_DERIVATION_GENERATION_NOT_ALLOWED = 0x120E + BT_SMP_KEY_REJECTED = 0x120F + BT_MESH_ALREADY_EXISTS = 0x0501 + BT_MESH_DOES_NOT_EXIST = 0x0502 + BT_MESH_LIMIT_REACHED = 0x0503 + BT_MESH_INVALID_ADDRESS = 0x0504 + BT_MESH_MALFORMED_DATA = 0x0505 + BT_MESH_ALREADY_INITIALIZED = 0x0506 + BT_MESH_NOT_INITIALIZED = 0x0507 + BT_MESH_NO_FRIEND_OFFER = 0x0508 + BT_MESH_PROV_LINK_CLOSED = 0x0509 + BT_MESH_PROV_INVALID_PDU = 0x050A + BT_MESH_PROV_INVALID_PDU_FORMAT = 0x050B + BT_MESH_PROV_UNEXPECTED_PDU = 0x050C + BT_MESH_PROV_CONFIRMATION_FAILED = 0x050D + BT_MESH_PROV_OUT_OF_RESOURCES = 0x050E + BT_MESH_PROV_DECRYPTION_FAILED = 0x050F + BT_MESH_PROV_UNEXPECTED_ERROR = 0x0510 + BT_MESH_PROV_CANNOT_ASSIGN_ADDR = 0x0511 + BT_MESH_ADDRESS_TEMPORARILY_UNAVAILABLE = 0x0512 + BT_MESH_ADDRESS_ALREADY_USED = 0x0513 + BT_MESH_PUBLISH_NOT_CONFIGURED = 0x0514 + BT_MESH_APP_KEY_NOT_BOUND = 0x0515 + BT_MESH_FOUNDATION_INVALID_ADDRESS = 0x1301 + BT_MESH_FOUNDATION_INVALID_MODEL = 0x1302 + BT_MESH_FOUNDATION_INVALID_APP_KEY = 0x1303 + BT_MESH_FOUNDATION_INVALID_NET_KEY = 0x1304 + BT_MESH_FOUNDATION_INSUFFICIENT_RESOURCES = 0x1305 + BT_MESH_FOUNDATION_KEY_INDEX_EXISTS = 0x1306 + BT_MESH_FOUNDATION_INVALID_PUBLISH_PARAMS = 0x1307 + BT_MESH_FOUNDATION_NOT_SUBSCRIBE_MODEL = 0x1308 + BT_MESH_FOUNDATION_STORAGE_FAILURE = 0x1309 + BT_MESH_FOUNDATION_NOT_SUPPORTED = 0x130A + BT_MESH_FOUNDATION_CANNOT_UPDATE = 0x130B + BT_MESH_FOUNDATION_CANNOT_REMOVE = 0x130C + BT_MESH_FOUNDATION_CANNOT_BIND = 0x130D + BT_MESH_FOUNDATION_TEMPORARILY_UNABLE = 0x130E + BT_MESH_FOUNDATION_CANNOT_SET = 0x130F + BT_MESH_FOUNDATION_UNSPECIFIED = 0x1310 + BT_MESH_FOUNDATION_INVALID_BINDING = 0x1311 + WIFI_INVALID_KEY = 0x0B01 + WIFI_FIRMWARE_DOWNLOAD_TIMEOUT = 0x0B02 + WIFI_UNSUPPORTED_MESSAGE_ID = 0x0B03 + WIFI_WARNING = 0x0B04 + WIFI_NO_PACKET_TO_RECEIVE = 0x0B05 + WIFI_SLEEP_GRANTED = 0x0B08 + WIFI_SLEEP_NOT_GRANTED = 0x0B09 + WIFI_SECURE_LINK_MAC_KEY_ERROR = 0x0B10 + WIFI_SECURE_LINK_MAC_KEY_ALREADY_BURNED = 0x0B11 + WIFI_SECURE_LINK_RAM_MODE_NOT_ALLOWED = 0x0B12 + WIFI_SECURE_LINK_FAILED_UNKNOWN_MODE = 0x0B13 + WIFI_SECURE_LINK_EXCHANGE_FAILED = 0x0B14 + WIFI_WRONG_STATE = 0x0B18 + WIFI_CHANNEL_NOT_ALLOWED = 0x0B19 + WIFI_NO_MATCHING_AP = 0x0B1A + WIFI_CONNECTION_ABORTED = 0x0B1B + WIFI_CONNECTION_TIMEOUT = 0x0B1C + WIFI_CONNECTION_REJECTED_BY_AP = 0x0B1D + WIFI_CONNECTION_AUTH_FAILURE = 0x0B1E + WIFI_RETRY_EXCEEDED = 0x0B1F + WIFI_TX_LIFETIME_EXCEEDED = 0x0B20 + UNKNOWN_VALUE = 0xCAFEBABE diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/__init__.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/conf.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/conf.py new file mode 100644 index 00000000000..3ab335264d8 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/conf.py @@ -0,0 +1,849 @@ +# 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. + +import copy +import dataclasses +import enum +from typing import Iterable, List, Optional, Union + +from bgapi.bglib import CommandError, CommandFailedError + +from bgapix.bglibx import (BGLibExt, BGLibExtRetryParams, + BGLibExtWaitEventError, EventParamValues) +from bgapix.slstatus import SlStatus + +from . import util +from .db import DCD, BtmeshDatabase, DCDElement, ModelID, Node +from .errors import BtmeshError, BtmeshErrorCode +from .event import LocalEventBus +from .util import BtmeshRetryParams + + +@enum.unique +class SilabsConfStatus(util.BtmeshIntEnum): + SUCCESS = 0x00 + UNKNOWN_COMMAND = 0x01 + INVALID_PARAMETER = 0x02 + DOES_NOT_EXISTS = 0x03 + TIMEOUT = 0xFFFF + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@enum.unique +class SilabsConfTxPhy(util.BtmeshIntEnum): + LE_LEGACY = 0x00 + LE_1M = 0x01 + LE_2M = 0x02 + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@enum.unique +class SilabsConfTxOpt(util.BtmeshIntFlag): + DEFAULT = 0 + # Short packets (non-segmented) over AE PHY + AE_SHORT_PACKETS = 1 + # Disable relaying AE packets + AE_NO_RELAY = 2 + + +@dataclasses.dataclass +class SilabsConfBaseStatus: + node: Node + status: SilabsConfStatus + + @classmethod + def from_event(cls, node: Node, event): + raise NotImplementedError(f"The {cls.__name__} can't be instantiated.") + + @classmethod + def create_status_timeout(cls, node): + raise NotImplementedError(f"The {cls.__name__} can't be instantiated.") + + +@dataclasses.dataclass +class SilabsConfTxStatus(SilabsConfBaseStatus): + tx_phy: Optional[SilabsConfTxPhy] + tx_options: Optional[SilabsConfTxOpt] + + @classmethod + def from_event(cls, node: Node, event): + assert node.prim_addr == event.server + return SilabsConfTxStatus( + node=node, + status=SilabsConfStatus.from_int(event.status), + tx_phy=SilabsConfTxPhy.from_int(event.tx_phy), + tx_options=SilabsConfTxOpt.from_int(event.tx_options_bitmap), + ) + + @classmethod + def create_status_timeout(cls, node): + return SilabsConfTxStatus( + node=node, + status=SilabsConfStatus.TIMEOUT, + tx_phy=None, + tx_options=None, + ) + + +@dataclasses.dataclass +class SilabsConfModelStatus(SilabsConfBaseStatus): + elem_index: Optional[int] + model: Optional[ModelID] + enabled: Optional[bool] + + @classmethod + def from_event(cls, node: Node, event): + assert node.prim_addr == event.server + return SilabsConfModelStatus( + node=node, + status=SilabsConfStatus.from_int(event.status), + elem_index=event.elem_index, + model=ModelID(event.model_id, event.vendor_id), + enabled=event.value, + ) + + @classmethod + def create_status_timeout(cls, node): + return SilabsConfModelStatus( + node=node, + status=SilabsConfStatus.TIMEOUT, + elem_index=None, + model=None, + enabled=None, + ) + + +@dataclasses.dataclass +class SilabsConfNetworkPduStatus(SilabsConfBaseStatus): + pdu_max_size: Optional[int] + + @classmethod + def from_event(cls, node: Node, event): + assert node.prim_addr == event.server + return SilabsConfNetworkPduStatus( + node=node, + status=SilabsConfStatus.from_int(event.status), + pdu_max_size=event.pdu_max_size, + ) + + @classmethod + def create_status_timeout(cls, node): + return SilabsConfNetworkPduStatus( + node=node, + status=SilabsConfStatus.TIMEOUT, + pdu_max_size=None, + ) + + +class Configurator: + NETKEY_IDX = 0 + DCD_PAGE_0 = 0 + DCD_HEADER_LEN = 10 + DCD_ELEM_HEADER_LEN = 4 + DCD_SIG_MODEL_LEN = 2 + DCD_VENDOR_MODEL_LEN = 4 + DCD_MODEL_ID_LEN = 2 + DCD_VENDOR_ID_LEN = 2 + + def __init__( + self, + lib: BGLibExt, + db: BtmeshDatabase, + evtbus: LocalEventBus, + conf_retry_params_default: BtmeshRetryParams, + silabs_retry_params_default: BtmeshRetryParams, + reset_node_retry_params_default: BtmeshRetryParams, + ): + self.lib = lib + self.db = db + self.evtbus = evtbus + self.conf_retry_params_default = conf_retry_params_default + self.silabs_retry_params_default = silabs_retry_params_default + self.reset_node_retry_params_default = reset_node_retry_params_default + self.silabs_conf_svr_fail = False + self.silabs_conf_clt_fail = False + + @property + def silabs_conf_support(self) -> bool: + return not (self.silabs_conf_clt_fail or self.silabs_conf_svr_fail) + + def set_conf_retry_params_default(self, retry_params: BtmeshRetryParams): + if retry_params: + self.conf_retry_params_default = copy.copy(retry_params) + + def set_silabs_retry_params_default(self, retry_params: BtmeshRetryParams): + if retry_params: + self.silabs_retry_params_default = copy.copy(retry_params) + + def set_reset_node_retry_params_default(self, retry_params: BtmeshRetryParams): + if retry_params: + self.reset_node_retry_params_default = copy.copy(retry_params) + + def any_lpn(self, nodes: Iterable[Node], skip_local: bool = True) -> bool: + for node in nodes: + if skip_local: + rsp = self.lib.btmesh.node.get_uuid() + prov_uuid = rsp.uuid + if node.uuid == prov_uuid: + continue + dcd = self.get_dcd_cached(node, retry_params=self.conf_retry_params_default) + if dcd.lpn: + return True + return False + + def any_lpn_in_elem_addrs( + self, elem_addrs: Iterable[int], skip_local: bool = True + ) -> bool: + nodes_dict = {} + for addr in elem_addrs: + util.validate_unicast_address(addr) + node = self.db.get_node_by_elem_addr(addr) + nodes_dict[node.prim_addr] = node + return self.any_lpn(nodes_dict.values()) + + def config_procedure( + self, + proc_name, + cmd, + node: Node, + *args, + final_event_name, + output_event_names=[], + retry_params: BtmeshRetryParams = None, + ): + if retry_params is None: + retry_params = self.conf_retry_params_default + if isinstance(output_event_names, str): + output_event_names = [output_event_names] + elif not output_event_names: + output_event_names = [final_event_name] + event_selector = {} + retry_event_selector = {} + for evt in output_event_names: + if evt != final_event_name: + event_selector[evt] = { + "#final": False, + "handle": "$handle", + } + event_selector[final_event_name] = {"handle": "$handle"} + retry_event_selector[final_event_name] = { + "result": SlStatus.TIMEOUT, + "handle": "$handle", + } + rsp = self.lib.btmesh.config_client.get_default_timeout() + orig_timeout_ms = rsp.timeout_ms + orig_lpn_timeout_ms = rsp.lpn_timeout_ms + try: + self.lib.btmesh.config_client.set_default_timeout( + round(1000 * retry_params.retry_interval), + round(1000 * retry_params.retry_interval_lpn), + ) + # The BT Mesh stack configuration client API guarantees that + # the command specific event is emitted even in case of timeout. + # A worst case timeout is calculated for retry_until function in + # order to be on the safe side and to avoid waiting forever. + # Note: an event might be lost if the processing of events is slower + # than the generation of events and the event buffer is full. + retry_interval_base = max( + retry_params.retry_interval, retry_params.retry_interval_lpn + ) + retry_params = BGLibExtRetryParams( + retry_max=retry_params.retry_max, + retry_interval=2 * retry_interval_base, + retry_cmd_max=self.conf_retry_params_default.retry_cmd_max, + retry_cmd_interval=self.conf_retry_params_default.retry_cmd_interval, + ) + events = self.lib.retry_until( + cmd, + self.NETKEY_IDX, + node.prim_addr, + *args, + **retry_params.to_dict(), + retry_cmd_err_code=[SlStatus.NO_MORE_RESOURCE, SlStatus.INVALID_STATE], + retry_event_selector=retry_event_selector, + event_selector=event_selector, + ) + finally: + self.lib.btmesh.config_client.set_default_timeout( + orig_timeout_ms, orig_lpn_timeout_ms + ) + final_events = [evt for evt in events if evt == final_event_name] + # There should be at least one and most probably only one end event due + # to the retry_until function otherwise the retry_until raises + # CommandFailedError or BGLibExtWaitEventError exception. + final_evt = final_events[0] + if final_evt.result != SlStatus.OK: + result_value = final_evt.result + result_name = SlStatus.get_name(final_evt.result) + raise BtmeshError( + BtmeshErrorCode.CONFIG_FAILED, + f"{proc_name.capitalize()} procedure failed. " + f"(0x{result_value:04X}-{result_name})", + event=final_evt, + ) + return [evt for evt in events if evt in output_event_names] + + def concat_config_event_bytes(self, attr, events, event_filter=lambda e: True): + barr = bytearray() + for evt in filter(event_filter, events): + barr.extend(getattr(evt, attr)) + return bytes(barr) + + def get_dcd( + self, + node: Node, + update_db: bool = True, + retry_params: BtmeshRetryParams = None, + ) -> DCD: + rsp = self.lib.btmesh.node.get_uuid() + prov_uuid = rsp.uuid + if node.uuid == prov_uuid: + # The DCD of the Provisioner can be queried by node command only. + # No retry is necessary because it is a local command (no msg sent) + self.lib.btmesh.node.get_local_dcd(self.DCD_PAGE_0) + events = self.lib.wait_events( + event_selector={ + "btmesh_evt_node_local_dcd_data": {"#final": False}, + "btmesh_evt_node_local_dcd_data_end": None, + }, + max_time=1.0, + ) + # The btmesh_evt_node_local_dcd_data_end is the final event so it is + # guaranteed that it is the last element of the list + local_dcd_data_end_evt = events[-1] + get_local_dcd_result = local_dcd_data_end_evt.result + if get_local_dcd_result != SlStatus.OK: + result_value = get_local_dcd_result + result_name = SlStatus.get_name(result_value) + raise BtmeshError( + BtmeshErrorCode.CONFIG_FAILED, + f"DCD Local Get procedure failed. " + f"(0x{result_value:04X}-{result_name})", + event=local_dcd_data_end_evt, + ) + events = events[:-1] + else: + events = self.config_procedure( + "DCD Get", + self.lib.btmesh.config_client.get_dcd, + node, + self.DCD_PAGE_0, + final_event_name="btmesh_evt_config_client_dcd_data_end", + output_event_names="btmesh_evt_config_client_dcd_data", + retry_params=retry_params, + ) + dcd_data = self.concat_config_event_bytes( + attr="data", events=events, event_filter=lambda e: e.page == 0 + ) + dcd = self.parse_dcd(dcd_data) + if update_db: + node.dcd = dcd + return dcd + + def parse_dcd(self, dcd_data): + if len(dcd_data) < self.DCD_HEADER_LEN: + raise BtmeshError( + BtmeshErrorCode.INVALID_DCD, + f"DCD data shall be min {self.DCD_HEADER_LEN} bytes long.", + dcd_data=dcd_data, + ) + cid = int.from_bytes(dcd_data[0:2], byteorder="little") + pid = int.from_bytes(dcd_data[2:4], byteorder="little") + vid = int.from_bytes(dcd_data[4:6], byteorder="little") + crpl = int.from_bytes(dcd_data[6:8], byteorder="little") + relay = bool(dcd_data[8] & 0x01) + proxy = bool(dcd_data[8] & 0x02) + friend = bool(dcd_data[8] & 0x04) + lpn = bool(dcd_data[8] & 0x08) + + elements = self.parse_dcd_elements(dcd_data) + + dcd = DCD( + cid=cid, + pid=pid, + vid=vid, + crpl=crpl, + relay=relay, + proxy=proxy, + friend=friend, + lpn=lpn, + elements=elements, + ) + return dcd + + def parse_dcd_elements(self, dcd_data): + dcd_data_elems = dcd_data[self.DCD_HEADER_LEN :] + elements = [] + while 0 < len(dcd_data_elems): + if len(dcd_data_elems) < self.DCD_ELEM_HEADER_LEN: + raise BtmeshError( + BtmeshErrorCode.INVALID_DCD, + f"DCD element data shall be min {self.DCD_ELEM_HEADER_LEN} " + f"bytes long.", + dcd_data=dcd_data, + ) + loc = int.from_bytes(dcd_data_elems[0:2], byteorder="little") + num_s = dcd_data_elems[2] + num_v = dcd_data_elems[3] + elem_models_len = ( + num_s * self.DCD_SIG_MODEL_LEN + num_v * self.DCD_VENDOR_MODEL_LEN + ) + elem_len = self.DCD_ELEM_HEADER_LEN + elem_models_len + if len(dcd_data_elems) < elem_len: + raise BtmeshError( + BtmeshErrorCode.INVALID_DCD, + f"DCD element data shall be {elem_len} bytes long.", + dcd_data=dcd_data, + ) + dcd_model_data = dcd_data_elems[ + self.DCD_ELEM_HEADER_LEN : self.DCD_ELEM_HEADER_LEN + elem_len + ] + models = self.parse_dcd_models( + num_s=num_s, num_v=num_v, dcd_model_data=dcd_model_data + ) + element = DCDElement(len(elements), loc, models) + elements.append(element) + dcd_data_elems = dcd_data_elems[elem_len:] + return elements + + def parse_dcd_models(self, num_s, num_v, dcd_model_data): + sig_mdl_start = 0 + sig_mdl_end = sig_mdl_start + num_s * self.DCD_SIG_MODEL_LEN + vendor_mdl_start = sig_mdl_end + vendor_mdl_end = vendor_mdl_start + num_v * self.DCD_VENDOR_MODEL_LEN + models = [] + for idx in range(sig_mdl_start, sig_mdl_end, self.DCD_SIG_MODEL_LEN): + model_id_bytes = dcd_model_data[idx : idx + self.DCD_MODEL_ID_LEN] + model_id = int.from_bytes(model_id_bytes, byteorder="little") + mdl = ModelID(model_id) + models.append(mdl) + for idx in range(vendor_mdl_start, vendor_mdl_end, self.DCD_VENDOR_MODEL_LEN): + vendor_id_start = idx + vendor_id_end = vendor_id_start + self.DCD_VENDOR_ID_LEN + mdl_id_start = vendor_id_end + mdl_id_end = mdl_id_start + self.DCD_MODEL_ID_LEN + vendor_id_bytes = dcd_model_data[vendor_id_start:vendor_id_end] + model_id_bytes = dcd_model_data[mdl_id_start:mdl_id_end] + vendor_id = int.from_bytes(vendor_id_bytes, byteorder="little") + model_id = int.from_bytes(model_id_bytes, byteorder="little") + mdl = ModelID(model_id, vendor_id) + models.append(mdl) + return models + + def get_dcd_cached( + self, + node: Node, + retry_params: BtmeshRetryParams = None, + ) -> DCD: + if node.dcd is None: + self.get_dcd(node, update_db=True, retry_params=retry_params) + return node.dcd + + def add_appkey( + self, + node: Node, + appkey_index: int, + netkey_index: int, + retry_params: BtmeshRetryParams = None, + ): + self.config_procedure( + "Add Application Key", + self.lib.btmesh.config_client.add_appkey, + node, + appkey_index, + netkey_index, + final_event_name="btmesh_evt_config_client_appkey_status", + retry_params=retry_params, + ) + # If the configuration fails then an exception is raised so it can be + # assumed that the configuration was successful. + node.add_appkey_index(appkey_index) + + def remove_appkey( + self, + node: Node, + appkey_index: int, + netkey_index: int, + retry_params: BtmeshRetryParams = None, + ): + self.config_procedure( + "Remove Application Key", + self.lib.btmesh.config_client.remove_appkey, + node, + appkey_index, + netkey_index, + final_event_name="btmesh_evt_config_client_appkey_status", + retry_params=retry_params, + ) + # If the configuration fails then an exception is raised so it can be + # assumed that the configuration was successful. + if node.has_appkey_index(appkey_index): + # The condition handles the corner case when there is inconsistency + # between the cached appkey data in the database and state of the + # remote node. + node.remove_appkey_index(appkey_index) + + def bind_model( + self, + node: Node, + elem_index: int, + model: ModelID, + appkey_index: int, + retry_params: BtmeshRetryParams = None, + ): + self.config_procedure( + "Bind Model", + self.lib.btmesh.config_client.bind_model, + node, + elem_index, + model.vendor_id, + model.model_id, + appkey_index, + final_event_name="btmesh_evt_config_client_binding_status", + retry_params=retry_params, + ) + + def unbind_model( + self, + node: Node, + elem_index: int, + model: ModelID, + appkey_index: int, + retry_params: BtmeshRetryParams = None, + ): + self.config_procedure( + "Unbind Model", + self.lib.btmesh.config_client.unbind_model, + node, + elem_index, + model.vendor_id, + model.model_id, + appkey_index, + final_event_name="btmesh_evt_config_client_binding_status", + retry_params=retry_params, + ) + + def add_model_sub( + self, + node: Node, + elem_index: int, + model: ModelID, + sub_address: int, + retry_params: BtmeshRetryParams = None, + ): + self.config_procedure( + "Add Model Subscription", + self.lib.btmesh.config_client.add_model_sub, + node, + elem_index, + model.vendor_id, + model.model_id, + sub_address, + final_event_name="btmesh_evt_config_client_model_sub_status", + retry_params=retry_params, + ) + + def remove_model_sub( + self, + node: Node, + elem_index: int, + model: ModelID, + sub_address: int, + retry_params: BtmeshRetryParams = None, + ): + self.config_procedure( + "Remove Model Subscription", + self.lib.btmesh.config_client.remove_model_sub, + node, + elem_index, + model.vendor_id, + model.model_id, + sub_address, + final_event_name="btmesh_evt_config_client_model_sub_status", + retry_params=retry_params, + ) + + def set_model_pub( + self, + node: Node, + elem_index: int, + model: ModelID, + pub_address: int, + appkey_index: int, + credentials: int, + ttl: int, + period_ms: int, + retransmit_count: int, + retransmit_interval_ms: int, + retry_params: BtmeshRetryParams = None, + ): + self.config_procedure( + "Add Model Publication", + self.lib.btmesh.config_client.set_model_pub, + node, + elem_index, + model.vendor_id, + model.model_id, + pub_address, + appkey_index, + credentials, + ttl, + period_ms, + retransmit_count, + retransmit_interval_ms, + final_event_name="btmesh_evt_config_client_model_pub_status", + retry_params=retry_params, + ) + + def reset_node( + self, + node: Node, + local: bool = False, + remove_node_on_retry_limit: bool = False, + retry_params: BtmeshRetryParams = None, + ): + if node.uuid == self.db.prov_uuid: + raise BtmeshError( + err=BtmeshErrorCode.CONFIG_RESET_PROV_FORBIDDEN, + message=f"Node reset is not allowed on the provisioner " + f"(uuid: {node.uuid.hex()}).", + ) + if not local: + try: + self.config_procedure( + "Node Reset", + self.lib.btmesh.config_client.reset_node, + node, + final_event_name="btmesh_evt_config_client_reset_status", + retry_params=retry_params, + ) + except BtmeshError as e: + if not ( + remove_node_on_retry_limit + and (e.err == BtmeshErrorCode.CONFIG_FAILED) + and (e.event.result == SlStatus.TIMEOUT) + ): + raise + try: + self.lib.btmesh.prov.delete_ddb_entry(node.uuid) + evt = self.lib.wait_event( + event_selector="btmesh_evt_prov_delete_ddb_entry_complete", + uuid=node.uuid, + ) + if evt.result != SlStatus.OK: + raise BtmeshError( + err=BtmeshErrorCode.CONFIG_FAILED, + message=f"Failed to delete ddb entry with {node.uuid.hex()} " + f"uuid from device database due to " + f'"{SlStatus.get_name(evt.result)}" error.', + result=evt.result, + ) + except CommandFailedError as e: + if e.errorcode != SlStatus.BT_MESH_DOES_NOT_EXIST: + raise + self.db.remove_node(node) + + def bind_local_mdl( + self, elem_index: int, model: ModelID, appkey_index: int + ) -> None: + self.lib.btmesh.test.bind_local_model_app( + elem_index, appkey_index, model.vendor_id, model.model_id + ) + + def unbind_local_mdl( + self, elem_index: int, model: ModelID, appkey_index: int + ) -> None: + self.lib.btmesh.test.unbind_local_model_app( + elem_index, appkey_index, model.vendor_id, model.model_id + ) + + def list_local_bindings(self, elem_index: int, model: ModelID) -> List[int]: + rsp = self.lib.btmesh.test.get_local_model_app_bindings( + elem_index, model.vendor_id, model.model_id + ) + appkey_indexes = util.bytes_to_int_list(rsp.appkeys, 2, byteorder="little") + return appkey_indexes + + def silabs_conf_clt_init(self): + try: + self.lib.btmesh.silabs_config_client.init() + except CommandError: + self.silabs_conf_clt_fail = True + else: + self.silabs_conf_clt_fail = False + + def silabs_conf_svr_init(self): + try: + self.lib.btmesh.silabs_config_server.init() + except CommandError: + self.silabs_conf_svr_fail = True + else: + self.silabs_conf_svr_fail = False + + def silabs_conf_procedure( + self, + cmd, + nodes: Union[Node, Iterable[Node]], + group_addr: int, + appkey_index: int, + *args, + final_event_name: str, + silabs_conf_status_class: SilabsConfBaseStatus, + retry_params: BtmeshRetryParams = None, + **final_event_params, + ): + if isinstance(nodes, Node): + nodes = [nodes] + if retry_params is None: + retry_params = self.silabs_retry_params_default + # If there is at least one LPN in the nodes then the LPN specific retry + # interval is used instead of the regular one. + if retry_params.retry_interval != retry_params.retry_interval_lpn: + any_lpn = self.any_lpn(nodes, skip_local=True) + retry_params = retry_params.to_base(use_interval_lpn=any_lpn) + else: + retry_params = retry_params.to_base(use_interval_lpn=False) + status_evt_list = [] + if group_addr is util.UNASSIGNED_ADDR: + for node in nodes: + try: + status_evt = self.lib.retry_until( + cmd, + node.prim_addr, + appkey_index, + *args, + **retry_params.to_dict(), + retry_cmd_err_code=[SlStatus.NO_MORE_RESOURCE], + event_selector=final_event_name, + server=node.prim_addr, + **final_event_params, + )[0] + except BGLibExtWaitEventError as e: + continue + status_evt_list.append(status_evt) + else: + util.validate_group_address(group_addr) + event_selector = { + final_event_name: { + "#unique": "server", + "server": EventParamValues(n.prim_addr for n in nodes), + } + } + event_selector[final_event_name].update(final_event_params) + try: + status_evt_list = self.lib.retry_until( + cmd, + group_addr, + appkey_index, + *args, + retry_int_rst_on_evt=True, + **retry_params.to_dict(), + retry_cmd_err_code=[SlStatus.NO_MORE_RESOURCE], + event_selector=event_selector, + final_event_count=len(nodes), + ) + except BGLibExtWaitEventError as e: + status_evt_list = e.events + status_list = [] + for node in nodes: + for evt in status_evt_list: + if node.prim_addr == evt.server: + status = silabs_conf_status_class.from_event(node, evt) + break + else: + status = silabs_conf_status_class.create_status_timeout(node) + status_list.append(status) + return status_list + + def silabs_set_tx( + self, + nodes: Union[Node, Iterable[Node]], + tx_phy: SilabsConfTxPhy, + tx_opt: SilabsConfTxOpt, + group_addr: int = util.UNASSIGNED_ADDR, + appkey_index: int = 0, + retry_params: BtmeshRetryParams = None, + ) -> List[SilabsConfTxStatus]: + return self.silabs_conf_procedure( + self.lib.btmesh.silabs_config_client.set_tx, + nodes, + group_addr, + appkey_index, + tx_phy.value, + tx_opt.value, + final_event_name="btmesh_evt_silabs_config_client_tx_status", + silabs_conf_status_class=SilabsConfTxStatus, + retry_params=retry_params, + ) + + def silabs_set_model_enable( + self, + nodes: Union[Node, Iterable[Node]], + elem_index: int, + model: ModelID, + enable: bool, + group_addr: int = util.UNASSIGNED_ADDR, + appkey_index: int = 0, + retry_params: BtmeshRetryParams = None, + ) -> List[SilabsConfModelStatus]: + return self.silabs_conf_procedure( + self.lib.btmesh.silabs_config_client.set_model_enable, + nodes, + group_addr, + appkey_index, + elem_index, + model.vendor_id, + model.model_id, + enable, + final_event_name="btmesh_evt_silabs_config_client_model_status", + silabs_conf_status_class=SilabsConfModelStatus, + retry_params=retry_params, + elem_index=elem_index, + vendor_id=model.vendor_id, + model_id=model.model_id, + ) + + def silabs_set_network_pdu( + self, + nodes: Union[Node, Iterable[Node]], + pdu_max_size: int, + group_addr: int = util.UNASSIGNED_ADDR, + appkey_index: int = 0, + retry_params: BtmeshRetryParams = None, + ) -> List[SilabsConfNetworkPduStatus]: + return self.silabs_conf_procedure( + self.lib.btmesh.silabs_config_client.set_network_pdu, + nodes, + group_addr, + appkey_index, + pdu_max_size, + final_event_name="btmesh_evt_silabs_config_client_network_pdu_status", + silabs_conf_status_class=SilabsConfNetworkPduStatus, + retry_params=retry_params, + ) + + def get_local_network_pdu_size(self): + if self.silabs_conf_support: + resp = self.lib.btmesh.silabs_config_server.get_network_pdu() + return resp.max_size + else: + return util.STANDARD_NETWORK_PDU_SIZE diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/core.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/core.py new file mode 100644 index 00000000000..40227e018b7 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/core.py @@ -0,0 +1,211 @@ +# 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. + +import dataclasses +import logging +import time +from typing import ClassVar + +from bgapix.bglibx import BGLibExt + +from .conf import Configurator +from .db import BtmeshDatabase +from .dfu import FwUpdateClient +from .dist import FwDistributionClient +from .event import LocalEvent, LocalEventBus +from .mbt import BlobTransferClient +from .prov import Provisioner +from .util import BtmeshRetryParams + +logger = logging.getLogger(__name__) + + +@dataclasses.dataclass +class FactoryResetEvent(LocalEvent): + name: ClassVar[str] = "btmesh_levt_factory_reset" + + +class Btmesh: + def __init__( + self, + lib: BGLibExt = None, + db: BtmeshDatabase = None, + retry_params_default: BtmeshRetryParams = BtmeshRetryParams( + retry_max=5, + retry_interval=1.0, + retry_cmd_max=10, + retry_cmd_interval=0.5, + retry_interval_lpn=30.0, + ), + ): + self._lib = lib + self._db = db + self._retry_params_default = retry_params_default + evtbus = LocalEventBus() + self.evtbus = evtbus + self.components = [] + self.prov = Provisioner(lib, db, evtbus) + self.components.append(self.prov) + self.conf = Configurator( + lib, + db, + evtbus, + conf_retry_params_default=retry_params_default, + silabs_retry_params_default=retry_params_default, + reset_node_retry_params_default=retry_params_default, + ) + self.components.append(self.conf) + self.mbt_clt = BlobTransferClient( + lib, db, evtbus, self.conf, retry_params_default.to_base() + ) + self.components.append(self.mbt_clt) + self.dfu_clt = FwUpdateClient( + lib, db, evtbus, self.conf, self.mbt_clt, retry_params_default + ) + self.components.append(self.dfu_clt) + self.dist_clt = FwDistributionClient( + lib, db, evtbus, self.conf, self.mbt_clt, self.dfu_clt, retry_params_default + ) + self.components.append(self.dist_clt) + self._local_event_handlers = {} + + @property + def lib(self): + return self._lib + + @lib.setter + def lib(self, value): + self._lib = value + for component in self.components: + component.lib = value + + @property + def db(self): + return self._db + + @db.setter + def db(self, value): + self._db = value + for component in self.components: + component.db = value + + @property + def retry_params_default(self): + return self._retry_params_default + + def setup(self, lib: BGLibExt, db: BtmeshDatabase): + self.lib = lib + self.db = db + + def add_event_filter(self, api_name, class_name, event_name): + EVT_FILTER_CMD_ADD_ID = b"\x00" + event_id = self.lib.get_event_id(api_name, class_name, event_name) + event_id_bytes = event_id.to_bytes(4, byteorder="little") + evt_filter_cmd_bytes = EVT_FILTER_CMD_ADD_ID + event_id_bytes + self.lib.bt.user.manage_event_filter(evt_filter_cmd_bytes) + + def remove_event_filter(self, api_name, class_name, event_name): + EVT_FILTER_CMD_REMOVE_ID = b"\x01" + event_id = self.lib.get_event_id(api_name, class_name, event_name) + event_id_bytes = event_id.to_bytes(4, byteorder="little") + evt_filter_cmd_bytes = EVT_FILTER_CMD_REMOVE_ID + event_id_bytes + self.lib.bt.user.manage_event_filter(evt_filter_cmd_bytes) + + def reset_event_filter(self): + EVT_FILTER_CMD_RESET_ID = b"\x02" + self.lib.bt.user.manage_event_filter(EVT_FILTER_CMD_RESET_ID) + + def add_common_event_filters(self): + # Filter frequent but non-relevant events to improve performance and + # improve BG buffer utilization in the BT and BT Mesh stacks + self.add_event_filter("bt", "scanner", "scan_report") + self.add_event_filter("bt", "advertiser", "timeout") + + def subscribe(self, event_name: str, handler): + if not isinstance(event_name, str): + raise TypeError("The event_name shall be str.") + if event_name.startswith("btmesh_levt"): + self.evtbus.subscribe(event_name, handler) + else: + self.lib.subscribe(event_name, handler) + + def unsubscribe(self, event_name, handler): + if not isinstance(event_name, str): + raise TypeError("The event_name shall be str.") + if event_name.startswith("btmesh_levt"): + self.evtbus.unsubscribe(event_name, handler) + else: + self.lib.unsubscribe(event_name, handler) + + def emit_local_event(self, event: LocalEvent): + self.evtbus.emit(event) + + def wait(self, timeout=None, max_events=None, max_time=10): + self.lib.wait(timeout=timeout, max_events=max_events, max_time=max_time) + + def process_node_ddb(self): + self.lib.btmesh.prov.ddb_list() + + def process_system_boot_event(self, boot_event): + # Check Bluetooth stack version + version = "{major}.{minor}.{patch}".format(**vars(boot_event)) + logger.info("Bluetooth stack booted: v%s-b%s", version, boot_event.build) + if version != self.lib.bt.__version__: + logger.warning( + "BGAPI version mismatch: %s (target) != %s (host)", + version, + self.lib.bt.__version__, + ) + + def factory_reset(self, system_reset_delay_s=2.0): + self.lib.btmesh.node.reset() + self.lib.bt.nvm.erase_all() + self.db.clear() + time.sleep(system_reset_delay_s) + self.system_reset() + self.evtbus.emit(FactoryResetEvent()) + + def system_reset(self): + """Issues system reset command and waits for and returns the boot event""" + self.lib.bt.system.reset(0) + self.lib.wait_event("bt_evt_system_boot") + + def open(self): + self.lib.open() + # Reset event filters on the NCP device to avoid errors when the same + # event filter is added multiple times and make sure the filters are + # in a known state + self.reset_event_filter() + # It is important to filter frequent and unnecessary event before the + # NCP device reset to minimize the chance of reset during event transmit + self.add_common_event_filters() + + # The application or upper layer shall call this function when boot event + # occurs in order to process the boot_event. The upper layer needs to handle + # the boot event in order to decide how to stop its current activities when + # unexpected system reset occurs and to initialize properly its internal state. + def on_system_boot(self, boot_event): + self.process_system_boot_event(boot_event) + self.add_common_event_filters() + + def close(self): + self.lib.close() diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/db.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/db.py new file mode 100644 index 00000000000..c6149fb8255 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/db.py @@ -0,0 +1,489 @@ +# 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. + +import dataclasses +import operator +from typing import Callable, ClassVar, Dict, List, Mapping, Optional, Union + +from . import util +from .event import LocalEvent +from .mdl import NamedModelID +from .statedict import StateDictObject + + +class Network(StateDictObject): + def __init__(self, netkey_index, netkey): + self.netkey_index = netkey_index + self.netkey = netkey + self.appkeys = [] + + +class Node(StateDictObject): + @classmethod + def is_name_valid(cls, node_name): + return util.is_name_valid(node_name) + + @classmethod + def is_uuid_valid(cls, uuid): + return util.is_uuid_valid(uuid) + + @classmethod + def is_addr_valid(cls, addr): + return util.is_unicast_address(addr) + + def __init__( + self, + uuid, + devkey, + prim_addr, + elem_count, + name=None, + appkey_indexes=[], + dcd=None, + ): + self.uuid = uuid + self.devkey = StateDictObject.to_bytes(devkey) + self.prim_addr = prim_addr + self.elem_count = elem_count + if name: + self.name = name + else: + self.name = f"Node_{self.prim_addr:04X}" + self._appkey_indexes = [] + for appkey_index in appkey_indexes: + self.add_appkey_index(appkey_index) + if dcd is None: + self.dcd = dcd + elif isinstance(dcd, Mapping): + self.dcd = DCD.create_from_dict(dcd) + elif isinstance(dcd, DCD): + self.dcd = dcd + else: + self.raise_construction_error("dcd", dcd, type_error=True) + + @property + def uuid(self): + return self._uuid + + @uuid.setter + def uuid(self, value): + if not self.is_uuid_valid(value): + self.raise_construction_error("uuid", value) + self._uuid = StateDictObject.to_bytes(value) + + @property + def name(self): + return self._name + + @name.setter + def name(self, value): + if not self.is_name_valid(value): + self.raise_construction_error("name", value) + self._name = value + + @property + def elem_addrs(self): + return [ + addr for addr in range(self.prim_addr, self.prim_addr + self.elem_count) + ] + + def is_elem_addr(self, addr): + return self.prim_addr <= addr < (self.prim_addr + self.elem_count) + + def get_elem_addrs(self, elem_indexes): + if isinstance(elem_indexes, int): + elem_indexes = [elem_indexes] + elem_addrs = [] + for elem_idx in elem_indexes: + if self.elem_count <= elem_idx: + raise ValueError( + f"Node ({self.uuid.hex()}) element index " + f"{elem_idx} does not exits." + ) + elem_addrs.append(self.prim_addr + elem_idx) + return elem_addrs + + def get_elem_index(self, addr): + if not self.is_elem_addr(addr): + raise ValueError( + f"Node ({self.uuid.hex()}) does not have 0x{addr:04X} element address." + ) + return addr - self.prim_addr + + def add_appkey_index(self, appkey_index): + if appkey_index in self._appkey_indexes: + raise ValueError( + f"Node ({self.uuid.hex()}) failed to add {appkey_index} " + f"appkey_index because it already exists." + ) + self._appkey_indexes.append(appkey_index) + + def remove_appkey_index(self, appkey_index): + if appkey_index not in self._appkey_indexes: + raise ValueError( + f"Node ({self.uuid.hex()}) failed to remove {appkey_index} " + f"appkey_index because it does not exists." + ) + self._appkey_indexes.remove(appkey_index) + + def has_appkey_index(self, appkey_index): + return appkey_index in self._appkey_indexes + + @property + def appkey_indexes(self): + return (appkey_index for appkey_index in self._appkey_indexes) + + def __eq__(self, other) -> bool: + if isinstance(other, self.__class__): + return self.uuid == other.uuid + else: + return False + + def __hash__(self) -> int: + return hash(self.uuid) + + +class DCD(StateDictObject): + def __init__(self, cid, pid, vid, crpl, relay, proxy, friend, lpn, elements=[]): + super().__init__() + self.cid = cid + self.pid = pid + self.vid = vid + self.crpl = crpl + self.relay = relay + self.proxy = proxy + self.friend = friend + self.lpn = lpn + self.elements: List[DCDElement] = [] + for elem in elements: + if isinstance(elem, Mapping): + self.elements.append(DCDElement.create_from_dict(elem)) + elif isinstance(elem, DCDElement): + self.elements.append(elem) + else: + self.raise_construction_error("element", elem, type_error=True) + + +class DCDElement(StateDictObject): + def __init__(self, idx, loc, models=[]): + super().__init__() + self.idx = idx + self.loc = loc + self.models: List[ModelID] = [] + for mdl in models: + if isinstance(mdl, Mapping): + self.models.append(ModelID.create_from_dict(mdl)) + elif isinstance(mdl, ModelID): + self.models.append(mdl) + else: + self.raise_construction_error("model", mdl, type_error=True) + + +class ModelID(StateDictObject): + SIG_MODEL_VENDOR_ID = 0xFFFF + MODEL_ID_MIN = 0 + MODEL_ID_MAX = 0xFFFF + VENDOR_ID_MIN = 0 + VENDOR_ID_MAX = 0xFFFF + + def __init__(self, model_id, vendor_id=0xFFFF): + super().__init__() + NamedModelID.validate_value(model_id) + if isinstance(model_id, tuple): + # The validate_value guarantees that the tuple length is two + vendor_id, model_id = model_id + elif isinstance(model_id, NamedModelID): + vendor_id, model_id = model_id.value + if (vendor_id < self.VENDOR_ID_MIN) or (self.VENDOR_ID_MAX < vendor_id): + raise ValueError( + f"Vendor ID {vendor_id} is not in " + f"[{self.VENDOR_ID_MIN},0x{self.VENDOR_ID_MAX:04X}] range." + ) + if (model_id < self.MODEL_ID_MIN) or (self.MODEL_ID_MAX < model_id): + raise ValueError( + f"Model ID {model_id} is not in " + f"[{self.MODEL_ID_MIN},0x{self.MODEL_ID_MAX:04X}] range." + ) + self._vendor_id = vendor_id + self._model_id = model_id + + @property + def vendor_id(self): + return self._vendor_id + + @property + def model_id(self): + return self._model_id + + def pretty_name(self): + if NamedModelID.value_exist(self.to_tuple()): + return NamedModelID.get_pretty_name((self.vendor_id, self.model_id)) + else: + return str(self) + + def to_tuple(self): + return (self.vendor_id, self.model_id) + + def is_sig_model(self) -> bool: + return self.vendor_id == ModelID.SIG_MODEL_VENDOR_ID + + def is_vendor_model(self) -> bool: + return not self.is_sig_model() + + def __eq__(self, other): + if isinstance(other, ModelID): + return (self.vendor_id == other.vendor_id) and ( + self.model_id == other.model_id + ) + return False + + def __hash__(self): + return hash((self.vendor_id, self.model_id)) + + def __str__(self): + return f"0x{self.vendor_id:04X}:0x{self.model_id:04X}" + + +@dataclasses.dataclass +class BtmeshDbClearedEvent(LocalEvent): + name: ClassVar[str] = "btmesh_levt_db_cleared" + + +@dataclasses.dataclass +class BtmeshDbNodeRemoved(LocalEvent): + name: ClassVar[str] = "btmesh_levt_db_node_removed" + node: Node + node_memento: Dict[str, object] = dataclasses.field( + default_factory=dict, + ) + + +class BtmeshDatabase(StateDictObject): + def __init__( + self, + networks=[], + nodes=[], + prov_uuid=None, + emit: Optional[Callable[[LocalEvent], None]] = None, + ): + self.networks = [nw for nw in networks] + self.nodes: List[Node] = [] + self.prov_uuid = prov_uuid + for node in nodes: + if isinstance(node, Mapping): + self.nodes.append(Node.create_from_dict(node)) + elif isinstance(node, Node): + self.nodes.append(node) + else: + self.raise_construction_error("node", node, type_error=True) + if emit is None: + self.emit = self.null_emitter + else: + self.emit = emit + + def null_emitter(self, event: LocalEvent): + pass + + @property + def prov_uuid(self): + return self._prov_uuid + + @prov_uuid.setter + def prov_uuid(self, value): + if value is None: + self._prov_uuid = None + else: + if not util.is_uuid_valid(value): + self.raise_construction_error("prov_uuid", value) + self._prov_uuid = StateDictObject.to_bytes(value) + + def set_event_emitter(self, emit_func: Callable[[LocalEvent], None]): + self.emit = emit_func + + def clear(self): + self.networks.clear() + self.nodes.clear() + db_clr_event = BtmeshDbClearedEvent() + self.emit(db_clr_event) + + def add_node(self, node: Node): + if node.uuid not in (n.uuid for n in self.nodes): + self.nodes.append(node) + + def node_uuid_exists(self, uuid): + node = next((n for n in self.nodes if n.uuid == uuid), None) + return node is not None + + def get_node_by_uuid(self, uuid): + node = next((n for n in self.nodes if n.uuid == uuid), None) + if not node: + raise ValueError(f'Node uuid "{uuid.hex()}" does not exist.') + return node + + def node_name_exist(self, name): + node = next((n for n in self.nodes if n.name == name), None) + return node is not None + + def get_node_by_name(self, name): + node = next((n for n in self.nodes if n.name == name), None) + if not node: + raise ValueError(f'Node name "{name}" does not exist.') + return node + + def node_prim_addr_exist(self, prim_addr): + node = next((n for n in self.nodes if n.prim_addr == prim_addr), None) + return node is not None + + def get_node_by_prim_addr(self, prim_addr): + node = next((n for n in self.nodes if n.prim_addr == prim_addr), None) + if not node: + raise ValueError(f"Node primary address 0x{prim_addr:04X} does not exist.") + return node + + def node_elem_addr_exist(self, elem_addr): + node = next((n for n in self.nodes if n.is_elem_addr(elem_addr)), None) + return node is not None + + def get_node_by_elem_addr(self, elem_addr): + node = next((n for n in self.nodes if n.is_elem_addr(elem_addr)), None) + if not node: + raise ValueError(f"Node element address 0x{elem_addr:04X} does not exist.") + return node + + def rename_node(self, node: Node, new_name: str): + if self.node_name_exist(new_name): + raise ValueError( + f'Node rename failed because "{new_name}" name already exists.' + ) + node.name = new_name + + def remove_node( + self, node: Node, node_memento: Optional[Dict[str, object]] = None + ) -> Node: + self.nodes.remove(node) + self.emit(BtmeshDbNodeRemoved(node, node_memento)) + return node + + def remove_node_by_name( + self, name: str, node_memento: Optional[Dict[str, object]] = None + ) -> Node: + node = self.get_node_by_name(name) + return self.remove_node(node, node_memento) + + def remove_node_by_uuid( + self, uuid: bytes, node_memento: Optional[Dict[str, object]] = None + ) -> Node: + node = self.get_node_by_uuid(uuid) + return self.remove_node(node, node_memento) + + def remove_node_by_prim_addr( + self, prim_addr: int, node_memento: Optional[Dict[str, object]] = None + ) -> Node: + node = self.get_node_by_prim_addr(prim_addr) + return self.remove_node(node, node_memento) + + def remove_node_by_elem_addr( + self, elem_addr: int, node_memento: Optional[Dict[str, object]] = None + ) -> Node: + node = self.get_node_by_elem_addr(elem_addr) + return self.remove_node(node, node_memento) + + def get_node_list(self, nodefilter=None, order_property=None, reverse=False): + identity = lambda n: n + nodefilter = nodefilter if nodefilter else identity + node_gen = (n for n in self.nodes if nodefilter(n)) + if order_property: + key = operator.attrgetter(order_property) + return sorted(node_gen, key=key, reverse=reverse) + else: + return list(node_gen) + + def get_elem_addr_list( + self, + elem_addr_filter=None, + nodefilter=None, + node_order_property=None, + reverse=False, + ): + elem_addrs = [] + identity = lambda n: n + elem_addr_filter = elem_addr_filter if elem_addr_filter else identity + nodes = self.get_node_list( + nodefilter=nodefilter, order_property=node_order_property + ) + for node in nodes: + elem_addrs.extend( + addr for addr in node.elem_addrs if elem_addr_filter(addr) + ) + if reverse: + elem_addrs.reverse() + return elem_addrs + + +class FWID(StateDictObject): + @classmethod + def from_bytes(cls, raw_fwid): + util.validate_raw_fwid(raw_fwid) + cid = int.from_bytes(raw_fwid[0 : util.COMPANY_ID_SIZE], byteorder="little") + version_info = raw_fwid[util.COMPANY_ID_SIZE :] + return cls(cid, version_info) + + def __init__(self, company_id: int, version_info: Union[bytes, str]): + self.company_id = company_id + self.version_info = version_info + + @property + def company_id(self) -> int: + return self._company_id + + @company_id.setter + def company_id(self, value: int) -> None: + util.validate_company_id(value) + self._company_id = value + + @property + def version_info(self) -> bytes: + return self._version_info + + @version_info.setter + def version_info(self, value) -> None: + self._version_info = StateDictObject.to_bytes(value) + + def to_bytes(self) -> bytes: + return self.company_id.to_bytes(2, byteorder="little") + self.version_info + + def to_str(self, hex_format=True): + cid_str = f"0x{self.company_id:04X}" + if hex_format: + version_info_str = self.version_info.hex() + else: + version_info_str = self.version_info.decode("utf-8") + return f"{cid_str}:{version_info_str}" + + def __hash__(self) -> int: + return hash(self.to_bytes()) + + def __str__(self): + return self.to_str() + + def __repr__(self): + return f"FWID(0x{self.company_id:04X},{repr(self.version_info)})" diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/dfu.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/dfu.py new file mode 100644 index 00000000000..0fa8ff55ce9 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/dfu.py @@ -0,0 +1,944 @@ +# 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. + + +import copy +import dataclasses +import enum +import logging +import os +from typing import (Callable, ClassVar, Dict, Iterable, List, Optional, Tuple, + Union) + +from bgapi.bglib import BGEvent, CommandFailedError + +from bgapix.bglibx import (BGLibExt, BGLibExtRetryParams, + BGLibExtWaitEventError, EventParamValues) +from bgapix.slstatus import SlStatus + +from . import util +from .conf import Configurator +from .db import FWID, BtmeshDatabase +from .errors import BtmeshError, BtmeshErrorCode +from .event import LocalEvent, LocalEventBus +from .mbt import (Blob, BlobTransferClient, BlobTransferMode, MBTProgressEvent, + MBTStatus) +from .util import BtmeshRetryParams + +logger = logging.getLogger(__name__) + + +@enum.unique +class FwReceiverPhase(util.BtmeshIntEnum): + IDLE = 0x00 + TRANSFER_ERROR = 0x01 + TRANSFER_IN_PROGRESS = 0x02 + VERIFYING_UPDATE = 0x03 + VERIFICATION_SUCCESS = 0x04 + VERIFICATION_FAILED = 0x05 + APPLY_IN_PROGRESS = 0x06 + TRANSFER_CANCELLED = 0x07 + APPLY_SUCCESS = 0x08 + APPLY_FAILED = 0x09 + UNKNOWN = 0x0A + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@enum.unique +class FwUpdatePhase(util.BtmeshIntEnum): + IDLE = 0x00 + TRANSFER_ERROR = 0x01 + TRANSFER_IN_PROGRESS = 0x02 + VERIFYING_UPDATE = 0x03 + VERIFICATION_SUCCESS = 0x04 + VERIFICATION_FAILED = 0x05 + APPLY_IN_PROGRESS = 0x06 + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@enum.unique +class FwUpdateStatus(util.BtmeshIntEnum): + SUCCESS = 0x00 + OUT_OF_RESOURCES = 0x01 + WRONG_PHASE = 0x02 + INTERNAL_ERROR = 0x03 + WRONG_FW_INDEX = 0x04 + METADATA_CHECK_FAILED = 0x05 + TEMPORARILY_UNABLE = 0x06 + BLOB_TRANSFER_BUSY = 0x07 + TIMEOUT = 0xFF + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@enum.unique +class FwUpdateStep(util.BtmeshIntEnum): + IDLE = 0x00 + STARTING_UPDATE = 0x01 + TRANSFERRING_IMAGE = 0x02 + CHECKING_VERIFICATION = 0x03 + WAITING_FOR_APPLY = 0x04 + APPLYING_UPDATE = 0x05 + CHECKING_UPDATE_RESULT = 0x06 + COMPLETED = 0x07 + FAILED = 0x08 + CANCELLING = 0x09 + SUSPENDED = 0x0A + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + def is_active(self): + return self not in ( + FwUpdateStep.IDLE, + FwUpdateStep.COMPLETED, + FwUpdateStep.FAILED, + ) + + +@enum.unique +class FwUpdateAdditionalInfo(util.BtmeshIntEnum): + CD_UNCHANGED = 0 + CD_UNCHANGED_RPR_UNSUPPORTED = 1 + CD_UNCHANGED_RPR_SUPPORTED = 2 + DEVICE_UNPROVISIONED = 3 + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@dataclasses.dataclass +class FwReceiver: + server_addr: int + fw_index: int + + def __post_init__(self): + util.validate_unicast_address(self.server_addr, "Invalid receiver address.") + util.validate_fw_index(self.fw_index) + + +@dataclasses.dataclass +class FwReceiverInfo: + index: int + receiver_count: int + server_addr: int + fw_index: int + phase: FwReceiverPhase + dfu_status: FwUpdateStatus + mbt_status: MBTStatus + progress: int + + +@dataclasses.dataclass +class FwUpdateBaseStatus: + server_addr: int + status: FwUpdateStatus + + @classmethod + def from_event(cls, events: Iterable[BGEvent]): + raise NotImplementedError(f"The {cls.__name__} can't be instantiated.") + + @classmethod + def create_status_timeout(cls, addr: int): + raise NotImplementedError(f"The {cls.__name__} can't be instantiated.") + + +@dataclasses.dataclass +class FwUpdateInfoStatus(FwUpdateBaseStatus): + fw_index: Optional[int] + fw_count: Optional[int] + fwid: Optional[FWID] + uri: Optional[str] + + @classmethod + def raise_construction_error(cls): + raise ValueError( + f"The {cls.__name__} can be constructed only from " + f"one btmesh_evt_fw_update_client_info_status_current_fwid and " + f"one btmesh_evt_fw_update_client_info_status_update_uri event." + ) + + @classmethod + def from_event(cls, events: Iterable[BGEvent]): + events = list(events) + if len(events) != 2: + cls.raise_construction_error() + if events[0] == "btmesh_evt_fw_update_client_info_status_current_fwid": + info_status_fwid_evt = events[0] + elif events[1] == "btmesh_evt_fw_update_client_info_status_current_fwid": + info_status_fwid_evt = events[1] + else: + cls.raise_construction_error() + if events[0] == "btmesh_evt_fw_update_client_info_status_update_uri": + info_status_uri_evt = events[0] + elif events[1] == "btmesh_evt_fw_update_client_info_status_update_uri": + info_status_uri_evt = events[1] + else: + cls.raise_construction_error() + try: + uri = info_status_uri_evt.update_uri.decode("utf-8") + except UnicodeDecodeError: + logger.error( + f"Failed to decode FW information list update URI " + f"({hex(info_status_uri_evt.update_uri)}) at " + f"{info_status_uri_evt.index} index." + ) + uri = "" + return FwUpdateInfoStatus( + status=FwUpdateStatus.SUCCESS, + server_addr=info_status_fwid_evt.server_address, + fw_index=info_status_fwid_evt.index, + fw_count=info_status_fwid_evt.count, + fwid=FWID.from_bytes(info_status_fwid_evt.current_fwid), + uri=uri, + ) + + @classmethod + def create_status_timeout(cls, addr: int): + return FwUpdateInfoStatus( + status=FwUpdateStatus.TIMEOUT, + server_addr=addr, + fw_index=None, + fw_count=None, + fwid=None, + uri=None, + ) + + +@dataclasses.dataclass +class FwUpdateMetadataStatus(FwUpdateBaseStatus): + additional_info: Optional[FwUpdateAdditionalInfo] + fw_index: Optional[int] + + @classmethod + def from_event(cls, events: Iterable[BGEvent]): + event = events[0] + return FwUpdateMetadataStatus( + server_addr=event.server_address, + status=FwUpdateStatus.from_int(event.status), + additional_info=FwUpdateAdditionalInfo.from_int( + event.additional_information + ), + fw_index=event.fw_index, + ) + + @classmethod + def create_status_timeout(cls, addr: int): + return FwUpdateMetadataStatus( + server_addr=addr, + status=FwUpdateStatus.TIMEOUT, + additional_info=None, + fw_index=None, + ) + + +@dataclasses.dataclass +class FwUpdateProgressEvent(LocalEvent): + name: ClassVar[str] = "btmesh_levt_dfu_fw_update_progress" + elem_index: int + dfu_state: FwUpdateStep + receivers_info: Iterable[FwReceiverInfo] + + +class FwUpdateClient: + RETRY_CMD_ERR_CODES = (SlStatus.NO_MORE_RESOURCE,) + UNUSED_VIRTUAL_ADDR = b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + DFU_STATE_CHANGED_EVENT = "btmesh_evt_fw_standalone_updater_dist_state_changed" + + @staticmethod + def calc_retry_max(retry_interval: float, timeout_base: int, ttl: int) -> float: + timeout = util.dfu_calc_client_timeout(timeout_base, ttl) + # Multiplication by 1.2 is used to be on the safe side + return round((1.2 * timeout) / retry_interval) + + @staticmethod + def calc_retry_cmd_max( + retry_cmd_interval: float, timeout_base: int, ttl: int + ) -> float: + timeout = util.dfu_calc_client_timeout(timeout_base, ttl) + # Multiplication by 1.2 is used to be on the safe side + return round((1.2 * timeout) / retry_cmd_interval) + + def __init__( + self, + lib: BGLibExt, + db: BtmeshDatabase, + evtbus: LocalEventBus, + conf: Configurator, + mbt_clt: BlobTransferClient, + retry_params_default: BtmeshRetryParams, + ): + self.lib = lib + self.db = db + self.evtbus = evtbus + self.conf = conf + self.mbt_clt = mbt_clt + self.retry_params_default = retry_params_default + + def init( + self, + elem_index: int = 0, + max_updating_nodes: int = 8, + retry_params_default: BtmeshRetryParams = None, + ): + self.lib.btmesh.fw_update_client.init(elem_index) + self.lib.btmesh.fw_standalone_updater.init(elem_index, max_updating_nodes) + self.set_retry_params_default(retry_params_default) + + def set_retry_params_default(self, retry_params: BtmeshRetryParams): + if retry_params: + self.retry_params_default = copy.copy(retry_params) + + def dfu_procedure( + self, + cmd, + elem_index: int, + server_addrs: Union[int, Iterable[int]], + group_addr: int, + virtual_addr: bytes, + appkey_index: int, + ttl: int, + *args, + final_event_names: Union[str, Iterable[str]], + fw_update_status_class: FwUpdateBaseStatus, + retry_params: BtmeshRetryParams = None, + **final_event_params, + ): + if not util.is_iterable(server_addrs): + server_addrs = [server_addrs] + if isinstance(final_event_names, str): + final_event_names = [final_event_names] + util.validate_ttl(ttl) + for addr in server_addrs: + util.validate_unicast_address(addr, "Invalid server address.") + if group_addr != util.UNASSIGNED_ADDR: + util.validate_multicast_address(group_addr) + if virtual_addr: + util.validate_virtual_label_uuid(virtual_addr) + else: + virtual_addr = self.UNUSED_VIRTUAL_ADDR + if retry_params is None: + retry_params = self.retry_params_default + # If there is at least one LPN in the nodes then the LPN specific retry + # interval is used instead of the regular one. + if retry_params.retry_interval != retry_params.retry_interval_lpn: + any_lpn = self.conf.any_lpn_in_elem_addrs(server_addrs, skip_local=True) + retry_params = retry_params.to_base(use_interval_lpn=any_lpn) + else: + retry_params = retry_params.to_base(use_interval_lpn=False) + status_evt_list = [] + if group_addr is util.UNASSIGNED_ADDR: + for addr in server_addrs: + try: + status_evts = self.lib.retry_until( + cmd, + elem_index, + addr, + virtual_addr, + appkey_index, + ttl, + *args, + **retry_params.to_dict(), + retry_cmd_err_code=[SlStatus.NO_MORE_RESOURCE], + event_selector=final_event_names, + final_event_count=len(final_event_names), + server_address=addr, + **final_event_params, + ) + except BGLibExtWaitEventError as e: + continue + status_evt_list.extend(status_evts) + else: + util.validate_group_address(group_addr) + event_selector: Dict[str, Dict[str, object]] = {} + for evt_name in final_event_names: + event_selector[evt_name] = { + "#unique": "server_address", + "server_address": EventParamValues(addr for addr in server_addrs), + } + event_selector[evt_name].update(final_event_params) + try: + status_evt_list = self.lib.retry_until( + cmd, + elem_index, + group_addr, + virtual_addr, + appkey_index, + ttl, + *args, + retry_int_rst_on_evt=True, + **retry_params.to_dict(), + retry_cmd_err_code=[SlStatus.NO_MORE_RESOURCE], + event_selector=event_selector, + final_event_count=len(server_addrs) * len(final_event_names), + ) + except BGLibExtWaitEventError as e: + status_evt_list = e.events + status_list = [] + for addr in server_addrs: + evts = [evt for evt in status_evt_list if addr == evt.server_address] + if evts: + status = fw_update_status_class.from_event(evts) + else: + status = fw_update_status_class.create_status_timeout(addr) + status_list.append(status) + return status_list + + def get_info( + self, + elem_index: int, + server_addrs: Union[int, Iterable[int]], + first_index: int, + max_entries: int, + group_addr: int = util.UNASSIGNED_ADDR, + virtual_addr: bytes = bytes(), + appkey_index: int = 0, + ttl: int = 5, + retry_params: BtmeshRetryParams = None, + ) -> List[FwUpdateInfoStatus]: + return self.dfu_procedure( + self.lib.btmesh.fw_update_client.get_info, + elem_index, + server_addrs, + group_addr, + virtual_addr, + appkey_index, + ttl, + first_index, + max_entries, + final_event_names=( + "btmesh_evt_fw_update_client_info_status_current_fwid", + "btmesh_evt_fw_update_client_info_status_update_uri", + ), + fw_update_status_class=FwUpdateInfoStatus, + retry_params=retry_params, + ) + + def check_metadata( + self, + elem_index: int, + server_addrs: Union[int, Iterable[int]], + fw_index: int, + metadata: bytes, + group_addr: int = util.UNASSIGNED_ADDR, + virtual_addr: bytes = bytes(), + appkey_index: int = 0, + ttl: int = 5, + retry_params: BtmeshRetryParams = None, + ) -> List[FwUpdateMetadataStatus]: + return self.dfu_procedure( + self.lib.btmesh.fw_update_client.check_metadata, + elem_index, + server_addrs, + group_addr, + virtual_addr, + appkey_index, + ttl, + fw_index, + metadata, + final_event_names="btmesh_evt_fw_update_client_metadata_status", + fw_update_status_class=FwUpdateMetadataStatus, + retry_params=retry_params, + ) + + def check_receivers_metadata( + self, + elem_index: int, + receivers: Iterable[FwReceiver], + metadata: bytes = b"", + group_addr: int = util.UNASSIGNED_ADDR, + virtual_addr: bytes = bytes(), + appkey_index: int = 0, + ttl: int = 5, + retry_params: Optional[BtmeshRetryParams] = None, + ) -> Dict[int, FwUpdateMetadataStatus]: + util.validate_ttl(ttl) + if retry_params is None: + retry_params = self.retry_params_default + fw_idx_set = set((receiver.fw_index for receiver in receivers)) + if len(fw_idx_set) == 1: + metadata_statuses = self.check_metadata( + elem_index=elem_index, + server_addrs=[receiver.server_addr for receiver in receivers], + fw_index=fw_idx_set.pop(), + metadata=metadata, + group_addr=group_addr, + virtual_addr=virtual_addr, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params, + ) + else: + metadata_statuses = [] + for receiver in receivers: + metadata_status = self.check_metadata( + elem_index=elem_index, + server_addrs=receiver.server_addr, + fw_index=receiver.fw_index, + metadata=metadata, + group_addr=util.UNASSIGNED_ADDR, + virtual_addr=virtual_addr, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params, + ) + metadata_statuses.append(metadata_status) + metadata_status_dict = {mds.server_addr: mds for mds in metadata_statuses} + return metadata_status_dict + + def _add_receivers(self, elem_index: int, receivers: Iterable[FwReceiver]) -> None: + for idx, receiver in enumerate(receivers): + try: + self.lib.btmesh.fw_standalone_updater.add_receiver( + elem_index, receiver.server_addr, receiver.fw_index + ) + except CommandFailedError as e: + if e.errorcode == SlStatus.BT_MESH_LIMIT_REACHED: + raise BtmeshError( + BtmeshErrorCode.DFU_CLT_ADD_RECEIVER_FAILED, + f"Failed to add receiver (addr=0x{receiver.server_addr:04X}, " + f"fw_index={receiver.fw_index}) to FW receiver list because " + f"the FW receiver list is full. (max {idx} receivers)", + ) from e + elif e.errorcode == SlStatus.BT_MESH_ALREADY_EXISTS: + continue + else: + raise + + def _delete_all_receivers(self, elem_index: int) -> None: + self.lib.btmesh.fw_standalone_updater.delete_all_receivers(elem_index) + + def _get_fw_standalone_updater_state(self, elem_index: int) -> FwUpdateStep: + resp = self.lib.btmesh.fw_standalone_updater.get_state(elem_index) + return FwUpdateStep.from_int(resp.state) + + def _wait_dfu_state_changed(self, timeout_base: int) -> FwUpdateStep: + max_time = util.dfu_calc_client_timeout(timeout_base, 0) + state_changed_event = self.lib.wait_event( + event_selector=self.DFU_STATE_CHANGED_EVENT, + max_time=max_time, + ) + state = FwUpdateStatus.from_int(state_changed_event) + return state + + def _execute_distribution_step( + self, elem_index: int, retry_params: BGLibExtRetryParams + ) -> None: + # Process all events from the event queue to make sure no spurious + # btmesh_evt_fw_standalone_updater_dist_state_changed events are present + # in the event queue from previous FW Standalone Update API calls. + self.lib.wait(0) + try: + self.lib.retry_until( + self.lib.btmesh.fw_standalone_updater.execute_distribution_step, + elem_index, + **retry_params.to_dict(), + event_selector=self.DFU_STATE_CHANGED_EVENT, + ) + except CommandFailedError as e: + # The BT Mesh stack events generated on the NCP node are delayed by + # the NCP communication and host side processing (e.g. OS) so there + # is a time interval when the FW Standalone Updater state machine in + # the BT Mesh stack changed state but the DFU client host code + # (this script) is not aware of that. + # If the host tries to call the state specific command again to send + # BT Mesh Firmware Update messages to the Firmware Update Servers + # (retry) then the stack rejects it with INVALID_STATE error because + # it has already changed state. + if e.errorcode == SlStatus.INVALID_STATE: + # Process the events in order to avoid leaving the state + # changed event in the event queue which could interfere + # with the execution of next distribution steps. + self.lib.get_events( + timeout=None, + max_events=None, + max_time=retry_params.retry_interval, + final_event_count=1, + event_selector=self.DFU_STATE_CHANGED_EVENT, + ) + # The BT Mesh stack processes timeout in the execute_distribution_step + # calls which means if this function is not called then FW Standalone + # Updater state machine is stuck. It is essential to continue the + # processing until the BT Mesh stack FW Standalone Updater state + # machine reaches a non-active state for example due to timeout. + + def _transfer_blob( + self, + elem_index: int, + blob: Blob, + chunk_size_pref: int, + retry_params: BGLibExtRetryParams, + on_bg_event: Optional[Callable] = None, + ): + self.evtbus.subscribe( + event_name="btmesh_levt_mbt_transfer_progress", + handler=self.handle_mbt_transfer_progress, + ) + try: + self.mbt_clt.transfer_blob( + blob=blob, + elem_index=elem_index, + supported_transfer_modes=BlobTransferMode.BOTH, + chunk_size_pref=chunk_size_pref, + retry_interval=retry_params.retry_interval, + retry_cmd_interval=retry_params.retry_cmd_interval, + on_mbt_bg_event=on_bg_event, + ) + except BtmeshError as e: + if e.err != BtmeshErrorCode.MBT_TRANSFER_FAILED: + raise + finally: + self.evtbus.unsubscribe( + event_name="btmesh_levt_mbt_transfer_progress", + handler=self.handle_mbt_transfer_progress, + ) + + def _start_fw_update( + self, + elem_index: int, + group_addr: int, + receivers: Iterable[FwReceiver], + fwid: FWID, + metadata: bytes, + blob: Blob, + timeout_base: int, + transfer_mode: BlobTransferMode = BlobTransferMode.PUSH, + virtual_addr: bytes = bytes(), + multicast_threshold: int = 2, + appkey_index: int = 0, + ttl: int = 5, + ) -> None: + self.lib.btmesh.fw_standalone_updater.setup( + elem_index, len(blob.data), blob.id, fwid.to_bytes() + ) + self.lib.btmesh.fw_standalone_updater.set_metadata(elem_index, metadata) + self.lib.btmesh.fw_standalone_updater.set_multicast_threshold( + elem_index, multicast_threshold + ) + self._delete_all_receivers(elem_index) + self._add_receivers(elem_index, receivers) + self.lib.btmesh.fw_standalone_updater.start( + elem_index, + appkey_index, + ttl, + timeout_base, + transfer_mode, + group_addr, + virtual_addr, + ) + + def _run_fw_update( + self, + elem_index: int, + receivers: Iterable[FwReceiver], + failed_receivers_info: Iterable[FwReceiverInfo], + blob: Blob, + chunk_size_pref: int, + timeout_base: int, + ttl: int, + retry_params: BtmeshRetryParams, + on_bg_event: Optional[Callable] = None, + ) -> Tuple[FwUpdateStep, List[FwReceiverInfo]]: + # If there is at least one LPN in the nodes then the LPN specific retry + # interval is used instead of the regular one. + if retry_params.retry_interval != retry_params.retry_interval_lpn: + server_addrs = [receiver.server_addr for receiver in receivers] + any_lpn = self.conf.any_lpn_in_elem_addrs(server_addrs, skip_local=True) + retry_params_base = retry_params.to_base(use_interval_lpn=any_lpn) + else: + retry_params_base = retry_params.to_base(use_interval_lpn=False) + retry_params_base.retry_cmd_max = self.calc_retry_cmd_max( + retry_cmd_interval=retry_params_base.retry_cmd_interval, + timeout_base=timeout_base, + ttl=ttl, + ) + retry_params_base.retry_max = self.calc_retry_max( + retry_interval=retry_params_base.retry_interval, + timeout_base=timeout_base, + ttl=ttl, + ) + state = self._get_fw_standalone_updater_state(elem_index) + while state.is_active(): + try: + if state == FwUpdateStep.TRANSFERRING_IMAGE: + self._transfer_blob( + elem_index=elem_index, + blob=blob, + chunk_size_pref=chunk_size_pref, + retry_params=retry_params_base, + on_bg_event=on_bg_event, + ) + self._wait_dfu_state_changed(timeout_base) + elif state == FwUpdateStep.WAITING_FOR_APPLY: + self.lib.btmesh.fw_standalone_updater.apply(elem_index) + self._wait_dfu_state_changed(timeout_base) + else: + self._execute_distribution_step( + elem_index=elem_index, retry_params=retry_params_base + ) + state = self._get_fw_standalone_updater_state(elem_index) + except (CommandFailedError, BGLibExtWaitEventError, BtmeshError): + # The FW Update is terminated abruptly and unexpectedly so the + # FW Update shall be terminated in the BT Mesh stack as well in + # order to terminate the FW Standalone Updater state machine. + # This is essential because the FW Standalone Update state + # machine of the BT Mesh stack detects timeout during the + # execute_distribution_step calls in certain state so this API + # needs to be called for timeout that is why there is an explicit + # cancellation here. + self.cancel_fw_update( + elem_index=elem_index, + timeout_base=timeout_base, + ttl=ttl, + retry_params=retry_params, + ) + raise + receiver_count = len(receivers) + len(failed_receivers_info) + receivers_info = self.get_receivers(elem_index) + for rec_info in receivers_info: + rec_info.receiver_count = receiver_count + receivers_info.extend(failed_receivers_info) + state = self._get_fw_standalone_updater_state(elem_index) + return state, receivers_info + + def fw_update( + self, + elem_index: int, + group_addr: int, + receivers: Iterable[FwReceiver], + fwid: FWID, + metadata: bytes, + fw_data: bytes, + timeout_base: int, + transfer_mode: BlobTransferMode = BlobTransferMode.PUSH, + chunk_size_pref: int = 53, + virtual_addr: bytes = bytes(), + multicast_threshold: int = 2, + appkey_index: int = 0, + ttl: int = 5, + retry_params: Optional[BtmeshRetryParams] = None, + on_bg_event: Optional[Callable] = None, + ) -> Tuple[FwUpdateStep, List[FwReceiverInfo]]: + if not util.is_iterable(receivers): + receivers: Iterable[FwReceiver] = [receivers] + util.validate_ttl(ttl) + util.validate_appkey_index(appkey_index) + if virtual_addr: + util.validate_virtual_label_uuid(virtual_addr) + if group_addr != util.UNASSIGNED_ADDR: + util.validate_multicast_address(group_addr) + if retry_params is None: + retry_params = self.retry_params_default + blob_id = os.urandom(Blob.BLOB_ID_LEN) + blob = Blob(blob_id, fw_data) + metadata_status_dict = self.check_receivers_metadata( + elem_index=elem_index, + receivers=receivers, + group_addr=group_addr, + virtual_addr=virtual_addr, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params, + ) + active_receivers: List[FwReceiver] = [] + failed_receivers: List[FwReceiver] = [] + failed_receivers_info = [] + for receiver in receivers: + addr = receiver.server_addr + mds = metadata_status_dict[addr] + if mds.status == FwUpdateStatus.SUCCESS: + active_receivers.append(receiver) + else: + failed_receivers.append(receiver) + index = len(active_receivers) + receiver_count = len(receivers) + for failed_receiver in failed_receivers: + addr = failed_receiver.server_addr + mds = metadata_status_dict[addr] + receiver_info = FwReceiverInfo( + index=index, + receiver_count=receiver_count, + server_addr=failed_receiver.server_addr, + fw_index=failed_receiver.fw_index, + phase=FwReceiverPhase.UNKNOWN, + dfu_status=mds.status, + mbt_status=MBTStatus.UNKNOWN, + progress=0, + ) + index += 1 + failed_receivers_info.append(receiver_info) + if len(active_receivers) == 0: + # All receivers failed during the metadata check + state = FwUpdateStep.FAILED + receivers_info = failed_receivers_info + return state, receivers_info + self.lib.subscribe( + self.DFU_STATE_CHANGED_EVENT, + self.on_fw_update_state_changed + ) + try: + self._start_fw_update( + elem_index=elem_index, + group_addr=group_addr, + receivers=active_receivers, + fwid=fwid, + metadata=metadata, + blob=blob, + timeout_base=timeout_base, + transfer_mode=transfer_mode, + virtual_addr=virtual_addr, + multicast_threshold=multicast_threshold, + appkey_index=appkey_index, + ttl=ttl, + ) + state, receivers_info = self._run_fw_update( + elem_index=elem_index, + receivers=active_receivers, + failed_receivers_info=failed_receivers_info, + blob=blob, + chunk_size_pref=chunk_size_pref, + timeout_base=timeout_base, + ttl=ttl, + retry_params=retry_params, + on_bg_event=on_bg_event, + ) + finally: + self.lib.unsubscribe( + self.DFU_STATE_CHANGED_EVENT, + self.on_fw_update_state_changed + ) + + for rec_info in receivers_info: + addr = rec_info.server_addr + additional_info = metadata_status_dict[addr].additional_info + if ( + rec_info.phase == FwReceiverPhase.APPLY_SUCCESS + and additional_info == FwUpdateAdditionalInfo.DEVICE_UNPROVISIONED + ): + node = self.db.get_node_by_elem_addr(addr) + self.conf.reset_node(node=node, local=True) + return state, receivers_info + + def on_fw_update_state_changed(self, event: BGEvent): + state = self._get_fw_standalone_updater_state(event.elem_index) + receivers_info = self.get_receivers(event.elem_index) + levt = FwUpdateProgressEvent( + elem_index=event.elem_index, + dfu_state=state, + receivers_info=receivers_info, + ) + self.evtbus.emit(levt) + + def handle_mbt_transfer_progress(self, event: MBTProgressEvent): + state = self._get_fw_standalone_updater_state(event.elem_index) + receivers_info = self.get_receivers(event.elem_index) + levt = FwUpdateProgressEvent( + elem_index=event.elem_index, + dfu_state=state, + receivers_info=receivers_info, + ) + self.evtbus.emit(levt) + + def get_receivers(self, elem_index: int) -> List[FwReceiverInfo]: + resp = self.lib.btmesh.fw_standalone_updater.get_state(elem_index) + receiver_count = resp.total_nodes + receiver_info_list = [] + for receiver_index in range(receiver_count): + resp = self.lib.btmesh.fw_standalone_updater.get_node_status_by_index( + elem_index, receiver_index + ) + receiver_info = FwReceiverInfo( + index=receiver_index, + receiver_count=receiver_count, + server_addr=resp.address, + fw_index=resp.fw_index, + phase=FwReceiverPhase.from_int(resp.retrieved_phase), + dfu_status=FwUpdateStatus.from_int(resp.update_server_status), + mbt_status=MBTStatus.from_int(resp.mbt_server_status), + progress=resp.transfer_progress, + ) + receiver_info_list.append(receiver_info) + return receiver_info_list + + def cancel_fw_update( + self, + elem_index: int, + timeout_base: int = 28, + ttl: int = 5, + retry_params: Optional[BtmeshRetryParams] = None, + ): + state = self._get_fw_standalone_updater_state(elem_index) + if state == FwUpdateStep.IDLE: + # The FW Update has already been cancelled + return + if state != FwUpdateStep.CANCELLING: + # If the FW Standalone Update is already in cancelling state then + # the cancel API shall not be called and the distribution step + # shall be executed. + # It could happen if the last cancel operation was aborted unexpectedly + # on the host side. + try: + self.lib.btmesh.fw_standalone_updater.cancel(elem_index) + state = self._wait_dfu_state_changed(timeout_base) + except CommandFailedError as e: + status = SlStatus.from_int(e.errorcode) + raise BtmeshError( + err=BtmeshErrorCode.DFU_CLT_CANCEL_DIST_FAILED, + message=( + f'Failed to cancel FW update due to "{status.name}" error.', + ), + errorcode=status, + ) + if state == FwUpdateStep.IDLE: + # If the state was COMPLETED or FAILED before the cancel call then + # the FW Standalone Updater state machine moves into IDLE immediately. + # Consequently, no distribution step shall be executed. + return + # The FW Standalone Updater state machine must be in CANCELLING state + # and therefore the receiver list is not empty in the BT Mesh stack. + receivers_info_list = self.get_receivers(elem_index) + if retry_params is None: + retry_params = self.retry_params_default + if retry_params.retry_interval != retry_params.retry_interval_lpn: + server_addrs = [ + receiver_info.server_addr for receiver_info in receivers_info_list + ] + any_lpn = self.conf.any_lpn_in_elem_addrs(server_addrs, skip_local=True) + retry_params_base = retry_params.to_base(use_interval_lpn=any_lpn) + else: + retry_params_base = retry_params.to_base(use_interval_lpn=False) + retry_params_base.retry_cmd_max = self.calc_retry_cmd_max( + retry_cmd_interval=retry_params_base.retry_cmd_interval, + timeout_base=timeout_base, + ttl=ttl, + ) + retry_params_base.retry_max = self.calc_retry_max( + retry_interval=retry_params_base.retry_interval, + timeout_base=timeout_base, + ttl=ttl, + ) + self._execute_distribution_step( + elem_index=elem_index, retry_params=retry_params_base + ) + state = self._get_fw_standalone_updater_state(elem_index) + if state != FwUpdateStep.IDLE: + status = SlStatus.FAIL + raise BtmeshError( + err=BtmeshErrorCode.DFU_CLT_CANCEL_DIST_FAILED, + message=(f'Failed to cancel FW update due to "{status.name}" error.',), + errorcode=SlStatus.FAIL, + ) diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/dist.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/dist.py new file mode 100644 index 00000000000..e479e606ff5 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/dist.py @@ -0,0 +1,1219 @@ +# 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. + +import copy +import dataclasses +import enum +import logging +import os +import struct +from typing import Callable, ClassVar, Iterable, List, Optional, Tuple + +from bgapix.bglibx import BGLibExt, BGLibExtRetryParams +from bgapix.slstatus import SlStatus + +from . import util +from .conf import Configurator +from .db import BtmeshDatabase, ModelID +from .dfu import (FWID, FwReceiver, FwReceiverInfo, FwReceiverPhase, + FwUpdateAdditionalInfo, FwUpdateClient, FwUpdateStatus) +from .errors import BtmeshError, BtmeshErrorCode +from .event import LocalEvent, LocalEventBus +from .mbt import (Blob, BlobTransferClient, BlobTransferMode, MBTProgressEvent, + MBTStatus) +from .mdl import NamedModelID +from .util import BtmeshRetryParams + +logger = logging.getLogger(__name__) + + +@enum.unique +class FwDistStatus(util.BtmeshIntEnum): + SUCCESS = 0x00 + OUT_OF_RESOURCES = 0x01 + WRONG_PHASE = 0x02 + INTERNAL_ERROR = 0x03 + FWID_NOT_FOUND = 0x04 + INVALID_APPKEY_INDEX = 0x05 + RECEIVERS_LIST_EMPTY = 0x06 + BUSY_WITH_DISTRIBUTION = 0x07 + BUSY_WITH_UPLOAD = 0x08 + URI_NOT_SUPPORTED = 0x09 + URI_MALFORMED = 0x0A + URI_UNREACHABLE = 0x0B + NEW_FW_NOT_AVAILABLE = 0x0C + SUSPEND_FAILED = 0x0D + TIMEOUT = 0xFF + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@enum.unique +class FwDistUploadPhase(util.BtmeshIntEnum): + IDLE = 0x00 + TRANSFER_ACTIVE = 0x01 + TRANSFER_ERROR = 0x02 + TRANSFER_SUCCESS = 0x03 + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@enum.unique +class FwDistUploadType(util.BtmeshIntEnum): + IN_BAND = 0x00 + OUT_OF_BAND = 0x01 + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@enum.unique +class FwDistOOB(util.BtmeshIntEnum): + NOT_SUPPORTED = 0 + SUPPORTED = 1 + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@enum.unique +class FwUpdatePolicy(util.BtmeshIntEnum): + VERIFY_ONLY = 0 + VERIFY_AND_APPLY = 1 + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@enum.unique +class FwDistPhase(util.BtmeshIntEnum): + IDLE = 0 + TRANSFER_ACTIVE = 1 + TRANSFER_SUCCESS = 2 + APPLYING_UPDATE = 3 + COMPLETED = 4 + FAILED = 5 + CANCELING_UPDATE = 6 + TRANSFER_SUSPENDED = 7 + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@dataclasses.dataclass +class FwDistFwStatus: + FW_IMG_DOES_NOT_EXIST: ClassVar[int] = 0xFFFF + status: FwDistStatus + num_entries: int + index: int + fwid: Optional[FWID] + + +@dataclasses.dataclass +class FwDistCapabilities: + max_nodes_list_size: int + max_fw_list_size: int + max_fw_size: int + max_upload_space: int + remaining_upload_space: int + oob_supported: FwDistOOB + uri_scheme_names: bytes + + +@dataclasses.dataclass +class FwDistDistributionStatus: + status: FwDistStatus + phase: FwDistPhase + group_addr: int + appkey_index: int + ttl: int + timeout_base: int + transfer_mode: BlobTransferMode + update_policy: FwUpdatePolicy + fw_list_index: int + + +@dataclasses.dataclass +class FwDistUploadProgressEvent(LocalEvent): + name: ClassVar[str] = "btmesh_levt_dist_upload_progress" + elem_index: int + done_bytes: int + fw_size: int + + +@dataclasses.dataclass +class FwDistDistributionProgressEvent(LocalEvent): + name: ClassVar[str] = "btmesh_levt_dist_distribution_progress" + elem_index: int + dist_status: FwDistDistributionStatus + receivers_info: Iterable[FwReceiverInfo] + + +class FwDistributionClient: + # The invalid state error code means unrecoverable error most of the time. + # There is an important exception for segmented transfer. + # The transport layer rejects to send two segmented message to the same + # destination address simultaneously in accordance with the specification + # and it returns invalid state error code in this specific case. + RETRY_CMD_ERR_CODES = (SlStatus.NO_MORE_RESOURCE, SlStatus.INVALID_STATE) + UNUSED_VIRTUAL_ADDRESS = b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + + @staticmethod + def calc_retry_max(retry_interval: float, timeout_base: int, ttl: int) -> float: + timeout = util.dfu_calc_client_timeout(timeout_base, ttl) + # Multiplication by 1.2 is used to be on the safe side + return round((1.2 * timeout) / retry_interval) + + @staticmethod + def calc_retry_cmd_max( + retry_cmd_interval: float, timeout_base: int, ttl: int + ) -> float: + timeout = util.dfu_calc_client_timeout(timeout_base, ttl) + # Multiplication by 1.2 is used to be on the safe side + return round((1.2 * timeout) / retry_cmd_interval) + + def __init__( + self, + lib: BGLibExt, + db: BtmeshDatabase, + evtbus: LocalEventBus, + conf: Configurator, + mbt_clt: BlobTransferClient, + dfu_clt: FwUpdateClient, + retry_params_default: BtmeshRetryParams, + ): + self.lib = lib + self.db = db + self.evtbus = evtbus + self.conf = conf + self.mbt_clt = mbt_clt + self.dfu_clt = dfu_clt + self.retry_params_default = retry_params_default + + def init(self, elem_index: int, retry_params_default: BtmeshRetryParams = None): + self.lib.btmesh.fw_dist_client.init(elem_index) + self.set_retry_params_default(retry_params_default) + + def set_retry_params_default(self, retry_params: BtmeshRetryParams): + if retry_params: + self.retry_params_default = copy.copy(retry_params) + + def validate_dist_addr(self, dist_addr: int) -> None: + if not self.db.node_elem_addr_exist(dist_addr): + raise BtmeshError( + err=BtmeshErrorCode.DIST_SVR_ADDR_DOES_NOT_EXIST, + message=f"Distributor with 0x{dist_addr:04X} does not exist.", + dist_addr=dist_addr, + ) + node = self.db.get_node_by_elem_addr(dist_addr) + elem_index = node.get_elem_index(dist_addr) + if node.dcd is not None: + dist_mdl_id = NamedModelID.FIRMWARE_DISTRIBUTION_SERVER + dist_mdl = ModelID(dist_mdl_id) + if dist_mdl not in node.dcd.elements[elem_index].models: + raise BtmeshError( + err=BtmeshErrorCode.DIST_SVR_MDL_DOES_NOT_EXIST, + message=( + f"The {dist_mdl_id.pretty_name} (0x{dist_mdl_id.value:04X}) " + f"model does not exist on 0x{dist_addr:04X} element." + ), + dist_addr=dist_addr, + ) + + def get_capabilities( + self, + elem_index: int, + dist_addr: int, + appkey_index: int = 0, + ttl: int = 5, + retry_params: Optional[BGLibExtRetryParams] = None, + ) -> FwDistCapabilities: + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + # Query the FW Distribution server capabilities + capabilities_evts = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.get_capabilities, + elem_index, + dist_addr, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_capabilities_status", + elem_index=elem_index, + server_address=dist_addr, + ) + capabilities_evt = capabilities_evts[0] + # Create capabilities object + capabilities = FwDistCapabilities( + capabilities_evt.max_nodes_list_size, + capabilities_evt.max_fw_list_size, + capabilities_evt.max_fw_size, + capabilities_evt.max_upload_space, + capabilities_evt.remaining_upload_space, + FwDistOOB.from_int(capabilities_evt.oob_supported), + capabilities_evt.uri_scheme_names, + ) + return capabilities + + def get_fw( + self, + elem_index: int, + dist_addr: int, + fwid: FWID, + appkey_index: int = 0, + ttl: int = 5, + err_on_fw_miss: bool = True, + retry_params: Optional[BGLibExtRetryParams] = None, + ) -> FwDistFwStatus: + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + fw_status_evts = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.get_fw, + elem_index, + dist_addr, + fwid.to_bytes(), + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_fw_status", + elem_index=elem_index, + server_address=dist_addr, + ) + fw_status_evt = fw_status_evts[0] + # Create FW status object + fw_status = FwDistFwStatus( + FwDistStatus.from_int(fw_status_evt.status), + fw_status_evt.num_entries, + fw_status_evt.index, + FWID.from_bytes(fw_status_evt.fwid) if fw_status_evt.fwid else None, + ) + if fw_status.status != FwDistStatus.SUCCESS and ( + err_on_fw_miss or fw_status.status != FwDistStatus.FWID_NOT_FOUND + ): + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_GET_FW_FAILED, + message=f"Failed to query FW image from Distributor " + f"(0x{dist_addr:04X}) by fwid due to " + f'"{fw_status.status.pretty_name}" error.', + dist_addr=dist_addr, + fw_status=fw_status, + ) + return fw_status + + def get_fw_by_index( + self, + elem_index: int, + dist_addr: int, + index: int, + appkey_index: int = 0, + ttl: int = 5, + err_on_fw_miss: bool = True, + retry_params: Optional[BGLibExtRetryParams] = None, + ) -> FwDistFwStatus: + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + fw_status_evts = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.get_fw_by_index, + elem_index, + dist_addr, + index, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_fw_status", + elem_index=elem_index, + server_address=dist_addr, + ) + fw_status_evt = fw_status_evts[0] + # Create FW status object + fw_status = FwDistFwStatus( + FwDistStatus.from_int(fw_status_evt.status), + fw_status_evt.num_entries, + fw_status_evt.index, + FWID.from_bytes(fw_status_evt.fwid) if fw_status_evt.fwid else None, + ) + if fw_status.status != FwDistStatus.SUCCESS and ( + err_on_fw_miss or fw_status.status != FwDistStatus.FWID_NOT_FOUND + ): + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_GET_FW_BY_IDX_FAILED, + message=f"Failed to query FW image from Distributor " + f"(0x{dist_addr:04X}) by index ({index}) due to " + f'"{fw_status.status.pretty_name}" error.', + dist_addr=dist_addr, + fw_status=fw_status, + ) + return fw_status + + def upload( + self, + elem_index: int, + dist_addr: int, + fwid: FWID, + metadata: bytes, + fw_data: bytes, + timeout_base: int = 2, + chunk_size_pref: int = 53, + appkey_index: int = 0, + ttl: int = 5, + retry_interval: Optional[float] = None, + retry_cmd_interval: Optional[float] = None, + on_bg_event: Optional[Callable] = None, + ) -> None: + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + if retry_cmd_interval is None: + retry_cmd_interval = self.retry_params_default.retry_cmd_interval + if retry_interval is None: + retry_interval = self.retry_params_default.retry_interval + retry_params = BGLibExtRetryParams( + retry_max=self.calc_retry_max(retry_interval, timeout_base, ttl), + retry_interval=retry_interval, + retry_cmd_max=self.calc_retry_cmd_max( + retry_cmd_interval, timeout_base, ttl + ), + retry_cmd_interval=retry_cmd_interval, + ) + blob_id = os.urandom(Blob.BLOB_ID_LEN) + blob = Blob(blob_id, fw_data) + + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + self.lib.btmesh.fw_dist_client.setup_upload( + elem_index, + dist_addr, + ttl, + timeout_base, + blob.id, + len(blob.data), + fwid.to_bytes(), + ) + self.lib.btmesh.fw_dist_client.set_upload_metadata(elem_index, metadata) + # The btmesh_evt_fw_dist_client_upload_status is not filtered for FWID + # because the Firmware Distribution Upload Status does not contain FWID + # field when there is no space to upload the firmware to the Distributor + # because the Distribution Server remains in Idle Upload Phase. + # (e.g. FW size is greater than remaining upload space) + upload_status_evt = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.start_upload, + elem_index, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_upload_status", + elem_index=elem_index, + server_address=dist_addr, + )[0] + # There are three possibilities here: + # - If the firmware with specified FWID is already uploaded to the + # Distributor because the FWID is present in the FW Image List + # then the BT Mesh stack generates an additional + # btmesh_evt_fw_dist_client_upload_complete event. + # - If the FW upload start is rejected by the Distributor then the + # BT Mesh stack generates a btmesh_evt_fw_dist_client_upload_failed + # event. This can happen when the Distributor is busy with another + # (non-idempotent) firmware upload or there isn't enough space + # on the Distributor to upload the new firmware. + # See Max Firmware Images List Size, Max Firmware Image Size and + # Max Upload Space capabilities which results in these errors. + # - If the FW upload is started then no additional dist client events + # are expected and the MBT transfer can be started. + upload_phase = FwDistUploadPhase.from_int(upload_status_evt.phase) + final_events = list( + self.lib.gen_events( + timeout=0.5, + event_selector=[ + "btmesh_evt_fw_dist_client_upload_failed", + "btmesh_evt_fw_dist_client_upload_complete", + ], + ) + ) + if len(final_events) != 0: + upload_evt = final_events[0] + # The upload_evt.status_code contains the BLOB Transfer status code + # but the BLOB transfer is not started yet + if upload_evt == "btmesh_evt_fw_dist_client_upload_failed": + dist_status = FwDistStatus.from_int(upload_evt.dist_status_code) + mbt_status = MBTStatus.from_int(upload_evt.status_code) + if dist_status != FwDistStatus.SUCCESS: + reason_str = dist_status.pretty_name + else: + reason_str = mbt_status.pretty_name + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_UPLOAD_START_FAILED, + message=f"Failed to start FW upload to Distributor " + f'(0x{dist_addr:04X}) due to "{reason_str}" ' + f"upload status error.", + dist_addr=dist_addr, + dist_status=dist_status, + fwid=fwid, + ) + elif upload_evt == "btmesh_evt_fw_dist_client_upload_complete": + if upload_phase == FwDistUploadPhase.TRANSFER_SUCCESS: + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_UPLOAD_FWID_EXISTS, + message=f"Firmware is already uploaded to Distributor " + f"(0x{dist_addr:04X}).", + dist_addr=dist_addr, + fwid=fwid, + ) + self.evtbus.subscribe( + event_name="btmesh_levt_mbt_transfer_progress", + handler=self.handle_mbt_transfer_progress, + ) + try: + self.mbt_clt.transfer_blob( + blob=blob, + elem_index=elem_index, + supported_transfer_modes=BlobTransferMode.BOTH, + chunk_size_pref=chunk_size_pref, + retry_interval=retry_interval, + retry_cmd_interval=retry_cmd_interval, + on_mbt_bg_event=on_bg_event, + ) + except BtmeshError as e: + if e.err != BtmeshErrorCode.MBT_TRANSFER_FAILED: + raise + finally: + self.evtbus.unsubscribe( + event_name="btmesh_levt_mbt_transfer_progress", + handler=self.handle_mbt_transfer_progress, + ) + upload_evt = self.lib.wait_event( + event_selector=[ + "btmesh_evt_fw_dist_client_upload_complete", + "btmesh_evt_fw_dist_client_upload_failed", + ], + elem_index=elem_index, + server_address=dist_addr, + fwid=fwid.to_bytes(), + ) + if upload_evt == "btmesh_evt_fw_dist_client_upload_failed": + mbt_status = MBTStatus.from_int(upload_evt.status_code) + dist_status = FwDistStatus.from_int(upload_evt.dist_status_code) + # The BT Mesh stack informs the upper layers about BLOB transfer + # timeout in the dist_status_code variable but other BLOB transfer + # errors are stored in status_code. + if dist_status != FwDistStatus.SUCCESS: + reason_str = dist_status.pretty_name + else: + reason_str = mbt_status.pretty_name + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_UPLOAD_FAILED, + message=f"Failed to upload firmware to Distributor " + f'(0x{dist_addr:04X}) due to "{reason_str}" BLOB transfer error.', + dist_addr=dist_addr, + mbt_status=mbt_status, + dist_status=dist_status, + ) + elif upload_evt == "btmesh_evt_fw_dist_client_upload_complete": + upload_status_evt = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.get_upload, + elem_index, + dist_addr, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_upload_status", + elem_index=elem_index, + server_address=dist_addr, + )[0] + upload_phase = FwDistUploadPhase.from_int(upload_status_evt.phase) + if upload_phase == FwDistUploadPhase.TRANSFER_ERROR: + # This can happen in a corner case due to flash erase when the + # Distributor fails with timeout and the Initiator continues. + # This is possible because the timeout is calculated differently + # on client and server sides. + # Client timeout: (10000 * (timeout_base + 2)) + (100 * ttl) ms. + # Server timeout: (10000 * (timeout_base + 1)) ms. + # There is ~10s range when the server is already in timeout but + # the client is still active. The MBT Server goes into suspended + # state on timeout but Distribution Server upload state machine + # goes into failed state. + # The upload flash erase occurs during transfer start phase + # which may cause enough delay to result in timeout. + # Note: There is no flash erase during upload normally only when + # the storage slot is not empty. (previous upload was cancelled) + # Erase might take 5-25s based on the flash type and size. + # Note: external SPI flash tends to be slower. + # If the Distributor Client and MBT Client remain active then + # the MBT Client sends the BLOB Transfer Start messages (retry) + # which is able to restart the MBT Server (it was suspended only) + # but the MBT Server is not able to start the Upload in the + # Distribution Server inside the BT Mesh stack. + # The problem can be mitigated by increasing the timeout_base to + # guarantee that the server timeout is greater than the worst + # case flash erase duration. + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_UPLOAD_FAILED, + message=f"Failed to upload firmware to Distributor " + f"(0x{dist_addr:04X}) due to timeout. " + "The timeout base might be too low.", + dist_addr=dist_addr, + mbt_status=MBTStatus.SUCCESS, + dist_status=FwDistStatus.TIMEOUT, + ) + + def handle_mbt_transfer_progress(self, event: MBTProgressEvent): + levt = FwDistUploadProgressEvent( + elem_index=event.elem_index, + done_bytes=event.done_bytes, + fw_size=event.blob_size, + ) + self.evtbus.emit(levt) + + def cancel_upload( + self, + elem_index: int, + dist_addr: int, + appkey_index: int = 0, + ttl: int = 5, + retry_params: Optional[BGLibExtRetryParams] = None, + ) -> None: + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + upload_status_evt = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.cancel_upload, + elem_index, + dist_addr, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_upload_status", + elem_index=elem_index, + server_address=dist_addr, + )[0] + dist_status = FwDistStatus.from_int(upload_status_evt.status) + if dist_status != FwDistStatus.SUCCESS: + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_UPLOAD_CANCEL_FAILED, + message=f"Failed to cancel FW upload to Distributor " + f'(0x{dist_addr:04X}) due to "{dist_status.pretty_name}" error.', + dist_addr=dist_addr, + status=dist_status, + ) + + def _delete_fw_reset_dist_phase( + self, + elem_index: int, + dist_addr: int, + appkey_index: int = 0, + ttl: int = 5, + retry_params: Optional[BGLibExtRetryParams] = None, + ) -> None: + # The specification allows FW delete in Idle distribution phase only but + # the distribution phase is set to Completed or Failed after a firmware + # distribution. The distribution phase is set to Idle from Completed or + # Failed state by cancel or delete receivers operations. + # Delete receivers is preferred here because it fails when the firmware + # distribution is still active so the accidental cancellation can be + # avoided this way. + try: + self.delete_receivers( + elem_index=elem_index, + dist_addr=dist_addr, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params, + ) + except BtmeshError as e: + # If delete all receivers procedure fails then it means that the + # distribution is active. The error is caught here and the final + # error is raised by the delete FW procedure. + if e.err != BtmeshErrorCode.DIST_CLT_DELETE_RECEIVERS_FAILED: + raise + + def delete_fw( + self, + elem_index: int, + dist_addr: int, + fwid: FWID, + appkey_index: int = 0, + ttl: int = 5, + retry_params: Optional[BGLibExtRetryParams] = None, + ) -> FwDistFwStatus: + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + self._delete_fw_reset_dist_phase( + elem_index=elem_index, + dist_addr=dist_addr, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params, + ) + fw_status_evts = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.delete_fw, + elem_index, + dist_addr, + fwid.to_bytes(), + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_fw_status", + elem_index=elem_index, + server_address=dist_addr, + ) + fw_status_evt = fw_status_evts[0] + # Create FW status object + fw_status = FwDistFwStatus( + FwDistStatus.from_int(fw_status_evt.status), + fw_status_evt.num_entries, + fw_status_evt.index, + FWID.from_bytes(fw_status_evt.fwid) if fw_status_evt.fwid else None, + ) + if fw_status.status != FwDistStatus.SUCCESS: + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_DELETE_FW_FAILED, + message=f"Failed to delete FW image from Distributor " + f'(0x{dist_addr:04X}) due to "{fw_status.status.pretty_name}" ' + f" error.", + dist_addr=dist_addr, + fw_status=fw_status, + ) + return fw_status + + def delete_all_fw( + self, + elem_index: int, + dist_addr: int, + appkey_index: int = 0, + ttl: int = 5, + retry_params: Optional[BGLibExtRetryParams] = None, + ) -> FwDistFwStatus: + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + self._delete_fw_reset_dist_phase( + elem_index=elem_index, + dist_addr=dist_addr, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params, + ) + fw_status_evts = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.delete_all_fw, + elem_index, + dist_addr, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_fw_status", + elem_index=elem_index, + server_address=dist_addr, + ) + fw_status_evt = fw_status_evts[0] + # Create FW status object + fw_status = FwDistFwStatus( + FwDistStatus.from_int(fw_status_evt.status), + fw_status_evt.num_entries, + fw_status_evt.index, + FWID.from_bytes(fw_status_evt.fwid) if fw_status_evt.fwid else None, + ) + if fw_status.status != FwDistStatus.SUCCESS: + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_DELETE_ALL_FW_FAILED, + message=f"Failed to delete all FW images from Distributor " + f'(0x{dist_addr:04X}) due to "{fw_status.status.pretty_name}" ' + f"error.", + dist_addr=dist_addr, + fw_status=fw_status, + ) + return fw_status + + def delete_receivers( + self, + elem_index: int, + dist_addr: int, + appkey_index: int = 0, + ttl: int = 5, + retry_params: Optional[BGLibExtRetryParams] = None, + ) -> None: + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + receiver_status_evts = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.delete_all_receivers, + elem_index, + dist_addr, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_receivers_status", + elem_index=elem_index, + server_address=dist_addr, + ) + receiver_status_evt = receiver_status_evts[0] + status = FwDistStatus.from_int(receiver_status_evt.status) + if status != FwDistStatus.SUCCESS: + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_DELETE_RECEIVERS_FAILED, + message=f"Failed to delete receivers from Distributor " + f'(0x{dist_addr:04X}) due to "{status.pretty_name}" error.', + dist_addr=dist_addr, + status=status, + ) + + def add_receivers( + self, + elem_index: int, + dist_addr: int, + receivers: Iterable[FwReceiver], + appkey_index: int = 0, + receivers_per_msg: int = 3, + ttl: int = 5, + retry_params: Optional[BGLibExtRetryParams] = None, + ) -> None: + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + for receiver in receivers: + util.validate_unicast_address( + receiver.server_addr, "Invalid receiver address." + ) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + n = receivers_per_msg + receiver_chunks: Iterable[Iterable[FwReceiver]] = ( + receivers[i : i + n] for i in range(0, len(receivers), n) + ) + for receiver_chunk in receiver_chunks: + receiver_bytes_list = [] + for receiver in receiver_chunk: + receiver_bytes_list.append( + struct.pack(" List[FwReceiverInfo]: + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + start_idx = start_index + end_idx = start_idx + max_entries + chunk_size = receivers_per_msg + receiver_chunks = [] + for idx in range(start_idx, end_idx, chunk_size): + if idx + chunk_size < end_idx: + receiver_chunks.append((idx, chunk_size)) + else: + receiver_chunks.append((idx, end_idx - idx)) + event_selector = { + "btmesh_evt_fw_dist_client_receivers_list": { + "#final": False, + "elem_index": elem_index, + "server_address": dist_addr, + }, + "btmesh_evt_fw_dist_client_receivers_list_end": { + "#final": True, + "elem_index": elem_index, + "server_address": dist_addr, + }, + } + receiver_info_list = [] + for start_idx, max_entries in receiver_chunks: + receiver_list_evts = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.get_receivers, + elem_index, + dist_addr, + start_idx, + max_entries, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector=event_selector, + ) + for receiver_evt in receiver_list_evts: + if receiver_evt == "btmesh_evt_fw_dist_client_receivers_list": + receiver_info = FwReceiverInfo( + index=receiver_evt.index, + receiver_count=receiver_evt.nodes_list_size, + server_addr=receiver_evt.address, + fw_index=receiver_evt.fw_index, + phase=FwReceiverPhase.from_int(receiver_evt.phase), + dfu_status=FwUpdateStatus.from_int(receiver_evt.update_status), + mbt_status=MBTStatus.from_int(receiver_evt.transfer_status), + progress=receiver_evt.progress, + ) + receiver_info_list.append(receiver_info) + return receiver_info_list + + def get_dist_status( + self, + elem_index: int, + dist_addr: int, + appkey_index: int = 0, + ttl: int = 5, + retry_params: Optional[BGLibExtRetryParams] = None, + ) -> FwDistDistributionStatus: + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + dist_status_evt = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.get, + elem_index, + dist_addr, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_distribution_status", + elem_index=elem_index, + server_address=dist_addr, + )[0] + dist_status = FwDistDistributionStatus( + status=FwDistStatus.from_int(dist_status_evt.status), + phase=FwDistPhase.from_int(dist_status_evt.phase), + group_addr=dist_status_evt.group_address, + appkey_index=dist_status_evt.appkey_index, + ttl=dist_status_evt.distributor_ttl, + timeout_base=dist_status_evt.timeout_base, + transfer_mode=BlobTransferMode.from_int(dist_status_evt.transfer_mode), + update_policy=FwUpdatePolicy.from_int(dist_status_evt.apply_immediately), + fw_list_index=dist_status_evt.fw_list_index, + ) + status = dist_status.status + if status != FwDistStatus.SUCCESS: + # The get distribution status operation should not fail. + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_GET_DIST_FAILED, + message=f"Failed to get distribution status from Distributor " + f'(0x{dist_addr:04X}) due to "{status.pretty_name} error.', + dist_addr=dist_addr, + status=status, + ) + return dist_status + + def start_distribution( + self, + elem_index: int, + dist_addr: int, + group_addr: int, + fw_list_index: int, + dist_timeout_base: int, + dist_appkey_index: int, + dist_ttl: int, + transfer_mode: BlobTransferMode = BlobTransferMode.PUSH, + appkey_index: int = 0, + ttl: int = 5, + retry_params: Optional[BGLibExtRetryParams] = None, + ): + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + if (transfer_mode == BlobTransferMode.PULL) and ( + group_addr != util.UNASSIGNED_ADDR + ): + logger.warning( + "Pull BLOB transfer mode is not recommended with group address " + "during distribution because messages sent to group address " + "are stored in the friend queues of friend nodes of each " + "receiver low power updating node. " + "This is problematic during chunk transfer because the updating " + "nodes might request different chunks in BLOB Partial Block " + "Report messages and the chunks of one Low Power Node might push " + "out the chunks of the other node from the friend queues because " + "friend queues keep the most recent message when they are full. " + "The firmware update is possible in pull transfer mode with group " + "address despite of the issues above but it is not optimal and " + "it can be much slower." + ) + dist_status_evt = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.start_distribution, + elem_index, + dist_addr, + dist_appkey_index, + dist_ttl, + dist_timeout_base, + transfer_mode.value, + FwUpdatePolicy.VERIFY_AND_APPLY.value, + fw_list_index, + group_addr, + self.UNUSED_VIRTUAL_ADDRESS, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_distribution_status", + elem_index=elem_index, + server_address=dist_addr, + )[0] + status = FwDistStatus.from_int(dist_status_evt.status) + if status != FwDistStatus.SUCCESS: + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_START_DIST_FAILED, + message=f"Failed to start distribution on Distributor " + f'(0x{dist_addr:04X}) due to "{status.pretty_name}" error.', + dist_addr=dist_addr, + status=status, + ) + + def poll_distribution( + self, + elem_index: int, + dist_addr: int, + receivers: Iterable[FwReceiver], + failed_receivers_info: Iterable[FwReceiverInfo], + appkey_index: int = 0, + ttl: int = 5, + dist_poll_int: float = 5, + retry_params: Optional[BGLibExtRetryParams] = None, + ) -> Tuple[FwDistDistributionStatus, List[FwReceiverInfo]]: + while True: + self.lib.wait(max_time=dist_poll_int) + dist_status = self.get_dist_status( + elem_index=elem_index, + dist_addr=dist_addr, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params, + ) + receivers_info = self.get_receivers( + elem_index=elem_index, + dist_addr=dist_addr, + start_index=0, + max_entries=len(receivers), + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params, + ) + receiver_count = len(receivers) + len(failed_receivers_info) + for rec_info in receivers_info: + rec_info.receiver_count = receiver_count + receivers_info.extend(failed_receivers_info) + levt = FwDistDistributionProgressEvent( + elem_index=elem_index, + dist_status=dist_status, + receivers_info=receivers_info, + ) + self.evtbus.emit(levt) + if dist_status.phase in ( + FwDistPhase.IDLE, + FwDistPhase.COMPLETED, + FwDistPhase.FAILED, + ): + break + return dist_status, receivers_info + + def distribution( + self, + elem_index: int, + dist_addr: int, + group_addr: int, + receivers: Iterable[FwReceiver], + fw_list_index: int, + dist_timeout_base: int, + dist_appkey_index: int, + dist_ttl: int, + metadata: bytes = b"", + transfer_mode: BlobTransferMode = BlobTransferMode.PUSH, + appkey_index: int = 0, + ttl: int = 5, + dist_poll_int: float = 5, + retry_params: Optional[BtmeshRetryParams] = None, + ) -> Tuple[FwDistDistributionStatus, Iterable[FwReceiverInfo]]: + for receiver in receivers: + util.validate_unicast_address( + receiver.server_addr, "Invalid receiver address." + ) + if retry_params is None: + retry_params = self.retry_params_default + metadata_status_dict = self.dfu_clt.check_receivers_metadata( + elem_index=elem_index, + receivers=receivers, + metadata=metadata, + group_addr=group_addr, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params, + ) + active_receivers: List[FwReceiver] = [] + failed_receivers: List[FwReceiver] = [] + failed_receivers_info = [] + for receiver in receivers: + addr = receiver.server_addr + mds = metadata_status_dict[addr] + if mds.status == FwUpdateStatus.SUCCESS: + active_receivers.append(receiver) + else: + failed_receivers.append(receiver) + index = len(active_receivers) + receiver_count = len(receivers) + for failed_receiver in failed_receivers: + addr = failed_receiver.server_addr + mds = metadata_status_dict[addr] + receiver_info = FwReceiverInfo( + index=index, + receiver_count=receiver_count, + server_addr=failed_receiver.server_addr, + fw_index=failed_receiver.fw_index, + phase=FwReceiverPhase.UNKNOWN, + dfu_status=mds.status, + mbt_status=MBTStatus.UNKNOWN, + progress=0, + ) + index += 1 + failed_receivers_info.append(receiver_info) + if len(active_receivers) == 0: + # All receivers failed during the metadata check + dist_status = FwDistDistributionStatus( + status=FwDistStatus.SUCCESS, + phase=FwDistPhase.FAILED, + group_addr=group_addr, + appkey_index=dist_appkey_index, + ttl=dist_ttl, + timeout_base=dist_timeout_base, + transfer_mode=transfer_mode, + update_policy=FwUpdatePolicy.VERIFY_AND_APPLY, + fw_list_index=fw_list_index, + ) + receivers_info = failed_receivers_info + return dist_status, receivers_info + self.delete_receivers( + elem_index=elem_index, + dist_addr=dist_addr, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params.to_base(), + ) + self.add_receivers( + elem_index=elem_index, + dist_addr=dist_addr, + receivers=active_receivers, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params.to_base(), + ) + self.start_distribution( + elem_index=elem_index, + dist_addr=dist_addr, + group_addr=group_addr, + fw_list_index=fw_list_index, + dist_timeout_base=dist_timeout_base, + dist_appkey_index=dist_appkey_index, + dist_ttl=dist_ttl, + transfer_mode=transfer_mode, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params.to_base(), + ) + dist_status, receivers_info = self.poll_distribution( + elem_index=elem_index, + dist_addr=dist_addr, + receivers=active_receivers, + failed_receivers_info=failed_receivers_info, + appkey_index=appkey_index, + ttl=ttl, + dist_poll_int=dist_poll_int, + retry_params=retry_params.to_base(), + ) + for rec_info in receivers_info: + addr = rec_info.server_addr + additional_info = metadata_status_dict[addr].additional_info + if ( + rec_info.phase == FwReceiverPhase.APPLY_SUCCESS + and additional_info == FwUpdateAdditionalInfo.DEVICE_UNPROVISIONED + ): + node = self.db.get_node_by_elem_addr(addr) + self.conf.reset_node(node=node, local=True) + return dist_status, receivers_info + + def cancel_distribution( + self, + elem_index: int, + dist_addr: int, + appkey_index: int = 0, + ttl: int = 5, + dist_poll_int: float = 5, + retry_params: Optional[BGLibExtRetryParams] = None, + ): + self.validate_dist_addr(dist_addr) + util.validate_ttl(ttl) + self.lib.btmesh.fw_dist_client.setup(elem_index, appkey_index, ttl) + if retry_params is None: + retry_params = self.retry_params_default.to_base() + # Cancel the FW Distribution + dist_status_evt = self.lib.retry_until( + self.lib.btmesh.fw_dist_client.cancel_distribution, + elem_index, + dist_addr, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector="btmesh_evt_fw_dist_client_distribution_status", + elem_index=elem_index, + server_address=dist_addr, + )[0] + status = FwDistStatus.from_int(dist_status_evt.status) + phase = FwDistPhase.from_int(dist_status_evt.phase) + if status != FwDistStatus.SUCCESS: + raise BtmeshError( + err=BtmeshErrorCode.DIST_CLT_CANCEL_DIST_FAILED, + message=f"Failed to cancel FW Distribution on Distributor " + f'(0x{dist_addr:04X}) due to "{status.pretty_name}" error.', + dist_addr=dist_addr, + status=status, + ) + if phase == FwDistPhase.CANCELING_UPDATE: + # The FW update shall cancelled on each updating node which takes + # some time so wait until the Distributor leaves the canceling + # update phase. + while True: + self.lib.wait(max_time=dist_poll_int) + dist_status = self.get_dist_status( + elem_index=elem_index, + dist_addr=dist_addr, + appkey_index=appkey_index, + ttl=ttl, + retry_params=retry_params, + ) + if dist_status.phase != FwDistPhase.CANCELING_UPDATE: + break diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/errors.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/errors.py new file mode 100644 index 00000000000..0819683f215 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/errors.py @@ -0,0 +1,63 @@ +# 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. + +import enum + + +@enum.unique +class BtmeshErrorCode(enum.IntEnum): + PROV_INIT_FAILED = enum.auto() + PROVISIONING_FAILED = enum.auto() + CONFIG_FAILED = enum.auto() + CONFIG_RESET_PROV_FORBIDDEN = enum.auto() + INVALID_DCD = enum.auto() + MBT_TRANSFER_MODE_INVALID = enum.auto() + MBT_TRANSFER_FAILED = enum.auto() + DIST_SVR_ADDR_DOES_NOT_EXIST = enum.auto() + DIST_SVR_MDL_DOES_NOT_EXIST = enum.auto() + DIST_CLT_GET_FW_FAILED = enum.auto() + DIST_CLT_GET_FW_BY_IDX_FAILED = enum.auto() + DIST_CLT_UPLOAD_START_FAILED = enum.auto() + DIST_CLT_UPLOAD_FAILED = enum.auto() + DIST_CLT_UPLOAD_FWID_EXISTS = enum.auto() + DIST_CLT_UPLOAD_CANCEL_FAILED = enum.auto() + DIST_CLT_DELETE_FW_FAILED = enum.auto() + DIST_CLT_DELETE_ALL_FW_FAILED = enum.auto() + DIST_CLT_DELETE_RECEIVERS_FAILED = enum.auto() + DIST_CLT_ADD_RECEIVERS_FAILED = enum.auto() + DIST_CLT_START_DIST_FAILED = enum.auto() + DIST_CLT_GET_DIST_FAILED = enum.auto() + DIST_CLT_CANCEL_DIST_FAILED = enum.auto() + DFU_CLT_ADD_RECEIVER_FAILED = enum.auto() + DFU_CLT_CANCEL_DIST_FAILED = enum.auto() + + +class BtmeshException(Exception): + """Base Exception class of BT Mesh exceptions""" + +class BtmeshError(BtmeshException): + def __init__(self, err, message, *args, event=None, **kwargs): + self.err = err + self.message = message + self.event = event + self.params = kwargs + super().__init__(message, *args) \ No newline at end of file diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/event.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/event.py new file mode 100644 index 00000000000..346b013bd41 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/event.py @@ -0,0 +1,81 @@ +# 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. + +import dataclasses +from typing import ClassVar + + +@dataclasses.dataclass +class LocalEvent: + name: ClassVar[str] = "INVALID" + + def __eq__(self, other) -> bool: + if isinstance(other, str): + return self.name == other + elif isinstance(other, self.__class__): + return dataclasses.astuple(self) == dataclasses.astuple(other) + else: + return False + + def __post_init__(self, *args, **kwargs) -> None: + if not self.name.startswith("btmesh_levt_"): + raise ValueError('Local event name shall start with "btmesh_levt" prefix.') + + +class LocalEventBus: + def __init__(self) -> None: + self._local_event_handlers = {} + + def subscribe(self, event_name: str, handler) -> None: + if not isinstance(event_name, str): + raise TypeError("The event_name shall be str.") + if event_name.startswith("btmesh_levt"): + handler_list = self._local_event_handlers.setdefault(event_name, []) + if handler not in handler_list: + handler_list.append(handler) + else: + raise ValueError( + f"Subscription to non-local event failed because " + f"{self.__class__.__name__} processes (btmesh_levt) " + f"local events only." + ) + + def unsubscribe(self, event_name: str, handler) -> None: + if not isinstance(event_name, str): + raise TypeError("The event_name shall be str.") + if event_name.startswith("btmesh_levt"): + if (event_name in self._local_event_handlers) and ( + handler in self._local_event_handlers[event_name] + ): + self._local_event_handlers[event_name].remove(handler) + else: + raise ValueError( + f"Unsubscription from non-local event failed because " + f"{self.__class__.__name__} processes (btmesh_levt) " + f"local events only." + ) + + def emit(self, event: LocalEvent) -> None: + if not isinstance(event, LocalEvent): + raise TypeError("Local event bus can handle local events only.") + for event_handler in self._local_event_handlers.get(event.name, []): + event_handler(event) diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/mbt.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/mbt.py new file mode 100644 index 00000000000..e4b83ae7427 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/mbt.py @@ -0,0 +1,706 @@ +# 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. + +import copy +import dataclasses +import enum +import logging +import math +from typing import Callable, ClassVar, Dict, List, Optional + +from bgapi.bglib import BGEvent, CommandFailedError + +from bgapix.bglibx import BGLibExt, BGLibExtRetryParams +from bgapix.slstatus import SlStatus + +from . import util +from .conf import Configurator +from .db import BtmeshDatabase, Node +from .errors import BtmeshError, BtmeshErrorCode, BtmeshException +from .event import LocalEvent, LocalEventBus + +logger = logging.getLogger(__name__) + + +class BtmeshMBTResumeException(BtmeshException): + """BT Mesh MBT Resume exception restarts a suspended MBT transfer.""" + + +@enum.unique +class BlobTransferMode(util.BtmeshIntEnum): + NONE = 0x0 + PUSH = 0x1 + PULL = 0x2 + BOTH = 0x3 + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +@enum.unique +class MBTStatus(util.BtmeshIntEnum): + SUCCESS = 0x00 + INVALID_BLOCK_NUMBER = 0x01 + WRONG_BLOCK_SIZE = 0x02 + WRONG_CHUNK_SIZE = 0x03 + INVALID_STATE = 0x04 + INVALID_PARAMETER = 0x05 + WRONG_BLOB_ID = 0x06 + STORAGE_LIMIT = 0x07 + UNSUPPORTED_TRANSFER_MODE = 0x08 + INTERNAL_ERROR = 0x09 + INFORMATION_UNAVAILABLE = 0x0A + MALFORMED_MESSAGE = 0xFE + TIMEOUT = 0xFF + UNKNOWN = 0xFFFF + UNKNOWN_VALUE = util.ENUM_UNKNOWN_VALUE + + +class Blob: + BLOB_ID_LEN = 8 + + def __init__(self, id, data): + self.id = id + self.data = data + + @property + def id(self): + return self._id + + @id.setter + def id(self, value): + if len(value) != 8: + raise ValueError( + f"Invalid BLOB is size because it shall be {self.BLOB_ID_LEN} " + f"bytes but it is {len(value)}." + ) + self._id = value + + @property + def data(self): + return self._data + + @data.setter + def data(self, value): + self._data = value + + +@dataclasses.dataclass +class MBTServerFailedEvent(LocalEvent): + name: ClassVar[str] = "btmesh_levt_mbt_server_failed" + elem_index: int + server_addr: int + error: MBTStatus + + +@dataclasses.dataclass +class MBTProgressEvent(LocalEvent): + name: ClassVar[str] = "btmesh_levt_mbt_transfer_progress" + elem_index: int + done_bytes: int + blob_size: int + + +@dataclasses.dataclass +class MBTServerInfo: + addr: int + error: MBTStatus + timeout: bool + + +class BlobTransferClient: + INVALID_BLOCK_SIZE_LOG = 0xFF + MAX_CHUNK_SIZE_LIMIT = 241 + RETRY_CMD_ERR_CODES = (SlStatus.BUSY, SlStatus.NO_MORE_RESOURCE) + + @staticmethod + def calc_retry_max(retry_interval: float, timeout_base: int, ttl: int) -> float: + timeout = util.dfu_calc_client_timeout(timeout_base, ttl) + # Multiplication by 1.2 is used to be on the safe side + return round((1.2 * timeout) / retry_interval) + + @staticmethod + def calc_retry_cmd_max( + retry_cmd_interval: float, timeout_base: int, ttl: int + ) -> float: + timeout = util.dfu_calc_client_timeout(timeout_base, ttl) + # Multiplication by 1.2 is used to be on the safe side + return round((1.2 * timeout) / retry_cmd_interval) + + @staticmethod + def calc_block_size_default( + blob_size: int, + blk_size_log_min: int, + blk_size_log_max: int, + blk_count_max: int, + max_chunk_size_min: int, + max_chunks_min: int, + ): + # The block size determine the number of block start and block query + # phases during BLOB transfer. If the block size is high then it means + # less block start and query phases (BLOB size / block size). + # The block start and block query phases are time consuming because the + # response of each server shall be waited which can be significant when + # the number of servers is high. It is fairly good strategy to choose + # the highest possible block size (allowed by servers) because it makes + # the transfer much faster. The big blocks may lead to big chunks because + # the minimum chunk size is limited by the selected block size and the + # maximum number of chunks. If the chunk size is high then it may diminish + # transfer speed in high noise environments. + # Note 1: Block query phase is necessary for push transfer. + # Note 2: The RAM consumption impact of high block size is far greater + # on the server side because each server needs to store a whole block + # in memory because the order of chunks is not guaranteed. + blk_size_max_limit = max_chunk_size_min * max_chunks_min + blk_size_min_limit = math.ceil(blob_size / blk_count_max) + for blk_size_log in range(blk_size_log_max, blk_size_log_min - 1, -1): + blk_size = 2**blk_size_log + if blk_size <= blk_size_max_limit: + break + if blk_size < blk_size_min_limit or blk_size_max_limit < blk_size: + return BlobTransferClient.INVALID_BLOCK_SIZE_LOG + return blk_size_log + + @staticmethod + def calc_chunk_size_default( + blk_size_log: int, + max_chunk_size_min: int, + max_chunks_min: int, + nw_pdu_size: int, + chunk_size_pref: Optional[int] = 53, + ): + # There is a tradeoff between little and big chunks. + # The normal (non-AE) segmented chunks are able to transfer 12 bytes per + # advertisement minus the 1 byte opcode and 2 byte chunk number and 4 + # bytes of MIC. This means N regular advertisement is able to transfer + # 12 x N - 7 bytes of chunk data. If N is a big number then the payload + # per message converges to 12 but if N is low then the fix 7 byte penalty + # becomes significant. + # If there is noise and at least one segment is lost then the whole chunk + # needs to be retransmitted. Probability of transfer failure is higher + # for long segmented chunks and it takes more time to retransmit a long + # chunk. The chunk size can't be arbitrarily low because the max number + # of chunks per block multiplied by the chunk size shall be greater or + # equal to block size. The low chunk size leads to more chunks per block + # which has negative effects when the number of chunks per block exceeds + # 40 because the BLOB Block Status message becomes segmented which means + # all servers starts to respond with segmented messages which might have + # significant impact on the transfer speed. + # Chunk size with 5 segments is used as preferred chunk size because in + # that case the (12 x N - 7) / (12 x N) = 88% of the ideal (non-noisy) + # transfer speed is preserved and 40 x (12 x N - 7) = 2120 -> 2048 (2^N) + # byte blocks can be used without BLOB Block Status message segmentation. + + # BLOB Chunk Transfer access message: Opcode (1byte) + Chunk number (2 byte) + ACCESS_CHUNK_PROT_OVERHEAD = 3 + # Total protocol overhead of upper transport layer and access layer + UPTP_ACCESS_PROT_OVERHEAD = util.UPTP_PROT_OVERHEAD + ACCESS_CHUNK_PROT_OVERHEAD + # BLOB Chunk Transfer unsegmented access message data size + ACCESS_CHUNK_DATA_PER_NON_SEG_MSG = ( + util.LOTP_PAYLOAD_PER_UNSEG_MSG - UPTP_ACCESS_PROT_OVERHEAD + ) + # Total protocol overhead in NW PDU (unsegmented) + TOTAL_UNSEG_PROT_OVERHEAD = ( + util.NW_MSG_PROT_OVERHEAD + + util.LOTP_UNSEG_MSG_PROT_OVERHEAD + + util.UPTP_PROT_OVERHEAD + + ACCESS_CHUNK_PROT_OVERHEAD + ) + max_chunk_size_min = min( + max_chunk_size_min, BlobTransferClient.MAX_CHUNK_SIZE_LIMIT + ) + blk_size = 2**blk_size_log + min_chunk_size = math.ceil(blk_size / max_chunks_min) + if max_chunk_size_min < min_chunk_size: + # This should not happen if the BLOB transfer servers are configured + # properly. The max_chunk_size_min is returned because it might work + # for some servers when the configurations of BLOB transfer servers + # are different. + return max_chunk_size_min + + if util.STANDARD_NETWORK_PDU_SIZE < nw_pdu_size: + # The Silicon Labs BT Mesh over Advertisement Extensions proprietary + # feature is enabled so the chunk size is calculated to fit into a + # single AE packet unless the calculated chunk size is not in the + # allowed chunk size range. + # The preferred chunk size is ignored if it is possible to send the + # whole chunk in a single advertisement because it is superior to + # segmented transmission. + chunk_size = nw_pdu_size - TOTAL_UNSEG_PROT_OVERHEAD + if min_chunk_size <= chunk_size <= max_chunk_size_min: + return chunk_size + elif max_chunk_size_min < chunk_size: + return max_chunk_size_min + else: + # If AE packet can't be used then the chunk size calculation + # falls back to standard BT Mesh 1.0 advertisements. + pass + + if max_chunk_size_min <= ( + 2 * util.LOTP_PAYLOAD_PER_SEG_MSG - UPTP_ACCESS_PROT_OVERHEAD + ): + if max_chunk_size_min <= ACCESS_CHUNK_DATA_PER_NON_SEG_MSG: + # If max_chunk_size_min is less than chunk data size which fits + # into a single segment then the max_chunk_size_min is used as + # the chunk size. + chunk_size = max_chunk_size_min + else: + # If the max chunk size does not make it possible to fill two + # segments completely with data then it is not efficient to + # send segmented messages so unsegmented chunks are used + # if min_chunk_size makes it possible. + if min_chunk_size <= ACCESS_CHUNK_DATA_PER_NON_SEG_MSG: + chunk_size = ACCESS_CHUNK_DATA_PER_NON_SEG_MSG + else: + chunk_size = max_chunk_size_min + elif chunk_size_pref < min_chunk_size: + # If the preferred chunk size is less than the min_chunk_size then + # chunk size is set to the closest value which results in full chunk + # segments. + chunk_size = ( + ( + (min_chunk_size + UPTP_ACCESS_PROT_OVERHEAD) + + util.LOTP_PAYLOAD_PER_SEG_MSG + - 1 + ) + // util.LOTP_PAYLOAD_PER_SEG_MSG + ) * util.LOTP_PAYLOAD_PER_SEG_MSG - UPTP_ACCESS_PROT_OVERHEAD + if chunk_size < min_chunk_size or max_chunk_size_min < chunk_size: + # If selected chunk size does not fit into the allowed chunk + # size range then min_chunk_size is selected. + chunk_size = min_chunk_size + elif max_chunk_size_min < chunk_size_pref: + # If the preferred chunk size is greater than the max_chunk_size_min + # then chunk size is set to the closest value which results in full + # chunk segments. + chunk_size = ( + (max_chunk_size_min + UPTP_ACCESS_PROT_OVERHEAD) + // util.LOTP_PAYLOAD_PER_SEG_MSG + ) * util.LOTP_PAYLOAD_PER_SEG_MSG - UPTP_ACCESS_PROT_OVERHEAD + if (chunk_size < min_chunk_size) or (max_chunk_size_min < chunk_size): + # If selected chunk size does not fit into the allowed chunk + # size range then max_chunk_size_min is selected. + chunk_size = max_chunk_size_min + else: + # The preferred chunk size is selected if it fits into the allowed + # chunk size range. + chunk_size = chunk_size_pref + return chunk_size + + def __init__( + self, + lib: BGLibExt, + db: BtmeshDatabase, + evtbus: LocalEventBus, + conf: Configurator, + retry_params_default: BGLibExtRetryParams, + ): + self.lib = lib + self.db = db + self.conf = conf + self.evtbus = evtbus + self.retry_params_default = retry_params_default + self.calc_block_size = self.calc_block_size_default + self.calc_chunk_size = self.calc_chunk_size_default + self.server_infos: Dict[int, MBTServerInfo] = {} + + def set_calc_block_size(self, func): + if func is None: + self.calc_block_size = self.calc_block_size_default + else: + self.calc_block_size = func + + def set_calc_chunk_size(self, func): + if func is None: + self.calc_chunk_size = self.calc_chunk_size_default + else: + self.calc_chunk_size = func + + def init( + self, + elem_index=0, + max_servers=8, + max_blocks=1850, + max_chunks_per_block=128, + retry_params_default: BGLibExtRetryParams = None, + ): + self.max_servers = max_servers + self.max_blocks = max_blocks + self.max_chunks_per_block = max_chunks_per_block + self.lib.btmesh.mbt_client.init( + elem_index, max_servers, max_blocks, max_chunks_per_block + ) + self.set_retry_params_default(retry_params_default) + + def set_retry_params_default(self, retry_params: BGLibExtRetryParams): + if retry_params: + self.retry_params_default = copy.copy(retry_params) + + def abort_transfer(self, elem_index: int): + self.lib.btmesh.mbt_client.abort(elem_index) + + def mbt_procedure( + self, + command: Callable, + *args, + retry_params: BGLibExtRetryParams = None, + event_selector: object = None, + **event_selector_params, + ): + try: + events = self.lib.retry_until( + command, + *args, + **retry_params.to_dict(), + retry_cmd_err_code=self.RETRY_CMD_ERR_CODES, + event_selector=event_selector, + **event_selector_params, + ) + except CommandFailedError as e: + # The BT Mesh stack events generated on the NCP node are delayed by + # the NCP communication and host side processing (e.g. OS) so there + # is a time interval when the MBT Client model in the BT Mesh stack + # changed state but the MBT client host code (this script) is not + # aware of that. If the host MBT Client tries to call the state + # specific command again to send BT Mesh BLOB Transfer messages to + # the BLOB Transfer Servers (retry) then the stack rejects it with + # INVALID_STATE error because it has already changed state. + # If the expected BT Mesh MBT state change (complete) event is + # received after the INVALID_STATE error then the MBT transfer can + # be continued. + if e.errorcode == SlStatus.INVALID_STATE: + events = self.lib.get_events( + timeout=None, + max_events=None, + max_time=retry_params.retry_interval, + final_event_count=1, + event_selector=event_selector, + **event_selector_params, + ) + if not events: + raise + else: + raise + return events + + def transfer_blob( + self, + blob: Blob, + elem_index: int = 0, + appkey_index: int = 0, + ttl: int = 5, + timeout_base: int = 3, + supported_transfer_modes: BlobTransferMode = BlobTransferMode.PUSH, + group_addr: int = 0, + virtual_addr: bytes = bytes(), + chunk_size_pref: int = 53, + multicast_threshold: int = 2, + servers: List[int] = None, + retry_interval: Optional[float] = None, + retry_cmd_interval: Optional[float] = None, + on_mbt_bg_event: Optional[Callable] = None, + ): + if supported_transfer_modes == BlobTransferMode.NONE: + err = BtmeshErrorCode.MBT_TRANSFER_MODE_INVALID + raise BtmeshError( + err=err, + message=f"Supported transfer mode shall not be {err.name}.", + transfer_mode=err, + ) + if retry_cmd_interval is None: + retry_cmd_interval = self.retry_params_default.retry_cmd_interval + if retry_interval is None: + retry_interval = self.retry_params_default.retry_interval + retry_params = BGLibExtRetryParams( + retry_max=self.calc_retry_max(retry_interval, timeout_base, ttl), + retry_interval=retry_interval, + retry_cmd_max=self.calc_retry_cmd_max( + retry_cmd_interval, timeout_base, ttl + ), + retry_cmd_interval=retry_cmd_interval, + ) + # Make sure on_mbt_bg_event is a callable in order to avoid constant None + # check during BLOB transfer. + if on_mbt_bg_event is None: + on_mbt_bg_event = lambda event: None + + # NCP Host MBT Client assumes that the MBT Client model is setup by + # upper layer model on the NCP node when no servers are passed. + # If the MBT Client model was setup by an upper layer model then the + # setup API shall not be called. + if servers: + self.lib.btmesh.mbt_client.setup( + elem_index, + blob.id, + len(blob.data), + appkey_index, + ttl, + timeout_base, + supported_transfer_modes, + group_addr, + virtual_addr, + multicast_threshold, + (addr.to_bytes(2, byteorder="little") for addr in servers), + ) + else: + server_idx = 0 + servers = [] + while True: + try: + rsp = self.lib.btmesh.mbt_client.get_server_status( + elem_index, server_idx + ) + servers.append(rsp.server_address) + server_idx += 1 + except CommandFailedError as e: + if e.errorcode == SlStatus.BT_MESH_DOES_NOT_EXIST: + break + else: + raise + self.elem_index = elem_index + self.server_infos = {} + for svr in servers: + self.server_infos[svr] = MBTServerInfo(svr, MBTStatus.SUCCESS, 0) + try: + self.lib.subscribe( + "btmesh_evt_mbt_client_transfer_complete", self.on_transfer_completed + ) + self.lib.subscribe( + "btmesh_evt_mbt_client_server_failed", self.on_server_failed + ) + self.transfer_blob_run( + blob=blob, + elem_index=elem_index, + supported_transfer_modes=supported_transfer_modes, + chunk_size_pref=chunk_size_pref, + retry_params=retry_params, + on_mbt_bg_event=on_mbt_bg_event, + ) + finally: + self.lib.unsubscribe( + "btmesh_evt_mbt_client_server_failed", self.on_server_failed + ) + self.lib.unsubscribe( + "btmesh_evt_mbt_client_transfer_complete", self.on_transfer_completed + ) + return self.server_infos + + def transfer_blob_run( + self, + blob: Blob, + elem_index: int, + supported_transfer_modes: BlobTransferMode, + chunk_size_pref: int, + retry_params: Optional[BGLibExtRetryParams], + on_mbt_bg_event: Optional[Callable[[BGEvent], None]], + ): + query_evts = self.mbt_procedure( + self.lib.btmesh.mbt_client.query_information, + elem_index, + retry_params=retry_params, + event_selector="btmesh_evt_mbt_client_query_information_complete", + ) + query_evt = query_evts[0] + on_mbt_bg_event(query_evt) + max_chunk_size_min = min( + self.MAX_CHUNK_SIZE_LIMIT, query_evt.max_chunk_size_min + ) + max_chunks_min = min(self.max_chunks_per_block, query_evt.max_chunks_min) + blk_size_log = self.calc_block_size( + len(blob.data), + query_evt.block_size_log_min, + query_evt.block_size_log_max, + self.max_blocks, + max_chunk_size_min, + max_chunks_min, + ) + if blk_size_log == self.INVALID_BLOCK_SIZE_LOG: + blk_size_log = query_evt.block_size_log_max + nw_pdu_size = self.conf.get_local_network_pdu_size() + chunk_size = self.calc_chunk_size( + blk_size_log=blk_size_log, + max_chunk_size_min=max_chunk_size_min, + max_chunks_min=max_chunks_min, + nw_pdu_size=nw_pdu_size, + chunk_size_pref=chunk_size_pref, + ) + if supported_transfer_modes == BlobTransferMode.BOTH: + if query_evt.common_transfer_modes == BlobTransferMode.PULL: + transfer_mode = BlobTransferMode.PULL + else: + transfer_mode = BlobTransferMode.PUSH + else: + # It is guaranteed by previous checks that supported transfer + # mode is not NONE. + transfer_mode = supported_transfer_modes + transfer_active = True + progress_zero_reported = False + while transfer_active: + try: + start_evts = self.mbt_procedure( + self.lib.btmesh.mbt_client.start_transfer, + elem_index, + blk_size_log, + transfer_mode.value, + retry_params=retry_params, + event_selector="btmesh_evt_mbt_client_start_transfer_complete", + ) + start_evt = start_evts[0] + logger.info( + f"BLOB Transfer is started (blk_size={2**blk_size_log}, " + f"transfer_mode={transfer_mode.name.lower()})." + ) + on_mbt_bg_event(start_evt) + if not progress_zero_reported: + progress_zero_reported = True + levt = MBTProgressEvent(elem_index, 0, len(blob.data)) + self.evtbus.emit(levt) + while transfer_active: + blk_comp = self.send_block( + blob=blob, + elem_index=elem_index, + blk_size_log=blk_size_log, + chunk_size=chunk_size, + retry_params=retry_params, + on_mbt_bg_event=on_mbt_bg_event, + ) + if blk_comp.transfer_complete: + logger.info("BLOB transfer completed.") + transfer_active = False + except BtmeshMBTResumeException: + continue + + def send_block( + self, + blob: Blob, + elem_index: int, + blk_size_log: int, + chunk_size: int, + retry_params: Optional[BGLibExtRetryParams], + on_mbt_bg_event: Optional[Callable[[BGEvent], None]], + ): + block_start_evts = self.mbt_procedure( + self.lib.btmesh.mbt_client.start_block, + elem_index, + chunk_size, + retry_params=retry_params, + event_selector="btmesh_evt_mbt_client_start_block_complete", + ) + block_start_evt = block_start_evts[0] + logger.info( + f"Block {block_start_evt.block_number} " + f"({block_start_evt.block_size} bytes) is started." + ) + blk_num = block_start_evt.block_number + blk_size = 2**blk_size_log + on_mbt_bg_event(block_start_evt) + while True: + self.send_chunks(blob, elem_index, on_mbt_bg_event) + blk_complete_evts = self.mbt_procedure( + self.lib.btmesh.mbt_client.query_block_status, + elem_index, + retry_params=retry_params, + event_selector="btmesh_evt_mbt_client_query_block_status_complete", + ) + blk_complete_evt = blk_complete_evts[0] + blk_done = blk_complete_evt.block_complete + transfer_done = blk_complete_evt.transfer_complete + logger.info( + f"Query block status complete (blk_done={blk_done}, " + f"transfer_done={transfer_done})." + ) + on_mbt_bg_event(blk_complete_evt) + if blk_done: + if transfer_done: + levt = MBTProgressEvent(elem_index, len(blob.data), len(blob.data)) + else: + levt = MBTProgressEvent( + elem_index, (blk_num + 1) * blk_size, len(blob.data) + ) + self.evtbus.emit(levt) + return blk_complete_evt + + def send_chunks( + self, + blob: Blob, + elem_index: int, + on_mbt_bg_event: Optional[Callable[[BGEvent], None]], + ): + chunks_complete = False + while not chunks_complete: + events = self.lib.wait_events( + event_selector=[ + "btmesh_evt_mbt_client_send_chunk_request", + "btmesh_evt_mbt_client_send_chunks_complete", + ], + ) + for event in events: + if event == "btmesh_evt_mbt_client_send_chunk_request": + start_pos = event.offset + end_pos = event.offset + event.length + logger.info(f"Send chunk [{start_pos},{end_pos})") + self.lib.btmesh.mbt_client.send_chunk_request_rsp( + elem_index, blob.data[start_pos:end_pos] + ) + else: + chunks_complete = True + on_mbt_bg_event(event) + + def on_transfer_completed(self, event: BGEvent): + if event.elem_index == self.elem_index: + for info in self.server_infos.values(): + if info.error == MBTStatus.SUCCESS: + # If at least one server received the BLOB without errors + # then the BLOB transfer is considered successful. + return + raise BtmeshError( + err=BtmeshErrorCode.MBT_TRANSFER_FAILED, + message="All BLOB transfer servers are failed.", + server_infos=self.server_infos.values(), + ) + + def on_server_failed(self, event: BGEvent): + if event.elem_index == self.elem_index: + addr = event.server_address + if addr in self.server_infos: + mbt_status = MBTStatus.from_int(event.error) + self.server_infos[addr].error = mbt_status + self.server_infos[addr].timeout = event.timeout + logger.warn( + f"BLOB Transfer Server 0x{addr:04X} is failed " + f"due to {mbt_status.pretty_name}." + ) + levt = MBTServerFailedEvent( + elem_index=self.elem_index, + server_addr=addr, + error=mbt_status, + ) + self.evtbus.emit(levt) + if all( + (info.error != MBTStatus.SUCCESS) or (info.timeout != 0) + for info in self.server_infos.values() + ): + raise BtmeshError( + err=BtmeshErrorCode.MBT_TRANSFER_FAILED, + message="All BLOB transfer servers are failed.", + server_infos=self.server_infos.values(), + ) + else: + logger.error(f"The {addr} server failed but it does not exists.") diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/mdl.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/mdl.py new file mode 100644 index 00000000000..e6a8254026e --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/mdl.py @@ -0,0 +1,287 @@ +# 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. + +import enum + +NAMED_MODEL_ID_TO_PRETTY_NAME = { + (0xFFFF, 0x1011): "Generic Admin Property Server", + (0xFFFF, 0x100D): "Generic Battery Client", + (0xFFFF, 0x100C): "Generic Battery Server", + (0xFFFF, 0x1014): "Generic Client Property Server", + (0xFFFF, 0x1005): "Generic Default Transition Time Client", + (0xFFFF, 0x1004): "Generic Default Transition Time Server", + (0xFFFF, 0x1003): "Generic Level Client", + (0xFFFF, 0x1002): "Generic Level Server", + (0xFFFF, 0x1010): "Generic Location Client", + (0xFFFF, 0x100E): "Generic Location Server", + (0xFFFF, 0x100F): "Generic Location Setup Server", + (0xFFFF, 0x1012): "Generic Manufacturer Property Server", + (0xFFFF, 0x1001): "Generic OnOff Client", + (0xFFFF, 0x1000): "Generic OnOff Server", + (0xFFFF, 0x100B): "Generic Power Level Client", + (0xFFFF, 0x1009): "Generic Power Level Server", + (0xFFFF, 0x100A): "Generic Power Level Setup Server", + (0xFFFF, 0x1008): "Generic Power OnOff Client", + (0xFFFF, 0x1006): "Generic Power OnOff Server", + (0xFFFF, 0x1007): "Generic Power OnOff Setup Server", + (0xFFFF, 0x1015): "Generic Property Client", + (0xFFFF, 0x1013): "Generic User Property Server", + (0xFFFF, 0x1305): "Light CTL Client", + (0xFFFF, 0x1303): "Light CTL Server", + (0xFFFF, 0x1304): "Light CTL Setup Server", + (0xFFFF, 0x1306): "Light CTL Temperature Server", + (0xFFFF, 0x1309): "Light HSL Client", + (0xFFFF, 0x130A): "Light HSL Hue Server", + (0xFFFF, 0x130B): "Light HSL Saturation Server", + (0xFFFF, 0x1307): "Light HSL Server", + (0xFFFF, 0x1308): "Light HSL Setup Server", + (0xFFFF, 0x1311): "Light LC Client", + (0xFFFF, 0x130F): "Light LC Server", + (0xFFFF, 0x1310): "Light LC Setup Server", + (0xFFFF, 0x1302): "Light Lightness Client", + (0xFFFF, 0x1300): "Light Lightness Server", + (0xFFFF, 0x1301): "Light Lightness Setup Server", + (0xFFFF, 0x130E): "Light xyL Client", + (0xFFFF, 0x130C): "Light xyL Server", + (0xFFFF, 0x130D): "Light xyL Setup Server", + (0xFFFF, 0x1205): "Scene Client", + (0xFFFF, 0x1203): "Scene Server", + (0xFFFF, 0x1204): "Scene Setup Server", + (0xFFFF, 0x1208): "Scheduler Client", + (0xFFFF, 0x1206): "Scheduler Server", + (0xFFFF, 0x1207): "Scheduler Setup Server", + (0xFFFF, 0x1102): "Sensor Client", + (0xFFFF, 0x1100): "Sensor Server", + (0xFFFF, 0x1101): "Sensor Setup Server", + (0xFFFF, 0x1202): "Time Client", + (0xFFFF, 0x1200): "Time Server", + (0xFFFF, 0x1201): "Time Setup Server", + (0xFFFF, 0x1401): "BLOB Transfer Client", + (0xFFFF, 0x1400): "BLOB Transfer Server", + (0xFFFF, 0x1405): "Firmware Distribution Client", + (0xFFFF, 0x1404): "Firmware Distribution Server", + (0xFFFF, 0x1403): "Firmware Update Client", + (0xFFFF, 0x1402): "Firmware Update Server", + (0xFFFF, 0x0009): "Bridge Configuration Client", + (0xFFFF, 0x0008): "Bridge Configuration Server", + (0xFFFF, 0x0001): "Configuration Client", + (0xFFFF, 0x0000): "Configuration Server", + (0xFFFF, 0x0007): "Directed Forwarding Configuration Client", + (0xFFFF, 0x0006): "Directed Forwarding Configuration Server", + (0xFFFF, 0x0003): "Health Client", + (0xFFFF, 0x0002): "Health Server", + (0xFFFF, 0x0013): "Large Composition Data Client", + (0xFFFF, 0x0012): "Large Composition Data Server", + (0xFFFF, 0x000B): "Mesh Private Beacon Client", + (0xFFFF, 0x000A): "Mesh Private Beacon Server", + (0xFFFF, 0x000D): "On-Demand Private Proxy Client", + (0xFFFF, 0x000C): "On-Demand Private Proxy Server", + (0xFFFF, 0x0011): "Opcodes Aggregator Client", + (0xFFFF, 0x0010): "Opcodes Aggregator Server", + (0xFFFF, 0x0005): "Remote Provisioning Client", + (0xFFFF, 0x0004): "Remote Provisioning Server", + (0xFFFF, 0x000F): "SAR Configuration Client", + (0xFFFF, 0x000E): "SAR Configuration Server", + (0xFFFF, 0x0015): "Solicitation PDU RPL Configuration Client", + (0xFFFF, 0x0014): "Solicitation PDU RPL Configuration Server", + (0x02FF, 0xFFFC): "Silabs Configuration Client", + (0x02FF, 0xFFFD): "Silabs Configuration Server", +} + + +@enum.unique +class NamedModelID(enum.Enum): + @classmethod + def is_value_valid(cls, value): + value_valid = False + if isinstance(value, cls): + value_valid = True + elif isinstance(value, tuple) and len(value) == 2: + value_valid = True + elif isinstance(value, int): + value_valid = True + return value_valid + + @classmethod + def validate_value(cls, value): + if not cls.is_value_valid(value): + raise ValueError( + f"Invalid {cls.__class__.__name__} value ({type(value.__name__)})." + ) + + @classmethod + def value_to_tuple(cls, value): + cls.validate_value(value) + if isinstance(value, cls): + return value.value + if isinstance(value, tuple) and len(value) == 2: + return value + if isinstance(value, int): + return (0xFFFF, value) + + @classmethod + def value_exist(cls, value): + cls.validate_value(value) + value = cls.value_to_tuple(value) + try: + cls(value) + except ValueError: + return False + return True + + @classmethod + def get_pretty_name(cls, value, unknown_with_value=True): + value = cls.value_to_tuple(value) + if unknown_with_value: + return NAMED_MODEL_ID_TO_PRETTY_NAME.get(value, f"UNKNOWN {value}") + else: + return NAMED_MODEL_ID_TO_PRETTY_NAME.get(value, f"UNKNOWN") + + @staticmethod + def gen_pretty_name_id_pairs(): + for name, id in NAMED_MODEL_ID_TO_PRETTY_NAME.items(): + yield name, id + + @staticmethod + def gen_pretty_names(): + for pretty_name in NAMED_MODEL_ID_TO_PRETTY_NAME.values(): + yield pretty_name + + @classmethod + def is_name_valid(cls, name, ignore_case=True): + if ignore_case: + return (name.upper() in cls.__members__) + else: + return (name in cls.__members__) + + @classmethod + def get_name(cls, value, unknown_with_value=True): + try: + value = cls.value_to_tuple(value) + return cls(value).name + except ValueError: + if unknown_with_value: + return f"UNKNOWN ({value})" + else: + return f"UNKNOWN" + + @classmethod + def gen_names(cls): + for name in cls.__members__.keys(): + yield name + + @classmethod + def gen_name_id_pairs(cls): + for name, enum_const in cls.__members__.items(): + yield name, enum_const.value + + @classmethod + def get_id_by_name(cls, name, ignore_case=True): + name = name.upper() if ignore_case else name + return cls.__members__[name.upper()] + + @property + def pretty_name(self): + return NAMED_MODEL_ID_TO_PRETTY_NAME.get(self.value) + + GENERIC_ADMIN_PROPERTY_SERVER = (0xFFFF, 0x1011) + GENERIC_BATTERY_CLIENT = (0xFFFF, 0x100D) + GENERIC_BATTERY_SERVER = (0xFFFF, 0x100C) + GENERIC_CLIENT_PROPERTY_SERVER = (0xFFFF, 0x1014) + GENERIC_DEFAULT_TRANSITION_TIME_CLIENT = (0xFFFF, 0x1005) + GENERIC_DEFAULT_TRANSITION_TIME_SERVER = (0xFFFF, 0x1004) + GENERIC_LEVEL_CLIENT = (0xFFFF, 0x1003) + GENERIC_LEVEL_SERVER = (0xFFFF, 0x1002) + GENERIC_LOCATION_CLIENT = (0xFFFF, 0x1010) + GENERIC_LOCATION_SERVER = (0xFFFF, 0x100E) + GENERIC_LOCATION_SETUP_SERVER = (0xFFFF, 0x100F) + GENERIC_MANUFACTURER_PROPERTY_SERVER = (0xFFFF, 0x1012) + GENERIC_ONOFF_CLIENT = (0xFFFF, 0x1001) + GENERIC_ONOFF_SERVER = (0xFFFF, 0x1000) + GENERIC_POWER_LEVEL_CLIENT = (0xFFFF, 0x100B) + GENERIC_POWER_LEVEL_SERVER = (0xFFFF, 0x1009) + GENERIC_POWER_LEVEL_SETUP_SERVER = (0xFFFF, 0x100A) + GENERIC_POWER_ONOFF_CLIENT = (0xFFFF, 0x1008) + GENERIC_POWER_ONOFF_SERVER = (0xFFFF, 0x1006) + GENERIC_POWER_ONOFF_SETUP_SERVER = (0xFFFF, 0x1007) + GENERIC_PROPERTY_CLIENT = (0xFFFF, 0x1015) + GENERIC_USER_PROPERTY_SERVER = (0xFFFF, 0x1013) + LIGHT_CTL_CLIENT = (0xFFFF, 0x1305) + LIGHT_CTL_SERVER = (0xFFFF, 0x1303) + LIGHT_CTL_SETUP_SERVER = (0xFFFF, 0x1304) + LIGHT_CTL_TEMPERATURE_SERVER = (0xFFFF, 0x1306) + LIGHT_HSL_CLIENT = (0xFFFF, 0x1309) + LIGHT_HSL_HUE_SERVER = (0xFFFF, 0x130A) + LIGHT_HSL_SATURATION_SERVER = (0xFFFF, 0x130B) + LIGHT_HSL_SERVER = (0xFFFF, 0x1307) + LIGHT_HSL_SETUP_SERVER = (0xFFFF, 0x1308) + LIGHT_LC_CLIENT = (0xFFFF, 0x1311) + LIGHT_LC_SERVER = (0xFFFF, 0x130F) + LIGHT_LC_SETUP_SERVER = (0xFFFF, 0x1310) + LIGHT_LIGHTNESS_CLIENT = (0xFFFF, 0x1302) + LIGHT_LIGHTNESS_SERVER = (0xFFFF, 0x1300) + LIGHT_LIGHTNESS_SETUP_SERVER = (0xFFFF, 0x1301) + LIGHT_XYL_CLIENT = (0xFFFF, 0x130E) + LIGHT_XYL_SERVER = (0xFFFF, 0x130C) + LIGHT_XYL_SETUP_SERVER = (0xFFFF, 0x130D) + SCENE_CLIENT = (0xFFFF, 0x1205) + SCENE_SERVER = (0xFFFF, 0x1203) + SCENE_SETUP_SERVER = (0xFFFF, 0x1204) + SCHEDULER_CLIENT = (0xFFFF, 0x1208) + SCHEDULER_SERVER = (0xFFFF, 0x1206) + SCHEDULER_SETUP_SERVER = (0xFFFF, 0x1207) + SENSOR_CLIENT = (0xFFFF, 0x1102) + SENSOR_SERVER = (0xFFFF, 0x1100) + SENSOR_SETUP_SERVER = (0xFFFF, 0x1101) + TIME_CLIENT = (0xFFFF, 0x1202) + TIME_SERVER = (0xFFFF, 0x1200) + TIME_SETUP_SERVER = (0xFFFF, 0x1201) + BLOB_TRANSFER_CLIENT = (0xFFFF, 0x1401) + BLOB_TRANSFER_SERVER = (0xFFFF, 0x1400) + FIRMWARE_DISTRIBUTION_CLIENT = (0xFFFF, 0x1405) + FIRMWARE_DISTRIBUTION_SERVER = (0xFFFF, 0x1404) + FIRMWARE_UPDATE_CLIENT = (0xFFFF, 0x1403) + FIRMWARE_UPDATE_SERVER = (0xFFFF, 0x1402) + BRIDGE_CONFIGURATION_CLIENT = (0xFFFF, 0x0009) + BRIDGE_CONFIGURATION_SERVER = (0xFFFF, 0x0008) + CONFIGURATION_CLIENT = (0xFFFF, 0x0001) + CONFIGURATION_SERVER = (0xFFFF, 0x0000) + DIRECTED_FORWARDING_CONFIGURATION_CLIENT = (0xFFFF, 0x0007) + DIRECTED_FORWARDING_CONFIGURATION_SERVER = (0xFFFF, 0x0006) + HEALTH_CLIENT = (0xFFFF, 0x0003) + HEALTH_SERVER = (0xFFFF, 0x0002) + LARGE_COMPOSITION_DATA_CLIENT = (0xFFFF, 0x0013) + LARGE_COMPOSITION_DATA_SERVER = (0xFFFF, 0x0012) + MESH_PRIVATE_BEACON_CLIENT = (0xFFFF, 0x000B) + MESH_PRIVATE_BEACON_SERVER = (0xFFFF, 0x000A) + ON_DEMAND_PRIVATE_PROXY_CLIENT = (0xFFFF, 0x000D) + ON_DEMAND_PRIVATE_PROXY_SERVER = (0xFFFF, 0x000C) + OPCODES_AGGREGATOR_CLIENT = (0xFFFF, 0x0011) + OPCODES_AGGREGATOR_SERVER = (0xFFFF, 0x0010) + REMOTE_PROVISIONING_CLIENT = (0xFFFF, 0x0005) + REMOTE_PROVISIONING_SERVER = (0xFFFF, 0x0004) + SAR_CONFIGURATION_CLIENT = (0xFFFF, 0x000F) + SAR_CONFIGURATION_SERVER = (0xFFFF, 0x000E) + SOLICITATION_PDU_RPL_CONFIGURATION_CLIENT = (0xFFFF, 0x0015) + SOLICITATION_PDU_RPL_CONFIGURATION_SERVER = (0xFFFF, 0x0014) + SILABS_CONFIGURATION_CLIENT = (0x02FF, 0xFFFC) + SILABS_CONFIGURATION_SERVER = (0x02FF, 0xFFFD) diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/prov.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/prov.py new file mode 100644 index 00000000000..14ddadf11c9 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/prov.py @@ -0,0 +1,178 @@ +# 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. + +import logging + +from bgapi.bglib import CommandFailedError + +from bgapix.bglibx import BGLibExt +from bgapix.slstatus import SlStatus + +from . import util +from .db import BtmeshDatabase, Node +from .errors import BtmeshError, BtmeshErrorCode +from .event import LocalEventBus + +logger = logging.getLogger(__name__) + + +class Provisioner: + NETKEY_IDX = 0 + + def __init__(self, lib: BGLibExt, db: BtmeshDatabase, evtbus: LocalEventBus): + self.lib = lib + self.db = db + self.evtbus = evtbus + + def init(self): + # Initialize the NCP device as provisioner + try: + self.lib.btmesh.prov.init() + event = self.lib.wait_events( + ["btmesh_evt_prov_initialized", "btmesh_evt_prov_initialization_failed"] + )[0] + if event == "btmesh_evt_prov_initialized": + return event.networks + else: + raise BtmeshError( + BtmeshErrorCode.PROV_INIT_FAILED, + f"Provisioner initialization failed. ({event.errorcode})", + event=event, + ) + except CommandFailedError as e: + if e.errorcode != SlStatus.INVALID_STATE: + raise + # The get networks should not fail unless there is a fundamental crypto + # issue on the NCP node + response = self.lib.btmesh.node.get_networks() + # The response.networks contains the netkey indexes bytes and each + # netkey index is two bytes so the byte count shall be divided by 2 + # to determine the number of networks on the provisioner + return len(response.networks) // 2 + + @property + def prov_node(self) -> Node: + return self.db.get_node_by_uuid(self.db.prov_uuid) + + def create_network( + self, netkey=bytes(), appkeys=[bytes()], prov_node_name="Provisioner" + ): + # One network key is created with one bound application key + # If the key is a zero length bytes then the key is random generated + self.lib.btmesh.prov.create_network(self.NETKEY_IDX, netkey) + rsp = self.lib.btmesh.node.get_uuid() + uuid = rsp.uuid + rsp = self.lib.btmesh.prov.get_ddb_entry(uuid) + prov_node = Node( + uuid=uuid, + devkey=rsp.device_key, + prim_addr=rsp.address, + elem_count=rsp.elements, + name=prov_node_name, + ) + self.db.add_node(prov_node) + self.db.prov_uuid = uuid + for appkey_index, appkey in enumerate(appkeys): + self.lib.btmesh.prov.create_appkey(self.NETKEY_IDX, appkey_index, appkey) + prov_node.add_appkey_index(appkey_index) + + def scan_unprov_beacons_gen(self, max_time=2.0): + try: + self.lib.btmesh.prov.scan_unprov_beacons() + except CommandFailedError as e: + # The INVALID_STATE error is raised if the scanning is already + # active which is not an error in this case + if e.errorcode != SlStatus.INVALID_STATE: + raise + try: + for unprov_beacon in self.lib.gen_events( + event_selector="btmesh_evt_prov_unprov_beacon", + max_time=max_time, + timeout=None, + ): + yield unprov_beacon + except Exception: + try: + self.lib.btmesh.prov.stop_scan_unprov_beacons() + except CommandFailedError as e: + # If an event handler raises an exception when a reset occurs + # then this stop call will fail. This function call is used for + # cleanup purposes so raising another exception inside an + # exception shall be avoided. + logger.error("Failed to stop scanning for unprovisioned beacons.") + raise + else: + self.lib.btmesh.prov.stop_scan_unprov_beacons() + + def scan_unprov_beacons(self, max_time=2.0): + return list(self.scan_unprov_beacons_gen(max_time=max_time)) + + def provision_adv_device(self, uuids, max_time=20): + if not isinstance(uuids, (list, tuple)): + uuids = [uuids] + for uuid in uuids: + # Create provisioning session command fails only: + # - SL_STATUS_INVALID_PARAMETER: Provisioning session with the same + # uuid is active + # - SL_STATUS_NO_MORE_RESOURCE: Maximum number of provisioning + # sessions would be exceeded. + # Note: The max number of provisioning sessions is configurable in + # sl_btmesh_config.h of NCP node by c macro: + # SL_BTMESH_CONFIG_MAX_PROV_SESSIONS + # The above errors are not possible because only one provisioning + # session can be active at the same time because the app code runs + # on a single thread. + self.lib.btmesh.prov.create_provisioning_session(self.NETKEY_IDX, uuid, 10) + # The provision ADV device command may fail: + # - SL_STATUS_INVALID_PARAMETER: If the device is already provisioned + # - SL_STATUS_BT_MESH_LIMIT_REACHED: There is no space in the device + # database on the NCP node + # - SL_STATUS_BT_MESH_DOES_NOT_EXIST: No provisioning session is + # created previously for the passed uuid + # - SL_STATUS_NO_MORE_RESOURCE: Memory allocation fails + # Note: The max number of devices in device database is configurable + # in sl_btmesh_config.h of NCP node by c macro: + # SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICES + self.lib.btmesh.prov.provision_adv_device(uuid) + event = self.lib.wait_events( + [ + "btmesh_evt_prov_device_provisioned", + "btmesh_evt_prov_provisioning_failed", + ], + max_time=max_time, + )[0] + if event == "btmesh_evt_prov_provisioning_failed": + raise BtmeshError( + BtmeshErrorCode.PROVISIONING_FAILED, + f"Provisioning {event.uuid.hex()} device failed " + f"with {util.prov_failure_reason_str(event.reason)}.", + event=event, + ) + elif event == "btmesh_evt_prov_device_provisioned": + rsp = self.lib.btmesh.prov.get_ddb_entry(uuid) + node = Node( + uuid=uuid, + devkey=rsp.device_key, + prim_addr=rsp.address, + elem_count=rsp.elements, + ) + self.db.add_node(node) diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/statedict.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/statedict.py new file mode 100644 index 00000000000..9889bed7c69 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/statedict.py @@ -0,0 +1,99 @@ +# 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. + +import abc +from typing import Callable, Mapping + + +class StateDictObject(abc.ABC): + @staticmethod + def to_bytes(raw): + if isinstance(raw, bytes): + return raw + elif isinstance(raw, str): + return bytes.fromhex(raw) + else: + # Handle iterable + return bytes(raw) + + @staticmethod + def elem_to_dict(elem): + if isinstance(elem, StateDictObject): + return elem.to_dict() + elif isinstance(elem, str): + return elem + elif isinstance(elem, bytes): + return elem.hex() + elif isinstance(elem, Mapping): + return { + StateDictObject.elem_to_dict(k): StateDictObject.elem_to_dict(v) + for k, v in elem.items() + } + elif hasattr(elem, "__iter__") or hasattr(elem, "__getitem__"): + return [StateDictObject.elem_to_dict(e) for e in elem] + else: + return elem + + @staticmethod + def property_name(attr_name): + if (attr_name != "_") and (attr_name[0] == "_"): + return attr_name[1:] + else: + return attr_name + + @classmethod + def raise_construction_error(cls, attr_name, attr_value, hint="", type_error=False): + if type_error: + raise TypeError( + f"{cls.__name__} {attr_name} is not constructible " + f"from {type(attr_value).__name__} type. {hint}" + ) + else: + raise ValueError( + f"{cls.__name__} {attr_name} is not constructible " + f"from {attr_value} ({type(attr_value).__name__}). {hint}" + ) + + @classmethod + def create_from_dict(cls, d): + if isinstance(d, cls): + # Handle gracefully if the d object is instance of the type which + # needs to be created. + return d + else: + obj = cls(**d) + return obj + + def to_dict(self): + return { + self.property_name(attr_key): self.elem_to_dict(attr_value) + for attr_key, attr_value in vars(self).items() + if not isinstance(attr_value, Callable) + } + + def from_dict(self, d): + obj = self.create_from_dict(d) + self.__dict__.update(vars(obj)) + + def __repr__(self): + params = ", ".join([f"{k}={v!r}" for k, v in vars(self).items()]) + return f"{self.__class__.__name__}({params})" diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh/util.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh/util.py new file mode 100644 index 00000000000..2c0fade3161 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh/util.py @@ -0,0 +1,559 @@ +# 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. + +import dataclasses +import enum +import re +from typing import Callable, Optional + +from bgapix.bglibx import BGLibExtRetryParams + +UNKNOWN_VALUE_STR = "__UNKNOWN__" + +# BT Mesh network PDU constants +LEGACY_NW_PDU_LEN = 29 +NW_PDU_LEN_MIN = 29 +NW_PDU_LEN_MAX = 227 + +# BT Mesh address constants +UNASSIGNED_ADDR = 0 +UNICAST_ADDR_MIN = 0x0001 +UNICAST_ADDR_MAX = 0x7FFF +VIRTUAL_ADDR_MIN = 0x8000 +VIRTUAL_ADDR_MAX = 0xBFFF +GROUP_ADDR_MIN = 0xC000 +GROUP_ADDR_MAX = 0xFFFF +MULTICAST_ADDR_MIN = VIRTUAL_ADDR_MIN +MULTICAST_ADDR_MAX = GROUP_ADDR_MAX +FIXED_GROUP_ADDR_BASE = 0xFF00 +MAX_ADDR = 0xFFFF +VIRTUAL_LABEL_UUID_LEN = 16 + +# BT Mesh element constants +PRIM_ELEM_INDEX = 0 + +APPKEY_INDEX_MAX = 0xFFFF +MIN_FWID_LEN = 2 +MAX_FWID_LEN = 108 +MAX_FWID_VERSION_INFO_LEN = 106 +COMPANY_ID_SIZE = 2 +TTL_MAX = 0x7F +TTL_USE_DEFAULT = 0xFF +TTL_LOCAL_ELEMS = 0x01 +PUB_CRED_NORMAL = 0 +PUB_CRED_FRIENDSHIP = 1 +PUB_PERIOD_MS_DISABLED = 0 +PUB_PERIOD_MS_MIN = 100 +PUB_PERIOD_MS_MAX = 63 * 10 * 60 * 1000 +PUB_RETRANSMIT_COUNT_MAX = 7 +PUB_RETRANSMIT_INT_MS_MIN = 50 +PUB_RETRANSMIT_INT_MS_MAX = 1600 +PUB_RETRANSMIT_INT_MS_DISABLED = 0 +FW_INDEX_MAX = 0xFF + +SEP_PATTERN = r"[-/:]" +INTEGER_PATTERN = r"\d+|0[bB][01]+|0[oO][0-7]+|0[xX][a-fA-F0-9]+" +INTEGER_PAIR_PATTERN = f"({INTEGER_PATTERN}){SEP_PATTERN}({INTEGER_PATTERN})" +ADDR_PATTERN = INTEGER_PATTERN +NAME_PATTERN = r"[a-zA-Z_]\w*" +UUID_PATTERN = r"[0-9a-fA-F]{32}" + +ENUM_UNKNOWN_VALUE = 0xCAFEBABE + +# The BT Mesh standard network PDU size belonging to non-connectable +# non-scannable advertisements +STANDARD_NETWORK_PDU_SIZE = 29 +# The payload from Lower Transport Layer point of view. +# The upper layers add additional protocol overhead on top of this. +LOTP_PAYLOAD_PER_SEG_MSG = 12 +LOTP_PAYLOAD_PER_UNSEG_MSG = 15 +# Protocol overhead of Network Layer +# (IVI+NID) + (CTL+TTL) + SEQ + SRC + DST + NetMIC = 13 bytes +# 1 + 1 + 3 + 2 + 2 + 4 = 13 bytes +NW_MSG_PROT_OVERHEAD = 13 +# Protocol overhead of Lower Transport Layer +# (SEG+AID+AKF) = 1 byte +LOTP_UNSEG_MSG_PROT_OVERHEAD = 1 +# Protocol overhead of Upper Transport Layer: TransMIC (4 bytes) +UPTP_PROT_OVERHEAD = 4 + + +@dataclasses.dataclass +class BtmeshRetryParams(BGLibExtRetryParams): + retry_interval_lpn: Optional[float] + + def to_dict(self): + return dataclasses.asdict(self) + + def to_base(self, use_interval_lpn: bool = False): + if use_interval_lpn: + retry_interval = self.retry_interval_lpn + else: + retry_interval = self.retry_interval + return BGLibExtRetryParams( + retry_max=self.retry_max, + retry_interval=retry_interval, + retry_cmd_max=self.retry_cmd_max, + retry_cmd_interval=self.retry_cmd_interval, + ) + + def to_base_dict(self, use_interval_lpn: bool = False): + return self.to_base(use_interval_lpn).to_dict() + + def __post_init__(self): + super().__post_init__() + if self.retry_interval_lpn is None: + self.retry_interval_lpn = self.retry_interval + if self.retry_interval_lpn < 0.0: + raise ValueError(f"The retry interval LPN is negative.") + + +class BtmeshIntEnum(enum.IntEnum): + @classmethod + def from_int(cls, value): + try: + return cls(value) + except ValueError: + return cls(ENUM_UNKNOWN_VALUE) + + @property + def pretty_name(self) -> str: + return self.to_pretty_name() + + def to_pretty_name(self, sep: str = " ", prettifier: Callable = str.lower) -> str: + return pretty_name(self.name, sep=sep, prettifier=prettifier) + + +class BtmeshIntFlag(enum.IntFlag): + @classmethod + def from_int(cls, value): + return cls(value) + + @property + def pretty_name(self) -> str: + return self.to_pretty_name() + + def to_pretty_name(self, sep: str = " ", prettifier: Callable = str.lower) -> str: + return pretty_name(self.name, sep=sep, prettifier=prettifier) + + +def join_text_lines(text): + return re.sub(r"\s\s*", " ", text).strip() + + +def unknown_value(value): + return UNKNOWN_VALUE_STR + f" ({value})" + + +def is_iterable(obj): + return hasattr(obj, "__iter__") or hasattr(obj, "__getitem__") + + +def bytes_to_int_list(b: bytes, n: int, byteorder="little"): + assert n != 0 + if len(b) % n != 0: + raise ValueError( + f"The length of bytes ({len(b)}) shall be " + f"divisible by integer size ({n})." + ) + byte_chunks = (b[i : i + n] for i in range(0, len(b), n)) + int_list = [] + for chunk in byte_chunks: + value = int.from_bytes(chunk, byteorder="little") + int_list.append(value) + return int_list + + +def pretty_name(name: str, sep: str = " ", prettifier: Callable = str.lower): + ABBREVIATIONS = set(("BLOB", "FW", "FWID", "ID", "URI")) + name_parts = [] + for part in name.split("_"): + if part in ABBREVIATIONS: + name_parts.append(part.upper()) + else: + name_parts.append(prettifier(part)) + return " ".join(name_parts) + + +def validation_error_msg(error_msg, error_hint, add_hint): + sep = " " if error_msg else "" + if add_hint: + final_error_msg = f"{error_msg}{sep}{error_hint}" + else: + final_error_msg = f"{error_msg}" + return final_error_msg + + +def addr_to_int(addr): + if isinstance(addr, int): + return addr + elif isinstance(addr, str): + if re.fullmatch(ADDR_PATTERN, addr): + return int(addr, 0) + else: + return None + else: + raise TypeError("Address can be constructed from str and int only.") + + +def is_nw_pdu_size_valid(nw_pdu_size): + return NW_PDU_LEN_MIN <= nw_pdu_size <= NW_PDU_LEN_MAX + + +def validate_nw_pdu_size(nw_pdu_size, error_msg="", add_hint=True): + if not is_nw_pdu_size_valid(nw_pdu_size): + error_hint = ( + f"Network PDU size shall be in [{NW_PDU_LEN_MIN},{NW_PDU_LEN_MAX}] " + f"range but it is {nw_pdu_size}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_address_valid( + addr, + unassigned=True, + unicast=True, + virtual=True, + group_general=True, + group_fixed=True, +): + addr = addr_to_int(addr) + if addr is None: + return False + return ( + (unassigned and is_unassigned_address(addr)) + or (unicast and is_unicast_address(addr)) + or (virtual and is_virtual_address(addr)) + or (group_general and is_general_group_address(addr)) + or (group_fixed and is_fixed_group_address(addr)) + ) + + +def is_unassigned_address(addr): + addr = addr_to_int(addr) + if addr is None: + return False + return addr == UNASSIGNED_ADDR + + +def is_unicast_address(addr): + addr = addr_to_int(addr) + if addr is None: + return False + return UNICAST_ADDR_MIN <= addr <= UNICAST_ADDR_MAX + + +def is_multicast_address(addr): + addr = addr_to_int(addr) + if addr is None: + return False + return is_virtual_address(addr) or is_group_address(addr) + + +def validate_unicast_address(addr, error_msg="", add_hint=True): + if not is_unicast_address(addr): + error_hint = ( + f"Unicast address shall be in [0x{UNICAST_ADDR_MIN:04X}," + f"0x{UNICAST_ADDR_MAX:04X}] range but it is {addr}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def validate_multicast_address(addr, error_msg="", add_hint=True): + if not is_multicast_address(addr): + error_hint = ( + f"Multicast address shall be in [0x{MULTICAST_ADDR_MIN:04X}," + f"0x{MULTICAST_ADDR_MAX:04X}] range but it is {addr}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_virtual_address(addr): + addr = addr_to_int(addr) + if addr is None: + return False + return VIRTUAL_ADDR_MIN <= addr < VIRTUAL_ADDR_MAX + + +def is_group_address(addr): + addr = addr_to_int(addr) + if addr is None: + return False + return GROUP_ADDR_MIN <= addr <= GROUP_ADDR_MAX + + +def validate_group_address(addr, error_msg="", add_hint=True): + if not is_group_address(addr): + error_hint = ( + f"Group address shall be in [0x{GROUP_ADDR_MIN:04X}," + f"0x{GROUP_ADDR_MAX:04X}] range but it is {addr}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_general_group_address(addr): + addr = addr_to_int(addr) + if addr is None: + return False + return GROUP_ADDR_MIN <= addr < FIXED_GROUP_ADDR_BASE + + +def is_fixed_group_address(addr): + addr = addr_to_int(addr) + if addr is None: + return False + return FIXED_GROUP_ADDR_BASE <= addr <= MAX_ADDR + + +def is_virtual_label_uuid_valid(label_uuid: bytes): + return isinstance(label_uuid, bytes) and (len(label_uuid) == VIRTUAL_LABEL_UUID_LEN) + + +def validate_virtual_label_uuid(label_uuid: bytes, error_msg="", add_hint=True): + if not is_virtual_label_uuid_valid(label_uuid): + error_hint = ( + f"Virtual address label UUID shall be {VIRTUAL_LABEL_UUID_LEN} bytes" + f"long binary data but it is {label_uuid}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_appkey_index_valid(appkey_index): + return 0 <= appkey_index <= APPKEY_INDEX_MAX + + +def validate_appkey_index(appkey_index, error_msg="", add_hint=True): + if not is_appkey_index_valid(appkey_index): + error_hint = ( + f"Appkey index shall be in [0,0x{APPKEY_INDEX_MAX:03x}] range " + f"but it is {appkey_index}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_company_id_valid(cid): + return 0 <= cid <= 0xFFFF + + +def validate_company_id(cid, error_msg="", add_hint=True): + if not is_company_id_valid(cid): + error_hint = f"Company ID shall be in [0,0xFFFF] range but it is 0x{cid:04X}." + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_fwid_version_info_valid(version_info): + if not isinstance(version_info, bytes): + raise TypeError( + f"The FWID version info shall be bytes but " + f"it is {version_info.__class__.__name__}." + ) + return len(version_info) <= MAX_FWID_VERSION_INFO_LEN + + +def validate_fwid_version_info(version_info, error_msg="", add_hint=True): + if not is_fwid_version_info_valid(version_info): + error_hint = ( + f"FWID version info shall not be longer than {MAX_FWID_VERSION_INFO_LEN} " + f"but it is {len(version_info)} bytes." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_raw_fwid_valid(fwid_bytes): + if not isinstance(fwid_bytes, bytes): + raise TypeError( + f"The raw FWID shall have bytes type but " + f"it is {fwid_bytes.__class__.__name__}." + ) + return MIN_FWID_LEN <= len(fwid_bytes) <= MAX_FWID_LEN + + +def validate_raw_fwid(fwid_bytes, error_msg="", add_hint=True): + if not is_raw_fwid_valid(fwid_bytes): + error_hint = ( + f"The length of raw FWID shall be in [{MIN_FWID_LEN},{MAX_FWID_LEN}] " + f"range but it is {len(fwid_bytes)} bytes." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_ttl_valid(ttl): + return (ttl == 0) or (2 <= ttl < TTL_MAX) or (ttl == TTL_USE_DEFAULT) + + +def validate_ttl(ttl, error_msg="", add_hint=True): + if not is_ttl_valid(ttl): + error_hint = ( + f"The TTL shall be 0 or in [2,0x{TTL_MAX:02x}] range or " + f"it shall be {TTL_USE_DEFAULT} but it is {ttl}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_pub_credentials_valid(cred): + return cred in (PUB_CRED_NORMAL, PUB_CRED_FRIENDSHIP) + + +def validate_pub_credentials(cred, error_msg="", add_hint=True): + if not is_pub_credentials_valid(cred): + error_hint = ( + f"The publication credential shall be 0 (normal) or 1 (friendship) " + f"but it is {cred}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_pub_period_ms_valid(period_ms): + return (period_ms == PUB_PERIOD_MS_DISABLED) or ( + (PUB_PERIOD_MS_MIN <= period_ms <= PUB_PERIOD_MS_MAX) + ) + + +def validate_pub_period_ms(period_ms, error_msg="", add_hint=True): + if not is_pub_period_ms_valid(period_ms): + error_hint = ( + f"The publication period (ms) shall be in [{PUB_PERIOD_MS_MIN}," + f"{PUB_PERIOD_MS_MAX}] range or it shall be {PUB_PERIOD_MS_DISABLED} " + f"but it is {period_ms}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_pub_retransmit_count_valid(pub_retransmit_count): + return 0 <= pub_retransmit_count <= PUB_RETRANSMIT_COUNT_MAX + + +def validate_pub_retransmit_count(pub_retransmit_count, error_msg="", add_hint=True): + if not is_pub_retransmit_count_valid(pub_retransmit_count): + error_hint = ( + f"The publication retransmit count shall be in " + f"[0,{PUB_RETRANSMIT_COUNT_MAX}] range but it is " + f"{pub_retransmit_count}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_pub_retransmit_interval_ms_valid(retransmit_int_ms): + return (retransmit_int_ms == PUB_RETRANSMIT_INT_MS_DISABLED) or ( + (PUB_RETRANSMIT_INT_MS_MIN <= retransmit_int_ms <= PUB_RETRANSMIT_INT_MS_MAX) + ) + + +def validate_pub_retransmit_interval_ms( + pub_retransmit_int_ms, error_msg="", add_hint=True +): + if not is_pub_retransmit_interval_ms_valid(pub_retransmit_int_ms): + error_hint = ( + f"The publication retransmit interval (ms) shall be in " + f"[{PUB_RETRANSMIT_INT_MS_MIN},{PUB_RETRANSMIT_INT_MS_MAX}] range " + f"or it shall be {PUB_RETRANSMIT_INT_MS_DISABLED} " + f"but it is {pub_retransmit_int_ms}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_name_valid(name): + return re.fullmatch(NAME_PATTERN, name) + + +def validate_name(name, error_msg="", add_hint=True): + if not is_name_valid(name): + error_hint = ( + f"Name shall contain letter, underscore and numeric characters only" + f'and it shall not start with a number but is is "{name}".' + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def is_uuid_valid(uuid): + if isinstance(uuid, bytes): + return len(uuid) == 16 + elif isinstance(uuid, str): + return re.fullmatch(UUID_PATTERN, uuid) + else: + return False + + +def is_fw_index_valid(fw_index: int): + return isinstance(fw_index, int) and (0 <= fw_index <= 0xFF) + + +def validate_fw_index(fw_index: int, error_msg="", add_hint=True): + if not is_fw_index_valid(fw_index): + error_hint = ( + f"Firmware index shall be in [0,0x{FW_INDEX_MAX:03x}] range " + f"but it is {fw_index}." + ) + err_text = validation_error_msg(error_msg, error_hint, add_hint) + raise ValueError(err_text) + + +def unprov_beacon_bearer_str(bearer): + if bearer == 0: + return "PB-ADV" + elif bearer == 1: + return "PB-GATT" + else: + return unknown_value(bearer) + + +def bd_addr_type_str(addr_type): + if addr_type == 1: + return "Random" + elif addr_type == 0: + return "Public" + else: + return unknown_value(addr_type) + + +def prov_failure_reason_str(reason): + reason2str = { + 0: "Link closed", + 1: "Invalid PDU", + 2: "Invalid PDU format", + 3: "Unexpected PDU", + 4: "Confirmation failed", + 5: "Out of resources", + 6: "Decryption failed", + 7: "Unexpected error", + 8: "Unable to assign address", + } + return reason2str.get(reason, unknown_value(reason)) + + +def dfu_calc_client_timeout(timeout_base: int, ttl: int) -> float: + return 10.0 * (timeout_base + 2) + 0.1 * ttl diff --git a/app/btmesh/example_host/btmesh_host_dfu/btmesh_host_dfu.py b/app/btmesh/example_host/btmesh_host_dfu/btmesh_host_dfu.py new file mode 100644 index 00000000000..770cdf7ea7b --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/btmesh_host_dfu.py @@ -0,0 +1,7 @@ +from app.cli import app_cli +from pathlib import Path + +MODULE_FOLDER = Path(__file__).parent.resolve() + +if __name__ == "__main__": + app_cli.main() diff --git a/app/btmesh/example_host/btmesh_host_dfu/gen/mdl_gen.py b/app/btmesh/example_host/btmesh_host_dfu/gen/mdl_gen.py new file mode 100644 index 00000000000..a522f09ee3c --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/gen/mdl_gen.py @@ -0,0 +1,289 @@ +# 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. + +import argparse +import os +import re +from string import Template + +# Assigned models numbers copied from the specification pdf +SIG_MODEL_ASSIGNED_NUMBERS = """ +Generic Admin Property Server 0x1011 +Generic Battery Client 0x100D +Generic Battery Server 0x100C +Generic Client Property Server 0x1014 +Generic Default Transition Time Client 0x1005 +Generic Default Transition Time Server 0x1004 +Generic Level Client 0x1003 +Generic Level Server 0x1002 +Generic Location Client 0x1010 +Generic Location Server 0x100E +Generic Location Setup Server 0x100F +Generic Manufacturer Property Server 0x1012 +Generic OnOff Client 0x1001 +Generic OnOff Server 0x1000 +Generic Power Level Client 0x100B +Generic Power Level Server 0x1009 +Generic Power Level Setup Server 0x100A +Generic Power OnOff Client 0x1008 +Generic Power OnOff Server 0x1006 +Generic Power OnOff Setup Server 0x1007 +Generic Property Client 0x1015 +Generic User Property Server 0x1013 +Light CTL Client 0x1305 +Light CTL Server 0x1303 +Light CTL Setup Server 0x1304 +Light CTL Temperature Server 0x1306 +Light HSL Client 0x1309 +Light HSL Hue Server 0x130A +Light HSL Saturation Server 0x130B +Light HSL Server 0x1307 +Light HSL Setup Server 0x1308 +Light LC Client 0x1311 +Light LC Server 0x130F +Light LC Setup Server 0x1310 +Light Lightness Client 0x1302 +Light Lightness Server 0x1300 +Light Lightness Setup Server 0x1301 +Light xyL Client 0x130E +Light xyL Server 0x130C +Light xyL Setup Server 0x130D +Scene Client 0x1205 +Scene Server 0x1203 +Scene Setup Server 0x1204 +Scheduler Client 0x1208 +Scheduler Server 0x1206 +Scheduler Setup Server 0x1207 +Sensor Client 0x1102 +Sensor Server 0x1100 +Sensor Setup Server 0x1101 +Time Client 0x1202 +Time Server 0x1200 +Time Setup Server 0x1201 +BLOB Transfer Client 0x1401 +BLOB Transfer Server 0x1400 +Firmware Distribution Client 0x1405 +Firmware Distribution Server 0x1404 +Firmware Update Client 0x1403 +Firmware Update Server 0x1402 +Bridge Configuration Client 0x0009 +Bridge Configuration Server 0x0008 +Configuration Client 0x0001 +Configuration Server 0x0000 +Directed Forwarding Configuration Client 0x0007 +Directed Forwarding Configuration Server 0x0006 +Health Client 0x0003 +Health Server 0x0002 +Large Composition Data Client 0x0013 +Large Composition Data Server 0x0012 +Mesh Private Beacon Client 0x000B +Mesh Private Beacon Server 0x000A +On-Demand Private Proxy Client 0x000D +On-Demand Private Proxy Server 0x000C +Opcodes Aggregator Client 0x0011 +Opcodes Aggregator Server 0x0010 +Remote Provisioning Client 0x0005 +Remote Provisioning Server 0x0004 +SAR Configuration Client 0x000F +SAR Configuration Server 0x000E +Solicitation PDU RPL Configuration Client 0x0015 +Solicitation PDU RPL Configuration Server 0x0014 +""" + +VENDOR_MODEL_ASSIGNED_NUMBERS = """ +Silabs Configuration Client 0x02FF 0xFFFC +Silabs Configuration Server 0x02FF 0xFFFD +""" + +DEFAULT_OUT_PATH = os.path.abspath( + os.path.join( + os.path.dirname(__file__), + "mdl.py", + ) +) + +TEMPLATE_STR = """import enum + +NAMED_MODEL_ID_TO_PRETTY_NAME = { +${id2pretty} +} + + +@enum.unique +class NamedModelID(enum.Enum): + @classmethod + def is_value_valid(cls, value): + value_valid = False + if isinstance(value, cls): + value_valid = True + elif isinstance(value, tuple) and len(value) == 2: + value_valid = True + elif isinstance(value, int): + value_valid = True + return value_valid + + @classmethod + def validate_value(cls, value): + if not cls.is_value_valid(value): + raise ValueError( + f"Invalid {cls.__class__.__name__} value ({type(value.__name__)})." + ) + + @classmethod + def value_to_tuple(cls, value): + cls.validate_value(value) + if isinstance(value, cls): + return value.value + if isinstance(value, tuple) and len(value) == 2: + return value + if isinstance(value, int): + return (0xFFFF, value) + + @classmethod + def value_exist(cls, value): + cls.validate_value(value) + value = cls.value_to_tuple(value) + try: + cls(value) + except ValueError: + return False + return True + + @classmethod + def get_pretty_name(cls, value, unknown_with_value=True): + value = cls.value_to_tuple(value) + if unknown_with_value: + return NAMED_MODEL_ID_TO_PRETTY_NAME.get(value, f"UNKNOWN {value}") + else: + return NAMED_MODEL_ID_TO_PRETTY_NAME.get(value, f"UNKNOWN") + + @staticmethod + def gen_pretty_name_id_pairs(): + for name, id in NAMED_MODEL_ID_TO_PRETTY_NAME.items(): + yield name, id + + @staticmethod + def gen_pretty_names(): + for pretty_name in NAMED_MODEL_ID_TO_PRETTY_NAME.values(): + yield pretty_name + + @classmethod + def is_name_valid(cls, name, ignore_case=True): + if ignore_case: + return (name.upper() in cls.__members__) + else: + return (name in cls.__members__) + + @classmethod + def get_name(cls, value, unknown_with_value=True): + try: + value = cls.value_to_tuple(value) + return cls(value).name + except ValueError: + if unknown_with_value: + return f"UNKNOWN ({value})" + else: + return f"UNKNOWN" + + @classmethod + def gen_names(cls): + for name in cls.__members__.keys(): + yield name + + @classmethod + def gen_name_id_pairs(cls): + for name, enum_const in cls.__members__.items(): + yield name, enum_const.value + + @classmethod + def get_id_by_name(cls, name, ignore_case=True): + name = name.upper() if ignore_case else name + return cls.__members__[name.upper()] + + @property + def pretty_name(self): + return NAMED_MODEL_ID_TO_PRETTY_NAME.get(self.value) + +${enumvals} +""" + + +def enum_name(pretty_name: str): + name = pretty_name.strip().upper() + name = name.replace(" ", "_") + name = name.replace("-", "_") + return name + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Creates python NamedModelID from constant data in this script. " + "The model name and identifier data shall be copied here from the BT Mesh " + "specification (assigned numbers)." + ) + parser.add_argument( + "-o", "--out", default=DEFAULT_OUT_PATH, help="Path of generated out file." + ) + parser.add_argument( + "-i", + "--indent", + type=int, + default=4, + help="Indentation space count in generated file.", + ) + args = parser.parse_args() + models = [] + for line in SIG_MODEL_ASSIGNED_NUMBERS.split("\n"): + line = line.strip() + match = re.fullmatch(r"([-\w ]+)(0x[0-9a-fA-F]+)", line) + if match: + name = match.group(1).strip() + model_id = int(match.group(2), 0) + models.append({"name": name, "vendor_id": 0xFFFF, "model_id": model_id}) + for line in VENDOR_MODEL_ASSIGNED_NUMBERS.split("\n"): + line = line.strip() + match = re.fullmatch(r"([-\w ]+)(0x[0-9a-fA-F]+)\s+(0x[0-9a-fA-F]+)", line) + if match: + name = match.group(1).strip() + vendor_id = int(match.group(2), 0) + model_id = int(match.group(3), 0) + models.append({"name": name, "vendor_id": vendor_id, "model_id": model_id}) + with open(args.out, mode="w") as out_file: + template = Template(TEMPLATE_STR) + enum_lines = [] + pretty_lines = [] + for mdl in models: + mdl_pretty_name, vendor_id, mdl_id = ( + mdl["name"], + mdl["vendor_id"], + mdl["model_id"], + ) + line = f" {enum_name(mdl_pretty_name)} = (0x{vendor_id:04X}, 0x{mdl_id:04X})" + enum_lines.append(line) + line = f' (0x{vendor_id:04X}, 0x{mdl_id:04X}): "{mdl_pretty_name}",' + pretty_lines.append(line) + text = template.substitute( + enumvals="\n".join(enum_lines), id2pretty="\n".join(pretty_lines) + ) + text = text.replace(" ", " " * args.indent) + out_file.write(text) + print(os.getcwd()) diff --git a/app/btmesh/example_host/btmesh_host_dfu/gen/slstatus_gen.py b/app/btmesh/example_host/btmesh_host_dfu/gen/slstatus_gen.py new file mode 100644 index 00000000000..7e149d0c493 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_dfu/gen/slstatus_gen.py @@ -0,0 +1,135 @@ +# 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. + +import argparse +import os +import re +import sys +from string import Template + +DEFAULT_SL_STATUS_H_PATH = os.path.abspath( + os.path.join( + os.path.dirname(__file__), + "../../../../../platform/common/inc/sl_status.h", + ) +) + +DEFAULT_OUT_PATH = os.path.join(os.path.dirname(__file__), "../bgapix/slstatus.py") + +TEMPLATE_STR = """# 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. + +# __ __ _ _ # +# \ \ / /_ _ _ __ _ __ (_)_ __ __ _| | # +# \ \ /\ / / _` | '__| '_ \| | '_ \ / _` | | # +# \ V V / (_| | | | | | | | | | | (_| |_| # +# \_/\_/ \__,_|_| |_| |_|_|_| |_|\__, (_) # +# |___/ # +# # +# This file is generated by btmesh_host_dfu/gen/slstatus_gen.py script. # + +import enum + + +@enum.unique +class SlStatus(enum.IntEnum): + @classmethod + def get_name(cls, value): + try: + return cls(value).name + except ValueError: + return "UNKNOWN_VALUE" + + @classmethod + def from_int(cls, value): + try: + return cls(value) + except ValueError: + return cls.UNKNOWN_VALUE + +${enumvals} + UNKNOWN_VALUE = 0xCAFEBABE +""" + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="Creates python enum from sl_status.h file." + ) + parser.add_argument( + "-p", "--path", default=DEFAULT_SL_STATUS_H_PATH, help="Path of sl_status.h" + ) + parser.add_argument( + "-o", "--out", default=DEFAULT_OUT_PATH, help="Path of generated out file." + ) + parser.add_argument( + "-i", + "--indent", + type=int, + default=4, + help="Indentation space count in generated file.", + ) + + args = parser.parse_args() + if not os.path.exists(args.path): + sys.exit(f"Specified {args.path} file does not exist.") + elif os.path.basename(args.path) != "sl_status.h": + sys.exit(f"Specified {args.path} is not sl_status.h.") + + status_pairs = [] + with open(args.path) as sl_status_h: + def_regex = r"^\s*#define\s+SL_STATUS_(\w+)\s*.*(0x\w+)" + for line in sl_status_h.readlines(): + match = re.match(def_regex, line) + if match: + status_name = match[1] + status_code = match[2] + if not status_name.endswith(("_SPACE", "SPACE_MASK")): + status_pairs.append((status_name, status_code)) + if status_pairs: + with open(args.out, mode="w") as out_file: + template = Template(TEMPLATE_STR) + enum_lines = [] + for status_name, status_code in status_pairs: + line = " " + status_name + " = " + status_code + enum_lines.append(line) + text = template.substitute(enumvals="\n".join(enum_lines)) + text = text.replace(" ", " " * args.indent) + out_file.write(text) diff --git a/app/btmesh/example_host/btmesh_host_empty/app.c b/app/btmesh/example_host/btmesh_host_empty/app.c new file mode 100644 index 00000000000..80bbb446724 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_empty/app.c @@ -0,0 +1,214 @@ +/***************************************************************************//** + * @file + * @brief Empty BTmesh NCP-host Example Project. + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +/* standard library headers */ +#include +#include +#include "app.h" +#include "ncp_host.h" +#include "app_log.h" +#include "app_assert.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" + +#include +#include +#include +#include "system.h" +#include "sl_bt_api.h" +#include "sl_btmesh_ncp_host.h" +#include "sl_bt_ncp_host.h" + +// Optstring argument for getopt. +#define OPTSTRING NCP_HOST_OPTSTRING "h" + +// Usage info. +#define USAGE "\n%s " NCP_HOST_USAGE " [-h]\n" + +// Options info. +#define OPTIONS \ + "\nOPTIONS\n" \ + NCP_HOST_OPTIONS \ + " -h Print this help message.\n" + +// This characteristic handle value has to match the value in gatt_db.h of +// NCP empty example running on the connected WSTK. +#define GATTDB_SYSTEM_ID 18 + +/**************************************************************************//** + * Application Init. + *****************************************************************************/ +void app_init(int argc, char *argv[]) +{ + sl_status_t sc; + int opt; + + // Process command line options. + while ((opt = getopt(argc, argv, OPTSTRING)) != -1) { + switch (opt) { + // Print help. + case 'h': + app_log(USAGE, argv[0]); + app_log(OPTIONS); + exit(EXIT_SUCCESS); + + // Process options for other modules. + default: + sc = ncp_host_set_option((char)opt, optarg); + if (sc != SL_STATUS_OK) { + app_log(USAGE, argv[0]); + exit(EXIT_FAILURE); + } + break; + } + } + + // Initialize NCP connection. + sc = ncp_host_init(); + if (sc == SL_STATUS_INVALID_PARAMETER) { + app_log(USAGE, argv[0]); + exit(EXIT_FAILURE); + } + app_assert_status(sc); + + SL_BTMESH_API_REGISTER(); + + app_log_info("Empty NCP-host initialised." APP_LOG_NEW_LINE); + app_log_info("Resetting NCP..." APP_LOG_NEW_LINE); + // Reset NCP to ensure it gets into a defined state. + // Once the chip successfully boots, boot event should be received. + sl_bt_system_reset(sl_bt_system_boot_mode_normal); + + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application init code here! // + // This is called once during start-up. // + ///////////////////////////////////////////////////////////////////////////// +} + +/**************************************************************************//** + * Application Process Action. + *****************************************************************************/ +void app_process_action(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application code here! // + // This is called infinitely. // + // Do not call blocking functions from here! // + ///////////////////////////////////////////////////////////////////////////// +} + +/**************************************************************************//** + * Application Deinit. + *****************************************************************************/ +void app_deinit(void) +{ + ncp_host_deinit(); + + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application deinit code here! // + // This is called once during termination. // + ///////////////////////////////////////////////////////////////////////////// +} + +/**************************************************************************//** + * Bluetooth stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Event coming from the Bluetooth stack. + *****************************************************************************/ +void sl_bt_on_event(sl_bt_msg_t *evt) +{ + sl_status_t sc; + + switch (SL_BT_MSG_ID(evt->header)) { + // ------------------------------- + // This event indicates the device has started and the radio is ready. + // Do not call any stack command before receiving this boot event! + case sl_bt_evt_system_boot_id: + + // Print boot message. + app_log_info("Bluetooth stack booted: v%d.%d.%d-b%d" APP_LOG_NEW_LINE, + evt->data.evt_system_boot.major, + evt->data.evt_system_boot.minor, + evt->data.evt_system_boot.patch, + evt->data.evt_system_boot.build); + + // Initialize Mesh stack in Node operation mode, + // wait for initialized event + app_log_info("Node init" APP_LOG_NEW_LINE); + sc = sl_btmesh_node_init(); + app_assert(sc == SL_STATUS_OK, + "[E: 0x%04x] Failed to init node\n", + (int)sc); + break; + + /////////////////////////////////////////////////////////////////////////// + // Add additional event handlers here as your application requires! // + /////////////////////////////////////////////////////////////////////////// + + // ------------------------------- + // Default event handler. + default: + break; + } +} + +/**************************************************************************//** + * Bluetooth Mesh stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Event coming from the Bluetooth Mesh stack. + *****************************************************************************/ +void sl_btmesh_on_event(sl_btmesh_msg_t *evt) +{ + sl_status_t sc; + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_node_initialized_id: + if (!evt->data.evt_node_initialized.provisioned) { + // The Node is now initialized, + // start unprovisioned Beaconing using PB-ADV and PB-GATT Bearers + app_log_info("Initialized" APP_LOG_NEW_LINE); + sc = sl_btmesh_node_start_unprov_beaconing(0x3); + app_assert(sc == SL_STATUS_OK, + "[E: 0x%04x] Failed to start unprovisioned beaconing\n", + (int)sc); + } + break; + + /////////////////////////////////////////////////////////////////////////// + // Add additional event handlers here as your application requires! // + /////////////////////////////////////////////////////////////////////////// + + // ------------------------------- + // Default event handler. + default: + break; + } +} diff --git a/app/btmesh/example_host/btmesh_host_empty/app.h b/app/btmesh/example_host/btmesh_host_empty/app.h new file mode 100644 index 00000000000..373fe8159c6 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_empty/app.h @@ -0,0 +1,57 @@ +/***************************************************************************//** + * @file + * @brief Empty BTmesh NCP-host Example Project. + ******************************************************************************* + * # License + * Copyright 2021 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 APP_H +#define APP_H + +#ifdef __cplusplus +extern "C" { +#endif + +/**************************************************************************//** + * Application Init. + *****************************************************************************/ +void app_init(int argc, char *argv[]); + +/**************************************************************************//** + * Application Process Action. + *****************************************************************************/ +void app_process_action(void); + +/**************************************************************************//** + * Application Deinit. + *****************************************************************************/ +void app_deinit(void); + +#ifdef __cplusplus +}; +#endif + +#endif // APP_H diff --git a/app/btmesh/example_host/btmesh_host_empty/main.c b/app/btmesh/example_host/btmesh_host_empty/main.c new file mode 100644 index 00000000000..2bef04f4eac --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_empty/main.c @@ -0,0 +1,52 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ +#include "system.h" +#include "app.h" + +int main(int argc, char *argv[]) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(argc, argv); + + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + } +} diff --git a/app/btmesh/example_host/btmesh_host_empty/makefile b/app/btmesh/example_host/btmesh_host_empty/makefile new file mode 100644 index 00000000000..e5b09f63e70 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_empty/makefile @@ -0,0 +1,48 @@ +################################################################################ +# General project settings # +################################################################################ + +PROJECTNAME = btmesh_host_empty +SDK_DIR = ../../../.. + + +################################################################################ +# Components # +# # +# After setting up the toolchain, components can contribute to the project by # +# appending items to the project variables like INCLUDEPATHS or C_SRC. # +################################################################################ + +include $(SDK_DIR)/app/bluetooth/component_host/toolchain.mk +include $(SDK_DIR)/app/bluetooth/component_host/app_log.mk +include $(SDK_DIR)/app/bluetooth/component_host/app_assert.mk +include $(SDK_DIR)/app/bluetooth/component_host/app_signal.mk +include $(SDK_DIR)/app/btmesh/component_host/ncp_host_btmesh.mk + + +################################################################################ +# Include paths # +################################################################################ + +override INCLUDEPATHS += . \ +$(SDK_DIR)/app/bluetooth/common_host/system \ +$(SDK_DIR)/platform/common/inc \ +$(SDK_DIR)/protocol/bluetooth/inc + + +################################################################################ +# Input files # +################################################################################ + +override C_SRC += \ +$(SDK_DIR)/app/bluetooth/common_host/system/system.c \ +$(SDK_DIR)/app/bluetooth/common_host/system/sl_btmesh.c \ +app.c \ +main.c + + +################################################################################ +# Target rules # +################################################################################ + +include $(SDK_DIR)/app/bluetooth/component_host/targets.mk diff --git a/app/btmesh/example_host/btmesh_host_provisioner/README.txt b/app/btmesh/example_host/btmesh_host_provisioner/README.txt new file mode 100644 index 00000000000..09864bed546 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_provisioner/README.txt @@ -0,0 +1,72 @@ +Host Provisioner Example + +The Host Provisioner example demonstrates the ability of using a NCP node connected to a PC as a provisioner. +Through this node the user can provision, configure and reset other nodes. +The BT Mesh network is created and handled by the NCP node so network management options are available as well. + +Components required: +1. btmesh_host_provisioner host example +Example host application for demonstrating provisioner capabilities. + +2. btmesh_ncp_empty target sample app +NCP Target sample app on the provisioner node. +Note: EFR32xG22 boards are not supported + + +Prerequisites for setting up the communication between host and target: + - Must have a POSIX/Mac, MSYS2 or MinGW64 platform + + +Steps for setting up the communication: +1. NCP target + – btmesh_ncp_empty Target sample app must be programmed to the EFR32 chip: + - Connect your WSTK to the PC + - Open Simplicity Studio (with Bt Mesh SDK installed) + - Select btmesh_ncp_empty Target sample app from Demos to flash your EFR32 device + +2. btmesh_host_provisioner + - Open a new terminal (MinGW64 terminal on Windows) + - Navigate to app/btmesh/example_host/btmesh_host_provisioner in Bt Mesh SDK + - Build the sample app: + 'make' builds the command-line application. + The following additional build parameters are supported: + 'UI=1' adds UI mode on top of the CLI application + 'RPR=1' adds remote provisioning support + 'CBP=1' adds certificate-based provisioning support + - Run the sample app with appropriate parameters (e.g. ./exe/btmesh_host_provisioner.exe -u /dev/ttyS4 --scan) + 1st parameter: -u selects connecting to an UART serial port. Use -t for TCP/IP connection. + note: on Windows, MinGW64 uses COMx, POSIX systems require /dev/ttyX + 2nd parameter: --scan selects the scanning function to check if there are unprovisioned beaconing nodes available + If CBP support is added, UI mode will automatically use CBP to provision all capable nodes. + If command line mode is used, an extra --cbp parameter indicates that CBP shall be used. If this extra + parameter is omitted, a normal provisioning procedure will follow even if the host is built with CBP enabled. + + +Usage: +The Host Provisioner example has two modes: CLI and UI. +1. UI mode + The UI mode is accessible by starting the program without any Host Provisioner-related arguments, + e.g. btmesh_host_provisioner.exe -u COM5. + The user can choose from several commands in one session without exiting. In this case the host example's + database stores information about the nodes in the BT Mesh network and those found during scanning. + This database is updated while the program is running, but it is not guaranteed that it will be the same in the next run. + + On Windows using MinGW64, winpty might be required for user input handling. In this case + just run the program as e.g. 'winpty exe/btmesh_host_provisioner.exe -u COM5' + +2. CLI mode + The CLI mode is one command per run, selected by the appropriate parameter. + In this scenario the host database is not preserved between runs, but node identifiers (e.g. UUID) stay + the same provided the affected node has not been reset in the meantime. This means that e.g. a UUID + found in a scanning session can be used in a provisioning session. + + The following options are available for CLI mode: + --scan Scan for unprovisioned beaconing devices + --provision Provision and configure the selected device + --nodelist List all nodes known to the provisioner (i.e. present in the provisioner's device database (DDB) + --nodeinfo Print DCD information about the selected device + --remove Unprovision the selected device + --key-refresh Refresh the network key and app key + --reset Reset the provisioner to its factory state. It is recommended to remove all known devices + before resetting + --help Print a help message about usage \ No newline at end of file diff --git a/app/btmesh/example_host/btmesh_host_provisioner/app.c b/app/btmesh/example_host/btmesh_host_provisioner/app.c new file mode 100644 index 00000000000..6f493276f51 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_provisioner/app.c @@ -0,0 +1,425 @@ +/***************************************************************************//** +* @file +* @brief BT Mesh Host Provisioner Example Project - CLI mode handler. +******************************************************************************* +* # 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. +* +*******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes + +// standard library headers +#include +#include +#include +#include +#include +#include + +#include "app.h" +#include "ncp_host.h" +#include "app_log.h" +#include "app_assert.h" +#include "sl_common.h" +#include "sl_bt_api.h" +#include "sl_btmesh_api.h" +#include "sl_bt_api.h" +#include "sl_btmesh_ncp_host.h" +#include "sl_bt_ncp_host.h" +#include "sl_ncp_evt_filter_common.h" + +#include "btmesh_app_prov.h" +#include "btmesh_prov.h" +#include "btmesh_conf.h" + +#ifdef SL_CATALOG_APP_REMOTE_PROV_PRESENT +#ifdef SL_CATALOG_APP_PROV_CBP_PRESENT +#include "btmesh_app_prov_cbp.h" +#endif // SL_CATALOG_APP_PROV_CBP_PRESENT +#include "btmesh_app_remote_prov.h" +#include "btmesh_remote_prov.h" +#else +#ifdef SL_CATALOG_APP_PROV_CBP_PRESENT +#include "btmesh_app_prov_cbp.h" +#endif // SL_CATALOG_APP_PROV_CBP_PRESENT +#include "app_prov_only.h" +#endif // SL_CATALOG_APP_REMOTE_PROV_PRESENT + +// ----------------------------------------------------------------------------- +// Macros + +// This characteristic handle value has to match the value in gatt_db.h of +// NCP empty example running on the connected WSTK. +#define GATTDB_SYSTEM_ID 18 + +// ----------------------------------------------------------------------------- +// Static Variables + +// ----------------------------------------------------------------------------- +// Static Function Declarations + +/***************************************************************************//** +* Filter not needed NCP events +* +* @param[in] event_id ID of the event to filter +* @return Status of the stack call +*******************************************************************************/ +static sl_status_t app_add_user_event_filter(const uint32_t event_id); + +/***************************************************************************//** +* Command line long options struct array build +* +* @param[in] long_options Options struct array address +*******************************************************************************/ +static void btmesh_app_build_long_options(struct option *long_options); + +// ----------------------------------------------------------------------------- +// Function definitions + +/**************************************************************************//** + * Application Init. + *****************************************************************************/ +void app_init(int argc, char *argv[]) +{ + sl_status_t sc = SL_STATUS_FAIL; + int opt; + prov_mode_t app_mode = PROV_UI_MODE; + static struct option long_options[LONG_OPT_SIZE]; + + app_log_filter_threshold_set(APP_LOG_LEVEL_INFO); + + btmesh_app_build_long_options(long_options); + + int option_index = 0; + // Process command line options. + while ((opt = getopt_long(argc, argv, OPTSTRING, long_options, &option_index)) != -1) { + switch (opt) { + // Print help. + case '?': + case 'h': + app_log(USAGE, argv[0]); + app_log(OPTIONS); + exit(EXIT_SUCCESS); + + // Process options for other modules + default: + sc = btmesh_app_prov_init(opt, optarg); + + if (sc != SL_STATUS_OK) { + sc = btmesh_cbp_on_check_cmd_options(opt, optarg); + } + + if (sc != SL_STATUS_OK) { + sc = btmesh_app_on_check_cmd_options(opt, optarg); + } + + if (sc != SL_STATUS_OK) { + sc = ncp_host_set_option((char)opt, optarg); + if (sc != SL_STATUS_OK) { + app_log(USAGE, argv[0]); + exit(EXIT_FAILURE); + } + } else { + app_mode = PROV_CMD_LINE_MODE; + } + break; + } + } + + //set the app_prov mode + btmesh_app_prov_set_mode(app_mode); + + // Initialize NCP connection + sc = ncp_host_init(); + if (sc == SL_STATUS_INVALID_PARAMETER) { + app_log(USAGE, argv[0]); + exit(EXIT_FAILURE); + } + app_assert_status(sc); + + SL_BTMESH_API_REGISTER(); + + app_log_info("Empty NCP-host initialised." APP_LOG_NEW_LINE); + app_log_info("Resetting NCP..." APP_LOG_NEW_LINE); + // Reset NCP to ensure it gets into a defined state + // Once the chip successfully boots, boot event should be received + sl_bt_system_reset(sl_bt_system_boot_mode_normal); + + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application init code here! // + // This is called once during start-up // + ///////////////////////////////////////////////////////////////////////////// +} + +/**************************************************************************//** + * Application Process Action. + *****************************************************************************/ +void app_process_action(void) +{ + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application code here! // + // This is called infinitely. // + // Do not call blocking functions from here! // + ///////////////////////////////////////////////////////////////////////////// +} + +/**************************************************************************//** + * Application Deinit. + *****************************************************************************/ +void app_deinit(void) +{ + ncp_host_deinit(); + + ///////////////////////////////////////////////////////////////////////////// + // Put your additional application deinit code here! // + // This is called once during termination. // + ///////////////////////////////////////////////////////////////////////////// +} + +/**************************************************************************//** + * Bluetooth stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Event coming from the Bluetooth stack. + *****************************************************************************/ +void sl_bt_on_event(sl_bt_msg_t *evt) +{ + sl_status_t sc; + + switch (SL_BT_MSG_ID(evt->header)) { + // ------------------------------- + // This event indicates the device has started and the radio is ready. + // Do not call any stack command before receiving this boot event! + case sl_bt_evt_system_boot_id: + { + // Filter legacy and new scanner report events as it would send a message + // every 5 ms and clog UART while scanning for unprovisioned nodes + sc = app_add_user_event_filter(sl_bt_evt_scanner_scan_report_id); + app_assert_status_f(sc, "Failed to enable filtering on the target" APP_LOG_NEW_LINE); + + sc = app_add_user_event_filter(sl_bt_evt_scanner_legacy_advertisement_report_id); + app_assert_status_f(sc, "Failed to enable filtering on the target" APP_LOG_NEW_LINE); + + sc = app_add_user_event_filter(sl_bt_evt_scanner_extended_advertisement_report_id); + app_assert_status_f(sc, "Failed to enable filtering on the target" APP_LOG_NEW_LINE); + + // Print boot message. + app_log_info("Bluetooth stack booted: v%d.%d.%d-b%d" APP_LOG_NEW_LINE, + evt->data.evt_system_boot.major, + evt->data.evt_system_boot.minor, + evt->data.evt_system_boot.patch, + evt->data.evt_system_boot.build); + + // Initialize Mesh stack in Provisioner mode, + // wait for initialized event + app_log_info("Provisioner init" APP_LOG_NEW_LINE); + sc = sl_btmesh_prov_init(); + app_assert_status_f(sc, "Failed to init provisioner\n"); + sc = btmesh_prov_init_provisioning_records(); + app_assert_status_f(sc, "Failed to init provisioning records\n"); + break; + } + + /////////////////////////////////////////////////////////////////////////// + // Add additional event handlers here as your application requires! // + /////////////////////////////////////////////////////////////////////////// + + // ------------------------------- + // Default event handler. + default: + break; + } +} + +/**************************************************************************//** + * Bluetooth Mesh stack event handler. + * This overrides the dummy weak implementation. + * + * @param[in] evt Event coming from the Bluetooth Mesh stack. + *****************************************************************************/ +void sl_btmesh_on_event(sl_btmesh_msg_t *evt) +{ + switch (SL_BT_MSG_ID(evt->header)) { + case sl_btmesh_evt_prov_initialized_id: { + // Device successfully initialized in provisioner mode + sl_btmesh_evt_prov_initialized_t *initialized_evt; + initialized_evt = (sl_btmesh_evt_prov_initialized_t *)&(evt->data); + + app_log_info("Network initialized" APP_LOG_NEW_LINE); + app_log_info("Networks: %x" APP_LOG_NEW_LINE, initialized_evt->networks); + app_log_info("Address : %x" APP_LOG_NEW_LINE, initialized_evt->address); + app_log_info("IV Index: %x" APP_LOG_NEW_LINE, initialized_evt->iv_index); + + break; + } + case sl_btmesh_evt_prov_initialization_failed_id: { + // Device failed to initialize in provisioner mode + sl_btmesh_evt_prov_initialization_failed_t *initialization_failed_evt; + initialization_failed_evt = (sl_btmesh_evt_prov_initialization_failed_t *)&(evt->data); + uint16_t res = initialization_failed_evt->result; + if (0 != res) { + app_log_status_error_f(res, "Failed to initialize provisioning node" APP_LOG_NEW_LINE); + } + break; + } + + /////////////////////////////////////////////////////////////////////////// + // Add additional event handlers here as your application requires! // + /////////////////////////////////////////////////////////////////////////// + + // ------------------------------- + // Default event handler. + default: + break; + } +} + +//------------------------------------- +// Helper functions +void btmesh_app_build_long_options(struct option *long_options) +{ + struct option *source_options = NULL; + + memset(long_options, 0, LONG_OPT_SIZE * sizeof(struct option)); + btmesh_app_prov_get_cmd_options(&source_options); + memcpy(long_options, source_options, PROV_OPTLENGTH * sizeof(struct option)); + + btmesh_app_on_build_cmd_options(long_options + PROV_OPTLENGTH); + btmesh_cbp_on_build_cmd_options(long_options + PROV_OPTLENGTH + REMOTE_PROV_OPTLENGTH); +} + +void app_parse_uuid(char *input, size_t length, uuid_128 *parsed_uuid) +{ + // Sanity check, do nothing if length is incorrect + if (UUID_LEN_WITHOUT_SEPARATORS == length + || UUID_LEN_WITH_SEPARATORS == length) { + for (size_t count = 0; count < 16; count++) { + sscanf(input, "%2hhx", &parsed_uuid->data[count]); + // If data is in AA:BB:CC format move the pointer by 3 bytes and + // skip the separator, otherwise move by 2 bytes + input += (UUID_LEN_WITHOUT_SEPARATORS == length ? 2 : 3); + } + } +} + +void app_parse_address(char *input, size_t length, uint16_t *address) +{ + // Sanity check, do nothing if length is incorrect + if (ADDRESS_LEN_WITHOUT_PREFIX == length + || ADDRESS_LEN_WITH_PREFIX == length) { + if (ADDRESS_LEN_WITH_PREFIX == length) { + // Discard prefix if address is in 0x1234 format + input += 2; + } + sscanf(input, "%4hx", address); + } +} + +sl_status_t app_add_user_event_filter(const uint32_t event_id) +{ + sl_status_t sc = SL_STATUS_OK; + uint8_t user_data[SL_NCP_EVT_FILTER_CMD_ADD_LEN]; + + user_data[0] = SL_NCP_EVT_FILTER_CMD_ADD_ID; + user_data[1] = event_id >> 0; + user_data[2] = event_id >> 8; + user_data[3] = event_id >> 16; + user_data[4] = event_id >> 24; + + sc = sl_bt_user_manage_event_filter(SL_NCP_EVT_FILTER_CMD_ADD_LEN, user_data); + return sc; +} + +// ----------------------------------------------------------------------------- +// Callbacks + +void btmesh_prov_on_provision_failed_evt(uint8_t reason, uuid_128 uuid) +{ + command_state_t prov_command_state; + + btmesh_app_prov_get_command(NULL, &prov_command_state); + + if (prov_command_state == IN_PROGRESS) { + btmesh_app_prov_set_command_state(FINISHED); + } + + btmesh_app_on_provision_failed(); +} + +void app_on_node_configuration_end(uint16_t netkey_index, + uint16_t server_address) +{ + command_state_t prov_command_state; + + btmesh_app_prov_get_command(NULL, &prov_command_state); + + if (prov_command_state == IN_PROGRESS) { + btmesh_app_prov_set_command_state(FINISHED); + } + + btmesh_app_on_node_configuration_end(); +} + +//------------------------------------- +// Weak function definitions +SL_WEAK void btmesh_app_on_provision_failed(void) +{ +} + +SL_WEAK void btmesh_app_on_node_configuration_end(void) +{ +} + +SL_WEAK void btmesh_app_on_build_cmd_options(struct option *long_options) +{ + (void)long_options; +} + +SL_WEAK void btmesh_cbp_on_build_cmd_options(struct option *long_options) +{ + (void)long_options; +} + +SL_WEAK sl_status_t btmesh_app_on_check_cmd_options(int cmd_opt, char *cmd_optarg) +{ + (void)cmd_opt; + (void)cmd_optarg; + + return SL_STATUS_NOT_FOUND; +} + +SL_WEAK sl_status_t btmesh_cbp_on_check_cmd_options(int cmd_opt, char *cmd_optarg) +{ + (void)cmd_opt; + (void)cmd_optarg; + + return SL_STATUS_NOT_FOUND; +} + +SL_WEAK sl_status_t btmesh_prov_init_provisioning_records(void) +{ + return SL_STATUS_OK; +} diff --git a/app/btmesh/example_host/btmesh_host_provisioner/app.h b/app/btmesh/example_host/btmesh_host_provisioner/app.h new file mode 100644 index 00000000000..7f7d9586d6b --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_provisioner/app.h @@ -0,0 +1,183 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Host Provisioner Example Project. + ******************************************************************************* + * # 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 APP_H +#define APP_H + +#include +#include +#include "sl_btmesh_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/// Default netkey index +#define APP_NETKEY_IDX 0 +/// UUID length in AABBCCDD format +#define UUID_LEN_WITHOUT_SEPARATORS 32 +/// UUID length in AA:BB:CC:DD format +#define UUID_LEN_WITH_SEPARATORS 47 +/// Address length in 1234 format +#define ADDRESS_LEN_WITHOUT_PREFIX 4 +/// Address length in 0x1234 format +#define ADDRESS_LEN_WITH_PREFIX 6 +/// 2 seconds timer for provisioner reset +#define RESET_TIMER_MS 2000 +/// 5 seconds timer for scanning unprovisioned devices +#define SCAN_TIMER_MS 5000 +/// 5 seconds timer for remote scanning unprovisioned devices +#define REMOTE_PROV_SCANNING_TIMEOUT (uint8_t)5 +/// Attention timer value, in seconds +#define REMOTE_PROV_ATTENTION_TIMER (uint8_t)0 +/// Default phase timeout for key refresh in seconds used in UI mode +#define DEFAULT_PHASE_TIMEOUT_S 120 +/// Advertising Provisioning Bearer +#define HOST_PROV_PB_ADV 0x1 +/// GATT Provisioning Bearer +#define HOST_PROV_PB_GATT 0x2 +/// Remote Provisioning Bearer +#define HOST_PROV_PB_REMOTE 0x3 + +typedef enum command_e{ + NONE, + SCAN, + PROVISION, + NODELIST, + NODEINFO, + REMOVE_NODE, + KEY_REFRESH, + KEY_EXPORT, + RESET, + REMOTE_SERVERLIST, + REMOTE_SCAN, + REMOTE_PROVISION +} command_t; + +typedef enum command_state_e{ + INIT, + START, + IN_PROGRESS, + FINISHED +} command_state_t; + +/**************************************************************************//** + * Application Init. + *****************************************************************************/ +void app_init(int argc, char *argv[]); + +/**************************************************************************//** + * Application Process Action. + *****************************************************************************/ +void app_process_action(void); + +/**************************************************************************//** + * Application Deinit. + *****************************************************************************/ +void app_deinit(void); + +/***************************************************************************//** + * Callback to inform when the node configuration process ends + * + * @param[in] netkey_index Netkey index of the configured node + * @param[in] server_address Primary subnet address of the configured node + ******************************************************************************/ +void app_on_node_configuration_end(uint16_t netkey_index, + uint16_t server_address); + +/***************************************************************************//** + * Parse UUID from the given string + * + * @param[in] input The string to parse + * @param[in] length Length of the string + * @param[out] parsed_uuid The struct to fill with the parsed data + ******************************************************************************/ +void app_parse_uuid(char *input, size_t length, uuid_128 *parsed_uuid); + +/***************************************************************************//** + * Parse primary element address from the given string + * + * @param[in] input The string to parse + * @param[in] length Length of the string + * @param[out] address The variable to fill with the parsed data + ******************************************************************************/ +void app_parse_address(char *input, size_t length, uint16_t *address); + +/**************************************************************************//** + * Callback to inform about provisioning failed event + * + *******************************************************************************/ +void btmesh_app_on_provision_failed(void); + +/**************************************************************************//** + * Callback to inform about configuration end event + * + *******************************************************************************/ +void btmesh_app_on_node_configuration_end(void); + +/**************************************************************************//** + * Callback to copy options array + * + * @param[out] long_options Destination addres for options array + *******************************************************************************/ +void btmesh_app_on_build_cmd_options(struct option *long_options); + +/**************************************************************************//** + * Callback to copy options array for CBP + * + * @param[out] long_options Destination addres for options array + *******************************************************************************/ +void btmesh_cbp_on_build_cmd_options(struct option *long_options); + +/**************************************************************************//** + * Callback to check unknown command options + * + * @param[in] cmd_opt Command option + * @param[in] cmd_optarg Command argument + * @retval SL_STATUS_OK if command option was recognized + * SL_STATUS_NOT_FOUND if command is unknown + *******************************************************************************/ +sl_status_t btmesh_app_on_check_cmd_options(int cmd_opt, char *cmd_optarg); + +/**************************************************************************//** + * Callback to check CBP-related command options + * + * @param[in] cmd_opt Command option + * @param[in] cmd_optarg Command argument + * @retval SL_STATUS_OK if command option was recognized + * SL_STATUS_NOT_FOUND if command is unknown + *******************************************************************************/ +sl_status_t btmesh_cbp_on_check_cmd_options(int cmd_opt, char *cmd_optarg); + +#ifdef __cplusplus +}; +#endif + +#endif // APP_H diff --git a/app/btmesh/example_host/btmesh_host_provisioner/app_conf.c b/app/btmesh/example_host/btmesh_host_provisioner/app_conf.c new file mode 100644 index 00000000000..d42ffb93cdd --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_provisioner/app_conf.c @@ -0,0 +1,749 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Host Configurator Application Code + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +#include + +#include "app.h" +#include "app_conf.h" + +#include "sl_status.h" +#include "sl_btmesh_api.h" +#include "app_log.h" +#include "app_assert.h" + +#include "btmesh_app_prov.h" +#include "btmesh_conf.h" +#include "btmesh_prov.h" +#include "btmesh_db.h" + +/***************************************************************************//** + * @addtogroup btmesh_host_provisioner BT Mesh Host Provisioner Example + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_host_provisioner_conf \ + * BT Mesh Host Provisioner Example - Node configuration + * @{ + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Macros + +/// Local log new line shortcut definition +#define NL APP_LOG_NEW_LINE + +/// Company identifier of Silicon Labs +#define SILABS_COMPANY_ID 0x02ff + +/// Product identifier of Silicon Labs NCP Empty example +#define SILABS_PRODUCT_ID_NCP_EMPTY_EXAMPLE 0x0000 + +/// Product identifier of Silicon Labs SoC Empty example +#define SILABS_PRODUCT_ID_SOC_EMPTY_EXAMPLE 0x0001 + +/// Product identifier of Silicon Labs SoC HSL Light example +#define SILABS_PRODUCT_ID_HSL_EXAMPLE 0x0002 + +/// Product identifier of Silicon Labs SoC Light example +#define SILABS_PRODUCT_ID_LIGHT_EXAMPLE 0x0003 + +/// Product identifier of Silicon Labs SoC Sensor Client example +#define SILABS_PRODUCT_ID_SENSOR_CLIENT_EXAMPLE 0x0004 + +/// Product identifier of Silicon Labs SoC Sensor Server example +#define SILABS_PRODUCT_ID_SENSOR_SERVER_EXAMPLE 0x0005 + +/// Product identifier of Silicon Labs SoC Switch example +#define SILABS_PRODUCT_ID_SWITCH_EXAMPLE 0x0006 + +/// Product identifier of Silicon Labs SoC Low Power Switch example +#define SILABS_PRODUCT_ID_LOW_POWER_SWITCH_EXAMPLE 0x0007 + +/// BT Mesh DCD page to query +#define APP_CONF_DCD_PAGE 0 + +/// Default value of model publication group address +#define APP_CONF_PUB_ADDR 0xC000 +/// Default value of model publication application key index +#define APP_CONF_PUB_APPKEY_IDX 0 +/// Default model publication friendship credentials +/// - 0: normal credentials +/// - 1: frienship credentials +#define APP_CONF_PUB_CREDENTIALS 0 +/// Default value of model publication TTL (Time to Live) +#define APP_CONF_PUB_TTL 5 +/// Default value of model publication period +#define APP_CONF_PUB_PERIOD_MS 0 +/// Default value of model publication retransmission count (0-7 range) +#define APP_CONF_PUB_RETRANSMIT_COUNT 0 +/// Default value of model publication retransmission interval in milliseconds +/// Range: 0 to 1600 ms with 50 ms resolution +#define APP_CONF_PUB_RETRANSMIT_INTERVAL_MS 0 +/// Default value of model subscription group address +/// Note: Only one group address is added to model subscription list in this +/// example however a model is able to subscribe to multiple group addresses. +/// The maximum length of the model subscription list is configured by the +/// SL_BTMESH_CONFIG_MAX_SUBSCRIPTIONS (sl_btmesh_config.h) define on each node. +#define APP_CONF_SUB_ADDR 0xC000 + +/// Default value of beacon state +#define APP_CONF_BEACON_ACTIVE 1 + +/// Default value of node default TTL +#define APP_CONF_DEFAULT_TTL 5 + +/// Default value of node proxy feature state +#define APP_CONF_PROXY_ACTIVE 1 + +/// Default value of node relay feature state +#define APP_CONF_RELAY_ACTIVE 1 +/// Default value of node relay retransmission count (0-7 range) +#define APP_CONF_RELAY_RETRANSMIT_COUNT 0 +/// Default value of node relay retransmission interval in milliseconds +/// Range: 0 to 320 ms with 10 ms resolution +#define APP_CONF_RELAY_RETRANSMIT_INT_MS 0 + +/// Default value of node network transmission count (1-8 range) +#define APP_CONF_NW_TRANSMIT_COUNT 1 +/// Default value of node network transmission interval in milliseconds +/// Range: 0 to 320 ms with 10 ms resolution +#define APP_CONF_NW_TRANSMIT_INT_MS 0 + +/// Default value of node friend feature state +#define APP_CONF_FRIEND_ACTIVE 1 + +// ----------------------------------------------------------------------------- +// Enums + +/// State of configurator application +typedef enum { + APP_CONF_STATE_IDLE, ///< No configuration procedure is in progress + APP_CONF_STATE_SUCCESS, ///< Configuration procedure was successful + APP_CONF_STATE_FAILURE, ///< Configuration procedure failed + APP_CONF_STATE_GET_DCD, ///< Configuration procedure get DCD phase + APP_CONF_STATE_NODE_CONFIG, ///< Configuration procedure configuration phase + APP_CONF_STATE_COUNT, ///< Number of configurator states +} app_conf_state_t; + +// ----------------------------------------------------------------------------- +// Static Function Declarations + +/***************************************************************************//** + * Execute configurator application state transition. + * + * @param[in] next_state Next state of configurator app + * + * The configurator application state is set. + * If the configuration procedure ends then @ref app_on_node_configuration_end + * and @ref app_ui_on_node_configuration_end functions are called to notify the + * main application logic. + ******************************************************************************/ +static void app_conf_state_transition(app_conf_state_t next_state); + +/***************************************************************************//** + * Return the string representation of the Silicon Labs example product id. + * + * @param[in] product_id Product identifier of Silicon Labs example + * @returns Name of Silicon Labs example belonging to the passed product id. + * @retval "Unknown" If the product id is not recognized. + * + * It is guaranteed that a valid string is returned which makes easier to use + * this function with snprintf like functions because no NULL check is necessary. + * This function shall be called if the company identifier paired with the + * product identifier is the company id of Silicon Labs. + ******************************************************************************/ +static const char *btmesh_example_product_id_to_string(uint16_t product_id); + +/***************************************************************************//** + * Create configuration job with default configuration values. + * + * @param[in] netkey_index Network key index of node which shall be configured + * @param[in] server_address Server address of node which shall be configured + * @returns Created configuration job. + * @retval NULL If the configuration job creation fails. + ******************************************************************************/ +static btmesh_conf_job_t *create_node_conf_job_default(uint16_t netkey_index, + uint16_t server_address); + +/***************************************************************************//** + * Configuration job status notification handler. + * + * @param[in] job Configuration job with changed status + * + * This callback is added to the configuration job which is submitted for + * execution to the BT Mesh configurator component (btmesh_conf). + * If status of the configuration job changes then this callback is called. + ******************************************************************************/ +static void app_conf_on_job_notification(const btmesh_conf_job_t *job); + +/***************************************************************************//** + * Print node information. + * + * @param[in] node Pointer to the node + * + * If DCD of the node is not available in the BT Mesh database then the DCD is + * queried first and it is printed afterwards otherwise the node information is + * printed based on the cached data. + * + * The @ref btmesh_app_prov_on_nodeinfo_end and @ref app_ui_on_nodeinfo_end + * functions are called when the node information procedure ends to notify the + * main application logic. + ******************************************************************************/ +static void app_conf_print_nodeinfo(const btmesh_db_node_t *const node); + +/***************************************************************************//** + * Node information notification handler. + * + * @param[in] job Configuration job with changed status + * + * This callback is added to the configuration job with get DCD configuration + * task which is submitted for execution to the BT Mesh configurator component + * (btmesh_conf). It provides status of the DCD query. + * + * The @ref btmesh_app_prov_on_nodeinfo_end and @ref app_ui_on_nodeinfo_end + * functions are called to notify the main application logic about the end of + * node information procedure. + ******************************************************************************/ +static void app_conf_nodeinfo_on_job_notification(const btmesh_conf_job_t *job); + +/***************************************************************************//** + * Print Device Composition Data based on the stored value in BT Mesh database + * + * @param[in] node Pointer to the node + ******************************************************************************/ +static void app_conf_print_nodeinfo_dcd(const btmesh_db_node_t *const node); + +/***************************************************************************//** + * Finish node information procedure + * + * The @ref btmesh_app_prov_on_nodeinfo_end and @ref app_ui_on_nodeinfo_end + * functions are called to notify the main application logic about the end of + * node information procedure. + ******************************************************************************/ +static void app_conf_finish_nodeinfo(void); + +// ----------------------------------------------------------------------------- +// Static Variables + +/// Configurator application data structure +static struct { + app_conf_state_t state; ///< Configurator application state + uint16_t netkey_index; ///< Network key index of configuration procedure + uint16_t server_address; ///< Server address of configuration procedure +} app_conf = { .state = APP_CONF_STATE_IDLE }; + +// ----------------------------------------------------------------------------- +// Function definitions - Node Configuration + +sl_status_t app_conf_start_node_configuration(uint16_t netkey_index, + uint16_t server_address) +{ + sl_status_t sc; + if ((APP_CONF_STATE_IDLE == app_conf.state) + || (APP_CONF_STATE_SUCCESS == app_conf.state) + || (APP_CONF_STATE_FAILURE == app_conf.state)) { + app_conf.netkey_index = netkey_index; + app_conf.server_address = server_address; + + // Get DCD of the node first in order to figure out the company and product + // identifier and determine what kind of models are present on the node and + // which elements these models belong to. + // The app_conf_on_job_notification callback is called when the status of + // the DCD get configuration procedure changes. + sc = btmesh_conf_dcd_get(netkey_index, + server_address, + APP_CONF_DCD_PAGE, + app_conf_on_job_notification); + + if (SL_STATUS_OK == sc) { + app_conf_state_transition(APP_CONF_STATE_GET_DCD); + app_log("Configuration of node (netkey_idx=%d,addr=0x%04x) is started." NL, + app_conf.netkey_index, + app_conf.server_address); + } else { + app_log_status_error_f(sc, + "Failed to start dcd get procedure to node " + "(netkey_idx=%d,addr=0x%04x)." NL, + netkey_index, + server_address); + } + } else { + // Another node configuration procedure is already in progress + sc = SL_STATUS_INVALID_STATE; + } + return sc; +} + +static void app_conf_state_transition(app_conf_state_t next_state) +{ + // Make sure that next_state parameter is valid + app_assert(next_state < APP_CONF_STATE_COUNT, + "Invalid app configurator state (%d)." NL, + next_state); + + switch (next_state) { + case APP_CONF_STATE_IDLE: + case APP_CONF_STATE_SUCCESS: + case APP_CONF_STATE_FAILURE: + // If the node configuration procedure ends then the main application logic + // shall be notified. + app_on_node_configuration_end(app_conf.netkey_index, + app_conf.server_address); + break; + + default: + break; + } + app_conf.state = next_state; +} + +static btmesh_conf_job_t *create_node_conf_job_default(uint16_t netkey_index, + uint16_t server_address) +{ + sl_status_t sc; + btmesh_conf_task_t *new_task, *last_task, *first_task; + + // The configuration job and its tasks are created based on the device + // composition data of the node in BT Mesh database. + btmesh_db_node_t *node = btmesh_db_node_get_by_addr(server_address); + app_assert(NULL != node, + "Node (addr=0x%04x) does not exist in database." NL, + server_address); + app_assert(false != node->dcd_available, + "DCD of node (addr=0x%04x) is not available." NL, + server_address); + + // If the specified node has Silicon Labs company identifier then print + // example name which runs on the node. + if (SILABS_COMPANY_ID == node->dcd.company_id) { + app_log("Node (netkey_idx=%d,addr=0x%04x) runs %s example." NL, + netkey_index, + server_address, + btmesh_example_product_id_to_string(node->dcd.product_id)); + } + + // Create task to set beacon + new_task = btmesh_conf_task_beacon_set_create(APP_CONF_BEACON_ACTIVE); + app_assert(NULL != new_task, "Failed to create configuration task." NL); + first_task = new_task; + last_task = new_task; + + // Create task to set default TTL + new_task = btmesh_conf_task_default_ttl_set_create(APP_CONF_DEFAULT_TTL); + sc = btmesh_conf_task_set_next_on_success(last_task, new_task); + app_assert_status_f(sc, "Failed to create configuration task." NL); + last_task = new_task; + + // If a node supports the proxy feature then create a task to turn the proxy + // feature on + if (false != node->dcd.feature_proxy) { + new_task = btmesh_conf_task_gatt_proxy_set_create(APP_CONF_PROXY_ACTIVE); + sc = btmesh_conf_task_set_next_on_success(last_task, new_task); + app_assert_status_f(sc, "Failed to create configuration task." NL); + last_task = new_task; + } + + // If a node supports the relay feature then create a task to turn the relay + // feature on + if (false != node->dcd.feature_relay) { + new_task = btmesh_conf_task_relay_set_create(APP_CONF_RELAY_ACTIVE, + APP_CONF_RELAY_RETRANSMIT_COUNT, + APP_CONF_RELAY_RETRANSMIT_INT_MS); + sc = btmesh_conf_task_set_next_on_success(last_task, new_task); + app_assert_status_f(sc, "Failed to create configuration task." NL); + last_task = new_task; + } + + // Create task to set network transmit parameters + new_task = btmesh_conf_task_network_transmit_set_create(APP_CONF_NW_TRANSMIT_COUNT, + APP_CONF_NW_TRANSMIT_INT_MS); + sc = btmesh_conf_task_set_next_on_success(last_task, new_task); + app_assert_status_f(sc, "Failed to create configuration task." NL); + last_task = new_task; + + // If a node supports the friend feature then create a task to turn the friend + // feature on + if (false != node->dcd.feature_friend) { + new_task = btmesh_conf_task_friend_set_create(APP_CONF_FRIEND_ACTIVE); + sc = btmesh_conf_task_set_next_on_success(last_task, new_task); + app_assert_status_f(sc, "Failed to create configuration task." NL); + last_task = new_task; + } + + // Create task to add application key to node + // Note: Application key is created when the network is created in app.c + // by calling the btmesh_prov_create_appkey function + new_task = btmesh_conf_task_appkey_add_create(APP_CONF_APPKEY_INDEX, + netkey_index); + sc = btmesh_conf_task_set_next_on_success(last_task, new_task); + app_assert_status_f(sc, "Failed to create configuration task." NL); + last_task = new_task; + + // Iterate over each model on every elements of the node + for (uint16_t elem_idx = 0; elem_idx < node->dcd.element_count; elem_idx++) { + const btmesh_db_element_t *const element = &node->dcd.elements[elem_idx]; + for (uint16_t model_idx = 0; model_idx < element->model_count; model_idx++) { + const btmesh_db_model_id_t *const model_id = &element->models[model_idx]; + btmesh_conf_sig_model_attr_bitmask_t attributes; + // WARNING! This function binds the same application key and use the same + // group address for publication and subscription and configures every + // BT Mesh SIG model on the node. + // This is not recommended in general due to following reasons: + // - Different application keys can be used for different functionalities + // to have multiple security domains + // - Some models on specific nodes should be added to separate group + // (for example BT Mesh Lighting models on nodes of a room could be + // added to its own group) + // - It might not be necessary to configure every models on a node. + // The node might support multiple usecases and therefore different + // models shall be configured based on the specific usecase. + // These are quite usecase specific considerations so this default + // implementation uses only one appkey and one group address for + // demonstration purposes. + + if (MESH_SPEC_VENDOR_ID != model_id->vendor) { + // The configuration of vendor model is skipped because it is unknown + // whether it supports publication or not. + // This code can be extended to configure the vendor model. + continue; + } + + // Get model attributes to determine if the model supports appkey binding, + // publication or subscription + sl_status_t model_attr_status = + btmesh_conf_get_sig_model_attributes(model_id->model, &attributes); + + if (SL_STATUS_OK == model_attr_status) { + if (attributes & BTMESH_CONF_SIG_MODEL_SUPPORTS_APPKEY_BINDING) { + // If the model supports application key binding then create task + // to bind an application key + new_task = btmesh_conf_task_model_bind_create(elem_idx, + model_id->vendor, + model_id->model, + APP_CONF_APPKEY_INDEX); + sc = btmesh_conf_task_set_next_on_success(last_task, new_task); + app_assert_status_f(sc, "Failed to create configuration task." NL); + last_task = new_task; + } + if (attributes & BTMESH_CONF_SIG_MODEL_SUPPORTS_PUBLICATION) { + // If the model supports publication then create task to set the + // publication parameters + new_task = btmesh_conf_task_model_pub_set_create(elem_idx, + model_id->vendor, + model_id->model, + APP_CONF_PUB_ADDR, + APP_CONF_PUB_APPKEY_IDX, + APP_CONF_PUB_CREDENTIALS, + APP_CONF_PUB_TTL, + APP_CONF_PUB_PERIOD_MS, + APP_CONF_PUB_RETRANSMIT_COUNT, + APP_CONF_PUB_RETRANSMIT_INTERVAL_MS); + sc = btmesh_conf_task_set_next_on_success(last_task, new_task); + app_assert_status_f(sc, "Failed to create configuration task." NL); + last_task = new_task; + } + if (attributes & BTMESH_CONF_SIG_MODEL_SUPPORTS_SUBSCRIPTION) { + // If the model supports subscription then create task to add a group + // address to the subscription list of the model + new_task = btmesh_conf_task_model_sub_add_create(elem_idx, + model_id->vendor, + model_id->model, + APP_CONF_SUB_ADDR); + sc = btmesh_conf_task_set_next_on_success(last_task, new_task); + app_assert_status_f(sc, "Failed to create configuration task." NL); + last_task = new_task; + } + } else { + app_log_status_error_f(model_attr_status, + "Failed to get btmesh model (0x%04x) attributes." NL, + model_id->model); + } + } + } + + // Create a configuration job with the created task tree. + // The app_conf_on_job_notification callback is called when the status of the + // DCD get configuration procedure changes. + return btmesh_conf_job_create_default(netkey_index, + server_address, + first_task, + app_conf_on_job_notification); +} + +static void app_conf_on_job_notification(const btmesh_conf_job_t *job) +{ + switch (app_conf.state) { + case APP_CONF_STATE_GET_DCD: + { + if (BTMESH_CONF_JOB_RESULT_SUCCESS == job->result) { + app_log("DCD query of node (netkey_idx=%d,addr=0x%04x) completed." NL, + app_conf.netkey_index, + app_conf.server_address); + // Create configuration job with configuration tasks + btmesh_conf_job_t *config_job = + create_node_conf_job_default(app_conf.netkey_index, + app_conf.server_address); + + app_assert(NULL != config_job, + "Failed to create node configuration job." + "(netkey_idx=%d,addr=0x%04x)." NL, + app_conf.netkey_index, + app_conf.server_address); + + // Submit the configuration job for execution to the BT Mesh + // Configurator component. + sl_status_t config_job_status = btmesh_conf_submit_job(config_job); + + if (SL_STATUS_OK == config_job_status) { + app_conf_state_transition(APP_CONF_STATE_NODE_CONFIG); + } else { + app_log_status_error_f(config_job_status, + "Failed to submit configuration job" + "(netkey_idx=%d,addr=0x%04x)." NL, + app_conf.netkey_index, + app_conf.server_address); + app_conf_state_transition(APP_CONF_STATE_FAILURE); + } + } else { + // Failed to get the DCD of the node + app_log_error("DCD query of node (netkey_idx=%d,addr=0x%04x) failed." NL, + app_conf.netkey_index, + app_conf.server_address); + app_conf_state_transition(APP_CONF_STATE_FAILURE); + } + break; + } + + case APP_CONF_STATE_NODE_CONFIG: + if (BTMESH_CONF_JOB_RESULT_SUCCESS == job->result) { + app_log("Configuration of node (netkey_idx=%d,addr=0x%04x) is successful." NL, + app_conf.netkey_index, + app_conf.server_address); + app_conf_state_transition(APP_CONF_STATE_SUCCESS); + } else { + app_log("Configuration of node (netkey_idx=%d,addr=0x%04x) is failed." NL, + app_conf.netkey_index, + app_conf.server_address); + app_conf_state_transition(APP_CONF_STATE_FAILURE); + } + break; + + default: + break; + } +} + +// ----------------------------------------------------------------------------- +// Function definitions - Node Information + +void app_conf_print_nodeinfo_by_addr(uint16_t server_address) +{ + const btmesh_db_node_t *node = btmesh_db_node_get_by_addr(server_address); + if (NULL == node) { + app_log_error("Node is not found in btmesh_db." NL); + app_conf_finish_nodeinfo(); + } else { + app_conf_print_nodeinfo(node); + } +} + +void app_conf_print_nodeinfo_by_uuid(uuid_128 uuid) +{ + const btmesh_db_node_t *node = btmesh_db_node_get_by_uuid(uuid); + if (NULL == node) { + app_log_error("Node is not found in btmesh_db." NL); + app_conf_finish_nodeinfo(); + } else { + app_conf_print_nodeinfo(node); + } +} + +void app_conf_print_nodeinfo_by_id(uint16_t id) +{ + uint16_t node_cnt = 0; + uuid_128 provisioner_uuid = { 0 }; + sl_status_t sc = sl_btmesh_node_get_uuid(&provisioner_uuid); + if (SL_STATUS_OK != sc) { + app_log_warning("Could not get provisioner UUID" NL); + } + btmesh_db_node_t *node; + sl_slist_node_t *node_list = btmesh_db_get_node_list(); + SL_SLIST_FOR_EACH_ENTRY(node_list, node, btmesh_db_node_t, list_elem) { + if (0 == memcmp(&provisioner_uuid, &node->prov.uuid, sizeof(uuid_128))) { + // Skip the provisioner itself as self-configuration is not supported + continue; + } + if (true == node->node_available) { + if (node_cnt == id) { + break; + } + node_cnt++; + } + } + if (NULL == node) { + app_log_error("Node is not found in btmesh_db." NL); + app_conf_finish_nodeinfo(); + } else { + app_conf_print_nodeinfo(node); + } +} + +static void app_conf_print_nodeinfo(const btmesh_db_node_t *const node) +{ + app_assert(NULL != node, "Node pointer is NULL." NL); + uint16_t netkey_index = node->primary_subnet->netkey_index; + uint16_t server_address = node->prov.prim_address; + + if (false == node->dcd_available) { + // The DCD of the node have not been read from the remote node, + // therefore it shall be read now + sl_status_t sc = btmesh_conf_dcd_get(netkey_index, + server_address, + APP_CONF_DCD_PAGE, + app_conf_nodeinfo_on_job_notification); + if (SL_STATUS_OK != sc) { + app_log_status_error_f(sc, + "Failed to start dcd get procedure to node " + "(netkey_idx=%d,addr=0x%04x)." NL, + netkey_index, + server_address); + app_conf_finish_nodeinfo(); + } + } else { + app_conf_print_nodeinfo_dcd(node); + app_conf_finish_nodeinfo(); + } +} + +static void app_conf_nodeinfo_on_job_notification(const btmesh_conf_job_t *job) +{ + btmesh_db_node_t *node = btmesh_db_node_get_by_addr(job->server_address); + // The control can't get here if the node does not exists in the btmesh + // database so an assert is used to check it instead of logging + app_assert(NULL != node, + "Node (netkey_idx=%d,addr=0x%04x) does not exist in btmesh_db." NL, + job->enc_netkey_index, + job->server_address); + + if (BTMESH_CONF_JOB_RESULT_SUCCESS == job->result) { + app_conf_print_nodeinfo_dcd(node); + } else { + app_log_error("DCD query of node (netkey_idx=%d,addr=0x%04x) failed." NL, + job->enc_netkey_index, + job->server_address); + } + app_conf_finish_nodeinfo(); +} + +static void app_conf_finish_nodeinfo(void) +{ + btmesh_app_prov_on_nodeinfo_end(); +} + +static void app_conf_print_nodeinfo_dcd(const btmesh_db_node_t *const node) +{ + app_log("Node 0x%04x information:" NL, node->prov.prim_address); + if (SILABS_COMPANY_ID == node->dcd.company_id) { + app_log("Company id: 0x%04x-%s" NL, + node->dcd.company_id, + "Silicon Labs"); + app_log("Product id: 0x%04x-%s" NL, + node->dcd.product_id, + btmesh_example_product_id_to_string(node->dcd.product_id)); + } else { + app_log("Company id: 0x%04x" NL, node->dcd.company_id); + app_log("Product id: 0x%04x" NL, node->dcd.product_id); + } + app_log("Version id: 0x%04x" NL, node->dcd.version_id); + app_log("Min replay prot list length: %u" NL, node->dcd.min_replay_prot_list_len); + app_log("Features:" NL); + app_log(" -Relay: %u" NL, node->dcd.feature_relay); + app_log(" -Proxy: %u" NL, node->dcd.feature_proxy); + app_log(" -Friend: %u" NL, node->dcd.feature_friend); + app_log(" -LPN: %u" NL, node->dcd.feature_low_power); + app_log("Elements: (count=%u)" NL, node->dcd.element_count); + for (uint16_t elem_idx = 0; elem_idx < node->dcd.element_count; elem_idx++) { + const btmesh_db_element_t *const element = &node->dcd.elements[elem_idx]; + app_log(" -Element %u:" NL, elem_idx); + app_log(" -Address: 0x%04x" NL, element->address); + app_log(" -Location: %u" NL, element->location); + app_log(" -Models: (count=%u)" NL, element->model_count); + for (uint16_t mdl_idx = 0; mdl_idx < element->model_count; mdl_idx++) { + const btmesh_db_model_id_t *const model_id = &element->models[mdl_idx]; + if (MESH_SPEC_VENDOR_ID == model_id->vendor) { + // SIG model + app_log(" -SIG model: 0x%04x-%s" NL, + model_id->model, + btmesh_conf_sig_model_id_to_string(model_id->model)); + } else { + // Vendor model + app_log(" -Vendor (0x%04x) model: 0x%04x" NL, + model_id->vendor, + model_id->model); + } + } + } +} + +// ----------------------------------------------------------------------------- +// Helper functions + +static const char *btmesh_example_product_id_to_string(uint16_t product_id) +{ + // Each Silicon Labs BT Mesh example has its own unique product identifier. + // The product ID of the example can be found in the following file of + // Simplicity Studio project: config/btmeshconf/dcd_config.btmeshconf + switch (product_id) { + case SILABS_PRODUCT_ID_NCP_EMPTY_EXAMPLE: + return "btmesh_ncp_empty"; + case SILABS_PRODUCT_ID_SOC_EMPTY_EXAMPLE: + return "btmesh_soc_empty"; + case SILABS_PRODUCT_ID_HSL_EXAMPLE: + return "btmesh_soc_hsl"; + case SILABS_PRODUCT_ID_LIGHT_EXAMPLE: + return "btmesh_soc_light"; + case SILABS_PRODUCT_ID_SENSOR_CLIENT_EXAMPLE: + return "btmesh_soc_sensor_client"; + case SILABS_PRODUCT_ID_SENSOR_SERVER_EXAMPLE: + return "btmesh_soc_sensor_server"; + case SILABS_PRODUCT_ID_SWITCH_EXAMPLE: + return "btmesh_soc_switch"; + case SILABS_PRODUCT_ID_LOW_POWER_SWITCH_EXAMPLE: + return "btmesh_soc_switch_low_power"; + default: + return "Unknown"; + } +} + +/** @} (end addtogroup btmesh_host_provisioner_conf) */ +/** @} (end addtogroup btmesh_host_provisioner) */ diff --git a/app/btmesh/example_host/btmesh_host_provisioner/app_conf.h b/app/btmesh/example_host/btmesh_host_provisioner/app_conf.h new file mode 100644 index 00000000000..7cea3be1350 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_provisioner/app_conf.h @@ -0,0 +1,121 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Host Configurator Application Code + ******************************************************************************* + * # License + * Copyright 2021 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 APP_CONF_H +#define APP_CONF_H + +#include +#include "sl_status.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/***************************************************************************//** + * @addtogroup btmesh_host_provisioner BT Mesh Host Provisioner Example + * @{ + ******************************************************************************/ + +/***************************************************************************//** + * @addtogroup btmesh_host_provisioner_conf \ + * BT Mesh Host Provisioner Example - Node configuration + * @{ + ******************************************************************************/ + +/// Default application key index +#define APP_CONF_APPKEY_INDEX 0 + +/***************************************************************************//** + * Start node configuration procedure + * + * @param[in] netkey_index Network key used to encrypt the config requests + * @param[in] server_address Destination node primary element address + * @returns Status of node configuration start. + * @retval SL_STATUS_OK If node configuration is started. + * @retval SL_STATUS_INVALID_STATE If BT Mesh configurator is not initialized + * or node configuration is already in progress. + * @retval SL_STATUS_ALLOCATION_FAILED If allocation of job or task is failed. + ******************************************************************************/ +sl_status_t app_conf_start_node_configuration(uint16_t netkey_index, + uint16_t server_address); + +/***************************************************************************//** + * Print node information by server address + * + * @param[in] server_address Primary element address of the node + * + * If DCD of the node is not available in the BT Mesh database then the DCD is + * queried first and it is printed afterwards otherwise the node information is + * printed based on the cached data. + * + * The @ref btmesh_app_prov_on_nodeinfo_end and @ref app_ui_on_nodeinfo_end + * functions are called when the node information procedure ends to notify the + * main application logic. + ******************************************************************************/ +void app_conf_print_nodeinfo_by_addr(uint16_t server_address); + +/***************************************************************************//** + * Print node information by uuid + * + * @param[in] uuid UUID of the node + * + * If DCD of the node is not available in the BT Mesh database then the DCD is + * queried first and it is printed afterwards otherwise the node information is + * printed based on the cached data. + * + * The @ref btmesh_app_prov_on_nodeinfo_end and @ref app_ui_on_nodeinfo_end + * functions are called when the node information procedure ends to notify the + * main application logic. + ******************************************************************************/ +void app_conf_print_nodeinfo_by_uuid(uuid_128 uuid); + +/***************************************************************************//** + * Print node information by list identifier + * + * @param[in] id List ID of the node + * + * If DCD of the node is not available in the BT Mesh database then the DCD is + * queried first and it is printed afterwards otherwise the node information is + * printed based on the cached data. + * + * The @ref btmesh_app_prov_on_nodeinfo_end and @ref app_ui_on_nodeinfo_end + * functions are called when the node information procedure ends to notify the + * main application logic. + ******************************************************************************/ +void app_conf_print_nodeinfo_by_id(uint16_t id); + +/** @} (end addtogroup btmesh_host_provisioner_conf) */ +/** @} (end addtogroup btmesh_host_provisioner) */ + +#ifdef __cplusplus +}; +#endif + +#endif // APP_CONF_H diff --git a/app/btmesh/example_host/btmesh_host_provisioner/app_prov_only.h b/app/btmesh/example_host/btmesh_host_provisioner/app_prov_only.h new file mode 100644 index 00000000000..3bf3fe7c203 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_provisioner/app_prov_only.h @@ -0,0 +1,70 @@ +/***************************************************************************//** + * @file + * @brief BT Mesh Host Provisioner command line build only. + ******************************************************************************* + * # License + * Copyright 2021 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 APP_PROV_ONLY_H +#define APP_PROV_ONLY_H + +#ifdef __cplusplus +extern "C" { +#endif + +// If CBP is not used, define its macros +#ifndef SL_CATALOG_APP_PROV_CBP_PRESENT +#define CBP_OPTLENGTH 0 +#define CBP_OPTSTRING +#define CBP_USAGE +#define CBP_OPTIONS +#endif + +// Remote provisioning is not used if this header is included +#define REMOTE_PROV_OPTLENGTH 0 + +// Size of long options struct array size +#define LONG_OPT_SIZE PROV_OPTLENGTH + CBP_OPTLENGTH + LAST_OPTION_ELEMENT + +// Optstring argument for getopt. +#define OPTSTRING NCP_HOST_OPTSTRING PROV_OPTSTRING CBP_OPTSTRING "h" + +// Usage info. +#define USAGE "\n%s " NCP_HOST_USAGE PROV_USAGE CBP_USAGE " [-h]\n" + +// Options info. +#define OPTIONS \ + "\nConnection options\n" \ + NCP_HOST_OPTIONS \ + PROV_OPTIONS \ + CBP_OPTIONS \ + " -h Print this help message.\n" + +#ifdef __cplusplus +}; +#endif + +#endif // APP_PROV_ONLY_H diff --git a/app/btmesh/example_host/btmesh_host_provisioner/btmesh_host_provisioner.code-workspace b/app/btmesh/example_host/btmesh_host_provisioner/btmesh_host_provisioner.code-workspace new file mode 100644 index 00000000000..513e5df9c7e --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_provisioner/btmesh_host_provisioner.code-workspace @@ -0,0 +1,122 @@ +{ + "folders": [ + { + "name": "btmesh_host_provisioner", + "path": "." + }, + { + "name": "btmesh/common_host", + "path": "../../common_host" + }, + { + "name": "bluetooth/common_host", + "path": "../../../bluetooth/common_host" + }, + ], + "extensions": { + "recommendations": [ + "ms-vscode.cpptools-extension-pack", + ] + }, + "settings": { + "MSYS2_PATH": "c:/msys64/", + "SDK_PATH": "../../../../", + "C_Cpp.default.includePath": [ + "${workspaceFolder:btmesh_host_provisioner}/**", + "${config:SDK_PATH}/app/common/util/**", + "${config:SDK_PATH}/app/btmesh/common_host/**", + "${config:SDK_PATH}/app/bluetooth/common_host/**", + "${config:SDK_PATH}/app/bluetooth/common/**", + "${config:SDK_PATH}/protocol/bluetooth/inc", + "${config:SDK_PATH}/platform/common/inc", + "${config:MSYS2_PATH}/mingw64/**" + ], + "C_Cpp.default.cStandard": "c11", + "C_Cpp.default.cppStandard": "c++14", + "C_Cpp.default.intelliSenseMode": "gcc-x64", + "C_Cpp.default.compilerPath": "gcc", + "terminal.integrated.profiles.windows":{ + "Msys MinGW64": { + "env": { + "CHERE_INVOKING":"1", + "MSYSTEM": "MINGW64", + "MSYS2_PATH_TYPE": "inherit" + }, + "path": "${config:MSYS2_PATH}/usr/bin/bash.exe", + "args": [ "-login", "-i" ] + } + }, + "terminal.integrated.defaultProfile.windows": "Msys MinGW64", + "files.associations": { + "*.slcp": "yaml", + "*.slcc": "yaml", + "*.h": "c", + "*.c": "c" + } + }, + "tasks": { + "version": "2.0.0", + "tasks": [ + { + "label": "make debug", + "type": "shell", + "command": "make", + "args": ["debug"], + "options": { + "cwd": "${workspaceFolder:btmesh_host_provisioner}" + }, + "group": "build", + "presentation": { + "reveal": "always" + }, + "problemMatcher": "$gcc" + }, + { + "label": "make clean", + "type": "shell", + "command": "make", + "args": ["clean"], + "options": { + "cwd": "${workspaceFolder:btmesh_host_provisioner}" + }, + "group": "build", + "presentation": { + "reveal": "always" + }, + "problemMatcher": "$gcc" + } + ] + }, + "launch": { + "version": "0.2.0", + "configurations": [ + { + "name": "(gdb) Launch", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder:btmesh_host_provisioner}/exe/btmesh_host_provisioner", + "args": ["${input:debugArgs}"], + "stopAtEntry": true, + "cwd": "${workspaceFolder:btmesh_host_provisioner}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ], + "preLaunchTask": "make debug" + } + ], + "inputs": [ + { + "id": "debugArgs", + "type": "promptString", + "description": "Arguments for btmesh_host_provisioner" + } + ] + } +} diff --git a/app/btmesh/example_host/btmesh_host_provisioner/main.c b/app/btmesh/example_host/btmesh_host_provisioner/main.c new file mode 100644 index 00000000000..2bef04f4eac --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_provisioner/main.c @@ -0,0 +1,52 @@ +/***************************************************************************//** + * @file + * @brief main() function. + ******************************************************************************* + * # License + * Copyright 2021 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. + * + ******************************************************************************/ +#include "system.h" +#include "app.h" + +int main(int argc, char *argv[]) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(argc, argv); + + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + } +} diff --git a/app/btmesh/example_host/btmesh_host_provisioner/makefile b/app/btmesh/example_host/btmesh_host_provisioner/makefile new file mode 100644 index 00000000000..0cdb5f44ea8 --- /dev/null +++ b/app/btmesh/example_host/btmesh_host_provisioner/makefile @@ -0,0 +1,86 @@ +################################################################################ +# General project settings # +################################################################################ + +PROJECTNAME = btmesh_host_provisioner +SDK_DIR = ../../../.. + +# Disable threading as handling more than a few mesh devices can cause data loss +HOST_THREADING = 0 +# Flag to include Certificate-Based Provisioning +CBP ?= 0 +RPR ?= 0 +UI ?= 0 + +# Still add pthread because user input handling uses it +override LDFLAGS += -pthread + +################################################################################ +# Components # +# # +# After setting up the toolchain, components can contribute to the project by # +# appending items to the project variables like INCLUDEPATHS or C_SRC. # +# Note: CBP needs -lcrypto and -lws2_32, in this order. # +# This means btmesh_app_prov_cbp.mk must be included before ncp_host_btmesh.mk # +################################################################################ + +include $(SDK_DIR)/app/bluetooth/component_host/toolchain.mk + +ifneq (0,$(CBP)) + include $(SDK_DIR)/app/btmesh/component_host/btmesh_app_prov_cbp.mk +endif + +include $(SDK_DIR)/app/bluetooth/component_host/app_signal.mk +include $(SDK_DIR)/app/btmesh/component_host/ncp_host_btmesh.mk +include $(SDK_DIR)/app/btmesh/component_host/btmesh_app_prov.mk + +ifneq (0,$(RPR)) + include $(SDK_DIR)/app/btmesh/component_host/btmesh_app_remote_prov.mk +endif + +ifneq (0,$(UI)) + include $(SDK_DIR)/app/btmesh/component_host/btmesh_app_prov_ui.mk + ifneq (0,$(RPR)) + include $(SDK_DIR)/app/btmesh/component_host/btmesh_app_remote_prov_ui.mk + endif +endif + +################################################################################ +# Include paths # +################################################################################ + +override INCLUDEPATHS += . \ +$(SDK_DIR)/app/bluetooth/common/ncp_evt_filter \ +$(SDK_DIR)/app/bluetooth/common_host/system \ +$(SDK_DIR)/platform/common/inc \ +$(SDK_DIR)/protocol/bluetooth/inc + + +################################################################################ +# Input files # +################################################################################ + +override C_SRC += \ +$(SDK_DIR)/app/bluetooth/common_host/system/system.c \ +$(SDK_DIR)/app/bluetooth/common_host/system/sl_btmesh.c \ +app.c \ +app_conf.c \ +main.c + +################################################################################ +# Other files # +################################################################################ +override OTHER_FILES += \ +btmesh_host_provisioner.code-workspace \ +README.txt + +################################################################################ +# Target rules # +################################################################################ + +include $(SDK_DIR)/app/bluetooth/component_host/targets.mk + +HELP_MESSAGE += \ +" RPR=1 - add remote provisioning features to the host provisioner application\n" \ +" UI=1 - add the menu user interface to the host provisioner application\n" \ +" CBP=1 - add certificate-based provisioning features\n" \ diff --git a/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_provisioning_data_in.xml b/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_provisioning_data_in.xml new file mode 100644 index 00000000000..4c09682a6a5 --- /dev/null +++ b/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_provisioning_data_in.xml @@ -0,0 +1,13 @@ + + + + + The Mesh Provisioning Data In characteristic can be written to send a Proxy PDU message containing Provisioning PDU to the Provisioning Server. + + + + Mandatory + uint8 + + + diff --git a/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_provisioning_data_out.xml b/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_provisioning_data_out.xml new file mode 100644 index 00000000000..c5cb57ef589 --- /dev/null +++ b/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_provisioning_data_out.xml @@ -0,0 +1,13 @@ + + + + + The Mesh Provisioning Data Out characteristic can be notified to send a Proxy PDU message containing Provisioning PDU from a Provisioning Server to a Provisioning Client. + + + + Mandatory + uint8 + + + diff --git a/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_proxy_data_in.xml b/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_proxy_data_in.xml new file mode 100644 index 00000000000..678ecc7f21b --- /dev/null +++ b/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_proxy_data_in.xml @@ -0,0 +1,13 @@ + + + + + The Mesh Proxy Data In characteristic is used by the client to send Proxy PDUs to the server + + + + Mandatory + uint8 + + + diff --git a/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_proxy_data_out.xml b/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_proxy_data_out.xml new file mode 100644 index 00000000000..8ac83f15db8 --- /dev/null +++ b/app/btmesh/gatt_xml/silabs/characteristics/com.silabs.characteristic.mesh_proxy_data_out.xml @@ -0,0 +1,13 @@ + + + + + The Mesh Proxy Data Out characteristic is used by the server to send Proxy PDUs to the client. + + + + Mandatory + uint8 + + + diff --git a/app/btmesh/gatt_xml/silabs/services/com.silabs.service.mesh_provisioning.xml b/app/btmesh/gatt_xml/silabs/services/com.silabs.service.mesh_provisioning.xml new file mode 100644 index 00000000000..7f9dc4baa23 --- /dev/null +++ b/app/btmesh/gatt_xml/silabs/services/com.silabs.service.mesh_provisioning.xml @@ -0,0 +1,47 @@ + + + + + The Mesh Provisioning Service allows a Provisioning Client to provision a Provisioning Server to allow it to participate in the mesh network. + + + This service has no dependencies on other GATT-based services. + + + Mandatory + Mandatory + + + true + + + + Mandatory + + Excluded + Excluded + Mandatory + Excluded + Excluded + Excluded + Excluded + Excluded + Excluded + + + + Mandatory + + Excluded + Excluded + Excluded + Excluded + Excluded + Mandatory + Excluded + Excluded + Excluded + + + + diff --git a/app/btmesh/gatt_xml/silabs/services/com.silabs.service.mesh_proxy.xml b/app/btmesh/gatt_xml/silabs/services/com.silabs.service.mesh_proxy.xml new file mode 100644 index 00000000000..94165020b2d --- /dev/null +++ b/app/btmesh/gatt_xml/silabs/services/com.silabs.service.mesh_proxy.xml @@ -0,0 +1,47 @@ + + + + + The Mesh Proxy Service is used to enable a server to send and receive Proxy PDUs with a client. + + + This service has no dependencies on other GATT-based services. + + + Mandatory + Mandatory + + + true + + + + Mandatory + + Excluded + Excluded + Mandatory + Excluded + Excluded + Excluded + Excluded + Excluded + Excluded + + + + Mandatory + + Excluded + Excluded + Excluded + Excluded + Excluded + Mandatory + Excluded + Excluded + Excluded + + + + diff --git a/app/btmesh/script/generator/BtMeshGenerator.py b/app/btmesh/script/generator/BtMeshGenerator.py new file mode 100644 index 00000000000..40a185df7fb --- /dev/null +++ b/app/btmesh/script/generator/BtMeshGenerator.py @@ -0,0 +1,198 @@ +import os +import json +import re +from jinja2 import Template +from jinja2 import FileSystemLoader +from jinja2.environment import Environment + + +def to_c_macro(name): + macro = re.sub('\W', '_', name) + macro = macro + ('_' if macro[0].isdigit() else '') + return macro.upper() + + +class SIGModel(object): + def __init__(self, mid, name): + self.mid = int(mid, 0) + self.name = name + + +class VendorModel(object): + def __init__(self, mid, cid, name): + self.mid = int(mid, 0) + self.cid = int(cid, 0) + self.name = name + + @property + def vmid(self): + return self.mid << 16 + self.cid + + @property + def macro_name(self): + return to_c_macro(self.name) + + +class Element(object): + def __init__(self, name, location, sig_models=[], vendor_models=[], filenames=[]): + self.name = name + self.location = int(location, 0) + self.sig_models = [SIGModel(**m) for m in sig_models] + self.vendor_models = self.check_vendor_models(vendor_models) + self.filenames = filenames.copy() + + def check_vendor_models(self, vendor_models): + vend_mod = [VendorModel(**m) for m in vendor_models] + for m in vend_mod: + i = vend_mod.index(m) + 1 + while i < len(vend_mod): + n = vend_mod[i] + if m.name == n.name: + print(f"\nBtMeshGenerator: In element: '{self.name}' ", end='') + print(f"duplicated vendor model name: '{m.name}' \n") + #exit('Duplicated vendor model name') + return vend_mod + elif m.mid == n.mid: + print(f"\nBtMeshGenerator: In element: '{self.name}' ", end='') + print(f"duplicated vendor model ID (mid): {hex(m.mid)}\n") + #exit('Duplicated vendor model ID') + return vend_mod + else: + i += 1 + return vend_mod + + @property + def num_s(self): + return len(self.sig_models) + + @property + def num_v(self): + return len(self.vendor_models) + + #TODO: better + @property + def macros(self): + return [to_c_macro('_'.join([filename, self.name])) for filename in self.filenames] + + def is_mergeable_with(self, other): + if self.name != other.name: + return False + self_sig_models = {m.mid for m in self.sig_models} + other_sig_models = {m.mid for m in other.sig_models} + if not self_sig_models.isdisjoint(other_sig_models): + return False + self_vendor_models = {m.vmid for m in self.vendor_models} + other_vendor_models = {m.vmid for m in other.vendor_models} + if not self_vendor_models.isdisjoint(other_vendor_models): + return False + return True + + def merge_with(self, other): + self.sig_models.extend(other.sig_models) + self.vendor_models.extend(other.vendor_models) + self.filenames.extend(other.filenames) + + +class DCD(object): + def __init__(self, cid, pid, vid, elements=[]): + self.cid = int(cid, 0) + self.pid = int(pid, 0) + self.vid = int(vid, 0) + self.elements = [Element(**e) for e in elements] + self.unique_vendor_models = [] + + @property + def total_models(self): + return sum(elem.num_s + elem.num_v for elem in self.elements) + + @property + def total_elements(self): + return len(self.elements) + + def collect_v_models(self): + duplicated = False + dcd_vendor_model = [] + for e in self.elements: + for me in e.vendor_models: + for m_dcd in dcd_vendor_model: + if me.name == m_dcd.name or me.mid == m_dcd.mid: + duplicated = True + if duplicated == False: + dcd_vendor_model.append(me) + duplicated = False + return dcd_vendor_model + + def add_chunk(self, chunk): + for e in chunk: + for element in self.elements: + if(element.is_mergeable_with(e)): + element.merge_with(e) + break + else: + self.elements.append(e) + + +def dcd_chunk(filename, elements=[]): + return [Element(**e, filenames=[filename]) for e in elements] + + +def dcdgen(dcd): + dcd.unique_vendor_models = dcd.collect_v_models() + env = Environment(lstrip_blocks=True, trim_blocks=True, keep_trailing_newline=True) + env.loader = FileSystemLoader(os.path.dirname(__file__)) + return (env.get_template("templates/sl_btmesh_dcd.h.template").render(dcd=dcd), + env.get_template("templates/sl_btmesh_dcd.c.template").render(dcd=dcd)) + + +if __name__ == "__main__": + import sys + import argparse + + cwd = os.getcwd() + parser = argparse.ArgumentParser( + description="BLE Mesh Device Composition Data code generator" + ) + parser.add_argument("input", nargs="?", default=cwd) + parser.add_argument("output", nargs="?", default=cwd) + + args = parser.parse_args() + + if os.path.isdir(args.input): + input_filename = next( + x for x in os.listdir(args.input) if x.lower().endswith(".btmeshconf") + ) + if not input_filename: + print(f"BtMeshGenerator: No 'btmeshconf' file found in {args.input}.") + exit(1) + dcd_files = [ + os.path.join(args.input, filename) + for filename in os.listdir(args.input) + if filename.lower().endswith(".dcd") + ] + input_path = os.path.join(args.input, input_filename) + else: + input_path = args.input + + with open(input_path) as f: + btmeshconf = json.load(f) + + dcd = DCD(**btmeshconf["composition_data"]) + + dcd_chunks = [] + for dcd_file in dcd_files: + filename = os.path.basename(dcd_file) + filename = os.path.splitext(filename)[0] + with open(dcd_file) as f: + dcd.add_chunk(dcd_chunk(filename, json.load(f))) + + dcd_h_file, dcd_c_file = dcdgen(dcd) + + dcd_c_path = os.path.join(args.output, "sl_btmesh_dcd.c") + dcd_h_path = os.path.join(args.output, "sl_btmesh_dcd.h") + + with open(dcd_h_path, "w") as f: + f.write(dcd_h_file) + with open(dcd_c_path, "w") as f: + f.write(dcd_c_file) + + print(f"BtMeshGenerator: DCD written to {os.path.abspath(dcd_c_path)}") diff --git a/app/btmesh/script/generator/apack.info b/app/btmesh/script/generator/apack.info new file mode 100644 index 00000000000..98d2f0395f3 --- /dev/null +++ b/app/btmesh/script/generator/apack.info @@ -0,0 +1,18 @@ +# Bluetooth Mesh Advanced Configurator Adapter Pack Definition + +# Is used for SetupId +id=btMeshConfig +label=Bluetooth Mesh Advanced Configurator Adapter Pack + +# Trigger file extension. No period. +uc.triggerExtension=btmeshconf + +# Standard generation function +function(uc_generate) { + cmd=$(python) BtMeshGenerator.py ${contentFolder} ${generationOutput} +} + +# A stub upgrade function to generate an empty report. No actual upgrade is needed. +function(uc_upgrade) { + cmd=$(python) generateEmptyUpgradeResult.py -r ${results} +} diff --git a/app/btmesh/script/generator/generateEmptyUpgradeResult.py b/app/btmesh/script/generator/generateEmptyUpgradeResult.py new file mode 100644 index 00000000000..49074ed9a8a --- /dev/null +++ b/app/btmesh/script/generator/generateEmptyUpgradeResult.py @@ -0,0 +1,12 @@ +import argparse +import os +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='This is a Empty Upgrade Result Generator for Wireless AC Tools.') + parser.add_argument('-r', '--results', + help='A path of YAML file that should be written to with upgrade results.') + args = parser.parse_args() + if args.results is not None: + resultFile = open(args.results, "w") + lines = ["---\n","upgrade_results:\n",'-\n',' message: "no upgrade needed"\n', ' status: "nothing"\n'] + resultFile.writelines(lines) + resultFile.close() diff --git a/app/btmesh/script/generator/templates/sl_btmesh_dcd.c.template b/app/btmesh/script/generator/templates/sl_btmesh_dcd.c.template new file mode 100644 index 00000000000..0d1dbed27ac --- /dev/null +++ b/app/btmesh/script/generator/templates/sl_btmesh_dcd.c.template @@ -0,0 +1,112 @@ +/****************************************************************************** + * + * @file sl_btmesh_dcd.c + * @brief BLE Mesh Device Composition Data and memory configuration + * + * Autogenerated file, do not edit + * + ******************************************************************************* + * # License + * Copyright 2018 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. + * + ******************************************************************************/ +// *INDENT-OFF* + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include "sl_btmesh_memory_config.h" +#include "sl_bluetooth_config.h" +#include "sl_btmesh_dcd.h" +#include "sl_btmesh_config.h" +#include "sl_btmesh.h" + +{%- macro u8tohex(val) %} +{{ "0x%02x"|format(val.__and__(255)) }} +{%- endmacro %} + +{%- macro u16toa(val) %} +{{ "0x%02x, 0x%02x"|format(val.__and__(255), val.__rshift__(8)) }} +{%- endmacro %} + +{%- macro u16tohex(val) %} +{{ "0x%04x"|format(val) }} +{%- endmacro %} + +#define U16TOA(A) ((A) & 0xFF), ((A) >> 8) + +const uint8_t __mesh_dcd[] = { + U16TOA({{ u16tohex(dcd.cid) }}), /* Company ID */ + U16TOA({{ u16tohex(dcd.pid) }}), /* Product ID */ + U16TOA({{ u16tohex(dcd.vid) }}), /* Version Number */ + U16TOA(SL_BTMESH_CONFIG_RPL_SIZE), /* Capacity of Replay Protection List */ + U16TOA(SL_BTMESH_FEATURE_BITMASK), /* Features Bitmask */ +{% for elem in dcd.elements %} + /* {{ elem.name }} */ + U16TOA({{ u16tohex(elem.location) }}), /* Location */ + {{ u8tohex(elem.num_s) }}, /* Number of SIG Models = {{ elem.num_s }} */ + {{ u8tohex(elem.num_v) }}, /* Number of Vendor Models = {{ elem.num_v }} */ + {% if elem.num_s > 0 %} + /* SIG Models */ + {% for model in elem.sig_models %} + U16TOA({{ u16tohex(model.mid) }}), /* {{ model.name }} */ + {% endfor %} + {% endif %} + {% if elem.num_v > 0 %} + /* Vendor Models */ + {% for model in elem.vendor_models %} + U16TOA({{ u16tohex(model.cid) }}), U16TOA({{ u16tohex(model.mid) }}), /* {{ model.name }} */ + {% endfor %} + {% endif %} +{% endfor %} +}; + +const size_t __mesh_dcd_len = sizeof(__mesh_dcd); +const uint8_t *__mesh_dcd_ptr = __mesh_dcd; + +const mesh_memory_config_t __mesh_memory_config = { + .max_elements = SL_BTMESH_CONFIG_MAX_ELEMENTS, + .max_models = SL_BTMESH_CONFIG_MAX_MODELS, + .max_net_keys = SL_BTMESH_CONFIG_MAX_NETKEYS, + .max_appkeys = SL_BTMESH_CONFIG_MAX_APPKEYS, + .max_friendships = SL_BTMESH_CONFIG_MAX_FRIENDSHIPS, + .max_app_binds = SL_BTMESH_CONFIG_MAX_APP_BINDS, + .max_subscriptions = SL_BTMESH_CONFIG_MAX_SUBSCRIPTIONS, + .max_foundation_model_commands = SL_BTMESH_CONFIG_MAX_FOUNDATION_CLIENT_CMDS, + .net_cache_size = SL_BTMESH_CONFIG_NET_CACHE_SIZE, + .replay_size = SL_BTMESH_CONFIG_RPL_SIZE, + .max_send_segs = SL_BTMESH_CONFIG_MAX_SEND_SEGS, + .max_recv_segs = SL_BTMESH_CONFIG_MAX_RECV_SEGS, + .max_virtual_addresses = SL_BTMESH_CONFIG_MAX_VAS, + .max_provision_sessions = SL_BTMESH_CONFIG_MAX_PROV_SESSIONS, + .max_provision_bearers = SL_BTMESH_CONFIG_MAX_PROV_BEARERS, + .max_gatt_connections = SL_BTMESH_CONFIG_MAX_GATT_CONNECTIONS, + .gatt_txqueue_size = SL_BTMESH_CONFIG_GATT_TXQ_SIZE, + .provisioner_max_ddb_entries = SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICES, + .provisioner_max_node_net_keys = SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICE_NETKEYS, + .provisioner_max_node_app_keys = SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICE_APPKEYS, + .pstore_write_interval_elem_seq = (1 << (SL_BTMESH_CONFIG_SEQNUM_WRITE_INTERVAL_EXP)), + .friend_max_total_cache = SL_BTMESH_CONFIG_FRIEND_MAX_TOTAL_CACHE, + .friend_max_single_cache = SL_BTMESH_CONFIG_FRIEND_MAX_SINGLE_CACHE, + .friend_max_subs_list = SL_BTMESH_CONFIG_FRIEND_MAX_SUBS_LIST, + .app_send_max_queue = SL_BTMESH_CONFIG_APP_TXQ_SIZE, + .its_key_cache = SL_BTMESH_CONFIG_ITS_KEY_CACHE_SIZE, + .proxy_max_access_control_list_entries = SL_BTMESH_CONFIG_MAX_PROXY_ACCESS_CONTROL_LIST_ENTRIES, + .limit_prov_concurrent_kr = SL_BTMESH_CONFIG_LIMIT_PROV_CONCURRENT_KR +}; + +#ifdef __cplusplus +} +#endif +// *INDENT-ON* diff --git a/app/btmesh/script/generator/templates/sl_btmesh_dcd.h.template b/app/btmesh/script/generator/templates/sl_btmesh_dcd.h.template new file mode 100644 index 00000000000..e5161e4678d --- /dev/null +++ b/app/btmesh/script/generator/templates/sl_btmesh_dcd.h.template @@ -0,0 +1,51 @@ +/****************************************************************************** + * + * @file sl_btmesh_dcd.h + * @brief BLE Mesh element indexes and the maximum number of elements, models + * and provisioning bearers + * + * Autogenerated file, do not edit + * + ******************************************************************************* + * # License + * Copyright 2018 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. + * + ******************************************************************************/ +// *INDENT-OFF* + +#ifndef SL_BTMESH_DCD_H +#define SL_BTMESH_DCD_H + +{%- macro u16tohex(val) %} +{{ "0x%04x"|format(val) }} +{%- endmacro %} + +// Defines the maximum number of elements the application needs based on the +// btmeshconf and dcd files. +#define SL_BTMESH_CONFIG_MAX_ELEMENTS {{dcd.total_elements}} + +// Defines the maximum number of models the application needs based on the +// btmeshconf and dcd files. +#define SL_BTMESH_CONFIG_MAX_MODELS {{dcd.total_models}} + +{% for elem in dcd.elements %} + {% set index = loop.index0 %} + {% for macro in elem.macros %} +#define {{macro}} {{index}} + {% endfor %} +{% endfor %} + +{% for model in dcd.unique_vendor_models %} +#define {{model.macro_name}}_CID {{ u16tohex(model.cid) }} +#define {{model.macro_name}}_MID {{ u16tohex(model.mid) }} +{% endfor %} + +#endif // SL_BTMESH_DCD_H \ No newline at end of file diff --git a/app/btmesh/script/validation/remote_provisioning_validation.lua b/app/btmesh/script/validation/remote_provisioning_validation.lua new file mode 100644 index 00000000000..f98c1bd0581 --- /dev/null +++ b/app/btmesh/script/validation/remote_provisioning_validation.lua @@ -0,0 +1,17 @@ +-- Remote provisioning validation script + +local remote_prov_server_present = slc.is_selected('btmesh_remote_provisioning_server') +local remote_prov_client_present = slc.is_selected('btmesh_remote_provisioning_client') +local max_prov_bearers_config = slc.config("SL_BTMESH_CONFIG_MAX_PROV_BEARERS").value + +-- remove '(' and ')' characters used in some configuration headers "(3)" -> "3" +max_prov_bearers_config = string.gsub(max_prov_bearers_config, '%p', '') +local max_prov_bearers_config_value = tonumber(max_prov_bearers_config) + +if (remote_prov_server_present or remote_prov_client_present) and (max_prov_bearers_config_value < 3) then + validation.warning( + 'Reconfiguration of BT Mesh Stack is mandatory for remote provisioning server or client usage', + validation.target_for_defines({"SL_BTMESH_CONFIG_MAX_PROV_BEARERS"}), + 'Set the "Maximum number of provisioning bearers allowed" value to at least 3 in "Bluetooth Mesh Stack Configuration" page, current value: '.. tostring(max_prov_bearers_config_value) + ) +end diff --git a/app/btmesh/upgrade.slcu b/app/btmesh/upgrade.slcu deleted file mode 100644 index 89e6ca74f85..00000000000 --- a/app/btmesh/upgrade.slcu +++ /dev/null @@ -1,8 +0,0 @@ -upgrade: - - sdk: - id: gecko_sdk - version: "4.2.0" - component: - - script: app/btmesh/btmesh_upgrade_fail.lua - description: > - Because the BT Mesh SDK is not in this GSDK release, upgrading your project would remove the BT Mesh stack from it. Please cancel. \ No newline at end of file diff --git a/app/common/app_common.properties b/app/common/app_common.properties index 2dc13d5df5a..9ab29bb98eb 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.2.1.0 -dependantSdkVersion=4.2.1 -prop.subLabel=Platform\\ 4.2.1.0 +version=4.2.2.0 +dependantSdkVersion=4.2.2 +prop.subLabel=Platform\\ 4.2.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/example/tz_psa_attestation/readme.md b/app/common/example/tz_psa_attestation/readme.md new file mode 100644 index 00000000000..5de0865580a --- /dev/null +++ b/app/common/example/tz_psa_attestation/readme.md @@ -0,0 +1,52 @@ +# TrustZone PSA Attestation (Workspace and Secure application) + + +The Simplicity IDE uses the `tz_psa_attestation_ws` workspace to create the following Secure and Non-secure applications for the TrustZone PSA Attestation example. + + +* `tz_psa_attestation_s` (Secure application) +* `tz_psa_attestation_ns` (Non-secure application) + +After building all the projects in the workspace, the following post-build actions will be processed. + + +* Combine the Secure and Non-secure binaries into one image for signing. +* Sign the combined image with the private key (PSA attestation requires the secure boot as the root of trust). The private key (`example_signing_key.pem`) for signing is located in the `autogen` folder of the Secure application. + + +The Secure application makes a TrustZone secure library for running PSA Crypto and Attestation in the Secure world. The following services are provided to the Non-secure world through the veneers in the Non-secure Callable (NSC). + + +* `Attestation` +* `MSC` +* `NVM3` +* `PSA Crypto` +* `PSA ITS` +* `SE Manager` +* `SYSCFG` + + +## Getting Started + + +1. Upgrade the kit’s firmware to the latest version (see `Adapter Firmware` under [General Device Information](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-about-the-launcher/welcome-and-device-tabs#general-device-information) in the Simplicity Studio 5 User's Guide). +2. Upgrade the device’s SE firmware to the latest version (see `Secure Firmware` under [General Device Information](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-about-the-launcher/welcome-and-device-tabs#general-device-information) in the Simplicity Studio 5 User's Guide). +3. Open any terminal program and connect to the kit’s VCOM port (if using `Device Console` in Simplicity Studio 5, `Line terminator:` must be set to `None`). +4. Use the `tz_psa_crypto_ecdh_ws` workspace to create Secure and Non-secure projects in the Simplicity IDE (see [Examples](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-getting-started/start-a-project#examples) in the Simplicity Studio 5 User's Guide). +5. Build the Secure and Non-secure projects and download the combined images to the kit (refer to [AN1374: Series 2 TrustZone](https://www.silabs.com/documents/public/application-notes/an1374-trustzone.pdf) for details). +6. Run the example and follow the instructions shown on the console. + + +## Additional Information + + +1. This example cannot run if the `SECURE_BOOT_ENABLE` option (the root of trust of the attestation) in SE OTP is disabled. The combined image of Secure and Non-secure applications must be signed before flashing to the device. +2. The default optimization level is `Optimize for size (-Os)` on Simplicity IDE and IAR Embedded Workbench. + + +## Resources + + +[AN1374: Series 2 TrustZone](https://www.silabs.com/documents/public/application-notes/an1374-trustzone.pdf) + + diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_init.c b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_init.c new file mode 100644 index 00000000000..31b7e8aa374 --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_init.c @@ -0,0 +1,54 @@ +/***************************************************************************//** + * @file app_init.c + * @brief Application initialization functions. + ******************************************************************************* + * # License + * Copyright 2020 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_init.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * The function is used for some basic initialization relates to the + * application. + ******************************************************************************/ +void app_init(void) +{ + enable_cycle_count(); +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions +// ----------------------------------------------------------------------------- diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_init.h b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_init.h new file mode 100644 index 00000000000..b1612cb09ac --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_init.h @@ -0,0 +1,43 @@ +/***************************************************************************//** + * @file app_init.h + * @brief Application initialization functions. + ******************************************************************************* + * # License + * Copyright 2020 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 APP_INIT_H +#define APP_INIT_H + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_psa_crypto_macro.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * The function is used for some basic initialization relates to the + * application. + ******************************************************************************/ +void app_init(void); + +#endif // APP_INIT_H diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_process.c b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_process.c new file mode 100644 index 00000000000..2443a7b83c0 --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_process.c @@ -0,0 +1,187 @@ +/***************************************************************************//** + * @file app_process.c + * @brief Top level application functions. + ******************************************************************************* + * # License + * Copyright 2022 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_process.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Retrieve input character from VCOM port. + ******************************************************************************/ +static void app_iostream_usart_process_action(void); + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- +/// Space press status +static bool space_press; + +/// Enter press status +static bool enter_press; + +/// State machine state variable +static state_t app_state = PSA_CRYPTO_INIT; + +/// String for example +static uint8_t example_string[] = "PSA Attestation Example"; + +/// Nonce size for the PSA Attestation Token +static int8_t selected_nonce; + +static const uint32_t iat_token_nonce_sizes[] = { + PSA_INITIAL_ATTEST_CHALLENGE_SIZE_32, + PSA_INITIAL_ATTEST_CHALLENGE_SIZE_48, + PSA_INITIAL_ATTEST_CHALLENGE_SIZE_64 +}; + +// ----------------------------------------------------------------------------- +// Public Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Application state machine, called infinitely. + ******************************************************************************/ +void app_process_action(void) +{ + // Retrieve input character from VCOM port + app_iostream_usart_process_action(); + + switch (app_state) { + case PSA_CRYPTO_INIT: + app_state = PSA_CRYPTO_IDLE; + printf("\n%s - Core running at %" PRIu32 " kHz.\n", example_string, + CMU_ClockFreqGet(cmuClock_CORE) / 1000); + printf(" . PSA Crypto initialization... "); + if (init_psa_crypto() == PSA_SUCCESS) { + printf("\n . Current nonce size of PSA Attestation Token is " + "%lu bytes.\n", iat_token_nonce_sizes[selected_nonce]); + printf(" + Press SPACE to cycle through the options (%lu or %lu or " + "%lu), press ENTER to make a selection.\n", + iat_token_nonce_sizes[0], iat_token_nonce_sizes[1], + iat_token_nonce_sizes[2]); + app_state = SELECT_NONCE_SIZE; + } + break; + + case SELECT_NONCE_SIZE: + if (space_press) { + space_press = false; + selected_nonce = (selected_nonce + 1) % 3; + printf(" + Current nonce size of PSA Attestation Token is " + "%lu bytes.\n", iat_token_nonce_sizes[selected_nonce]); + } + + if (enter_press) { + app_state = PSA_CRYPTO_EXIT; + enter_press = false; + printf(" + Generating %lu bytes nonce... ", + iat_token_nonce_sizes[selected_nonce]); + if (generate_random_number(iat_token_nonce_sizes[selected_nonce]) + != PSA_SUCCESS) { + break; + } + printf(" + The nonce (%lu bytes):", + iat_token_nonce_sizes[selected_nonce]); + print_nonce(iat_token_nonce_sizes[selected_nonce]); + app_state = GET_IAT_TOKEN; + } + break; + + case GET_IAT_TOKEN: + app_state = PSA_CRYPTO_EXIT; + printf("\n . Getting the size of the token with %lu bytes nonce... ", + iat_token_nonce_sizes[selected_nonce]); + if (get_attested_token_size(iat_token_nonce_sizes[selected_nonce]) + != PSA_SUCCESS) { + break; + } + printf(" + The size of the token is %zu bytes\n", get_token_size()); + + printf("\n . Getting the token with %lu bytes nonce... ", + iat_token_nonce_sizes[selected_nonce]); + if (get_attested_token(iat_token_nonce_sizes[selected_nonce]) + != PSA_SUCCESS) { + break; + } + printf(" + The size of the token is %zu bytes\n", get_token_size()); + + printf("\n . Getting the Public Attestation Key... "); + if (get_public_attestation_key() != PSA_SUCCESS) { + break; + } + printf(" + The Public Attestation Key (64 bytes):\n"); + print_pub_key(); + + if (print_attestation_token() != PSA_SUCCESS) { + break; + } + + printf("\n . Current nonce size of PSA Attestation Token is " + "%lu bytes.\n", iat_token_nonce_sizes[selected_nonce]); + printf(" + Press SPACE to cycle through the options (%lu or %lu or " + "%lu), press ENTER to make a selection.\n", + iat_token_nonce_sizes[0], iat_token_nonce_sizes[1], + iat_token_nonce_sizes[2]); + app_state = SELECT_NONCE_SIZE; + break; + + case PSA_CRYPTO_EXIT: + printf("\n . PSA Crypto deinitialization\n"); + mbedtls_psa_crypto_free(); + app_state = PSA_CRYPTO_IDLE; + break; + + case PSA_CRYPTO_IDLE: + default: + break; + } +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Retrieve input character from VCOM port. + ******************************************************************************/ +static void app_iostream_usart_process_action(void) +{ + int8_t c; + + c = getchar(); + if (c > 0) { + if (c == ' ') { + space_press = true; + } + if (c == '\r') { + enter_press = true; + } + } +} diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_process.h b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_process.h new file mode 100644 index 00000000000..57760318a66 --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_process.h @@ -0,0 +1,50 @@ +/***************************************************************************//** + * @file app_process.h + * @brief Top level application functions. + ******************************************************************************* + * # License + * Copyright 2022 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 APP_PROCESS_H +#define APP_PROCESS_H + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_psa_attestation.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- +/// State machine states +typedef enum { + PSA_CRYPTO_IDLE, + PSA_CRYPTO_INIT, + SELECT_NONCE_SIZE, + GET_IAT_TOKEN, + PSA_CRYPTO_EXIT +} state_t; + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Application state machine, called infinitely. + ******************************************************************************/ +void app_process_action(void); + +#endif // APP_PROCESS_H diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_attestation.c b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_attestation.c new file mode 100644 index 00000000000..4cb31d8723a --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_attestation.c @@ -0,0 +1,551 @@ +/***************************************************************************//** + * @file app_psa_attestation.c + * @brief PSA attestation functions. + ******************************************************************************* + * # License + * Copyright 2022 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_psa_attestation.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- +/***************************************************************************//** + * @brief + * Parse and optionally pretty-print CBOR data. + * + * @param[in] cbor_data + * Buffer containing CBOR data. + * + * @param[out] nbytes_read + * Number of bytes read and parsed from buffer. + * + * @param[in] print_flag + * If set, print data while parsing. + * + * @param[in] indent_lvl + * Indentation level used when printing. + * + * @param[in] indent_width + * Indentation width. Number of whitespace characters per indentation level. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +static psa_status_t cbor_parse(uint8_t *cbor_data, + size_t *nbytes_read, + bool print_flag, + uint8_t indent_lvl, + uint8_t indent_width); + +/***************************************************************************//** + * @brief + * Parse CBOR major type and argument. + * + * @param[in] cbor_data + * Buffer containing CBOR data. + * + * @param[out] maj_type + * Pointer to uint8_t for storing major type. + * + * @param[out] arg + * Pointer to uint64_t for storing argument. + * + * @param[out] nbytes_read + * Number of bytes read and parsed from buffer. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +static psa_status_t cbor_parse_maj_and_arg(uint8_t *cbor_data, + uint8_t *maj_type, + uint64_t *arg, + size_t *nbytes_read); + +/***************************************************************************//** + * @brief + * Parse and pretty-print CBOR data. + * + * @param[in] cbor_data + * Buffer containing CBOR data. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +static psa_status_t cbor_pretty_print(uint8_t *cbor_data); + +/***************************************************************************//** + * @brief + * Parse and pretty-print claims from attestation token. + * + * @param[in] token_data + * Buffer containing CBOR-encoded token. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +static psa_status_t token_claims_pretty_print(uint8_t *token_data); + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- +/// Buffer for nonce/challenge +static uint8_t nonce_buf[PSA_INITIAL_ATTEST_CHALLENGE_SIZE_64]; + +/// Buffer for PSA Attestation Token +static uint8_t token_buf[PSA_INITIAL_ATTEST_MAX_TOKEN_SIZE]; + +/// Buffer for Public Attestation Key in uncompressed point format +static uint8_t pub_key_buf[65]; + +/// Size of actual PSA Attestation Token in bytes +static size_t token_size; + +// ----------------------------------------------------------------------------- +// Public Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Get size of the PSA Attestation Token. + ******************************************************************************/ +size_t get_token_size(void) +{ + return token_size; +} + +/***************************************************************************//** + * Generate random numbers and save them to a buffer. + ******************************************************************************/ +psa_status_t generate_random_number(uint32_t size) +{ + print_error_cycle(psa_generate_random(nonce_buf, size)); +} + +/***************************************************************************//** + * Print the nonce. + ******************************************************************************/ +void print_nonce(uint32_t size) +{ + size_t i; + + for (i = 0; i < size; i++) { + if ((i % 32) == 0) { + printf("\n%*s", 4, ""); + } + printf("%02x ", nonce_buf[i]); + } + printf("\n"); +} + +/***************************************************************************//** + * Get the size of the PSA Attestation Token. + ******************************************************************************/ +psa_status_t get_attested_token_size(size_t nonce_size) +{ + print_error_cycle(psa_initial_attest_get_token_size(nonce_size, + &token_size)); +} + +/***************************************************************************//** + * Get the PSA Attestation Token. + ******************************************************************************/ +psa_status_t get_attested_token(size_t nonce_size) +{ + print_error_cycle(psa_initial_attest_get_token(nonce_buf, + nonce_size, + token_buf, + sizeof(token_buf), + &token_size)); +} + +/***************************************************************************//** + * Get the Public Attestation Key. + ******************************************************************************/ +psa_status_t get_public_attestation_key(void) +{ + print_error_cycle(sl_tz_attestation_get_public_key(pub_key_buf, + sizeof(pub_key_buf))); +} + +/***************************************************************************//** + * Print the Public Attestation Key. + ******************************************************************************/ +void print_pub_key(void) +{ + size_t i; + + printf("%*s", 4, ""); + // Start from index 1 to skip the first byte for uncompressed point format + for (i = 1; i < sizeof(pub_key_buf); i++) { + if ((i % 33) == 0) { + printf("\n%*s", 4, ""); + } + printf("%02x ", pub_key_buf[i]); + } + printf("\n"); +} + +/***************************************************************************//** + * Print attestation token and claims in both raw and human-readable format. + ******************************************************************************/ +psa_status_t print_attestation_token(void) +{ + size_t i; + psa_status_t ret; + + printf("\nPSA Attestation Token \n"); + printf("==========================\n"); + printf("-------------------------------------------------------------------"); + printf("\nRaw token:"); + for (i = 0; i < token_size; i++) { + if ((i % 32) == 0) { + printf("\n%*s", 2, ""); + } + printf("%02x ", token_buf[i]); + } + printf("\n\n"); + + printf("COSE_Sign1 structure:\n"); + ret = cbor_pretty_print(token_buf); + + if (ret == PSA_ERROR_GENERIC_ERROR) { + printf("[ERROR] CBOR: Not well-formed / implemented.\n"); + return ret; + } + + printf("-------------------------------------------------------------------"); + ret = token_claims_pretty_print(token_buf); + printf("-------------------------------------------------------------------"); + printf("\n"); + + if (ret == PSA_ERROR_GENERIC_ERROR) { + printf("[ERROR] Invalid COSE_Sign1 structure.\n"); + } + return ret; +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions +// ----------------------------------------------------------------------------- +/***************************************************************************//** + * Parse and optionally pretty-print CBOR data. + ******************************************************************************/ +static psa_status_t cbor_parse(uint8_t *cbor_data, + size_t *nbytes_read, + bool print_flag, + uint8_t indent_lvl, + uint8_t indent_width) +{ + uint8_t maj_type; + uint8_t *data_ptr; + uint64_t arg; + size_t item_size, nitems_in_queue; + psa_status_t ret; + size_t i; + + data_ptr = cbor_data; + + // Parse major type and argument of current CBOR item + ret = cbor_parse_maj_and_arg(data_ptr, &maj_type, &arg, &item_size); + if (ret != PSA_SUCCESS) { + return ret; + } + data_ptr += item_size; + + if (print_flag) { + printf("%*s%02x", indent_lvl * indent_width, "", cbor_data[0]); + } + + nitems_in_queue = 0; + + switch (maj_type) { + case CBOR_UNSIGNED_INT: + if (print_flag) { + printf(" ; int(%" PRIu64 ")\n", arg); + } + break; + + case CBOR_NEGATIVE_INT: + if (print_flag) { + printf(" ; int(%" PRIi64 ")\n", -(arg + 1)); + } + break; + + case CBOR_BYTE_STR: + if (print_flag) { + printf(" ; byte_str(%" PRIu64 ")", arg); + for (i = 0; i < arg; i++) { + if ((i % 32) == 0) { + printf("\n%*s", (indent_lvl + 1) * indent_width, ""); + } + printf("%02x ", *(data_ptr++)); + } + printf("\n"); + } else { + data_ptr += arg; + } + break; + + case CBOR_TEXT_STR: + if (print_flag) { + printf(" ; text_str(%" PRIu64 ")\n", arg); + printf("%*s\"", (indent_lvl + 1) * indent_width, ""); + for (i = 0; i < arg; i++) { + printf("%c", *(data_ptr++)); + } + printf("\"\n"); + } else { + data_ptr += arg; + } + break; + + case CBOR_ARRAY: + if (print_flag) { + printf(" ; array(%" PRIu64 ")\n", arg); + } + nitems_in_queue = arg; + break; + + case CBOR_MAP: + if (print_flag) { + printf(" ; map(%" PRIu64 ")\n", arg); + } + nitems_in_queue = 2 * arg; + break; + + case CBOR_TAG: + if (print_flag) { + printf(" ; tag(%" PRIu64 ")\n", arg); + } + nitems_in_queue = 1; + break; + + case CBOR_SIMPLE_FLOAT: + + default: + return PSA_ERROR_GENERIC_ERROR; + } + + // Parse queued items from CBOR array, map or tag types. + while (nitems_in_queue--) { + ret = cbor_parse(data_ptr, + &item_size, + print_flag, + indent_lvl + 1, + indent_width); + + if (ret != PSA_SUCCESS) { + return ret; + } + + data_ptr += item_size; + } + + *nbytes_read = data_ptr - cbor_data; + + return PSA_SUCCESS; +} + +/***************************************************************************//** + * Parse CBOR major type and argument. + ******************************************************************************/ +static psa_status_t cbor_parse_maj_and_arg(uint8_t *cbor_data, + uint8_t *maj_type, + uint64_t *arg, + size_t *nbytes_read) +{ + uint8_t add_info, arg_nbytes; + uint8_t *data_ptr; + + data_ptr = cbor_data; + *maj_type = *data_ptr >> 5; // High-order 3 bits + add_info = *data_ptr & 0x1f; // Low-order 5 bits + data_ptr++; + + *arg = 0; + arg_nbytes = 0; + + if (add_info < 24) { + *arg = add_info; + } else if (add_info == 24) { + arg_nbytes = 1; + } else if (add_info == 25) { + arg_nbytes = 2; + } else if (add_info == 26) { + arg_nbytes = 4; + } else if (add_info == 27) { + arg_nbytes = 8; + } else { + return PSA_ERROR_GENERIC_ERROR; + } + + while (0 < arg_nbytes--) { // Read argument in network byte order + *arg = (*arg << 8) | *(data_ptr++); + } + + *nbytes_read = data_ptr - cbor_data; + + return PSA_SUCCESS; +} + +/***************************************************************************//** + * Parse and pretty-print CBOR data. + ******************************************************************************/ +static psa_status_t cbor_pretty_print(uint8_t *cbor_data) +{ + size_t nbytes_read = 0; + return cbor_parse(cbor_data, &nbytes_read, true, 0, 2); +} + +/***************************************************************************//** + * Parse and pretty-print claims from attestation token. + ******************************************************************************/ +static psa_status_t token_claims_pretty_print(uint8_t *token_data) +{ + uint8_t maj_type; + uint8_t *data_ptr; + uint64_t arg; + uint32_t nclaims; + int64_t claim_id; + size_t item_size; + psa_status_t ret; + + if (token_data[0] != 0xd2 || token_data[1] != 0x84) { + return PSA_ERROR_GENERIC_ERROR; + } + + data_ptr = token_data + 2; + + // Skip protected header parameters + ret = cbor_parse(data_ptr, &item_size, false, 0, 0); + if (ret != PSA_SUCCESS) { + return ret; + } + data_ptr += item_size; + + // Skip unprotected header parameters + ret = cbor_parse(data_ptr, &item_size, false, 0, 0); + if (ret != PSA_SUCCESS) { + return ret; + } + data_ptr += item_size; + + // Unwrap byte string containing CBOR-encoded claims + ret = cbor_parse_maj_and_arg(data_ptr, &maj_type, &arg, &item_size); + if (ret != PSA_SUCCESS) { + return ret; + } + data_ptr += item_size; + + if (maj_type != CBOR_BYTE_STR) { + return PSA_ERROR_GENERIC_ERROR; + } + + printf("\nToken claims:\n"); + cbor_pretty_print(data_ptr); + + // Parse and pretty-print the map data structure containing the claims + printf("\nList of claims printed with human-friendly names:"); + ret = cbor_parse_maj_and_arg(data_ptr, &maj_type, &arg, &item_size); + if (ret != PSA_SUCCESS) { + return ret; + } + data_ptr += item_size; + + if (maj_type != CBOR_MAP) { + return PSA_ERROR_GENERIC_ERROR; + } + + nclaims = arg; + for (uint32_t i = 0; i < nclaims; i++) { + // Parse claim ID integer + ret = cbor_parse_maj_and_arg(data_ptr, &maj_type, &arg, &item_size); + if (ret != PSA_SUCCESS) { + return ret; + } + data_ptr += item_size; + + if (maj_type == CBOR_UNSIGNED_INT) { + claim_id = arg; + } else if (maj_type == CBOR_NEGATIVE_INT) { + claim_id = -(arg + 1); + } else { + return PSA_ERROR_GENERIC_ERROR; + } + + // Parse and pretty-print claim + printf("\n "); + switch (claim_id) { + case CLAIM_ARM_PSA_PROFILE_ID: + case CLAIM_ARM_PSA_PROFILE_ID_P1: + printf("Profile Definition"); + break; + + case CLAIM_ARM_PSA_PARTITION_ID: + case CLAIM_ARM_PSA_PARTITION_ID_P1: + printf("Client ID"); + break; + + case CLAIM_ARM_PSA_LIFECYCLE: + case CLAIM_ARM_PSA_LIFECYCLE_P1: + printf("Security Lifecycle"); + break; + + case CLAIM_ARM_PSA_IMPLEMENTATION_ID: + case CLAIM_ARM_PSA_IMPLEMENTATION_ID_P1: + printf("Implementation ID"); + break; + + case CLAIM_ARM_PSA_BOOT_SEED: + case CLAIM_ARM_PSA_BOOT_SEED_P1: + printf("Boot seed"); + break; + + case CLAIM_ARM_PSA_SW_COMPONENTS: + case CLAIM_ARM_PSA_SW_COMPONENTS_P1: + printf("Software Components"); + break; + + case CLAIM_ARM_PSA_NONCE: + case CLAIM_ARM_PSA_NONCE_P1: + printf("Nonce"); + break; + + case CLAIM_ARM_PSA_IETF_EAT_UEID: + case CLAIM_ARM_PSA_IETF_EAT_UEID_P1: + printf("Instance ID"); + break; + + default: + printf("(UNKNOWN CLAIM)"); + break; + } + + printf(", Claim ID: %" PRIi64 "\n", claim_id); + + ret = cbor_parse(data_ptr, &item_size, true, 1, 2); + if (ret != PSA_SUCCESS) { + return ret; + } + data_ptr += item_size; + } + + return PSA_SUCCESS; +} diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_attestation.h b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_attestation.h new file mode 100644 index 00000000000..12fd5bc4116 --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_attestation.h @@ -0,0 +1,147 @@ +/***************************************************************************//** + * @file app_psa_attestation.h + * @brief PSA attestation functions. + ******************************************************************************* + * # License + * Copyright 2022 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 APP_PSA_ATTESTATION_H +#define APP_PSA_ATTESTATION_H + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "psa/initial_attestation.h" +#include "sl_tz_attestation.h" +#include "app_psa_crypto_key.h" +#include "app_psa_crypto_macro.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- +// Claim ID for PSA 2.0.0 +typedef enum { + CLAIM_ARM_PSA_PROFILE_ID = 265, + CLAIM_ARM_PSA_PARTITION_ID = 2394, + CLAIM_ARM_PSA_LIFECYCLE = 2395, + CLAIM_ARM_PSA_IMPLEMENTATION_ID = 2396, + CLAIM_ARM_PSA_BOOT_SEED = 2397, + CLAIM_ARM_PSA_SW_COMPONENTS = 2399, + CLAIM_ARM_PSA_NONCE = 10, + CLAIM_ARM_PSA_IETF_EAT_UEID = 256, +} attestation_claim_id_t; + +// Claim ID for PSA_IOT_PROFILE_1 +typedef enum { + CLAIM_ARM_PSA_PROFILE_ID_P1 = -75000, + CLAIM_ARM_PSA_PARTITION_ID_P1 = -75001, + CLAIM_ARM_PSA_LIFECYCLE_P1 = -75002, + CLAIM_ARM_PSA_IMPLEMENTATION_ID_P1 = -75003, + CLAIM_ARM_PSA_BOOT_SEED_P1 = -75004, + CLAIM_ARM_PSA_SW_COMPONENTS_P1 = -75006, + CLAIM_ARM_PSA_NONCE_P1 = -75008, + CLAIM_ARM_PSA_IETF_EAT_UEID_P1 = -75009, +} attestation_claim_id_p1_t; + +typedef enum { + CBOR_UNSIGNED_INT, + CBOR_NEGATIVE_INT, + CBOR_BYTE_STR, + CBOR_TEXT_STR, + CBOR_ARRAY, + CBOR_MAP, + CBOR_TAG, + CBOR_SIMPLE_FLOAT +} cbor_major_type_t; + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Get size of the PSA Attestation Token. + * + * @returns Returns size of the PSA Attestation Token. + ******************************************************************************/ +size_t get_token_size(void); + +/***************************************************************************//** + * Generate random numbers and save them to a buffer. + * + * @param[in] size + * Size of randomly generated number in bytes. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t generate_random_number(uint32_t size); + +/***************************************************************************//** + * Print the nonce. + * + * @param[in] size + * Size of nonce in bytes. + * + * @returns void. + ******************************************************************************/ +void print_nonce(uint32_t size); + +/***************************************************************************//** + * @brief + * Get the size of the PSA Attestation Token. + * + * @param[in] nonce_size + * Size of randomly generated nonce/challenge in bytes. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t get_attested_token_size(size_t nonce_size); + +/***************************************************************************//** + * @brief + * Get the PSA Attestation Token. + * + * @param[in] nonce_size + * Size of randomly generated nonce/challenge in bytes. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t get_attested_token(size_t nonce_size); + +/***************************************************************************//** + * @brief + * Get the Public Attestation Key. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t get_public_attestation_key(void); + +/***************************************************************************//** + * @brief + * Print the Public Attestation Key. + * + * @returns void. + ******************************************************************************/ +void print_pub_key(void); + +/***************************************************************************//** + * @brief + * Print attestation token and claims in both raw and human-readable format. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t print_attestation_token(void); + +#endif // APP_PSA_ATTESTATION_H diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_crypto_key.c b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_crypto_key.c new file mode 100644 index 00000000000..9db367731fa --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_crypto_key.c @@ -0,0 +1,449 @@ +/***************************************************************************//** + * @file app_psa_crypto_key.c + * @brief PSA Crypto key functions. + ******************************************************************************* + * # License + * Copyright 2020 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_psa_crypto_key.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- +/// Key buffer +static uint8_t key_buf[KEY_BUF_SIZE]; + +/// Key length in bytes +static size_t key_len; + +/// Key identifier +static psa_key_id_t key_id; + +/// Key attributes +static psa_key_attributes_t key_attr; + +// ----------------------------------------------------------------------------- +// Public Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Get key buffer pointer. + ******************************************************************************/ +uint8_t * get_key_buf_ptr(void) +{ + return(key_buf); +} + +/***************************************************************************//** + * Get key length. + ******************************************************************************/ +size_t get_key_len(void) +{ + return(key_len); +} + +/***************************************************************************//** + * Get key identifier. + ******************************************************************************/ +psa_key_id_t get_key_id(void) +{ + return(key_id); +} + +/***************************************************************************//** + * Get key algorithm. + ******************************************************************************/ +psa_algorithm_t get_key_algo(void) +{ + psa_algorithm_t algo; + + if (psa_get_key_attributes(key_id, &key_attr) != PSA_SUCCESS) { + return(0); + } + algo = psa_get_key_algorithm(&key_attr); + + // Free resources + psa_reset_key_attributes(&key_attr); + return(algo); +} + +/***************************************************************************//** + * Set key length. + ******************************************************************************/ +void set_key_len(size_t length) +{ + key_len = length; +} + +/***************************************************************************//** + * Set key identifier. + ******************************************************************************/ +void set_key_id(psa_key_id_t id) +{ + key_id = id; +} + +/***************************************************************************//** + * Initialize the PSA Crypto. + ******************************************************************************/ +psa_status_t init_psa_crypto(void) +{ + print_error_cycle(psa_crypto_init()); +} + +/***************************************************************************//** + * Create or import a key. + ******************************************************************************/ +psa_status_t create_import_key(uint8_t storage_type, + psa_key_type_t type, + size_t size, + psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo) +{ + // Use algorithm to set key usage and type + if (PSA_ALG_IS_RANDOMIZED_ECDSA(algo) || algo == PSA_ALG_PURE_EDDSA) { + // DSA + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(type)) { + // Private key + if (algo == PSA_ALG_ECDSA_ANY) { + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else { + usage |= PSA_KEY_USAGE_SIGN_MESSAGE | PSA_KEY_USAGE_VERIFY_MESSAGE; + } + } else { + // Public key + if (algo == PSA_ALG_ECDSA_ANY) { + usage |= PSA_KEY_USAGE_VERIFY_HASH; + } else { + usage |= PSA_KEY_USAGE_VERIFY_MESSAGE; + } + } + } else if (PSA_ALG_IS_ECDH(algo)) { + // ECDH + usage |= PSA_KEY_USAGE_DERIVE; + } else if (algo == PSA_ALG_ECB_NO_PADDING + || algo == PSA_ALG_CBC_NO_PADDING + || algo == PSA_ALG_CFB + || algo == PSA_ALG_CTR + || algo == PSA_ALG_CCM + || algo == PSA_ALG_GCM) { + // AES cipher or AEAD + type = PSA_KEY_TYPE_AES; + usage |= PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT; + } else if (algo == PSA_ALG_STREAM_CIPHER || algo == PSA_ALG_CHACHA20_POLY1305) { + // CHACHA20 cipher or AEAD, key size must be 256-bit + if (size != 256) { + return(PSA_ERROR_INVALID_ARGUMENT); + } + type = PSA_KEY_TYPE_CHACHA20; + usage |= PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT; + } else if (algo == PSA_ALG_CMAC) { + // CMAC + type = PSA_KEY_TYPE_AES; + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else if (PSA_ALG_IS_HMAC(algo)) { + // HMAC + type = PSA_KEY_TYPE_HMAC; + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else if (PSA_ALG_IS_HKDF(algo)) { + // HKDF + type = PSA_KEY_TYPE_DERIVE; + usage |= PSA_KEY_USAGE_DERIVE; + } else { + // Algorithm is not supported yet. + return(PSA_ERROR_NOT_SUPPORTED); + } + + // Setup key attributes + key_attr = psa_key_attributes_init(); + psa_set_key_type(&key_attr, type); + psa_set_key_bits(&key_attr, size); + psa_set_key_usage_flags(&key_attr, usage); + psa_set_key_algorithm(&key_attr, algo); + + switch (storage_type) { + // Plain key + case (CREATE_KEY_OFFSET + VOLATILE_PLAIN_KEY): + case (IMPORT_KEY_OFFSET + VOLATILE_PLAIN_KEY): + break; + + case (CREATE_KEY_OFFSET + PERSISTENT_PLAIN_KEY): + case (IMPORT_KEY_OFFSET + PERSISTENT_PLAIN_KEY): + psa_set_key_id(&key_attr, id); + break; + +#if defined(SEMAILBOX_PRESENT) && (_SILICON_LABS_SECURITY_FEATURE == _SILICON_LABS_SECURITY_FEATURE_VAULT) + // Wrapped key + case (CREATE_KEY_OFFSET + VOLATILE_WRAP_KEY): + case (IMPORT_KEY_OFFSET + VOLATILE_WRAP_KEY): + psa_set_key_lifetime(&key_attr, + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_VOLATILE, + WRAP_KEY_LOCATION)); + break; + + case (CREATE_KEY_OFFSET + PERSISTENT_WRAP_KEY): + case (IMPORT_KEY_OFFSET + PERSISTENT_WRAP_KEY): + psa_set_key_id(&key_attr, id); + psa_set_key_lifetime(&key_attr, + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_DEFAULT, + WRAP_KEY_LOCATION)); + break; +#endif + + // Invalid key storage + default: + return(PSA_ERROR_NOT_SUPPORTED); + } + + // Create or import a key + if (storage_type < IMPORT_KEY_OFFSET) { + print_error_cycle(psa_generate_key(&key_attr, &key_id)); + } else { + print_error_cycle(psa_import_key(&key_attr, + key_buf, + key_len, + &key_id)); + } +} + +/***************************************************************************//** + * Copy a key. + ******************************************************************************/ +psa_status_t copy_key(psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo) +{ + // Use algorithm to set copied key usage + // Key usage will be masked off by source key usage (bitwise-and) + if (PSA_ALG_IS_RANDOMIZED_ECDSA(algo) || algo == PSA_ALG_PURE_EDDSA) { + // DSA + if (algo == PSA_ALG_ECDSA_ANY) { + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else { + usage |= PSA_KEY_USAGE_SIGN_MESSAGE | PSA_KEY_USAGE_VERIFY_MESSAGE; + } + } else if (PSA_ALG_IS_ECDH(algo)) { + // ECDH + usage |= PSA_KEY_USAGE_DERIVE; + } else if (algo == PSA_ALG_ECB_NO_PADDING + || algo == PSA_ALG_CBC_NO_PADDING + || algo == PSA_ALG_CFB + || algo == PSA_ALG_CTR + || algo == PSA_ALG_CCM + || algo == PSA_ALG_GCM + || algo == PSA_ALG_STREAM_CIPHER + || algo == PSA_ALG_CHACHA20_POLY1305) { + // AES or CHACHA20 (cipher or AEAD) + usage |= PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT; + } else if (algo == PSA_ALG_CMAC || PSA_ALG_IS_HMAC(algo)) { + // CMAC or HMAC + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else if (PSA_ALG_IS_HKDF(algo)) { + // HKDF + usage |= PSA_KEY_USAGE_DERIVE; + } else { + // Algorithm is not supported yet. + return(PSA_ERROR_NOT_SUPPORTED); + } + + // Setup copied key attributes, key type and size are from source key + key_attr = psa_key_attributes_init(); + psa_set_key_usage_flags(&key_attr, usage); + psa_set_key_algorithm(&key_attr, algo); + + // Persistent plain key if id is non-zero + if (id >= PSA_KEY_ID_USER_MIN) { + psa_set_key_id(&key_attr, id); + } + + // Copy a key, key_id will be overwritten by copied key id + print_error_cycle(psa_copy_key(key_id, + &key_attr, + &key_id)); +} + +/***************************************************************************//** + * Set up key attributes of the derived symmetric key. + ******************************************************************************/ +psa_status_t derive_key_attr(uint8_t storage_type, + size_t size, + psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo) +{ + psa_key_type_t type; + + if (algo == PSA_ALG_ECB_NO_PADDING + || algo == PSA_ALG_CBC_NO_PADDING + || algo == PSA_ALG_CFB + || algo == PSA_ALG_CTR + || algo == PSA_ALG_CCM + || algo == PSA_ALG_GCM) { + // AES cipher or AEAD + type = PSA_KEY_TYPE_AES; + usage |= PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT; + } else if (algo == PSA_ALG_STREAM_CIPHER || algo == PSA_ALG_CHACHA20_POLY1305) { + // CHACHA20 cipher or AEAD, key size must be 256-bit + if (size != 256) { + return(PSA_ERROR_INVALID_ARGUMENT); + } + type = PSA_KEY_TYPE_CHACHA20; + usage |= PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT; + } else if (algo == PSA_ALG_CMAC) { + // CMAC + type = PSA_KEY_TYPE_AES; + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else if (PSA_ALG_IS_HMAC(algo)) { + // HMAC + type = PSA_KEY_TYPE_HMAC; + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else { + // Algorithm is not supported yet. + return(PSA_ERROR_NOT_SUPPORTED); + } + + // Setup key attributes + key_attr = psa_key_attributes_init(); + psa_set_key_type(&key_attr, type); + psa_set_key_bits(&key_attr, size); + psa_set_key_usage_flags(&key_attr, usage); + psa_set_key_algorithm(&key_attr, algo); + + switch (storage_type) { + // Plain key + case (CREATE_KEY_OFFSET + VOLATILE_PLAIN_KEY): + case (IMPORT_KEY_OFFSET + VOLATILE_PLAIN_KEY): + break; + + case (CREATE_KEY_OFFSET + PERSISTENT_PLAIN_KEY): + case (IMPORT_KEY_OFFSET + PERSISTENT_PLAIN_KEY): + psa_set_key_id(&key_attr, id); + break; + +#if defined(SEMAILBOX_PRESENT) && (_SILICON_LABS_SECURITY_FEATURE == _SILICON_LABS_SECURITY_FEATURE_VAULT) + // Wrapped key + case (CREATE_KEY_OFFSET + VOLATILE_WRAP_KEY): + case (IMPORT_KEY_OFFSET + VOLATILE_WRAP_KEY): + psa_set_key_lifetime(&key_attr, + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_VOLATILE, + WRAP_KEY_LOCATION)); + break; + + case (CREATE_KEY_OFFSET + PERSISTENT_WRAP_KEY): + case (IMPORT_KEY_OFFSET + PERSISTENT_WRAP_KEY): + psa_set_key_id(&key_attr, id); + psa_set_key_lifetime(&key_attr, + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_DEFAULT, + WRAP_KEY_LOCATION)); + break; +#endif + + // Invalid key storage + default: + return(PSA_ERROR_NOT_SUPPORTED); + } + + return(PSA_SUCCESS); +} + +/***************************************************************************//** + * Derive a symmetric key. + ******************************************************************************/ +psa_status_t derive_key(psa_key_derivation_operation_t *operation) +{ + // Derive a key + print_error_cycle(psa_key_derivation_output_key(&key_attr, operation, + &key_id)); +} + +/***************************************************************************//** + * Derive a symmetric key using Silicon Labs custom API. + ******************************************************************************/ +psa_status_t sl_derive_key(psa_algorithm_t algo, + psa_key_id_t master_id, + const uint8_t *kdf_info, + size_t info_len, + const uint8_t *kdf_salt, + size_t salt_len, + size_t iterations) +{ + // Derive a key + print_error_cycle(sl_psa_key_derivation_single_shot(algo, master_id, + kdf_info, info_len, + kdf_salt, salt_len, + iterations, + &key_attr, + &key_id)); +} + +/***************************************************************************//** + * Free any auxiliary resources that the key attribute object might contain. + ******************************************************************************/ +void reset_key_attr(void) +{ + psa_reset_key_attributes(&key_attr); +} + +/***************************************************************************//** + * Export a key. + ******************************************************************************/ +psa_status_t export_key(void) +{ + print_error_cycle(psa_export_key(key_id, + key_buf, + sizeof(key_buf), + &key_len)); +} + +/***************************************************************************//** + * Export a public key. + ******************************************************************************/ +psa_status_t export_public_key(void) +{ + print_error_cycle(psa_export_public_key(key_id, + key_buf, + sizeof(key_buf), + &key_len)); +} + +/***************************************************************************//** + * Destroy a key. + ******************************************************************************/ +psa_status_t destroy_key(void) +{ + psa_key_id_t temp_id = key_id; + + // Reset key identifier + key_id = 0; + print_error_cycle(psa_destroy_key(temp_id)); +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions +// ----------------------------------------------------------------------------- diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_crypto_key.h b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_crypto_key.h new file mode 100644 index 00000000000..4e639f1decf --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_crypto_key.h @@ -0,0 +1,203 @@ +/***************************************************************************//** + * @file app_psa_crypto_key.h + * @brief PSA Crypto key functions. + ******************************************************************************* + * # License + * Copyright 2020 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 APP_PSA_CRYPTO_KEY_H +#define APP_PSA_CRYPTO_KEY_H + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_psa_crypto_macro.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- +/// Key buffer size = maximum public key size + 1 +#define KEY_BUF_SIZE (133) + +/// Location value for wrapped key (PSA_KEY_LOCATION_SLI_SE_OPAQUE) +#define WRAP_KEY_LOCATION ((psa_key_location_t)0x000001UL) + +/// Offset for key creation +#define CREATE_KEY_OFFSET (0) + +/// Offset for key import +#define IMPORT_KEY_OFFSET (4) + +/// Key storage and type +#define VOLATILE_PLAIN_KEY (0) +#define PERSISTENT_PLAIN_KEY (1) +#define VOLATILE_WRAP_KEY (2) +#define PERSISTENT_WRAP_KEY (3) + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Get key buffer pointer. + * + * @returns Returns pointer to key buffer. + ******************************************************************************/ +uint8_t * get_key_buf_ptr(void); + +/***************************************************************************//** + * Get key length. + * + * @returns Returns key length. + ******************************************************************************/ +size_t get_key_len(void); + +/***************************************************************************//** + * Get key identifier. + * + * @returns Returns key identifier. + ******************************************************************************/ +psa_key_id_t get_key_id(void); + +/***************************************************************************//** + * Get key algorithm. + * + * @returns Returns key algorithm. + ******************************************************************************/ +psa_algorithm_t get_key_algo(void); + +/***************************************************************************//** + * Set key length. + * + * @param length The length of the key. + ******************************************************************************/ +void set_key_len(size_t length); + +/***************************************************************************//** + * Set key identifier. + * + * @param id The identifier of the key. + ******************************************************************************/ +void set_key_id(psa_key_id_t id); + +/***************************************************************************//** + * Initialize the PSA Crypto. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t init_psa_crypto(void); + +/***************************************************************************//** + * Generate or import a key. + * + * @param storage_type The key storage type. + * @param type The key type. + * @param size The key size in bits. + * @param id The key identifier for persistent key. + * @param usage The key usage. + * @param algo The key algorithm. + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t create_import_key(uint8_t storage_type, + psa_key_type_t type, + size_t size, + psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo); + +/***************************************************************************//** + * Copy a key. + * + * @param id The key identifier for persistent copied key. + * @param usage The copied key usage. + * @param algo The copied key algorithm. + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t copy_key(psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo); + +/***************************************************************************//** + * Set up key attributes of the derived symmetric key. + * + * @param storage_type The derived key storage type. + * @param size The derived key size in bits. + * @param id The key identifier for persistent derived key. + * @param usage The derived key usage. + * @param algo The derived key algorithm. + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t derive_key_attr(uint8_t storage_type, + size_t size, + psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo); + +/***************************************************************************//** + * Derive a symmetric key. + * + * @param operation Pointer to key derivation operation object. + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t derive_key(psa_key_derivation_operation_t *operation); + +/***************************************************************************//** + * Derive a symmetric key using Silicon Labs custom API. + * + * @param algo The key derivation algorithm. + * @param master_id The key identifier for the master key. + * @param kdf_info An optional information string for the HKDF. + * @param info_len The length of the information string. + * @param kdf_salt An optional salt value for both HKDF and PBKDF2. + * @param salt_len The length of the salt value. + * @param iterations The number of iterations (maximum 16384) for PBKDF2. + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t sl_derive_key(psa_algorithm_t algo, + psa_key_id_t master_id, + const uint8_t *kdf_info, + size_t info_len, + const uint8_t *kdf_salt, + size_t salt_len, + size_t iterations); + +/***************************************************************************//** + * Free any auxiliary resources that the object might contain. + ******************************************************************************/ +void reset_key_attr(void); + +/***************************************************************************//** + * Export a key. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t export_key(void); + +/***************************************************************************//** + * Export a public key. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t export_public_key(void); + +/***************************************************************************//** + * Destroy a key. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t destroy_key(void); + +#endif // APP_PSA_CRYPTO_KEY_H diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_crypto_macro.h b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_crypto_macro.h new file mode 100644 index 00000000000..c9f9cdf7b16 --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/app_psa_crypto_macro.h @@ -0,0 +1,97 @@ +/***************************************************************************//** + * @file app_psa_crypto_macro.h + * @brief PSA Crypto macros. + ******************************************************************************* + * # License + * Copyright 2020 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 APP_PSA_CRYPTO_MACRO_H +#define APP_PSA_CRYPTO_MACRO_H + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "em_cmu.h" +#include "psa/crypto.h" +#include +#include + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- +#if defined(DWT_CTRL_CYCCNTENA_Msk) && (PSA_CRYPTO_PRINT == 1) +#define print_error_cycle(CODE) \ + do { \ + psa_status_t ret; \ + uint32_t cycles; \ + \ + DWT->CYCCNT = 0; \ + ret = CODE; \ + cycles = DWT->CYCCNT; \ + \ + if (ret == PSA_SUCCESS) { \ + printf("PSA_SUCCESS"); \ + } else { \ + printf("PSA_ERROR: %ld", ret); \ + } \ + \ + if (cycles < (CMU_ClockFreqGet(cmuClock_CORE) / 10)) { \ + printf(" (cycles: %" PRIu32 " time: %" PRIu32 " us)\n", \ + cycles, \ + (cycles * 10) / (CMU_ClockFreqGet(cmuClock_CORE) / 100000)); \ + } \ + else { \ + printf(" (cycles: %" PRIu32 " time: %" PRIu32 " ms)\n", \ + cycles, \ + cycles / (CMU_ClockFreqGet(cmuClock_CORE) / 1000)); \ + } \ + return ret; \ + } while (0) + +#else + +#define print_error_cycle(CODE) \ + do { \ + psa_status_t ret; \ + \ + ret = CODE; \ + if (ret == PSA_SUCCESS) { \ + printf("OK\n"); \ + } else { \ + printf("Failed: %ld\n", ret); \ + } \ + return ret; \ + } while (0) + +#endif + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Declarations +// ----------------------------------------------------------------------------- +/***************************************************************************//** + * Enable cycle counter in DWT. + ******************************************************************************/ +__STATIC_INLINE void enable_cycle_count(void) +{ +#if defined(DWT_CTRL_CYCCNTENA_Msk) && (PSA_CRYPTO_PRINT == 1) + CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; + DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; +#else + (void)0; +#endif +} + +#endif // APP_PSA_CRYPTO_MACRO_H diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/main.c b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/main.c new file mode 100644 index 00000000000..15a64ca47dd --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/main.c @@ -0,0 +1,90 @@ +/***************************************************************************//** + * @file main.c + * @brief The main() function. + ******************************************************************************* + * # License + * Copyright 2020 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT +#include "app_init.h" +#include "app_process.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Main function + ******************************************************************************/ +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions +// ----------------------------------------------------------------------------- diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/readme.md b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/readme.md new file mode 100644 index 00000000000..8437790047e --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/readme.md @@ -0,0 +1,43 @@ +# TrustZone PSA Attestation (Non-secure application) + + +This example uses the PSA attestation API to fetch the PSA attestation token on the supported Series 2 device. + +The example also demonstrates how the PSA attestation token can be parsed and printed in a human-readable format. Parsing and printing the PSA attestation token on the chip might not be a typical use case. But it can showcase the structure and capabilities of the PSA attestation token. + +An attestation token is a token that contains cryptographically signed claims about the device. In other words, it provides a way to securely attest certain device information, such as the serial number and security configuration. The PSA attestation token is a COSE_Sign1 structure that encapsulates the signed CBOR Web Token containing the claims. + +The example redirects standard I/O to the virtual serial port (VCOM) of the kit. By default, the serial port setting is 115200 bps and 8-N-1 configuration. + +The example has been instrumented with code to count the number of clock cycles spent in different operations. The results are printed on the VCOM serial port console. This feature can be disabled by defining `PSA_CRYPTO_PRINT=0` (default is 1) in the IDE setting (`Preprocessor->Defined symbols`). + +## PSA attestation API + + +The following PSA attestation APIs are used in this example: + + +* `psa_initial_attest_get_token_size` +* `psa_initial_attest_get_token` +* `sl_tz_attestation_get_public_key` (Silicon Labs custom API) + + + +## Getting Started + + +The Non-secure application needs to work with the Secure application on a workspace (see readme in `tz_psa_attestation_ws`). + + +## Additional Information + + +1. The Silicon Labs custom API `sl_tz_attestation_get_public_key()` is used to get the Public Attestation Key. +2. The Series 2 device will generate the PSA attestation token by request unless the SE OTP is uninitialized or the `SECURE_BOOT_ENABLE` option in SE OTP is disabled. +3. The default optimization level is `Optimize for debugging (-Og)` on Simplicity IDE and `None` on IAR Embedded Workbench. + + +## Resources + + +[AN1374: Series 2 TrustZone](https://www.silabs.com/documents/public/application-notes/an1374-trustzone.pdf) \ No newline at end of file diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/tz_psa_attestation_ns.slcp b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/tz_psa_attestation_ns.slcp new file mode 100644 index 00000000000..b3d3a9fcc4a --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ns/tz_psa_attestation_ns.slcp @@ -0,0 +1,77 @@ +project_name: tz_psa_attestation_ns +package: platform +quality: production +label: Platform - TrustZone PSA Attestation (Non-secure application) +description: > + The Non-secure part of the application demonstrates how to generate PSA attestation token and print them in a human-readable format. The Non-secure application needs to build with the Secure application on a workspace (tz_psa_attestation_ws). +category: Example|Platform +filter: + - name: "Device Type" + value: ["SoC"] + - name: "MCU" + value: ["32-bit MCU"] + - name: "Project Difficulty" + value: ["Advanced"] +source: + - path: main.c + - path: app_init.c + - path: app_process.c + - path: app_psa_attestation.c + - path: app_psa_crypto_key.c +include: + - path: . + file_list: + - path: app_init.h + - path: app_process.h + - path: app_psa_attestation.h + - path: app_psa_crypto_key.h + - path: app_psa_crypto_macro.h +readme: + - path: readme.md +ui_hints: + highlight: readme.md +component: + - id: trustzone_nonsecure + - id: tz_secure_key_library + - id: tz_service_attestation + - id: sl_system + - id: device_init + - id: device_init_hfrco + - id: printf + - id: iostream_retarget_stdio + - id: iostream_recommended_stream +requires: + - name: armv8m.main +configuration: + - name: SL_DEVICE_INIT_HFRCO_BAND + value: cmuHFRCODPLLFreq_38M0Hz + - name: SL_BOARD_ENABLE_VCOM + value: 1 +define: + - name: DEBUG_EFM + - name: PSA_CRYPTO_PRINT +toolchain_settings: + - option: optimize + value: debug +template_contribution: + - name: memory_flash_start + value: 0x2C000 + condition: [device_sdid_200] + - name: memory_flash_start + value: 0x2C000 + condition: [device_sdid_205] + - name: memory_flash_start + value: 0x802C000 + unless: [device_sdid_200, device_sdid_205] + - name: memory_flash_size + value: 0x54000 + - name: memory_ram_start + value: 0x20003000 + - name: memory_ram_size + value: 0x5000 +import: + - id: trustzone_secure_application +post_build: + profile: tz_nonsecure_application +tag: + - companion:secure_app diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_s.slcp b/app/common/example/tz_psa_attestation/tz_psa_attestation_s.slcp new file mode 100644 index 00000000000..aaa628838bf --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_s.slcp @@ -0,0 +1,74 @@ +project_name: tz_psa_attestation_s +package: platform +quality: production +label: Platform - TrustZone PSA Attestation (Secure application) +description: > + The Secure part of the application provides the PSA Crypto and Attestation functionalities in the Secure world. The Secure application needs to build with the Non-secure application on a workspace (tz_psa_attestation_ws). +category: Example|Platform +filter: + - name: "Device Type" + value: ["SoC"] + - name: "MCU" + value: ["32-bit MCU"] + - name: "Project Difficulty" + value: ["Advanced"] + +readme: + - path: readme.md +ui_hints: + highlight: readme.md + +component: + - id: trustzone_secure + - id: tz_secure_key_library + - id: example_keypair + +requires: + - name: armv8m.main + +configuration: + - name: SL_STACK_SIZE + value: '3072' + - name: SL_HEAP_SIZE + value: '4096' + - name: BOOTLOADER_DISABLE_OLD_BOOTLOADER_MITIGATION + value: '1' + +define: + # PSA Crypto configuration: + - name: TFM_CRYPTO_CONC_OPER_NUM + value: 2 + +template_contribution: + - name: memory_flash_start + value: 0x0 + condition: [device_sdid_200] + - name: memory_flash_start + value: 0x0 + condition: [device_sdid_205] + - name: memory_flash_start + value: 0x8000000 + unless: [device_sdid_200, device_sdid_205] + - name: memory_flash_size + value: 0x2C000 + - name: memory_ram_start + value: 0x20000000 + - name: memory_ram_size + value: 0x3000 + - name: application_type + value: "APPLICATION_TYPE_MCU" + condition: + - bootloader_app_properties + +import: + - id: trustzone_nonsecure_application + +export: + library: + - path: artifact/trustzone_secure_library.o + +post_build: + profile: tz_secure_application_key + +tag: + - companion:nonsecure_app diff --git a/app/common/example/tz_psa_attestation/tz_psa_attestation_ws.slcw b/app/common/example/tz_psa_attestation/tz_psa_attestation_ws.slcw new file mode 100644 index 00000000000..9798bc938dc --- /dev/null +++ b/app/common/example/tz_psa_attestation/tz_psa_attestation_ws.slcw @@ -0,0 +1,13 @@ +label: tz_psa_attestation_ws +description: > + This example workspace demonstrates TrustZone for PSA Attestation. +quality: production +project: + - path: tz_psa_attestation_s.slcp + id: trustzone_secure_application + output: tz_psa_attestation_s + - path: tz_psa_attestation_ns/tz_psa_attestation_ns.slcp + id: trustzone_nonsecure_application + output: tz_psa_attestation_ns +post_build: + profile: tz_application_sign diff --git a/app/common/example/tz_psa_crypto_ecdh/readme.md b/app/common/example/tz_psa_crypto_ecdh/readme.md new file mode 100644 index 00000000000..82c4ba99620 --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/readme.md @@ -0,0 +1,44 @@ +# TrustZone PSA Crypto ECDH (Workspace and Secure application) + + +The Simplicity IDE uses the `tz_psa_crypto_ecdh_ws` workspace to create the following Secure and Non-secure applications for the TrustZone PSA Crypto ECDH example. The post-build action in the workspace will combine the Secure and Non-secure binaries into one image for flashing. + + +* `tz_psa_crypto_ecdh_s` (Secure application) +* `tz_psa_crypto_ecdh_ns` (Non-secure application) + +The Secure application makes a TrustZone secure library for running PSA Crypto and Attestation in the Secure world. The following services are provided to the Non-secure world through the veneers in the Non-secure Callable (NSC). + + +* `Attestation` +* `MSC` +* `NVM3` +* `PSA Crypto` +* `PSA ITS` +* `SE Manager` +* `SYSCFG` + + +## Getting Started + + +1. Upgrade the kit’s firmware to the latest version (see `Adapter Firmware` under [General Device Information](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-about-the-launcher/welcome-and-device-tabs#general-device-information) in the Simplicity Studio 5 User's Guide). +2. Upgrade the device’s SE firmware to the latest version (see `Secure Firmware` under [General Device Information](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-about-the-launcher/welcome-and-device-tabs#general-device-information) in the Simplicity Studio 5 User's Guide). +3. Open any terminal program and connect to the kit’s VCOM port (if using `Device Console` in Simplicity Studio 5, `Line terminator:` must be set to `None`). +4. Use the `tz_psa_crypto_ecdh_ws` workspace to create Secure and Non-secure projects in the Simplicity IDE (see [Examples](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-getting-started/start-a-project#examples) in the Simplicity Studio 5 User's Guide). +5. Build the Secure and Non-secure projects and download the combined images to the kit (refer to [AN1374: Series 2 TrustZone](https://www.silabs.com/documents/public/application-notes/an1374-trustzone.pdf) for details). +6. Run the example and follow the instructions shown on the console. + + +## Additional Information + + +1. The default optimization level is `Optimize for size (-Os)` on Simplicity IDE and IAR Embedded Workbench. + + +## Resources + + +[AN1374: Series 2 TrustZone](https://www.silabs.com/documents/public/application-notes/an1374-trustzone.pdf) + + diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_init.c b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_init.c new file mode 100644 index 00000000000..31b7e8aa374 --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_init.c @@ -0,0 +1,54 @@ +/***************************************************************************//** + * @file app_init.c + * @brief Application initialization functions. + ******************************************************************************* + * # License + * Copyright 2020 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_init.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * The function is used for some basic initialization relates to the + * application. + ******************************************************************************/ +void app_init(void) +{ + enable_cycle_count(); +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions +// ----------------------------------------------------------------------------- diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_init.h b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_init.h new file mode 100644 index 00000000000..b1612cb09ac --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_init.h @@ -0,0 +1,43 @@ +/***************************************************************************//** + * @file app_init.h + * @brief Application initialization functions. + ******************************************************************************* + * # License + * Copyright 2020 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 APP_INIT_H +#define APP_INIT_H + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_psa_crypto_macro.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * The function is used for some basic initialization relates to the + * application. + ******************************************************************************/ +void app_init(void); + +#endif // APP_INIT_H diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_process.c b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_process.c new file mode 100644 index 00000000000..3d5098720dd --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_process.c @@ -0,0 +1,506 @@ +/***************************************************************************//** + * @file app_process.c + * @brief Top level application functions. + ******************************************************************************* + * # License + * Copyright 2020 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_process.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Retrieve input character from VCOM port. + ******************************************************************************/ +static void app_iostream_usart_process_action(void); + +/***************************************************************************//** + * Print key storage. + ******************************************************************************/ +static void print_key_storage(void); + +/***************************************************************************//** + * Print asymmetric key size option. + ******************************************************************************/ +static void print_key_size_option(void); + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- +/// Space press status +static bool space_press; + +/// Enter press status +static bool enter_press; + +/// State machine state variable +static state_t app_state = PSA_CRYPTO_INIT; + +/// String for example +static uint8_t example_string[] = "PSA Crypto ECDH Example"; + +/// Asymmetric key storage selection +static uint8_t asymmetric_key_storage_select; + +static const char *asymmetric_key_storage_string[] = { + "VOLATILE PLAIN", + "PERSISTENT PLAIN", + "VOLATILE WRAPPED", + "PERSISTENT WRAPPED" +}; + +/// Asymmetric key ECC curve selection +static uint8_t asymmetric_key_curve_select; + +static const char *asymmetric_key_curve_string[] = { + "SECPxxxR1", + "MONTGOMERY" +}; + +static const psa_ecc_family_t asymmetric_key_curve[] = { + PSA_ECC_FAMILY_SECP_R1, + PSA_ECC_FAMILY_MONTGOMERY +}; + +/// ECC SECPR1 key size selection +static uint8_t secpr1_key_size_select; + +static const char *secpr1_key_size_string[] = { + "SECP192R1", + "SECP256R1", + "SECP384R1", + "SECP521R1", +}; + +static const size_t secpr1_key_size[] = { + 192, + 256, + 384, + 521 +}; + +/// ECC Montgomery key size selection +static uint8_t montgomery_key_size_select; + +static const char *montgomery_key_size_string[] = { + "CURVE25519 (X25519)", + "CURVE448 (X448)" +}; + +static const size_t montgomery_key_size[] = { + 255, + 448 +}; + +/// Selected key size +static size_t selected_key_size; + +/// Selected key string +static const char *selected_key_string; + +/// Client key identifier +static psa_key_id_t client_key_id; + +/// Server key identifier +static psa_key_id_t server_key_id; + +/// Shared secret copy +static uint8_t shared_secret_copy[SHARED_SECRET_SIZE]; + +// ----------------------------------------------------------------------------- +// Public Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Application state machine, called infinitely. + ******************************************************************************/ +void app_process_action(void) +{ + // Retrieve input character from VCOM port + app_iostream_usart_process_action(); + + switch (app_state) { + case PSA_CRYPTO_INIT: + printf("\n%s - Core running at %" PRIu32 " kHz.\n", example_string, + CMU_ClockFreqGet(cmuClock_CORE) / 1000); + printf(" . PSA Crypto initialization... "); + if (init_psa_crypto() == PSA_SUCCESS) { + print_key_storage(); + } else { + app_state = PSA_CRYPTO_IDLE; + } + break; + + case SELECT_KEY_STORAGE: + if (space_press) { + space_press = false; + asymmetric_key_storage_select++; + if (asymmetric_key_storage_select > KEY_STORAGE_MAX) { + asymmetric_key_storage_select = VOLATILE_PLAIN_KEY; + } + printf(" + Current asymmetric key is a %s key.\n", + asymmetric_key_storage_string[asymmetric_key_storage_select]); + } + if (enter_press) { + enter_press = false; +#if defined(SEMAILBOX_PRESENT) && (_SILICON_LABS_SECURITY_FEATURE == _SILICON_LABS_SECURITY_FEATURE_VAULT) + printf("\n . Current ECC curve is %s.\n", + asymmetric_key_curve_string[asymmetric_key_curve_select]); + printf(" + Press SPACE to select ECC curve (%s or %s), press ENTER to " + "next option.\n", + asymmetric_key_curve_string[0], + asymmetric_key_curve_string[1]); +#else + // No software fallback on X448 + if (asymmetric_key_curve_select == 0) { + printf("\n . Current ECC curve is %s.\n", + asymmetric_key_curve_string[asymmetric_key_curve_select]); + } else { + printf("\n . Current ECC curve is %s.\n", + montgomery_key_size_string[0]); + } + printf(" + Press SPACE to select ECC curve (%s or %s), press ENTER to " + "next option or run if %s is selected.\n", + asymmetric_key_curve_string[0], + montgomery_key_size_string[0], montgomery_key_size_string[0]); +#endif + app_state = SELECT_KEY_CURVE; + } + break; + + case SELECT_KEY_CURVE: + if (space_press) { + space_press = false; + asymmetric_key_curve_select++; + if (asymmetric_key_curve_select > KEY_CURVE_MAX) { + asymmetric_key_curve_select = 0; + } +#if defined(SEMAILBOX_PRESENT) && (_SILICON_LABS_SECURITY_FEATURE == _SILICON_LABS_SECURITY_FEATURE_VAULT) + printf(" + Current ECC curve is %s.\n", + asymmetric_key_curve_string[asymmetric_key_curve_select]); +#else + // No software fallback on X448 + if (asymmetric_key_curve_select == 0) { + printf(" + Current ECC curve is %s.\n", + asymmetric_key_curve_string[asymmetric_key_curve_select]); + } else { + printf(" + Current ECC curve is %s.\n", + montgomery_key_size_string[0]); + } +#endif + } + if (enter_press) { + enter_press = false; + print_key_size_option(); + } + break; + + case SELECT_SECPR1_SIZE: + if (space_press) { + space_press = false; + secpr1_key_size_select++; + if (secpr1_key_size_select > SECPR1_SIZE_MAX) { + secpr1_key_size_select = 0; + } + printf(" + Current %s key length is %d-bit (%s).\n", + asymmetric_key_curve_string[asymmetric_key_curve_select], + secpr1_key_size[secpr1_key_size_select], + secpr1_key_size_string[secpr1_key_size_select]); + } + if (enter_press) { + enter_press = false; + selected_key_size = secpr1_key_size[secpr1_key_size_select]; + selected_key_string = secpr1_key_size_string[secpr1_key_size_select]; + app_state = CREATE_CLIENT_KEY; + } + break; + + case SELECT_MONTGOMERY_SIZE: + if (space_press) { + space_press = false; + montgomery_key_size_select++; + if (montgomery_key_size_select > MONTGOMERY_SIZE_MAX) { + montgomery_key_size_select = 0; + } + printf(" + Current %s key length is %d-bit (%s).\n", + asymmetric_key_curve_string[asymmetric_key_curve_select], + montgomery_key_size[montgomery_key_size_select], + montgomery_key_size_string[montgomery_key_size_select]); + } + if (enter_press) { + enter_press = false; + selected_key_size = montgomery_key_size[montgomery_key_size_select]; + selected_key_string = montgomery_key_size_string[montgomery_key_size_select]; + app_state = CREATE_CLIENT_KEY; + } + break; + + case CREATE_CLIENT_KEY: + app_state = PSA_CRYPTO_EXIT; + printf("\n . ECDH Client\n"); + printf(" + Creating a %s (%d-bit) %s client key... ", + selected_key_string, selected_key_size, + asymmetric_key_storage_string[asymmetric_key_storage_select]); + if (create_import_key(CREATE_KEY_OFFSET + asymmetric_key_storage_select, + PSA_KEY_TYPE_ECC_KEY_PAIR(asymmetric_key_curve[asymmetric_key_curve_select]), + selected_key_size, + CLIENT_KEY_ID, + DEFAULT_KEY_USAGE, + PSA_ALG_ECDH) == PSA_SUCCESS) { + // Free resources + reset_key_attr(); + // Save client key identifier + client_key_id = get_key_id(); + app_state = CREATE_SERVER_KEY; + } + break; + + case CREATE_SERVER_KEY: + app_state = PSA_CRYPTO_EXIT; + printf(" + Creating a %s (%d-bit) %s server key... ", + selected_key_string, + selected_key_size, + asymmetric_key_storage_string[asymmetric_key_storage_select]); + + if (create_import_key(CREATE_KEY_OFFSET + asymmetric_key_storage_select, + PSA_KEY_TYPE_ECC_KEY_PAIR(asymmetric_key_curve[asymmetric_key_curve_select]), + selected_key_size, + SERVER_KEY_ID, + DEFAULT_KEY_USAGE, + PSA_ALG_ECDH) == PSA_SUCCESS) { + // Free resources + reset_key_attr(); + // Save server key identifier + server_key_id = get_key_id(); + app_state = EXPORT_SERVER_PUBLIC_KEY; + } + break; + + case EXPORT_SERVER_PUBLIC_KEY: + app_state = PSA_CRYPTO_EXIT; + printf(" + Exporting a public key of a %s (%d-bit) %s server key... ", + selected_key_string, + selected_key_size, + asymmetric_key_storage_string[asymmetric_key_storage_select]); + // Export server public key + set_key_id(server_key_id); + if (export_public_key() == PSA_SUCCESS) { + app_state = COMPUTE_CLIENT_SHARED_SECRET; + } + break; + + case COMPUTE_CLIENT_SHARED_SECRET: + app_state = PSA_CRYPTO_EXIT; + printf(" + Computing client shared secret with a %s (%d-bit) server " + "public key... ", selected_key_string, selected_key_size); + // Use server public key to compute shared secret + memset(get_shared_secret_buf_ptr(), 0, SHARED_SECRET_SIZE); + set_key_id(client_key_id); + set_peer_public_key_buf_ptr(get_key_buf_ptr()); + set_peer_public_key_len(get_key_len()); + if (compute_ecdh_shared_secret() == PSA_SUCCESS) { + // Save client shared secret + memcpy(shared_secret_copy, get_shared_secret_buf_ptr(), + get_shared_secret_length()); + app_state = EXPORT_CLIENT_PUBLIC_KEY; + } + break; + + case EXPORT_CLIENT_PUBLIC_KEY: + app_state = PSA_CRYPTO_EXIT; + printf("\n . ECDH Server\n"); + printf(" + Exporting a public key of a %s (%d-bit) %s client key... ", + selected_key_string, selected_key_size, + asymmetric_key_storage_string[asymmetric_key_storage_select]); + // Export client public key + set_key_id(client_key_id); + if (export_public_key() == PSA_SUCCESS) { + app_state = COMPUTE_SERVER_SHARED_SECRET; + } + break; + + case COMPUTE_SERVER_SHARED_SECRET: + app_state = PSA_CRYPTO_EXIT; + printf(" + Computing server shared secret with a %s (%d-bit) client " + "public key... ", selected_key_string, selected_key_size); + // Use client public key to compute shared secret + memset(get_shared_secret_buf_ptr(), 0, SHARED_SECRET_SIZE); + set_key_id(server_key_id); + set_peer_public_key_buf_ptr(get_key_buf_ptr()); + set_peer_public_key_len(get_key_len()); + if (compute_ecdh_shared_secret() == PSA_SUCCESS) { + printf(" + Comparing shared secret from client and server... "); + if (memcmp(shared_secret_copy, get_shared_secret_buf_ptr(), + get_shared_secret_length()) == 0) { + printf("OK\n"); + app_state = DESTROY_CLIENT_KEY; + } else { + printf("Failed\n"); + } + } + break; + + case DESTROY_CLIENT_KEY: + app_state = PSA_CRYPTO_EXIT; + printf(" + Destroying a %s (%d-bit) %s client key... ", + selected_key_string, selected_key_size, + asymmetric_key_storage_string[asymmetric_key_storage_select]); + set_key_id(client_key_id); + if (destroy_key() == PSA_SUCCESS) { + client_key_id = 0; // Reset client key identifier + app_state = DESTROY_SERVER_KEY; + } + break; + + case DESTROY_SERVER_KEY: + app_state = PSA_CRYPTO_EXIT; + printf(" + Destroying a %s (%d-bit) %s server key... ", + selected_key_string, selected_key_size, + asymmetric_key_storage_string[asymmetric_key_storage_select]); + set_key_id(server_key_id); + if (destroy_key() == PSA_SUCCESS) { + server_key_id = 0; // Reset server key identifier + print_key_storage(); + } + break; + + case PSA_CRYPTO_EXIT: + printf("\n . PSA Crypto deinitialization\n"); + // Destroy the keys regardless they are valid or not + set_key_id(client_key_id); + printf(" + Destroying a client key... "); + destroy_key(); + set_key_id(server_key_id); + printf(" + Destroying a server key... "); + destroy_key(); + mbedtls_psa_crypto_free(); + app_state = PSA_CRYPTO_IDLE; + break; + + case PSA_CRYPTO_IDLE: + default: + break; + } +} + +#if defined(MBEDTLS_ENTROPY_RAIL_PRESENT) +/***************************************************************************//** + * It cancels the MCU to go to sleep when RAIL entropy is used. + ******************************************************************************/ +bool app_is_ok_to_sleep(void) +{ + return false; +} +#endif + +// ----------------------------------------------------------------------------- +// Static Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Retrieve input character from VCOM port. + ******************************************************************************/ +static void app_iostream_usart_process_action(void) +{ + int8_t c; + + c = getchar(); + if (c > 0) { + if (c == ' ') { + space_press = true; + } + if (c == '\r') { + enter_press = true; + } + } +} + +/***************************************************************************//** + * Print key storage. + ******************************************************************************/ +static void print_key_storage(void) +{ + // Check if NVM3 can release any out-of-date objects to free up memory. + while (nvm3_repackNeeded(nvm3_defaultHandle)) { + printf("\n . Repacking NVM... "); + if (nvm3_repack(nvm3_defaultHandle) == ECODE_NVM3_OK) { + printf("OK\n"); + } else { + printf("Failed\n"); + } + } + + printf("\n . Current asymmetric key is a %s key.\n", + asymmetric_key_storage_string[asymmetric_key_storage_select]); +#if defined(SEMAILBOX_PRESENT) && (_SILICON_LABS_SECURITY_FEATURE == _SILICON_LABS_SECURITY_FEATURE_VAULT) + printf(" + Press SPACE to select a %s or %s or %s or %s key, press ENTER to " + "next option.\n", + asymmetric_key_storage_string[0], + asymmetric_key_storage_string[1], + asymmetric_key_storage_string[2], + asymmetric_key_storage_string[3]); +#else + printf(" + Press SPACE to select a %s or %s key, press ENTER to next " + "option.\n", asymmetric_key_storage_string[0], + asymmetric_key_storage_string[1]); +#endif + app_state = SELECT_KEY_STORAGE; +} + +/***************************************************************************//** + * Print asymmetric key size option. + ******************************************************************************/ +static void print_key_size_option(void) +{ + if (asymmetric_key_curve_select == 0) { + printf("\n . Current %s key length is %d-bit (%s).\n", + asymmetric_key_curve_string[asymmetric_key_curve_select], + secpr1_key_size[secpr1_key_size_select], + secpr1_key_size_string[secpr1_key_size_select]); + printf(" + Press SPACE to select %s key length (%d or %d or %d or %d), " + "press ENTER to run.\n", + asymmetric_key_curve_string[asymmetric_key_curve_select], + secpr1_key_size[0], secpr1_key_size[1], secpr1_key_size[2], + secpr1_key_size[3]); + app_state = SELECT_SECPR1_SIZE; + } else { +#if defined(SEMAILBOX_PRESENT) && (_SILICON_LABS_SECURITY_FEATURE == _SILICON_LABS_SECURITY_FEATURE_VAULT) + printf("\n . Current %s key length is %d-bit (%s).\n", + asymmetric_key_curve_string[asymmetric_key_curve_select], + montgomery_key_size[montgomery_key_size_select], + montgomery_key_size_string[montgomery_key_size_select]); + printf(" + Press SPACE to select %s key length (%d or %d), press ENTER to " + "run.\n", asymmetric_key_curve_string[asymmetric_key_curve_select], + montgomery_key_size[0], montgomery_key_size[1]); + app_state = SELECT_MONTGOMERY_SIZE; +#else + // No software fallback on X448, only X25519 is available + selected_key_size = 255; + selected_key_string = asymmetric_key_curve_string[asymmetric_key_curve_select]; + app_state = CREATE_CLIENT_KEY; +#endif + } +} diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_process.h b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_process.h new file mode 100644 index 00000000000..98430ed870a --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_process.h @@ -0,0 +1,82 @@ +/***************************************************************************//** + * @file app_process.h + * @brief Top level application functions. + ******************************************************************************* + * # License + * Copyright 2020 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 APP_PROCESS_H +#define APP_PROCESS_H + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_psa_crypto_ecdh.h" +#include "app_psa_crypto_key.h" +#include +#include "nvm3.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- +/// State machine states +typedef enum { + PSA_CRYPTO_IDLE, + PSA_CRYPTO_INIT, + SELECT_KEY_STORAGE, + SELECT_KEY_CURVE, + SELECT_SECPR1_SIZE, + SELECT_MONTGOMERY_SIZE, + CREATE_CLIENT_KEY, + CREATE_SERVER_KEY, + EXPORT_SERVER_PUBLIC_KEY, + COMPUTE_CLIENT_SHARED_SECRET, + EXPORT_CLIENT_PUBLIC_KEY, + COMPUTE_SERVER_SHARED_SECRET, + DESTROY_CLIENT_KEY, + DESTROY_SERVER_KEY, + PSA_CRYPTO_EXIT +} state_t; + +/// Option selection maximum values +#if defined(SEMAILBOX_PRESENT) && (_SILICON_LABS_SECURITY_FEATURE == _SILICON_LABS_SECURITY_FEATURE_VAULT) +#define KEY_STORAGE_MAX PERSISTENT_WRAP_KEY +#else +#define KEY_STORAGE_MAX PERSISTENT_PLAIN_KEY +#endif +#define SECPR1_SIZE_MAX (3) +#define KEY_CURVE_MAX (1) +#define MONTGOMERY_SIZE_MAX (1) + +/// Default key usage is none +#define DEFAULT_KEY_USAGE (0) + +/// Persistent client key ID +#define CLIENT_KEY_ID PSA_KEY_ID_USER_MIN + +/// Persistent server key ID +#define SERVER_KEY_ID (PSA_KEY_ID_USER_MIN + 1) + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Application state machine, called infinitely. + ******************************************************************************/ +void app_process_action(void); + +#endif // APP_PROCESS_H diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_ecdh.c b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_ecdh.c new file mode 100644 index 00000000000..77b2489a33a --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_ecdh.c @@ -0,0 +1,97 @@ +/***************************************************************************//** + * @file app_psa_crypto_ecdh.c + * @brief PSA Crypto ECDH functions. + ******************************************************************************* + * # License + * Copyright 2022 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. + * + ******************************************************************************/ +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_psa_crypto_ecdh.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- +/// Pointer to peer public key buffer +static uint8_t * peer_public_key_buf_ptr; + +/// Peer public key length +static size_t peer_public_key_len; + +/// Shared secret buffer +static uint8_t shared_secret_buf[SHARED_SECRET_SIZE]; + +/// Shared secret length +static size_t shared_secret_len; + +// ----------------------------------------------------------------------------- +// Public Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Get shared secret buffer pointer. + ******************************************************************************/ +uint8_t * get_shared_secret_buf_ptr(void) +{ + return(shared_secret_buf); +} + +/***************************************************************************//** + * Get shared secret length. + ******************************************************************************/ +size_t get_shared_secret_length(void) +{ + return(shared_secret_len); +} + +/***************************************************************************//** + * Set pointer to peer public key buffer. + ******************************************************************************/ +void set_peer_public_key_buf_ptr(uint8_t *ptr) +{ + peer_public_key_buf_ptr = ptr; +} + +/***************************************************************************//** + * Set peer public key length. + ******************************************************************************/ +void set_peer_public_key_len(size_t length) +{ + peer_public_key_len = length; +} + +/***************************************************************************//** + * Compute ECDH shared secret. + ******************************************************************************/ +psa_status_t compute_ecdh_shared_secret(void) +{ + print_error_cycle(psa_raw_key_agreement(PSA_ALG_ECDH, + get_key_id(), + peer_public_key_buf_ptr, + peer_public_key_len, + shared_secret_buf, + sizeof(shared_secret_buf), + &shared_secret_len)); +} diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_ecdh.h b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_ecdh.h new file mode 100644 index 00000000000..b95a4411735 --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_ecdh.h @@ -0,0 +1,75 @@ +/***************************************************************************//** + * @file app_psa_crypto_ecdh.h + * @brief PSA Crypto ECDH functions. + ******************************************************************************* + * # License + * Copyright 2020 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 APP_PSA_CRYPTO_ECDH_H +#define APP_PSA_CRYPTO_ECDH_H + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_psa_crypto_key.h" +#include "app_psa_crypto_macro.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- +/// ECDH shared secret size +#define SHARED_SECRET_SIZE (66) + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Get shared secret buffer pointer. + * + * @returns Returns pointer to shared secret buffer. + ******************************************************************************/ +uint8_t * get_shared_secret_buf_ptr(void); + +/***************************************************************************//** + * Get shared secret length. + * + * @returns Returns shared secret length. + ******************************************************************************/ +size_t get_shared_secret_length(void); + +/***************************************************************************//** + * Set pointer to peer public key buffer. + * + * @param ptr The pointer to peer public key buffer. + ******************************************************************************/ +void set_peer_public_key_buf_ptr(uint8_t *ptr); + +/***************************************************************************//** + * Set peer public key length. + * + * @param length The length of peer public key. + ******************************************************************************/ +void set_peer_public_key_len(size_t length); + +/***************************************************************************//** + * Compute ECDH shared secret. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t compute_ecdh_shared_secret(void); + +#endif // APP_PSA_CRYPTO_ECDH_H diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_key.c b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_key.c new file mode 100644 index 00000000000..9db367731fa --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_key.c @@ -0,0 +1,449 @@ +/***************************************************************************//** + * @file app_psa_crypto_key.c + * @brief PSA Crypto key functions. + ******************************************************************************* + * # License + * Copyright 2020 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_psa_crypto_key.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- +/// Key buffer +static uint8_t key_buf[KEY_BUF_SIZE]; + +/// Key length in bytes +static size_t key_len; + +/// Key identifier +static psa_key_id_t key_id; + +/// Key attributes +static psa_key_attributes_t key_attr; + +// ----------------------------------------------------------------------------- +// Public Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Get key buffer pointer. + ******************************************************************************/ +uint8_t * get_key_buf_ptr(void) +{ + return(key_buf); +} + +/***************************************************************************//** + * Get key length. + ******************************************************************************/ +size_t get_key_len(void) +{ + return(key_len); +} + +/***************************************************************************//** + * Get key identifier. + ******************************************************************************/ +psa_key_id_t get_key_id(void) +{ + return(key_id); +} + +/***************************************************************************//** + * Get key algorithm. + ******************************************************************************/ +psa_algorithm_t get_key_algo(void) +{ + psa_algorithm_t algo; + + if (psa_get_key_attributes(key_id, &key_attr) != PSA_SUCCESS) { + return(0); + } + algo = psa_get_key_algorithm(&key_attr); + + // Free resources + psa_reset_key_attributes(&key_attr); + return(algo); +} + +/***************************************************************************//** + * Set key length. + ******************************************************************************/ +void set_key_len(size_t length) +{ + key_len = length; +} + +/***************************************************************************//** + * Set key identifier. + ******************************************************************************/ +void set_key_id(psa_key_id_t id) +{ + key_id = id; +} + +/***************************************************************************//** + * Initialize the PSA Crypto. + ******************************************************************************/ +psa_status_t init_psa_crypto(void) +{ + print_error_cycle(psa_crypto_init()); +} + +/***************************************************************************//** + * Create or import a key. + ******************************************************************************/ +psa_status_t create_import_key(uint8_t storage_type, + psa_key_type_t type, + size_t size, + psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo) +{ + // Use algorithm to set key usage and type + if (PSA_ALG_IS_RANDOMIZED_ECDSA(algo) || algo == PSA_ALG_PURE_EDDSA) { + // DSA + if (PSA_KEY_TYPE_IS_ECC_KEY_PAIR(type)) { + // Private key + if (algo == PSA_ALG_ECDSA_ANY) { + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else { + usage |= PSA_KEY_USAGE_SIGN_MESSAGE | PSA_KEY_USAGE_VERIFY_MESSAGE; + } + } else { + // Public key + if (algo == PSA_ALG_ECDSA_ANY) { + usage |= PSA_KEY_USAGE_VERIFY_HASH; + } else { + usage |= PSA_KEY_USAGE_VERIFY_MESSAGE; + } + } + } else if (PSA_ALG_IS_ECDH(algo)) { + // ECDH + usage |= PSA_KEY_USAGE_DERIVE; + } else if (algo == PSA_ALG_ECB_NO_PADDING + || algo == PSA_ALG_CBC_NO_PADDING + || algo == PSA_ALG_CFB + || algo == PSA_ALG_CTR + || algo == PSA_ALG_CCM + || algo == PSA_ALG_GCM) { + // AES cipher or AEAD + type = PSA_KEY_TYPE_AES; + usage |= PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT; + } else if (algo == PSA_ALG_STREAM_CIPHER || algo == PSA_ALG_CHACHA20_POLY1305) { + // CHACHA20 cipher or AEAD, key size must be 256-bit + if (size != 256) { + return(PSA_ERROR_INVALID_ARGUMENT); + } + type = PSA_KEY_TYPE_CHACHA20; + usage |= PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT; + } else if (algo == PSA_ALG_CMAC) { + // CMAC + type = PSA_KEY_TYPE_AES; + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else if (PSA_ALG_IS_HMAC(algo)) { + // HMAC + type = PSA_KEY_TYPE_HMAC; + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else if (PSA_ALG_IS_HKDF(algo)) { + // HKDF + type = PSA_KEY_TYPE_DERIVE; + usage |= PSA_KEY_USAGE_DERIVE; + } else { + // Algorithm is not supported yet. + return(PSA_ERROR_NOT_SUPPORTED); + } + + // Setup key attributes + key_attr = psa_key_attributes_init(); + psa_set_key_type(&key_attr, type); + psa_set_key_bits(&key_attr, size); + psa_set_key_usage_flags(&key_attr, usage); + psa_set_key_algorithm(&key_attr, algo); + + switch (storage_type) { + // Plain key + case (CREATE_KEY_OFFSET + VOLATILE_PLAIN_KEY): + case (IMPORT_KEY_OFFSET + VOLATILE_PLAIN_KEY): + break; + + case (CREATE_KEY_OFFSET + PERSISTENT_PLAIN_KEY): + case (IMPORT_KEY_OFFSET + PERSISTENT_PLAIN_KEY): + psa_set_key_id(&key_attr, id); + break; + +#if defined(SEMAILBOX_PRESENT) && (_SILICON_LABS_SECURITY_FEATURE == _SILICON_LABS_SECURITY_FEATURE_VAULT) + // Wrapped key + case (CREATE_KEY_OFFSET + VOLATILE_WRAP_KEY): + case (IMPORT_KEY_OFFSET + VOLATILE_WRAP_KEY): + psa_set_key_lifetime(&key_attr, + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_VOLATILE, + WRAP_KEY_LOCATION)); + break; + + case (CREATE_KEY_OFFSET + PERSISTENT_WRAP_KEY): + case (IMPORT_KEY_OFFSET + PERSISTENT_WRAP_KEY): + psa_set_key_id(&key_attr, id); + psa_set_key_lifetime(&key_attr, + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_DEFAULT, + WRAP_KEY_LOCATION)); + break; +#endif + + // Invalid key storage + default: + return(PSA_ERROR_NOT_SUPPORTED); + } + + // Create or import a key + if (storage_type < IMPORT_KEY_OFFSET) { + print_error_cycle(psa_generate_key(&key_attr, &key_id)); + } else { + print_error_cycle(psa_import_key(&key_attr, + key_buf, + key_len, + &key_id)); + } +} + +/***************************************************************************//** + * Copy a key. + ******************************************************************************/ +psa_status_t copy_key(psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo) +{ + // Use algorithm to set copied key usage + // Key usage will be masked off by source key usage (bitwise-and) + if (PSA_ALG_IS_RANDOMIZED_ECDSA(algo) || algo == PSA_ALG_PURE_EDDSA) { + // DSA + if (algo == PSA_ALG_ECDSA_ANY) { + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else { + usage |= PSA_KEY_USAGE_SIGN_MESSAGE | PSA_KEY_USAGE_VERIFY_MESSAGE; + } + } else if (PSA_ALG_IS_ECDH(algo)) { + // ECDH + usage |= PSA_KEY_USAGE_DERIVE; + } else if (algo == PSA_ALG_ECB_NO_PADDING + || algo == PSA_ALG_CBC_NO_PADDING + || algo == PSA_ALG_CFB + || algo == PSA_ALG_CTR + || algo == PSA_ALG_CCM + || algo == PSA_ALG_GCM + || algo == PSA_ALG_STREAM_CIPHER + || algo == PSA_ALG_CHACHA20_POLY1305) { + // AES or CHACHA20 (cipher or AEAD) + usage |= PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT; + } else if (algo == PSA_ALG_CMAC || PSA_ALG_IS_HMAC(algo)) { + // CMAC or HMAC + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else if (PSA_ALG_IS_HKDF(algo)) { + // HKDF + usage |= PSA_KEY_USAGE_DERIVE; + } else { + // Algorithm is not supported yet. + return(PSA_ERROR_NOT_SUPPORTED); + } + + // Setup copied key attributes, key type and size are from source key + key_attr = psa_key_attributes_init(); + psa_set_key_usage_flags(&key_attr, usage); + psa_set_key_algorithm(&key_attr, algo); + + // Persistent plain key if id is non-zero + if (id >= PSA_KEY_ID_USER_MIN) { + psa_set_key_id(&key_attr, id); + } + + // Copy a key, key_id will be overwritten by copied key id + print_error_cycle(psa_copy_key(key_id, + &key_attr, + &key_id)); +} + +/***************************************************************************//** + * Set up key attributes of the derived symmetric key. + ******************************************************************************/ +psa_status_t derive_key_attr(uint8_t storage_type, + size_t size, + psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo) +{ + psa_key_type_t type; + + if (algo == PSA_ALG_ECB_NO_PADDING + || algo == PSA_ALG_CBC_NO_PADDING + || algo == PSA_ALG_CFB + || algo == PSA_ALG_CTR + || algo == PSA_ALG_CCM + || algo == PSA_ALG_GCM) { + // AES cipher or AEAD + type = PSA_KEY_TYPE_AES; + usage |= PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT; + } else if (algo == PSA_ALG_STREAM_CIPHER || algo == PSA_ALG_CHACHA20_POLY1305) { + // CHACHA20 cipher or AEAD, key size must be 256-bit + if (size != 256) { + return(PSA_ERROR_INVALID_ARGUMENT); + } + type = PSA_KEY_TYPE_CHACHA20; + usage |= PSA_KEY_USAGE_ENCRYPT | PSA_KEY_USAGE_DECRYPT; + } else if (algo == PSA_ALG_CMAC) { + // CMAC + type = PSA_KEY_TYPE_AES; + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else if (PSA_ALG_IS_HMAC(algo)) { + // HMAC + type = PSA_KEY_TYPE_HMAC; + usage |= PSA_KEY_USAGE_SIGN_HASH | PSA_KEY_USAGE_VERIFY_HASH; + } else { + // Algorithm is not supported yet. + return(PSA_ERROR_NOT_SUPPORTED); + } + + // Setup key attributes + key_attr = psa_key_attributes_init(); + psa_set_key_type(&key_attr, type); + psa_set_key_bits(&key_attr, size); + psa_set_key_usage_flags(&key_attr, usage); + psa_set_key_algorithm(&key_attr, algo); + + switch (storage_type) { + // Plain key + case (CREATE_KEY_OFFSET + VOLATILE_PLAIN_KEY): + case (IMPORT_KEY_OFFSET + VOLATILE_PLAIN_KEY): + break; + + case (CREATE_KEY_OFFSET + PERSISTENT_PLAIN_KEY): + case (IMPORT_KEY_OFFSET + PERSISTENT_PLAIN_KEY): + psa_set_key_id(&key_attr, id); + break; + +#if defined(SEMAILBOX_PRESENT) && (_SILICON_LABS_SECURITY_FEATURE == _SILICON_LABS_SECURITY_FEATURE_VAULT) + // Wrapped key + case (CREATE_KEY_OFFSET + VOLATILE_WRAP_KEY): + case (IMPORT_KEY_OFFSET + VOLATILE_WRAP_KEY): + psa_set_key_lifetime(&key_attr, + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_VOLATILE, + WRAP_KEY_LOCATION)); + break; + + case (CREATE_KEY_OFFSET + PERSISTENT_WRAP_KEY): + case (IMPORT_KEY_OFFSET + PERSISTENT_WRAP_KEY): + psa_set_key_id(&key_attr, id); + psa_set_key_lifetime(&key_attr, + PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(PSA_KEY_PERSISTENCE_DEFAULT, + WRAP_KEY_LOCATION)); + break; +#endif + + // Invalid key storage + default: + return(PSA_ERROR_NOT_SUPPORTED); + } + + return(PSA_SUCCESS); +} + +/***************************************************************************//** + * Derive a symmetric key. + ******************************************************************************/ +psa_status_t derive_key(psa_key_derivation_operation_t *operation) +{ + // Derive a key + print_error_cycle(psa_key_derivation_output_key(&key_attr, operation, + &key_id)); +} + +/***************************************************************************//** + * Derive a symmetric key using Silicon Labs custom API. + ******************************************************************************/ +psa_status_t sl_derive_key(psa_algorithm_t algo, + psa_key_id_t master_id, + const uint8_t *kdf_info, + size_t info_len, + const uint8_t *kdf_salt, + size_t salt_len, + size_t iterations) +{ + // Derive a key + print_error_cycle(sl_psa_key_derivation_single_shot(algo, master_id, + kdf_info, info_len, + kdf_salt, salt_len, + iterations, + &key_attr, + &key_id)); +} + +/***************************************************************************//** + * Free any auxiliary resources that the key attribute object might contain. + ******************************************************************************/ +void reset_key_attr(void) +{ + psa_reset_key_attributes(&key_attr); +} + +/***************************************************************************//** + * Export a key. + ******************************************************************************/ +psa_status_t export_key(void) +{ + print_error_cycle(psa_export_key(key_id, + key_buf, + sizeof(key_buf), + &key_len)); +} + +/***************************************************************************//** + * Export a public key. + ******************************************************************************/ +psa_status_t export_public_key(void) +{ + print_error_cycle(psa_export_public_key(key_id, + key_buf, + sizeof(key_buf), + &key_len)); +} + +/***************************************************************************//** + * Destroy a key. + ******************************************************************************/ +psa_status_t destroy_key(void) +{ + psa_key_id_t temp_id = key_id; + + // Reset key identifier + key_id = 0; + print_error_cycle(psa_destroy_key(temp_id)); +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions +// ----------------------------------------------------------------------------- diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_key.h b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_key.h new file mode 100644 index 00000000000..4e639f1decf --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_key.h @@ -0,0 +1,203 @@ +/***************************************************************************//** + * @file app_psa_crypto_key.h + * @brief PSA Crypto key functions. + ******************************************************************************* + * # License + * Copyright 2020 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 APP_PSA_CRYPTO_KEY_H +#define APP_PSA_CRYPTO_KEY_H + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "app_psa_crypto_macro.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- +/// Key buffer size = maximum public key size + 1 +#define KEY_BUF_SIZE (133) + +/// Location value for wrapped key (PSA_KEY_LOCATION_SLI_SE_OPAQUE) +#define WRAP_KEY_LOCATION ((psa_key_location_t)0x000001UL) + +/// Offset for key creation +#define CREATE_KEY_OFFSET (0) + +/// Offset for key import +#define IMPORT_KEY_OFFSET (4) + +/// Key storage and type +#define VOLATILE_PLAIN_KEY (0) +#define PERSISTENT_PLAIN_KEY (1) +#define VOLATILE_WRAP_KEY (2) +#define PERSISTENT_WRAP_KEY (3) + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Declarations +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Get key buffer pointer. + * + * @returns Returns pointer to key buffer. + ******************************************************************************/ +uint8_t * get_key_buf_ptr(void); + +/***************************************************************************//** + * Get key length. + * + * @returns Returns key length. + ******************************************************************************/ +size_t get_key_len(void); + +/***************************************************************************//** + * Get key identifier. + * + * @returns Returns key identifier. + ******************************************************************************/ +psa_key_id_t get_key_id(void); + +/***************************************************************************//** + * Get key algorithm. + * + * @returns Returns key algorithm. + ******************************************************************************/ +psa_algorithm_t get_key_algo(void); + +/***************************************************************************//** + * Set key length. + * + * @param length The length of the key. + ******************************************************************************/ +void set_key_len(size_t length); + +/***************************************************************************//** + * Set key identifier. + * + * @param id The identifier of the key. + ******************************************************************************/ +void set_key_id(psa_key_id_t id); + +/***************************************************************************//** + * Initialize the PSA Crypto. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t init_psa_crypto(void); + +/***************************************************************************//** + * Generate or import a key. + * + * @param storage_type The key storage type. + * @param type The key type. + * @param size The key size in bits. + * @param id The key identifier for persistent key. + * @param usage The key usage. + * @param algo The key algorithm. + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t create_import_key(uint8_t storage_type, + psa_key_type_t type, + size_t size, + psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo); + +/***************************************************************************//** + * Copy a key. + * + * @param id The key identifier for persistent copied key. + * @param usage The copied key usage. + * @param algo The copied key algorithm. + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t copy_key(psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo); + +/***************************************************************************//** + * Set up key attributes of the derived symmetric key. + * + * @param storage_type The derived key storage type. + * @param size The derived key size in bits. + * @param id The key identifier for persistent derived key. + * @param usage The derived key usage. + * @param algo The derived key algorithm. + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t derive_key_attr(uint8_t storage_type, + size_t size, + psa_key_id_t id, + psa_key_usage_t usage, + psa_algorithm_t algo); + +/***************************************************************************//** + * Derive a symmetric key. + * + * @param operation Pointer to key derivation operation object. + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t derive_key(psa_key_derivation_operation_t *operation); + +/***************************************************************************//** + * Derive a symmetric key using Silicon Labs custom API. + * + * @param algo The key derivation algorithm. + * @param master_id The key identifier for the master key. + * @param kdf_info An optional information string for the HKDF. + * @param info_len The length of the information string. + * @param kdf_salt An optional salt value for both HKDF and PBKDF2. + * @param salt_len The length of the salt value. + * @param iterations The number of iterations (maximum 16384) for PBKDF2. + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t sl_derive_key(psa_algorithm_t algo, + psa_key_id_t master_id, + const uint8_t *kdf_info, + size_t info_len, + const uint8_t *kdf_salt, + size_t salt_len, + size_t iterations); + +/***************************************************************************//** + * Free any auxiliary resources that the object might contain. + ******************************************************************************/ +void reset_key_attr(void); + +/***************************************************************************//** + * Export a key. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t export_key(void); + +/***************************************************************************//** + * Export a public key. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t export_public_key(void); + +/***************************************************************************//** + * Destroy a key. + * + * @returns Returns PSA error code, @ref crypto_values.h. + ******************************************************************************/ +psa_status_t destroy_key(void); + +#endif // APP_PSA_CRYPTO_KEY_H diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_macro.h b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_macro.h new file mode 100644 index 00000000000..c9f9cdf7b16 --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/app_psa_crypto_macro.h @@ -0,0 +1,97 @@ +/***************************************************************************//** + * @file app_psa_crypto_macro.h + * @brief PSA Crypto macros. + ******************************************************************************* + * # License + * Copyright 2020 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 APP_PSA_CRYPTO_MACRO_H +#define APP_PSA_CRYPTO_MACRO_H + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "em_cmu.h" +#include "psa/crypto.h" +#include +#include + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- +#if defined(DWT_CTRL_CYCCNTENA_Msk) && (PSA_CRYPTO_PRINT == 1) +#define print_error_cycle(CODE) \ + do { \ + psa_status_t ret; \ + uint32_t cycles; \ + \ + DWT->CYCCNT = 0; \ + ret = CODE; \ + cycles = DWT->CYCCNT; \ + \ + if (ret == PSA_SUCCESS) { \ + printf("PSA_SUCCESS"); \ + } else { \ + printf("PSA_ERROR: %ld", ret); \ + } \ + \ + if (cycles < (CMU_ClockFreqGet(cmuClock_CORE) / 10)) { \ + printf(" (cycles: %" PRIu32 " time: %" PRIu32 " us)\n", \ + cycles, \ + (cycles * 10) / (CMU_ClockFreqGet(cmuClock_CORE) / 100000)); \ + } \ + else { \ + printf(" (cycles: %" PRIu32 " time: %" PRIu32 " ms)\n", \ + cycles, \ + cycles / (CMU_ClockFreqGet(cmuClock_CORE) / 1000)); \ + } \ + return ret; \ + } while (0) + +#else + +#define print_error_cycle(CODE) \ + do { \ + psa_status_t ret; \ + \ + ret = CODE; \ + if (ret == PSA_SUCCESS) { \ + printf("OK\n"); \ + } else { \ + printf("Failed: %ld\n", ret); \ + } \ + return ret; \ + } while (0) + +#endif + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Declarations +// ----------------------------------------------------------------------------- +/***************************************************************************//** + * Enable cycle counter in DWT. + ******************************************************************************/ +__STATIC_INLINE void enable_cycle_count(void) +{ +#if defined(DWT_CTRL_CYCCNTENA_Msk) && (PSA_CRYPTO_PRINT == 1) + CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; + DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; +#else + (void)0; +#endif +} + +#endif // APP_PSA_CRYPTO_MACRO_H diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/main.c b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/main.c new file mode 100644 index 00000000000..15a64ca47dd --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/main.c @@ -0,0 +1,90 @@ +/***************************************************************************//** + * @file main.c + * @brief The main() function. + ******************************************************************************* + * # License + * Copyright 2020 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. + * + ******************************************************************************/ + +// ----------------------------------------------------------------------------- +// Includes +// ----------------------------------------------------------------------------- +#include "sl_component_catalog.h" +#include "sl_system_init.h" +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) +#include "sl_power_manager.h" +#endif +#if defined(SL_CATALOG_KERNEL_PRESENT) +#include "sl_system_kernel.h" +#else // SL_CATALOG_KERNEL_PRESENT +#include "sl_system_process_action.h" +#endif // SL_CATALOG_KERNEL_PRESENT +#include "app_init.h" +#include "app_process.h" + +// ----------------------------------------------------------------------------- +// Macros and Typedefs +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Function Declarations +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Global Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Static Variables +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// Public Function Definitions +// ----------------------------------------------------------------------------- + +/***************************************************************************//** + * Main function + ******************************************************************************/ +int main(void) +{ + // Initialize Silicon Labs device, system, service(s) and protocol stack(s). + // Note that if the kernel is present, processing task(s) will be created by + // this call. + sl_system_init(); + + // Initialize the application. For example, create periodic timer(s) or + // task(s) if the kernel is present. + app_init(); + +#if defined(SL_CATALOG_KERNEL_PRESENT) + // Start the kernel. Task(s) created in app_init() will start running. + sl_system_kernel_start(); +#else // SL_CATALOG_KERNEL_PRESENT + while (1) { + // Do not remove this call: Silicon Labs components process action routine + // must be called from the super loop. + sl_system_process_action(); + + // Application process. + app_process_action(); + +#if defined(SL_CATALOG_POWER_MANAGER_PRESENT) + // Let the CPU go to sleep if the system allows it. + sl_power_manager_sleep(); +#endif + } +#endif // SL_CATALOG_KERNEL_PRESENT +} + +// ----------------------------------------------------------------------------- +// Static Function Definitions +// ----------------------------------------------------------------------------- diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/readme.md b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/readme.md new file mode 100644 index 00000000000..b3962b57263 --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/readme.md @@ -0,0 +1,108 @@ +# TrustZone PSA Crypto ECDH (Non-secure application) + + +This example uses the PSA Crypto API to perform ECDH key agreement on the supported device. + + +The Elliptic Curve Diffie-Hellman (ECDH) is an anonymous key agreement protocol that allows two parties, each having an elliptic-curve private-public key pair, to establish a shared secret over an insecure channel. + + +In this example, two peers (client and server) each generate their Elliptic Curve Cryptography (ECC) key pair. They exchange public keys and compute a shared secret using their private ECC keys. These secrets are compared with each other to make sure they are equal. + + +The example redirects standard I/O to the virtual serial port (VCOM) of the kit. By default, the serial port setting is 115200 bps and 8-N-1 configuration. + + +The example has been instrumented with code to count the number of clock cycles spent in different operations. The results are printed on the VCOM serial port console. This feature can be disabled by defining `PSA_CRYPTO_PRINT=0` (default is 1) in the IDE setting (`Preprocessor->Defined symbols`). + + +## Key Storage + + +The following key storages are supported in this example: + + +* Volatile plain key in RAM +* Persistent plain key in [NVM3](https://docs.silabs.com/gecko-platform/3.1/driver/api/group-nvm3) +* Volatile wrapped key in RAM (Secure Vault High only) +* Persistent wrapped key in NVM3 (Secure Vault High only) + + +## Elliptic Curve Key + + +The following elliptic curve keys are supported in this example: + + +##### `PSA_ECC_FAMILY_SECP_R1` : + + +* SECP192R1 - 192-bit +* SECP256R1 - 256-bit +* SECP384R1 - 384-bit +* SECP521R1 - 521-bit + + +##### `PSA_ECC_FAMILY_MONTGOMERY` : + +* CURVE25519 (X25519) - 255-bit +* CURVE448 (X448) - 448-bit (Secure Vault High only) + + +## Key Agreement Algorithm + + +The following key agreement algorithm is supported in this example: + + +* `PSA_ALG_ECDH` + + +The `PSA_ALG_KEY_AGREEMENT(PSA_ALG_ECDH, PSA_ALG_HKDF(hash_alg))` algorithm is used in the **PSA Crypto KDF** example. + + +## PSA Crypto API + + +The following PSA Crypto APIs are used in this example: + + +* `psa_crypto_init` +* `psa_key_attributes_init` +* `psa_set_key_type` +* `psa_set_key_bits` +* `psa_set_key_usage_flags` +* `psa_set_key_algorithm` +* `psa_set_key_id` +* `psa_set_key_lifetime` +* `psa_generate_key` +* `psa_reset_key_attributes` +* `psa_export_public_key` +* `psa_raw_key_agreement` +* `psa_destroy_key` +* `mbedtls_psa_crypto_free` + + +## Getting Started + + +The Non-secure application needs to work with the Secure application on a workspace (see readme in `tz_psa_crypto_ecdh_ws`). + + +## Additional Information + + +1. The example uses the CTR-DRBG, a pseudo-random number generator (PRNG) included in [Mbed TLS](https://docs.silabs.com/mbed-tls/latest/) to generate the random number. If the example is running on a device that includes a TRNG (True Random Number Generator) hardware module, the TRNG will be used as an entropy source to seed the CTR-DRBG. If the device does not incorporate a TRNG, the example will use [RAIL](https://docs.silabs.com/rail/latest/) or NV (non-volatile) seed (requires NVM3) as the entropy source. +2. If an algorithm is not supported in the hardware accelerator of the selected device, the PSA Crypto will use the software fallback feature in Mbed TLS. +3. The PSA Crypto does not yet support software fallback on the `CURVE448` curve. +4. The HSE Secure Vault Mid devices require SE firmware v1.2.11 or higher (EFR32xG21) and v2.1.7 or higher (other HSE devices) to support hardware acceleration on `CURVE25519`. +5. Change the `CLIENT_KEY_ID` and `SERVER_KEY_ID` values in `app_process.h` if these key IDs had already existed in NVM3. +6. The default optimization level is `Optimize for debugging (-Og)` on Simplicity IDE and `None` on IAR Embedded Workbench. + +## Resources + + +[AN1311: Integrating Crypto Functionality Using PSA Crypto Compared to Mbed TLS](https://www.silabs.com/documents/public/application-notes/an1311-mbedtls-psa-crypto-porting-guide.pdf) +[AN1374: Series 2 TrustZone](https://www.silabs.com/documents/public/application-notes/an1374-trustzone.pdf) + + diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/tz_psa_crypto_ecdh_ns.slcp b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/tz_psa_crypto_ecdh_ns.slcp new file mode 100644 index 00000000000..2ae3415dfb4 --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ns/tz_psa_crypto_ecdh_ns.slcp @@ -0,0 +1,86 @@ +project_name: tz_psa_crypto_ecdh_ns +package: platform +quality: production +label: Platform - TrustZone PSA Crypto ECDH (Non-secure application) +description: > + The Non-secure part of the application demonstrates how to use the ECDH key agreement API. The Non-secure application needs to build with the Secure application on a workspace (tz_psa_crypto_ecdh_ws). +category: Example|Platform +filter: + - name: "Device Type" + value: ["SoC"] + - name: "MCU" + value: ["32-bit MCU"] + - name: "Project Difficulty" + value: ["Advanced"] +source: + - path: main.c + - path: app_init.c + - path: app_process.c + - path: app_psa_crypto_ecdh.c + - path: app_psa_crypto_key.c +include: + - path: . + file_list: + - path: app_init.h + - path: app_process.h + - path: app_psa_crypto_ecdh.h + - path: app_psa_crypto_key.h + - path: app_psa_crypto_macro.h +readme: + - path: readme.md +ui_hints: + highlight: readme.md +component: + - id: trustzone_nonsecure + - id: tz_secure_key_library + - id: nvm3_default + - id: psa_its + - id: psa_crypto_ecdh + - id: psa_crypto_ecc_secp192r1 + - id: psa_crypto_ecc_secp256r1 + - id: psa_crypto_ecc_secp384r1 + - id: psa_crypto_ecc_secp521r1 + - id: psa_crypto_ecc_curve25519 + - id: sl_system + - id: device_init + - id: device_init_hfrco + - id: printf + - id: iostream_retarget_stdio + - id: iostream_recommended_stream +requires: + - name: psa_crypto_ecc_curve448 + condition: [device_security_vault] + - name: armv8m.main +configuration: + - name: SL_DEVICE_INIT_HFRCO_BAND + value: cmuHFRCODPLLFreq_38M0Hz + - name: SL_BOARD_ENABLE_VCOM + value: 1 +define: + - name: DEBUG_EFM + - name: PSA_CRYPTO_PRINT +toolchain_settings: + - option: optimize + value: debug +template_contribution: + - name: memory_flash_start + value: 0x2C000 + condition: [device_sdid_200] + - name: memory_flash_start + value: 0x2C000 + condition: [device_sdid_205] + - name: memory_flash_start + value: 0x802C000 + unless: [device_sdid_200, device_sdid_205] + - name: memory_flash_size + value: 0x54000 + - name: memory_ram_start + value: 0x20003000 + - name: memory_ram_size + value: 0x5000 +import: + - id: trustzone_secure_application +post_build: + profile: tz_nonsecure_application +tag: + - companion:secure_app diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_s.slcp b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_s.slcp new file mode 100644 index 00000000000..6f292701398 --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_s.slcp @@ -0,0 +1,73 @@ +project_name: tz_psa_crypto_ecdh_s +package: platform +quality: production +label: Platform - TrustZone PSA Crypto ECDH (Secure application) +description: > + The Secure part of the application provides the PSA Crypto and Attestation functionalities in the Secure world. The Secure application needs to build with the Non-secure application on a workspace (tz_psa_crypto_ecdh_ws). +category: Example|Platform +filter: + - name: "Device Type" + value: ["SoC"] + - name: "MCU" + value: ["32-bit MCU"] + - name: "Project Difficulty" + value: ["Advanced"] + +readme: + - path: readme.md +ui_hints: + highlight: readme.md + +component: + - id: trustzone_secure + - id: tz_secure_key_library + +requires: + - name: armv8m.main + +configuration: + - name: SL_STACK_SIZE + value: '3072' + - name: SL_HEAP_SIZE + value: '4096' + - name: BOOTLOADER_DISABLE_OLD_BOOTLOADER_MITIGATION + value: '1' + +define: + # PSA Crypto configuration: + - name: TFM_CRYPTO_CONC_OPER_NUM + value: 2 + +template_contribution: + - name: memory_flash_start + value: 0x0 + condition: [device_sdid_200] + - name: memory_flash_start + value: 0x0 + condition: [device_sdid_205] + - name: memory_flash_start + value: 0x8000000 + unless: [device_sdid_200, device_sdid_205] + - name: memory_flash_size + value: 0x2C000 + - name: memory_ram_start + value: 0x20000000 + - name: memory_ram_size + value: 0x3000 + - name: application_type + value: "APPLICATION_TYPE_MCU" + condition: + - bootloader_app_properties + +import: + - id: trustzone_nonsecure_application + +export: + library: + - path: artifact/trustzone_secure_library.o + +post_build: + profile: tz_secure_application + +tag: + - companion:nonsecure_app diff --git a/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ws.slcw b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ws.slcw new file mode 100644 index 00000000000..69c8ffaf9a5 --- /dev/null +++ b/app/common/example/tz_psa_crypto_ecdh/tz_psa_crypto_ecdh_ws.slcw @@ -0,0 +1,13 @@ +label: tz_psa_crypto_ecdh_ws +description: > + This example workspace demonstrates TrustZone for ECDH key agreement. +quality: production +project: + - path: tz_psa_crypto_ecdh_s.slcp + id: trustzone_secure_application + output: tz_psa_crypto_ecdh_s + - path: tz_psa_crypto_ecdh_ns/tz_psa_crypto_ecdh_ns.slcp + id: trustzone_nonsecure_application + output: tz_psa_crypto_ecdh_ns +post_build: + profile: tz_application diff --git a/app/common/platform_production_demos.xml b/app/common/platform_production_demos.xml index e1df0b53540..0ff003965bb 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 @@ - + diff --git a/app/common/platform_production_templates.xml b/app/common/platform_production_templates.xml index 941ba379a56..dfe36599e1e 100644 --- a/app/common/platform_production_templates.xml +++ b/app/common/platform_production_templates.xml @@ -1,14 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + @@ -21,9 +53,9 @@ - - - + + + @@ -36,9 +68,9 @@ - - - + + + @@ -51,9 +83,9 @@ - - - + + + @@ -66,9 +98,9 @@ - - - + + + @@ -81,9 +113,9 @@ - - - + + + @@ -96,9 +128,9 @@ - - - + + + @@ -113,7 +145,7 @@ - + @@ -128,7 +160,7 @@ - + @@ -141,9 +173,9 @@ - + - + @@ -156,9 +188,9 @@ - + - + @@ -171,9 +203,9 @@ - + - + @@ -186,9 +218,9 @@ - + - + @@ -203,7 +235,7 @@ - + @@ -216,9 +248,9 @@ - + - + @@ -233,7 +265,7 @@ - + @@ -248,7 +280,7 @@ - + @@ -263,7 +295,7 @@ - + @@ -278,7 +310,7 @@ - + @@ -291,9 +323,9 @@ - - - + + + @@ -306,9 +338,9 @@ - - - + + + @@ -321,9 +353,9 @@ - - - + + + @@ -336,9 +368,9 @@ - - - + + + @@ -353,7 +385,7 @@ - + @@ -368,7 +400,7 @@ - + @@ -383,7 +415,7 @@ - + @@ -396,9 +428,9 @@ - - - + + + @@ -411,9 +443,9 @@ - - - + + + @@ -426,9 +458,9 @@ - - - + + + @@ -443,7 +475,7 @@ - + @@ -458,7 +490,7 @@ - + @@ -486,8 +518,8 @@ - - + + @@ -516,8 +548,8 @@ - - + + @@ -546,9 +578,9 @@ - - - + + + @@ -561,9 +593,9 @@ - - - + + + @@ -576,9 +608,9 @@ - - - + + + @@ -591,9 +623,9 @@ - - - + + + @@ -606,9 +638,9 @@ - - - + + + @@ -621,9 +653,9 @@ - - - + + + @@ -636,9 +668,9 @@ - - - + + + @@ -651,9 +683,9 @@ - - - + + + @@ -666,9 +698,9 @@ - - - + + + @@ -681,9 +713,9 @@ - - - + + + @@ -696,9 +728,9 @@ - - - + + + @@ -711,9 +743,9 @@ - - - + + + @@ -726,9 +758,9 @@ - - - + + + @@ -741,9 +773,9 @@ - - - + + + @@ -756,9 +788,9 @@ - - - + + + @@ -771,9 +803,9 @@ - + - + @@ -786,9 +818,9 @@ - - - + + + @@ -801,9 +833,9 @@ - - - + + + @@ -816,9 +848,9 @@ - - - + + + @@ -831,9 +863,9 @@ - - - + + + @@ -848,7 +880,7 @@ - + @@ -861,9 +893,9 @@ - + - + @@ -876,9 +908,9 @@ - - - + + + @@ -891,9 +923,9 @@ - - - + + + @@ -906,9 +938,9 @@ - + - + @@ -921,9 +953,9 @@ - + - + @@ -936,9 +968,9 @@ - + - + @@ -951,9 +983,9 @@ - + - + @@ -966,9 +998,9 @@ - + - + @@ -981,9 +1013,9 @@ - + - + @@ -996,9 +1028,9 @@ - + - + @@ -1013,7 +1045,7 @@ - + @@ -1028,7 +1060,7 @@ - + @@ -1043,7 +1075,7 @@ - + @@ -1056,9 +1088,9 @@ - - - + + + @@ -1071,9 +1103,9 @@ - + - + @@ -1086,9 +1118,9 @@ - + - + @@ -1101,9 +1133,9 @@ - + - + @@ -1116,9 +1148,9 @@ - + - + @@ -1131,9 +1163,9 @@ - - - + + + @@ -1146,9 +1178,9 @@ - - - + + + @@ -1161,9 +1193,9 @@ - - - + + + @@ -1176,9 +1208,9 @@ - - - + + + @@ -1191,15 +1223,75 @@ - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1208,7 +1300,7 @@ - + @@ -1223,7 +1315,7 @@ - + @@ -1238,7 +1330,7 @@ - + @@ -1253,7 +1345,7 @@ - + @@ -1268,7 +1360,7 @@ - + @@ -1283,7 +1375,7 @@ - + @@ -1298,7 +1390,7 @@ - + @@ -1313,7 +1405,7 @@ - + @@ -1328,7 +1420,7 @@ - + diff --git a/app/flex/component/rail/sl_flex_mode_switch/sl_flex_mode_switch.c b/app/flex/component/rail/sl_flex_mode_switch/sl_flex_mode_switch.c index c95b55043af..914f1b93323 100644 --- a/app/flex/component/rail/sl_flex_mode_switch/sl_flex_mode_switch.c +++ b/app/flex/component/rail/sl_flex_mode_switch/sl_flex_mode_switch.c @@ -420,16 +420,16 @@ void update_rail_pa_settings(RAIL_Handle_t rail_handle, uint16_t channel) #if defined(SL_CATALOG_RAIL_UTIL_EFF_PRESENT) if (modulation == M_OFDM) { - if (txPowerConfigPtr->mode != RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM) { - txPowerConfigPtr->mode = RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM; + if (txPowerConfigPtr->mode != RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE) { + txPowerConfigPtr->mode = RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE; status = RAIL_ConfigTxPower(rail_handle, txPowerConfigPtr); app_assert(status == RAIL_STATUS_NO_ERROR, "PA setting failed"); status = RAIL_SetTxPowerDbm(rail_handle, power); app_assert(status == RAIL_STATUS_NO_ERROR, "PA setting failed"); } } else if (modulation == M_2FSK) { - if (txPowerConfigPtr->mode != RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM) { - txPowerConfigPtr->mode = RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM; + if (txPowerConfigPtr->mode != RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE) { + txPowerConfigPtr->mode = RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE; status = RAIL_ConfigTxPower(rail_handle, txPowerConfigPtr); app_assert(status == RAIL_STATUS_NO_ERROR, "PA setting failed"); status = RAIL_SetTxPowerDbm(rail_handle, power); @@ -438,16 +438,16 @@ void update_rail_pa_settings(RAIL_Handle_t rail_handle, uint16_t channel) } #else if (modulation == M_OFDM) { - if (txPowerConfigPtr->mode != RAIL_TX_POWER_MODE_OFDM_PA) { - txPowerConfigPtr->mode = RAIL_TX_POWER_MODE_OFDM_PA; + if (txPowerConfigPtr->mode != RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE) { + txPowerConfigPtr->mode = RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE; status = RAIL_ConfigTxPower(rail_handle, txPowerConfigPtr); app_assert(status == RAIL_STATUS_NO_ERROR, "PA setting failed"); status = RAIL_SetTxPowerDbm(rail_handle, power); app_assert(status == RAIL_STATUS_NO_ERROR, "PA setting failed"); } } else if (modulation == M_2FSK) { - if (txPowerConfigPtr->mode != RAIL_TX_POWER_MODE_SUBGIG_HIGHEST) { - txPowerConfigPtr->mode = RAIL_TX_POWER_MODE_SUBGIG_HIGHEST; + if (txPowerConfigPtr->mode != RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE) { + txPowerConfigPtr->mode = RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE; status = RAIL_ConfigTxPower(rail_handle, txPowerConfigPtr); app_assert(status == RAIL_STATUS_NO_ERROR, "PA setting failed"); status = RAIL_SetTxPowerDbm(rail_handle, power); diff --git a/app/flex/component/rail/sl_flex_rail_package_assistant/config/sl_flex_rail_package_assistant_config.h b/app/flex/component/rail/sl_flex_rail_package_assistant/config/sl_flex_rail_package_assistant_config.h index 048639a62f0..476862c694c 100644 --- a/app/flex/component/rail/sl_flex_rail_package_assistant/config/sl_flex_rail_package_assistant_config.h +++ b/app/flex/component/rail/sl_flex_rail_package_assistant/config/sl_flex_rail_package_assistant_config.h @@ -79,6 +79,19 @@ // WISUN OQPSK header settings +// SideWalk FSK header settings +// FCS is on/off +// Default: 0 +// FCS is on/off. +#define SIDEWALK_FSK_FCS_TYPE (1) + +// Whitening is on/off +// Default: 1 +// Whitening is on/off +#define SIDEWALK_FSK_WHITENING (1) + +// SideWalk FSK header settings + // <<< end of configuration section >>> #endif // SL_FLEX_RAIL_PACKAGE_ASSISTANT_CONFIG_H_ diff --git a/app/flex/component/rail/sl_flex_rail_package_assistant/sl_flex_rail_package_assistant.c b/app/flex/component/rail/sl_flex_rail_package_assistant/sl_flex_rail_package_assistant.c index c409bc76775..0064299a84a 100644 --- a/app/flex/component/rail/sl_flex_rail_package_assistant/sl_flex_rail_package_assistant.c +++ b/app/flex/component/rail/sl_flex_rail_package_assistant/sl_flex_rail_package_assistant.c @@ -240,6 +240,62 @@ void prepare_package(RAIL_Handle_t rail_handle, uint8_t *out_data, uint16_t leng #endif } } +#elif defined(RAIL0_CHANNEL_GROUP_1_PROFILE_BASE) && (defined(RAIL0_CHANNEL_GROUP_1_PHY_SIDEWALK_2GFSK_50KBPS) || defined(RAIL0_CHANNEL_GROUP_1_PHY_SIDEWALK_2GFSK_150KBPS) || defined(RAIL0_CHANNEL_GROUP_1_PHY_SIDEWALK_2GFSK_250KBPS)) +/****************************************************************************** + * The API helps to unpack the received packet, point to the payload and returns the length. + *****************************************************************************/ +uint16_t unpack_packet(uint8_t *rx_destination, const RAIL_RxPacketInfo_t *packet_information, uint8_t **start_of_payload) +{ + uint16_t payload_size = 0; + + RAIL_CopyRxPacket(rx_destination, packet_information); + uint8_t fcsType = 0U; + uint8_t whitening = 0U; + *start_of_payload + = sl_flex_802154_packet_unpack_sidewalk_data_frame(packet_information, + &fcsType, + &whitening, + &payload_size, + rx_destination); + if (print_packet_info) { + #if defined(SL_CATALOG_APP_LOG_PRESENT) + app_log_info("SideWalk Package is ready, %d bytes payload read with %d fcsType and %d whitening\n ", payload_size, fcsType, whitening); + #endif + } + return payload_size; +} + +/****************************************************************************** + * The API prepares the packet for sending and load it in the RAIL TX FIFO + *****************************************************************************/ +void prepare_package(RAIL_Handle_t rail_handle, uint8_t *out_data, uint16_t length) +{ + // Check if write fifo has written all bytes + uint16_t bytes_writen_in_fifo = 0; + uint16_t packet_size = 0U; + uint8_t tx_frame_buffer[256]; + uint8_t fcsType = SIDEWALK_FSK_FCS_TYPE; + uint8_t whitening = SIDEWALK_FSK_WHITENING; + sl_flex_802154_packet_pack_sidewalk_data_frame(fcsType, + whitening, + length, + out_data, + &packet_size, + tx_frame_buffer); + bytes_writen_in_fifo = RAIL_WriteTxFifo(rail_handle, tx_frame_buffer, packet_size, true); + #if defined(SL_CATALOG_APP_ASSERT_PRESENT) + app_assert(bytes_writen_in_fifo == packet_size, + "RAIL_WriteTxFifo() failed to write in fifo (%d bytes instead of %d bytes)\n", + bytes_writen_in_fifo, + packet_size); + #endif + if (print_packet_info) { + #if defined(SL_CATALOG_APP_LOG_PRESENT) + app_log_info("SideWalk Package is ready, %d bytes written with %d fcsType and %d whitening\n ", bytes_writen_in_fifo, fcsType, whitening); + #endif + } +} + #else /****************************************************************************** * The API helps to unpack the received packet, point to the payload and returns the length. diff --git a/app/flex/component/rail/sl_flex_rail_packet_asm/sl_flex_packet_asm.c b/app/flex/component/rail/sl_flex_rail_packet_asm/sl_flex_packet_asm.c index 4ec9173e733..c0e51920151 100644 --- a/app/flex/component/rail/sl_flex_rail_packet_asm/sl_flex_packet_asm.c +++ b/app/flex/component/rail/sl_flex_rail_packet_asm/sl_flex_packet_asm.c @@ -270,7 +270,6 @@ int16_t sl_flex_802154_packet_pack_ofdm_data_frame(uint8_t rate, uint32_t phr = 0U; uint16_t frameLength = 0U; uint8_t phr_size = 4U; - uint8_t fcs_size = 4U; // Checking input parameters if ((rate & 0xE0) @@ -285,9 +284,14 @@ int16_t sl_flex_802154_packet_pack_ofdm_data_frame(uint8_t rate, return SL_FLEX_802154_PACKET_ERROR; } + // Add payload bytes + *frame_size = payload_size + phr_size; + // The Frame Length field (L10-L0) specifies the total number of octets contained in the PSDU (prior to FEC encoding). The PSDU field carries the data of the PHY packet. - frameLength = ((payload_size + phr_size) - phr_size) + fcs_size; + frameLength = (*frame_size - phr_size) & 0x7FF; // FrameLength in byte + frameLength = frameLength + 4; // last 4 bytes will be overwritten before the Tx with the FCS. phr = (rate << 19) | (frameLength << 7) | (scrambler << 3); + // Flip the 32 bits for all SUN modulations phr = __RBIT(phr); @@ -295,12 +299,17 @@ int16_t sl_flex_802154_packet_pack_ofdm_data_frame(uint8_t rate, for (uint8_t index = 0; index < phr_size; index++) { frame_buffer[index] = (uint8_t)((phr & (0xFF << index * 8)) >> index * 8); } - // Add payload bytes - *frame_size = payload_size + phr_size; + for (uint8_t index = phr_size; index < *frame_size; index++) { frame_buffer[index] = payload[index - phr_size]; } + for (uint8_t index = *frame_size; index < (*frame_size + 4); index++) { + frame_buffer[index] = 0x00; + } + + *frame_size = *frame_size + 4; + // return SL_FLEX_802154_PACKET_OK if the frame is ready return SL_FLEX_802154_PACKET_OK; } @@ -315,6 +324,7 @@ int16_t sl_flex_802154_packet_pack_sunfsk_2bytes_data_frame(uint8_t fcsType, uint16_t frameLength = 0; uint8_t fcsSizeByte = 0; uint32_t phr = 0; + uint8_t phr_size = 2; // Checking input parameters if ((fcsType > 1) @@ -329,10 +339,13 @@ int16_t sl_flex_802154_packet_pack_sunfsk_2bytes_data_frame(uint8_t fcsType, return SL_FLEX_802154_PACKET_ERROR; } - uint8_t phr_size = 2; + *frame_size = payload_size + phr_size; fcsSizeByte = fcsType ? 2 : 4; //FCS type = 0 => fcsSizeByte = 4 - frameLength = ((payload_size + phr_size) - phr_size + fcsSizeByte) & 0x7FF; - phr = (((fcsType << 12) | (whitening << 11) | frameLength)) & 0x0FFFF; + frameLength = (*frame_size - phr_size + fcsSizeByte) & 0x7FF; + if (fcsType == 1) { + frameLength = frameLength + 2; + } + phr = ((fcsType << 12) | (whitening << 11) | frameLength); // Flip bits of the 2 bytes PHR as it is a SUN modulation phr = (uint16_t) (__RBIT(phr) >> 16); @@ -342,10 +355,11 @@ int16_t sl_flex_802154_packet_pack_sunfsk_2bytes_data_frame(uint8_t fcsType, frame_buffer[index] = (uint8_t)((phr & (0xFF << index * 8)) >> index * 8); } // Add payload bytes - *frame_size = payload_size + phr_size; + for (uint8_t index = phr_size; index < *frame_size; index++) { frame_buffer[index] = payload[index - phr_size]; } + // return SL_FLEX_802154_PACKET_OK if the frame is ready return SL_FLEX_802154_PACKET_OK; } @@ -359,6 +373,7 @@ int16_t sl_flex_802154_packet_pack_sunfsk_4bytes_data_frame(uint8_t fcsType, { uint16_t frameLength = 0; uint32_t phr = 0; + uint8_t phr_size = 4; // Checking input parameters if ((fcsType > 1) @@ -372,10 +387,13 @@ int16_t sl_flex_802154_packet_pack_sunfsk_4bytes_data_frame(uint8_t fcsType, #endif return SL_FLEX_802154_PACKET_ERROR; } + // Add payload bytes + *frame_size = payload_size + phr_size; - uint8_t phr_size = 4; - frameLength = ((payload_size + phr_size) - phr_size) & 0x7FF; // FrameLength in byte + frameLength = (*frame_size - phr_size) & 0x7FF; // FrameLength in byte + frameLength = frameLength + 4; phr = (fcsType << 12) | (whitening << 11) | frameLength; + // Flip bits of the 2 bytes PHR as it is a SUN modulation phr = __RBIT(phr); @@ -383,11 +401,16 @@ int16_t sl_flex_802154_packet_pack_sunfsk_4bytes_data_frame(uint8_t fcsType, for (uint8_t index = 0; index < phr_size; index++) { frame_buffer[index] = (uint8_t)((phr & (0xFF << index * 8)) >> index * 8); } - // Add payload bytes - *frame_size = payload_size + phr_size; + for (uint8_t index = phr_size; index < *frame_size; index++) { frame_buffer[index] = payload[index - phr_size]; } + + for (uint8_t index = *frame_size; index < (*frame_size + 4); index++) { + frame_buffer[index] = 0x00; + } + + *frame_size = *frame_size + 4; // return SL_FLEX_802154_PACKET_OK if the frame is ready return SL_FLEX_802154_PACKET_OK; } @@ -402,7 +425,6 @@ int16_t sl_flex_802154_packet_pack_oqpsk_data_frame(bool spreadingMode, uint32_t phr = 0U; uint16_t frameLength = 0U; uint8_t phr_size = 4U; - uint8_t fcs_size = 4U; // Checking input parameters if ((rateMode & 0xFC) @@ -416,8 +438,12 @@ int16_t sl_flex_802154_packet_pack_oqpsk_data_frame(bool spreadingMode, return SL_FLEX_802154_PACKET_ERROR; } + // Add payload bytes + *frame_size = payload_size + phr_size; + // The Frame Length field (L10-L0) specifies the total number of octets contained in the PSDU (prior to FEC encoding). The PSDU field carries the data of the PHY packet. - frameLength = ((payload_size + phr_size) - phr_size) + fcs_size; + frameLength = (*frame_size - phr_size) & 0x7FF; + frameLength = frameLength + 4; phr = ((uint8_t)spreadingMode << 15) | (rateMode << 13) | frameLength; // Flip the 32 bits for all SUN modulations phr = __RBIT(phr); @@ -426,12 +452,17 @@ int16_t sl_flex_802154_packet_pack_oqpsk_data_frame(bool spreadingMode, for (uint8_t index = 0; index < phr_size; index++) { frame_buffer[index] = (uint8_t)((phr & (0xFF << index * 8)) >> index * 8); } - // Add payload bytes - *frame_size = payload_size + phr_size; + for (uint8_t index = phr_size; index < *frame_size; index++) { frame_buffer[index] = payload[index - phr_size]; } + for (uint8_t index = *frame_size; index < (*frame_size + 4); index++) { + frame_buffer[index] = 0x00; + } + + *frame_size = *frame_size + 4; + // return SL_FLEX_802154_PACKET_OK if the frame is ready return SL_FLEX_802154_PACKET_OK; } @@ -551,7 +582,7 @@ uint8_t *sl_flex_802154_packet_unpack_sunfsk_2byte_data_frame(const RAIL_RxPacke uint32_t phr = 0U; uint8_t *tmp = frame_buffer; uint8_t phr_size = 2U; - uint8_t soft_modem_trailing_bytes = 0U; + uint8_t fcsSizeByte = 0U; if ((packet_information == NULL) || (fcsType == NULL) || (whitening == NULL) || (frame_buffer == NULL) || (payload_size == NULL)) { #if defined(SL_CATALOG_APP_LOG_PRESENT) @@ -568,7 +599,10 @@ uint8_t *sl_flex_802154_packet_unpack_sunfsk_2byte_data_frame(const RAIL_RxPacke *fcsType = (phr >> 12) & 0x01; *whitening = (phr >> 11) & 0x01; - *payload_size = (packet_information->packetBytes - phr_size - soft_modem_trailing_bytes); + fcsSizeByte = *fcsType ? 2 : 4; + + *payload_size = (phr & 0x7FF) - 4; + tmp += phr_size; return tmp; @@ -583,7 +617,6 @@ uint8_t *sl_flex_802154_packet_unpack_sunfsk_4byte_data_frame(const RAIL_RxPacke uint32_t phr = 0U; uint8_t *tmp = frame_buffer; uint8_t phr_size = 4U; - uint8_t soft_modem_trailing_bytes = 0U; if ((packet_information == NULL) || (fcsType == NULL) || (whitening == NULL) || (frame_buffer == NULL) || (payload_size == NULL)) { #if defined(SL_CATALOG_APP_LOG_PRESENT) @@ -600,7 +633,7 @@ uint8_t *sl_flex_802154_packet_unpack_sunfsk_4byte_data_frame(const RAIL_RxPacke *fcsType = (phr >> 12) & 0x01; *whitening = (phr >> 11) & 0x01; - *payload_size = (packet_information->packetBytes - phr_size - soft_modem_trailing_bytes); + *payload_size = (phr & 0x7FF) - 4; tmp += phr_size; return tmp; @@ -615,7 +648,6 @@ uint8_t *sl_flex_802154_packet_unpack_ofdm_data_frame(const RAIL_RxPacketInfo_t uint32_t phr = 0U; uint8_t *tmp = frame_buffer; uint8_t phr_size = 4U; - uint8_t soft_modem_trailing_bytes = 6U; if ((packet_information == NULL) || (rate == NULL) @@ -636,7 +668,7 @@ uint8_t *sl_flex_802154_packet_unpack_ofdm_data_frame(const RAIL_RxPacketInfo_t *rate = (phr >> 19) & 0x1F; *scrambler = (phr >> 3) & 0x03; - *payload_size = (packet_information->packetBytes - phr_size - soft_modem_trailing_bytes); + *payload_size = ((phr >> 7) & 0x7FF) - 4; tmp += phr_size; return tmp; @@ -651,7 +683,6 @@ uint8_t *sl_flex_802154_packet_unpack_oqpsk_data_frame(const RAIL_RxPacketInfo_t uint32_t phr = 0U; uint8_t *tmp = frame_buffer; uint8_t phr_size = 4U; - uint8_t soft_modem_trailing_bytes = 6U; if ((packet_information == NULL) || (spreadingMode == NULL) @@ -672,7 +703,89 @@ uint8_t *sl_flex_802154_packet_unpack_oqpsk_data_frame(const RAIL_RxPacketInfo_t *spreadingMode = (bool)((phr >> 15) & 0x01); *rateMode = (phr >> 13) & 0x03; - *payload_size = (packet_information->packetBytes - phr_size - soft_modem_trailing_bytes); + *payload_size = (phr & 0x7FF) - 4; + tmp += phr_size; + + return tmp; +} + +int16_t sl_flex_802154_packet_pack_sidewalk_data_frame(uint8_t fcsType, + uint8_t whitening, + uint16_t payload_size, + const uint8_t *payload, + uint16_t *frame_size, + uint8_t *frame_buffer) +{ + uint16_t frameLength = 0; + uint8_t fcsSizeByte = 0; + uint32_t phr = 0; + uint8_t phr_size = 2; + + // Checking input parameters + if ((fcsType > 1) + || (whitening > 1) + || (payload_size == 0) + || (payload == NULL) + || (frame_size == NULL) + || (frame_buffer == NULL) + || (payload_size > 255)) { +#if defined(SL_CATALOG_APP_LOG_PRESENT) + app_log_warning("sl_flex_802154_packet_pack_sidewalk_data_frame ERR: parameter\r\n"); +#endif + return SL_FLEX_802154_PACKET_ERROR; + } + + *frame_size = payload_size + phr_size; + fcsSizeByte = fcsType ? 2 : 4; //FCS type = 0 => fcsSizeByte = 4 + frameLength = (*frame_size - phr_size + fcsSizeByte) & 0x7FF; + phr = (((fcsType << 12) | (whitening << 11) | frameLength)) & 0x0FFFF; + + // Flip bits of the 2 bytes PHR as it is a SUN modulation + phr = (uint16_t) (__RBIT(phr) >> 16); + + // Write the phr in the payload + for (uint8_t index = 0; index < phr_size; index++) { + frame_buffer[index] = (uint8_t)((phr & (0xFF << index * 8)) >> index * 8); + } + + for (uint8_t index = phr_size; index < *frame_size; index++) { + frame_buffer[index] = payload[index - phr_size]; + } + + *frame_size = frameLength; + // return SL_FLEX_802154_PACKET_OK if the frame is ready + return SL_FLEX_802154_PACKET_OK; +} + +uint8_t *sl_flex_802154_packet_unpack_sidewalk_data_frame(const RAIL_RxPacketInfo_t *packet_information, + uint8_t *fcsType, + uint8_t *whitening, + uint16_t *payload_size, + uint8_t *frame_buffer) +{ + uint32_t phr = 0U; + uint8_t *tmp = frame_buffer; + uint8_t phr_size = 2U; + uint8_t fcsSizeByte = 0U; + + if ((packet_information == NULL) || (fcsType == NULL) || (whitening == NULL) || (frame_buffer == NULL) || (payload_size == NULL)) { +#if defined(SL_CATALOG_APP_LOG_PRESENT) + app_log_warning("sl_flex_802154_packet_unpack_sidewalk_data_frame ERR: parameter\r\n"); +#endif + return NULL; + } + + for (uint8_t index = 0; index < phr_size; index++) { + phr |= frame_buffer[index] << (index * 8); + } + phr = (uint16_t) (__RBIT(phr) >> 16); + + *fcsType = (phr >> 12) & 0x01; + *whitening = (phr >> 11) & 0x01; + + fcsSizeByte = *fcsType ? 2 : 4; + + *payload_size = (phr & 0x7FF) - fcsSizeByte; tmp += phr_size; return tmp; diff --git a/app/flex/component/rail/sl_flex_rail_packet_asm/sl_flex_packet_asm.h b/app/flex/component/rail/sl_flex_rail_packet_asm/sl_flex_packet_asm.h index 46eaacc9ccf..be6d01eb8b5 100644 --- a/app/flex/component/rail/sl_flex_rail_packet_asm/sl_flex_packet_asm.h +++ b/app/flex/component/rail/sl_flex_rail_packet_asm/sl_flex_packet_asm.h @@ -541,6 +541,44 @@ void sl_flex_ble_copy_payload(sl_flex_ble_advertising_packet_t *packet, uint8_t *dest, const sl_flex_ble_packet_size_t payload_length); +/**************************************************************************//** + * This function packs the IEEE 802.15.4 SideWalk FSK with 2byte PHR frame. + * + * @param[in] fcsType FCS is on/off + * @param[in] whitening Whitening is on/off + * @param[in] payload_size payload size + * @param[in] *payload payload + * @param[out] *frame_size frame_size that is calculated + * @param[out] *frame_buffer buffer of packed frame + * + * @retval SL_FLEX_802154_PACKET_OK if the process has been successful. + * @retval SL_FLEX_802154_PACKET_ERROR if the process has been failed. + *****************************************************************************/ +int16_t sl_flex_802154_packet_pack_sidewalk_data_frame(uint8_t fcsType, + uint8_t whitening, + uint16_t payload_size, + const uint8_t *payload, + uint16_t *frame_size, + uint8_t *frame_buffer); + +/**************************************************************************//** + * This function unpacks the received packet to get IEEE 802.15.4 SideWalk FSK with 2byte PHR frame. + * + * @param[in] *packet_information packet information + * @param[out] *fcsType FCS is on/off + * @param[out] *whitening whitening is on/off + * @param[out] *payload_size payload size + * @param[in] *frame_buffer buffer of packed frame + * + * @return pointer of the payload + * @return NULL on error + *****************************************************************************/ +uint8_t *sl_flex_802154_packet_unpack_sidewalk_data_frame(const RAIL_RxPacketInfo_t *packet_information, + uint8_t *fcsType, + uint8_t *whitening, + uint16_t *payload_size, + uint8_t *frame_buffer); + /**************************************************************************//** * Get Payload pointer * diff --git a/app/flex/component/rail/sl_range_test_std_component/app_measurement_standard.c b/app/flex/component/rail/sl_range_test_std_component/app_measurement_standard.c index b8cb3157d04..28a8a90c07a 100644 --- a/app/flex/component/rail/sl_range_test_std_component/app_measurement_standard.c +++ b/app/flex/component/rail/sl_range_test_std_component/app_measurement_standard.c @@ -352,7 +352,11 @@ void init_ranget_test_standard_phys(uint8_t* number_of_phys) // Please ensure your configuration is valid for the selected part. app_assert(status == RAIL_STATUS_NO_ERROR, "RAIL_ConfigTxPower faild"); //The IEEE802154 and the BLE setting requires 2.4GHz base-frequency - status = RAIL_SetTxPowerDbm(rail_handles[i], power_amplifier_value->maxPower); + if (power_amplifier_value == NULL) { + status = RAIL_SetTxPowerDbm(rail_handles[i], 100); + } else { + status = RAIL_SetTxPowerDbm(rail_handles[i], power_amplifier_value->maxPower); + } app_assert(status == RAIL_STATUS_NO_ERROR, "RAIL_SetTxPower failed"); } diff --git a/app/flex/documentation/release-highlights.txt b/app/flex/documentation/release-highlights.txt index da6cecc7327..f20a636c43c 100644 --- a/app/flex/documentation/release-highlights.txt +++ b/app/flex/documentation/release-highlights.txt @@ -1,2 +1,2 @@ -Flex SDK 3.5.1.0 -- Targeted quality improvements and bug fixes \ No newline at end of file +Flex SDK 3.5.2.0 +- RAIL Library: 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 aabd5bb5763..168f2610cb4 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,77 +258,77 @@ - + 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. - + Introduces the long-range radio profile, escribes its development, and examines underlying details that enable it to realize extended range. 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 9999ad0c647..5357161b8a9 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.5.1.0 -prop.subLabel=Flex\\ 3.5.1.0 +version=3.5.2.0 +prop.subLabel=Flex\\ 3.5.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/example/connect/light_switch/connect_bt_dmp_soc_light/app_cli.c b/app/flex/example/connect/light_switch/connect_bt_dmp_soc_light/app_cli.c index 280ac537d03..15ff6300748 100644 --- a/app/flex/example/connect/light_switch/connect_bt_dmp_soc_light/app_cli.c +++ b/app/flex/example/connect/light_switch/connect_bt_dmp_soc_light/app_cli.c @@ -149,7 +149,7 @@ void cli_set_tx_option(sl_cli_command_arg_t *arguments) char* is_security = ((tx_options & EMBER_OPTIONS_SECURITY_ENABLED) ? ENABLED : DISABLED); char* is_high_prio = ((tx_options & EMBER_OPTIONS_HIGH_PRIORITY) ? ENABLED : DISABLED); - app_log_info("TX options set: MAC acks %s, security %s, priority %s", is_ack, is_security, is_high_prio); + app_log_info("TX options set: MAC acks %s, security %s, priority %s\n", is_ack, is_security, is_high_prio); } /****************************************************************************** diff --git a/app/flex/example/rail/rail_bt_dmp_soc_range_test/rail_bt_dmp_soc_range_test.slcp b/app/flex/example/rail/rail_bt_dmp_soc_range_test/rail_bt_dmp_soc_range_test.slcp index a2f80f7a956..95cab357f26 100644 --- a/app/flex/example/rail/rail_bt_dmp_soc_range_test/rail_bt_dmp_soc_range_test.slcp +++ b/app/flex/example/rail/rail_bt_dmp_soc_range_test/rail_bt_dmp_soc_range_test.slcp @@ -183,14 +183,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- USART settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_bt_dmp_soc_range_test_cli/rail_bt_dmp_soc_range_test_cli.slcp b/app/flex/example/rail/rail_bt_dmp_soc_range_test_cli/rail_bt_dmp_soc_range_test_cli.slcp index de3d847e426..838477b59e6 100644 --- a/app/flex/example/rail/rail_bt_dmp_soc_range_test_cli/rail_bt_dmp_soc_range_test_cli.slcp +++ b/app/flex/example/rail/rail_bt_dmp_soc_range_test_cli/rail_bt_dmp_soc_range_test_cli.slcp @@ -173,14 +173,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- USART settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_burst_duty_cycle/rail_soc_burst_duty_cycle.slcp b/app/flex/example/rail/rail_soc_burst_duty_cycle/rail_soc_burst_duty_cycle.slcp index ad42381d823..cddda4197f8 100644 --- a/app/flex/example/rail/rail_soc_burst_duty_cycle/rail_soc_burst_duty_cycle.slcp +++ b/app/flex/example/rail/rail_soc_burst_duty_cycle/rail_soc_burst_duty_cycle.slcp @@ -171,14 +171,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- Other project settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_emode/rail_soc_emode.slcp b/app/flex/example/rail/rail_soc_emode/rail_soc_emode.slcp index d13884d3a96..24f24f74b1b 100644 --- a/app/flex/example/rail/rail_soc_emode/rail_soc_emode.slcp +++ b/app/flex/example/rail/rail_soc_emode/rail_soc_emode.slcp @@ -169,14 +169,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- CLI Settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_light/rail_soc_light.slcp b/app/flex/example/rail/rail_soc_light/rail_soc_light.slcp index 4bf1f2ab999..ed29d4bf240 100644 --- a/app/flex/example/rail/rail_soc_light/rail_soc_light.slcp +++ b/app/flex/example/rail/rail_soc_light/rail_soc_light.slcp @@ -179,14 +179,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- Other project settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_long_preamble_duty_cycle/rail_soc_long_preamble_duty_cycle.slcp b/app/flex/example/rail/rail_soc_long_preamble_duty_cycle/rail_soc_long_preamble_duty_cycle.slcp index e5d20f98e73..ed0e3ae137e 100644 --- a/app/flex/example/rail/rail_soc_long_preamble_duty_cycle/rail_soc_long_preamble_duty_cycle.slcp +++ b/app/flex/example/rail/rail_soc_long_preamble_duty_cycle/rail_soc_long_preamble_duty_cycle.slcp @@ -180,14 +180,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- Other project settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_mode_switch/rail_soc_mode_switch.slcp b/app/flex/example/rail/rail_soc_mode_switch/rail_soc_mode_switch.slcp index 3b43ef0a2e9..7109409cf31 100644 --- a/app/flex/example/rail/rail_soc_mode_switch/rail_soc_mode_switch.slcp +++ b/app/flex/example/rail/rail_soc_mode_switch/rail_soc_mode_switch.slcp @@ -202,11 +202,19 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" condition: [hardware_board_has_eff] diff --git a/app/flex/example/rail/rail_soc_railtest/rail_soc_railtest.slcp b/app/flex/example/rail/rail_soc_railtest/rail_soc_railtest.slcp index 1992fcd7098..e96fce638df 100644 --- a/app/flex/example/rail/rail_soc_railtest/rail_soc_railtest.slcp +++ b/app/flex/example/rail/rail_soc_railtest/rail_soc_railtest.slcp @@ -73,13 +73,13 @@ configuration: - name: BUFFER_POOL_ALLOCATOR_POOL_SIZE value: "5" - name: BUFFER_POOL_ALLOCATOR_BUFFER_SIZE_MAX - value: "2098" # SL_RAIL_TEST_MAX_PACKET_LENGTH==2058 - # + sizeof(RailAppEvent_t)==40 + value: "2102" # SL_RAIL_TEST_MAX_PACKET_LENGTH==2058 + # + sizeof(RailAppEvent_t)==44 condition: - device_sdid_220 - name: BUFFER_POOL_ALLOCATOR_BUFFER_SIZE_MAX - value: "1064" # SL_RAIL_TEST_MAX_PACKET_LENGTH==1024 - # + sizeof(RailAppEvent_t)==40 + value: "1068" # SL_RAIL_TEST_MAX_PACKET_LENGTH==1024 + # + sizeof(RailAppEvent_t)==44 unless: - device_sdid_220 # stdio diff --git a/app/flex/example/rail/rail_soc_range_test/rail_soc_range_test.slcp b/app/flex/example/rail/rail_soc_range_test/rail_soc_range_test.slcp index 0f136f53606..21ce502d90b 100644 --- a/app/flex/example/rail/rail_soc_range_test/rail_soc_range_test.slcp +++ b/app/flex/example/rail/rail_soc_range_test/rail_soc_range_test.slcp @@ -195,14 +195,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- USART settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_range_test_cli/rail_soc_range_test_cli.slcp b/app/flex/example/rail/rail_soc_range_test_cli/rail_soc_range_test_cli.slcp index 85938122e5b..eb40419fd77 100644 --- a/app/flex/example/rail/rail_soc_range_test_cli/rail_soc_range_test_cli.slcp +++ b/app/flex/example/rail/rail_soc_range_test_cli/rail_soc_range_test_cli.slcp @@ -185,14 +185,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- USART settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_simple_trx/rail_soc_simple_trx.slcp b/app/flex/example/rail/rail_soc_simple_trx/rail_soc_simple_trx.slcp index 0ee21f5235e..f02e934dc08 100644 --- a/app/flex/example/rail/rail_soc_simple_trx/rail_soc_simple_trx.slcp +++ b/app/flex/example/rail/rail_soc_simple_trx/rail_soc_simple_trx.slcp @@ -183,14 +183,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- Other project settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_simple_trx_auto_ack/rail_soc_simple_trx_auto_ack.slcp b/app/flex/example/rail/rail_soc_simple_trx_auto_ack/rail_soc_simple_trx_auto_ack.slcp index 60ea4b4ee1d..fcc5e0985f7 100644 --- a/app/flex/example/rail/rail_soc_simple_trx_auto_ack/rail_soc_simple_trx_auto_ack.slcp +++ b/app/flex/example/rail/rail_soc_simple_trx_auto_ack/rail_soc_simple_trx_auto_ack.slcp @@ -170,14 +170,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- Other project settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_simple_trx_multiphy/rail_soc_simple_trx_multiphy.slcp b/app/flex/example/rail/rail_soc_simple_trx_multiphy/rail_soc_simple_trx_multiphy.slcp index fad26ce8654..adae9ed1e6f 100644 --- a/app/flex/example/rail/rail_soc_simple_trx_multiphy/rail_soc_simple_trx_multiphy.slcp +++ b/app/flex/example/rail/rail_soc_simple_trx_multiphy/rail_soc_simple_trx_multiphy.slcp @@ -173,14 +173,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- Other project settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_simple_trx_one_led/rail_soc_simple_trx_one_led.slcp b/app/flex/example/rail/rail_soc_simple_trx_one_led/rail_soc_simple_trx_one_led.slcp index 671a042169a..c7790d6a8dd 100644 --- a/app/flex/example/rail/rail_soc_simple_trx_one_led/rail_soc_simple_trx_one_led.slcp +++ b/app/flex/example/rail/rail_soc_simple_trx_one_led/rail_soc_simple_trx_one_led.slcp @@ -181,14 +181,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- Other project settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_simple_trx_std/rail_soc_simple_trx_std.slcp b/app/flex/example/rail/rail_soc_simple_trx_std/rail_soc_simple_trx_std.slcp index dd1330771d2..d40d298175f 100644 --- a/app/flex/example/rail/rail_soc_simple_trx_std/rail_soc_simple_trx_std.slcp +++ b/app/flex/example/rail/rail_soc_simple_trx_std/rail_soc_simple_trx_std.slcp @@ -289,14 +289,22 @@ configuration: value: "RAIL_RF_STATE_RX" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- Other project settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_switch/rail_soc_switch.slcp b/app/flex/example/rail/rail_soc_switch/rail_soc_switch.slcp index 5584abedf97..3dd3e586842 100644 --- a/app/flex/example/rail/rail_soc_switch/rail_soc_switch.slcp +++ b/app/flex/example/rail/rail_soc_switch/rail_soc_switch.slcp @@ -179,14 +179,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- Other project settings ---------------- - name: SL_BOARD_ENABLE_VCOM value: "1" diff --git a/app/flex/example/rail/rail_soc_wmbus_collector/rail_soc_wmbus_collector.slcp b/app/flex/example/rail/rail_soc_wmbus_collector/rail_soc_wmbus_collector.slcp index f830a919e66..ea35fcff838 100644 --- a/app/flex/example/rail/rail_soc_wmbus_collector/rail_soc_wmbus_collector.slcp +++ b/app/flex/example/rail/rail_soc_wmbus_collector/rail_soc_wmbus_collector.slcp @@ -155,14 +155,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- MBEDTLS ---------------- - name: SL_MBEDTLS_HARDWARE_ACCELERATION_ENABLED value: "0" diff --git a/app/flex/example/rail/rail_soc_wmbus_meter/rail_soc_wmbus_meter.slcp b/app/flex/example/rail/rail_soc_wmbus_meter/rail_soc_wmbus_meter.slcp index 06ff6313931..6bf09ce7c88 100644 --- a/app/flex/example/rail/rail_soc_wmbus_meter/rail_soc_wmbus_meter.slcp +++ b/app/flex/example/rail/rail_soc_wmbus_meter/rail_soc_wmbus_meter.slcp @@ -174,14 +174,22 @@ configuration: value: "1" #------------- RAIL init, PA for EFF --------------- - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ - value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_SUBGIG_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_SELECTION_OFDM - value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_25DBM" + value: "RAIL_TX_POWER_MODE_OFDM_PA_EFF_POWERSETTING_TABLE" condition: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_SUBGHZ + value: "RAIL_TX_POWER_MODE_SUBGIG_POWERSETTING_TABLE" + condition: [device_sdid_220] + unless: [hardware_board_has_eff] + - name: SL_RAIL_UTIL_PA_SELECTION_OFDM + condition: [device_sdid_220] + value: "RAIL_TX_POWER_MODE_OFDM_PA_POWERSETTING_TABLE" + unless: [hardware_board_has_eff] - name: SL_RAIL_UTIL_PA_CALIBRATION_ENABLE value: "1" - condition: [hardware_board_has_eff] + condition: [hardware_board_has_eff] #------------- MBEDTLS ---------------- - name: SL_MBEDTLS_HARDWARE_ACCELERATION_ENABLED value: "0" diff --git a/app/flex/flex_demos_only_demos.xml b/app/flex/flex_demos_only_demos.xml index bc6e421b5fe..3acc320de0e 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 cce51bce69c..cd51a5ba35e 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,17 @@ - + + + + + + + This is a customizable Range Test Sample Application that demonstrates over the air range of the EFR32. This sample app can act as a Transmitter and a Receiver. 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. In Tx Mode, the user can send packets. Packet length (7..64 bytes) and the number of packets to transmit (from 500 up to continuous) can be set. Output power can be set 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 get_power command displays the setpoint first, then actual value. In Rx Mode, the radio listens on the given channel and inspects the packets received. Only packets that are sent with the expected device ID, will be processed. Packet Error Rate, Bit Error Rate and RSSI of the packets is displayed to inform about the quality of the transmission. For both modes, the channel on which the Tx/Rx radio will operate and the device IDs of the transmitters and receiver radio, can be set. Radio related events can be logged on UART on demand. CLI can be used for setting and starting/stoping the application as well, to start with CLI interface send 'help' over terminal. 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. + + + + @@ -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,18 +245,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. - + @@ -256,7 +266,7 @@ - + @@ -266,7 +276,7 @@ - + @@ -276,7 +286,7 @@ - + @@ -286,7 +296,7 @@ - + @@ -296,7 +306,7 @@ - + @@ -306,7 +316,7 @@ - + @@ -316,7 +326,7 @@ - + @@ -326,7 +336,7 @@ - + @@ -336,7 +346,7 @@ - + @@ -346,7 +356,7 @@ - + @@ -356,7 +366,17 @@ - + + + + + + + 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. 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. 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 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 get_power command 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. + + + + @@ -366,7 +386,7 @@ - + @@ -376,7 +396,7 @@ - + @@ -386,7 +406,7 @@ - + @@ -396,7 +416,7 @@ - + @@ -406,7 +426,7 @@ - + @@ -416,7 +436,7 @@ - + @@ -426,7 +446,7 @@ - + @@ -436,7 +456,7 @@ - + @@ -446,7 +466,7 @@ - + @@ -456,7 +476,7 @@ - + @@ -466,7 +486,7 @@ - + @@ -476,7 +496,7 @@ - + @@ -486,7 +506,7 @@ - + @@ -496,7 +516,7 @@ - + @@ -506,7 +526,7 @@ - + @@ -516,7 +536,7 @@ - + @@ -526,7 +546,7 @@ - + @@ -536,7 +556,7 @@ - + @@ -546,7 +566,7 @@ - + @@ -556,7 +576,7 @@ - + @@ -566,7 +586,7 @@ - + @@ -576,7 +596,7 @@ - + @@ -586,7 +606,7 @@ - + @@ -596,7 +616,7 @@ - + @@ -606,7 +626,7 @@ - + @@ -616,7 +636,7 @@ - + @@ -626,7 +646,7 @@ - + @@ -636,7 +656,7 @@ - + @@ -646,7 +666,7 @@ - + @@ -656,7 +676,7 @@ - + @@ -666,7 +686,7 @@ - + @@ -676,7 +696,7 @@ - + @@ -686,7 +706,7 @@ - + @@ -696,7 +716,7 @@ - + @@ -706,7 +726,17 @@ - + + + + + + + Range Test with Bluetooth connectivity. It runs on top of Micrium OS RTOS and multiprotocol RAIL. This is a customizable application that demonstrates over the air range of the EFR32. This sample app can act as a Transmitter and a Receiver. 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. In Tx Mode, the user can send packets. Packet length (7..64 bytes) and the number of packets to transmit (from 500 up to continuous) can be set. Output power can be set 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 get_power command displays the setpoint first, then the actual value. In Rx Mode, the radio listens on the given channel and inspects the packets received. Only packets that are sent with the expected device ID, will be processed. Packet Error Rate, Bit Error Rate and RSSI of the packets is displayed to inform about the quality of the transmission. For both modes, the channel on which the Tx/Rx radio will operate and the device IDs of the transmitters and receiver radio, can be set. Radio related events can be logged on UART on demand. CLI can be used for setting and starting/stoping the application as well, to start with CLI interface send 'help' over 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. + + + + @@ -716,7 +746,7 @@ - + @@ -726,7 +756,7 @@ - + diff --git a/app/flex/flex_production_templates.xml b/app/flex/flex_production_templates.xml index 14c29b89d98..5d4ac9d293b 100644 --- a/app/flex/flex_production_templates.xml +++ b/app/flex/flex_production_templates.xml @@ -3,9 +3,10 @@ + - + @@ -17,9 +18,10 @@ + - + @@ -31,9 +33,10 @@ + - + @@ -45,9 +48,10 @@ + - + @@ -59,9 +63,10 @@ + - + @@ -73,9 +78,10 @@ + - + @@ -87,9 +93,10 @@ + - + @@ -101,6 +108,7 @@ + @@ -115,9 +123,10 @@ + - + @@ -129,6 +138,7 @@ + @@ -143,9 +153,10 @@ + - + @@ -157,6 +168,7 @@ + @@ -171,9 +183,10 @@ + - + @@ -185,6 +198,7 @@ + @@ -199,9 +213,10 @@ + - + @@ -213,9 +228,10 @@ + - + @@ -227,6 +243,7 @@ + @@ -241,6 +258,7 @@ + @@ -255,6 +273,7 @@ + @@ -269,9 +288,10 @@ + - + @@ -283,6 +303,7 @@ + @@ -297,9 +318,10 @@ + - + @@ -311,6 +333,7 @@ + @@ -325,9 +348,10 @@ + - + @@ -339,6 +363,7 @@ + @@ -353,6 +378,7 @@ + @@ -367,6 +393,7 @@ + @@ -381,9 +408,10 @@ + - + @@ -395,6 +423,7 @@ + @@ -409,6 +438,7 @@ + @@ -423,6 +453,7 @@ + @@ -437,6 +468,7 @@ + diff --git a/app/host/multiprotocol/zigbeed/multiprotocol-container/Dockerfile b/app/host/multiprotocol/zigbeed/multiprotocol-container/Dockerfile index 1f0e4eb6569..6dd72e1c0ab 100644 --- a/app/host/multiprotocol/zigbeed/multiprotocol-container/Dockerfile +++ b/app/host/multiprotocol/zigbeed/multiprotocol-container/Dockerfile @@ -11,6 +11,8 @@ RUN apt-get update && apt-get install -y \ bluetooth \ bluez \ bluez-tools \ + python3 \ + python3-pip \ gdb \ init \ libbluetooth-dev \ @@ -28,19 +30,14 @@ RUN apt-get update && apt-get install -y \ # Don't auto-start bluetooth service RUN systemctl disable bluetooth.service +# Prerequisite to use Silabs python BGAPI program +RUN pip3 install pybgapi + # Remove "tail -f /var/log/syslog" from shell script RUN sed -i '$ d' /app/etc/docker/docker_entrypoint.sh # Fix 'pam_env' issue with unset locale RUN locale >/etc/default/locale -# EMZIGBEE-9638: remove this RUN command when we are able to replace silabs-prereq -# with Zig-Dock to build all MP apps in the CI job. -RUN if [ "$SYSTEM_ARCH" = "arm32v7" ]; then \ - ln -s /lib/arm-linux-gnueabihf/libreadline.so.8.1 /lib/arm-linux-gnueabihf/libreadline.so.7; \ - elif [ "$SYSTEM_ARCH" = "arm64v8" ]; then \ - ln -s /lib/aarch64-linux-gnu/libreadline.so.8.1 /lib/aarch64-linux-gnu/libreadline.so.7; \ - fi - # Add in systemd files COPY _artifacts/systemd/* /etc/systemd/system/ RUN systemctl enable cpcd.service diff --git a/app/mcu_example/app_mcu.properties b/app/mcu_example/app_mcu.properties index 569b613af49..d52bab7eb57 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.4.1.0 +version=6.4.0.0 supportedParts=mcu.arm.efm32.* mcu.arm.ezr32.* .*wgm16.* -prop.subLabel=MCU\\ 6.4.1.0 +prop.subLabel=MCU\\ 6.4.0.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 a6263b7224e..0b8fa3e5a01 100644 --- a/app/mcu_example/documentation/release-highlights.txt +++ b/app/mcu_example/documentation/release-highlights.txt @@ -1,4 +1,2 @@ -32-Bit MCU SDK 6.4.1.0 +32-Bit MCU SDK 6.4.2.0 - Underlying platform changes only - - diff --git a/app/mcu_example/factory_demo/brd2102a/factory_demo.slcp b/app/mcu_example/factory_demo/brd2102a/factory_demo.slcp index 08ec5234dd8..d191fa6d528 100644 --- a/app/mcu_example/factory_demo/brd2102a/factory_demo.slcp +++ b/app/mcu_example/factory_demo/brd2102a/factory_demo.slcp @@ -1,7 +1,7 @@ project_name: factory_demo package: mcu quality: production -label: MCU Example - Factory Demo (Previously known as 'helges_demo') +label: Platform - Factory Demo description: This example project demonstrates a wide range of features of the EFM32TG11 MCU and the SLSTK3301A Starter Kit. diff --git a/app/mcu_example/factory_demo/brd2204a/factory_demo.slcp b/app/mcu_example/factory_demo/brd2204a/factory_demo.slcp index 8d18a5c69b8..73403a62d29 100644 --- a/app/mcu_example/factory_demo/brd2204a/factory_demo.slcp +++ b/app/mcu_example/factory_demo/brd2204a/factory_demo.slcp @@ -1,7 +1,7 @@ project_name: factory_demo package: mcu quality: production -label: MCU Example - Factory Demo (Previously known as 'helges_demo') +label: Platform - Factory Demo description: > This example project demonstrates a wide range of features of the EFM32GG11 MCU and the SLSTK3701A Starter Kit. diff --git a/app/mcu_example/mcu_production_demos.xml b/app/mcu_example/mcu_production_demos.xml index e1f33e88d96..8c979eab9e1 100644 --- a/app/mcu_example/mcu_production_demos.xml +++ b/app/mcu_example/mcu_production_demos.xml @@ -1,56 +1,56 @@ - + This example project demonstrates a wide range of features of the EFM32TG11 MCU and the SLSTK3301A Starter Kit. - + - + - + This example project demonstrates a wide range of features of the EFM32GG11 MCU and the SLSTK3701A Starter Kit. - + - + - + This example shows how to use the Micrium OS CANopen stack. It uses the EFM32GG11B starter kit's two CAN peripherals in external loopback mode. It requires CAN expansion board ISO-CAN-EXP REV 1.0 or REV 2.0. This example will, upon the user pressing either push buttons (BTN0, BTN1), update one entry in the CANopen object dictionary of node 1 on the 'can0' bus with a predefined value for each button. Upon changing the value, a PDO message will be triggered, which will be caught by node 2 on the 'can1' bus. Node 2 will in turn update its object dictionary with the received value. The value of the object of both nodes is continuously displayed on the LCD. - + - + - + MicriumOS Network example. This example shows how to use the Micrium OS network stack with the ETH peripheral on the EFM32GG11B starter kit. This example will initialize the RMII interface to the external PHY and setup a 100 Mbit connection. - + - + - + Hall effect demo code for the Si72xx-WD-Kit using a Silicon Labs SLSTK3400A-EFM32HG Starter Kit. You must have the Hall Effect Evaluation kit, Si72xx-WD-Kit, to make use of this demo. The Si72xx-WD-Kit includes two Si7210 sensors mounted on an expansion board (Si72xx-EXP) plus each of the six base part types mounted on small postage-stamp-sized (PS) boards. You must use the Silicon Labs SLSTK3400A-EFM32HG Starter Kit which is included in the Si72xx-WD-Kit. - + - + diff --git a/app/mcu_example/mcu_production_templates.xml b/app/mcu_example/mcu_production_templates.xml index 6a9dce7e112..980cdda38c3 100644 --- a/app/mcu_example/mcu_production_templates.xml +++ b/app/mcu_example/mcu_production_templates.xml @@ -1,81 +1,93 @@ - + + - - + + + - + + - + + - + + - + + - + + - - + + + - + + - - + + + - + + - - + + + diff --git a/app/mcu_example/micriumos_canopen/micriumos_canopen.slcp b/app/mcu_example/micriumos_canopen/micriumos_canopen.slcp index 8ff595ca619..95908e348b9 100644 --- a/app/mcu_example/micriumos_canopen/micriumos_canopen.slcp +++ b/app/mcu_example/micriumos_canopen/micriumos_canopen.slcp @@ -1,7 +1,7 @@ project_name: micriumos_canopen package: mcu quality: production -label: MCU Example - Micrium OS CANopen +label: Platform - Micrium OS CANopen description: > This example shows how to use the Micrium OS CANopen stack. It uses the EFM32GG11B starter kit's two CAN peripherals in external loopback mode. diff --git a/app/mcu_example/micriumos_net/micriumos_net.slcp b/app/mcu_example/micriumos_net/micriumos_net.slcp index a2b60862c47..9136404ea29 100644 --- a/app/mcu_example/micriumos_net/micriumos_net.slcp +++ b/app/mcu_example/micriumos_net/micriumos_net.slcp @@ -1,7 +1,7 @@ project_name: micriumos_net package: mcu quality: production -label: MCU Example - Micrium OS Network +label: Platform - Micrium OS Network description: > MicriumOS Network example. diff --git a/app/mcu_example/micriumos_webmic/micriumos_webmic.slcp b/app/mcu_example/micriumos_webmic/micriumos_webmic.slcp index 6d9c4691972..95ac4181945 100644 --- a/app/mcu_example/micriumos_webmic/micriumos_webmic.slcp +++ b/app/mcu_example/micriumos_webmic/micriumos_webmic.slcp @@ -1,7 +1,7 @@ project_name: micriumos_webmic package: mcu quality: production -label: MCU Example - Micrium OS Webmic +label: Platform - Micrium OS Webmic description: > Example usage of microphones and MicriumOS HTTP server diff --git a/app/mcu_example/si72xx_wheeldemo/si72xx_wheeldemo.slcp b/app/mcu_example/si72xx_wheeldemo/si72xx_wheeldemo.slcp index 318b09a293e..d46a43acdfa 100644 --- a/app/mcu_example/si72xx_wheeldemo/si72xx_wheeldemo.slcp +++ b/app/mcu_example/si72xx_wheeldemo/si72xx_wheeldemo.slcp @@ -1,7 +1,7 @@ project_name: si72xx_wheeldemo package: mcu quality: production -label: MCU Example - Si72xx Wheeldemo +label: Platform - Si72xx Wheeldemo description: Hall effect demo code for the Si72xx-WD-Kit using a Silicon Labs SLSTK3400A-EFM32HG Starter Kit. diff --git a/app/wisun/component/app_core/config/sl_wisun_app_core_util_config.h b/app/wisun/component/app_core/config/sl_wisun_app_core_util_config.h index d15ea172756..9aa92062a53 100644 --- a/app/wisun/component/app_core/config/sl_wisun_app_core_util_config.h +++ b/app/wisun/component/app_core/config/sl_wisun_app_core_util_config.h @@ -90,8 +90,8 @@ // Wi-SUN Application thread setup // Recommended Application thread stack size -// Default: 120 word -#define APP_MAIN_STACK_SIZE_WORD 120 +// Default: 256 word +#define APP_MAIN_STACK_SIZE_WORD 256 // Wi-SUN Application thread setup // <<< end of configuration section >>> 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 3cd8888089c..fdaa6365bf3 100644 --- a/app/wisun/component/app_core/sl_wisun_app_core.c +++ b/app/wisun/component/app_core/sl_wisun_app_core.c @@ -75,6 +75,7 @@ typedef struct app_setting_wisun{ char network_name[SL_WISUN_NETWORK_NAME_SIZE + 1]; uint8_t network_size; int8_t tx_power; + bool is_default_phy; sl_wisun_phy_config_t phy; } app_setting_wisun_t; #endif @@ -165,6 +166,7 @@ static const app_setting_wisun_t _app_default_settings = { #else .tx_power = 20U, #endif + .is_default_phy = true, #if defined(WISUN_CONFIG_DEFAULT_PHY_FAN10) .phy = { .type = WISUN_CONFIG_DEFAULT_PHY_FAN10, diff --git a/app/wisun/component/app_setting/sl_wisun_app_setting.c b/app/wisun/component/app_setting/sl_wisun_app_setting.c index 5aa948443d3..59f51833a71 100644 --- a/app/wisun/component/app_setting/sl_wisun_app_setting.c +++ b/app/wisun/component/app_setting/sl_wisun_app_setting.c @@ -143,6 +143,7 @@ static const app_setting_wisun_t wisun_app_settings_default = { #else .tx_power = 20U, #endif + .is_default_phy = true, #if defined(WISUN_CONFIG_DEFAULT_PHY_FAN10) .phy = { .type = WISUN_CONFIG_DEFAULT_PHY_FAN10, @@ -313,6 +314,7 @@ sl_status_t app_wisun_setting_set_phy(const sl_wisun_phy_config_t *const phy) } _app_wisun_mutex_acquire(); + _wisun_app_settings.is_default_phy = false; memcpy(&_wisun_app_settings.phy, phy, sizeof(sl_wisun_phy_config_t)); // Set notifiication @@ -392,17 +394,10 @@ sl_status_t app_wisun_setting_get_phy(sl_wisun_phy_config_t *const phy) sl_status_t app_wisun_setting_init_phy_cfg(void) { sl_status_t stat = SL_STATUS_OK; - static bool initialized = false; - if (initialized) { - return stat; - } - - // Full radio config: create a copy of already prepared phy config with default settings - memcpy(&_wisun_app_settings.phy, &wisun_app_settings_default.phy, sizeof(sl_wisun_phy_config_t)); - - if (stat == SL_STATUS_OK) { - initialized = true; + if (_wisun_app_settings.is_default_phy) { + // Full radio config: create a copy of already prepared phy config with default settings + memcpy(&_wisun_app_settings.phy, &wisun_app_settings_default.phy, sizeof(sl_wisun_phy_config_t)); } // Set notifiications diff --git a/app/wisun/component/app_setting/sl_wisun_app_setting.h b/app/wisun/component/app_setting/sl_wisun_app_setting.h index a53709d7f44..a7b7d31bac3 100644 --- a/app/wisun/component/app_setting/sl_wisun_app_setting.h +++ b/app/wisun/component/app_setting/sl_wisun_app_setting.h @@ -79,6 +79,8 @@ typedef struct { uint8_t network_size; /// TX Power int8_t tx_power; + /// default flag + bool is_default_phy; /// PHY settings sl_wisun_phy_config_t phy; }app_setting_wisun_t; diff --git a/app/wisun/component/ping/config/sl_wisun_ping_config.h b/app/wisun/component/ping/config/sl_wisun_ping_config.h index f30c72e2642..0b0f34cfbc0 100644 --- a/app/wisun/component/ping/config/sl_wisun_ping_config.h +++ b/app/wisun/component/ping/config/sl_wisun_ping_config.h @@ -50,8 +50,8 @@ #define SL_WISUN_PING_PACKET_SIZE 40U // Ping thread stack size in word -// Default: 120 -#define SL_WISUN_PING_STACK_SIZE_WORD 120U +// Default: 208 +#define SL_WISUN_PING_STACK_SIZE_WORD 208U // diff --git a/app/wisun/component/ping/sl_wisun_ping.c b/app/wisun/component/ping/sl_wisun_ping.c index 6cf711f148f..7fde34813a3 100644 --- a/app/wisun/component/ping/sl_wisun_ping.c +++ b/app/wisun/component/ping/sl_wisun_ping.c @@ -56,7 +56,7 @@ #define SL_WISUN_PING_STATUS_SEND_ERROR (1LU << 3LU) /// Ping interrupt requested mask -#define SL_WISUN_PING_STATUS_INTERRUPT_REQUESTED (1LU << 4LU) +#define SL_WISUN_PING_STATUS_ABORT_REQUESTED (1LU << 4LU) /// Ping transaction finished mask #define SL_WISUN_PING_STATUS_TRANSACTION_END (1LU << 5LU) @@ -292,12 +292,12 @@ sl_status_t sl_wisun_ping(const wisun_addr_t *const remote_addr, flags = osEventFlagsWait(_ping_evt, SL_WISUN_PING_STATUS_TRANSACTION_END - | SL_WISUN_PING_STATUS_INTERRUPT_REQUESTED, - osFlagsWaitAny, osWaitForever); + | SL_WISUN_PING_STATUS_ABORT_REQUESTED, + osFlagsWaitAny, SL_WISUN_PING_TIMEOUT_MS); - if (_is_ping_evt_error(flags) - || flags & SL_WISUN_PING_STATUS_INTERRUPT_REQUESTED) { - return SL_STATUS_FAIL; + if ((!_is_ping_evt_error(flags)) && + (flags & SL_WISUN_PING_STATUS_ABORT_REQUESTED)) { + return SL_STATUS_ABORT; } // Get count of queued messages @@ -385,7 +385,7 @@ sl_status_t sl_wisun_ping(const wisun_addr_t *const remote_addr, void sl_wisun_ping_stop(void) { - (void) osEventFlagsSet(_ping_evt, SL_WISUN_PING_STATUS_INTERRUPT_REQUESTED); + (void) osEventFlagsSet(_ping_evt, SL_WISUN_PING_STATUS_ABORT_REQUESTED); osThreadSuspend(_ping_thr_id); osMessageQueueReset(_ping_req_msg_queue); osMessageQueueReset(_ping_resp_msg_queue); @@ -431,9 +431,9 @@ static void _ping_task_fnc(void *args) status = osEventFlagsGet(_ping_evt); - if (_is_ping_evt_error(status) || status & SL_WISUN_PING_STATUS_INTERRUPT_REQUESTED) { + if (_is_ping_evt_error(status) || status & SL_WISUN_PING_STATUS_ABORT_REQUESTED) { osMessageQueueReset(_ping_req_msg_queue); - _prepare_and_push_failed_response(&resp, SL_WISUN_PING_STATUS_INTERRUPT_REQUESTED); + _prepare_and_push_failed_response(&resp, SL_WISUN_PING_STATUS_ABORT_REQUESTED); continue; } diff --git a/app/wisun/component/ping/sl_wisun_ping.h b/app/wisun/component/ping/sl_wisun_ping.h index 4e7ab8a6066..8e7c3c7dd7b 100644 --- a/app/wisun/component/ping/sl_wisun_ping.h +++ b/app/wisun/component/ping/sl_wisun_ping.h @@ -187,7 +187,7 @@ void sl_wisun_ping_response(sl_wisun_ping_info_t * const ping_response); * @param[in] packet_length ICMPv6 packet length including header * @param[in] stat_hnd Custom statistic handler function * @param[in] req_resp_sent_hnd Request/Response sent handler function - * @return sl_status_t SL_STATUS_OK on success, otherwise SL_STATUS_FAIL + * @return sl_status_t SL_STATUS_OK on success, otherwise SL_STATUS_FAIL or SL_STATUS_ABORT *****************************************************************************/ sl_status_t sl_wisun_ping(const wisun_addr_t *const remote_addr, const uint16_t packet_count, diff --git a/app/wisun/component/ping/sl_wisun_ping_cli.c b/app/wisun/component/ping/sl_wisun_ping_cli.c index fb08e624093..93856465aed 100644 --- a/app/wisun/component/ping/sl_wisun_ping_cli.c +++ b/app/wisun/component/ping/sl_wisun_ping_cli.c @@ -73,7 +73,7 @@ void app_ping(sl_cli_command_arg_t *arguments) if (sl_wisun_ping(&remote_addr, SL_WISUN_PING_PACKET_COUNT, SL_WISUN_PING_PACKET_SIZE, - NULL, NULL) == SL_STATUS_FAIL) { + NULL, NULL) != SL_STATUS_OK) { printf("[Failed: ping was not successful]\n"); } diff --git a/app/wisun/documentation/release-highlights.txt b/app/wisun/documentation/release-highlights.txt index 66bdf44151a..f4af529610e 100644 --- a/app/wisun/documentation/release-highlights.txt +++ b/app/wisun/documentation/release-highlights.txt @@ -1,4 +1,2 @@ -Wi-SUN SDK 1.5.0.0 -- EFR32FG25 launch support -- Enhancements to the Border Router RCP -- Other targeted improvements and bug fixes +Wi-SUN SDK 1.5.1.0 +- Targeted quality improvements and bug fixes diff --git a/app/wisun/documentation/slWi-SUN_docContent.xml b/app/wisun/documentation/slWi-SUN_docContent.xml index 1e1411dae85..3abc7ceee0c 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,77 +24,77 @@ - + 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 Silicon Labs Wi-SUN Linux border router or the EFR32 standalone border router demonstration. Covers the associated configuration and debugging tools. - + 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. - + Describes how to get started with Wi-SUN development using the Silicon Labs Wi-SUN software development kit (SDK) and Simplicity Studio 5 with a compatible wireless starter kit (WSTK). - + 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. @@ -102,7 +102,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. @@ -110,7 +110,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. @@ -118,7 +118,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. @@ -126,7 +126,7 @@ - + Describes how and when to use Simplicity Commander's Command-Line Interface. @@ -134,7 +134,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 1f1d20349f2..b4cde33b199 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.5.0.0 -prop.subLabel=Wi-SUN\\ 1.5.0.0 +version=1.5.1.0 +prop.subLabel=Wi-SUN\\ 1.5.1.0 # General properties are prepended with "prop." prop.file.templatesFile=wisun_production_templates.xml wisun_br_demos_templates.xml diff --git a/app/wisun/example/wisun_soc_coap_collector/wisun_soc_coap_collector.slcp b/app/wisun/example/wisun_soc_coap_collector/wisun_soc_coap_collector.slcp index 90e69c3adc3..d898a874f59 100644 --- a/app/wisun/example/wisun_soc_coap_collector/wisun_soc_coap_collector.slcp +++ b/app/wisun/example/wisun_soc_coap_collector/wisun_soc_coap_collector.slcp @@ -67,6 +67,12 @@ configuration: value: "eusartHwFlowControlNone" - name: "SL_IOSTREAM_EUSART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF" value: "1" + - name: "SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_usart] + - name: "SL_IOSTREAM_EUSART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_eusart] - name: "OS_CFG_APP_HOOKS_EN" value: "1" condition: [micriumos_kernel] @@ -102,10 +108,6 @@ configuration: #--------------------- SDK memory configuration ------------------------ - name: "SL_HEAP_SIZE" value: "0x13000" - - name: "SL_WISUN_PING_STACK_SIZE_WORD" - value: "120" - - name: "APP_MAIN_STACK_SIZE_WORD" - value: "256" readme: - path: ../../documentation/example/wisun_soc_coap_collector/readme.md diff --git a/app/wisun/example/wisun_soc_coap_meter/wisun_soc_coap_meter.slcp b/app/wisun/example/wisun_soc_coap_meter/wisun_soc_coap_meter.slcp index 17d34f7bbba..67f805c0468 100644 --- a/app/wisun/example/wisun_soc_coap_meter/wisun_soc_coap_meter.slcp +++ b/app/wisun/example/wisun_soc_coap_meter/wisun_soc_coap_meter.slcp @@ -66,6 +66,12 @@ configuration: value: "eusartHwFlowControlNone" - name: "SL_IOSTREAM_EUSART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF" value: "1" + - name: "SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_usart] + - name: "SL_IOSTREAM_EUSART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_eusart] - name: "OS_CFG_APP_HOOKS_EN" value: "1" condition: [micriumos_kernel] @@ -103,10 +109,6 @@ configuration: value: "0x14000" - name: "SL_WISUN_COAP_RESOURCE_HND_STACK_SIZE_WORD" value: "200" - - name: "SL_WISUN_PING_STACK_SIZE_WORD" - value: "120" - - name: "APP_MAIN_STACK_SIZE_WORD" - value: "256" readme: - path: ../../documentation/example/wisun_soc_coap_meter/readme.md diff --git a/app/wisun/example/wisun_soc_collector/wisun_soc_collector.slcp b/app/wisun/example/wisun_soc_collector/wisun_soc_collector.slcp index aa298cfd3fe..d2a6c96bf4f 100644 --- a/app/wisun/example/wisun_soc_collector/wisun_soc_collector.slcp +++ b/app/wisun/example/wisun_soc_collector/wisun_soc_collector.slcp @@ -64,6 +64,12 @@ configuration: value: "eusartHwFlowControlNone" - name: "SL_IOSTREAM_EUSART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF" value: "1" + - name: "SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_usart] + - name: "SL_IOSTREAM_EUSART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_eusart] - name: "OS_CFG_APP_HOOKS_EN" value: "1" condition: [micriumos_kernel] @@ -99,10 +105,6 @@ configuration: #--------------------- SDK memory configuration ------------------------ - name: "SL_HEAP_SIZE" value: "0x13000" - - name: "SL_WISUN_PING_STACK_SIZE_WORD" - value: "120" - - name: "APP_MAIN_STACK_SIZE_WORD" - value: "256" readme: - path: ../../documentation/example/wisun_soc_collector/readme.md diff --git a/app/wisun/example/wisun_soc_meter/wisun_soc_meter.slcp b/app/wisun/example/wisun_soc_meter/wisun_soc_meter.slcp index 22e12112567..9218930062a 100644 --- a/app/wisun/example/wisun_soc_meter/wisun_soc_meter.slcp +++ b/app/wisun/example/wisun_soc_meter/wisun_soc_meter.slcp @@ -66,6 +66,12 @@ configuration: value: "eusartHwFlowControlNone" - name: "SL_IOSTREAM_EUSART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF" value: "1" + - name: "SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_usart] + - name: "SL_IOSTREAM_EUSART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_eusart] - name: "OS_CFG_APP_HOOKS_EN" value: "1" condition: [micriumos_kernel] @@ -101,10 +107,6 @@ configuration: #--------------------- SDK memory configuration ------------------------ - name: "SL_HEAP_SIZE" value: "0x13000" - - name: "SL_WISUN_PING_STACK_SIZE_WORD" - value: "120" - - name: "APP_MAIN_STACK_SIZE_WORD" - value: "256" readme: - path: ../../documentation/example/wisun_soc_meter/readme.md diff --git a/app/wisun/example/wisun_soc_network_measurement/wisun_soc_network_measurement.slcp b/app/wisun/example/wisun_soc_network_measurement/wisun_soc_network_measurement.slcp index 76bb17744ad..72e278d9afa 100644 --- a/app/wisun/example/wisun_soc_network_measurement/wisun_soc_network_measurement.slcp +++ b/app/wisun/example/wisun_soc_network_measurement/wisun_soc_network_measurement.slcp @@ -71,6 +71,12 @@ configuration: value: "eusartHwFlowControlNone" - name: "SL_IOSTREAM_EUSART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF" value: "1" + - name: "SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_usart] + - name: "SL_IOSTREAM_EUSART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_eusart] - name: "OS_CFG_APP_HOOKS_EN" value: "1" condition: [micriumos_kernel] @@ -115,21 +121,19 @@ configuration: #--------------------- SDK memory configuration ------------------------ - name: "SL_HEAP_SIZE" - value: "0x16000" + value: "0x17000" - name: "SL_WISUN_COAP_RESOURCE_HND_SOCK_BUFF_SIZE" value: "2048" - name: "SL_WISUN_COAP_RESOURCE_HND_STACK_SIZE_WORD" - value: "288" + value: "512" - name: "SL_GUI_STACK_SIZE_WORD" - value: "236" + value: "256" - name: "SL_DISPLAY_STACK_SIZE_WORD" - value: "264" + value: "384" - name: "SL_WISUN_PING_STACK_SIZE_WORD" - value: "120" + value: "512" - name: "SL_IPERF_STACK_SIZE_WORD" - value: "310" - - name: "APP_MAIN_STACK_SIZE_WORD" - value: "200" + value: "512" readme: - path: ../../documentation/example/wisun_soc_network_measurement/readme.md diff --git a/app/wisun/example/wisun_soc_ping/wisun_soc_ping.slcp b/app/wisun/example/wisun_soc_ping/wisun_soc_ping.slcp index 5677229deea..14aa07f0906 100644 --- a/app/wisun/example/wisun_soc_ping/wisun_soc_ping.slcp +++ b/app/wisun/example/wisun_soc_ping/wisun_soc_ping.slcp @@ -65,6 +65,12 @@ configuration: value: "eusartHwFlowControlNone" - name: "SL_IOSTREAM_EUSART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF" value: "1" + - name: "SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_usart] + - name: "SL_IOSTREAM_EUSART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_eusart] - name: "OS_CFG_APP_HOOKS_EN" value: "1" condition: [micriumos_kernel] @@ -100,8 +106,6 @@ configuration: #--------------------- SDK memory configuration ------------------------ - name: "SL_HEAP_SIZE" value: "0x13000" - - name: "APP_MAIN_STACK_SIZE_WORD" - value: "256" readme: - path: ../../documentation/example/wisun_soc_ping/readme.md diff --git a/app/wisun/example/wisun_soc_tcp_client/wisun_soc_tcp_client.slcp b/app/wisun/example/wisun_soc_tcp_client/wisun_soc_tcp_client.slcp index 39c5d2150c9..e3f46db76b1 100644 --- a/app/wisun/example/wisun_soc_tcp_client/wisun_soc_tcp_client.slcp +++ b/app/wisun/example/wisun_soc_tcp_client/wisun_soc_tcp_client.slcp @@ -67,6 +67,12 @@ configuration: value: "eusartHwFlowControlNone" - name: "SL_IOSTREAM_EUSART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF" value: "1" + - name: "SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_usart] + - name: "SL_IOSTREAM_EUSART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_eusart] - name: "OS_CFG_APP_HOOKS_EN" value: "1" condition: [micriumos_kernel] @@ -102,8 +108,6 @@ configuration: #--------------------- SDK memory configuration ------------------------ - name: "SL_HEAP_SIZE" value: "0x13000" - - name: "APP_MAIN_STACK_SIZE_WORD" - value: "256" readme: - path: ../../documentation/example/wisun_soc_tcp_client/readme.md diff --git a/app/wisun/example/wisun_soc_tcp_server/wisun_soc_tcp_server.slcp b/app/wisun/example/wisun_soc_tcp_server/wisun_soc_tcp_server.slcp index 7641a5ca05d..1208a894b05 100644 --- a/app/wisun/example/wisun_soc_tcp_server/wisun_soc_tcp_server.slcp +++ b/app/wisun/example/wisun_soc_tcp_server/wisun_soc_tcp_server.slcp @@ -67,6 +67,12 @@ configuration: value: "eusartHwFlowControlNone" - name: "SL_IOSTREAM_EUSART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF" value: "1" + - name: "SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_usart] + - name: "SL_IOSTREAM_EUSART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_eusart] - name: "OS_CFG_APP_HOOKS_EN" value: "1" condition: [micriumos_kernel] @@ -102,8 +108,6 @@ configuration: #--------------------- SDK memory configuration ------------------------ - name: "SL_HEAP_SIZE" value: "0x13000" - - name: "APP_MAIN_STACK_SIZE_WORD" - value: "256" readme: - path: ../../documentation/example/wisun_soc_tcp_server/readme.md diff --git a/app/wisun/example/wisun_soc_udp_client/wisun_soc_udp_client.slcp b/app/wisun/example/wisun_soc_udp_client/wisun_soc_udp_client.slcp index 10dc28588fb..110c62983a9 100644 --- a/app/wisun/example/wisun_soc_udp_client/wisun_soc_udp_client.slcp +++ b/app/wisun/example/wisun_soc_udp_client/wisun_soc_udp_client.slcp @@ -67,6 +67,12 @@ configuration: value: "eusartHwFlowControlNone" - name: "SL_IOSTREAM_EUSART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF" value: "1" + - name: "SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_usart] + - name: "SL_IOSTREAM_EUSART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_eusart] - name: "OS_CFG_APP_HOOKS_EN" value: "1" condition: [micriumos_kernel] @@ -102,8 +108,6 @@ configuration: #--------------------- SDK memory configuration ------------------------ - name: "SL_HEAP_SIZE" value: "0x13000" - - name: "APP_MAIN_STACK_SIZE_WORD" - value: "256" readme: - path: ../../documentation/example/wisun_soc_udp_client/readme.md diff --git a/app/wisun/example/wisun_soc_udp_server/wisun_soc_udp_server.slcp b/app/wisun/example/wisun_soc_udp_server/wisun_soc_udp_server.slcp index f623cbadc88..df71b47a51c 100644 --- a/app/wisun/example/wisun_soc_udp_server/wisun_soc_udp_server.slcp +++ b/app/wisun/example/wisun_soc_udp_server/wisun_soc_udp_server.slcp @@ -67,6 +67,12 @@ configuration: value: "eusartHwFlowControlNone" - name: "SL_IOSTREAM_EUSART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF" value: "1" + - name: "SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_usart] + - name: "SL_IOSTREAM_EUSART_VCOM_RX_BUFFER_SIZE" + value: "128" + condition: [iostream_eusart] - name: "OS_CFG_APP_HOOKS_EN" value: "1" condition: [micriumos_kernel] @@ -101,9 +107,7 @@ configuration: #--------------------- SDK memory configuration ------------------------ - name: "SL_HEAP_SIZE" - value: "0x13000" - - name: "APP_MAIN_STACK_SIZE_WORD" - value: "256" + value: "0x13000" readme: - path: ../../documentation/example/wisun_soc_udp_server/readme.md diff --git a/app/wisun/wisun_br_demos_demos.xml b/app/wisun/wisun_br_demos_demos.xml index f6a4ba7e1ca..ccc279ab6f4 100644 --- a/app/wisun/wisun_br_demos_demos.xml +++ b/app/wisun/wisun_br_demos_demos.xml @@ -1,131 +1,11 @@ - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - - - The Wi-SUN RCP (Radio CoProcessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. - - - - - - - - This demo is an out-of-the-box Wi-SUN border router application. It provides a command-line interface to control basic configurations. - + @@ -135,7 +15,7 @@ - + @@ -145,7 +25,7 @@ - + @@ -155,7 +35,7 @@ - + @@ -165,7 +45,7 @@ - + @@ -175,7 +55,7 @@ - + @@ -185,7 +65,7 @@ - + @@ -195,7 +75,7 @@ - + @@ -205,7 +85,7 @@ - + @@ -215,7 +95,7 @@ - + @@ -225,7 +105,7 @@ - + @@ -235,7 +115,7 @@ - + diff --git a/app/wisun/wisun_production_demos.xml b/app/wisun/wisun_production_demos.xml index eab6c99e35f..257aaeef6a2 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,17 +155,137 @@ - + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + + + The Wi-SUN RCP (radio coprocessor) application provides a radio interface to a Linux host. It is meant to be paired with wsbrd (Wi-SUN Network implementation for Linux) to run as a Linux border router device. + + + + + + + + The Wi-SUN Network Measurement application provides a performance measurement solution based on the ping mechanism. - + @@ -175,7 +295,7 @@ - + @@ -185,7 +305,7 @@ - + @@ -195,7 +315,7 @@ - + @@ -205,7 +325,7 @@ - + @@ -215,7 +335,7 @@ - + @@ -225,7 +345,7 @@ - + @@ -235,7 +355,7 @@ - + @@ -245,7 +365,7 @@ - + @@ -255,7 +375,7 @@ - + @@ -265,7 +385,7 @@ - + @@ -275,7 +395,7 @@ - + @@ -285,7 +405,7 @@ - + @@ -295,7 +415,7 @@ - + @@ -305,7 +425,7 @@ - + @@ -315,7 +435,7 @@ - + diff --git a/gecko_sdk.slcs b/gecko_sdk.slcs index 95e3e54d176..9acd8566e93 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.2.1" +sdk_version: "4.2.2" specification_version: 10 component_path: - path: "app/amazon/component" @@ -85,6 +85,7 @@ component_path: - path: "util/third_party/unity_test_framework/component" - path: "util/third_party/lwip/component" - path: "util/third_party/find_my/component" + - path: "util/third_party/trusted-firmware-m/component" toolchain_mapping: "platform/common/toolchain/toolchains.slct" documentation: - docset: gecko-platform @@ -110,8 +111,8 @@ upgrade_manifest: - path: "platform/upgrade.slcu" - path: "platform/service/component/upgrade.slcu" - path: "protocol/zigbee/component/upgrade.slcu" - - path: "app/btmesh/upgrade.slcu" - path: "platform/security/component/upgrade.slcu" post_build_profile: - path: "platform/common/postbuild_profile/" - - path: "platform/security/postbuild_profile/" + - path: "app/bluetooth/postbuild_profile" + - path: "extension/homekit/app/postbuild_profile/" diff --git a/hardware/board/component/brd4109a.slcc b/hardware/board/component/brd4109a.slcc index f41358d0760..f69eaf6b408 100644 --- a/hardware/board/component/brd4109a.slcc +++ b/hardware/board/component/brd4109a.slcc @@ -34,7 +34,7 @@ instance: - sensor - id: ls013b7dh03 - - id: memlcd_eusart + - id: memlcd_usart - id: simple_led instance: - led0 diff --git a/hardware/board/component/brd4115a.slcc b/hardware/board/component/brd4115a.slcc new file mode 100644 index 00000000000..b0d3558b74b --- /dev/null +++ b/hardware/board/component/brd4115a.slcc @@ -0,0 +1,62 @@ +!!omap +- id: brd4115a +- label: BRD4115A +- package: platform +- description: Board support for BRD4115A. +- category: Platform|Board|Radio Board +- quality: production +- requires: + - name: efr32bg24b410f1536ij42 + - name: brd4115a_config + - name: hardware_board_mainboard +- provides: + - name: brd4115a + - name: hardware_board + - name: hardware_board_rb + - name: hardware_board_from_stk + - name: hardware_board_has_vcom + - name: hardware_board_has_spiflash + - name: hardware_board_has_hfxo + - name: hardware_board_has_lfxo + - name: hardware_board_supports_rf_band_2400 + - name: hardware_board_supports_1_rf_band + - name: hardware_board_default_rf_band + - name: hardware_board_default_rf_band_2400 +- recommends: + - id: brd4002a + - id: iostream_eusart + instance: + - vcom + - id: bootloader_uart_driver + - id: simple_led + instance: + - led0 + - led1 + - id: simple_button + instance: + - btn0 + - btn1 + - id: mx25_flash_shutdown_eusart + - 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: '"BRD4115A"' + - name: SL_BOARD_REV + value: '"A00"' +- tag: + - board:pn:BRD4115 + - board:variant:A + - board:revision:A00 + - board:device:efr32bg24b410f1536ij42 + - hardware:has:vcom + - hardware:has:pti + - hardware:has:led:2 + - hardware:has:button:2 + - hardware:has:memory:spi:mx25r8035f + - hardware:has:exp_header:spi + - hardware:has:exp_header:uart + - hardware:shares:button:led diff --git a/hardware/board/component/brd4194a.slcc b/hardware/board/component/brd4194a.slcc index f5849f29659..aae394b8dba 100644 --- a/hardware/board/component/brd4194a.slcc +++ b/hardware/board/component/brd4194a.slcc @@ -34,7 +34,7 @@ instance: - sensor - id: ls013b7dh03 - - id: memlcd_eusart + - id: memlcd_usart - id: simple_led instance: - led0 diff --git a/hardware/board/component/brd4273a.slcc b/hardware/board/component/brd4273a.slcc index 8a5505a5ad1..df080e2f1eb 100644 --- a/hardware/board/component/brd4273a.slcc +++ b/hardware/board/component/brd4273a.slcc @@ -14,6 +14,7 @@ - name: hardware_board - name: hardware_board_rb - name: hardware_board_from_stk + - name: hardware_board_from_fg25-pk6013a - name: hardware_board_from_fg25-rb4273a - name: hardware_board_has_vcom - name: hardware_board_has_spiflash @@ -52,11 +53,11 @@ - name: SL_BOARD_NAME value: '"BRD4273A"' - name: SL_BOARD_REV - value: '"A08"' + value: '"A10"' - tag: - board:pn:BRD4273 - board:variant:A - - board:revision:A08 + - board:revision:A10 - board:device:efr32fg25b222f1920im56 - hardware:has:vcom - hardware:has:pti diff --git a/hardware/board/component/brd4274a.slcc b/hardware/board/component/brd4274a.slcc index d1c76f14137..52b1d08712a 100644 --- a/hardware/board/component/brd4274a.slcc +++ b/hardware/board/component/brd4274a.slcc @@ -14,6 +14,7 @@ - name: hardware_board - name: hardware_board_rb - name: hardware_board_from_stk + - name: hardware_board_from_fg25-pk6014a - name: hardware_board_from_fg25-rb4274a - name: hardware_board_has_vcom - name: hardware_board_has_spiflash @@ -52,11 +53,11 @@ - name: SL_BOARD_NAME value: '"BRD4274A"' - name: SL_BOARD_REV - value: '"A04"' + value: '"A06"' - tag: - board:pn:BRD4274 - board:variant:A - - board:revision:A04 + - board:revision:A06 - board:device:efr32fg25b222f1920im56 - hardware:has:vcom - hardware:has:pti diff --git a/hardware/board/component/brd4332a.slcc b/hardware/board/component/brd4332a.slcc new file mode 100644 index 00000000000..847c3ab84e7 --- /dev/null +++ b/hardware/board/component/brd4332a.slcc @@ -0,0 +1,60 @@ +!!omap +- id: brd4332a +- label: BRD4332A +- package: platform +- description: Board support for BRD4332A. +- category: Platform|Board|Radio Board +- quality: production +- requires: + - name: efr32bg21b010f1024im32 + - name: brd4332a_config + - name: hardware_board_mainboard +- provides: + - name: brd4332a + - name: hardware_board + - name: hardware_board_rb + - name: hardware_board_from_stk + - name: hardware_board_from_kg100s-pk6130a + - name: hardware_board_from_kg100s-rb4332a + - name: hardware_board_has_vcom + - name: hardware_board_supports_rf_band_2400 + - name: hardware_board_supports_rf_band_868 + - name: hardware_board_supports_rf_band_915 + - name: hardware_board_supports_rf_band_924 + - name: hardware_board_supports_4_rf_bands + - name: hardware_board_default_rf_band + - name: hardware_board_default_rf_band_868 +- recommends: + - id: brd4001a + - id: iostream_usart + instance: + - vcom + - id: bootloader_uart_driver + - id: simple_led + instance: + - led0 + - led1 + - id: simple_button + instance: + - btn0 + - btn1 + - id: bootloader_spi_peripheral_usart_driver +- template_contribution: + - name: board_default_init + value: sl_board_disable_vcom() +- define: + - name: SL_BOARD_NAME + value: '"BRD4332A"' + - name: SL_BOARD_REV + value: '"A03"' +- tag: + - board:pn:BRD4332 + - board:variant:A + - board:revision:A03 + - board:device:efr32bg21b010f1024im32 + - hardware:has:vcom + - hardware:has:pti + - hardware:has:led:2 + - hardware:has:button:2 + - hardware:has:exp_header:i2c + - hardware:shares:button:led diff --git a/hardware/board/component/fg25-rb4273a.slcc b/hardware/board/component/fg25-rb4273a.slcc index 39f3fb5da7d..c3a44d0358c 100644 --- a/hardware/board/component/fg25-rb4273a.slcc +++ b/hardware/board/component/fg25-rb4273a.slcc @@ -14,9 +14,9 @@ - name: SL_KIT_NAME value: '"FG25-RB4273A"' - name: SL_KIT_REV - value: '"A03"' + value: '"A04"' - tag: - kit:opn:FG25-RB4273A - kit:pn:RB4273 - kit:variant:A - - kit:revision:A03 + - kit:revision:A04 diff --git a/hardware/board/component/fg25-rb4274a.slcc b/hardware/board/component/fg25-rb4274a.slcc index a6f0c9ba590..236e2c282fb 100644 --- a/hardware/board/component/fg25-rb4274a.slcc +++ b/hardware/board/component/fg25-rb4274a.slcc @@ -14,9 +14,9 @@ - name: SL_KIT_NAME value: '"FG25-RB4274A"' - name: SL_KIT_REV - value: '"A02"' + value: '"A03"' - tag: - kit:opn:FG25-RB4274A - kit:pn:RB4274 - kit:variant:A - - kit:revision:A02 + - kit:revision:A03 diff --git a/hardware/board/component/kg100s-rb4332a.slcc b/hardware/board/component/kg100s-rb4332a.slcc new file mode 100644 index 00000000000..d1ea9087ec0 --- /dev/null +++ b/hardware/board/component/kg100s-rb4332a.slcc @@ -0,0 +1,22 @@ +!!omap +- id: kg100s_rb4332a +- label: KG100S-RB4332A +- package: platform +- description: Kit BSP support for the KG100S Radio Board for Amazon Sidewalk. +- category: Platform|Board|Kit|Radio Board +- quality: production +- requires: + - name: hardware_board_from_kg100s-rb4332a +- provides: + - name: hardware_kit + - name: hardware_kit_rb +- define: + - name: SL_KIT_NAME + value: '"KG100S-RB4332A"' + - name: SL_KIT_REV + value: '"A01"' +- tag: + - kit:opn:KG100S-RB4332A + - kit:pn:RB4332 + - kit:variant:A + - kit:revision:A01 diff --git a/hardware/board/config/brd4115a_brd4001a/btl_euart_driver_cfg.h b/hardware/board/config/brd4115a_brd4001a/btl_euart_driver_cfg.h new file mode 100644 index 00000000000..62f13513f4b --- /dev/null +++ b/hardware/board/config/brd4115a_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 PA05 +#define SL_SERIAL_EUART_TX_PORT gpioPortA +#define SL_SERIAL_EUART_TX_PIN 5 + +// EUSART0 RX on PA06 +#define SL_SERIAL_EUART_RX_PORT gpioPortA +#define SL_SERIAL_EUART_RX_PIN 6 + +// EUSART0 CTS on PB00 +#define SL_SERIAL_EUART_CTS_PORT gpioPortB +#define SL_SERIAL_EUART_CTS_PIN 0 + +// EUSART0 RTS on PA07 +#define SL_SERIAL_EUART_RTS_PORT gpioPortA +#define SL_SERIAL_EUART_RTS_PIN 7 + +// [EUSART_SL_SERIAL_EUART]$ + +// SL_VCOM_ENABLE + +// $[GPIO_SL_VCOM_ENABLE] +#define SL_VCOM_ENABLE_PORT gpioPortD +#define SL_VCOM_ENABLE_PIN 5 + +// [GPIO_SL_VCOM_ENABLE]$ + +// <<< sl:end pin_tool >>> + +#endif // BTL_EUART_DRIVER_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/btl_ezsp_gpio_activation_cfg.h b/hardware/board/config/brd4115a_brd4001a/btl_ezsp_gpio_activation_cfg.h new file mode 100644 index 00000000000..d72375379db --- /dev/null +++ b/hardware/board/config/brd4115a_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 gpioPortB +#define SL_EZSPSPI_HOST_INT_PIN 3 + +// [GPIO_SL_EZSPSPI_HOST_INT]$ + +// SL_EZSPSPI_WAKE_INT +// $[GPIO_SL_EZSPSPI_WAKE_INT] +#define SL_EZSPSPI_WAKE_INT_PORT gpioPortB +#define SL_EZSPSPI_WAKE_INT_PIN 1 + +// [GPIO_SL_EZSPSPI_WAKE_INT]$ + +// <<< sl:end pin_tool >>> + +#endif // BTL_EZSP_GPIO_ACTIVATION_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/btl_gpio_activation_cfg.h b/hardware/board/config/brd4115a_brd4001a/btl_gpio_activation_cfg.h new file mode 100644 index 00000000000..f73756e2d51 --- /dev/null +++ b/hardware/board/config/brd4115a_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/brd4115a_brd4001a/btl_spi_controller_eusart_driver_cfg.h b/hardware/board/config/brd4115a_brd4001a/btl_spi_controller_eusart_driver_cfg.h new file mode 100644 index 00000000000..6d7d202de9b --- /dev/null +++ b/hardware/board/config/brd4115a_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 PC06 +#define SL_EUSART_EXTFLASH_CS_PORT gpioPortC +#define SL_EUSART_EXTFLASH_CS_PIN 6 + +// [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/brd4115a_brd4001a/btl_spi_controller_usart_driver_cfg.h b/hardware/board/config/brd4115a_brd4001a/btl_spi_controller_usart_driver_cfg.h new file mode 100644 index 00000000000..be65b4237aa --- /dev/null +++ b/hardware/board/config/brd4115a_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 PC06 +#define SL_USART_EXTFLASH_CS_PORT gpioPortC +#define SL_USART_EXTFLASH_CS_PIN 6 + +// [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/brd4115a_brd4001a/btl_spi_peripheral_eusart_driver_cfg.h b/hardware/board/config/brd4115a_brd4001a/btl_spi_peripheral_eusart_driver_cfg.h new file mode 100644 index 00000000000..9c207763bbc --- /dev/null +++ b/hardware/board/config/brd4115a_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 PC09 +#define SL_EUSART_SPINCP_CS_PORT gpioPortC +#define SL_EUSART_SPINCP_CS_PIN 9 + +// 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/brd4115a_brd4001a/btl_spi_peripheral_usart_driver_cfg.h b/hardware/board/config/brd4115a_brd4001a/btl_spi_peripheral_usart_driver_cfg.h new file mode 100644 index 00000000000..8a359a0135f --- /dev/null +++ b/hardware/board/config/brd4115a_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 PC09 +#define SL_USART_SPINCP_CS_PORT gpioPortC +#define SL_USART_SPINCP_CS_PIN 9 + +// 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/brd4115a_brd4001a/btl_uart_driver_cfg.h b/hardware/board/config/brd4115a_brd4001a/btl_uart_driver_cfg.h new file mode 100644 index 00000000000..ea41726c0d2 --- /dev/null +++ b/hardware/board/config/brd4115a_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 PA05 +#define SL_SERIAL_UART_TX_PORT gpioPortA +#define SL_SERIAL_UART_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_SERIAL_UART_RX_PORT gpioPortA +#define SL_SERIAL_UART_RX_PIN 6 + +// USART0 CTS on PB00 +#define SL_SERIAL_UART_CTS_PORT gpioPortB +#define SL_SERIAL_UART_CTS_PIN 0 + +// USART0 RTS on PA07 +#define SL_SERIAL_UART_RTS_PORT gpioPortA +#define SL_SERIAL_UART_RTS_PIN 7 + +// [USART_SL_SERIAL_UART]$ + +// SL_VCOM_ENABLE + +// $[GPIO_SL_VCOM_ENABLE] +#define SL_VCOM_ENABLE_PORT gpioPortD +#define SL_VCOM_ENABLE_PIN 5 + +// [GPIO_SL_VCOM_ENABLE]$ + +// <<< sl:end pin_tool >>> + +#endif // BTL_UART_DRIVER_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/iot_flash_cfg_exp.h b/hardware/board/config/brd4115a_brd4001a/iot_flash_cfg_exp.h new file mode 100644 index 00000000000..a47b10d870d --- /dev/null +++ b/hardware/board/config/brd4115a_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 PC09 +#define IOT_FLASH_CFG_EXP_SPI_CS_PORT gpioPortC +#define IOT_FLASH_CFG_EXP_SPI_CS_PIN 9 + +// [USART_IOT_FLASH_CFG_EXP_SPI]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_FLASH_CFG_EXP_H_ */ diff --git a/hardware/board/config/brd4115a_brd4001a/iot_flash_cfg_msc.h b/hardware/board/config/brd4115a_brd4001a/iot_flash_cfg_msc.h new file mode 100644 index 00000000000..c2af14bc7d2 --- /dev/null +++ b/hardware/board/config/brd4115a_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/brd4115a_brd4001a/iot_flash_cfg_spiflash.h b/hardware/board/config/brd4115a_brd4001a/iot_flash_cfg_spiflash.h new file mode 100644 index 00000000000..9018f802796 --- /dev/null +++ b/hardware/board/config/brd4115a_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 PC06 +#define IOT_FLASH_CFG_SPIFLASH_SPI_CS_PORT gpioPortC +#define IOT_FLASH_CFG_SPIFLASH_SPI_CS_PIN 6 + +// [USART_IOT_FLASH_CFG_SPIFLASH_SPI]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_FLASH_CFG_SPIFLASH_H_ */ diff --git a/hardware/board/config/brd4115a_brd4001a/iot_pwm_cfg_exp.h b/hardware/board/config/brd4115a_brd4001a/iot_pwm_cfg_exp.h new file mode 100644 index 00000000000..bb9a80edcec --- /dev/null +++ b/hardware/board/config/brd4115a_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 PB03 +#define IOT_PWM_CFG_EXP_CC0_PORT gpioPortB +#define IOT_PWM_CFG_EXP_CC0_PIN 3 + + + +// [TIMER_IOT_PWM_CFG_EXP]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_PWM_CFG_EXP_H_ */ diff --git a/hardware/board/config/brd4115a_brd4001a/iot_pwm_cfg_led0.h b/hardware/board/config/brd4115a_brd4001a/iot_pwm_cfg_led0.h new file mode 100644 index 00000000000..1a9d6001a00 --- /dev/null +++ b/hardware/board/config/brd4115a_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 PB01 +#define IOT_PWM_CFG_LED0_CC0_PORT gpioPortB +#define IOT_PWM_CFG_LED0_CC0_PIN 1 + + + +// [TIMER_IOT_PWM_CFG_LED0]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_PWM_CFG_LED0_H_ */ diff --git a/hardware/board/config/brd4115a_brd4001a/iot_pwm_cfg_led1.h b/hardware/board/config/brd4115a_brd4001a/iot_pwm_cfg_led1.h new file mode 100644 index 00000000000..96ed22c7121 --- /dev/null +++ b/hardware/board/config/brd4115a_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 PB03 +#define IOT_PWM_CFG_LED1_CC0_PORT gpioPortB +#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/brd4115a_brd4001a/iot_spi_cfg_exp.h b/hardware/board/config/brd4115a_brd4001a/iot_spi_cfg_exp.h new file mode 100644 index 00000000000..2470fa38c40 --- /dev/null +++ b/hardware/board/config/brd4115a_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 PC09 +#define IOT_SPI_CFG_EXP_CS_PORT gpioPortC +#define IOT_SPI_CFG_EXP_CS_PIN 9 + +// [USART_IOT_SPI_CFG_EXP]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_SPI_CFG_EXP_H_ */ diff --git a/hardware/board/config/brd4115a_brd4001a/iot_spi_cfg_loopback.h b/hardware/board/config/brd4115a_brd4001a/iot_spi_cfg_loopback.h new file mode 100644 index 00000000000..12baf1c7c7d --- /dev/null +++ b/hardware/board/config/brd4115a_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 PC09 +#define IOT_SPI_CFG_LOOPBACK_CS_PORT gpioPortC +#define IOT_SPI_CFG_LOOPBACK_CS_PIN 9 + +// [USART_IOT_SPI_CFG_LOOPBACK]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_SPI_CFG_LOOPBACK_H_ */ diff --git a/hardware/board/config/brd4115a_brd4001a/iot_uart_cfg_exp.h b/hardware/board/config/brd4115a_brd4001a/iot_uart_cfg_exp.h new file mode 100644 index 00000000000..02f62b7d87d --- /dev/null +++ b/hardware/board/config/brd4115a_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 PA05 +#define IOT_UART_CFG_EXP_TX_PORT gpioPortA +#define IOT_UART_CFG_EXP_TX_PIN 5 + +// USART0 RX on PA06 +#define IOT_UART_CFG_EXP_RX_PORT gpioPortA +#define IOT_UART_CFG_EXP_RX_PIN 6 + + + + + +// [USART_IOT_UART_CFG_EXP]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_UART_CFG_EXP_H_ */ diff --git a/hardware/board/config/brd4115a_brd4001a/iot_uart_cfg_loopback.h b/hardware/board/config/brd4115a_brd4001a/iot_uart_cfg_loopback.h new file mode 100644 index 00000000000..c7db3a55802 --- /dev/null +++ b/hardware/board/config/brd4115a_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 PA05 +#define IOT_UART_CFG_LOOPBACK_TX_PORT gpioPortA +#define IOT_UART_CFG_LOOPBACK_TX_PIN 5 + +// USART0 RX on PA06 +#define IOT_UART_CFG_LOOPBACK_RX_PORT gpioPortA +#define IOT_UART_CFG_LOOPBACK_RX_PIN 6 + + + +// USART0 RTS on PA07 +#define IOT_UART_CFG_LOOPBACK_RTS_PORT gpioPortA +#define IOT_UART_CFG_LOOPBACK_RTS_PIN 7 + +// USART0 CTS on PB00 +#define IOT_UART_CFG_LOOPBACK_CTS_PORT gpioPortB +#define IOT_UART_CFG_LOOPBACK_CTS_PIN 0 + +// [USART_IOT_UART_CFG_LOOPBACK]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_UART_CFG_LOOPBACK_H_ */ diff --git a/hardware/board/config/brd4115a_brd4001a/iot_uart_cfg_vcom.h b/hardware/board/config/brd4115a_brd4001a/iot_uart_cfg_vcom.h new file mode 100644 index 00000000000..ff476d8ccef --- /dev/null +++ b/hardware/board/config/brd4115a_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 PA05 +#define IOT_UART_CFG_VCOM_TX_PORT gpioPortA +#define IOT_UART_CFG_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define IOT_UART_CFG_VCOM_RX_PORT gpioPortA +#define IOT_UART_CFG_VCOM_RX_PIN 6 + + + +// USART0 RTS on PA07 +#define IOT_UART_CFG_VCOM_RTS_PORT gpioPortA +#define IOT_UART_CFG_VCOM_RTS_PIN 7 + +// USART0 CTS on PB00 +#define IOT_UART_CFG_VCOM_CTS_PORT gpioPortB +#define IOT_UART_CFG_VCOM_CTS_PIN 0 + +// [USART_IOT_UART_CFG_VCOM]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_UART_CFG_VCOM_H_ */ diff --git a/hardware/board/config/brd4115a_brd4001a/legacy_ncp_spi_config.h b/hardware/board/config/brd4115a_brd4001a/legacy_ncp_spi_config.h new file mode 100644 index 00000000000..3ee852156eb --- /dev/null +++ b/hardware/board/config/brd4115a_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 PC09 +#define LEGACY_NCP_SPI_CS_PORT gpioPortC +#define LEGACY_NCP_SPI_CS_PIN 9 + +// [USART_LEGACY_NCP_SPI]$ + +// LEGACY_NCP_SPI_HOST_INT +// $[GPIO_LEGACY_NCP_SPI_HOST_INT] +#define LEGACY_NCP_SPI_HOST_INT_PORT gpioPortB +#define LEGACY_NCP_SPI_HOST_INT_PIN 3 + +// [GPIO_LEGACY_NCP_SPI_HOST_INT]$ + +// LEGACY_NCP_SPI_WAKE_INT +// $[GPIO_LEGACY_NCP_SPI_WAKE_INT] +#define LEGACY_NCP_SPI_WAKE_INT_PORT gpioPortB +#define LEGACY_NCP_SPI_WAKE_INT_PIN 1 + +// [GPIO_LEGACY_NCP_SPI_WAKE_INT]$ +// <<< sl:end pin_tool >>> + +#endif // SL_SPIDRV_EXP_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_board_control_config.h b/hardware/board/config/brd4115a_brd4001a/sl_board_control_config.h new file mode 100644 index 00000000000..2490f6cfed5 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_board_control_config.h @@ -0,0 +1,56 @@ +/***************************************************************************//** + * @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 + +// 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 gpioPortD +#define SL_BOARD_ENABLE_VCOM_PIN 5 +// [GPIO_SL_BOARD_ENABLE_VCOM]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_BOARD_CONTROL_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_spi_eusart_exp_config.h b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_spi_eusart_exp_config.h new file mode 100644 index 00000000000..b4d2aebc09b --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_spi_eusart_exp_config.h @@ -0,0 +1,94 @@ +/***************************************************************************//** + * @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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_SPI_EUSART_EXP_SECONDARY_CONFIG_H +#define SL_CPC_DRV_SPI_EUSART_EXP_SECONDARY_CONFIG_H +#include "spidrv.h" + +// CPC-Secondary SPI Driver Configuration + +// Number of frame that can be queued in the driver receive queue +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_RX_QUEUE_SIZE 10 + +// Number of frame that can be queued in the driver transmit queue +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_TX_QUEUE_SIZE 10 + +// SPI bit rate +// Default: 1000000 +#define SL_CPC_DRV_SPI_EXP_BITRATE 1000000 + +// Chip Select Interrupt Number on Falling Edge +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_CS_FALLING_EDGE_INT_NO 8 + +// Chip Select Interrupt Number on Rising Edge +// Default: 11 +#define SL_CPC_DRV_SPI_EXP_CS_RISING_EDGE_INT_NO 9 +// + +// <<< 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 gpioPortB +#define SL_CPC_DRV_SPI_EXP_RX_IRQ_PIN 3 + +// [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 PC09 +#define SL_CPC_DRV_SPI_EXP_CS_PORT gpioPortC +#define SL_CPC_DRV_SPI_EXP_CS_PIN 9 + +// [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/brd4115a_brd4001a/sl_cpc_drv_secondary_spi_usart_exp_config.h b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_spi_usart_exp_config.h new file mode 100644 index 00000000000..b6a70036116 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_spi_usart_exp_config.h @@ -0,0 +1,94 @@ +/***************************************************************************//** + * @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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_SPI_USART_EXP_SECONDARY_CONFIG_H +#define SL_CPC_DRV_SPI_USART_EXP_SECONDARY_CONFIG_H +#include "spidrv.h" + +// CPC-Secondary SPI Driver Configuration + +// Number of frame that can be queued in the driver receive queue +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_RX_QUEUE_SIZE 10 + +// Number of frame that can be queued in the driver transmit queue +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_TX_QUEUE_SIZE 10 + +// SPI bit rate +// Default: 1000000 +#define SL_CPC_DRV_SPI_EXP_BITRATE 1000000 + +// Chip Select Interrupt Number on Falling Edge +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_CS_FALLING_EDGE_INT_NO 8 + +// Chip Select Interrupt Number on Rising Edge +// Default: 11 +#define SL_CPC_DRV_SPI_EXP_CS_RISING_EDGE_INT_NO 9 +// + +// <<< 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 gpioPortB +#define SL_CPC_DRV_SPI_EXP_RX_IRQ_PIN 3 + +// [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 PC09 +#define SL_CPC_DRV_SPI_EXP_CS_PORT gpioPortC +#define SL_CPC_DRV_SPI_EXP_CS_PIN 9 + +// [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/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_eusart_exp_config.h b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_eusart_exp_config.h new file mode 100644 index 00000000000..fc5ae490cdc --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_eusart_exp_config.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief CPC EUSART 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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_UART_EUSART_EXP_SECONDARY_CONFIG_H +#define SL_CPC_DRV_UART_EUSART_EXP_SECONDARY_CONFIG_H + +// CPC - Secondary 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 PC09 +#define SL_CPC_DRV_UART_EXP_RTS_PORT gpioPortC +#define SL_CPC_DRV_UART_EXP_RTS_PIN 9 + +// [EUSART_SL_CPC_DRV_UART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_CPC_DRV_UART_EXP_SECONDARY_CONFIG_H */ diff --git a/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_eusart_vcom_config.h b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_eusart_vcom_config.h new file mode 100644 index 00000000000..7d35a7ccb50 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_eusart_vcom_config.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief CPC EUSART 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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_UART_EUSART_VCOM_SECONDARY_CONFIG_H +#define SL_CPC_DRV_UART_EUSART_VCOM_SECONDARY_CONFIG_H + +// CPC - Secondary 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 PA05 +#define SL_CPC_DRV_UART_VCOM_TX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_TX_PIN 5 + +// EUSART0 RX on PA06 +#define SL_CPC_DRV_UART_VCOM_RX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_RX_PIN 6 + +// EUSART0 CTS on PB00 +#define SL_CPC_DRV_UART_VCOM_CTS_PORT gpioPortB +#define SL_CPC_DRV_UART_VCOM_CTS_PIN 0 + +// EUSART0 RTS on PA07 +#define SL_CPC_DRV_UART_VCOM_RTS_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_RTS_PIN 7 + +// [EUSART_SL_CPC_DRV_UART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_CPC_DRV_UART_VCOM_SECONDARY_CONFIG_H */ diff --git a/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_usart_exp_config.h b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_usart_exp_config.h new file mode 100644 index 00000000000..bb577033f23 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_usart_exp_config.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief CPC UART 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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_UART_USART_EXP_SECONDARY_CONFIG_H +#define SL_CPC_DRV_UART_USART_EXP_SECONDARY_CONFIG_H + +// CPC - Secondary 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 PC09 +#define SL_CPC_DRV_UART_EXP_RTS_PORT gpioPortC +#define SL_CPC_DRV_UART_EXP_RTS_PIN 9 + +// [USART_SL_CPC_DRV_UART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_CPC_DRV_UART_EXP_SECONDARY_CONFIG_H */ diff --git a/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_usart_vcom_config.h b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_usart_vcom_config.h new file mode 100644 index 00000000000..703289aee48 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_cpc_drv_secondary_uart_usart_vcom_config.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief CPC UART 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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_UART_USART_VCOM_SECONDARY_CONFIG_H +#define SL_CPC_DRV_UART_USART_VCOM_SECONDARY_CONFIG_H + +// CPC - Secondary 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 PA05 +#define SL_CPC_DRV_UART_VCOM_TX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_CPC_DRV_UART_VCOM_RX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_RX_PIN 6 + +// USART0 CTS on PB00 +#define SL_CPC_DRV_UART_VCOM_CTS_PORT gpioPortB +#define SL_CPC_DRV_UART_VCOM_CTS_PIN 0 + +// USART0 RTS on PA07 +#define SL_CPC_DRV_UART_VCOM_RTS_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_RTS_PIN 7 + +// [USART_SL_CPC_DRV_UART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_CPC_DRV_UART_VCOM_SECONDARY_CONFIG_H */ diff --git a/hardware/board/config/brd4115a_brd4001a/sl_device_init_hfxo_config.h b/hardware/board/config/brd4115a_brd4001a/sl_device_init_hfxo_config.h new file mode 100644 index 00000000000..c3dc821a7b6 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_device_init_hfxo_config.h @@ -0,0 +1,53 @@ +/***************************************************************************//** + * @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 + +// CTUNE <0-255> +// Default: 140 +#define SL_DEVICE_INIT_HFXO_CTUNE 105 + +// <<< end of configuration section >>> + +#endif // SL_DEVICE_INIT_HFXO_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_device_init_lfxo_config.h b/hardware/board/config/brd4115a_brd4001a/sl_device_init_lfxo_config.h new file mode 100644 index 00000000000..ec8b1faa1f2 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_device_init_lfxo_config.h @@ -0,0 +1,66 @@ +/***************************************************************************//** + * @file + * @brief DEVICE_INIT_LFXO 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_LFXO_CONFIG_H +#define SL_DEVICE_INIT_LFXO_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Mode +// +// Crystal oscillator +// AC-coupled buffer +// External digital clock +// Default: cmuLfxoOscMode_Crystal +#define SL_DEVICE_INIT_LFXO_MODE cmuLfxoOscMode_Crystal + +// CTUNE <0-127> +// Default: 63 +#define SL_DEVICE_INIT_LFXO_CTUNE 42 + +// LFXO precision in PPM <0-65535> +// Default: 500 +#define SL_DEVICE_INIT_LFXO_PRECISION 100 + +// Startup Timeout Delay +// +// 2 cycles +// 256 cycles +// 1K cycles +// 2K cycles +// 4K cycles +// 8K cycles +// 16K cycles +// 32K cycles +// Default: cmuLfxoStartupDelay_4KCycles +#define SL_DEVICE_INIT_LFXO_TIMEOUT cmuLfxoStartupDelay_4KCycles +// <<< end of configuration section >>> + +#endif // SL_DEVICE_INIT_LFXO_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_iostream_eusart_exp_config.h b/hardware/board/config/brd4115a_brd4001a/sl_iostream_eusart_exp_config.h new file mode 100644 index 00000000000..6b39561f06d --- /dev/null +++ b/hardware/board/config/brd4115a_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 EUSART1 +#define SL_IOSTREAM_EUSART_EXP_PERIPHERAL_NO 1 + +// EUSART1 TX on PA05 +#define SL_IOSTREAM_EUSART_EXP_TX_PORT gpioPortA +#define SL_IOSTREAM_EUSART_EXP_TX_PIN 5 + +// EUSART1 RX on PA06 +#define SL_IOSTREAM_EUSART_EXP_RX_PORT gpioPortA +#define SL_IOSTREAM_EUSART_EXP_RX_PIN 6 + + + +// [EUSART_SL_IOSTREAM_EUSART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif diff --git a/hardware/board/config/brd4115a_brd4001a/sl_iostream_eusart_vcom_config.h b/hardware/board/config/brd4115a_brd4001a/sl_iostream_eusart_vcom_config.h new file mode 100644 index 00000000000..05b884847e0 --- /dev/null +++ b/hardware/board/config/brd4115a_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 PA05 +#define SL_IOSTREAM_EUSART_VCOM_TX_PORT gpioPortA +#define SL_IOSTREAM_EUSART_VCOM_TX_PIN 5 + +// EUSART0 RX on PA06 +#define SL_IOSTREAM_EUSART_VCOM_RX_PORT gpioPortA +#define SL_IOSTREAM_EUSART_VCOM_RX_PIN 6 + +// EUSART0 CTS on PB00 +#define SL_IOSTREAM_EUSART_VCOM_CTS_PORT gpioPortB +#define SL_IOSTREAM_EUSART_VCOM_CTS_PIN 0 + +// EUSART0 RTS on PA07 +#define SL_IOSTREAM_EUSART_VCOM_RTS_PORT gpioPortA +#define SL_IOSTREAM_EUSART_VCOM_RTS_PIN 7 + +// [EUSART_SL_IOSTREAM_EUSART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif diff --git a/hardware/board/config/brd4115a_brd4001a/sl_iostream_usart_exp_config.h b/hardware/board/config/brd4115a_brd4001a/sl_iostream_usart_exp_config.h new file mode 100644 index 00000000000..185653d9e7c --- /dev/null +++ b/hardware/board/config/brd4115a_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 PA05 +#define SL_IOSTREAM_USART_EXP_TX_PORT gpioPortA +#define SL_IOSTREAM_USART_EXP_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_IOSTREAM_USART_EXP_RX_PORT gpioPortA +#define SL_IOSTREAM_USART_EXP_RX_PIN 6 + +// USART0 CTS on PB00 +#define SL_IOSTREAM_USART_EXP_CTS_PORT gpioPortB +#define SL_IOSTREAM_USART_EXP_CTS_PIN 0 + +// USART0 RTS on PA07 +#define SL_IOSTREAM_USART_EXP_RTS_PORT gpioPortA +#define SL_IOSTREAM_USART_EXP_RTS_PIN 7 + +// [USART_SL_IOSTREAM_USART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif diff --git a/hardware/board/config/brd4115a_brd4001a/sl_iostream_usart_vcom_config.h b/hardware/board/config/brd4115a_brd4001a/sl_iostream_usart_vcom_config.h new file mode 100644 index 00000000000..654c1c9449f --- /dev/null +++ b/hardware/board/config/brd4115a_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 PA05 +#define SL_IOSTREAM_USART_VCOM_TX_PORT gpioPortA +#define SL_IOSTREAM_USART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_IOSTREAM_USART_VCOM_RX_PORT gpioPortA +#define SL_IOSTREAM_USART_VCOM_RX_PIN 6 + +// USART0 CTS on PB00 +#define SL_IOSTREAM_USART_VCOM_CTS_PORT gpioPortB +#define SL_IOSTREAM_USART_VCOM_CTS_PIN 0 + +// USART0 RTS on PA07 +#define SL_IOSTREAM_USART_VCOM_RTS_PORT gpioPortA +#define SL_IOSTREAM_USART_VCOM_RTS_PIN 7 + +// [USART_SL_IOSTREAM_USART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif diff --git a/hardware/board/config/brd4115a_brd4001a/sl_mx25_flash_shutdown_eusart_config.h b/hardware/board/config/brd4115a_brd4001a/sl_mx25_flash_shutdown_eusart_config.h new file mode 100644 index 00000000000..3b7337e0bfc --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_mx25_flash_shutdown_eusart_config.h @@ -0,0 +1,51 @@ +/***************************************************************************//** + * @file + * @brief SL_MX25_FLASH_SHUTDOWN_USART Config + ******************************************************************************* + * # License + * Copyright 2020 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 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 6 + +// [GPIO_SL_MX25_FLASH_SHUTDOWN_CS]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_MX25_FLASH_SHUTDOWN_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_mx25_flash_shutdown_usart_config.h b/hardware/board/config/brd4115a_brd4001a/sl_mx25_flash_shutdown_usart_config.h new file mode 100644 index 00000000000..f3e76b076cd --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_mx25_flash_shutdown_usart_config.h @@ -0,0 +1,51 @@ +/***************************************************************************//** + * @file + * @brief SL_MX25_FLASH_SHUTDOWN_USART Config + ******************************************************************************* + * # License + * Copyright 2020 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 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 6 + +// [GPIO_SL_MX25_FLASH_SHUTDOWN_CS]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_MX25_FLASH_SHUTDOWN_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_ncp_spidrv_usart_config.h b/hardware/board/config/brd4115a_brd4001a/sl_ncp_spidrv_usart_config.h new file mode 100644 index 00000000000..152793cd63a --- /dev/null +++ b/hardware/board/config/brd4115a_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 8 + +// Chip Select Interrupt Number on Rising Edge +// Default: 9 +#define SL_NCP_SPIDRV_USART_CS_RISING_EDGE_INT_NO 9 +// + +// <<< 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 gpioPortB +#define SL_NCP_SPIDRV_USART_HOST_INT_PIN 3 + +// [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 PC09 +#define SL_NCP_SPIDRV_USART_CS_PORT gpioPortC +#define SL_NCP_SPIDRV_USART_CS_PIN 9 + +// [USART_SL_NCP_SPIDRV_USART]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_NCP_SPIDRV_USART_CONFIG_H */ diff --git a/hardware/board/config/brd4115a_brd4001a/sl_pwm_init_led0_config.h b/hardware/board/config/brd4115a_brd4001a/sl_pwm_init_led0_config.h new file mode 100644 index 00000000000..5443e190e36 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_pwm_init_led0_config.h @@ -0,0 +1,62 @@ +/***************************************************************************//** + * @file + * @brief PWM Driver + ******************************************************************************* + * # License + * Copyright 2022 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 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_LOW +// 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 PB01 +#define SL_PWM_LED0_OUTPUT_PORT gpioPortB +#define SL_PWM_LED0_OUTPUT_PIN 1 + +// [TIMER_SL_PWM_LED0]$ + +// <<< sl:end pin_tool >>> + +#ifdef __cplusplus +} +#endif + +#endif // PWM_INIT_LED0_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_pwm_init_led1_config.h b/hardware/board/config/brd4115a_brd4001a/sl_pwm_init_led1_config.h new file mode 100644 index 00000000000..73f350383ee --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_pwm_init_led1_config.h @@ -0,0 +1,62 @@ +/***************************************************************************//** + * @file + * @brief PWM Driver + ******************************************************************************* + * # License + * Copyright 2022 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 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_LOW +// 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 PB03 +#define SL_PWM_LED1_OUTPUT_PORT gpioPortB +#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/brd4115a_brd4001a/sl_rail_util_pa_config.h b/hardware/board/config/brd4115a_brd4001a/sl_rail_util_pa_config.h new file mode 100644 index 00000000000..9dcab3f9667 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_rail_util_pa_config.h @@ -0,0 +1,81 @@ +/***************************************************************************//** + * @file + * @brief Power Amplifier 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_PA_CONFIG_H +#define SL_RAIL_UTIL_PA_CONFIG_H + +#include "rail_types.h" + +// <<< Use Configuration Wizard in Context Menu >>> +// PA configuration + +// Initial PA Power (deci-dBm, 100 = 10.0 dBm) +// Default: 100 +#define SL_RAIL_UTIL_PA_POWER_DECI_DBM 100 + +// PA Ramp Time (microseconds) +// <0-65535:1> +// Default: 10 +#define SL_RAIL_UTIL_PA_RAMP_TIME_US 10 + +// Milli-volts on PA supply pin (PA_VDD) +// <0-65535:1> +// Default: 3300 +#define SL_RAIL_UTIL_PA_VOLTAGE_MV 1800 + +// 2.4 GHz PA Selection +// Highest Possible +// High Power (chip-specific) +// Low Power +// Disable +// Default: RAIL_TX_POWER_MODE_2P4GIG_HIGHEST +#define SL_RAIL_UTIL_PA_SELECTION_2P4GHZ RAIL_TX_POWER_MODE_2P4GIG_HIGHEST + +// Sub-1 GHz PA Selection +// Disable +// Default: RAIL_TX_POWER_MODE_NONE +#define SL_RAIL_UTIL_PA_SELECTION_SUBGHZ RAIL_TX_POWER_MODE_NONE + +// Header file containing custom PA curves +// Default: "pa_curves_efr32.h" +#define SL_RAIL_UTIL_PA_CURVE_HEADER "pa_curves_efr32.h" + +// Header file containing PA curve types +// Default: "pa_curve_types_efr32.h" +#define SL_RAIL_UTIL_PA_CURVE_TYPES "pa_curve_types_efr32.h" + +// Enable PA Calibration +// Default: 0 +#define SL_RAIL_UTIL_PA_CALIBRATION_ENABLE 0 + +// +// <<< end of configuration section >>> + +#endif // SL_RAIL_UTIL_PA_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_rail_util_pti_config.h b/hardware/board/config/brd4115a_brd4001a/sl_rail_util_pti_config.h new file mode 100644 index 00000000000..90431d79360 --- /dev/null +++ b/hardware/board/config/brd4115a_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 PC04 +#define SL_RAIL_UTIL_PTI_DOUT_PORT gpioPortC +#define SL_RAIL_UTIL_PTI_DOUT_PIN 4 + +// PTI DFRAME on PC05 +#define SL_RAIL_UTIL_PTI_DFRAME_PORT gpioPortC +#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/brd4115a_brd4001a/sl_simple_button_btn0_config.h b/hardware/board/config/brd4115a_brd4001a/sl_simple_button_btn0_config.h new file mode 100644 index 00000000000..e529b9cbe9e --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_simple_button_btn0_config.h @@ -0,0 +1,45 @@ +/***************************************************************************//** + * @file + * @brief Simple Button Driver User 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 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/brd4115a_brd4001a/sl_simple_button_btn1_config.h b/hardware/board/config/brd4115a_brd4001a/sl_simple_button_btn1_config.h new file mode 100644 index 00000000000..3a029835729 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_simple_button_btn1_config.h @@ -0,0 +1,45 @@ +/***************************************************************************//** + * @file + * @brief Simple Button Driver User 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 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/brd4115a_brd4001a/sl_simple_led_led0_config.h b/hardware/board/config/brd4115a_brd4001a/sl_simple_led_led0_config.h new file mode 100644 index 00000000000..e4cbad51b9d --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_simple_led_led0_config.h @@ -0,0 +1,44 @@ +/***************************************************************************//** + * @file + * @brief Simple Led Driver Configuration + ******************************************************************************* + * # 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 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_LOW +// 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 1 + +// [GPIO_SL_SIMPLE_LED_LED0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_SIMPLE_LED_LED0_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_simple_led_led1_config.h b/hardware/board/config/brd4115a_brd4001a/sl_simple_led_led1_config.h new file mode 100644 index 00000000000..6ed761fe590 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_simple_led_led1_config.h @@ -0,0 +1,44 @@ +/***************************************************************************//** + * @file + * @brief Simple Led Driver Configuration + ******************************************************************************* + * # 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 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_LOW +// 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 gpioPortB +#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/brd4115a_brd4001a/sl_spidrv_eusart_exp_config.h b/hardware/board/config/brd4115a_brd4001a/sl_spidrv_eusart_exp_config.h new file mode 100644 index 00000000000..d2788d47598 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_spidrv_eusart_exp_config.h @@ -0,0 +1,89 @@ +/***************************************************************************//** + * @file + * @brief SPIDRV_EUSART 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 SL_SPIDRV_EUSART_EXP_CONFIG_H +#define SL_SPIDRV_EUSART_EXP_CONFIG_H + +#include "spidrv.h" + +// <<< Use Configuration Wizard in Context Menu >>> +// SPIDRV settings + +// SPI bitrate +// Default: 1000000 +#define SL_SPIDRV_EUSART_EXP_BITRATE 1000000 + +// SPI frame length <7-16> +// Default: 8 +#define SL_SPIDRV_EUSART_EXP_FRAME_LENGTH 8 + +// SPI mode +// Master +// Slave +#define SL_SPIDRV_EUSART_EXP_TYPE spidrvMaster + +// Bit order on the SPI bus +// LSB transmitted first +// MSB transmitted first +#define SL_SPIDRV_EUSART_EXP_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_SPIDRV_EUSART_EXP_CLOCK_MODE spidrvClockMode0 + +// SPI master chip select (CS) control scheme. +// CS controlled by the SPI driver +// CS controlled by the application +#define SL_SPIDRV_EUSART_EXP_CS_CONTROL spidrvCsControlAuto + +// SPI slave transfer start scheme +// Transfer starts immediately +// Transfer starts when the bus is idle (CS deasserted) +// Only applies if instance type is spidrvSlave +#define SL_SPIDRV_EUSART_EXP_SLAVE_START_MODE spidrvSlaveStartImmediate +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_SPIDRV_EUSART_EXP +// $[EUSART_SL_SPIDRV_EUSART_EXP] +#define SL_SPIDRV_EUSART_EXP_PERIPHERAL EUSART1 +#define SL_SPIDRV_EUSART_EXP_PERIPHERAL_NO 1 + +// EUSART1 TX on PC01 +#define SL_SPIDRV_EUSART_EXP_TX_PORT gpioPortC +#define SL_SPIDRV_EUSART_EXP_TX_PIN 1 + +// EUSART1 RX on PC02 +#define SL_SPIDRV_EUSART_EXP_RX_PORT gpioPortC +#define SL_SPIDRV_EUSART_EXP_RX_PIN 2 + +// EUSART1 SCLK on PC03 +#define SL_SPIDRV_EUSART_EXP_SCLK_PORT gpioPortC +#define SL_SPIDRV_EUSART_EXP_SCLK_PIN 3 + +// EUSART1 CS on PC09 +#define SL_SPIDRV_EUSART_EXP_CS_PORT gpioPortC +#define SL_SPIDRV_EUSART_EXP_CS_PIN 9 + +// [EUSART_SL_SPIDRV_EUSART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif // SL_SPIDRV_EUSART_EXP_CONFIG_HEUSART_ diff --git a/hardware/board/config/brd4115a_brd4001a/sl_spidrv_exp_config.h b/hardware/board/config/brd4115a_brd4001a/sl_spidrv_exp_config.h new file mode 100644 index 00000000000..79cebb4c954 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_spidrv_exp_config.h @@ -0,0 +1,89 @@ +/***************************************************************************//** + * @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 SL_SPIDRV_EXP_CONFIG_H +#define SL_SPIDRV_EXP_CONFIG_H + +#include "spidrv.h" + +// <<< Use Configuration Wizard in Context Menu >>> +// SPIDRV settings + +// SPI bitrate +// Default: 1000000 +#define SL_SPIDRV_EXP_BITRATE 1000000 + +// SPI frame length <4-16> +// Default: 8 +#define SL_SPIDRV_EXP_FRAME_LENGTH 8 + +// SPI mode +// Master +// Slave +#define SL_SPIDRV_EXP_TYPE spidrvMaster + +// Bit order on the SPI bus +// LSB transmitted first +// MSB transmitted first +#define SL_SPIDRV_EXP_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_SPIDRV_EXP_CLOCK_MODE spidrvClockMode0 + +// SPI master chip select (CS) control scheme. +// CS controlled by the SPI driver +// CS controlled by the application +#define SL_SPIDRV_EXP_CS_CONTROL spidrvCsControlAuto + +// SPI slave transfer start scheme +// Transfer starts immediately +// Transfer starts when the bus is idle (CS deasserted) +// Only applies if instance type is spidrvSlave +#define SL_SPIDRV_EXP_SLAVE_START_MODE spidrvSlaveStartImmediate +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_SPIDRV_EXP +// $[USART_SL_SPIDRV_EXP] +#define SL_SPIDRV_EXP_PERIPHERAL USART0 +#define SL_SPIDRV_EXP_PERIPHERAL_NO 0 + +// USART0 TX on PC01 +#define SL_SPIDRV_EXP_TX_PORT gpioPortC +#define SL_SPIDRV_EXP_TX_PIN 1 + +// USART0 RX on PC02 +#define SL_SPIDRV_EXP_RX_PORT gpioPortC +#define SL_SPIDRV_EXP_RX_PIN 2 + +// USART0 CLK on PC03 +#define SL_SPIDRV_EXP_CLK_PORT gpioPortC +#define SL_SPIDRV_EXP_CLK_PIN 3 + +// USART0 CS on PC09 +#define SL_SPIDRV_EXP_CS_PORT gpioPortC +#define SL_SPIDRV_EXP_CS_PIN 9 + +// [USART_SL_SPIDRV_EXP]$ +// <<< sl:end pin_tool >>> + +#endif // SL_SPIDRV_EXP_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_spidrv_usart_exp_config.h b/hardware/board/config/brd4115a_brd4001a/sl_spidrv_usart_exp_config.h new file mode 100644 index 00000000000..500144498ab --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_spidrv_usart_exp_config.h @@ -0,0 +1,89 @@ +/***************************************************************************//** + * @file + * @brief SPIDRV_USART 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 SL_SPIDRV_USART_EXP_CONFIG_H +#define SL_SPIDRV_USART_EXP_CONFIG_H + +#include "spidrv.h" + +// <<< Use Configuration Wizard in Context Menu >>> +// SPIDRV settings + +// SPI bitrate +// Default: 1000000 +#define SL_SPIDRV_USART_EXP_BITRATE 1000000 + +// SPI frame length <4-16> +// Default: 8 +#define SL_SPIDRV_USART_EXP_FRAME_LENGTH 8 + +// SPI mode +// Master +// Slave +#define SL_SPIDRV_USART_EXP_TYPE spidrvMaster + +// Bit order on the SPI bus +// LSB transmitted first +// MSB transmitted first +#define SL_SPIDRV_USART_EXP_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_SPIDRV_USART_EXP_CLOCK_MODE spidrvClockMode0 + +// SPI master chip select (CS) control scheme. +// CS controlled by the SPI driver +// CS controlled by the application +#define SL_SPIDRV_USART_EXP_CS_CONTROL spidrvCsControlAuto + +// SPI slave transfer start scheme +// Transfer starts immediately +// Transfer starts when the bus is idle (CS deasserted) +// Only applies if instance type is spidrvSlave +#define SL_SPIDRV_USART_EXP_SLAVE_START_MODE spidrvSlaveStartImmediate +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_SPIDRV_USART_EXP +// $[USART_SL_SPIDRV_USART_EXP] +#define SL_SPIDRV_USART_EXP_PERIPHERAL USART0 +#define SL_SPIDRV_USART_EXP_PERIPHERAL_NO 0 + +// USART0 TX on PC01 +#define SL_SPIDRV_USART_EXP_TX_PORT gpioPortC +#define SL_SPIDRV_USART_EXP_TX_PIN 1 + +// USART0 RX on PC02 +#define SL_SPIDRV_USART_EXP_RX_PORT gpioPortC +#define SL_SPIDRV_USART_EXP_RX_PIN 2 + +// USART0 CLK on PC03 +#define SL_SPIDRV_USART_EXP_CLK_PORT gpioPortC +#define SL_SPIDRV_USART_EXP_CLK_PIN 3 + +// USART0 CS on PC09 +#define SL_SPIDRV_USART_EXP_CS_PORT gpioPortC +#define SL_SPIDRV_USART_EXP_CS_PIN 9 + +// [USART_SL_SPIDRV_USART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif // SL_SPIDRV_USART_EXP_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_eusart_exp_config.h b/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_eusart_exp_config.h new file mode 100644 index 00000000000..e193e23ad46 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_eusart_exp_config.h @@ -0,0 +1,100 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV_EUSART 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 SL_UARTDRV_EUSART_EXP_CONFIG_H +#define SL_UARTDRV_EUSART_EXP_CONFIG_H + +#include "em_eusart.h" +// <<< Use Configuration Wizard in Context Menu >>> + +// EUSART settings +// Baud rate +// Default: 115200 +#define SL_UARTDRV_EUSART_EXP_BAUDRATE 115200 + +// Low frequency mode +// True +// False +#define SL_UARTDRV_EUSART_EXP_LF_MODE false + +// Parity mode to use +// No Parity +// Even parity +// Odd parity +// Default: eusartNoParity +#define SL_UARTDRV_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_UARTDRV_EUSART_EXP_STOP_BITS eusartStopbits1 + +// Flow control method +// None +// Software XON/XOFF +// nRTS/nCTS hardware handshake +// UART peripheral controls nRTS/nCTS +// Default: uartdrvFlowControlHw +#define SL_UARTDRV_EUSART_EXP_FLOW_CONTROL_TYPE uartdrvFlowControlNone + +// Oversampling selection +// 16x oversampling +// 8x oversampling +// 6x oversampling +// 4x oversampling +// Oversampling disabled +// Default: eusartOVS16 +#define SL_UARTDRV_EUSART_EXP_OVERSAMPLING eusartOVS16 + +// Majority vote disable for 16x, 8x and 6x oversampling modes +// False +// True +// Default: eusartMajorityVoteEnable +#define SL_UARTDRV_EUSART_EXP_MVDIS eusartMajorityVoteEnable + +// Size of the receive operation queue +// Default: 6 +#define SL_UARTDRV_EUSART_EXP_RX_BUFFER_SIZE 6 + +// Size of the transmit operation queue +// Default: 6 +#define SL_UARTDRV_EUSART_EXP_TX_BUFFER_SIZE 6 +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_UARTDRV_EUSART_EXP +// $[EUSART_SL_UARTDRV_EUSART_EXP] +#define SL_UARTDRV_EUSART_EXP_PERIPHERAL EUSART1 +#define SL_UARTDRV_EUSART_EXP_PERIPHERAL_NO 1 + +// EUSART1 TX on PA05 +#define SL_UARTDRV_EUSART_EXP_TX_PORT gpioPortA +#define SL_UARTDRV_EUSART_EXP_TX_PIN 5 + +// EUSART1 RX on PA06 +#define SL_UARTDRV_EUSART_EXP_RX_PORT gpioPortA +#define SL_UARTDRV_EUSART_EXP_RX_PIN 6 + + + +// [EUSART_SL_UARTDRV_EUSART_EXP]$ +// <<< sl:end pin_tool >>> +#endif // SL_UARTDRV_EUSART_EXP_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_eusart_vcom_config.h b/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_eusart_vcom_config.h new file mode 100644 index 00000000000..716d6eacb22 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_eusart_vcom_config.h @@ -0,0 +1,106 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV_EUSART 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 SL_UARTDRV_EUSART_VCOM_CONFIG_H +#define SL_UARTDRV_EUSART_VCOM_CONFIG_H + +#include "em_eusart.h" +// <<< Use Configuration Wizard in Context Menu >>> + +// EUSART settings +// Baud rate +// Default: 115200 +#define SL_UARTDRV_EUSART_VCOM_BAUDRATE 115200 + +// Low frequency mode +// True +// False +#define SL_UARTDRV_EUSART_VCOM_LF_MODE false + +// Parity mode to use +// No Parity +// Even parity +// Odd parity +// Default: eusartNoParity +#define SL_UARTDRV_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_UARTDRV_EUSART_VCOM_STOP_BITS eusartStopbits1 + +// Flow control method +// None +// Software XON/XOFF +// nRTS/nCTS hardware handshake +// UART peripheral controls nRTS/nCTS +// Default: uartdrvFlowControlHw +#define SL_UARTDRV_EUSART_VCOM_FLOW_CONTROL_TYPE uartdrvFlowControlHwUart + +// Oversampling selection +// 16x oversampling +// 8x oversampling +// 6x oversampling +// 4x oversampling +// Oversampling disabled +// Default: eusartOVS16 +#define SL_UARTDRV_EUSART_VCOM_OVERSAMPLING eusartOVS16 + +// Majority vote disable for 16x, 8x and 6x oversampling modes +// False +// True +// Default: eusartMajorityVoteEnable +#define SL_UARTDRV_EUSART_VCOM_MVDIS eusartMajorityVoteEnable + +// Size of the receive operation queue +// Default: 6 +#define SL_UARTDRV_EUSART_VCOM_RX_BUFFER_SIZE 6 + +// Size of the transmit operation queue +// Default: 6 +#define SL_UARTDRV_EUSART_VCOM_TX_BUFFER_SIZE 6 +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_UARTDRV_EUSART_VCOM +// $[EUSART_SL_UARTDRV_EUSART_VCOM] +#define SL_UARTDRV_EUSART_VCOM_PERIPHERAL EUSART0 +#define SL_UARTDRV_EUSART_VCOM_PERIPHERAL_NO 0 + +// EUSART0 TX on PA05 +#define SL_UARTDRV_EUSART_VCOM_TX_PORT gpioPortA +#define SL_UARTDRV_EUSART_VCOM_TX_PIN 5 + +// EUSART0 RX on PA06 +#define SL_UARTDRV_EUSART_VCOM_RX_PORT gpioPortA +#define SL_UARTDRV_EUSART_VCOM_RX_PIN 6 + +// EUSART0 CTS on PB00 +#define SL_UARTDRV_EUSART_VCOM_CTS_PORT gpioPortB +#define SL_UARTDRV_EUSART_VCOM_CTS_PIN 0 + +// EUSART0 RTS on PA07 +#define SL_UARTDRV_EUSART_VCOM_RTS_PORT gpioPortA +#define SL_UARTDRV_EUSART_VCOM_RTS_PIN 7 + +// [EUSART_SL_UARTDRV_EUSART_VCOM]$ +// <<< sl:end pin_tool >>> +#endif // SL_UARTDRV_EUSART_VCOM_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_usart_exp_config.h b/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_usart_exp_config.h new file mode 100644 index 00000000000..02662139f31 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_usart_exp_config.h @@ -0,0 +1,95 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV_USART 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 SL_UARTDRV_USART_EXP_CONFIG_H +#define SL_UARTDRV_USART_EXP_CONFIG_H + +#include "em_usart.h" +// <<< Use Configuration Wizard in Context Menu >>> + +// UART settings +// Baud rate +// Default: 115200 +#define SL_UARTDRV_USART_EXP_BAUDRATE 115200 + +// Parity mode to use +// No Parity +// Even parity +// Odd parity +// Default: usartNoParity +#define SL_UARTDRV_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_UARTDRV_USART_EXP_STOP_BITS usartStopbits1 + +// Flow control method +// None +// Software XON/XOFF +// nRTS/nCTS hardware handshake +// UART peripheral controls nRTS/nCTS +// Default: uartdrvFlowControlHw +#define SL_UARTDRV_USART_EXP_FLOW_CONTROL_TYPE uartdrvFlowControlNone + +// Oversampling selection +// 16x oversampling +// 8x oversampling +// 6x oversampling +// 4x oversampling +// Default: usartOVS16 +#define SL_UARTDRV_USART_EXP_OVERSAMPLING usartOVS4 + +// Majority vote disable for 16x, 8x and 6x oversampling modes +// True +// False +#define SL_UARTDRV_USART_EXP_MVDIS false + +// Size of the receive operation queue +// Default: 6 +#define SL_UARTDRV_USART_EXP_RX_BUFFER_SIZE 6 + +// Size of the transmit operation queue +// Default: 6 +#define SL_UARTDRV_USART_EXP_TX_BUFFER_SIZE 6 + +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_UARTDRV_USART_EXP +// $[USART_SL_UARTDRV_USART_EXP] +#define SL_UARTDRV_USART_EXP_PERIPHERAL USART0 +#define SL_UARTDRV_USART_EXP_PERIPHERAL_NO 0 + +// USART0 TX on PA05 +#define SL_UARTDRV_USART_EXP_TX_PORT gpioPortA +#define SL_UARTDRV_USART_EXP_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_UARTDRV_USART_EXP_RX_PORT gpioPortA +#define SL_UARTDRV_USART_EXP_RX_PIN 6 + + + +// [USART_SL_UARTDRV_USART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif // SL_UARTDRV_USART_EXP_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_usart_vcom_config.h b/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_usart_vcom_config.h new file mode 100644 index 00000000000..0b246a6449b --- /dev/null +++ b/hardware/board/config/brd4115a_brd4001a/sl_uartdrv_usart_vcom_config.h @@ -0,0 +1,101 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV_USART 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 SL_UARTDRV_USART_VCOM_CONFIG_H +#define SL_UARTDRV_USART_VCOM_CONFIG_H + +#include "em_usart.h" +// <<< Use Configuration Wizard in Context Menu >>> + +// UART settings +// Baud rate +// Default: 115200 +#define SL_UARTDRV_USART_VCOM_BAUDRATE 115200 + +// Parity mode to use +// No Parity +// Even parity +// Odd parity +// Default: usartNoParity +#define SL_UARTDRV_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_UARTDRV_USART_VCOM_STOP_BITS usartStopbits1 + +// Flow control method +// None +// Software XON/XOFF +// nRTS/nCTS hardware handshake +// UART peripheral controls nRTS/nCTS +// Default: uartdrvFlowControlHw +#define SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE uartdrvFlowControlHwUart + +// Oversampling selection +// 16x oversampling +// 8x oversampling +// 6x oversampling +// 4x oversampling +// Default: usartOVS16 +#define SL_UARTDRV_USART_VCOM_OVERSAMPLING usartOVS4 + +// Majority vote disable for 16x, 8x and 6x oversampling modes +// True +// False +#define SL_UARTDRV_USART_VCOM_MVDIS false + +// Size of the receive operation queue +// Default: 6 +#define SL_UARTDRV_USART_VCOM_RX_BUFFER_SIZE 6 + +// Size of the transmit operation queue +// Default: 6 +#define SL_UARTDRV_USART_VCOM_TX_BUFFER_SIZE 6 + +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_UARTDRV_USART_VCOM +// $[USART_SL_UARTDRV_USART_VCOM] +#define SL_UARTDRV_USART_VCOM_PERIPHERAL USART0 +#define SL_UARTDRV_USART_VCOM_PERIPHERAL_NO 0 + +// USART0 TX on PA05 +#define SL_UARTDRV_USART_VCOM_TX_PORT gpioPortA +#define SL_UARTDRV_USART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_UARTDRV_USART_VCOM_RX_PORT gpioPortA +#define SL_UARTDRV_USART_VCOM_RX_PIN 6 + +// USART0 CTS on PB00 +#define SL_UARTDRV_USART_VCOM_CTS_PORT gpioPortB +#define SL_UARTDRV_USART_VCOM_CTS_PIN 0 + +// USART0 RTS on PA07 +#define SL_UARTDRV_USART_VCOM_RTS_PORT gpioPortA +#define SL_UARTDRV_USART_VCOM_RTS_PIN 7 + +// [USART_SL_UARTDRV_USART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif // SL_UARTDRV_USART_VCOM_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/btl_euart_driver_cfg.h b/hardware/board/config/brd4115a_brd4002a/btl_euart_driver_cfg.h new file mode 100644 index 00000000000..62f13513f4b --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PA05 +#define SL_SERIAL_EUART_TX_PORT gpioPortA +#define SL_SERIAL_EUART_TX_PIN 5 + +// EUSART0 RX on PA06 +#define SL_SERIAL_EUART_RX_PORT gpioPortA +#define SL_SERIAL_EUART_RX_PIN 6 + +// EUSART0 CTS on PB00 +#define SL_SERIAL_EUART_CTS_PORT gpioPortB +#define SL_SERIAL_EUART_CTS_PIN 0 + +// EUSART0 RTS on PA07 +#define SL_SERIAL_EUART_RTS_PORT gpioPortA +#define SL_SERIAL_EUART_RTS_PIN 7 + +// [EUSART_SL_SERIAL_EUART]$ + +// SL_VCOM_ENABLE + +// $[GPIO_SL_VCOM_ENABLE] +#define SL_VCOM_ENABLE_PORT gpioPortD +#define SL_VCOM_ENABLE_PIN 5 + +// [GPIO_SL_VCOM_ENABLE]$ + +// <<< sl:end pin_tool >>> + +#endif // BTL_EUART_DRIVER_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/btl_ezsp_gpio_activation_cfg.h b/hardware/board/config/brd4115a_brd4002a/btl_ezsp_gpio_activation_cfg.h new file mode 100644 index 00000000000..d72375379db --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 gpioPortB +#define SL_EZSPSPI_HOST_INT_PIN 3 + +// [GPIO_SL_EZSPSPI_HOST_INT]$ + +// SL_EZSPSPI_WAKE_INT +// $[GPIO_SL_EZSPSPI_WAKE_INT] +#define SL_EZSPSPI_WAKE_INT_PORT gpioPortB +#define SL_EZSPSPI_WAKE_INT_PIN 1 + +// [GPIO_SL_EZSPSPI_WAKE_INT]$ + +// <<< sl:end pin_tool >>> + +#endif // BTL_EZSP_GPIO_ACTIVATION_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/btl_gpio_activation_cfg.h b/hardware/board/config/brd4115a_brd4002a/btl_gpio_activation_cfg.h new file mode 100644 index 00000000000..f73756e2d51 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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/brd4115a_brd4002a/btl_spi_controller_eusart_driver_cfg.h b/hardware/board/config/brd4115a_brd4002a/btl_spi_controller_eusart_driver_cfg.h new file mode 100644 index 00000000000..6d7d202de9b --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PC06 +#define SL_EUSART_EXTFLASH_CS_PORT gpioPortC +#define SL_EUSART_EXTFLASH_CS_PIN 6 + +// [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/brd4115a_brd4002a/btl_spi_controller_usart_driver_cfg.h b/hardware/board/config/brd4115a_brd4002a/btl_spi_controller_usart_driver_cfg.h new file mode 100644 index 00000000000..be65b4237aa --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PC06 +#define SL_USART_EXTFLASH_CS_PORT gpioPortC +#define SL_USART_EXTFLASH_CS_PIN 6 + +// [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/brd4115a_brd4002a/btl_spi_peripheral_eusart_driver_cfg.h b/hardware/board/config/brd4115a_brd4002a/btl_spi_peripheral_eusart_driver_cfg.h new file mode 100644 index 00000000000..9c207763bbc --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PC09 +#define SL_EUSART_SPINCP_CS_PORT gpioPortC +#define SL_EUSART_SPINCP_CS_PIN 9 + +// 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/brd4115a_brd4002a/btl_spi_peripheral_usart_driver_cfg.h b/hardware/board/config/brd4115a_brd4002a/btl_spi_peripheral_usart_driver_cfg.h new file mode 100644 index 00000000000..8a359a0135f --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PC09 +#define SL_USART_SPINCP_CS_PORT gpioPortC +#define SL_USART_SPINCP_CS_PIN 9 + +// 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/brd4115a_brd4002a/btl_uart_driver_cfg.h b/hardware/board/config/brd4115a_brd4002a/btl_uart_driver_cfg.h new file mode 100644 index 00000000000..ea41726c0d2 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PA05 +#define SL_SERIAL_UART_TX_PORT gpioPortA +#define SL_SERIAL_UART_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_SERIAL_UART_RX_PORT gpioPortA +#define SL_SERIAL_UART_RX_PIN 6 + +// USART0 CTS on PB00 +#define SL_SERIAL_UART_CTS_PORT gpioPortB +#define SL_SERIAL_UART_CTS_PIN 0 + +// USART0 RTS on PA07 +#define SL_SERIAL_UART_RTS_PORT gpioPortA +#define SL_SERIAL_UART_RTS_PIN 7 + +// [USART_SL_SERIAL_UART]$ + +// SL_VCOM_ENABLE + +// $[GPIO_SL_VCOM_ENABLE] +#define SL_VCOM_ENABLE_PORT gpioPortD +#define SL_VCOM_ENABLE_PIN 5 + +// [GPIO_SL_VCOM_ENABLE]$ + +// <<< sl:end pin_tool >>> + +#endif // BTL_UART_DRIVER_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/iot_flash_cfg_exp.h b/hardware/board/config/brd4115a_brd4002a/iot_flash_cfg_exp.h new file mode 100644 index 00000000000..a47b10d870d --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PC09 +#define IOT_FLASH_CFG_EXP_SPI_CS_PORT gpioPortC +#define IOT_FLASH_CFG_EXP_SPI_CS_PIN 9 + +// [USART_IOT_FLASH_CFG_EXP_SPI]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_FLASH_CFG_EXP_H_ */ diff --git a/hardware/board/config/brd4115a_brd4002a/iot_flash_cfg_msc.h b/hardware/board/config/brd4115a_brd4002a/iot_flash_cfg_msc.h new file mode 100644 index 00000000000..c2af14bc7d2 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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/brd4115a_brd4002a/iot_flash_cfg_spiflash.h b/hardware/board/config/brd4115a_brd4002a/iot_flash_cfg_spiflash.h new file mode 100644 index 00000000000..9018f802796 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PC06 +#define IOT_FLASH_CFG_SPIFLASH_SPI_CS_PORT gpioPortC +#define IOT_FLASH_CFG_SPIFLASH_SPI_CS_PIN 6 + +// [USART_IOT_FLASH_CFG_SPIFLASH_SPI]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_FLASH_CFG_SPIFLASH_H_ */ diff --git a/hardware/board/config/brd4115a_brd4002a/iot_pwm_cfg_exp.h b/hardware/board/config/brd4115a_brd4002a/iot_pwm_cfg_exp.h new file mode 100644 index 00000000000..bb9a80edcec --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PB03 +#define IOT_PWM_CFG_EXP_CC0_PORT gpioPortB +#define IOT_PWM_CFG_EXP_CC0_PIN 3 + + + +// [TIMER_IOT_PWM_CFG_EXP]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_PWM_CFG_EXP_H_ */ diff --git a/hardware/board/config/brd4115a_brd4002a/iot_pwm_cfg_led0.h b/hardware/board/config/brd4115a_brd4002a/iot_pwm_cfg_led0.h new file mode 100644 index 00000000000..1a9d6001a00 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PB01 +#define IOT_PWM_CFG_LED0_CC0_PORT gpioPortB +#define IOT_PWM_CFG_LED0_CC0_PIN 1 + + + +// [TIMER_IOT_PWM_CFG_LED0]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_PWM_CFG_LED0_H_ */ diff --git a/hardware/board/config/brd4115a_brd4002a/iot_pwm_cfg_led1.h b/hardware/board/config/brd4115a_brd4002a/iot_pwm_cfg_led1.h new file mode 100644 index 00000000000..96ed22c7121 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PB03 +#define IOT_PWM_CFG_LED1_CC0_PORT gpioPortB +#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/brd4115a_brd4002a/iot_spi_cfg_exp.h b/hardware/board/config/brd4115a_brd4002a/iot_spi_cfg_exp.h new file mode 100644 index 00000000000..2470fa38c40 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PC09 +#define IOT_SPI_CFG_EXP_CS_PORT gpioPortC +#define IOT_SPI_CFG_EXP_CS_PIN 9 + +// [USART_IOT_SPI_CFG_EXP]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_SPI_CFG_EXP_H_ */ diff --git a/hardware/board/config/brd4115a_brd4002a/iot_spi_cfg_loopback.h b/hardware/board/config/brd4115a_brd4002a/iot_spi_cfg_loopback.h new file mode 100644 index 00000000000..12baf1c7c7d --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PC09 +#define IOT_SPI_CFG_LOOPBACK_CS_PORT gpioPortC +#define IOT_SPI_CFG_LOOPBACK_CS_PIN 9 + +// [USART_IOT_SPI_CFG_LOOPBACK]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_SPI_CFG_LOOPBACK_H_ */ diff --git a/hardware/board/config/brd4115a_brd4002a/iot_uart_cfg_exp.h b/hardware/board/config/brd4115a_brd4002a/iot_uart_cfg_exp.h new file mode 100644 index 00000000000..02f62b7d87d --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PA05 +#define IOT_UART_CFG_EXP_TX_PORT gpioPortA +#define IOT_UART_CFG_EXP_TX_PIN 5 + +// USART0 RX on PA06 +#define IOT_UART_CFG_EXP_RX_PORT gpioPortA +#define IOT_UART_CFG_EXP_RX_PIN 6 + + + + + +// [USART_IOT_UART_CFG_EXP]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_UART_CFG_EXP_H_ */ diff --git a/hardware/board/config/brd4115a_brd4002a/iot_uart_cfg_loopback.h b/hardware/board/config/brd4115a_brd4002a/iot_uart_cfg_loopback.h new file mode 100644 index 00000000000..c7db3a55802 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PA05 +#define IOT_UART_CFG_LOOPBACK_TX_PORT gpioPortA +#define IOT_UART_CFG_LOOPBACK_TX_PIN 5 + +// USART0 RX on PA06 +#define IOT_UART_CFG_LOOPBACK_RX_PORT gpioPortA +#define IOT_UART_CFG_LOOPBACK_RX_PIN 6 + + + +// USART0 RTS on PA07 +#define IOT_UART_CFG_LOOPBACK_RTS_PORT gpioPortA +#define IOT_UART_CFG_LOOPBACK_RTS_PIN 7 + +// USART0 CTS on PB00 +#define IOT_UART_CFG_LOOPBACK_CTS_PORT gpioPortB +#define IOT_UART_CFG_LOOPBACK_CTS_PIN 0 + +// [USART_IOT_UART_CFG_LOOPBACK]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_UART_CFG_LOOPBACK_H_ */ diff --git a/hardware/board/config/brd4115a_brd4002a/iot_uart_cfg_vcom.h b/hardware/board/config/brd4115a_brd4002a/iot_uart_cfg_vcom.h new file mode 100644 index 00000000000..ff476d8ccef --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PA05 +#define IOT_UART_CFG_VCOM_TX_PORT gpioPortA +#define IOT_UART_CFG_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define IOT_UART_CFG_VCOM_RX_PORT gpioPortA +#define IOT_UART_CFG_VCOM_RX_PIN 6 + + + +// USART0 RTS on PA07 +#define IOT_UART_CFG_VCOM_RTS_PORT gpioPortA +#define IOT_UART_CFG_VCOM_RTS_PIN 7 + +// USART0 CTS on PB00 +#define IOT_UART_CFG_VCOM_CTS_PORT gpioPortB +#define IOT_UART_CFG_VCOM_CTS_PIN 0 + +// [USART_IOT_UART_CFG_VCOM]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_UART_CFG_VCOM_H_ */ diff --git a/hardware/board/config/brd4115a_brd4002a/legacy_ncp_spi_config.h b/hardware/board/config/brd4115a_brd4002a/legacy_ncp_spi_config.h new file mode 100644 index 00000000000..3ee852156eb --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PC09 +#define LEGACY_NCP_SPI_CS_PORT gpioPortC +#define LEGACY_NCP_SPI_CS_PIN 9 + +// [USART_LEGACY_NCP_SPI]$ + +// LEGACY_NCP_SPI_HOST_INT +// $[GPIO_LEGACY_NCP_SPI_HOST_INT] +#define LEGACY_NCP_SPI_HOST_INT_PORT gpioPortB +#define LEGACY_NCP_SPI_HOST_INT_PIN 3 + +// [GPIO_LEGACY_NCP_SPI_HOST_INT]$ + +// LEGACY_NCP_SPI_WAKE_INT +// $[GPIO_LEGACY_NCP_SPI_WAKE_INT] +#define LEGACY_NCP_SPI_WAKE_INT_PORT gpioPortB +#define LEGACY_NCP_SPI_WAKE_INT_PIN 1 + +// [GPIO_LEGACY_NCP_SPI_WAKE_INT]$ +// <<< sl:end pin_tool >>> + +#endif // SL_SPIDRV_EXP_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_board_control_config.h b/hardware/board/config/brd4115a_brd4002a/sl_board_control_config.h new file mode 100644 index 00000000000..2490f6cfed5 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_board_control_config.h @@ -0,0 +1,56 @@ +/***************************************************************************//** + * @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 + +// 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 gpioPortD +#define SL_BOARD_ENABLE_VCOM_PIN 5 +// [GPIO_SL_BOARD_ENABLE_VCOM]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_BOARD_CONTROL_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_spi_eusart_exp_config.h b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_spi_eusart_exp_config.h new file mode 100644 index 00000000000..b4d2aebc09b --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_spi_eusart_exp_config.h @@ -0,0 +1,94 @@ +/***************************************************************************//** + * @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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_SPI_EUSART_EXP_SECONDARY_CONFIG_H +#define SL_CPC_DRV_SPI_EUSART_EXP_SECONDARY_CONFIG_H +#include "spidrv.h" + +// CPC-Secondary SPI Driver Configuration + +// Number of frame that can be queued in the driver receive queue +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_RX_QUEUE_SIZE 10 + +// Number of frame that can be queued in the driver transmit queue +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_TX_QUEUE_SIZE 10 + +// SPI bit rate +// Default: 1000000 +#define SL_CPC_DRV_SPI_EXP_BITRATE 1000000 + +// Chip Select Interrupt Number on Falling Edge +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_CS_FALLING_EDGE_INT_NO 8 + +// Chip Select Interrupt Number on Rising Edge +// Default: 11 +#define SL_CPC_DRV_SPI_EXP_CS_RISING_EDGE_INT_NO 9 +// + +// <<< 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 gpioPortB +#define SL_CPC_DRV_SPI_EXP_RX_IRQ_PIN 3 + +// [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 PC09 +#define SL_CPC_DRV_SPI_EXP_CS_PORT gpioPortC +#define SL_CPC_DRV_SPI_EXP_CS_PIN 9 + +// [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/brd4115a_brd4002a/sl_cpc_drv_secondary_spi_usart_exp_config.h b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_spi_usart_exp_config.h new file mode 100644 index 00000000000..b6a70036116 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_spi_usart_exp_config.h @@ -0,0 +1,94 @@ +/***************************************************************************//** + * @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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_SPI_USART_EXP_SECONDARY_CONFIG_H +#define SL_CPC_DRV_SPI_USART_EXP_SECONDARY_CONFIG_H +#include "spidrv.h" + +// CPC-Secondary SPI Driver Configuration + +// Number of frame that can be queued in the driver receive queue +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_RX_QUEUE_SIZE 10 + +// Number of frame that can be queued in the driver transmit queue +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_TX_QUEUE_SIZE 10 + +// SPI bit rate +// Default: 1000000 +#define SL_CPC_DRV_SPI_EXP_BITRATE 1000000 + +// Chip Select Interrupt Number on Falling Edge +// Default: 10 +#define SL_CPC_DRV_SPI_EXP_CS_FALLING_EDGE_INT_NO 8 + +// Chip Select Interrupt Number on Rising Edge +// Default: 11 +#define SL_CPC_DRV_SPI_EXP_CS_RISING_EDGE_INT_NO 9 +// + +// <<< 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 gpioPortB +#define SL_CPC_DRV_SPI_EXP_RX_IRQ_PIN 3 + +// [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 PC09 +#define SL_CPC_DRV_SPI_EXP_CS_PORT gpioPortC +#define SL_CPC_DRV_SPI_EXP_CS_PIN 9 + +// [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/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_eusart_exp_config.h b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_eusart_exp_config.h new file mode 100644 index 00000000000..fc5ae490cdc --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_eusart_exp_config.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief CPC EUSART 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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_UART_EUSART_EXP_SECONDARY_CONFIG_H +#define SL_CPC_DRV_UART_EUSART_EXP_SECONDARY_CONFIG_H + +// CPC - Secondary 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 PC09 +#define SL_CPC_DRV_UART_EXP_RTS_PORT gpioPortC +#define SL_CPC_DRV_UART_EXP_RTS_PIN 9 + +// [EUSART_SL_CPC_DRV_UART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_CPC_DRV_UART_EXP_SECONDARY_CONFIG_H */ diff --git a/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_eusart_vcom_config.h b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_eusart_vcom_config.h new file mode 100644 index 00000000000..7d35a7ccb50 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_eusart_vcom_config.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief CPC EUSART 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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_UART_EUSART_VCOM_SECONDARY_CONFIG_H +#define SL_CPC_DRV_UART_EUSART_VCOM_SECONDARY_CONFIG_H + +// CPC - Secondary 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 PA05 +#define SL_CPC_DRV_UART_VCOM_TX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_TX_PIN 5 + +// EUSART0 RX on PA06 +#define SL_CPC_DRV_UART_VCOM_RX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_RX_PIN 6 + +// EUSART0 CTS on PB00 +#define SL_CPC_DRV_UART_VCOM_CTS_PORT gpioPortB +#define SL_CPC_DRV_UART_VCOM_CTS_PIN 0 + +// EUSART0 RTS on PA07 +#define SL_CPC_DRV_UART_VCOM_RTS_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_RTS_PIN 7 + +// [EUSART_SL_CPC_DRV_UART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_CPC_DRV_UART_VCOM_SECONDARY_CONFIG_H */ diff --git a/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_usart_exp_config.h b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_usart_exp_config.h new file mode 100644 index 00000000000..bb577033f23 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_usart_exp_config.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief CPC UART 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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_UART_USART_EXP_SECONDARY_CONFIG_H +#define SL_CPC_DRV_UART_USART_EXP_SECONDARY_CONFIG_H + +// CPC - Secondary 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 PC09 +#define SL_CPC_DRV_UART_EXP_RTS_PORT gpioPortC +#define SL_CPC_DRV_UART_EXP_RTS_PIN 9 + +// [USART_SL_CPC_DRV_UART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_CPC_DRV_UART_EXP_SECONDARY_CONFIG_H */ diff --git a/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_usart_vcom_config.h b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_usart_vcom_config.h new file mode 100644 index 00000000000..703289aee48 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_cpc_drv_secondary_uart_usart_vcom_config.h @@ -0,0 +1,84 @@ +/***************************************************************************//** + * @file + * @brief CPC UART 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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_UART_USART_VCOM_SECONDARY_CONFIG_H +#define SL_CPC_DRV_UART_USART_VCOM_SECONDARY_CONFIG_H + +// CPC - Secondary 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 PA05 +#define SL_CPC_DRV_UART_VCOM_TX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_CPC_DRV_UART_VCOM_RX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_RX_PIN 6 + +// USART0 CTS on PB00 +#define SL_CPC_DRV_UART_VCOM_CTS_PORT gpioPortB +#define SL_CPC_DRV_UART_VCOM_CTS_PIN 0 + +// USART0 RTS on PA07 +#define SL_CPC_DRV_UART_VCOM_RTS_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_RTS_PIN 7 + +// [USART_SL_CPC_DRV_UART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_CPC_DRV_UART_VCOM_SECONDARY_CONFIG_H */ diff --git a/hardware/board/config/brd4115a_brd4002a/sl_device_init_hfxo_config.h b/hardware/board/config/brd4115a_brd4002a/sl_device_init_hfxo_config.h new file mode 100644 index 00000000000..c3dc821a7b6 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_device_init_hfxo_config.h @@ -0,0 +1,53 @@ +/***************************************************************************//** + * @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 + +// CTUNE <0-255> +// Default: 140 +#define SL_DEVICE_INIT_HFXO_CTUNE 105 + +// <<< end of configuration section >>> + +#endif // SL_DEVICE_INIT_HFXO_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_device_init_lfxo_config.h b/hardware/board/config/brd4115a_brd4002a/sl_device_init_lfxo_config.h new file mode 100644 index 00000000000..ec8b1faa1f2 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_device_init_lfxo_config.h @@ -0,0 +1,66 @@ +/***************************************************************************//** + * @file + * @brief DEVICE_INIT_LFXO 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_LFXO_CONFIG_H +#define SL_DEVICE_INIT_LFXO_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Mode +// +// Crystal oscillator +// AC-coupled buffer +// External digital clock +// Default: cmuLfxoOscMode_Crystal +#define SL_DEVICE_INIT_LFXO_MODE cmuLfxoOscMode_Crystal + +// CTUNE <0-127> +// Default: 63 +#define SL_DEVICE_INIT_LFXO_CTUNE 42 + +// LFXO precision in PPM <0-65535> +// Default: 500 +#define SL_DEVICE_INIT_LFXO_PRECISION 100 + +// Startup Timeout Delay +// +// 2 cycles +// 256 cycles +// 1K cycles +// 2K cycles +// 4K cycles +// 8K cycles +// 16K cycles +// 32K cycles +// Default: cmuLfxoStartupDelay_4KCycles +#define SL_DEVICE_INIT_LFXO_TIMEOUT cmuLfxoStartupDelay_4KCycles +// <<< end of configuration section >>> + +#endif // SL_DEVICE_INIT_LFXO_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_iostream_eusart_exp_config.h b/hardware/board/config/brd4115a_brd4002a/sl_iostream_eusart_exp_config.h new file mode 100644 index 00000000000..6b39561f06d --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 EUSART1 +#define SL_IOSTREAM_EUSART_EXP_PERIPHERAL_NO 1 + +// EUSART1 TX on PA05 +#define SL_IOSTREAM_EUSART_EXP_TX_PORT gpioPortA +#define SL_IOSTREAM_EUSART_EXP_TX_PIN 5 + +// EUSART1 RX on PA06 +#define SL_IOSTREAM_EUSART_EXP_RX_PORT gpioPortA +#define SL_IOSTREAM_EUSART_EXP_RX_PIN 6 + + + +// [EUSART_SL_IOSTREAM_EUSART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif diff --git a/hardware/board/config/brd4115a_brd4002a/sl_iostream_eusart_vcom_config.h b/hardware/board/config/brd4115a_brd4002a/sl_iostream_eusart_vcom_config.h new file mode 100644 index 00000000000..05b884847e0 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PA05 +#define SL_IOSTREAM_EUSART_VCOM_TX_PORT gpioPortA +#define SL_IOSTREAM_EUSART_VCOM_TX_PIN 5 + +// EUSART0 RX on PA06 +#define SL_IOSTREAM_EUSART_VCOM_RX_PORT gpioPortA +#define SL_IOSTREAM_EUSART_VCOM_RX_PIN 6 + +// EUSART0 CTS on PB00 +#define SL_IOSTREAM_EUSART_VCOM_CTS_PORT gpioPortB +#define SL_IOSTREAM_EUSART_VCOM_CTS_PIN 0 + +// EUSART0 RTS on PA07 +#define SL_IOSTREAM_EUSART_VCOM_RTS_PORT gpioPortA +#define SL_IOSTREAM_EUSART_VCOM_RTS_PIN 7 + +// [EUSART_SL_IOSTREAM_EUSART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif diff --git a/hardware/board/config/brd4115a_brd4002a/sl_iostream_usart_exp_config.h b/hardware/board/config/brd4115a_brd4002a/sl_iostream_usart_exp_config.h new file mode 100644 index 00000000000..185653d9e7c --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PA05 +#define SL_IOSTREAM_USART_EXP_TX_PORT gpioPortA +#define SL_IOSTREAM_USART_EXP_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_IOSTREAM_USART_EXP_RX_PORT gpioPortA +#define SL_IOSTREAM_USART_EXP_RX_PIN 6 + +// USART0 CTS on PB00 +#define SL_IOSTREAM_USART_EXP_CTS_PORT gpioPortB +#define SL_IOSTREAM_USART_EXP_CTS_PIN 0 + +// USART0 RTS on PA07 +#define SL_IOSTREAM_USART_EXP_RTS_PORT gpioPortA +#define SL_IOSTREAM_USART_EXP_RTS_PIN 7 + +// [USART_SL_IOSTREAM_USART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif diff --git a/hardware/board/config/brd4115a_brd4002a/sl_iostream_usart_vcom_config.h b/hardware/board/config/brd4115a_brd4002a/sl_iostream_usart_vcom_config.h new file mode 100644 index 00000000000..654c1c9449f --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PA05 +#define SL_IOSTREAM_USART_VCOM_TX_PORT gpioPortA +#define SL_IOSTREAM_USART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_IOSTREAM_USART_VCOM_RX_PORT gpioPortA +#define SL_IOSTREAM_USART_VCOM_RX_PIN 6 + +// USART0 CTS on PB00 +#define SL_IOSTREAM_USART_VCOM_CTS_PORT gpioPortB +#define SL_IOSTREAM_USART_VCOM_CTS_PIN 0 + +// USART0 RTS on PA07 +#define SL_IOSTREAM_USART_VCOM_RTS_PORT gpioPortA +#define SL_IOSTREAM_USART_VCOM_RTS_PIN 7 + +// [USART_SL_IOSTREAM_USART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif diff --git a/hardware/board/config/brd4115a_brd4002a/sl_mx25_flash_shutdown_eusart_config.h b/hardware/board/config/brd4115a_brd4002a/sl_mx25_flash_shutdown_eusart_config.h new file mode 100644 index 00000000000..3b7337e0bfc --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_mx25_flash_shutdown_eusart_config.h @@ -0,0 +1,51 @@ +/***************************************************************************//** + * @file + * @brief SL_MX25_FLASH_SHUTDOWN_USART Config + ******************************************************************************* + * # License + * Copyright 2020 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 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 6 + +// [GPIO_SL_MX25_FLASH_SHUTDOWN_CS]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_MX25_FLASH_SHUTDOWN_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_mx25_flash_shutdown_usart_config.h b/hardware/board/config/brd4115a_brd4002a/sl_mx25_flash_shutdown_usart_config.h new file mode 100644 index 00000000000..f3e76b076cd --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_mx25_flash_shutdown_usart_config.h @@ -0,0 +1,51 @@ +/***************************************************************************//** + * @file + * @brief SL_MX25_FLASH_SHUTDOWN_USART Config + ******************************************************************************* + * # License + * Copyright 2020 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 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 6 + +// [GPIO_SL_MX25_FLASH_SHUTDOWN_CS]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_MX25_FLASH_SHUTDOWN_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_ncp_spidrv_usart_config.h b/hardware/board/config/brd4115a_brd4002a/sl_ncp_spidrv_usart_config.h new file mode 100644 index 00000000000..152793cd63a --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 8 + +// Chip Select Interrupt Number on Rising Edge +// Default: 9 +#define SL_NCP_SPIDRV_USART_CS_RISING_EDGE_INT_NO 9 +// + +// <<< 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 gpioPortB +#define SL_NCP_SPIDRV_USART_HOST_INT_PIN 3 + +// [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 PC09 +#define SL_NCP_SPIDRV_USART_CS_PORT gpioPortC +#define SL_NCP_SPIDRV_USART_CS_PIN 9 + +// [USART_SL_NCP_SPIDRV_USART]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_NCP_SPIDRV_USART_CONFIG_H */ diff --git a/hardware/board/config/brd4115a_brd4002a/sl_pwm_init_led0_config.h b/hardware/board/config/brd4115a_brd4002a/sl_pwm_init_led0_config.h new file mode 100644 index 00000000000..5443e190e36 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_pwm_init_led0_config.h @@ -0,0 +1,62 @@ +/***************************************************************************//** + * @file + * @brief PWM Driver + ******************************************************************************* + * # License + * Copyright 2022 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 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_LOW +// 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 PB01 +#define SL_PWM_LED0_OUTPUT_PORT gpioPortB +#define SL_PWM_LED0_OUTPUT_PIN 1 + +// [TIMER_SL_PWM_LED0]$ + +// <<< sl:end pin_tool >>> + +#ifdef __cplusplus +} +#endif + +#endif // PWM_INIT_LED0_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_pwm_init_led1_config.h b/hardware/board/config/brd4115a_brd4002a/sl_pwm_init_led1_config.h new file mode 100644 index 00000000000..73f350383ee --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_pwm_init_led1_config.h @@ -0,0 +1,62 @@ +/***************************************************************************//** + * @file + * @brief PWM Driver + ******************************************************************************* + * # License + * Copyright 2022 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 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_LOW +// 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 PB03 +#define SL_PWM_LED1_OUTPUT_PORT gpioPortB +#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/brd4115a_brd4002a/sl_rail_util_pa_config.h b/hardware/board/config/brd4115a_brd4002a/sl_rail_util_pa_config.h new file mode 100644 index 00000000000..9dcab3f9667 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_rail_util_pa_config.h @@ -0,0 +1,81 @@ +/***************************************************************************//** + * @file + * @brief Power Amplifier 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_PA_CONFIG_H +#define SL_RAIL_UTIL_PA_CONFIG_H + +#include "rail_types.h" + +// <<< Use Configuration Wizard in Context Menu >>> +// PA configuration + +// Initial PA Power (deci-dBm, 100 = 10.0 dBm) +// Default: 100 +#define SL_RAIL_UTIL_PA_POWER_DECI_DBM 100 + +// PA Ramp Time (microseconds) +// <0-65535:1> +// Default: 10 +#define SL_RAIL_UTIL_PA_RAMP_TIME_US 10 + +// Milli-volts on PA supply pin (PA_VDD) +// <0-65535:1> +// Default: 3300 +#define SL_RAIL_UTIL_PA_VOLTAGE_MV 1800 + +// 2.4 GHz PA Selection +// Highest Possible +// High Power (chip-specific) +// Low Power +// Disable +// Default: RAIL_TX_POWER_MODE_2P4GIG_HIGHEST +#define SL_RAIL_UTIL_PA_SELECTION_2P4GHZ RAIL_TX_POWER_MODE_2P4GIG_HIGHEST + +// Sub-1 GHz PA Selection +// Disable +// Default: RAIL_TX_POWER_MODE_NONE +#define SL_RAIL_UTIL_PA_SELECTION_SUBGHZ RAIL_TX_POWER_MODE_NONE + +// Header file containing custom PA curves +// Default: "pa_curves_efr32.h" +#define SL_RAIL_UTIL_PA_CURVE_HEADER "pa_curves_efr32.h" + +// Header file containing PA curve types +// Default: "pa_curve_types_efr32.h" +#define SL_RAIL_UTIL_PA_CURVE_TYPES "pa_curve_types_efr32.h" + +// Enable PA Calibration +// Default: 0 +#define SL_RAIL_UTIL_PA_CALIBRATION_ENABLE 0 + +// +// <<< end of configuration section >>> + +#endif // SL_RAIL_UTIL_PA_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_rail_util_pti_config.h b/hardware/board/config/brd4115a_brd4002a/sl_rail_util_pti_config.h new file mode 100644 index 00000000000..90431d79360 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/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 PC04 +#define SL_RAIL_UTIL_PTI_DOUT_PORT gpioPortC +#define SL_RAIL_UTIL_PTI_DOUT_PIN 4 + +// PTI DFRAME on PC05 +#define SL_RAIL_UTIL_PTI_DFRAME_PORT gpioPortC +#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/brd4115a_brd4002a/sl_simple_button_btn0_config.h b/hardware/board/config/brd4115a_brd4002a/sl_simple_button_btn0_config.h new file mode 100644 index 00000000000..e529b9cbe9e --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_simple_button_btn0_config.h @@ -0,0 +1,45 @@ +/***************************************************************************//** + * @file + * @brief Simple Button Driver User 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 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/brd4115a_brd4002a/sl_simple_button_btn1_config.h b/hardware/board/config/brd4115a_brd4002a/sl_simple_button_btn1_config.h new file mode 100644 index 00000000000..3a029835729 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_simple_button_btn1_config.h @@ -0,0 +1,45 @@ +/***************************************************************************//** + * @file + * @brief Simple Button Driver User 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 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/brd4115a_brd4002a/sl_simple_led_led0_config.h b/hardware/board/config/brd4115a_brd4002a/sl_simple_led_led0_config.h new file mode 100644 index 00000000000..e4cbad51b9d --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_simple_led_led0_config.h @@ -0,0 +1,44 @@ +/***************************************************************************//** + * @file + * @brief Simple Led Driver Configuration + ******************************************************************************* + * # 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 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_LOW +// 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 1 + +// [GPIO_SL_SIMPLE_LED_LED0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_SIMPLE_LED_LED0_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_simple_led_led1_config.h b/hardware/board/config/brd4115a_brd4002a/sl_simple_led_led1_config.h new file mode 100644 index 00000000000..6ed761fe590 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_simple_led_led1_config.h @@ -0,0 +1,44 @@ +/***************************************************************************//** + * @file + * @brief Simple Led Driver Configuration + ******************************************************************************* + * # 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 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_LOW +// 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 gpioPortB +#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/brd4115a_brd4002a/sl_spidrv_eusart_exp_config.h b/hardware/board/config/brd4115a_brd4002a/sl_spidrv_eusart_exp_config.h new file mode 100644 index 00000000000..d2788d47598 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_spidrv_eusart_exp_config.h @@ -0,0 +1,89 @@ +/***************************************************************************//** + * @file + * @brief SPIDRV_EUSART 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 SL_SPIDRV_EUSART_EXP_CONFIG_H +#define SL_SPIDRV_EUSART_EXP_CONFIG_H + +#include "spidrv.h" + +// <<< Use Configuration Wizard in Context Menu >>> +// SPIDRV settings + +// SPI bitrate +// Default: 1000000 +#define SL_SPIDRV_EUSART_EXP_BITRATE 1000000 + +// SPI frame length <7-16> +// Default: 8 +#define SL_SPIDRV_EUSART_EXP_FRAME_LENGTH 8 + +// SPI mode +// Master +// Slave +#define SL_SPIDRV_EUSART_EXP_TYPE spidrvMaster + +// Bit order on the SPI bus +// LSB transmitted first +// MSB transmitted first +#define SL_SPIDRV_EUSART_EXP_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_SPIDRV_EUSART_EXP_CLOCK_MODE spidrvClockMode0 + +// SPI master chip select (CS) control scheme. +// CS controlled by the SPI driver +// CS controlled by the application +#define SL_SPIDRV_EUSART_EXP_CS_CONTROL spidrvCsControlAuto + +// SPI slave transfer start scheme +// Transfer starts immediately +// Transfer starts when the bus is idle (CS deasserted) +// Only applies if instance type is spidrvSlave +#define SL_SPIDRV_EUSART_EXP_SLAVE_START_MODE spidrvSlaveStartImmediate +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_SPIDRV_EUSART_EXP +// $[EUSART_SL_SPIDRV_EUSART_EXP] +#define SL_SPIDRV_EUSART_EXP_PERIPHERAL EUSART1 +#define SL_SPIDRV_EUSART_EXP_PERIPHERAL_NO 1 + +// EUSART1 TX on PC01 +#define SL_SPIDRV_EUSART_EXP_TX_PORT gpioPortC +#define SL_SPIDRV_EUSART_EXP_TX_PIN 1 + +// EUSART1 RX on PC02 +#define SL_SPIDRV_EUSART_EXP_RX_PORT gpioPortC +#define SL_SPIDRV_EUSART_EXP_RX_PIN 2 + +// EUSART1 SCLK on PC03 +#define SL_SPIDRV_EUSART_EXP_SCLK_PORT gpioPortC +#define SL_SPIDRV_EUSART_EXP_SCLK_PIN 3 + +// EUSART1 CS on PC09 +#define SL_SPIDRV_EUSART_EXP_CS_PORT gpioPortC +#define SL_SPIDRV_EUSART_EXP_CS_PIN 9 + +// [EUSART_SL_SPIDRV_EUSART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif // SL_SPIDRV_EUSART_EXP_CONFIG_HEUSART_ diff --git a/hardware/board/config/brd4115a_brd4002a/sl_spidrv_exp_config.h b/hardware/board/config/brd4115a_brd4002a/sl_spidrv_exp_config.h new file mode 100644 index 00000000000..79cebb4c954 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_spidrv_exp_config.h @@ -0,0 +1,89 @@ +/***************************************************************************//** + * @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 SL_SPIDRV_EXP_CONFIG_H +#define SL_SPIDRV_EXP_CONFIG_H + +#include "spidrv.h" + +// <<< Use Configuration Wizard in Context Menu >>> +// SPIDRV settings + +// SPI bitrate +// Default: 1000000 +#define SL_SPIDRV_EXP_BITRATE 1000000 + +// SPI frame length <4-16> +// Default: 8 +#define SL_SPIDRV_EXP_FRAME_LENGTH 8 + +// SPI mode +// Master +// Slave +#define SL_SPIDRV_EXP_TYPE spidrvMaster + +// Bit order on the SPI bus +// LSB transmitted first +// MSB transmitted first +#define SL_SPIDRV_EXP_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_SPIDRV_EXP_CLOCK_MODE spidrvClockMode0 + +// SPI master chip select (CS) control scheme. +// CS controlled by the SPI driver +// CS controlled by the application +#define SL_SPIDRV_EXP_CS_CONTROL spidrvCsControlAuto + +// SPI slave transfer start scheme +// Transfer starts immediately +// Transfer starts when the bus is idle (CS deasserted) +// Only applies if instance type is spidrvSlave +#define SL_SPIDRV_EXP_SLAVE_START_MODE spidrvSlaveStartImmediate +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_SPIDRV_EXP +// $[USART_SL_SPIDRV_EXP] +#define SL_SPIDRV_EXP_PERIPHERAL USART0 +#define SL_SPIDRV_EXP_PERIPHERAL_NO 0 + +// USART0 TX on PC01 +#define SL_SPIDRV_EXP_TX_PORT gpioPortC +#define SL_SPIDRV_EXP_TX_PIN 1 + +// USART0 RX on PC02 +#define SL_SPIDRV_EXP_RX_PORT gpioPortC +#define SL_SPIDRV_EXP_RX_PIN 2 + +// USART0 CLK on PC03 +#define SL_SPIDRV_EXP_CLK_PORT gpioPortC +#define SL_SPIDRV_EXP_CLK_PIN 3 + +// USART0 CS on PC09 +#define SL_SPIDRV_EXP_CS_PORT gpioPortC +#define SL_SPIDRV_EXP_CS_PIN 9 + +// [USART_SL_SPIDRV_EXP]$ +// <<< sl:end pin_tool >>> + +#endif // SL_SPIDRV_EXP_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_spidrv_usart_exp_config.h b/hardware/board/config/brd4115a_brd4002a/sl_spidrv_usart_exp_config.h new file mode 100644 index 00000000000..500144498ab --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_spidrv_usart_exp_config.h @@ -0,0 +1,89 @@ +/***************************************************************************//** + * @file + * @brief SPIDRV_USART 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 SL_SPIDRV_USART_EXP_CONFIG_H +#define SL_SPIDRV_USART_EXP_CONFIG_H + +#include "spidrv.h" + +// <<< Use Configuration Wizard in Context Menu >>> +// SPIDRV settings + +// SPI bitrate +// Default: 1000000 +#define SL_SPIDRV_USART_EXP_BITRATE 1000000 + +// SPI frame length <4-16> +// Default: 8 +#define SL_SPIDRV_USART_EXP_FRAME_LENGTH 8 + +// SPI mode +// Master +// Slave +#define SL_SPIDRV_USART_EXP_TYPE spidrvMaster + +// Bit order on the SPI bus +// LSB transmitted first +// MSB transmitted first +#define SL_SPIDRV_USART_EXP_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_SPIDRV_USART_EXP_CLOCK_MODE spidrvClockMode0 + +// SPI master chip select (CS) control scheme. +// CS controlled by the SPI driver +// CS controlled by the application +#define SL_SPIDRV_USART_EXP_CS_CONTROL spidrvCsControlAuto + +// SPI slave transfer start scheme +// Transfer starts immediately +// Transfer starts when the bus is idle (CS deasserted) +// Only applies if instance type is spidrvSlave +#define SL_SPIDRV_USART_EXP_SLAVE_START_MODE spidrvSlaveStartImmediate +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_SPIDRV_USART_EXP +// $[USART_SL_SPIDRV_USART_EXP] +#define SL_SPIDRV_USART_EXP_PERIPHERAL USART0 +#define SL_SPIDRV_USART_EXP_PERIPHERAL_NO 0 + +// USART0 TX on PC01 +#define SL_SPIDRV_USART_EXP_TX_PORT gpioPortC +#define SL_SPIDRV_USART_EXP_TX_PIN 1 + +// USART0 RX on PC02 +#define SL_SPIDRV_USART_EXP_RX_PORT gpioPortC +#define SL_SPIDRV_USART_EXP_RX_PIN 2 + +// USART0 CLK on PC03 +#define SL_SPIDRV_USART_EXP_CLK_PORT gpioPortC +#define SL_SPIDRV_USART_EXP_CLK_PIN 3 + +// USART0 CS on PC09 +#define SL_SPIDRV_USART_EXP_CS_PORT gpioPortC +#define SL_SPIDRV_USART_EXP_CS_PIN 9 + +// [USART_SL_SPIDRV_USART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif // SL_SPIDRV_USART_EXP_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_eusart_exp_config.h b/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_eusart_exp_config.h new file mode 100644 index 00000000000..e193e23ad46 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_eusart_exp_config.h @@ -0,0 +1,100 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV_EUSART 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 SL_UARTDRV_EUSART_EXP_CONFIG_H +#define SL_UARTDRV_EUSART_EXP_CONFIG_H + +#include "em_eusart.h" +// <<< Use Configuration Wizard in Context Menu >>> + +// EUSART settings +// Baud rate +// Default: 115200 +#define SL_UARTDRV_EUSART_EXP_BAUDRATE 115200 + +// Low frequency mode +// True +// False +#define SL_UARTDRV_EUSART_EXP_LF_MODE false + +// Parity mode to use +// No Parity +// Even parity +// Odd parity +// Default: eusartNoParity +#define SL_UARTDRV_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_UARTDRV_EUSART_EXP_STOP_BITS eusartStopbits1 + +// Flow control method +// None +// Software XON/XOFF +// nRTS/nCTS hardware handshake +// UART peripheral controls nRTS/nCTS +// Default: uartdrvFlowControlHw +#define SL_UARTDRV_EUSART_EXP_FLOW_CONTROL_TYPE uartdrvFlowControlNone + +// Oversampling selection +// 16x oversampling +// 8x oversampling +// 6x oversampling +// 4x oversampling +// Oversampling disabled +// Default: eusartOVS16 +#define SL_UARTDRV_EUSART_EXP_OVERSAMPLING eusartOVS16 + +// Majority vote disable for 16x, 8x and 6x oversampling modes +// False +// True +// Default: eusartMajorityVoteEnable +#define SL_UARTDRV_EUSART_EXP_MVDIS eusartMajorityVoteEnable + +// Size of the receive operation queue +// Default: 6 +#define SL_UARTDRV_EUSART_EXP_RX_BUFFER_SIZE 6 + +// Size of the transmit operation queue +// Default: 6 +#define SL_UARTDRV_EUSART_EXP_TX_BUFFER_SIZE 6 +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_UARTDRV_EUSART_EXP +// $[EUSART_SL_UARTDRV_EUSART_EXP] +#define SL_UARTDRV_EUSART_EXP_PERIPHERAL EUSART1 +#define SL_UARTDRV_EUSART_EXP_PERIPHERAL_NO 1 + +// EUSART1 TX on PA05 +#define SL_UARTDRV_EUSART_EXP_TX_PORT gpioPortA +#define SL_UARTDRV_EUSART_EXP_TX_PIN 5 + +// EUSART1 RX on PA06 +#define SL_UARTDRV_EUSART_EXP_RX_PORT gpioPortA +#define SL_UARTDRV_EUSART_EXP_RX_PIN 6 + + + +// [EUSART_SL_UARTDRV_EUSART_EXP]$ +// <<< sl:end pin_tool >>> +#endif // SL_UARTDRV_EUSART_EXP_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_eusart_vcom_config.h b/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_eusart_vcom_config.h new file mode 100644 index 00000000000..716d6eacb22 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_eusart_vcom_config.h @@ -0,0 +1,106 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV_EUSART 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 SL_UARTDRV_EUSART_VCOM_CONFIG_H +#define SL_UARTDRV_EUSART_VCOM_CONFIG_H + +#include "em_eusart.h" +// <<< Use Configuration Wizard in Context Menu >>> + +// EUSART settings +// Baud rate +// Default: 115200 +#define SL_UARTDRV_EUSART_VCOM_BAUDRATE 115200 + +// Low frequency mode +// True +// False +#define SL_UARTDRV_EUSART_VCOM_LF_MODE false + +// Parity mode to use +// No Parity +// Even parity +// Odd parity +// Default: eusartNoParity +#define SL_UARTDRV_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_UARTDRV_EUSART_VCOM_STOP_BITS eusartStopbits1 + +// Flow control method +// None +// Software XON/XOFF +// nRTS/nCTS hardware handshake +// UART peripheral controls nRTS/nCTS +// Default: uartdrvFlowControlHw +#define SL_UARTDRV_EUSART_VCOM_FLOW_CONTROL_TYPE uartdrvFlowControlHwUart + +// Oversampling selection +// 16x oversampling +// 8x oversampling +// 6x oversampling +// 4x oversampling +// Oversampling disabled +// Default: eusartOVS16 +#define SL_UARTDRV_EUSART_VCOM_OVERSAMPLING eusartOVS16 + +// Majority vote disable for 16x, 8x and 6x oversampling modes +// False +// True +// Default: eusartMajorityVoteEnable +#define SL_UARTDRV_EUSART_VCOM_MVDIS eusartMajorityVoteEnable + +// Size of the receive operation queue +// Default: 6 +#define SL_UARTDRV_EUSART_VCOM_RX_BUFFER_SIZE 6 + +// Size of the transmit operation queue +// Default: 6 +#define SL_UARTDRV_EUSART_VCOM_TX_BUFFER_SIZE 6 +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_UARTDRV_EUSART_VCOM +// $[EUSART_SL_UARTDRV_EUSART_VCOM] +#define SL_UARTDRV_EUSART_VCOM_PERIPHERAL EUSART0 +#define SL_UARTDRV_EUSART_VCOM_PERIPHERAL_NO 0 + +// EUSART0 TX on PA05 +#define SL_UARTDRV_EUSART_VCOM_TX_PORT gpioPortA +#define SL_UARTDRV_EUSART_VCOM_TX_PIN 5 + +// EUSART0 RX on PA06 +#define SL_UARTDRV_EUSART_VCOM_RX_PORT gpioPortA +#define SL_UARTDRV_EUSART_VCOM_RX_PIN 6 + +// EUSART0 CTS on PB00 +#define SL_UARTDRV_EUSART_VCOM_CTS_PORT gpioPortB +#define SL_UARTDRV_EUSART_VCOM_CTS_PIN 0 + +// EUSART0 RTS on PA07 +#define SL_UARTDRV_EUSART_VCOM_RTS_PORT gpioPortA +#define SL_UARTDRV_EUSART_VCOM_RTS_PIN 7 + +// [EUSART_SL_UARTDRV_EUSART_VCOM]$ +// <<< sl:end pin_tool >>> +#endif // SL_UARTDRV_EUSART_VCOM_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_usart_exp_config.h b/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_usart_exp_config.h new file mode 100644 index 00000000000..02662139f31 --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_usart_exp_config.h @@ -0,0 +1,95 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV_USART 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 SL_UARTDRV_USART_EXP_CONFIG_H +#define SL_UARTDRV_USART_EXP_CONFIG_H + +#include "em_usart.h" +// <<< Use Configuration Wizard in Context Menu >>> + +// UART settings +// Baud rate +// Default: 115200 +#define SL_UARTDRV_USART_EXP_BAUDRATE 115200 + +// Parity mode to use +// No Parity +// Even parity +// Odd parity +// Default: usartNoParity +#define SL_UARTDRV_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_UARTDRV_USART_EXP_STOP_BITS usartStopbits1 + +// Flow control method +// None +// Software XON/XOFF +// nRTS/nCTS hardware handshake +// UART peripheral controls nRTS/nCTS +// Default: uartdrvFlowControlHw +#define SL_UARTDRV_USART_EXP_FLOW_CONTROL_TYPE uartdrvFlowControlNone + +// Oversampling selection +// 16x oversampling +// 8x oversampling +// 6x oversampling +// 4x oversampling +// Default: usartOVS16 +#define SL_UARTDRV_USART_EXP_OVERSAMPLING usartOVS4 + +// Majority vote disable for 16x, 8x and 6x oversampling modes +// True +// False +#define SL_UARTDRV_USART_EXP_MVDIS false + +// Size of the receive operation queue +// Default: 6 +#define SL_UARTDRV_USART_EXP_RX_BUFFER_SIZE 6 + +// Size of the transmit operation queue +// Default: 6 +#define SL_UARTDRV_USART_EXP_TX_BUFFER_SIZE 6 + +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_UARTDRV_USART_EXP +// $[USART_SL_UARTDRV_USART_EXP] +#define SL_UARTDRV_USART_EXP_PERIPHERAL USART0 +#define SL_UARTDRV_USART_EXP_PERIPHERAL_NO 0 + +// USART0 TX on PA05 +#define SL_UARTDRV_USART_EXP_TX_PORT gpioPortA +#define SL_UARTDRV_USART_EXP_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_UARTDRV_USART_EXP_RX_PORT gpioPortA +#define SL_UARTDRV_USART_EXP_RX_PIN 6 + + + +// [USART_SL_UARTDRV_USART_EXP]$ +// <<< sl:end pin_tool >>> + +#endif // SL_UARTDRV_USART_EXP_CONFIG_H diff --git a/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_usart_vcom_config.h b/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_usart_vcom_config.h new file mode 100644 index 00000000000..0b246a6449b --- /dev/null +++ b/hardware/board/config/brd4115a_brd4002a/sl_uartdrv_usart_vcom_config.h @@ -0,0 +1,101 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV_USART 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 SL_UARTDRV_USART_VCOM_CONFIG_H +#define SL_UARTDRV_USART_VCOM_CONFIG_H + +#include "em_usart.h" +// <<< Use Configuration Wizard in Context Menu >>> + +// UART settings +// Baud rate +// Default: 115200 +#define SL_UARTDRV_USART_VCOM_BAUDRATE 115200 + +// Parity mode to use +// No Parity +// Even parity +// Odd parity +// Default: usartNoParity +#define SL_UARTDRV_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_UARTDRV_USART_VCOM_STOP_BITS usartStopbits1 + +// Flow control method +// None +// Software XON/XOFF +// nRTS/nCTS hardware handshake +// UART peripheral controls nRTS/nCTS +// Default: uartdrvFlowControlHw +#define SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE uartdrvFlowControlHwUart + +// Oversampling selection +// 16x oversampling +// 8x oversampling +// 6x oversampling +// 4x oversampling +// Default: usartOVS16 +#define SL_UARTDRV_USART_VCOM_OVERSAMPLING usartOVS4 + +// Majority vote disable for 16x, 8x and 6x oversampling modes +// True +// False +#define SL_UARTDRV_USART_VCOM_MVDIS false + +// Size of the receive operation queue +// Default: 6 +#define SL_UARTDRV_USART_VCOM_RX_BUFFER_SIZE 6 + +// Size of the transmit operation queue +// Default: 6 +#define SL_UARTDRV_USART_VCOM_TX_BUFFER_SIZE 6 + +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_UARTDRV_USART_VCOM +// $[USART_SL_UARTDRV_USART_VCOM] +#define SL_UARTDRV_USART_VCOM_PERIPHERAL USART0 +#define SL_UARTDRV_USART_VCOM_PERIPHERAL_NO 0 + +// USART0 TX on PA05 +#define SL_UARTDRV_USART_VCOM_TX_PORT gpioPortA +#define SL_UARTDRV_USART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_UARTDRV_USART_VCOM_RX_PORT gpioPortA +#define SL_UARTDRV_USART_VCOM_RX_PIN 6 + +// USART0 CTS on PB00 +#define SL_UARTDRV_USART_VCOM_CTS_PORT gpioPortB +#define SL_UARTDRV_USART_VCOM_CTS_PIN 0 + +// USART0 RTS on PA07 +#define SL_UARTDRV_USART_VCOM_RTS_PORT gpioPortA +#define SL_UARTDRV_USART_VCOM_RTS_PIN 7 + +// [USART_SL_UARTDRV_USART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif // SL_UARTDRV_USART_VCOM_CONFIG_H diff --git a/hardware/board/config/brd4273a_brd4001a/sl_rail_util_eff_config.h b/hardware/board/config/brd4273a_brd4001a/sl_rail_util_eff_config.h index fcb8e961fdb..4980266b764 100644 --- a/hardware/board/config/brd4273a_brd4001a/sl_rail_util_eff_config.h +++ b/hardware/board/config/brd4273a_brd4001a/sl_rail_util_eff_config.h @@ -69,71 +69,138 @@ // <1..105000:1> // Default: 30000 #define SL_RAIL_UTIL_EFF_BYPASS_DWELL_TIME_MS 30000 -// Coefficient A for FSK sensor voltage curve. Multiplied by 1e7. + +// Coefficient A for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 844 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_A 844 -// Coefficient B for FSK sensor voltage curve. Multiplied by 1e7. +// Default: 574 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_A 574 +// Coefficient B for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -437473 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_B -437473 -// Coefficient C for FSK sensor voltage curve. Multiplied by 1e7. +// Default: -235763 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_B -235763 +// Coefficient C for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 87928015 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_C 87928015 -// Coefficient D for FSK sensor voltage curve. Multiplied by 1e7. +// Default: 38562724 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_C 38562724 +// Coefficient D for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -5063115821 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_D -5063115821L -// Entry 1 measured FSK Output Power for CAL1 (nominally 270 ddBm). +// Default: -1115923360 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_D -1115923360L +// Entry 1 measured FSK ANTV Output Power for CAL1 (nominally 270 ddBm). // <180..350:1> -// Default: 270 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1_DDBM 270 -// Entry 1 measured FSK sensor voltage at CAL1 ddBm, in millivolts. +// Default: 241 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_DDBM 241 +// Entry 1 measured FSK ANTV sensor voltage at CAL1 ddBm, in millivolts. // <1..65535:1> -// Default: 340 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1 340 -// Entry 1 measured FSK Output Power for CAL2 (nominally 290 ddBm). +// Default: 264 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_MV 264 +// Entry 1 measured FSK ANTV Output Power for CAL2 (nominally 290 ddBm). // <180..350:1> -// Default: 290 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2_DDBM 290 -// Entry 1 measured FSK sensor voltage at CAL2 ddBm, in millivolts. +// Default: 291 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_DDBM 291 +// Entry 1 measured FSK ANTV sensor voltage at CAL2 ddBm, in millivolts. // <1..65535:1> -// Default: 423 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2 423 +// Default: 451 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_MV 451 -// Coefficient A for OFDM sensor voltage curve. Multiplied by 1e7. +// Coefficient A for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 844 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_A 844 -// Coefficient B for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: 392 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_A 392 +// Coefficient B for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -437473 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_B -437473 -// Coefficient C for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: -180237 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_B -180237 +// Coefficient C for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 87928015 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_C 87928015 -// Coefficient D for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: 32942736 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_C 32942736 +// Coefficient D for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -5063115821 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_D -5063115821L -// Entry 1 measured OFDM Output Power for CAL1 (nominally 270 ddBm). +// Default: -1097941542 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_D -1097941542L +// Entry 1 measured FSK SAW2 Output Power for CAL1 (nominally 270 ddBm). // <180..350:1> -// Default: 270 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1_DDBM 270 -// Entry 1 measured OFDM sensor voltage at CAL1 ddBm, in millivolts. +// Default: 200 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_DDBM 200 +// Entry 1 measured FSK SAW2 sensor voltage at CAL1 ddBm, in millivolts. // <1..65535:1> -// Default: 450 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1 450 -// Entry 1 measured OFDM Output Power for CAL2 (nominally 290 ddBm). +// Default: 127 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_MV 127 +// Entry 1 measured FSK SAW2 Output Power for CAL2 (nominally 290 ddBm). +// <180..350:1> +// Default: 241 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_DDBM 241 +// Entry 1 measured FSK SAW2 sensor voltage at CAL2 ddBm, in millivolts. +// <1..65535:1> +// Default: 170 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_MV 170 + +// Coefficient A for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 574 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_A 574 +// Coefficient B for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -235763 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_B -235763 +// Coefficient C for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 38562724 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_C 38562724 +// Coefficient D for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -1115923360 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_D -1115923360L +// Entry 1 measured OFDM ANTV Output Power for CAL1 (nominally 270 ddBm). +// <180..350:1> +// Default: 222 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_DDBM 222 +// Entry 1 measured OFDM ANTV sensor voltage at CAL1 ddBm, in millivolts. +// <1..65535:1> +// Default: 249 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_MV 249 +// Entry 2 measured OFDM ANTV Output Power for CAL2 (nominally 290 ddBm). // <180..350:1> // Default: 290 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2_DDBM 290 -// Entry 1 measured OFDM sensor voltage at CAL2 ddBm, in millivolts. +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_DDBM 290 +// Entry 2 measured OFDM ANTV sensor voltage at CAL2 ddBm, in millivolts. +// <1..65535:1> +// Default: 507 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_MV 507 + +// Coefficient A for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 2178 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_A 2178 +// Coefficient B for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -1312415 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_B -1312415 +// Coefficient C for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 271823274 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_C 271823274 +// Coefficient D for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-20000000000..20000000000:1> +// Default: -17876500819 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_D -17876500819L +// Entry 1 measured OFDM SAW2 Output Power for CAL1 (nominally 270 ddBm). +// <180..350:1> +// Default: 250 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_DDBM 250 +// Entry 1 measured OFDM SAW2 sensor voltage at CAL1 ddBm, in millivolts. +// <1..65535:1> +// Default: 208 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_MV 208 +// Entry 1 measured OFDM SAW2 Output Power for CAL2 (nominally 290 ddBm). +// <180..350:1> +// Default: 289 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_DDBM 289 +// Entry 1 measured OFDM SAW2 sensor voltage at CAL2 ddBm, in millivolts. // <1..65535:1> -// Default: 544 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2 544 +// Default: 366 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_MV 366 // Select CLPC mode // Disable CLPC power control. Flare modes will only be transmit/receive. @@ -143,18 +210,10 @@ // Allow full power control // Default: RAIL_EFF_CLPC_MODE_CHANGE #define SL_RAIL_UTIL_EFF_CLPC_ENABLE RAIL_EFF_CLPC_MODE_CHANGE -// Maximum continuous transfer power in dBm -// <20..30:1> -// Default: 20 -#define RAIL_UTIL_EFF_MAX_TX_CONTINUOUS_POWER_DBM 20 -// Maximum transmit duty cycle as a percentage -// <10..100:1> -// Default: 50 -#define RAIL_UTIL_EFF_MAX_TX_DUTY_CYCLE 50 -// Temperature of EFF above which transmit is not allowed, in degrees Kelvin -// <1..398:1> -// Default: 373 -#define SL_RAIL_UTIL_EFF_TEMPERATURE_THRESHOLD_EFF_DEGREES_K 373 +// Temperature of EFF above which transmit is not allowed, in degrees Kelvin. A security margin is subtracted before using it. +// <1..383:1> +// Default: 383 +#define SL_RAIL_UTIL_EFF_TEMPERATURE_THRESHOLD_EFF_DEGREES_K 383 // // <<< end of configuration section >>> diff --git a/hardware/board/config/brd4273a_brd4002a/sl_rail_util_eff_config.h b/hardware/board/config/brd4273a_brd4002a/sl_rail_util_eff_config.h index fcb8e961fdb..4980266b764 100644 --- a/hardware/board/config/brd4273a_brd4002a/sl_rail_util_eff_config.h +++ b/hardware/board/config/brd4273a_brd4002a/sl_rail_util_eff_config.h @@ -69,71 +69,138 @@ // <1..105000:1> // Default: 30000 #define SL_RAIL_UTIL_EFF_BYPASS_DWELL_TIME_MS 30000 -// Coefficient A for FSK sensor voltage curve. Multiplied by 1e7. + +// Coefficient A for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 844 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_A 844 -// Coefficient B for FSK sensor voltage curve. Multiplied by 1e7. +// Default: 574 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_A 574 +// Coefficient B for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -437473 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_B -437473 -// Coefficient C for FSK sensor voltage curve. Multiplied by 1e7. +// Default: -235763 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_B -235763 +// Coefficient C for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 87928015 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_C 87928015 -// Coefficient D for FSK sensor voltage curve. Multiplied by 1e7. +// Default: 38562724 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_C 38562724 +// Coefficient D for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -5063115821 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_D -5063115821L -// Entry 1 measured FSK Output Power for CAL1 (nominally 270 ddBm). +// Default: -1115923360 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_D -1115923360L +// Entry 1 measured FSK ANTV Output Power for CAL1 (nominally 270 ddBm). // <180..350:1> -// Default: 270 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1_DDBM 270 -// Entry 1 measured FSK sensor voltage at CAL1 ddBm, in millivolts. +// Default: 241 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_DDBM 241 +// Entry 1 measured FSK ANTV sensor voltage at CAL1 ddBm, in millivolts. // <1..65535:1> -// Default: 340 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1 340 -// Entry 1 measured FSK Output Power for CAL2 (nominally 290 ddBm). +// Default: 264 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_MV 264 +// Entry 1 measured FSK ANTV Output Power for CAL2 (nominally 290 ddBm). // <180..350:1> -// Default: 290 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2_DDBM 290 -// Entry 1 measured FSK sensor voltage at CAL2 ddBm, in millivolts. +// Default: 291 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_DDBM 291 +// Entry 1 measured FSK ANTV sensor voltage at CAL2 ddBm, in millivolts. // <1..65535:1> -// Default: 423 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2 423 +// Default: 451 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_MV 451 -// Coefficient A for OFDM sensor voltage curve. Multiplied by 1e7. +// Coefficient A for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 844 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_A 844 -// Coefficient B for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: 392 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_A 392 +// Coefficient B for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -437473 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_B -437473 -// Coefficient C for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: -180237 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_B -180237 +// Coefficient C for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 87928015 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_C 87928015 -// Coefficient D for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: 32942736 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_C 32942736 +// Coefficient D for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -5063115821 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_D -5063115821L -// Entry 1 measured OFDM Output Power for CAL1 (nominally 270 ddBm). +// Default: -1097941542 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_D -1097941542L +// Entry 1 measured FSK SAW2 Output Power for CAL1 (nominally 270 ddBm). // <180..350:1> -// Default: 270 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1_DDBM 270 -// Entry 1 measured OFDM sensor voltage at CAL1 ddBm, in millivolts. +// Default: 200 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_DDBM 200 +// Entry 1 measured FSK SAW2 sensor voltage at CAL1 ddBm, in millivolts. // <1..65535:1> -// Default: 450 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1 450 -// Entry 1 measured OFDM Output Power for CAL2 (nominally 290 ddBm). +// Default: 127 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_MV 127 +// Entry 1 measured FSK SAW2 Output Power for CAL2 (nominally 290 ddBm). +// <180..350:1> +// Default: 241 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_DDBM 241 +// Entry 1 measured FSK SAW2 sensor voltage at CAL2 ddBm, in millivolts. +// <1..65535:1> +// Default: 170 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_MV 170 + +// Coefficient A for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 574 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_A 574 +// Coefficient B for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -235763 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_B -235763 +// Coefficient C for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 38562724 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_C 38562724 +// Coefficient D for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -1115923360 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_D -1115923360L +// Entry 1 measured OFDM ANTV Output Power for CAL1 (nominally 270 ddBm). +// <180..350:1> +// Default: 222 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_DDBM 222 +// Entry 1 measured OFDM ANTV sensor voltage at CAL1 ddBm, in millivolts. +// <1..65535:1> +// Default: 249 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_MV 249 +// Entry 2 measured OFDM ANTV Output Power for CAL2 (nominally 290 ddBm). // <180..350:1> // Default: 290 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2_DDBM 290 -// Entry 1 measured OFDM sensor voltage at CAL2 ddBm, in millivolts. +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_DDBM 290 +// Entry 2 measured OFDM ANTV sensor voltage at CAL2 ddBm, in millivolts. +// <1..65535:1> +// Default: 507 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_MV 507 + +// Coefficient A for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 2178 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_A 2178 +// Coefficient B for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -1312415 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_B -1312415 +// Coefficient C for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 271823274 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_C 271823274 +// Coefficient D for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-20000000000..20000000000:1> +// Default: -17876500819 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_D -17876500819L +// Entry 1 measured OFDM SAW2 Output Power for CAL1 (nominally 270 ddBm). +// <180..350:1> +// Default: 250 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_DDBM 250 +// Entry 1 measured OFDM SAW2 sensor voltage at CAL1 ddBm, in millivolts. +// <1..65535:1> +// Default: 208 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_MV 208 +// Entry 1 measured OFDM SAW2 Output Power for CAL2 (nominally 290 ddBm). +// <180..350:1> +// Default: 289 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_DDBM 289 +// Entry 1 measured OFDM SAW2 sensor voltage at CAL2 ddBm, in millivolts. // <1..65535:1> -// Default: 544 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2 544 +// Default: 366 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_MV 366 // Select CLPC mode // Disable CLPC power control. Flare modes will only be transmit/receive. @@ -143,18 +210,10 @@ // Allow full power control // Default: RAIL_EFF_CLPC_MODE_CHANGE #define SL_RAIL_UTIL_EFF_CLPC_ENABLE RAIL_EFF_CLPC_MODE_CHANGE -// Maximum continuous transfer power in dBm -// <20..30:1> -// Default: 20 -#define RAIL_UTIL_EFF_MAX_TX_CONTINUOUS_POWER_DBM 20 -// Maximum transmit duty cycle as a percentage -// <10..100:1> -// Default: 50 -#define RAIL_UTIL_EFF_MAX_TX_DUTY_CYCLE 50 -// Temperature of EFF above which transmit is not allowed, in degrees Kelvin -// <1..398:1> -// Default: 373 -#define SL_RAIL_UTIL_EFF_TEMPERATURE_THRESHOLD_EFF_DEGREES_K 373 +// Temperature of EFF above which transmit is not allowed, in degrees Kelvin. A security margin is subtracted before using it. +// <1..383:1> +// Default: 383 +#define SL_RAIL_UTIL_EFF_TEMPERATURE_THRESHOLD_EFF_DEGREES_K 383 // // <<< end of configuration section >>> diff --git a/hardware/board/config/brd4274a_brd4001a/sl_rail_util_eff_config.h b/hardware/board/config/brd4274a_brd4001a/sl_rail_util_eff_config.h index fcb8e961fdb..4980266b764 100644 --- a/hardware/board/config/brd4274a_brd4001a/sl_rail_util_eff_config.h +++ b/hardware/board/config/brd4274a_brd4001a/sl_rail_util_eff_config.h @@ -69,71 +69,138 @@ // <1..105000:1> // Default: 30000 #define SL_RAIL_UTIL_EFF_BYPASS_DWELL_TIME_MS 30000 -// Coefficient A for FSK sensor voltage curve. Multiplied by 1e7. + +// Coefficient A for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 844 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_A 844 -// Coefficient B for FSK sensor voltage curve. Multiplied by 1e7. +// Default: 574 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_A 574 +// Coefficient B for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -437473 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_B -437473 -// Coefficient C for FSK sensor voltage curve. Multiplied by 1e7. +// Default: -235763 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_B -235763 +// Coefficient C for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 87928015 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_C 87928015 -// Coefficient D for FSK sensor voltage curve. Multiplied by 1e7. +// Default: 38562724 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_C 38562724 +// Coefficient D for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -5063115821 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_D -5063115821L -// Entry 1 measured FSK Output Power for CAL1 (nominally 270 ddBm). +// Default: -1115923360 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_D -1115923360L +// Entry 1 measured FSK ANTV Output Power for CAL1 (nominally 270 ddBm). // <180..350:1> -// Default: 270 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1_DDBM 270 -// Entry 1 measured FSK sensor voltage at CAL1 ddBm, in millivolts. +// Default: 241 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_DDBM 241 +// Entry 1 measured FSK ANTV sensor voltage at CAL1 ddBm, in millivolts. // <1..65535:1> -// Default: 340 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1 340 -// Entry 1 measured FSK Output Power for CAL2 (nominally 290 ddBm). +// Default: 264 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_MV 264 +// Entry 1 measured FSK ANTV Output Power for CAL2 (nominally 290 ddBm). // <180..350:1> -// Default: 290 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2_DDBM 290 -// Entry 1 measured FSK sensor voltage at CAL2 ddBm, in millivolts. +// Default: 291 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_DDBM 291 +// Entry 1 measured FSK ANTV sensor voltage at CAL2 ddBm, in millivolts. // <1..65535:1> -// Default: 423 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2 423 +// Default: 451 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_MV 451 -// Coefficient A for OFDM sensor voltage curve. Multiplied by 1e7. +// Coefficient A for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 844 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_A 844 -// Coefficient B for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: 392 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_A 392 +// Coefficient B for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -437473 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_B -437473 -// Coefficient C for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: -180237 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_B -180237 +// Coefficient C for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 87928015 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_C 87928015 -// Coefficient D for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: 32942736 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_C 32942736 +// Coefficient D for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -5063115821 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_D -5063115821L -// Entry 1 measured OFDM Output Power for CAL1 (nominally 270 ddBm). +// Default: -1097941542 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_D -1097941542L +// Entry 1 measured FSK SAW2 Output Power for CAL1 (nominally 270 ddBm). // <180..350:1> -// Default: 270 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1_DDBM 270 -// Entry 1 measured OFDM sensor voltage at CAL1 ddBm, in millivolts. +// Default: 200 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_DDBM 200 +// Entry 1 measured FSK SAW2 sensor voltage at CAL1 ddBm, in millivolts. // <1..65535:1> -// Default: 450 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1 450 -// Entry 1 measured OFDM Output Power for CAL2 (nominally 290 ddBm). +// Default: 127 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_MV 127 +// Entry 1 measured FSK SAW2 Output Power for CAL2 (nominally 290 ddBm). +// <180..350:1> +// Default: 241 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_DDBM 241 +// Entry 1 measured FSK SAW2 sensor voltage at CAL2 ddBm, in millivolts. +// <1..65535:1> +// Default: 170 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_MV 170 + +// Coefficient A for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 574 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_A 574 +// Coefficient B for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -235763 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_B -235763 +// Coefficient C for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 38562724 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_C 38562724 +// Coefficient D for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -1115923360 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_D -1115923360L +// Entry 1 measured OFDM ANTV Output Power for CAL1 (nominally 270 ddBm). +// <180..350:1> +// Default: 222 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_DDBM 222 +// Entry 1 measured OFDM ANTV sensor voltage at CAL1 ddBm, in millivolts. +// <1..65535:1> +// Default: 249 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_MV 249 +// Entry 2 measured OFDM ANTV Output Power for CAL2 (nominally 290 ddBm). // <180..350:1> // Default: 290 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2_DDBM 290 -// Entry 1 measured OFDM sensor voltage at CAL2 ddBm, in millivolts. +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_DDBM 290 +// Entry 2 measured OFDM ANTV sensor voltage at CAL2 ddBm, in millivolts. +// <1..65535:1> +// Default: 507 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_MV 507 + +// Coefficient A for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 2178 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_A 2178 +// Coefficient B for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -1312415 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_B -1312415 +// Coefficient C for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 271823274 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_C 271823274 +// Coefficient D for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-20000000000..20000000000:1> +// Default: -17876500819 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_D -17876500819L +// Entry 1 measured OFDM SAW2 Output Power for CAL1 (nominally 270 ddBm). +// <180..350:1> +// Default: 250 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_DDBM 250 +// Entry 1 measured OFDM SAW2 sensor voltage at CAL1 ddBm, in millivolts. +// <1..65535:1> +// Default: 208 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_MV 208 +// Entry 1 measured OFDM SAW2 Output Power for CAL2 (nominally 290 ddBm). +// <180..350:1> +// Default: 289 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_DDBM 289 +// Entry 1 measured OFDM SAW2 sensor voltage at CAL2 ddBm, in millivolts. // <1..65535:1> -// Default: 544 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2 544 +// Default: 366 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_MV 366 // Select CLPC mode // Disable CLPC power control. Flare modes will only be transmit/receive. @@ -143,18 +210,10 @@ // Allow full power control // Default: RAIL_EFF_CLPC_MODE_CHANGE #define SL_RAIL_UTIL_EFF_CLPC_ENABLE RAIL_EFF_CLPC_MODE_CHANGE -// Maximum continuous transfer power in dBm -// <20..30:1> -// Default: 20 -#define RAIL_UTIL_EFF_MAX_TX_CONTINUOUS_POWER_DBM 20 -// Maximum transmit duty cycle as a percentage -// <10..100:1> -// Default: 50 -#define RAIL_UTIL_EFF_MAX_TX_DUTY_CYCLE 50 -// Temperature of EFF above which transmit is not allowed, in degrees Kelvin -// <1..398:1> -// Default: 373 -#define SL_RAIL_UTIL_EFF_TEMPERATURE_THRESHOLD_EFF_DEGREES_K 373 +// Temperature of EFF above which transmit is not allowed, in degrees Kelvin. A security margin is subtracted before using it. +// <1..383:1> +// Default: 383 +#define SL_RAIL_UTIL_EFF_TEMPERATURE_THRESHOLD_EFF_DEGREES_K 383 // // <<< end of configuration section >>> diff --git a/hardware/board/config/brd4274a_brd4002a/sl_rail_util_eff_config.h b/hardware/board/config/brd4274a_brd4002a/sl_rail_util_eff_config.h index fcb8e961fdb..4980266b764 100644 --- a/hardware/board/config/brd4274a_brd4002a/sl_rail_util_eff_config.h +++ b/hardware/board/config/brd4274a_brd4002a/sl_rail_util_eff_config.h @@ -69,71 +69,138 @@ // <1..105000:1> // Default: 30000 #define SL_RAIL_UTIL_EFF_BYPASS_DWELL_TIME_MS 30000 -// Coefficient A for FSK sensor voltage curve. Multiplied by 1e7. + +// Coefficient A for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 844 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_A 844 -// Coefficient B for FSK sensor voltage curve. Multiplied by 1e7. +// Default: 574 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_A 574 +// Coefficient B for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -437473 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_B -437473 -// Coefficient C for FSK sensor voltage curve. Multiplied by 1e7. +// Default: -235763 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_B -235763 +// Coefficient C for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 87928015 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_C 87928015 -// Coefficient D for FSK sensor voltage curve. Multiplied by 1e7. +// Default: 38562724 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_C 38562724 +// Coefficient D for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -5063115821 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_D -5063115821L -// Entry 1 measured FSK Output Power for CAL1 (nominally 270 ddBm). +// Default: -1115923360 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_D -1115923360L +// Entry 1 measured FSK ANTV Output Power for CAL1 (nominally 270 ddBm). // <180..350:1> -// Default: 270 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1_DDBM 270 -// Entry 1 measured FSK sensor voltage at CAL1 ddBm, in millivolts. +// Default: 241 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_DDBM 241 +// Entry 1 measured FSK ANTV sensor voltage at CAL1 ddBm, in millivolts. // <1..65535:1> -// Default: 340 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1 340 -// Entry 1 measured FSK Output Power for CAL2 (nominally 290 ddBm). +// Default: 264 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_MV 264 +// Entry 1 measured FSK ANTV Output Power for CAL2 (nominally 290 ddBm). // <180..350:1> -// Default: 290 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2_DDBM 290 -// Entry 1 measured FSK sensor voltage at CAL2 ddBm, in millivolts. +// Default: 291 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_DDBM 291 +// Entry 1 measured FSK ANTV sensor voltage at CAL2 ddBm, in millivolts. // <1..65535:1> -// Default: 423 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2 423 +// Default: 451 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_MV 451 -// Coefficient A for OFDM sensor voltage curve. Multiplied by 1e7. +// Coefficient A for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 844 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_A 844 -// Coefficient B for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: 392 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_A 392 +// Coefficient B for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -437473 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_B -437473 -// Coefficient C for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: -180237 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_B -180237 +// Coefficient C for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 87928015 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_C 87928015 -// Coefficient D for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: 32942736 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_C 32942736 +// Coefficient D for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -5063115821 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_D -5063115821L -// Entry 1 measured OFDM Output Power for CAL1 (nominally 270 ddBm). +// Default: -1097941542 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_D -1097941542L +// Entry 1 measured FSK SAW2 Output Power for CAL1 (nominally 270 ddBm). // <180..350:1> -// Default: 270 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1_DDBM 270 -// Entry 1 measured OFDM sensor voltage at CAL1 ddBm, in millivolts. +// Default: 200 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_DDBM 200 +// Entry 1 measured FSK SAW2 sensor voltage at CAL1 ddBm, in millivolts. // <1..65535:1> -// Default: 450 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1 450 -// Entry 1 measured OFDM Output Power for CAL2 (nominally 290 ddBm). +// Default: 127 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_MV 127 +// Entry 1 measured FSK SAW2 Output Power for CAL2 (nominally 290 ddBm). +// <180..350:1> +// Default: 241 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_DDBM 241 +// Entry 1 measured FSK SAW2 sensor voltage at CAL2 ddBm, in millivolts. +// <1..65535:1> +// Default: 170 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_MV 170 + +// Coefficient A for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 574 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_A 574 +// Coefficient B for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -235763 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_B -235763 +// Coefficient C for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 38562724 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_C 38562724 +// Coefficient D for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -1115923360 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_D -1115923360L +// Entry 1 measured OFDM ANTV Output Power for CAL1 (nominally 270 ddBm). +// <180..350:1> +// Default: 222 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_DDBM 222 +// Entry 1 measured OFDM ANTV sensor voltage at CAL1 ddBm, in millivolts. +// <1..65535:1> +// Default: 249 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_MV 249 +// Entry 2 measured OFDM ANTV Output Power for CAL2 (nominally 290 ddBm). // <180..350:1> // Default: 290 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2_DDBM 290 -// Entry 1 measured OFDM sensor voltage at CAL2 ddBm, in millivolts. +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_DDBM 290 +// Entry 2 measured OFDM ANTV sensor voltage at CAL2 ddBm, in millivolts. +// <1..65535:1> +// Default: 507 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_MV 507 + +// Coefficient A for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 2178 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_A 2178 +// Coefficient B for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -1312415 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_B -1312415 +// Coefficient C for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 271823274 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_C 271823274 +// Coefficient D for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-20000000000..20000000000:1> +// Default: -17876500819 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_D -17876500819L +// Entry 1 measured OFDM SAW2 Output Power for CAL1 (nominally 270 ddBm). +// <180..350:1> +// Default: 250 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_DDBM 250 +// Entry 1 measured OFDM SAW2 sensor voltage at CAL1 ddBm, in millivolts. +// <1..65535:1> +// Default: 208 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_MV 208 +// Entry 1 measured OFDM SAW2 Output Power for CAL2 (nominally 290 ddBm). +// <180..350:1> +// Default: 289 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_DDBM 289 +// Entry 1 measured OFDM SAW2 sensor voltage at CAL2 ddBm, in millivolts. // <1..65535:1> -// Default: 544 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2 544 +// Default: 366 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_MV 366 // Select CLPC mode // Disable CLPC power control. Flare modes will only be transmit/receive. @@ -143,18 +210,10 @@ // Allow full power control // Default: RAIL_EFF_CLPC_MODE_CHANGE #define SL_RAIL_UTIL_EFF_CLPC_ENABLE RAIL_EFF_CLPC_MODE_CHANGE -// Maximum continuous transfer power in dBm -// <20..30:1> -// Default: 20 -#define RAIL_UTIL_EFF_MAX_TX_CONTINUOUS_POWER_DBM 20 -// Maximum transmit duty cycle as a percentage -// <10..100:1> -// Default: 50 -#define RAIL_UTIL_EFF_MAX_TX_DUTY_CYCLE 50 -// Temperature of EFF above which transmit is not allowed, in degrees Kelvin -// <1..398:1> -// Default: 373 -#define SL_RAIL_UTIL_EFF_TEMPERATURE_THRESHOLD_EFF_DEGREES_K 373 +// Temperature of EFF above which transmit is not allowed, in degrees Kelvin. A security margin is subtracted before using it. +// <1..383:1> +// Default: 383 +#define SL_RAIL_UTIL_EFF_TEMPERATURE_THRESHOLD_EFF_DEGREES_K 383 // // <<< end of configuration section >>> diff --git a/hardware/board/config/brd4332a_brd4001a/btl_gpio_activation_cfg.h b/hardware/board/config/brd4332a_brd4001a/btl_gpio_activation_cfg.h new file mode 100644 index 00000000000..d4eef305b8f --- /dev/null +++ b/hardware/board/config/brd4332a_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 gpioPortA +#define SL_BTL_BUTTON_PIN 4 + +// [GPIO_SL_BTL_BUTTON]$ + +// <<< sl:end pin_tool >>> + +#endif // BTL_GPIO_ACTIVATION_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4001a/btl_uart_driver_cfg.h b/hardware/board/config/brd4332a_brd4001a/btl_uart_driver_cfg.h new file mode 100644 index 00000000000..308a1034bdb --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/btl_uart_driver_cfg.h @@ -0,0 +1,78 @@ +/***************************************************************************//** + * @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 PA05 +#define SL_SERIAL_UART_TX_PORT gpioPortA +#define SL_SERIAL_UART_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_SERIAL_UART_RX_PORT gpioPortA +#define SL_SERIAL_UART_RX_PIN 6 + + + +// [USART_SL_SERIAL_UART]$ + +// SL_VCOM_ENABLE + +// $[GPIO_SL_VCOM_ENABLE] + +// [GPIO_SL_VCOM_ENABLE]$ + +// <<< sl:end pin_tool >>> + +#endif // BTL_UART_DRIVER_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4001a/iot_flash_cfg_msc.h b/hardware/board/config/brd4332a_brd4001a/iot_flash_cfg_msc.h new file mode 100644 index 00000000000..c2af14bc7d2 --- /dev/null +++ b/hardware/board/config/brd4332a_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/brd4332a_brd4001a/iot_i2c_cfg_exp.h b/hardware/board/config/brd4332a_brd4001a/iot_i2c_cfg_exp.h new file mode 100644 index 00000000000..8e1c13893e8 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/iot_i2c_cfg_exp.h @@ -0,0 +1,106 @@ +/***************************************************************************//** + * @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] + +// [GPIO_IOT_I2C_CFG_EXP_ENABLE]$ + +// IOT_I2C_CFG_EXP +// $[I2C_IOT_I2C_CFG_EXP] +#define IOT_I2C_CFG_EXP_PERIPHERAL I2C0 +#define IOT_I2C_CFG_EXP_PERIPHERAL_NO 0 + +// I2C0 SCL on PB01 +#define IOT_I2C_CFG_EXP_SCL_PORT gpioPortB +#define IOT_I2C_CFG_EXP_SCL_PIN 1 + +// I2C0 SDA on PB00 +#define IOT_I2C_CFG_EXP_SDA_PORT gpioPortB +#define IOT_I2C_CFG_EXP_SDA_PIN 0 + +// [I2C_IOT_I2C_CFG_EXP]$ + +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_I2C_CFG_EXP_H_ */ diff --git a/hardware/board/config/brd4332a_brd4001a/iot_i2c_cfg_sensor.h b/hardware/board/config/brd4332a_brd4001a/iot_i2c_cfg_sensor.h new file mode 100644 index 00000000000..4e4da9af4d3 --- /dev/null +++ b/hardware/board/config/brd4332a_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 I2C0 +#define IOT_I2C_CFG_SENSOR_PERIPHERAL_NO 0 + +// I2C0 SCL on PB01 +#define IOT_I2C_CFG_SENSOR_SCL_PORT gpioPortB +#define IOT_I2C_CFG_SENSOR_SCL_PIN 1 + +// I2C0 SDA on PB00 +#define IOT_I2C_CFG_SENSOR_SDA_PORT gpioPortB +#define IOT_I2C_CFG_SENSOR_SDA_PIN 0 + +// [I2C_IOT_I2C_CFG_SENSOR]$ + +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_I2C_CFG_SENSOR_H_ */ diff --git a/hardware/board/config/brd4332a_brd4001a/iot_i2c_cfg_test.h b/hardware/board/config/brd4332a_brd4001a/iot_i2c_cfg_test.h new file mode 100644 index 00000000000..3f2bc4f5a13 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/iot_i2c_cfg_test.h @@ -0,0 +1,106 @@ +/***************************************************************************//** + * @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] + +// [GPIO_IOT_I2C_CFG_TEST_ENABLE]$ + +// IOT_I2C_CFG_TEST +// $[I2C_IOT_I2C_CFG_TEST] +#define IOT_I2C_CFG_TEST_PERIPHERAL I2C0 +#define IOT_I2C_CFG_TEST_PERIPHERAL_NO 0 + +// I2C0 SCL on PB01 +#define IOT_I2C_CFG_TEST_SCL_PORT gpioPortB +#define IOT_I2C_CFG_TEST_SCL_PIN 1 + +// I2C0 SDA on PB00 +#define IOT_I2C_CFG_TEST_SDA_PORT gpioPortB +#define IOT_I2C_CFG_TEST_SDA_PIN 0 + +// [I2C_IOT_I2C_CFG_TEST]$ + +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_I2C_CFG_TEST_H_ */ diff --git a/hardware/board/config/brd4332a_brd4001a/iot_pwm_cfg_led0.h b/hardware/board/config/brd4332a_brd4001a/iot_pwm_cfg_led0.h new file mode 100644 index 00000000000..725cc6a0b3a --- /dev/null +++ b/hardware/board/config/brd4332a_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 PA04 +#define IOT_PWM_CFG_LED0_CC0_PORT gpioPortA +#define IOT_PWM_CFG_LED0_CC0_PIN 4 + + + +// [TIMER_IOT_PWM_CFG_LED0]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_PWM_CFG_LED0_H_ */ diff --git a/hardware/board/config/brd4332a_brd4001a/iot_pwm_cfg_led1.h b/hardware/board/config/brd4332a_brd4001a/iot_pwm_cfg_led1.h new file mode 100644 index 00000000000..03a1f79d1b1 --- /dev/null +++ b/hardware/board/config/brd4332a_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 PD04 +#define IOT_PWM_CFG_LED1_CC0_PORT gpioPortD +#define IOT_PWM_CFG_LED1_CC0_PIN 4 + + + +// [TIMER_IOT_PWM_CFG_LED1]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_PWM_CFG_LED1_H_ */ diff --git a/hardware/board/config/brd4332a_brd4001a/iot_uart_cfg_loopback.h b/hardware/board/config/brd4332a_brd4001a/iot_uart_cfg_loopback.h new file mode 100644 index 00000000000..62d25f7cbd3 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/iot_uart_cfg_loopback.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_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 PA05 +#define IOT_UART_CFG_LOOPBACK_TX_PORT gpioPortA +#define IOT_UART_CFG_LOOPBACK_TX_PIN 5 + +// USART0 RX on PA06 +#define IOT_UART_CFG_LOOPBACK_RX_PORT gpioPortA +#define IOT_UART_CFG_LOOPBACK_RX_PIN 6 + + + + + +// [USART_IOT_UART_CFG_LOOPBACK]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_UART_CFG_LOOPBACK_H_ */ diff --git a/hardware/board/config/brd4332a_brd4001a/iot_uart_cfg_vcom.h b/hardware/board/config/brd4332a_brd4001a/iot_uart_cfg_vcom.h new file mode 100644 index 00000000000..13b59bcb649 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/iot_uart_cfg_vcom.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_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 PA05 +#define IOT_UART_CFG_VCOM_TX_PORT gpioPortA +#define IOT_UART_CFG_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define IOT_UART_CFG_VCOM_RX_PORT gpioPortA +#define IOT_UART_CFG_VCOM_RX_PIN 6 + + + + + +// [USART_IOT_UART_CFG_VCOM]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_UART_CFG_VCOM_H_ */ diff --git a/hardware/board/config/brd4332a_brd4001a/sl_board_control_config.h b/hardware/board/config/brd4332a_brd4001a/sl_board_control_config.h new file mode 100644 index 00000000000..ad7793aa7ef --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_board_control_config.h @@ -0,0 +1,42 @@ +/***************************************************************************//** + * @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 >>> + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// <<< sl:end pin_tool >>> + +#endif // SL_BOARD_CONTROL_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4001a/sl_cpc_drv_secondary_uart_usart_vcom_config.h b/hardware/board/config/brd4332a_brd4001a/sl_cpc_drv_secondary_uart_usart_vcom_config.h new file mode 100644 index 00000000000..b01d9a82c97 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_cpc_drv_secondary_uart_usart_vcom_config.h @@ -0,0 +1,78 @@ +/***************************************************************************//** + * @file + * @brief CPC UART 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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_UART_USART_VCOM_SECONDARY_CONFIG_H +#define SL_CPC_DRV_UART_USART_VCOM_SECONDARY_CONFIG_H + +// CPC - Secondary 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 PA05 +#define SL_CPC_DRV_UART_VCOM_TX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_CPC_DRV_UART_VCOM_RX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_RX_PIN 6 + + + +// [USART_SL_CPC_DRV_UART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_CPC_DRV_UART_VCOM_SECONDARY_CONFIG_H */ diff --git a/hardware/board/config/brd4332a_brd4001a/sl_device_init_lfxo_config.h b/hardware/board/config/brd4332a_brd4001a/sl_device_init_lfxo_config.h new file mode 100644 index 00000000000..93fb41af038 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_device_init_lfxo_config.h @@ -0,0 +1,66 @@ +/***************************************************************************//** + * @file + * @brief DEVICE_INIT_LFXO 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_LFXO_CONFIG_H +#define SL_DEVICE_INIT_LFXO_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Mode +// +// Crystal oscillator +// AC-coupled buffer +// External digital clock +// Default: cmuLfxoOscMode_Crystal +#define SL_DEVICE_INIT_LFXO_MODE cmuLfxoOscMode_Crystal + +// CTUNE <0-127> +// Default: 63 +#define SL_DEVICE_INIT_LFXO_CTUNE 63 + +// LFXO precision in PPM <0-65535> +// Default: 500 +#define SL_DEVICE_INIT_LFXO_PRECISION 100 + +// Startup Timeout Delay +// +// 2 cycles +// 256 cycles +// 1K cycles +// 2K cycles +// 4K cycles +// 8K cycles +// 16K cycles +// 32K cycles +// Default: cmuLfxoStartupDelay_4KCycles +#define SL_DEVICE_INIT_LFXO_TIMEOUT cmuLfxoStartupDelay_4KCycles +// <<< end of configuration section >>> + +#endif // SL_DEVICE_INIT_LFXO_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4001a/sl_iostream_usart_vcom_config.h b/hardware/board/config/brd4332a_brd4001a/sl_iostream_usart_vcom_config.h new file mode 100644 index 00000000000..bd773e82782 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_iostream_usart_vcom_config.h @@ -0,0 +1,103 @@ +/***************************************************************************//** + * @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 usartHwFlowControlNone + +// 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 PA05 +#define SL_IOSTREAM_USART_VCOM_TX_PORT gpioPortA +#define SL_IOSTREAM_USART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_IOSTREAM_USART_VCOM_RX_PORT gpioPortA +#define SL_IOSTREAM_USART_VCOM_RX_PIN 6 + + + +// [USART_SL_IOSTREAM_USART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif diff --git a/hardware/board/config/brd4332a_brd4001a/sl_pwm_init_led0_config.h b/hardware/board/config/brd4332a_brd4001a/sl_pwm_init_led0_config.h new file mode 100644 index 00000000000..6092058300b --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_pwm_init_led0_config.h @@ -0,0 +1,62 @@ +/***************************************************************************//** + * @file + * @brief PWM Driver + ******************************************************************************* + * # License + * Copyright 2022 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 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_LOW +// 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 PA04 +#define SL_PWM_LED0_OUTPUT_PORT gpioPortA +#define SL_PWM_LED0_OUTPUT_PIN 4 + +// [TIMER_SL_PWM_LED0]$ + +// <<< sl:end pin_tool >>> + +#ifdef __cplusplus +} +#endif + +#endif // PWM_INIT_LED0_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4001a/sl_pwm_init_led1_config.h b/hardware/board/config/brd4332a_brd4001a/sl_pwm_init_led1_config.h new file mode 100644 index 00000000000..68a21e3276e --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_pwm_init_led1_config.h @@ -0,0 +1,62 @@ +/***************************************************************************//** + * @file + * @brief PWM Driver + ******************************************************************************* + * # License + * Copyright 2022 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 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_LOW +// 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 PD04 +#define SL_PWM_LED1_OUTPUT_PORT gpioPortD +#define SL_PWM_LED1_OUTPUT_PIN 4 + +// [TIMER_SL_PWM_LED1]$ + +// <<< sl:end pin_tool >>> + +#ifdef __cplusplus +} +#endif + +#endif // PWM_INIT_LED1_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4001a/sl_rail_util_pa_config.h b/hardware/board/config/brd4332a_brd4001a/sl_rail_util_pa_config.h new file mode 100644 index 00000000000..a300b57e676 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_rail_util_pa_config.h @@ -0,0 +1,81 @@ +/***************************************************************************//** + * @file + * @brief Power Amplifier 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_PA_CONFIG_H +#define SL_RAIL_UTIL_PA_CONFIG_H + +#include "rail_types.h" + +// <<< Use Configuration Wizard in Context Menu >>> + +// PA Configuration +// Initial PA Power (deci-dBm, 100 = 10.0 dBm) +// Default: 100 +#define SL_RAIL_UTIL_PA_POWER_DECI_DBM 100 +// PA Ramp Time (microseconds) +// <0-65535:1> +// Default: 10 +#define SL_RAIL_UTIL_PA_RAMP_TIME_US 10 +// Milli-volts on PA supply pin (PA_VDD) +// <0-65535:1> +// Default: 3300 +#define SL_RAIL_UTIL_PA_VOLTAGE_MV 3300 +// 2.4 GHz PA Selection +// Highest Possible +// High Power (chip-specific) +// Medium Power (chip-specific) +// Low Power +// Disable +// Default: RAIL_TX_POWER_MODE_2P4GIG_HIGHEST +#define SL_RAIL_UTIL_PA_SELECTION_2P4GHZ RAIL_TX_POWER_MODE_2P4GIG_HIGHEST +// Sub-1 GHz PA Selection +// Disable +// Default: RAIL_TX_POWER_MODE_NONE +#define SL_RAIL_UTIL_PA_SELECTION_SUBGHZ RAIL_TX_POWER_MODE_NONE +// + +// PA Curve Configuration +// Header file containing custom PA curves +// Default: "pa_curves_efr32.h" +#define SL_RAIL_UTIL_PA_CURVE_HEADER "pa_curves_efr32.h" +// Header file containing PA curve types +// Default: "pa_curve_types_efr32.h" +#define SL_RAIL_UTIL_PA_CURVE_TYPES "pa_curve_types_efr32.h" +// + +// PA Calibration Configuration +// Apply PA Calibration Factory Offset +// Default: 1 +#define SL_RAIL_UTIL_PA_CALIBRATION_ENABLE 1 +// + +// <<< end of configuration section >>> + +#endif // SL_RAIL_UTIL_PA_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4001a/sl_rail_util_pti_config.h b/hardware/board/config/brd4332a_brd4001a/sl_rail_util_pti_config.h new file mode 100644 index 00000000000..90431d79360 --- /dev/null +++ b/hardware/board/config/brd4332a_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 PC04 +#define SL_RAIL_UTIL_PTI_DOUT_PORT gpioPortC +#define SL_RAIL_UTIL_PTI_DOUT_PIN 4 + +// PTI DFRAME on PC05 +#define SL_RAIL_UTIL_PTI_DFRAME_PORT gpioPortC +#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/brd4332a_brd4001a/sl_simple_button_btn0_config.h b/hardware/board/config/brd4332a_brd4001a/sl_simple_button_btn0_config.h new file mode 100644 index 00000000000..e564c0eef90 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_simple_button_btn0_config.h @@ -0,0 +1,45 @@ +/***************************************************************************//** + * @file + * @brief Simple Button Driver User 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 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 gpioPortA +#define SL_SIMPLE_BUTTON_BTN0_PIN 4 + +// [GPIO_SL_SIMPLE_BUTTON_BTN0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_SIMPLE_BUTTON_BTN0_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4001a/sl_simple_button_btn1_config.h b/hardware/board/config/brd4332a_brd4001a/sl_simple_button_btn1_config.h new file mode 100644 index 00000000000..2576b2fa0f2 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_simple_button_btn1_config.h @@ -0,0 +1,45 @@ +/***************************************************************************//** + * @file + * @brief Simple Button Driver User 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 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 gpioPortD +#define SL_SIMPLE_BUTTON_BTN1_PIN 4 + +// [GPIO_SL_SIMPLE_BUTTON_BTN1]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_SIMPLE_BUTTON_BTN1_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4001a/sl_simple_led_led0_config.h b/hardware/board/config/brd4332a_brd4001a/sl_simple_led_led0_config.h new file mode 100644 index 00000000000..036ed8f5563 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_simple_led_led0_config.h @@ -0,0 +1,44 @@ +/***************************************************************************//** + * @file + * @brief Simple Led Driver Configuration + ******************************************************************************* + * # 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 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_LOW +// 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 gpioPortA +#define SL_SIMPLE_LED_LED0_PIN 4 + +// [GPIO_SL_SIMPLE_LED_LED0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_SIMPLE_LED_LED0_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4001a/sl_simple_led_led1_config.h b/hardware/board/config/brd4332a_brd4001a/sl_simple_led_led1_config.h new file mode 100644 index 00000000000..9ba77569f0c --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_simple_led_led1_config.h @@ -0,0 +1,44 @@ +/***************************************************************************//** + * @file + * @brief Simple Led Driver Configuration + ******************************************************************************* + * # 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 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_LOW +// 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 4 + +// [GPIO_SL_SIMPLE_LED_LED1]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_SIMPLE_LED_LED1_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4001a/sl_uartdrv_usart_vcom_config.h b/hardware/board/config/brd4332a_brd4001a/sl_uartdrv_usart_vcom_config.h new file mode 100644 index 00000000000..f0acae16ad1 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4001a/sl_uartdrv_usart_vcom_config.h @@ -0,0 +1,95 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV_USART 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 SL_UARTDRV_USART_VCOM_CONFIG_H +#define SL_UARTDRV_USART_VCOM_CONFIG_H + +#include "em_usart.h" +// <<< Use Configuration Wizard in Context Menu >>> + +// UART settings +// Baud rate +// Default: 115200 +#define SL_UARTDRV_USART_VCOM_BAUDRATE 115200 + +// Parity mode to use +// No Parity +// Even parity +// Odd parity +// Default: usartNoParity +#define SL_UARTDRV_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_UARTDRV_USART_VCOM_STOP_BITS usartStopbits1 + +// Flow control method +// None +// Software XON/XOFF +// nRTS/nCTS hardware handshake +// UART peripheral controls nRTS/nCTS +// Default: uartdrvFlowControlHw +#define SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE uartdrvFlowControlNone + +// Oversampling selection +// 16x oversampling +// 8x oversampling +// 6x oversampling +// 4x oversampling +// Default: usartOVS16 +#define SL_UARTDRV_USART_VCOM_OVERSAMPLING usartOVS4 + +// Majority vote disable for 16x, 8x and 6x oversampling modes +// True +// False +#define SL_UARTDRV_USART_VCOM_MVDIS false + +// Size of the receive operation queue +// Default: 6 +#define SL_UARTDRV_USART_VCOM_RX_BUFFER_SIZE 6 + +// Size of the transmit operation queue +// Default: 6 +#define SL_UARTDRV_USART_VCOM_TX_BUFFER_SIZE 6 + +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_UARTDRV_USART_VCOM +// $[USART_SL_UARTDRV_USART_VCOM] +#define SL_UARTDRV_USART_VCOM_PERIPHERAL USART0 +#define SL_UARTDRV_USART_VCOM_PERIPHERAL_NO 0 + +// USART0 TX on PA05 +#define SL_UARTDRV_USART_VCOM_TX_PORT gpioPortA +#define SL_UARTDRV_USART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_UARTDRV_USART_VCOM_RX_PORT gpioPortA +#define SL_UARTDRV_USART_VCOM_RX_PIN 6 + + + +// [USART_SL_UARTDRV_USART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif // SL_UARTDRV_USART_VCOM_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/btl_gpio_activation_cfg.h b/hardware/board/config/brd4332a_brd4002a/btl_gpio_activation_cfg.h new file mode 100644 index 00000000000..d4eef305b8f --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/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 gpioPortA +#define SL_BTL_BUTTON_PIN 4 + +// [GPIO_SL_BTL_BUTTON]$ + +// <<< sl:end pin_tool >>> + +#endif // BTL_GPIO_ACTIVATION_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/btl_uart_driver_cfg.h b/hardware/board/config/brd4332a_brd4002a/btl_uart_driver_cfg.h new file mode 100644 index 00000000000..308a1034bdb --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/btl_uart_driver_cfg.h @@ -0,0 +1,78 @@ +/***************************************************************************//** + * @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 PA05 +#define SL_SERIAL_UART_TX_PORT gpioPortA +#define SL_SERIAL_UART_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_SERIAL_UART_RX_PORT gpioPortA +#define SL_SERIAL_UART_RX_PIN 6 + + + +// [USART_SL_SERIAL_UART]$ + +// SL_VCOM_ENABLE + +// $[GPIO_SL_VCOM_ENABLE] + +// [GPIO_SL_VCOM_ENABLE]$ + +// <<< sl:end pin_tool >>> + +#endif // BTL_UART_DRIVER_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/iot_flash_cfg_msc.h b/hardware/board/config/brd4332a_brd4002a/iot_flash_cfg_msc.h new file mode 100644 index 00000000000..c2af14bc7d2 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/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/brd4332a_brd4002a/iot_i2c_cfg_exp.h b/hardware/board/config/brd4332a_brd4002a/iot_i2c_cfg_exp.h new file mode 100644 index 00000000000..8e1c13893e8 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/iot_i2c_cfg_exp.h @@ -0,0 +1,106 @@ +/***************************************************************************//** + * @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] + +// [GPIO_IOT_I2C_CFG_EXP_ENABLE]$ + +// IOT_I2C_CFG_EXP +// $[I2C_IOT_I2C_CFG_EXP] +#define IOT_I2C_CFG_EXP_PERIPHERAL I2C0 +#define IOT_I2C_CFG_EXP_PERIPHERAL_NO 0 + +// I2C0 SCL on PB01 +#define IOT_I2C_CFG_EXP_SCL_PORT gpioPortB +#define IOT_I2C_CFG_EXP_SCL_PIN 1 + +// I2C0 SDA on PB00 +#define IOT_I2C_CFG_EXP_SDA_PORT gpioPortB +#define IOT_I2C_CFG_EXP_SDA_PIN 0 + +// [I2C_IOT_I2C_CFG_EXP]$ + +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_I2C_CFG_EXP_H_ */ diff --git a/hardware/board/config/brd4332a_brd4002a/iot_i2c_cfg_sensor.h b/hardware/board/config/brd4332a_brd4002a/iot_i2c_cfg_sensor.h new file mode 100644 index 00000000000..4e4da9af4d3 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/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 I2C0 +#define IOT_I2C_CFG_SENSOR_PERIPHERAL_NO 0 + +// I2C0 SCL on PB01 +#define IOT_I2C_CFG_SENSOR_SCL_PORT gpioPortB +#define IOT_I2C_CFG_SENSOR_SCL_PIN 1 + +// I2C0 SDA on PB00 +#define IOT_I2C_CFG_SENSOR_SDA_PORT gpioPortB +#define IOT_I2C_CFG_SENSOR_SDA_PIN 0 + +// [I2C_IOT_I2C_CFG_SENSOR]$ + +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_I2C_CFG_SENSOR_H_ */ diff --git a/hardware/board/config/brd4332a_brd4002a/iot_i2c_cfg_test.h b/hardware/board/config/brd4332a_brd4002a/iot_i2c_cfg_test.h new file mode 100644 index 00000000000..3f2bc4f5a13 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/iot_i2c_cfg_test.h @@ -0,0 +1,106 @@ +/***************************************************************************//** + * @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] + +// [GPIO_IOT_I2C_CFG_TEST_ENABLE]$ + +// IOT_I2C_CFG_TEST +// $[I2C_IOT_I2C_CFG_TEST] +#define IOT_I2C_CFG_TEST_PERIPHERAL I2C0 +#define IOT_I2C_CFG_TEST_PERIPHERAL_NO 0 + +// I2C0 SCL on PB01 +#define IOT_I2C_CFG_TEST_SCL_PORT gpioPortB +#define IOT_I2C_CFG_TEST_SCL_PIN 1 + +// I2C0 SDA on PB00 +#define IOT_I2C_CFG_TEST_SDA_PORT gpioPortB +#define IOT_I2C_CFG_TEST_SDA_PIN 0 + +// [I2C_IOT_I2C_CFG_TEST]$ + +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_I2C_CFG_TEST_H_ */ diff --git a/hardware/board/config/brd4332a_brd4002a/iot_pwm_cfg_led0.h b/hardware/board/config/brd4332a_brd4002a/iot_pwm_cfg_led0.h new file mode 100644 index 00000000000..725cc6a0b3a --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/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 PA04 +#define IOT_PWM_CFG_LED0_CC0_PORT gpioPortA +#define IOT_PWM_CFG_LED0_CC0_PIN 4 + + + +// [TIMER_IOT_PWM_CFG_LED0]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_PWM_CFG_LED0_H_ */ diff --git a/hardware/board/config/brd4332a_brd4002a/iot_pwm_cfg_led1.h b/hardware/board/config/brd4332a_brd4002a/iot_pwm_cfg_led1.h new file mode 100644 index 00000000000..03a1f79d1b1 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/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 PD04 +#define IOT_PWM_CFG_LED1_CC0_PORT gpioPortD +#define IOT_PWM_CFG_LED1_CC0_PIN 4 + + + +// [TIMER_IOT_PWM_CFG_LED1]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_PWM_CFG_LED1_H_ */ diff --git a/hardware/board/config/brd4332a_brd4002a/iot_uart_cfg_loopback.h b/hardware/board/config/brd4332a_brd4002a/iot_uart_cfg_loopback.h new file mode 100644 index 00000000000..62d25f7cbd3 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/iot_uart_cfg_loopback.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_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 PA05 +#define IOT_UART_CFG_LOOPBACK_TX_PORT gpioPortA +#define IOT_UART_CFG_LOOPBACK_TX_PIN 5 + +// USART0 RX on PA06 +#define IOT_UART_CFG_LOOPBACK_RX_PORT gpioPortA +#define IOT_UART_CFG_LOOPBACK_RX_PIN 6 + + + + + +// [USART_IOT_UART_CFG_LOOPBACK]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_UART_CFG_LOOPBACK_H_ */ diff --git a/hardware/board/config/brd4332a_brd4002a/iot_uart_cfg_vcom.h b/hardware/board/config/brd4332a_brd4002a/iot_uart_cfg_vcom.h new file mode 100644 index 00000000000..13b59bcb649 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/iot_uart_cfg_vcom.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_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 PA05 +#define IOT_UART_CFG_VCOM_TX_PORT gpioPortA +#define IOT_UART_CFG_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define IOT_UART_CFG_VCOM_RX_PORT gpioPortA +#define IOT_UART_CFG_VCOM_RX_PIN 6 + + + + + +// [USART_IOT_UART_CFG_VCOM]$ +// <<< sl:end pin_tool >>> + +/******************************************************************************* + * SAFE GUARD + ******************************************************************************/ + +#endif /* _IOT_UART_CFG_VCOM_H_ */ diff --git a/hardware/board/config/brd4332a_brd4002a/sl_board_control_config.h b/hardware/board/config/brd4332a_brd4002a/sl_board_control_config.h new file mode 100644 index 00000000000..ad7793aa7ef --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_board_control_config.h @@ -0,0 +1,42 @@ +/***************************************************************************//** + * @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 >>> + +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> + +// <<< sl:end pin_tool >>> + +#endif // SL_BOARD_CONTROL_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/sl_cpc_drv_secondary_uart_usart_vcom_config.h b/hardware/board/config/brd4332a_brd4002a/sl_cpc_drv_secondary_uart_usart_vcom_config.h new file mode 100644 index 00000000000..b01d9a82c97 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_cpc_drv_secondary_uart_usart_vcom_config.h @@ -0,0 +1,78 @@ +/***************************************************************************//** + * @file + * @brief CPC UART 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. + * + ******************************************************************************/ + +// <<< Use Configuration Wizard in Context Menu >>> + +#ifndef SL_CPC_DRV_UART_USART_VCOM_SECONDARY_CONFIG_H +#define SL_CPC_DRV_UART_USART_VCOM_SECONDARY_CONFIG_H + +// CPC - Secondary 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 PA05 +#define SL_CPC_DRV_UART_VCOM_TX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_CPC_DRV_UART_VCOM_RX_PORT gpioPortA +#define SL_CPC_DRV_UART_VCOM_RX_PIN 6 + + + +// [USART_SL_CPC_DRV_UART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif /* SL_CPC_DRV_UART_VCOM_SECONDARY_CONFIG_H */ diff --git a/hardware/board/config/brd4332a_brd4002a/sl_device_init_lfxo_config.h b/hardware/board/config/brd4332a_brd4002a/sl_device_init_lfxo_config.h new file mode 100644 index 00000000000..93fb41af038 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_device_init_lfxo_config.h @@ -0,0 +1,66 @@ +/***************************************************************************//** + * @file + * @brief DEVICE_INIT_LFXO 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_LFXO_CONFIG_H +#define SL_DEVICE_INIT_LFXO_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Mode +// +// Crystal oscillator +// AC-coupled buffer +// External digital clock +// Default: cmuLfxoOscMode_Crystal +#define SL_DEVICE_INIT_LFXO_MODE cmuLfxoOscMode_Crystal + +// CTUNE <0-127> +// Default: 63 +#define SL_DEVICE_INIT_LFXO_CTUNE 63 + +// LFXO precision in PPM <0-65535> +// Default: 500 +#define SL_DEVICE_INIT_LFXO_PRECISION 100 + +// Startup Timeout Delay +// +// 2 cycles +// 256 cycles +// 1K cycles +// 2K cycles +// 4K cycles +// 8K cycles +// 16K cycles +// 32K cycles +// Default: cmuLfxoStartupDelay_4KCycles +#define SL_DEVICE_INIT_LFXO_TIMEOUT cmuLfxoStartupDelay_4KCycles +// <<< end of configuration section >>> + +#endif // SL_DEVICE_INIT_LFXO_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/sl_iostream_usart_vcom_config.h b/hardware/board/config/brd4332a_brd4002a/sl_iostream_usart_vcom_config.h new file mode 100644 index 00000000000..bd773e82782 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_iostream_usart_vcom_config.h @@ -0,0 +1,103 @@ +/***************************************************************************//** + * @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 usartHwFlowControlNone + +// 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 PA05 +#define SL_IOSTREAM_USART_VCOM_TX_PORT gpioPortA +#define SL_IOSTREAM_USART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_IOSTREAM_USART_VCOM_RX_PORT gpioPortA +#define SL_IOSTREAM_USART_VCOM_RX_PIN 6 + + + +// [USART_SL_IOSTREAM_USART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif diff --git a/hardware/board/config/brd4332a_brd4002a/sl_pwm_init_led0_config.h b/hardware/board/config/brd4332a_brd4002a/sl_pwm_init_led0_config.h new file mode 100644 index 00000000000..6092058300b --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_pwm_init_led0_config.h @@ -0,0 +1,62 @@ +/***************************************************************************//** + * @file + * @brief PWM Driver + ******************************************************************************* + * # License + * Copyright 2022 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 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_LOW +// 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 PA04 +#define SL_PWM_LED0_OUTPUT_PORT gpioPortA +#define SL_PWM_LED0_OUTPUT_PIN 4 + +// [TIMER_SL_PWM_LED0]$ + +// <<< sl:end pin_tool >>> + +#ifdef __cplusplus +} +#endif + +#endif // PWM_INIT_LED0_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/sl_pwm_init_led1_config.h b/hardware/board/config/brd4332a_brd4002a/sl_pwm_init_led1_config.h new file mode 100644 index 00000000000..68a21e3276e --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_pwm_init_led1_config.h @@ -0,0 +1,62 @@ +/***************************************************************************//** + * @file + * @brief PWM Driver + ******************************************************************************* + * # License + * Copyright 2022 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 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_LOW +// 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 PD04 +#define SL_PWM_LED1_OUTPUT_PORT gpioPortD +#define SL_PWM_LED1_OUTPUT_PIN 4 + +// [TIMER_SL_PWM_LED1]$ + +// <<< sl:end pin_tool >>> + +#ifdef __cplusplus +} +#endif + +#endif // PWM_INIT_LED1_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/sl_rail_util_pa_config.h b/hardware/board/config/brd4332a_brd4002a/sl_rail_util_pa_config.h new file mode 100644 index 00000000000..a300b57e676 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_rail_util_pa_config.h @@ -0,0 +1,81 @@ +/***************************************************************************//** + * @file + * @brief Power Amplifier 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_PA_CONFIG_H +#define SL_RAIL_UTIL_PA_CONFIG_H + +#include "rail_types.h" + +// <<< Use Configuration Wizard in Context Menu >>> + +// PA Configuration +// Initial PA Power (deci-dBm, 100 = 10.0 dBm) +// Default: 100 +#define SL_RAIL_UTIL_PA_POWER_DECI_DBM 100 +// PA Ramp Time (microseconds) +// <0-65535:1> +// Default: 10 +#define SL_RAIL_UTIL_PA_RAMP_TIME_US 10 +// Milli-volts on PA supply pin (PA_VDD) +// <0-65535:1> +// Default: 3300 +#define SL_RAIL_UTIL_PA_VOLTAGE_MV 3300 +// 2.4 GHz PA Selection +// Highest Possible +// High Power (chip-specific) +// Medium Power (chip-specific) +// Low Power +// Disable +// Default: RAIL_TX_POWER_MODE_2P4GIG_HIGHEST +#define SL_RAIL_UTIL_PA_SELECTION_2P4GHZ RAIL_TX_POWER_MODE_2P4GIG_HIGHEST +// Sub-1 GHz PA Selection +// Disable +// Default: RAIL_TX_POWER_MODE_NONE +#define SL_RAIL_UTIL_PA_SELECTION_SUBGHZ RAIL_TX_POWER_MODE_NONE +// + +// PA Curve Configuration +// Header file containing custom PA curves +// Default: "pa_curves_efr32.h" +#define SL_RAIL_UTIL_PA_CURVE_HEADER "pa_curves_efr32.h" +// Header file containing PA curve types +// Default: "pa_curve_types_efr32.h" +#define SL_RAIL_UTIL_PA_CURVE_TYPES "pa_curve_types_efr32.h" +// + +// PA Calibration Configuration +// Apply PA Calibration Factory Offset +// Default: 1 +#define SL_RAIL_UTIL_PA_CALIBRATION_ENABLE 1 +// + +// <<< end of configuration section >>> + +#endif // SL_RAIL_UTIL_PA_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/sl_rail_util_pti_config.h b/hardware/board/config/brd4332a_brd4002a/sl_rail_util_pti_config.h new file mode 100644 index 00000000000..90431d79360 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/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 PC04 +#define SL_RAIL_UTIL_PTI_DOUT_PORT gpioPortC +#define SL_RAIL_UTIL_PTI_DOUT_PIN 4 + +// PTI DFRAME on PC05 +#define SL_RAIL_UTIL_PTI_DFRAME_PORT gpioPortC +#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/brd4332a_brd4002a/sl_simple_button_btn0_config.h b/hardware/board/config/brd4332a_brd4002a/sl_simple_button_btn0_config.h new file mode 100644 index 00000000000..e564c0eef90 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_simple_button_btn0_config.h @@ -0,0 +1,45 @@ +/***************************************************************************//** + * @file + * @brief Simple Button Driver User 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 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 gpioPortA +#define SL_SIMPLE_BUTTON_BTN0_PIN 4 + +// [GPIO_SL_SIMPLE_BUTTON_BTN0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_SIMPLE_BUTTON_BTN0_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/sl_simple_button_btn1_config.h b/hardware/board/config/brd4332a_brd4002a/sl_simple_button_btn1_config.h new file mode 100644 index 00000000000..2576b2fa0f2 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_simple_button_btn1_config.h @@ -0,0 +1,45 @@ +/***************************************************************************//** + * @file + * @brief Simple Button Driver User 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 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 gpioPortD +#define SL_SIMPLE_BUTTON_BTN1_PIN 4 + +// [GPIO_SL_SIMPLE_BUTTON_BTN1]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_SIMPLE_BUTTON_BTN1_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/sl_simple_led_led0_config.h b/hardware/board/config/brd4332a_brd4002a/sl_simple_led_led0_config.h new file mode 100644 index 00000000000..036ed8f5563 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_simple_led_led0_config.h @@ -0,0 +1,44 @@ +/***************************************************************************//** + * @file + * @brief Simple Led Driver Configuration + ******************************************************************************* + * # 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 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_LOW +// 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 gpioPortA +#define SL_SIMPLE_LED_LED0_PIN 4 + +// [GPIO_SL_SIMPLE_LED_LED0]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_SIMPLE_LED_LED0_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/sl_simple_led_led1_config.h b/hardware/board/config/brd4332a_brd4002a/sl_simple_led_led1_config.h new file mode 100644 index 00000000000..9ba77569f0c --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_simple_led_led1_config.h @@ -0,0 +1,44 @@ +/***************************************************************************//** + * @file + * @brief Simple Led Driver Configuration + ******************************************************************************* + * # 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 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_LOW +// 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 4 + +// [GPIO_SL_SIMPLE_LED_LED1]$ + +// <<< sl:end pin_tool >>> + +#endif // SL_SIMPLE_LED_LED1_CONFIG_H diff --git a/hardware/board/config/brd4332a_brd4002a/sl_uartdrv_usart_vcom_config.h b/hardware/board/config/brd4332a_brd4002a/sl_uartdrv_usart_vcom_config.h new file mode 100644 index 00000000000..f0acae16ad1 --- /dev/null +++ b/hardware/board/config/brd4332a_brd4002a/sl_uartdrv_usart_vcom_config.h @@ -0,0 +1,95 @@ +/***************************************************************************//** + * @file + * @brief UARTDRV_USART 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 SL_UARTDRV_USART_VCOM_CONFIG_H +#define SL_UARTDRV_USART_VCOM_CONFIG_H + +#include "em_usart.h" +// <<< Use Configuration Wizard in Context Menu >>> + +// UART settings +// Baud rate +// Default: 115200 +#define SL_UARTDRV_USART_VCOM_BAUDRATE 115200 + +// Parity mode to use +// No Parity +// Even parity +// Odd parity +// Default: usartNoParity +#define SL_UARTDRV_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_UARTDRV_USART_VCOM_STOP_BITS usartStopbits1 + +// Flow control method +// None +// Software XON/XOFF +// nRTS/nCTS hardware handshake +// UART peripheral controls nRTS/nCTS +// Default: uartdrvFlowControlHw +#define SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE uartdrvFlowControlNone + +// Oversampling selection +// 16x oversampling +// 8x oversampling +// 6x oversampling +// 4x oversampling +// Default: usartOVS16 +#define SL_UARTDRV_USART_VCOM_OVERSAMPLING usartOVS4 + +// Majority vote disable for 16x, 8x and 6x oversampling modes +// True +// False +#define SL_UARTDRV_USART_VCOM_MVDIS false + +// Size of the receive operation queue +// Default: 6 +#define SL_UARTDRV_USART_VCOM_RX_BUFFER_SIZE 6 + +// Size of the transmit operation queue +// Default: 6 +#define SL_UARTDRV_USART_VCOM_TX_BUFFER_SIZE 6 + +// +// <<< end of configuration section >>> + +// <<< sl:start pin_tool >>> +// SL_UARTDRV_USART_VCOM +// $[USART_SL_UARTDRV_USART_VCOM] +#define SL_UARTDRV_USART_VCOM_PERIPHERAL USART0 +#define SL_UARTDRV_USART_VCOM_PERIPHERAL_NO 0 + +// USART0 TX on PA05 +#define SL_UARTDRV_USART_VCOM_TX_PORT gpioPortA +#define SL_UARTDRV_USART_VCOM_TX_PIN 5 + +// USART0 RX on PA06 +#define SL_UARTDRV_USART_VCOM_RX_PORT gpioPortA +#define SL_UARTDRV_USART_VCOM_RX_PIN 6 + + + +// [USART_SL_UARTDRV_USART_VCOM]$ +// <<< sl:end pin_tool >>> + +#endif // SL_UARTDRV_USART_VCOM_CONFIG_H diff --git a/hardware/board/config/component/brd4115a_config.slcc b/hardware/board/config/component/brd4115a_config.slcc new file mode 100644 index 00000000000..f0e48fc086d --- /dev/null +++ b/hardware/board/config/component/brd4115a_config.slcc @@ -0,0 +1,695 @@ +!!omap +- id: brd4115a_config +- label: brd4115a config +- description: Configuration files for BRD4115A +- package: platform +- category: Platform|Board|Config +- quality: production +- ui_hints: + visibility: never +- root_path: hardware/board/config +- requires: + - name: brd4115a +- provides: + - name: brd4115a_config +- config_file: + - condition: + - brd4001a + override: + component: board_control + file_id: board_control_config + path: brd4115a_brd4001a/sl_board_control_config.h + - condition: + - brd4002a + override: + component: board_control + file_id: board_control_config + path: brd4115a_brd4002a/sl_board_control_config.h + - condition: + - brd4001a + override: + component: bootloader_euart_driver + file_id: btl_euart_driver_cfg + path: brd4115a_brd4001a/btl_euart_driver_cfg.h + - condition: + - brd4001a + override: + component: bootloader_ezsp_gpio_activation + file_id: ezsp_gpio_activation_cfg + path: brd4115a_brd4001a/btl_ezsp_gpio_activation_cfg.h + - condition: + - brd4001a + override: + component: bootloader_gpio_activation + file_id: btl_gpio_activation_cfg + path: brd4115a_brd4001a/btl_gpio_activation_cfg.h + - condition: + - brd4001a + override: + component: bootloader_spi_controller_eusart_driver + file_id: btl_spi_controller_eusart_driver_cfg + path: brd4115a_brd4001a/btl_spi_controller_eusart_driver_cfg.h + - condition: + - brd4001a + override: + component: bootloader_spi_controller_usart_driver + file_id: btl_spi_controller_usart_driver_cfg + path: brd4115a_brd4001a/btl_spi_controller_usart_driver_cfg.h + - condition: + - brd4001a + override: + component: bootloader_spi_peripheral_eusart_driver + file_id: btl_spi_peripheral_eusart_driver_cfg + path: brd4115a_brd4001a/btl_spi_peripheral_eusart_driver_cfg.h + - condition: + - brd4001a + override: + component: bootloader_spi_peripheral_usart_driver + file_id: btl_spi_peripheral_usart_driver_cfg + path: brd4115a_brd4001a/btl_spi_peripheral_usart_driver_cfg.h + - condition: + - brd4001a + override: + component: bootloader_uart_driver + file_id: btl_uart_driver_cfg + path: brd4115a_brd4001a/btl_uart_driver_cfg.h + - condition: + - brd4001a + override: + component: cpc_secondary_driver_spi_eusart + file_id: cpc_drv_secondary_spi_eusart_config + instance: exp + path: brd4115a_brd4001a/sl_cpc_drv_secondary_spi_eusart_exp_config.h + - condition: + - brd4001a + override: + component: cpc_secondary_driver_spi_usart + file_id: cpc_drv_secondary_spi_usart_config + instance: exp + path: brd4115a_brd4001a/sl_cpc_drv_secondary_spi_usart_exp_config.h + - condition: + - brd4001a + override: + component: cpc_secondary_driver_uart_eusart + file_id: cpc_drv_secondary_uart_eusart_config + instance: vcom + path: brd4115a_brd4001a/sl_cpc_drv_secondary_uart_eusart_vcom_config.h + - condition: + - brd4001a + override: + component: cpc_secondary_driver_uart_eusart + file_id: cpc_drv_secondary_uart_eusart_config + instance: exp + path: brd4115a_brd4001a/sl_cpc_drv_secondary_uart_eusart_exp_config.h + - condition: + - brd4001a + override: + component: cpc_secondary_driver_uart_usart + file_id: cpc_drv_secondary_uart_usart_config + instance: vcom + path: brd4115a_brd4001a/sl_cpc_drv_secondary_uart_usart_vcom_config.h + - condition: + - brd4001a + override: + component: cpc_secondary_driver_uart_usart + file_id: cpc_drv_secondary_uart_usart_config + instance: exp + path: brd4115a_brd4001a/sl_cpc_drv_secondary_uart_usart_exp_config.h + - condition: + - brd4001a + override: + component: device_init_hfxo + file_id: device_init_hfxo_config + path: brd4115a_brd4001a/sl_device_init_hfxo_config.h + - condition: + - brd4001a + override: + component: device_init_lfxo + file_id: device_init_lfxo_config + path: brd4115a_brd4001a/sl_device_init_lfxo_config.h + - condition: + - brd4001a + override: + component: iostream_eusart + file_id: iostream_eusart_config + instance: vcom + path: brd4115a_brd4001a/sl_iostream_eusart_vcom_config.h + - condition: + - brd4001a + override: + component: iostream_eusart + file_id: iostream_eusart_config + instance: exp + path: brd4115a_brd4001a/sl_iostream_eusart_exp_config.h + - condition: + - brd4001a + override: + component: iostream_usart + file_id: iostream_usart_config + instance: vcom + path: brd4115a_brd4001a/sl_iostream_usart_vcom_config.h + - condition: + - brd4001a + override: + component: iostream_usart + file_id: iostream_usart_config + instance: exp + path: brd4115a_brd4001a/sl_iostream_usart_exp_config.h + - condition: + - brd4001a + override: + component: iot_flash + file_id: iot_flash_cfg + instance: msc + path: brd4115a_brd4001a/iot_flash_cfg_msc.h + - condition: + - brd4001a + override: + component: iot_flash + file_id: iot_flash_cfg + instance: exp + path: brd4115a_brd4001a/iot_flash_cfg_exp.h + - condition: + - brd4001a + override: + component: iot_flash + file_id: iot_flash_cfg + instance: spiflash + path: brd4115a_brd4001a/iot_flash_cfg_spiflash.h + - condition: + - brd4001a + override: + component: iot_pwm + file_id: iot_pwm_cfg + instance: led0 + path: brd4115a_brd4001a/iot_pwm_cfg_led0.h + - condition: + - brd4001a + override: + component: iot_pwm + file_id: iot_pwm_cfg + instance: led1 + path: brd4115a_brd4001a/iot_pwm_cfg_led1.h + - condition: + - brd4001a + override: + component: iot_pwm + file_id: iot_pwm_cfg + instance: exp + path: brd4115a_brd4001a/iot_pwm_cfg_exp.h + - condition: + - brd4001a + override: + component: iot_spi + file_id: iot_spi_cfg + instance: exp + path: brd4115a_brd4001a/iot_spi_cfg_exp.h + - condition: + - brd4001a + override: + component: iot_spi + file_id: iot_spi_cfg + instance: loopback + path: brd4115a_brd4001a/iot_spi_cfg_loopback.h + - condition: + - brd4001a + override: + component: iot_uart + file_id: iot_uart_cfg + instance: vcom + path: brd4115a_brd4001a/iot_uart_cfg_vcom.h + - condition: + - brd4001a + override: + component: iot_uart + file_id: iot_uart_cfg + instance: exp + path: brd4115a_brd4001a/iot_uart_cfg_exp.h + - condition: + - brd4001a + override: + component: iot_uart + file_id: iot_uart_cfg + instance: loopback + path: brd4115a_brd4001a/iot_uart_cfg_loopback.h + - condition: + - brd4001a + override: + component: legacy_ncp_spi + file_id: legacy_ncp_spi_config + path: brd4115a_brd4001a/legacy_ncp_spi_config.h + - condition: + - brd4001a + override: + component: mx25_flash_shutdown_eusart + file_id: mx25_flash_shutdown_eusart_config + path: brd4115a_brd4001a/sl_mx25_flash_shutdown_eusart_config.h + - condition: + - brd4001a + override: + component: mx25_flash_shutdown_usart + file_id: mx25_flash_shutdown_usart_config + path: brd4115a_brd4001a/sl_mx25_flash_shutdown_usart_config.h + - condition: + - brd4001a + override: + component: ot_ncp_spidrv + file_id: sl_ncp_spidrv_usart_config + path: brd4115a_brd4001a/sl_ncp_spidrv_usart_config.h + - condition: + - brd4001a + override: + component: pwm + file_id: pwm_config + instance: led0 + path: brd4115a_brd4001a/sl_pwm_init_led0_config.h + - condition: + - brd4001a + override: + component: pwm + file_id: pwm_config + instance: led1 + path: brd4115a_brd4001a/sl_pwm_init_led1_config.h + - condition: + - brd4001a + override: + component: rail_util_pa + file_id: rail_util_pa_config + path: brd4115a_brd4001a/sl_rail_util_pa_config.h + - condition: + - brd4001a + override: + component: rail_util_pti + file_id: rail_util_pti_config + path: brd4115a_brd4001a/sl_rail_util_pti_config.h + - condition: + - brd4001a + override: + component: simple_button + file_id: simple_button_config + instance: btn0 + path: brd4115a_brd4001a/sl_simple_button_btn0_config.h + - condition: + - brd4001a + override: + component: simple_button + file_id: simple_button_config + instance: btn1 + path: brd4115a_brd4001a/sl_simple_button_btn1_config.h + - condition: + - brd4001a + override: + component: simple_led + file_id: simple_led_config + instance: led0 + path: brd4115a_brd4001a/sl_simple_led_led0_config.h + - condition: + - brd4001a + override: + component: simple_led + file_id: simple_led_config + instance: led1 + path: brd4115a_brd4001a/sl_simple_led_led1_config.h + - condition: + - brd4001a + override: + component: spidrv + file_id: spidrv_config + instance: exp + path: brd4115a_brd4001a/sl_spidrv_exp_config.h + - condition: + - brd4001a + override: + component: spidrv_eusart + file_id: spidrv_eusart_config + instance: exp + path: brd4115a_brd4001a/sl_spidrv_eusart_exp_config.h + - condition: + - brd4001a + override: + component: spidrv_usart + file_id: spidrv_usart_config + instance: exp + path: brd4115a_brd4001a/sl_spidrv_usart_exp_config.h + - condition: + - brd4001a + override: + component: uartdrv_eusart + file_id: uartdrv_eusart_config + instance: vcom + path: brd4115a_brd4001a/sl_uartdrv_eusart_vcom_config.h + - condition: + - brd4001a + override: + component: uartdrv_eusart + file_id: uartdrv_eusart_config + instance: exp + path: brd4115a_brd4001a/sl_uartdrv_eusart_exp_config.h + - condition: + - brd4001a + override: + component: uartdrv_usart + file_id: uartdrv_usart_config + instance: vcom + path: brd4115a_brd4001a/sl_uartdrv_usart_vcom_config.h + - condition: + - brd4001a + override: + component: uartdrv_usart + file_id: uartdrv_usart_config + instance: exp + path: brd4115a_brd4001a/sl_uartdrv_usart_exp_config.h + - condition: + - brd4002a + override: + component: bootloader_euart_driver + file_id: btl_euart_driver_cfg + path: brd4115a_brd4002a/btl_euart_driver_cfg.h + - condition: + - brd4002a + override: + component: bootloader_ezsp_gpio_activation + file_id: ezsp_gpio_activation_cfg + path: brd4115a_brd4002a/btl_ezsp_gpio_activation_cfg.h + - condition: + - brd4002a + override: + component: bootloader_gpio_activation + file_id: btl_gpio_activation_cfg + path: brd4115a_brd4002a/btl_gpio_activation_cfg.h + - condition: + - brd4002a + override: + component: bootloader_spi_controller_eusart_driver + file_id: btl_spi_controller_eusart_driver_cfg + path: brd4115a_brd4002a/btl_spi_controller_eusart_driver_cfg.h + - condition: + - brd4002a + override: + component: bootloader_spi_controller_usart_driver + file_id: btl_spi_controller_usart_driver_cfg + path: brd4115a_brd4002a/btl_spi_controller_usart_driver_cfg.h + - condition: + - brd4002a + override: + component: bootloader_spi_peripheral_eusart_driver + file_id: btl_spi_peripheral_eusart_driver_cfg + path: brd4115a_brd4002a/btl_spi_peripheral_eusart_driver_cfg.h + - condition: + - brd4002a + override: + component: bootloader_spi_peripheral_usart_driver + file_id: btl_spi_peripheral_usart_driver_cfg + path: brd4115a_brd4002a/btl_spi_peripheral_usart_driver_cfg.h + - condition: + - brd4002a + override: + component: bootloader_uart_driver + file_id: btl_uart_driver_cfg + path: brd4115a_brd4002a/btl_uart_driver_cfg.h + - condition: + - brd4002a + override: + component: cpc_secondary_driver_spi_eusart + file_id: cpc_drv_secondary_spi_eusart_config + instance: exp + path: brd4115a_brd4002a/sl_cpc_drv_secondary_spi_eusart_exp_config.h + - condition: + - brd4002a + override: + component: cpc_secondary_driver_spi_usart + file_id: cpc_drv_secondary_spi_usart_config + instance: exp + path: brd4115a_brd4002a/sl_cpc_drv_secondary_spi_usart_exp_config.h + - condition: + - brd4002a + override: + component: cpc_secondary_driver_uart_eusart + file_id: cpc_drv_secondary_uart_eusart_config + instance: vcom + path: brd4115a_brd4002a/sl_cpc_drv_secondary_uart_eusart_vcom_config.h + - condition: + - brd4002a + override: + component: cpc_secondary_driver_uart_eusart + file_id: cpc_drv_secondary_uart_eusart_config + instance: exp + path: brd4115a_brd4002a/sl_cpc_drv_secondary_uart_eusart_exp_config.h + - condition: + - brd4002a + override: + component: cpc_secondary_driver_uart_usart + file_id: cpc_drv_secondary_uart_usart_config + instance: vcom + path: brd4115a_brd4002a/sl_cpc_drv_secondary_uart_usart_vcom_config.h + - condition: + - brd4002a + override: + component: cpc_secondary_driver_uart_usart + file_id: cpc_drv_secondary_uart_usart_config + instance: exp + path: brd4115a_brd4002a/sl_cpc_drv_secondary_uart_usart_exp_config.h + - condition: + - brd4002a + override: + component: device_init_hfxo + file_id: device_init_hfxo_config + path: brd4115a_brd4002a/sl_device_init_hfxo_config.h + - condition: + - brd4002a + override: + component: device_init_lfxo + file_id: device_init_lfxo_config + path: brd4115a_brd4002a/sl_device_init_lfxo_config.h + - condition: + - brd4002a + override: + component: iostream_eusart + file_id: iostream_eusart_config + instance: vcom + path: brd4115a_brd4002a/sl_iostream_eusart_vcom_config.h + - condition: + - brd4002a + override: + component: iostream_eusart + file_id: iostream_eusart_config + instance: exp + path: brd4115a_brd4002a/sl_iostream_eusart_exp_config.h + - condition: + - brd4002a + override: + component: iostream_usart + file_id: iostream_usart_config + instance: vcom + path: brd4115a_brd4002a/sl_iostream_usart_vcom_config.h + - condition: + - brd4002a + override: + component: iostream_usart + file_id: iostream_usart_config + instance: exp + path: brd4115a_brd4002a/sl_iostream_usart_exp_config.h + - condition: + - brd4002a + override: + component: iot_flash + file_id: iot_flash_cfg + instance: msc + path: brd4115a_brd4002a/iot_flash_cfg_msc.h + - condition: + - brd4002a + override: + component: iot_flash + file_id: iot_flash_cfg + instance: exp + path: brd4115a_brd4002a/iot_flash_cfg_exp.h + - condition: + - brd4002a + override: + component: iot_flash + file_id: iot_flash_cfg + instance: spiflash + path: brd4115a_brd4002a/iot_flash_cfg_spiflash.h + - condition: + - brd4002a + override: + component: iot_pwm + file_id: iot_pwm_cfg + instance: led0 + path: brd4115a_brd4002a/iot_pwm_cfg_led0.h + - condition: + - brd4002a + override: + component: iot_pwm + file_id: iot_pwm_cfg + instance: led1 + path: brd4115a_brd4002a/iot_pwm_cfg_led1.h + - condition: + - brd4002a + override: + component: iot_pwm + file_id: iot_pwm_cfg + instance: exp + path: brd4115a_brd4002a/iot_pwm_cfg_exp.h + - condition: + - brd4002a + override: + component: iot_spi + file_id: iot_spi_cfg + instance: exp + path: brd4115a_brd4002a/iot_spi_cfg_exp.h + - condition: + - brd4002a + override: + component: iot_spi + file_id: iot_spi_cfg + instance: loopback + path: brd4115a_brd4002a/iot_spi_cfg_loopback.h + - condition: + - brd4002a + override: + component: iot_uart + file_id: iot_uart_cfg + instance: vcom + path: brd4115a_brd4002a/iot_uart_cfg_vcom.h + - condition: + - brd4002a + override: + component: iot_uart + file_id: iot_uart_cfg + instance: exp + path: brd4115a_brd4002a/iot_uart_cfg_exp.h + - condition: + - brd4002a + override: + component: iot_uart + file_id: iot_uart_cfg + instance: loopback + path: brd4115a_brd4002a/iot_uart_cfg_loopback.h + - condition: + - brd4002a + override: + component: legacy_ncp_spi + file_id: legacy_ncp_spi_config + path: brd4115a_brd4002a/legacy_ncp_spi_config.h + - condition: + - brd4002a + override: + component: mx25_flash_shutdown_eusart + file_id: mx25_flash_shutdown_eusart_config + path: brd4115a_brd4002a/sl_mx25_flash_shutdown_eusart_config.h + - condition: + - brd4002a + override: + component: mx25_flash_shutdown_usart + file_id: mx25_flash_shutdown_usart_config + path: brd4115a_brd4002a/sl_mx25_flash_shutdown_usart_config.h + - condition: + - brd4002a + override: + component: ot_ncp_spidrv + file_id: sl_ncp_spidrv_usart_config + path: brd4115a_brd4002a/sl_ncp_spidrv_usart_config.h + - condition: + - brd4002a + override: + component: pwm + file_id: pwm_config + instance: led0 + path: brd4115a_brd4002a/sl_pwm_init_led0_config.h + - condition: + - brd4002a + override: + component: pwm + file_id: pwm_config + instance: led1 + path: brd4115a_brd4002a/sl_pwm_init_led1_config.h + - condition: + - brd4002a + override: + component: rail_util_pa + file_id: rail_util_pa_config + path: brd4115a_brd4002a/sl_rail_util_pa_config.h + - condition: + - brd4002a + override: + component: rail_util_pti + file_id: rail_util_pti_config + path: brd4115a_brd4002a/sl_rail_util_pti_config.h + - condition: + - brd4002a + override: + component: simple_button + file_id: simple_button_config + instance: btn0 + path: brd4115a_brd4002a/sl_simple_button_btn0_config.h + - condition: + - brd4002a + override: + component: simple_button + file_id: simple_button_config + instance: btn1 + path: brd4115a_brd4002a/sl_simple_button_btn1_config.h + - condition: + - brd4002a + override: + component: simple_led + file_id: simple_led_config + instance: led0 + path: brd4115a_brd4002a/sl_simple_led_led0_config.h + - condition: + - brd4002a + override: + component: simple_led + file_id: simple_led_config + instance: led1 + path: brd4115a_brd4002a/sl_simple_led_led1_config.h + - condition: + - brd4002a + override: + component: spidrv + file_id: spidrv_config + instance: exp + path: brd4115a_brd4002a/sl_spidrv_exp_config.h + - condition: + - brd4002a + override: + component: spidrv_eusart + file_id: spidrv_eusart_config + instance: exp + path: brd4115a_brd4002a/sl_spidrv_eusart_exp_config.h + - condition: + - brd4002a + override: + component: spidrv_usart + file_id: spidrv_usart_config + instance: exp + path: brd4115a_brd4002a/sl_spidrv_usart_exp_config.h + - condition: + - brd4002a + override: + component: uartdrv_eusart + file_id: uartdrv_eusart_config + instance: vcom + path: brd4115a_brd4002a/sl_uartdrv_eusart_vcom_config.h + - condition: + - brd4002a + override: + component: uartdrv_eusart + file_id: uartdrv_eusart_config + instance: exp + path: brd4115a_brd4002a/sl_uartdrv_eusart_exp_config.h + - condition: + - brd4002a + override: + component: uartdrv_usart + file_id: uartdrv_usart_config + instance: vcom + path: brd4115a_brd4002a/sl_uartdrv_usart_vcom_config.h + - condition: + - brd4002a + override: + component: uartdrv_usart + file_id: uartdrv_usart_config + instance: exp + path: brd4115a_brd4002a/sl_uartdrv_usart_exp_config.h diff --git a/hardware/board/config/component/brd4332a_config.slcc b/hardware/board/config/component/brd4332a_config.slcc new file mode 100644 index 00000000000..0416eed6072 --- /dev/null +++ b/hardware/board/config/component/brd4332a_config.slcc @@ -0,0 +1,325 @@ +!!omap +- id: brd4332a_config +- label: brd4332a config +- description: Configuration files for BRD4332A +- package: platform +- category: Platform|Board|Config +- quality: production +- ui_hints: + visibility: never +- root_path: hardware/board/config +- requires: + - name: brd4332a +- provides: + - name: brd4332a_config +- config_file: + - condition: + - brd4001a + override: + component: board_control + file_id: board_control_config + path: brd4332a_brd4001a/sl_board_control_config.h + - condition: + - brd4002a + override: + component: board_control + file_id: board_control_config + path: brd4332a_brd4002a/sl_board_control_config.h + - condition: + - brd4001a + override: + component: bootloader_gpio_activation + file_id: btl_gpio_activation_cfg + path: brd4332a_brd4001a/btl_gpio_activation_cfg.h + - condition: + - brd4001a + override: + component: bootloader_uart_driver + file_id: btl_uart_driver_cfg + path: brd4332a_brd4001a/btl_uart_driver_cfg.h + - condition: + - brd4001a + override: + component: cpc_secondary_driver_uart_usart + file_id: cpc_drv_secondary_uart_usart_config + instance: vcom + path: brd4332a_brd4001a/sl_cpc_drv_secondary_uart_usart_vcom_config.h + - condition: + - brd4001a + override: + component: device_init_lfxo + file_id: device_init_lfxo_config + path: brd4332a_brd4001a/sl_device_init_lfxo_config.h + - condition: + - brd4001a + override: + component: iostream_usart + file_id: iostream_usart_config + instance: vcom + path: brd4332a_brd4001a/sl_iostream_usart_vcom_config.h + - condition: + - brd4001a + override: + component: iot_flash + file_id: iot_flash_cfg + instance: msc + path: brd4332a_brd4001a/iot_flash_cfg_msc.h + - condition: + - brd4001a + override: + component: iot_i2c + file_id: iot_i2c_cfg + instance: sensor + path: brd4332a_brd4001a/iot_i2c_cfg_sensor.h + - condition: + - brd4001a + override: + component: iot_i2c + file_id: iot_i2c_cfg + instance: exp + path: brd4332a_brd4001a/iot_i2c_cfg_exp.h + - condition: + - brd4001a + override: + component: iot_i2c + file_id: iot_i2c_cfg + instance: test + path: brd4332a_brd4001a/iot_i2c_cfg_test.h + - condition: + - brd4001a + override: + component: iot_pwm + file_id: iot_pwm_cfg + instance: led0 + path: brd4332a_brd4001a/iot_pwm_cfg_led0.h + - condition: + - brd4001a + override: + component: iot_pwm + file_id: iot_pwm_cfg + instance: led1 + path: brd4332a_brd4001a/iot_pwm_cfg_led1.h + - condition: + - brd4001a + override: + component: iot_uart + file_id: iot_uart_cfg + instance: vcom + path: brd4332a_brd4001a/iot_uart_cfg_vcom.h + - condition: + - brd4001a + override: + component: iot_uart + file_id: iot_uart_cfg + instance: loopback + path: brd4332a_brd4001a/iot_uart_cfg_loopback.h + - condition: + - brd4001a + override: + component: pwm + file_id: pwm_config + instance: led0 + path: brd4332a_brd4001a/sl_pwm_init_led0_config.h + - condition: + - brd4001a + override: + component: pwm + file_id: pwm_config + instance: led1 + path: brd4332a_brd4001a/sl_pwm_init_led1_config.h + - condition: + - brd4001a + override: + component: rail_util_pa + file_id: rail_util_pa_config + path: brd4332a_brd4001a/sl_rail_util_pa_config.h + - condition: + - brd4001a + override: + component: rail_util_pti + file_id: rail_util_pti_config + path: brd4332a_brd4001a/sl_rail_util_pti_config.h + - condition: + - brd4001a + override: + component: simple_button + file_id: simple_button_config + instance: btn0 + path: brd4332a_brd4001a/sl_simple_button_btn0_config.h + - condition: + - brd4001a + override: + component: simple_button + file_id: simple_button_config + instance: btn1 + path: brd4332a_brd4001a/sl_simple_button_btn1_config.h + - condition: + - brd4001a + override: + component: simple_led + file_id: simple_led_config + instance: led0 + path: brd4332a_brd4001a/sl_simple_led_led0_config.h + - condition: + - brd4001a + override: + component: simple_led + file_id: simple_led_config + instance: led1 + path: brd4332a_brd4001a/sl_simple_led_led1_config.h + - condition: + - brd4001a + override: + component: uartdrv_usart + file_id: uartdrv_usart_config + instance: vcom + path: brd4332a_brd4001a/sl_uartdrv_usart_vcom_config.h + - condition: + - brd4002a + override: + component: bootloader_gpio_activation + file_id: btl_gpio_activation_cfg + path: brd4332a_brd4002a/btl_gpio_activation_cfg.h + - condition: + - brd4002a + override: + component: bootloader_uart_driver + file_id: btl_uart_driver_cfg + path: brd4332a_brd4002a/btl_uart_driver_cfg.h + - condition: + - brd4002a + override: + component: cpc_secondary_driver_uart_usart + file_id: cpc_drv_secondary_uart_usart_config + instance: vcom + path: brd4332a_brd4002a/sl_cpc_drv_secondary_uart_usart_vcom_config.h + - condition: + - brd4002a + override: + component: device_init_lfxo + file_id: device_init_lfxo_config + path: brd4332a_brd4002a/sl_device_init_lfxo_config.h + - condition: + - brd4002a + override: + component: iostream_usart + file_id: iostream_usart_config + instance: vcom + path: brd4332a_brd4002a/sl_iostream_usart_vcom_config.h + - condition: + - brd4002a + override: + component: iot_flash + file_id: iot_flash_cfg + instance: msc + path: brd4332a_brd4002a/iot_flash_cfg_msc.h + - condition: + - brd4002a + override: + component: iot_i2c + file_id: iot_i2c_cfg + instance: sensor + path: brd4332a_brd4002a/iot_i2c_cfg_sensor.h + - condition: + - brd4002a + override: + component: iot_i2c + file_id: iot_i2c_cfg + instance: exp + path: brd4332a_brd4002a/iot_i2c_cfg_exp.h + - condition: + - brd4002a + override: + component: iot_i2c + file_id: iot_i2c_cfg + instance: test + path: brd4332a_brd4002a/iot_i2c_cfg_test.h + - condition: + - brd4002a + override: + component: iot_pwm + file_id: iot_pwm_cfg + instance: led0 + path: brd4332a_brd4002a/iot_pwm_cfg_led0.h + - condition: + - brd4002a + override: + component: iot_pwm + file_id: iot_pwm_cfg + instance: led1 + path: brd4332a_brd4002a/iot_pwm_cfg_led1.h + - condition: + - brd4002a + override: + component: iot_uart + file_id: iot_uart_cfg + instance: vcom + path: brd4332a_brd4002a/iot_uart_cfg_vcom.h + - condition: + - brd4002a + override: + component: iot_uart + file_id: iot_uart_cfg + instance: loopback + path: brd4332a_brd4002a/iot_uart_cfg_loopback.h + - condition: + - brd4002a + override: + component: pwm + file_id: pwm_config + instance: led0 + path: brd4332a_brd4002a/sl_pwm_init_led0_config.h + - condition: + - brd4002a + override: + component: pwm + file_id: pwm_config + instance: led1 + path: brd4332a_brd4002a/sl_pwm_init_led1_config.h + - condition: + - brd4002a + override: + component: rail_util_pa + file_id: rail_util_pa_config + path: brd4332a_brd4002a/sl_rail_util_pa_config.h + - condition: + - brd4002a + override: + component: rail_util_pti + file_id: rail_util_pti_config + path: brd4332a_brd4002a/sl_rail_util_pti_config.h + - condition: + - brd4002a + override: + component: simple_button + file_id: simple_button_config + instance: btn0 + path: brd4332a_brd4002a/sl_simple_button_btn0_config.h + - condition: + - brd4002a + override: + component: simple_button + file_id: simple_button_config + instance: btn1 + path: brd4332a_brd4002a/sl_simple_button_btn1_config.h + - condition: + - brd4002a + override: + component: simple_led + file_id: simple_led_config + instance: led0 + path: brd4332a_brd4002a/sl_simple_led_led0_config.h + - condition: + - brd4002a + override: + component: simple_led + file_id: simple_led_config + instance: led1 + path: brd4332a_brd4002a/sl_simple_led_led1_config.h + - condition: + - brd4002a + override: + component: uartdrv_usart + file_id: uartdrv_usart_config + instance: vcom + path: brd4332a_brd4002a/sl_uartdrv_usart_vcom_config.h diff --git a/hardware/kit/EFR32MG24_BRD4186A/config/retargetserialconfig.h b/hardware/kit/EFR32MG24_BRD4186A/config/retargetserialconfig.h index 665cc80aeaa..dd0e4ed4292 100644 --- a/hardware/kit/EFR32MG24_BRD4186A/config/retargetserialconfig.h +++ b/hardware/kit/EFR32MG24_BRD4186A/config/retargetserialconfig.h @@ -93,7 +93,7 @@ #if defined(RETARGET_VCOM) #define RETARGET_PERIPHERAL_ENABLE() \ - GPIO_PinModeSet(gpioPortB, 4, gpioModePushPull, 1); + GPIO_PinModeSet(gpioPortB, 0, gpioModePushPull, 1); #else #define RETARGET_PERIPHERAL_ENABLE() #endif diff --git a/hardware/kit/EFR32MG24_BRD4187A/config/retargetserialconfig.h b/hardware/kit/EFR32MG24_BRD4187A/config/retargetserialconfig.h index 665cc80aeaa..dd0e4ed4292 100644 --- a/hardware/kit/EFR32MG24_BRD4187A/config/retargetserialconfig.h +++ b/hardware/kit/EFR32MG24_BRD4187A/config/retargetserialconfig.h @@ -93,7 +93,7 @@ #if defined(RETARGET_VCOM) #define RETARGET_PERIPHERAL_ENABLE() \ - GPIO_PinModeSet(gpioPortB, 4, gpioModePushPull, 1); + GPIO_PinModeSet(gpioPortB, 0, gpioModePushPull, 1); #else #define RETARGET_PERIPHERAL_ENABLE() #endif diff --git a/hardware/kit/hwconf.xml b/hardware/kit/hwconf.xml index f4b9d2e064e..3335c7b16b4 100644 --- a/hardware/kit/hwconf.xml +++ b/hardware/kit/hwconf.xml @@ -420,6 +420,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/platform/Device/SiliconLabs/EFR32BG24/Include/efr32bg24a010f1024gj42.h b/platform/Device/SiliconLabs/EFR32BG24/Include/efr32bg24a010f1024gj42.h new file mode 100644 index 00000000000..d7d1008d2b3 --- /dev/null +++ b/platform/Device/SiliconLabs/EFR32BG24/Include/efr32bg24a010f1024gj42.h @@ -0,0 +1,1533 @@ +/**************************************************************************//** + * @file + * @brief CMSIS Cortex-M Peripheral Access Layer Header File + * for EFR32BG24A010F1024GJ42 + ****************************************************************************** + * # 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. + * + *****************************************************************************/ +#ifndef EFR32BG24A010F1024GJ42_H +#define EFR32BG24A010F1024GJ42_H + +#ifdef __cplusplus +extern "C" { +#endif + +/**************************************************************************//** + * @addtogroup Parts + * @{ +*****************************************************************************/ + +/**************************************************************************//** + * @defgroup EFR32BG24A010F1024GJ42 EFR32BG24A010F1024GJ42 + * @{ +*****************************************************************************/ + +/** Interrupt Number Definition */ +typedef enum IRQn +{ + /****** Cortex-M Processor Exceptions Numbers ******************************************/ + NonMaskableInt_IRQn = -14, /*!< -14 Cortex-M Non Maskable Interrupt */ + HardFault_IRQn = -13, /*!< -13 Cortex-M Hard Fault Interrupt */ + MemoryManagement_IRQn = -12, /*!< -12 Cortex-M Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< -11 Cortex-M Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< -10 Cortex-M Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< -5 Cortex-M SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< -4 Cortex-M Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< -2 Cortex-M Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< -1 Cortex-M System Tick Interrupt */ + + /****** EFR32BG24 Peripheral Interrupt Numbers ******************************************/ + + SMU_SECURE_IRQn = 0,/*!< 0 EFR32 SMU_SECURE Interrupt */ + SMU_S_PRIVILEGED_IRQn = 1,/*!< 1 EFR32 SMU_S_PRIVILEGED Interrupt */ + SMU_NS_PRIVILEGED_IRQn= 2,/*!< 2 EFR32 SMU_NS_PRIVILEGED Interrupt */ + EMU_IRQn = 3,/*!< 3 EFR32 EMU Interrupt */ + TIMER0_IRQn = 4,/*!< 4 EFR32 TIMER0 Interrupt */ + TIMER1_IRQn = 5,/*!< 5 EFR32 TIMER1 Interrupt */ + TIMER2_IRQn = 6,/*!< 6 EFR32 TIMER2 Interrupt */ + TIMER3_IRQn = 7,/*!< 7 EFR32 TIMER3 Interrupt */ + TIMER4_IRQn = 8,/*!< 8 EFR32 TIMER4 Interrupt */ + USART0_RX_IRQn = 9,/*!< 9 EFR32 USART0_RX Interrupt */ + USART0_TX_IRQn = 10,/*!< 10 EFR32 USART0_TX Interrupt */ + EUSART0_RX_IRQn = 11,/*!< 11 EFR32 EUSART0_RX Interrupt */ + EUSART0_TX_IRQn = 12,/*!< 12 EFR32 EUSART0_TX Interrupt */ + EUSART1_RX_IRQn = 13,/*!< 13 EFR32 EUSART1_RX Interrupt */ + EUSART1_TX_IRQn = 14,/*!< 14 EFR32 EUSART1_TX Interrupt */ + ICACHE0_IRQn = 16,/*!< 16 EFR32 ICACHE0 Interrupt */ + BURTC_IRQn = 17,/*!< 17 EFR32 BURTC Interrupt */ + LETIMER0_IRQn = 18,/*!< 18 EFR32 LETIMER0 Interrupt */ + SYSCFG_IRQn = 19,/*!< 19 EFR32 SYSCFG Interrupt */ + MPAHBRAM_IRQn = 20,/*!< 20 EFR32 MPAHBRAM Interrupt */ + LDMA_IRQn = 21,/*!< 21 EFR32 LDMA Interrupt */ + LFXO_IRQn = 22,/*!< 22 EFR32 LFXO Interrupt */ + LFRCO_IRQn = 23,/*!< 23 EFR32 LFRCO Interrupt */ + ULFRCO_IRQn = 24,/*!< 24 EFR32 ULFRCO Interrupt */ + GPIO_ODD_IRQn = 25,/*!< 25 EFR32 GPIO_ODD Interrupt */ + GPIO_EVEN_IRQn = 26,/*!< 26 EFR32 GPIO_EVEN Interrupt */ + I2C0_IRQn = 27,/*!< 27 EFR32 I2C0 Interrupt */ + I2C1_IRQn = 28,/*!< 28 EFR32 I2C1 Interrupt */ + EMUDG_IRQn = 29,/*!< 29 EFR32 EMUDG Interrupt */ + AGC_IRQn = 30,/*!< 30 EFR32 AGC Interrupt */ + BUFC_IRQn = 31,/*!< 31 EFR32 BUFC Interrupt */ + FRC_PRI_IRQn = 32,/*!< 32 EFR32 FRC_PRI Interrupt */ + FRC_IRQn = 33,/*!< 33 EFR32 FRC Interrupt */ + MODEM_IRQn = 34,/*!< 34 EFR32 MODEM Interrupt */ + PROTIMER_IRQn = 35,/*!< 35 EFR32 PROTIMER Interrupt */ + RAC_RSM_IRQn = 36,/*!< 36 EFR32 RAC_RSM Interrupt */ + RAC_SEQ_IRQn = 37,/*!< 37 EFR32 RAC_SEQ Interrupt */ + HOSTMAILBOX_IRQn = 38,/*!< 38 EFR32 HOSTMAILBOX Interrupt */ + SYNTH_IRQn = 39,/*!< 39 EFR32 SYNTH Interrupt */ + ACMP0_IRQn = 40,/*!< 40 EFR32 ACMP0 Interrupt */ + ACMP1_IRQn = 41,/*!< 41 EFR32 ACMP1 Interrupt */ + WDOG0_IRQn = 42,/*!< 42 EFR32 WDOG0 Interrupt */ + WDOG1_IRQn = 43,/*!< 43 EFR32 WDOG1 Interrupt */ + HFXO0_IRQn = 44,/*!< 44 EFR32 HFXO0 Interrupt */ + HFRCO0_IRQn = 45,/*!< 45 EFR32 HFRCO0 Interrupt */ + HFRCOEM23_IRQn = 46,/*!< 46 EFR32 HFRCOEM23 Interrupt */ + CMU_IRQn = 47,/*!< 47 EFR32 CMU Interrupt */ + AES_IRQn = 48,/*!< 48 EFR32 AES Interrupt */ + IADC_IRQn = 49,/*!< 49 EFR32 IADC Interrupt */ + MSC_IRQn = 50,/*!< 50 EFR32 MSC Interrupt */ + DPLL0_IRQn = 51,/*!< 51 EFR32 DPLL0 Interrupt */ + EMUEFP_IRQn = 52,/*!< 52 EFR32 EMUEFP Interrupt */ + DCDC_IRQn = 53,/*!< 53 EFR32 DCDC Interrupt */ + PCNT0_IRQn = 54,/*!< 54 EFR32 PCNT0 Interrupt */ + SW0_IRQn = 55,/*!< 55 EFR32 SW0 Interrupt */ + SW1_IRQn = 56,/*!< 56 EFR32 SW1 Interrupt */ + SW2_IRQn = 57,/*!< 57 EFR32 SW2 Interrupt */ + SW3_IRQn = 58,/*!< 58 EFR32 SW3 Interrupt */ + KERNEL0_IRQn = 59,/*!< 59 EFR32 KERNEL0 Interrupt */ + KERNEL1_IRQn = 60,/*!< 60 EFR32 KERNEL1 Interrupt */ + M33CTI0_IRQn = 61,/*!< 61 EFR32 M33CTI0 Interrupt */ + M33CTI1_IRQn = 62,/*!< 62 EFR32 M33CTI1 Interrupt */ + FPUEXH_IRQn = 63,/*!< 63 EFR32 FPUEXH Interrupt */ + SEMBRX_IRQn = 65,/*!< 65 EFR32 SEMBRX Interrupt */ + SEMBTX_IRQn = 66,/*!< 66 EFR32 SEMBTX Interrupt */ + SYSRTC_APP_IRQn = 67,/*!< 67 EFR32 SYSRTC_APP Interrupt */ + SYSRTC_SEQ_IRQn = 68,/*!< 68 EFR32 SYSRTC_SEQ Interrupt */ + KEYSCAN_IRQn = 69,/*!< 69 EFR32 KEYSCAN Interrupt */ + RFECA0_IRQn = 70,/*!< 70 EFR32 RFECA0 Interrupt */ + RFECA1_IRQn = 71,/*!< 71 EFR32 RFECA1 Interrupt */ + VDAC0_IRQn = 72,/*!< 72 EFR32 VDAC0 Interrupt */ + VDAC1_IRQn = 73,/*!< 73 EFR32 VDAC1 Interrupt */ + AHB2AHB0_IRQn = 74,/*!< 74 EFR32 AHB2AHB0 Interrupt */ + AHB2AHB1_IRQn = 75,/*!< 75 EFR32 AHB2AHB1 Interrupt */ +} IRQn_Type; + +/**************************************************************************//** + * @defgroup EFR32BG24A010F1024GJ42_Core EFR32BG24A010F1024GJ42 Core + * @{ + * @brief Processor and Core Peripheral Section + *****************************************************************************/ + +#define __CM33_REV 0x0004U /**< Cortex-M33 Core revision */ +#define __DSP_PRESENT 1U /**< Presence of DSP */ +#define __FPU_PRESENT 1U /**< Presence of FPU */ +#define __MPU_PRESENT 1U /**< Presence of MPU */ +#define __SAUREGION_PRESENT 1U /**< Presence of FPU */ +#define __TZ_PRESENT 1U /**< Presence of TrustZone */ +#define __VTOR_PRESENT 1U /**< Presence of VTOR register in SCB */ +#define __NVIC_PRIO_BITS 4U /**< NVIC interrupt priority bits */ +#define __Vendor_SysTickConfig 0U /**< Is 1 if different SysTick counter is used */ + +/** @} End of group EFR32BG24A010F1024GJ42_Core */ + +/**************************************************************************//** +* @defgroup EFR32BG24A010F1024GJ42_Part EFR32BG24A010F1024GJ42 Part +* @{ +******************************************************************************/ + +/** Part number */ + +/* If part number is not defined as compiler option, define it */ +#if !defined(EFR32BG24A010F1024GJ42) +#define EFR32BG24A010F1024GJ42 1 /**< FULL Part */ +#endif + +/** Configure part number */ +#define PART_NUMBER "EFR32BG24A010F1024GJ42" /**< Part Number */ + +/** Family / Line / Series / Config */ +#define _EFR32_BLUE_FAMILY 1 /** Device Family Name Identifier */ +#define _EFR32_BG_FAMILY 1 /** Device Family Identifier */ +#define _EFR_DEVICE 1 /** Product Line Identifier */ +#define _SILICON_LABS_32B_SERIES_2 /** Product Series Identifier */ +#define _SILICON_LABS_32B_SERIES 2 /** Product Series Identifier */ +#define _SILICON_LABS_32B_SERIES_2_CONFIG_4 /** Product Config Identifier */ +#define _SILICON_LABS_32B_SERIES_2_CONFIG 4 /** Product Config Identifier */ +#define _SILICON_LABS_GECKO_INTERNAL_SDID 215 /** Silicon Labs internal use only */ +#define _SILICON_LABS_GECKO_INTERNAL_SDID_215 /** Silicon Labs internal use only */ +#define _SILICON_LABS_SECURITY_FEATURE_SE 0 /** Mid */ +#define _SILICON_LABS_SECURITY_FEATURE_VAULT 1 /** High */ +#define _SILICON_LABS_SECURITY_FEATURE_ROT 2 /** Root Of Trust */ +#define _SILICON_LABS_SECURITY_FEATURE _SILICON_LABS_SECURITY_FEATURE_SE /** Security feature set */ +#define _SILICON_LABS_DCDC_FEATURE_NOTUSED 0 /** Not Used */ +#define _SILICON_LABS_DCDC_FEATURE_DCDC_BUCK 1 /** Includes Buck DCDC */ +#define _SILICON_LABS_DCDC_FEATURE_DCDC_BOOST 2 /** Includes Boost DCDC */ +#define _SILICON_LABS_DCDC_FEATURE_DCDC_BOB 3 /** Includes Buck or Boost DCDC */ +#define _SILICON_LABS_DCDC_FEATURE _SILICON_LABS_DCDC_FEATURE_DCDC_BUCK/** DCDC feature set */ +#define _SILICON_LABS_EFR32_RADIO_NONE 0 /** No radio present */ +#define _SILICON_LABS_EFR32_RADIO_SUBGHZ 1 /** Radio supports Sub-GHz */ +#define _SILICON_LABS_EFR32_RADIO_2G4HZ 2 /** Radio supports 2.4 GHz */ +#define _SILICON_LABS_EFR32_RADIO_DUALBAND 3 /** Radio supports dual band */ +#define _SILICON_LABS_EFR32_RADIO_TYPE _SILICON_LABS_EFR32_RADIO_2G4HZ /** Radio type */ +#define _SILICON_LABS_EFR32_2G4HZ_MP_PA_MAX_OUTPUT_DBM 10 /** Radio 2G4HZ MP PA output power */ +#define _SILICON_LABS_EFR32_2G4HZ_LP_PA_MAX_OUTPUT_DBM 0 /** Radio 2G4HZ LP PA output power */ +#define _SILICON_LABS_EFR32_2G4HZ_MP_PA_PRESENT/** Radio 2G4HZ MP PA is present */ +#define _SILICON_LABS_EFR32_2G4HZ_LP_PA_PRESENT/** Radio 2G4HZ LP PA is present */ +#define LFRCO_PRECISION_MODE 1 /** Precision mode of LFRCO enabled or disabled */ + +/** Memory Base addresses and limits */ +#define FLASH_MEM_BASE (0x08000000UL) /** FLASH_MEM base address */ +#define FLASH_MEM_SIZE (0x00180000UL) /** FLASH_MEM available address space */ +#define FLASH_MEM_END (0x0817FFFFUL) /** FLASH_MEM end address */ +#define FLASH_MEM_BITS (0x15UL) /** FLASH_MEM used bits */ +#define MSC_FLASH_MEM_BASE (0x08000000UL) /** MSC_FLASH_MEM base address */ +#define MSC_FLASH_MEM_SIZE (0x00180000UL) /** MSC_FLASH_MEM available address space */ +#define MSC_FLASH_MEM_END (0x0817FFFFUL) /** MSC_FLASH_MEM end address */ +#define MSC_FLASH_MEM_BITS (0x15UL) /** MSC_FLASH_MEM used bits */ +#define MSC_FLASH_USERDATA_MEM_BASE (0x0FE00000UL) /** MSC_FLASH_USERDATA_MEM base address */ +#define MSC_FLASH_USERDATA_MEM_SIZE (0x00000400UL) /** MSC_FLASH_USERDATA_MEM available address space */ +#define MSC_FLASH_USERDATA_MEM_END (0x0FE003FFUL) /** MSC_FLASH_USERDATA_MEM end address */ +#define MSC_FLASH_USERDATA_MEM_BITS (0xBUL) /** MSC_FLASH_USERDATA_MEM used bits */ +#define USERDATA_BASE (0x0FE00000UL) /** USERDATA base address */ +#define USERDATA_SIZE (0x00000400UL) /** USERDATA available address space */ +#define USERDATA_END (0x0FE003FFUL) /** USERDATA end address */ +#define USERDATA_BITS (0xBUL) /** USERDATA used bits */ +#define MSC_FLASH_DEVINFO_MEM_BASE (0x0FE08000UL) /** MSC_FLASH_DEVINFO_MEM base address */ +#define MSC_FLASH_DEVINFO_MEM_SIZE (0x00000400UL) /** MSC_FLASH_DEVINFO_MEM available address space */ +#define MSC_FLASH_DEVINFO_MEM_END (0x0FE083FFUL) /** MSC_FLASH_DEVINFO_MEM end address */ +#define MSC_FLASH_DEVINFO_MEM_BITS (0xBUL) /** MSC_FLASH_DEVINFO_MEM used bits */ +#define MSC_FLASH_CHIPCONFIG_MEM_BASE (0x0FE08400UL) /** MSC_FLASH_CHIPCONFIG_MEM base address */ +#define MSC_FLASH_CHIPCONFIG_MEM_SIZE (0x00000600UL) /** MSC_FLASH_CHIPCONFIG_MEM available address space */ +#define MSC_FLASH_CHIPCONFIG_MEM_END (0x0FE089FFUL) /** MSC_FLASH_CHIPCONFIG_MEM end address */ +#define MSC_FLASH_CHIPCONFIG_MEM_BITS (0xBUL) /** MSC_FLASH_CHIPCONFIG_MEM used bits */ +#define DMEM_RAM0_RAM_MEM_BASE (0x20000000UL) /** DMEM_RAM0_RAM_MEM base address */ +#define DMEM_RAM0_RAM_MEM_SIZE (0x00040000UL) /** DMEM_RAM0_RAM_MEM available address space */ +#define DMEM_RAM0_RAM_MEM_END (0x2003FFFFUL) /** DMEM_RAM0_RAM_MEM end address */ +#define DMEM_RAM0_RAM_MEM_BITS (0x13UL) /** DMEM_RAM0_RAM_MEM used bits */ +#define RAM_MEM_BASE (0x20000000UL) /** RAM_MEM base address */ +#define RAM_MEM_SIZE (0x00040000UL) /** RAM_MEM available address space */ +#define RAM_MEM_END (0x2003FFFFUL) /** RAM_MEM end address */ +#define RAM_MEM_BITS (0x13UL) /** RAM_MEM used bits */ +#define RDMEM_SEQRAM_S_MEM_BASE (0xA0000000UL) /** RDMEM_SEQRAM_S_MEM base address */ +#define RDMEM_SEQRAM_S_MEM_SIZE (0x00004000UL) /** RDMEM_SEQRAM_S_MEM available address space */ +#define RDMEM_SEQRAM_S_MEM_END (0xA0003FFFUL) /** RDMEM_SEQRAM_S_MEM end address */ +#define RDMEM_SEQRAM_S_MEM_BITS (0xFUL) /** RDMEM_SEQRAM_S_MEM used bits */ +#define RDMEM_FRCRAM_S_MEM_BASE (0xA0004000UL) /** RDMEM_FRCRAM_S_MEM base address */ +#define RDMEM_FRCRAM_S_MEM_SIZE (0x00001000UL) /** RDMEM_FRCRAM_S_MEM available address space */ +#define RDMEM_FRCRAM_S_MEM_END (0xA0004FFFUL) /** RDMEM_FRCRAM_S_MEM end address */ +#define RDMEM_FRCRAM_S_MEM_BITS (0xDUL) /** RDMEM_FRCRAM_S_MEM used bits */ +#define RDMEM_SEQRAM_NS_MEM_BASE (0xB0000000UL) /** RDMEM_SEQRAM_NS_MEM base address */ +#define RDMEM_SEQRAM_NS_MEM_SIZE (0x00004000UL) /** RDMEM_SEQRAM_NS_MEM available address space */ +#define RDMEM_SEQRAM_NS_MEM_END (0xB0003FFFUL) /** RDMEM_SEQRAM_NS_MEM end address */ +#define RDMEM_SEQRAM_NS_MEM_BITS (0xFUL) /** RDMEM_SEQRAM_NS_MEM used bits */ +#define RDMEM_SEQRAM_SEQRAM_MEM_BASE (0xB0000000UL) /** RDMEM_SEQRAM_SEQRAM_MEM base address */ +#define RDMEM_SEQRAM_SEQRAM_MEM_SIZE (0x00004000UL) /** RDMEM_SEQRAM_SEQRAM_MEM available address space */ +#define RDMEM_SEQRAM_SEQRAM_MEM_END (0xB0003FFFUL) /** RDMEM_SEQRAM_SEQRAM_MEM end address */ +#define RDMEM_SEQRAM_SEQRAM_MEM_BITS (0xFUL) /** RDMEM_SEQRAM_SEQRAM_MEM used bits */ +#define RDMEM_FRCRAM_FRCRAM_MEM_BASE (0xB0004000UL) /** RDMEM_FRCRAM_FRCRAM_MEM base address */ +#define RDMEM_FRCRAM_FRCRAM_MEM_SIZE (0x00001000UL) /** RDMEM_FRCRAM_FRCRAM_MEM available address space */ +#define RDMEM_FRCRAM_FRCRAM_MEM_END (0xB0004FFFUL) /** RDMEM_FRCRAM_FRCRAM_MEM end address */ +#define RDMEM_FRCRAM_FRCRAM_MEM_BITS (0xDUL) /** RDMEM_FRCRAM_FRCRAM_MEM used bits */ +#define RDMEM_FRCRAM_NS_MEM_BASE (0xB0004000UL) /** RDMEM_FRCRAM_NS_MEM base address */ +#define RDMEM_FRCRAM_NS_MEM_SIZE (0x00001000UL) /** RDMEM_FRCRAM_NS_MEM available address space */ +#define RDMEM_FRCRAM_NS_MEM_END (0xB0004FFFUL) /** RDMEM_FRCRAM_NS_MEM end address */ +#define RDMEM_FRCRAM_NS_MEM_BITS (0xDUL) /** RDMEM_FRCRAM_NS_MEM used bits */ + +/** Flash and SRAM limits for EFR32BG24A010F1024GJ42 */ +#define FLASH_BASE (0x08000000UL) /**< Flash Base Address */ +#define FLASH_SIZE (0x00100000UL) /**< Available Flash Memory */ +#define FLASH_PAGE_SIZE (0x00002000UL) /**< Flash Memory page size */ +#define SRAM_BASE (0x20000000UL) /**< SRAM Base Address */ +#define SRAM_SIZE (0x00020000UL) /**< Available SRAM Memory */ +#define DMA_CHAN_COUNT LDMA_CH_NUM /**< Number of DMA channels */ +#define EXT_IRQ_COUNT 76 /**< Number of External (NVIC) interrupts */ + +/* GPIO Avalibility Info */ +#define GPIO_PA_INDEX 0U /**< Index of port PA */ +#define GPIO_PA_COUNT 7U /**< Number of pins on port PA */ +#define GPIO_PA_MASK (0x00FEUL) /**< Port PA pin mask */ +#define GPIO_PA_PIN1 1U /**< GPIO pin PA1 is present. */ +#define GPIO_PA_PIN2 1U /**< GPIO pin PA2 is present. */ +#define GPIO_PA_PIN3 1U /**< GPIO pin PA3 is present. */ +#define GPIO_PA_PIN4 1U /**< GPIO pin PA4 is present. */ +#define GPIO_PA_PIN5 1U /**< GPIO pin PA5 is present. */ +#define GPIO_PA_PIN6 1U /**< GPIO pin PA6 is present. */ +#define GPIO_PA_PIN7 1U /**< GPIO pin PA7 is present. */ +#define GPIO_PB_INDEX 1U /**< Index of port PB */ +#define GPIO_PB_COUNT 3U /**< Number of pins on port PB */ +#define GPIO_PB_MASK (0x000BUL) /**< Port PB pin mask */ +#define GPIO_PB_PIN0 1U /**< GPIO pin PB0 is present. */ +#define GPIO_PB_PIN1 1U /**< GPIO pin PB1 is present. */ +#define GPIO_PB_PIN3 1U /**< GPIO pin PB3 is present. */ +#define GPIO_PC_INDEX 2U /**< Index of port PC */ +#define GPIO_PC_COUNT 7U /**< Number of pins on port PC */ +#define GPIO_PC_MASK (0x027EUL) /**< Port PC pin mask */ +#define GPIO_PC_PIN1 1U /**< GPIO pin PC1 is present. */ +#define GPIO_PC_PIN2 1U /**< GPIO pin PC2 is present. */ +#define GPIO_PC_PIN3 1U /**< GPIO pin PC3 is present. */ +#define GPIO_PC_PIN4 1U /**< GPIO pin PC4 is present. */ +#define GPIO_PC_PIN5 1U /**< GPIO pin PC5 is present. */ +#define GPIO_PC_PIN6 1U /**< GPIO pin PC6 is present. */ +#define GPIO_PC_PIN9 1U /**< GPIO pin PC9 is present. */ +#define GPIO_PD_INDEX 3U /**< Index of port PD */ +#define GPIO_PD_COUNT 3U /**< Number of pins on port PD */ +#define GPIO_PD_MASK (0x0023UL) /**< Port PD pin mask */ +#define GPIO_PD_PIN0 1U /**< GPIO pin PD0 is present. */ +#define GPIO_PD_PIN1 1U /**< GPIO pin PD1 is present. */ +#define GPIO_PD_PIN5 1U /**< GPIO pin PD5 is present. */ + +/* Fixed Resource Locations */ +#define GPIO_SWCLK_PORT GPIO_PA_INDEX /**< Port of SWCLK.*/ +#define GPIO_SWCLK_PIN 1U /**< Pin of SWCLK.*/ +#define GPIO_SWDIO_PORT GPIO_PA_INDEX /**< Port of SWDIO.*/ +#define GPIO_SWDIO_PIN 2U /**< Pin of SWDIO.*/ +#define GPIO_SWV_PORT GPIO_PA_INDEX /**< Port of SWV.*/ +#define GPIO_SWV_PIN 3U /**< Pin of SWV.*/ +#define GPIO_TDI_PORT GPIO_PA_INDEX /**< Port of TDI.*/ +#define GPIO_TDI_PIN 4U /**< Pin of TDI.*/ +#define GPIO_TDO_PORT GPIO_PA_INDEX /**< Port of TDO.*/ +#define GPIO_TDO_PIN 3U /**< Pin of TDO.*/ +#define GPIO_TRACECLK_PORT GPIO_PA_INDEX /**< Port of TRACECLK.*/ +#define GPIO_TRACECLK_PIN 4U /**< Pin of TRACECLK.*/ +#define GPIO_TRACEDATA0_PORT GPIO_PA_INDEX /**< Port of TRACEDATA0.*/ +#define GPIO_TRACEDATA0_PIN 3U /**< Pin of TRACEDATA0.*/ +#define GPIO_TRACEDATA1_PORT GPIO_PA_INDEX /**< Port of TRACEDATA1.*/ +#define GPIO_TRACEDATA1_PIN 5U /**< Pin of TRACEDATA1.*/ +#define GPIO_TRACEDATA2_PORT GPIO_PA_INDEX /**< Port of TRACEDATA2.*/ +#define GPIO_TRACEDATA2_PIN 6U /**< Pin of TRACEDATA2.*/ +#define GPIO_TRACEDATA3_PORT GPIO_PA_INDEX /**< Port of TRACEDATA3.*/ +#define GPIO_TRACEDATA3_PIN 7U /**< Pin of TRACEDATA3.*/ +#define GPIO_EFP_INT_PORT GPIO_PC_INDEX /**< Port of EFP_INT.*/ +#define GPIO_EFP_INT_PIN 5U /**< Pin of EFP_INT.*/ +#define GPIO_EFP_TX_SCL_PORT GPIO_PC_INDEX /**< Port of EFP_TX_SCL.*/ +#define GPIO_EFP_TX_SCL_PIN 2U /**< Pin of EFP_TX_SCL.*/ +#define GPIO_EFP_TX_SDA_PORT GPIO_PC_INDEX /**< Port of EFP_TX_SDA.*/ +#define GPIO_EFP_TX_SDA_PIN 1U /**< Pin of EFP_TX_SDA.*/ +#define GPIO_EM4WU0_PORT GPIO_PA_INDEX /**< Port of EM4WU0.*/ +#define GPIO_EM4WU0_PIN 5U /**< Pin of EM4WU0.*/ +#define GPIO_EM4WU10_PORT GPIO_PD_INDEX /**< Port of EM4WU10.*/ +#define GPIO_EM4WU10_PIN 5U /**< Pin of EM4WU10.*/ +#define GPIO_EM4WU3_PORT GPIO_PB_INDEX /**< Port of EM4WU3.*/ +#define GPIO_EM4WU3_PIN 1U /**< Pin of EM4WU3.*/ +#define GPIO_EM4WU4_PORT GPIO_PB_INDEX /**< Port of EM4WU4.*/ +#define GPIO_EM4WU4_PIN 3U /**< Pin of EM4WU4.*/ +#define GPIO_EM4WU7_PORT GPIO_PC_INDEX /**< Port of EM4WU7.*/ +#define GPIO_EM4WU7_PIN 5U /**< Pin of EM4WU7.*/ +#define GPIO_THMSW_EN_PORT GPIO_PC_INDEX /**< Port of THMSW_EN.*/ +#define GPIO_THMSW_EN_PIN 9U /**< Pin of THMSW_EN.*/ +#define GPIO_THMSW_HALFSWITCH_PORT GPIO_PC_INDEX /**< Port of THMSW_HALFSWITCH.*/ +#define GPIO_THMSW_HALFSWITCH_PIN 9U /**< Pin of THMSW_HALFSWITCH.*/ +#define LFXO_LFXTAL_I_PORT GPIO_PD_INDEX /**< Port of LFXTAL_I.*/ +#define LFXO_LFXTAL_I_PIN 1U /**< Pin of LFXTAL_I.*/ +#define LFXO_LFXTAL_O_PORT GPIO_PD_INDEX /**< Port of LFXTAL_O.*/ +#define LFXO_LFXTAL_O_PIN 0U /**< Pin of LFXTAL_O.*/ +#define LFXO_LF_EXTCLK_PORT GPIO_PD_INDEX /**< Port of LF_EXTCLK.*/ +#define LFXO_LF_EXTCLK_PIN 1U /**< Pin of LF_EXTCLK.*/ +#define VDAC0_CH0_MAIN_OUT_PORT GPIO_PB_INDEX /**< Port of CH0_MAIN_OUT.*/ +#define VDAC0_CH0_MAIN_OUT_PIN 0U /**< Pin of CH0_MAIN_OUT.*/ +#define VDAC0_CH1_MAIN_OUT_PORT GPIO_PB_INDEX /**< Port of CH1_MAIN_OUT.*/ +#define VDAC0_CH1_MAIN_OUT_PIN 1U /**< Pin of CH1_MAIN_OUT.*/ +#define VDAC1_CH1_MAIN_OUT_PORT GPIO_PB_INDEX /**< Port of CH1_MAIN_OUT.*/ +#define VDAC1_CH1_MAIN_OUT_PIN 3U /**< Pin of CH1_MAIN_OUT.*/ + +/* Part number capabilities */ +#define ACMP_PRESENT /** ACMP is available in this part */ +#define ACMP_COUNT 2 /** 2 ACMPs available */ +#define BURAM_PRESENT /** BURAM is available in this part */ +#define BURAM_COUNT 1 /** 1 BURAMs available */ +#define BURTC_PRESENT /** BURTC is available in this part */ +#define BURTC_COUNT 1 /** 1 BURTCs available */ +#define CMU_PRESENT /** CMU is available in this part */ +#define CMU_COUNT 1 /** 1 CMUs available */ +#define DCDC_PRESENT /** DCDC is available in this part */ +#define DCDC_COUNT 1 /** 1 DCDCs available */ +#define DMEM_PRESENT /** DMEM is available in this part */ +#define DMEM_COUNT 1 /** 1 DMEMs available */ +#define DPLL_PRESENT /** DPLL is available in this part */ +#define DPLL_COUNT 1 /** 1 DPLLs available */ +#define EMU_PRESENT /** EMU is available in this part */ +#define EMU_COUNT 1 /** 1 EMUs available */ +#define EUSART_PRESENT /** EUSART is available in this part */ +#define EUSART_COUNT 2 /** 2 EUSARTs available */ +#define FSRCO_PRESENT /** FSRCO is available in this part */ +#define FSRCO_COUNT 1 /** 1 FSRCOs available */ +#define GPCRC_PRESENT /** GPCRC is available in this part */ +#define GPCRC_COUNT 1 /** 1 GPCRCs available */ +#define GPIO_PRESENT /** GPIO is available in this part */ +#define GPIO_COUNT 1 /** 1 GPIOs available */ +#define HFRCO_PRESENT /** HFRCO is available in this part */ +#define HFRCO_COUNT 1 /** 1 HFRCOs available */ +#define HFRCOEM23_PRESENT /** HFRCOEM23 is available in this part */ +#define HFRCOEM23_COUNT 1 /** 1 HFRCOEM23s available */ +#define HFXO_PRESENT /** HFXO is available in this part */ +#define HFXO_COUNT 1 /** 1 HFXOs available */ +#define HOSTMAILBOX_PRESENT /** HOSTMAILBOX is available in this part */ +#define HOSTMAILBOX_COUNT 1 /** 1 HOSTMAILBOXs available */ +#define I2C_PRESENT /** I2C is available in this part */ +#define I2C_COUNT 2 /** 2 I2Cs available */ +#define IADC_PRESENT /** IADC is available in this part */ +#define IADC_COUNT 1 /** 1 IADCs available */ +#define ICACHE_PRESENT /** ICACHE is available in this part */ +#define ICACHE_COUNT 1 /** 1 ICACHEs available */ +#define KEYSCAN_PRESENT /** KEYSCAN is available in this part */ +#define KEYSCAN_COUNT 1 /** 1 KEYSCANs available */ +#define LDMA_PRESENT /** LDMA is available in this part */ +#define LDMA_COUNT 1 /** 1 LDMAs available */ +#define LDMAXBAR_PRESENT /** LDMAXBAR is available in this part */ +#define LDMAXBAR_COUNT 1 /** 1 LDMAXBARs available */ +#define LETIMER_PRESENT /** LETIMER is available in this part */ +#define LETIMER_COUNT 1 /** 1 LETIMERs available */ +#define LFRCO_PRESENT /** LFRCO is available in this part */ +#define LFRCO_COUNT 1 /** 1 LFRCOs available */ +#define LFXO_PRESENT /** LFXO is available in this part */ +#define LFXO_COUNT 1 /** 1 LFXOs available */ +#define MSC_PRESENT /** MSC is available in this part */ +#define MSC_COUNT 1 /** 1 MSCs available */ +#define PCNT_PRESENT /** PCNT is available in this part */ +#define PCNT_COUNT 1 /** 1 PCNTs available */ +#define PRS_PRESENT /** PRS is available in this part */ +#define PRS_COUNT 1 /** 1 PRSs available */ +#define RADIOAES_PRESENT /** RADIOAES is available in this part */ +#define RADIOAES_COUNT 1 /** 1 RADIOAESs available */ +#define SCRATCHPAD_PRESENT /** SCRATCHPAD is available in this part */ +#define SCRATCHPAD_COUNT 1 /** 1 SCRATCHPADs available */ +#define SEMAILBOX_PRESENT /** SEMAILBOX is available in this part */ +#define SEMAILBOX_COUNT 1 /** 1 SEMAILBOXs available */ +#define SMU_PRESENT /** SMU is available in this part */ +#define SMU_COUNT 1 /** 1 SMUs available */ +#define SYSCFG_PRESENT /** SYSCFG is available in this part */ +#define SYSCFG_COUNT 1 /** 1 SYSCFGs available */ +#define SYSRTC_PRESENT /** SYSRTC is available in this part */ +#define SYSRTC_COUNT 1 /** 1 SYSRTCs available */ +#define TIMER_PRESENT /** TIMER is available in this part */ +#define TIMER_COUNT 5 /** 5 TIMERs available */ +#define ULFRCO_PRESENT /** ULFRCO is available in this part */ +#define ULFRCO_COUNT 1 /** 1 ULFRCOs available */ +#define USART_PRESENT /** USART is available in this part */ +#define USART_COUNT 1 /** 1 USARTs available */ +#define VDAC_PRESENT /** VDAC is available in this part */ +#define VDAC_COUNT 2 /** 2 VDACs available */ +#define WDOG_PRESENT /** WDOG is available in this part */ +#define WDOG_COUNT 2 /** 2 WDOGs available */ +#define DEVINFO_PRESENT /** DEVINFO is available in this part */ +#define DEVINFO_COUNT 1 /** 1 DEVINFOs available */ + +/* Include standard ARM headers for the core */ +#include "core_cm33.h" /* Core Header File */ +#include "system_efr32bg24.h" /* System Header File */ + + +/** @} End of group EFR32BG24A010F1024GJ42_Part */ + +/**************************************************************************//** + * @defgroup EFR32BG24A010F1024GJ42_Peripheral_TypeDefs EFR32BG24A010F1024GJ42 Peripheral TypeDefs + * @{ + * @brief Device Specific Peripheral Register Structures + *****************************************************************************/ +#include "efr32bg24_scratchpad.h" +#include "efr32bg24_emu.h" +#include "efr32bg24_cmu.h" +#include "efr32bg24_hfrco.h" +#include "efr32bg24_fsrco.h" +#include "efr32bg24_dpll.h" +#include "efr32bg24_lfxo.h" +#include "efr32bg24_lfrco.h" +#include "efr32bg24_ulfrco.h" +#include "efr32bg24_msc.h" +#include "efr32bg24_icache.h" +#include "efr32bg24_prs.h" +#include "efr32bg24_gpio.h" +#include "efr32bg24_ldma.h" +#include "efr32bg24_ldmaxbar.h" +#include "efr32bg24_timer.h" +#include "efr32bg24_usart.h" +#include "efr32bg24_burtc.h" +#include "efr32bg24_i2c.h" +#include "efr32bg24_syscfg.h" +#include "efr32bg24_buram.h" +#include "efr32bg24_gpcrc.h" +#include "efr32bg24_dcdc.h" +#include "efr32bg24_mailbox.h" +#include "efr32bg24_eusart.h" +#include "efr32bg24_sysrtc.h" +#include "efr32bg24_keyscan.h" +#include "efr32bg24_mpahbram.h" +#include "efr32bg24_aes.h" +#include "efr32bg24_smu.h" +#include "efr32bg24_letimer.h" +#include "efr32bg24_iadc.h" +#include "efr32bg24_acmp.h" +#include "efr32bg24_vdac.h" +#include "efr32bg24_pcnt.h" +#include "efr32bg24_hfxo.h" +#include "efr32bg24_wdog.h" +#include "efr32bg24_semailbox.h" +#include "efr32bg24_devinfo.h" + +/* Custom headers for LDMAXBAR and PRS mappings */ +#include "efr32bg24_prs_signals.h" +#include "efr32bg24_dma_descriptor.h" +#include "efr32bg24_ldmaxbar_defines.h" +/** @} End of group EFR32BG24A010F1024GJ42_Peripheral_TypeDefs */ + +/**************************************************************************//** +* @defgroup EFR32BG24A010F1024GJ42_Peripheral_Base EFR32BG24A010F1024GJ42 Peripheral Memory Map +* @{ +*****************************************************************************/ + +#define SCRATCHPAD_S_BASE (0x40000000UL) /* SCRATCHPAD_S base address */ +#define EMU_S_BASE (0x40004000UL) /* EMU_S base address */ +#define CMU_S_BASE (0x40008000UL) /* CMU_S base address */ +#define HFRCO0_S_BASE (0x40010000UL) /* HFRCO0_S base address */ +#define FSRCO_S_BASE (0x40018000UL) /* FSRCO_S base address */ +#define DPLL0_S_BASE (0x4001C000UL) /* DPLL0_S base address */ +#define LFXO_S_BASE (0x40020000UL) /* LFXO_S base address */ +#define LFRCO_S_BASE (0x40024000UL) /* LFRCO_S base address */ +#define ULFRCO_S_BASE (0x40028000UL) /* ULFRCO_S base address */ +#define MSC_S_BASE (0x40030000UL) /* MSC_S base address */ +#define ICACHE0_S_BASE (0x40034000UL) /* ICACHE0_S base address */ +#define PRS_S_BASE (0x40038000UL) /* PRS_S base address */ +#define GPIO_S_BASE (0x4003C000UL) /* GPIO_S base address */ +#define LDMA_S_BASE (0x40040000UL) /* LDMA_S base address */ +#define LDMAXBAR_S_BASE (0x40044000UL) /* LDMAXBAR_S base address */ +#define TIMER0_S_BASE (0x40048000UL) /* TIMER0_S base address */ +#define TIMER1_S_BASE (0x4004C000UL) /* TIMER1_S base address */ +#define TIMER2_S_BASE (0x40050000UL) /* TIMER2_S base address */ +#define TIMER3_S_BASE (0x40054000UL) /* TIMER3_S base address */ +#define TIMER4_S_BASE (0x40058000UL) /* TIMER4_S base address */ +#define USART0_S_BASE (0x4005C000UL) /* USART0_S base address */ +#define BURTC_S_BASE (0x40064000UL) /* BURTC_S base address */ +#define I2C1_S_BASE (0x40068000UL) /* I2C1_S base address */ +#define SYSCFG_S_CFGNS_BASE (0x40078000UL) /* SYSCFG_S_CFGNS base address */ +#define SYSCFG_S_BASE (0x4007C000UL) /* SYSCFG_S base address */ +#define BURAM_S_BASE (0x40080000UL) /* BURAM_S base address */ +#define GPCRC_S_BASE (0x40088000UL) /* GPCRC_S base address */ +#define DCDC_S_BASE (0x40094000UL) /* DCDC_S base address */ +#define HOSTMAILBOX_S_BASE (0x40098000UL) /* HOSTMAILBOX_S base address */ +#define EUSART1_S_BASE (0x400A0000UL) /* EUSART1_S base address */ +#define SYSRTC0_S_BASE (0x400A8000UL) /* SYSRTC0_S base address */ +#define KEYSCAN_S_BASE (0x400B0000UL) /* KEYSCAN_S base address */ +#define DMEM_S_BASE (0x400B4000UL) /* DMEM_S base address */ +#define RADIOAES_S_BASE (0x44000000UL) /* RADIOAES_S base address */ +#define SMU_S_BASE (0x44008000UL) /* SMU_S base address */ +#define SMU_S_CFGNS_BASE (0x4400C000UL) /* SMU_S_CFGNS base address */ +#define LETIMER0_S_BASE (0x49000000UL) /* LETIMER0_S base address */ +#define IADC0_S_BASE (0x49004000UL) /* IADC0_S base address */ +#define ACMP0_S_BASE (0x49008000UL) /* ACMP0_S base address */ +#define ACMP1_S_BASE (0x4900C000UL) /* ACMP1_S base address */ +#define VDAC0_S_BASE (0x49024000UL) /* VDAC0_S base address */ +#define VDAC1_S_BASE (0x49028000UL) /* VDAC1_S base address */ +#define PCNT0_S_BASE (0x49030000UL) /* PCNT0_S base address */ +#define HFRCOEM23_S_BASE (0x4A000000UL) /* HFRCOEM23_S base address */ +#define HFXO0_S_BASE (0x4A004000UL) /* HFXO0_S base address */ +#define I2C0_S_BASE (0x4B000000UL) /* I2C0_S base address */ +#define WDOG0_S_BASE (0x4B004000UL) /* WDOG0_S base address */ +#define WDOG1_S_BASE (0x4B008000UL) /* WDOG1_S base address */ +#define EUSART0_S_BASE (0x4B010000UL) /* EUSART0_S base address */ +#define SEMAILBOX_S_HOST_BASE (0x4C000000UL) /* SEMAILBOX_S_HOST base address */ + +#define SCRATCHPAD_NS_BASE (0x50000000UL) /* SCRATCHPAD_NS base address */ +#define EMU_NS_BASE (0x50004000UL) /* EMU_NS base address */ +#define CMU_NS_BASE (0x50008000UL) /* CMU_NS base address */ +#define HFRCO0_NS_BASE (0x50010000UL) /* HFRCO0_NS base address */ +#define FSRCO_NS_BASE (0x50018000UL) /* FSRCO_NS base address */ +#define DPLL0_NS_BASE (0x5001C000UL) /* DPLL0_NS base address */ +#define LFXO_NS_BASE (0x50020000UL) /* LFXO_NS base address */ +#define LFRCO_NS_BASE (0x50024000UL) /* LFRCO_NS base address */ +#define ULFRCO_NS_BASE (0x50028000UL) /* ULFRCO_NS base address */ +#define MSC_NS_BASE (0x50030000UL) /* MSC_NS base address */ +#define ICACHE0_NS_BASE (0x50034000UL) /* ICACHE0_NS base address */ +#define PRS_NS_BASE (0x50038000UL) /* PRS_NS base address */ +#define GPIO_NS_BASE (0x5003C000UL) /* GPIO_NS base address */ +#define LDMA_NS_BASE (0x50040000UL) /* LDMA_NS base address */ +#define LDMAXBAR_NS_BASE (0x50044000UL) /* LDMAXBAR_NS base address */ +#define TIMER0_NS_BASE (0x50048000UL) /* TIMER0_NS base address */ +#define TIMER1_NS_BASE (0x5004C000UL) /* TIMER1_NS base address */ +#define TIMER2_NS_BASE (0x50050000UL) /* TIMER2_NS base address */ +#define TIMER3_NS_BASE (0x50054000UL) /* TIMER3_NS base address */ +#define TIMER4_NS_BASE (0x50058000UL) /* TIMER4_NS base address */ +#define USART0_NS_BASE (0x5005C000UL) /* USART0_NS base address */ +#define BURTC_NS_BASE (0x50064000UL) /* BURTC_NS base address */ +#define I2C1_NS_BASE (0x50068000UL) /* I2C1_NS base address */ +#define SYSCFG_NS_CFGNS_BASE (0x50078000UL) /* SYSCFG_NS_CFGNS base address */ +#define SYSCFG_NS_BASE (0x5007C000UL) /* SYSCFG_NS base address */ +#define BURAM_NS_BASE (0x50080000UL) /* BURAM_NS base address */ +#define GPCRC_NS_BASE (0x50088000UL) /* GPCRC_NS base address */ +#define DCDC_NS_BASE (0x50094000UL) /* DCDC_NS base address */ +#define HOSTMAILBOX_NS_BASE (0x50098000UL) /* HOSTMAILBOX_NS base address */ +#define EUSART1_NS_BASE (0x500A0000UL) /* EUSART1_NS base address */ +#define SYSRTC0_NS_BASE (0x500A8000UL) /* SYSRTC0_NS base address */ +#define KEYSCAN_NS_BASE (0x500B0000UL) /* KEYSCAN_NS base address */ +#define DMEM_NS_BASE (0x500B4000UL) /* DMEM_NS base address */ +#define RADIOAES_NS_BASE (0x54000000UL) /* RADIOAES_NS base address */ +#define SMU_NS_BASE (0x54008000UL) /* SMU_NS base address */ +#define SMU_NS_CFGNS_BASE (0x5400C000UL) /* SMU_NS_CFGNS base address */ +#define LETIMER0_NS_BASE (0x59000000UL) /* LETIMER0_NS base address */ +#define IADC0_NS_BASE (0x59004000UL) /* IADC0_NS base address */ +#define ACMP0_NS_BASE (0x59008000UL) /* ACMP0_NS base address */ +#define ACMP1_NS_BASE (0x5900C000UL) /* ACMP1_NS base address */ +#define VDAC0_NS_BASE (0x59024000UL) /* VDAC0_NS base address */ +#define VDAC1_NS_BASE (0x59028000UL) /* VDAC1_NS base address */ +#define PCNT0_NS_BASE (0x59030000UL) /* PCNT0_NS base address */ +#define HFRCOEM23_NS_BASE (0x5A000000UL) /* HFRCOEM23_NS base address */ +#define HFXO0_NS_BASE (0x5A004000UL) /* HFXO0_NS base address */ +#define I2C0_NS_BASE (0x5B000000UL) /* I2C0_NS base address */ +#define WDOG0_NS_BASE (0x5B004000UL) /* WDOG0_NS base address */ +#define WDOG1_NS_BASE (0x5B008000UL) /* WDOG1_NS base address */ +#define EUSART0_NS_BASE (0x5B010000UL) /* EUSART0_NS base address */ +#define SEMAILBOX_NS_HOST_BASE (0x5C000000UL) /* SEMAILBOX_NS_HOST base address */ + + +#if defined(SL_COMPONENT_CATALOG_PRESENT) +#include "sl_component_catalog.h" +#endif +#if defined(SL_CATALOG_TRUSTZONE_SECURE_CONFIG_PRESENT) +#include "sl_trustzone_secure_config.h" +#endif + +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SCRATCHPAD_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SCRATCHPAD_S) && (SL_TRUSTZONE_PERIPHERAL_SCRATCHPAD_S != 0))) +#define SCRATCHPAD_BASE (SCRATCHPAD_S_BASE) /* SCRATCHPAD base address */ +#else +#define SCRATCHPAD_BASE (SCRATCHPAD_NS_BASE) /* SCRATCHPAD base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SCRATCHPAD_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_EMU_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_EMU_S) && (SL_TRUSTZONE_PERIPHERAL_EMU_S != 0))) +#define EMU_BASE (EMU_S_BASE) /* EMU base address */ +#else +#define EMU_BASE (EMU_NS_BASE) /* EMU base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_EMU_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_CMU_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_CMU_S) && (SL_TRUSTZONE_PERIPHERAL_CMU_S != 0))) +#define CMU_BASE (CMU_S_BASE) /* CMU base address */ +#else +#define CMU_BASE (CMU_NS_BASE) /* CMU base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_CMU_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_HFRCO0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_HFRCO0_S) && (SL_TRUSTZONE_PERIPHERAL_HFRCO0_S != 0))) +#define HFRCO0_BASE (HFRCO0_S_BASE) /* HFRCO0 base address */ +#else +#define HFRCO0_BASE (HFRCO0_NS_BASE) /* HFRCO0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_HFRCO0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_FSRCO_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_FSRCO_S) && (SL_TRUSTZONE_PERIPHERAL_FSRCO_S != 0))) +#define FSRCO_BASE (FSRCO_S_BASE) /* FSRCO base address */ +#else +#define FSRCO_BASE (FSRCO_NS_BASE) /* FSRCO base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_FSRCO_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_DPLL0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_DPLL0_S) && (SL_TRUSTZONE_PERIPHERAL_DPLL0_S != 0))) +#define DPLL0_BASE (DPLL0_S_BASE) /* DPLL0 base address */ +#else +#define DPLL0_BASE (DPLL0_NS_BASE) /* DPLL0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_DPLL0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_LFXO_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_LFXO_S) && (SL_TRUSTZONE_PERIPHERAL_LFXO_S != 0))) +#define LFXO_BASE (LFXO_S_BASE) /* LFXO base address */ +#else +#define LFXO_BASE (LFXO_NS_BASE) /* LFXO base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_LFXO_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_LFRCO_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_LFRCO_S) && (SL_TRUSTZONE_PERIPHERAL_LFRCO_S != 0))) +#define LFRCO_BASE (LFRCO_S_BASE) /* LFRCO base address */ +#else +#define LFRCO_BASE (LFRCO_NS_BASE) /* LFRCO base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_LFRCO_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_ULFRCO_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_ULFRCO_S) && (SL_TRUSTZONE_PERIPHERAL_ULFRCO_S != 0))) +#define ULFRCO_BASE (ULFRCO_S_BASE) /* ULFRCO base address */ +#else +#define ULFRCO_BASE (ULFRCO_NS_BASE) /* ULFRCO base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_ULFRCO_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_MSC_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_MSC_S) && (SL_TRUSTZONE_PERIPHERAL_MSC_S != 0))) +#define MSC_BASE (MSC_S_BASE) /* MSC base address */ +#else +#define MSC_BASE (MSC_NS_BASE) /* MSC base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_MSC_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_ICACHE0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_ICACHE0_S) && (SL_TRUSTZONE_PERIPHERAL_ICACHE0_S != 0))) +#define ICACHE0_BASE (ICACHE0_S_BASE) /* ICACHE0 base address */ +#else +#define ICACHE0_BASE (ICACHE0_NS_BASE) /* ICACHE0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_ICACHE0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_PRS_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_PRS_S) && (SL_TRUSTZONE_PERIPHERAL_PRS_S != 0))) +#define PRS_BASE (PRS_S_BASE) /* PRS base address */ +#else +#define PRS_BASE (PRS_NS_BASE) /* PRS base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_PRS_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_GPIO_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_GPIO_S) && (SL_TRUSTZONE_PERIPHERAL_GPIO_S != 0))) +#define GPIO_BASE (GPIO_S_BASE) /* GPIO base address */ +#else +#define GPIO_BASE (GPIO_NS_BASE) /* GPIO base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_GPIO_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_LDMA_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_LDMA_S) && (SL_TRUSTZONE_PERIPHERAL_LDMA_S != 0))) +#define LDMA_BASE (LDMA_S_BASE) /* LDMA base address */ +#else +#define LDMA_BASE (LDMA_NS_BASE) /* LDMA base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_LDMA_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_LDMAXBAR_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_LDMAXBAR_S) && (SL_TRUSTZONE_PERIPHERAL_LDMAXBAR_S != 0))) +#define LDMAXBAR_BASE (LDMAXBAR_S_BASE) /* LDMAXBAR base address */ +#else +#define LDMAXBAR_BASE (LDMAXBAR_NS_BASE) /* LDMAXBAR base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_LDMAXBAR_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_TIMER0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_TIMER0_S) && (SL_TRUSTZONE_PERIPHERAL_TIMER0_S != 0))) +#define TIMER0_BASE (TIMER0_S_BASE) /* TIMER0 base address */ +#else +#define TIMER0_BASE (TIMER0_NS_BASE) /* TIMER0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_TIMER0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_TIMER1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_TIMER1_S) && (SL_TRUSTZONE_PERIPHERAL_TIMER1_S != 0))) +#define TIMER1_BASE (TIMER1_S_BASE) /* TIMER1 base address */ +#else +#define TIMER1_BASE (TIMER1_NS_BASE) /* TIMER1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_TIMER1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_TIMER2_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_TIMER2_S) && (SL_TRUSTZONE_PERIPHERAL_TIMER2_S != 0))) +#define TIMER2_BASE (TIMER2_S_BASE) /* TIMER2 base address */ +#else +#define TIMER2_BASE (TIMER2_NS_BASE) /* TIMER2 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_TIMER2_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_TIMER3_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_TIMER3_S) && (SL_TRUSTZONE_PERIPHERAL_TIMER3_S != 0))) +#define TIMER3_BASE (TIMER3_S_BASE) /* TIMER3 base address */ +#else +#define TIMER3_BASE (TIMER3_NS_BASE) /* TIMER3 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_TIMER3_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_TIMER4_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_TIMER4_S) && (SL_TRUSTZONE_PERIPHERAL_TIMER4_S != 0))) +#define TIMER4_BASE (TIMER4_S_BASE) /* TIMER4 base address */ +#else +#define TIMER4_BASE (TIMER4_NS_BASE) /* TIMER4 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_TIMER4_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_USART0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_USART0_S) && (SL_TRUSTZONE_PERIPHERAL_USART0_S != 0))) +#define USART0_BASE (USART0_S_BASE) /* USART0 base address */ +#else +#define USART0_BASE (USART0_NS_BASE) /* USART0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_USART0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_BURTC_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_BURTC_S) && (SL_TRUSTZONE_PERIPHERAL_BURTC_S != 0))) +#define BURTC_BASE (BURTC_S_BASE) /* BURTC base address */ +#else +#define BURTC_BASE (BURTC_NS_BASE) /* BURTC base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_BURTC_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_I2C1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_I2C1_S) && (SL_TRUSTZONE_PERIPHERAL_I2C1_S != 0))) +#define I2C1_BASE (I2C1_S_BASE) /* I2C1 base address */ +#else +#define I2C1_BASE (I2C1_NS_BASE) /* I2C1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_I2C1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SYSCFG_CFGNS_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SYSCFG_CFGNS_S) && (SL_TRUSTZONE_PERIPHERAL_SYSCFG_CFGNS_S != 0))) +#define SYSCFG_CFGNS_BASE (SYSCFG_S_CFGNS_BASE) /* SYSCFG_CFGNS base address */ +#else +#define SYSCFG_CFGNS_BASE (SYSCFG_NS_CFGNS_BASE) /* SYSCFG_CFGNS base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SYSCFG_CFGNS_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SYSCFG_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SYSCFG_S) && (SL_TRUSTZONE_PERIPHERAL_SYSCFG_S != 0))) +#define SYSCFG_BASE (SYSCFG_S_BASE) /* SYSCFG base address */ +#else +#define SYSCFG_BASE (SYSCFG_NS_BASE) /* SYSCFG base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SYSCFG_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_BURAM_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_BURAM_S) && (SL_TRUSTZONE_PERIPHERAL_BURAM_S != 0))) +#define BURAM_BASE (BURAM_S_BASE) /* BURAM base address */ +#else +#define BURAM_BASE (BURAM_NS_BASE) /* BURAM base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_BURAM_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_GPCRC_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_GPCRC_S) && (SL_TRUSTZONE_PERIPHERAL_GPCRC_S != 0))) +#define GPCRC_BASE (GPCRC_S_BASE) /* GPCRC base address */ +#else +#define GPCRC_BASE (GPCRC_NS_BASE) /* GPCRC base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_GPCRC_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_DCDC_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_DCDC_S) && (SL_TRUSTZONE_PERIPHERAL_DCDC_S != 0))) +#define DCDC_BASE (DCDC_S_BASE) /* DCDC base address */ +#else +#define DCDC_BASE (DCDC_NS_BASE) /* DCDC base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_DCDC_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_HOSTMAILBOX_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_HOSTMAILBOX_S) && (SL_TRUSTZONE_PERIPHERAL_HOSTMAILBOX_S != 0))) +#define HOSTMAILBOX_BASE (HOSTMAILBOX_S_BASE) /* HOSTMAILBOX base address */ +#else +#define HOSTMAILBOX_BASE (HOSTMAILBOX_NS_BASE) /* HOSTMAILBOX base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_HOSTMAILBOX_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_EUSART1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_EUSART1_S) && (SL_TRUSTZONE_PERIPHERAL_EUSART1_S != 0))) +#define EUSART1_BASE (EUSART1_S_BASE) /* EUSART1 base address */ +#else +#define EUSART1_BASE (EUSART1_NS_BASE) /* EUSART1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_EUSART1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SYSRTC0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SYSRTC0_S) && (SL_TRUSTZONE_PERIPHERAL_SYSRTC0_S != 0))) +#define SYSRTC0_BASE (SYSRTC0_S_BASE) /* SYSRTC0 base address */ +#else +#define SYSRTC0_BASE (SYSRTC0_NS_BASE) /* SYSRTC0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SYSRTC0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_KEYSCAN_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_KEYSCAN_S) && (SL_TRUSTZONE_PERIPHERAL_KEYSCAN_S != 0))) +#define KEYSCAN_BASE (KEYSCAN_S_BASE) /* KEYSCAN base address */ +#else +#define KEYSCAN_BASE (KEYSCAN_NS_BASE) /* KEYSCAN base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_KEYSCAN_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_DMEM_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_DMEM_S) && (SL_TRUSTZONE_PERIPHERAL_DMEM_S != 0))) +#define DMEM_BASE (DMEM_S_BASE) /* DMEM base address */ +#else +#define DMEM_BASE (DMEM_NS_BASE) /* DMEM base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_DMEM_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_RADIOAES_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_RADIOAES_S) && (SL_TRUSTZONE_PERIPHERAL_RADIOAES_S != 0))) +#define RADIOAES_BASE (RADIOAES_S_BASE) /* RADIOAES base address */ +#else +#define RADIOAES_BASE (RADIOAES_NS_BASE) /* RADIOAES base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_RADIOAES_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SMU_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SMU_S) && (SL_TRUSTZONE_PERIPHERAL_SMU_S != 0))) +#define SMU_BASE (SMU_S_BASE) /* SMU base address */ +#else +#define SMU_BASE (SMU_S_BASE) /* SMU base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SMU_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SMU_CFGNS_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SMU_CFGNS_S) && (SL_TRUSTZONE_PERIPHERAL_SMU_CFGNS_S != 0))) +#define SMU_CFGNS_BASE (SMU_S_CFGNS_BASE) /* SMU_CFGNS base address */ +#else +#define SMU_CFGNS_BASE (SMU_NS_CFGNS_BASE) /* SMU_CFGNS base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SMU_CFGNS_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_LETIMER0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_LETIMER0_S) && (SL_TRUSTZONE_PERIPHERAL_LETIMER0_S != 0))) +#define LETIMER0_BASE (LETIMER0_S_BASE) /* LETIMER0 base address */ +#else +#define LETIMER0_BASE (LETIMER0_NS_BASE) /* LETIMER0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_LETIMER0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_IADC0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_IADC0_S) && (SL_TRUSTZONE_PERIPHERAL_IADC0_S != 0))) +#define IADC0_BASE (IADC0_S_BASE) /* IADC0 base address */ +#else +#define IADC0_BASE (IADC0_NS_BASE) /* IADC0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_IADC0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_ACMP0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_ACMP0_S) && (SL_TRUSTZONE_PERIPHERAL_ACMP0_S != 0))) +#define ACMP0_BASE (ACMP0_S_BASE) /* ACMP0 base address */ +#else +#define ACMP0_BASE (ACMP0_NS_BASE) /* ACMP0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_ACMP0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_ACMP1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_ACMP1_S) && (SL_TRUSTZONE_PERIPHERAL_ACMP1_S != 0))) +#define ACMP1_BASE (ACMP1_S_BASE) /* ACMP1 base address */ +#else +#define ACMP1_BASE (ACMP1_NS_BASE) /* ACMP1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_ACMP1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_VDAC0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_VDAC0_S) && (SL_TRUSTZONE_PERIPHERAL_VDAC0_S != 0))) +#define VDAC0_BASE (VDAC0_S_BASE) /* VDAC0 base address */ +#else +#define VDAC0_BASE (VDAC0_NS_BASE) /* VDAC0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_VDAC0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_VDAC1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_VDAC1_S) && (SL_TRUSTZONE_PERIPHERAL_VDAC1_S != 0))) +#define VDAC1_BASE (VDAC1_S_BASE) /* VDAC1 base address */ +#else +#define VDAC1_BASE (VDAC1_NS_BASE) /* VDAC1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_VDAC1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_PCNT0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_PCNT0_S) && (SL_TRUSTZONE_PERIPHERAL_PCNT0_S != 0))) +#define PCNT0_BASE (PCNT0_S_BASE) /* PCNT0 base address */ +#else +#define PCNT0_BASE (PCNT0_NS_BASE) /* PCNT0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_PCNT0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_HFRCOEM23_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_HFRCOEM23_S) && (SL_TRUSTZONE_PERIPHERAL_HFRCOEM23_S != 0))) +#define HFRCOEM23_BASE (HFRCOEM23_S_BASE) /* HFRCOEM23 base address */ +#else +#define HFRCOEM23_BASE (HFRCOEM23_NS_BASE) /* HFRCOEM23 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_HFRCOEM23_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_HFXO0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_HFXO0_S) && (SL_TRUSTZONE_PERIPHERAL_HFXO0_S != 0))) +#define HFXO0_BASE (HFXO0_S_BASE) /* HFXO0 base address */ +#else +#define HFXO0_BASE (HFXO0_NS_BASE) /* HFXO0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_HFXO0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_I2C0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_I2C0_S) && (SL_TRUSTZONE_PERIPHERAL_I2C0_S != 0))) +#define I2C0_BASE (I2C0_S_BASE) /* I2C0 base address */ +#else +#define I2C0_BASE (I2C0_NS_BASE) /* I2C0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_I2C0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_WDOG0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_WDOG0_S) && (SL_TRUSTZONE_PERIPHERAL_WDOG0_S != 0))) +#define WDOG0_BASE (WDOG0_S_BASE) /* WDOG0 base address */ +#else +#define WDOG0_BASE (WDOG0_NS_BASE) /* WDOG0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_WDOG0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_WDOG1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_WDOG1_S) && (SL_TRUSTZONE_PERIPHERAL_WDOG1_S != 0))) +#define WDOG1_BASE (WDOG1_S_BASE) /* WDOG1 base address */ +#else +#define WDOG1_BASE (WDOG1_NS_BASE) /* WDOG1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_WDOG1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_EUSART0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_EUSART0_S) && (SL_TRUSTZONE_PERIPHERAL_EUSART0_S != 0))) +#define EUSART0_BASE (EUSART0_S_BASE) /* EUSART0 base address */ +#else +#define EUSART0_BASE (EUSART0_NS_BASE) /* EUSART0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_EUSART0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SEMAILBOX_HOST_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SEMAILBOX_HOST_S) && (SL_TRUSTZONE_PERIPHERAL_SEMAILBOX_HOST_S != 0))) +#define SEMAILBOX_HOST_BASE (SEMAILBOX_S_HOST_BASE) /* SEMAILBOX_HOST base address */ +#else +#define SEMAILBOX_HOST_BASE (SEMAILBOX_S_HOST_BASE) /* SEMAILBOX_HOST base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SEMAILBOX_HOST_S + +#define DEVINFO_BASE (0x0FE08000UL) /* DEVINFO base address */ +/** @} End of group EFR32BG24A010F1024GJ42_Peripheral_Base */ + +/**************************************************************************//** +* @defgroup EFR32BG24A010F1024GJ42_Peripheral_Declaration EFR32BG24A010F1024GJ42 Peripheral Declarations Map +* @{ +*****************************************************************************/ + +#define SCRATCHPAD_S ((SCRATCHPAD_TypeDef *) SCRATCHPAD_S_BASE) /**< SCRATCHPAD_S base pointer */ +#define EMU_S ((EMU_TypeDef *) EMU_S_BASE) /**< EMU_S base pointer */ +#define CMU_S ((CMU_TypeDef *) CMU_S_BASE) /**< CMU_S base pointer */ +#define HFRCO0_S ((HFRCO_TypeDef *) HFRCO0_S_BASE) /**< HFRCO0_S base pointer */ +#define FSRCO_S ((FSRCO_TypeDef *) FSRCO_S_BASE) /**< FSRCO_S base pointer */ +#define DPLL0_S ((DPLL_TypeDef *) DPLL0_S_BASE) /**< DPLL0_S base pointer */ +#define LFXO_S ((LFXO_TypeDef *) LFXO_S_BASE) /**< LFXO_S base pointer */ +#define LFRCO_S ((LFRCO_TypeDef *) LFRCO_S_BASE) /**< LFRCO_S base pointer */ +#define ULFRCO_S ((ULFRCO_TypeDef *) ULFRCO_S_BASE) /**< ULFRCO_S base pointer */ +#define MSC_S ((MSC_TypeDef *) MSC_S_BASE) /**< MSC_S base pointer */ +#define ICACHE0_S ((ICACHE_TypeDef *) ICACHE0_S_BASE) /**< ICACHE0_S base pointer */ +#define PRS_S ((PRS_TypeDef *) PRS_S_BASE) /**< PRS_S base pointer */ +#define GPIO_S ((GPIO_TypeDef *) GPIO_S_BASE) /**< GPIO_S base pointer */ +#define LDMA_S ((LDMA_TypeDef *) LDMA_S_BASE) /**< LDMA_S base pointer */ +#define LDMAXBAR_S ((LDMAXBAR_TypeDef *) LDMAXBAR_S_BASE) /**< LDMAXBAR_S base pointer */ +#define TIMER0_S ((TIMER_TypeDef *) TIMER0_S_BASE) /**< TIMER0_S base pointer */ +#define TIMER1_S ((TIMER_TypeDef *) TIMER1_S_BASE) /**< TIMER1_S base pointer */ +#define TIMER2_S ((TIMER_TypeDef *) TIMER2_S_BASE) /**< TIMER2_S base pointer */ +#define TIMER3_S ((TIMER_TypeDef *) TIMER3_S_BASE) /**< TIMER3_S base pointer */ +#define TIMER4_S ((TIMER_TypeDef *) TIMER4_S_BASE) /**< TIMER4_S base pointer */ +#define USART0_S ((USART_TypeDef *) USART0_S_BASE) /**< USART0_S base pointer */ +#define BURTC_S ((BURTC_TypeDef *) BURTC_S_BASE) /**< BURTC_S base pointer */ +#define I2C1_S ((I2C_TypeDef *) I2C1_S_BASE) /**< I2C1_S base pointer */ +#define SYSCFG_S_CFGNS ((SYSCFG_CFGNS_TypeDef *) SYSCFG_S_CFGNS_BASE) /**< SYSCFG_S_CFGNS base pointer */ +#define SYSCFG_S ((SYSCFG_TypeDef *) SYSCFG_S_BASE) /**< SYSCFG_S base pointer */ +#define BURAM_S ((BURAM_TypeDef *) BURAM_S_BASE) /**< BURAM_S base pointer */ +#define GPCRC_S ((GPCRC_TypeDef *) GPCRC_S_BASE) /**< GPCRC_S base pointer */ +#define DCDC_S ((DCDC_TypeDef *) DCDC_S_BASE) /**< DCDC_S base pointer */ +#define HOSTMAILBOX_S ((MAILBOX_TypeDef *) HOSTMAILBOX_S_BASE) /**< HOSTMAILBOX_S base pointer */ +#define EUSART1_S ((EUSART_TypeDef *) EUSART1_S_BASE) /**< EUSART1_S base pointer */ +#define SYSRTC0_S ((SYSRTC_TypeDef *) SYSRTC0_S_BASE) /**< SYSRTC0_S base pointer */ +#define KEYSCAN_S ((KEYSCAN_TypeDef *) KEYSCAN_S_BASE) /**< KEYSCAN_S base pointer */ +#define DMEM_S ((MPAHBRAM_TypeDef *) DMEM_S_BASE) /**< DMEM_S base pointer */ +#define RADIOAES_S ((AES_TypeDef *) RADIOAES_S_BASE) /**< RADIOAES_S base pointer */ +#define SMU_S ((SMU_TypeDef *) SMU_S_BASE) /**< SMU_S base pointer */ +#define SMU_S_CFGNS ((SMU_CFGNS_TypeDef *) SMU_S_CFGNS_BASE) /**< SMU_S_CFGNS base pointer */ +#define LETIMER0_S ((LETIMER_TypeDef *) LETIMER0_S_BASE) /**< LETIMER0_S base pointer */ +#define IADC0_S ((IADC_TypeDef *) IADC0_S_BASE) /**< IADC0_S base pointer */ +#define ACMP0_S ((ACMP_TypeDef *) ACMP0_S_BASE) /**< ACMP0_S base pointer */ +#define ACMP1_S ((ACMP_TypeDef *) ACMP1_S_BASE) /**< ACMP1_S base pointer */ +#define VDAC0_S ((VDAC_TypeDef *) VDAC0_S_BASE) /**< VDAC0_S base pointer */ +#define VDAC1_S ((VDAC_TypeDef *) VDAC1_S_BASE) /**< VDAC1_S base pointer */ +#define PCNT0_S ((PCNT_TypeDef *) PCNT0_S_BASE) /**< PCNT0_S base pointer */ +#define HFRCOEM23_S ((HFRCO_TypeDef *) HFRCOEM23_S_BASE) /**< HFRCOEM23_S base pointer */ +#define HFXO0_S ((HFXO_TypeDef *) HFXO0_S_BASE) /**< HFXO0_S base pointer */ +#define I2C0_S ((I2C_TypeDef *) I2C0_S_BASE) /**< I2C0_S base pointer */ +#define WDOG0_S ((WDOG_TypeDef *) WDOG0_S_BASE) /**< WDOG0_S base pointer */ +#define WDOG1_S ((WDOG_TypeDef *) WDOG1_S_BASE) /**< WDOG1_S base pointer */ +#define EUSART0_S ((EUSART_TypeDef *) EUSART0_S_BASE) /**< EUSART0_S base pointer */ +#define SEMAILBOX_S_HOST ((SEMAILBOX_HOST_TypeDef *) SEMAILBOX_S_HOST_BASE) /**< SEMAILBOX_S_HOST base pointer */ + +#define SCRATCHPAD_NS ((SCRATCHPAD_TypeDef *) SCRATCHPAD_NS_BASE) /**< SCRATCHPAD_NS base pointer */ +#define EMU_NS ((EMU_TypeDef *) EMU_NS_BASE) /**< EMU_NS base pointer */ +#define CMU_NS ((CMU_TypeDef *) CMU_NS_BASE) /**< CMU_NS base pointer */ +#define HFRCO0_NS ((HFRCO_TypeDef *) HFRCO0_NS_BASE) /**< HFRCO0_NS base pointer */ +#define FSRCO_NS ((FSRCO_TypeDef *) FSRCO_NS_BASE) /**< FSRCO_NS base pointer */ +#define DPLL0_NS ((DPLL_TypeDef *) DPLL0_NS_BASE) /**< DPLL0_NS base pointer */ +#define LFXO_NS ((LFXO_TypeDef *) LFXO_NS_BASE) /**< LFXO_NS base pointer */ +#define LFRCO_NS ((LFRCO_TypeDef *) LFRCO_NS_BASE) /**< LFRCO_NS base pointer */ +#define ULFRCO_NS ((ULFRCO_TypeDef *) ULFRCO_NS_BASE) /**< ULFRCO_NS base pointer */ +#define MSC_NS ((MSC_TypeDef *) MSC_NS_BASE) /**< MSC_NS base pointer */ +#define ICACHE0_NS ((ICACHE_TypeDef *) ICACHE0_NS_BASE) /**< ICACHE0_NS base pointer */ +#define PRS_NS ((PRS_TypeDef *) PRS_NS_BASE) /**< PRS_NS base pointer */ +#define GPIO_NS ((GPIO_TypeDef *) GPIO_NS_BASE) /**< GPIO_NS base pointer */ +#define LDMA_NS ((LDMA_TypeDef *) LDMA_NS_BASE) /**< LDMA_NS base pointer */ +#define LDMAXBAR_NS ((LDMAXBAR_TypeDef *) LDMAXBAR_NS_BASE) /**< LDMAXBAR_NS base pointer */ +#define TIMER0_NS ((TIMER_TypeDef *) TIMER0_NS_BASE) /**< TIMER0_NS base pointer */ +#define TIMER1_NS ((TIMER_TypeDef *) TIMER1_NS_BASE) /**< TIMER1_NS base pointer */ +#define TIMER2_NS ((TIMER_TypeDef *) TIMER2_NS_BASE) /**< TIMER2_NS base pointer */ +#define TIMER3_NS ((TIMER_TypeDef *) TIMER3_NS_BASE) /**< TIMER3_NS base pointer */ +#define TIMER4_NS ((TIMER_TypeDef *) TIMER4_NS_BASE) /**< TIMER4_NS base pointer */ +#define USART0_NS ((USART_TypeDef *) USART0_NS_BASE) /**< USART0_NS base pointer */ +#define BURTC_NS ((BURTC_TypeDef *) BURTC_NS_BASE) /**< BURTC_NS base pointer */ +#define I2C1_NS ((I2C_TypeDef *) I2C1_NS_BASE) /**< I2C1_NS base pointer */ +#define SYSCFG_NS_CFGNS ((SYSCFG_CFGNS_TypeDef *) SYSCFG_NS_CFGNS_BASE) /**< SYSCFG_NS_CFGNS base pointer */ +#define SYSCFG_NS ((SYSCFG_TypeDef *) SYSCFG_NS_BASE) /**< SYSCFG_NS base pointer */ +#define BURAM_NS ((BURAM_TypeDef *) BURAM_NS_BASE) /**< BURAM_NS base pointer */ +#define GPCRC_NS ((GPCRC_TypeDef *) GPCRC_NS_BASE) /**< GPCRC_NS base pointer */ +#define DCDC_NS ((DCDC_TypeDef *) DCDC_NS_BASE) /**< DCDC_NS base pointer */ +#define HOSTMAILBOX_NS ((MAILBOX_TypeDef *) HOSTMAILBOX_NS_BASE) /**< HOSTMAILBOX_NS base pointer */ +#define EUSART1_NS ((EUSART_TypeDef *) EUSART1_NS_BASE) /**< EUSART1_NS base pointer */ +#define SYSRTC0_NS ((SYSRTC_TypeDef *) SYSRTC0_NS_BASE) /**< SYSRTC0_NS base pointer */ +#define KEYSCAN_NS ((KEYSCAN_TypeDef *) KEYSCAN_NS_BASE) /**< KEYSCAN_NS base pointer */ +#define DMEM_NS ((MPAHBRAM_TypeDef *) DMEM_NS_BASE) /**< DMEM_NS base pointer */ +#define RADIOAES_NS ((AES_TypeDef *) RADIOAES_NS_BASE) /**< RADIOAES_NS base pointer */ +#define SMU_NS ((SMU_TypeDef *) SMU_NS_BASE) /**< SMU_NS base pointer */ +#define SMU_NS_CFGNS ((SMU_CFGNS_TypeDef *) SMU_NS_CFGNS_BASE) /**< SMU_NS_CFGNS base pointer */ +#define LETIMER0_NS ((LETIMER_TypeDef *) LETIMER0_NS_BASE) /**< LETIMER0_NS base pointer */ +#define IADC0_NS ((IADC_TypeDef *) IADC0_NS_BASE) /**< IADC0_NS base pointer */ +#define ACMP0_NS ((ACMP_TypeDef *) ACMP0_NS_BASE) /**< ACMP0_NS base pointer */ +#define ACMP1_NS ((ACMP_TypeDef *) ACMP1_NS_BASE) /**< ACMP1_NS base pointer */ +#define VDAC0_NS ((VDAC_TypeDef *) VDAC0_NS_BASE) /**< VDAC0_NS base pointer */ +#define VDAC1_NS ((VDAC_TypeDef *) VDAC1_NS_BASE) /**< VDAC1_NS base pointer */ +#define PCNT0_NS ((PCNT_TypeDef *) PCNT0_NS_BASE) /**< PCNT0_NS base pointer */ +#define HFRCOEM23_NS ((HFRCO_TypeDef *) HFRCOEM23_NS_BASE) /**< HFRCOEM23_NS base pointer */ +#define HFXO0_NS ((HFXO_TypeDef *) HFXO0_NS_BASE) /**< HFXO0_NS base pointer */ +#define I2C0_NS ((I2C_TypeDef *) I2C0_NS_BASE) /**< I2C0_NS base pointer */ +#define WDOG0_NS ((WDOG_TypeDef *) WDOG0_NS_BASE) /**< WDOG0_NS base pointer */ +#define WDOG1_NS ((WDOG_TypeDef *) WDOG1_NS_BASE) /**< WDOG1_NS base pointer */ +#define EUSART0_NS ((EUSART_TypeDef *) EUSART0_NS_BASE) /**< EUSART0_NS base pointer */ +#define SEMAILBOX_NS_HOST ((SEMAILBOX_HOST_TypeDef *) SEMAILBOX_NS_HOST_BASE) /**< SEMAILBOX_NS_HOST base pointer */ + + +#define SCRATCHPAD ((SCRATCHPAD_TypeDef *) SCRATCHPAD_BASE) /**< SCRATCHPAD base pointer */ +#define EMU ((EMU_TypeDef *) EMU_BASE) /**< EMU base pointer */ +#define CMU ((CMU_TypeDef *) CMU_BASE) /**< CMU base pointer */ +#define HFRCO0 ((HFRCO_TypeDef *) HFRCO0_BASE) /**< HFRCO0 base pointer */ +#define FSRCO ((FSRCO_TypeDef *) FSRCO_BASE) /**< FSRCO base pointer */ +#define DPLL0 ((DPLL_TypeDef *) DPLL0_BASE) /**< DPLL0 base pointer */ +#define LFXO ((LFXO_TypeDef *) LFXO_BASE) /**< LFXO base pointer */ +#define LFRCO ((LFRCO_TypeDef *) LFRCO_BASE) /**< LFRCO base pointer */ +#define ULFRCO ((ULFRCO_TypeDef *) ULFRCO_BASE) /**< ULFRCO base pointer */ +#define MSC ((MSC_TypeDef *) MSC_BASE) /**< MSC base pointer */ +#define ICACHE0 ((ICACHE_TypeDef *) ICACHE0_BASE) /**< ICACHE0 base pointer */ +#define PRS ((PRS_TypeDef *) PRS_BASE) /**< PRS base pointer */ +#define GPIO ((GPIO_TypeDef *) GPIO_BASE) /**< GPIO base pointer */ +#define LDMA ((LDMA_TypeDef *) LDMA_BASE) /**< LDMA base pointer */ +#define LDMAXBAR ((LDMAXBAR_TypeDef *) LDMAXBAR_BASE) /**< LDMAXBAR base pointer */ +#define TIMER0 ((TIMER_TypeDef *) TIMER0_BASE) /**< TIMER0 base pointer */ +#define TIMER1 ((TIMER_TypeDef *) TIMER1_BASE) /**< TIMER1 base pointer */ +#define TIMER2 ((TIMER_TypeDef *) TIMER2_BASE) /**< TIMER2 base pointer */ +#define TIMER3 ((TIMER_TypeDef *) TIMER3_BASE) /**< TIMER3 base pointer */ +#define TIMER4 ((TIMER_TypeDef *) TIMER4_BASE) /**< TIMER4 base pointer */ +#define USART0 ((USART_TypeDef *) USART0_BASE) /**< USART0 base pointer */ +#define BURTC ((BURTC_TypeDef *) BURTC_BASE) /**< BURTC base pointer */ +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) /**< I2C1 base pointer */ +#define SYSCFG_CFGNS ((SYSCFG_CFGNS_TypeDef *) SYSCFG_CFGNS_BASE) /**< SYSCFG_CFGNS base pointer */ +#define SYSCFG ((SYSCFG_TypeDef *) SYSCFG_BASE) /**< SYSCFG base pointer */ +#define BURAM ((BURAM_TypeDef *) BURAM_BASE) /**< BURAM base pointer */ +#define GPCRC ((GPCRC_TypeDef *) GPCRC_BASE) /**< GPCRC base pointer */ +#define DCDC ((DCDC_TypeDef *) DCDC_BASE) /**< DCDC base pointer */ +#define HOSTMAILBOX ((MAILBOX_TypeDef *) HOSTMAILBOX_BASE) /**< HOSTMAILBOX base pointer */ +#define EUSART1 ((EUSART_TypeDef *) EUSART1_BASE) /**< EUSART1 base pointer */ +#define SYSRTC0 ((SYSRTC_TypeDef *) SYSRTC0_BASE) /**< SYSRTC0 base pointer */ +#define KEYSCAN ((KEYSCAN_TypeDef *) KEYSCAN_BASE) /**< KEYSCAN base pointer */ +#define DMEM ((MPAHBRAM_TypeDef *) DMEM_BASE) /**< DMEM base pointer */ +#define RADIOAES ((AES_TypeDef *) RADIOAES_BASE) /**< RADIOAES base pointer */ +#define SMU ((SMU_TypeDef *) SMU_BASE) /**< SMU base pointer */ +#define SMU_CFGNS ((SMU_CFGNS_TypeDef *) SMU_CFGNS_BASE) /**< SMU_CFGNS base pointer */ +#define LETIMER0 ((LETIMER_TypeDef *) LETIMER0_BASE) /**< LETIMER0 base pointer */ +#define IADC0 ((IADC_TypeDef *) IADC0_BASE) /**< IADC0 base pointer */ +#define ACMP0 ((ACMP_TypeDef *) ACMP0_BASE) /**< ACMP0 base pointer */ +#define ACMP1 ((ACMP_TypeDef *) ACMP1_BASE) /**< ACMP1 base pointer */ +#define VDAC0 ((VDAC_TypeDef *) VDAC0_BASE) /**< VDAC0 base pointer */ +#define VDAC1 ((VDAC_TypeDef *) VDAC1_BASE) /**< VDAC1 base pointer */ +#define PCNT0 ((PCNT_TypeDef *) PCNT0_BASE) /**< PCNT0 base pointer */ +#define HFRCOEM23 ((HFRCO_TypeDef *) HFRCOEM23_BASE) /**< HFRCOEM23 base pointer */ +#define HFXO0 ((HFXO_TypeDef *) HFXO0_BASE) /**< HFXO0 base pointer */ +#define I2C0 ((I2C_TypeDef *) I2C0_BASE) /**< I2C0 base pointer */ +#define WDOG0 ((WDOG_TypeDef *) WDOG0_BASE) /**< WDOG0 base pointer */ +#define WDOG1 ((WDOG_TypeDef *) WDOG1_BASE) /**< WDOG1 base pointer */ +#define EUSART0 ((EUSART_TypeDef *) EUSART0_BASE) /**< EUSART0 base pointer */ +#define SEMAILBOX_HOST ((SEMAILBOX_HOST_TypeDef *) SEMAILBOX_HOST_BASE) /**< SEMAILBOX_HOST base pointer */ + +#define DEVINFO ((DEVINFO_TypeDef *) DEVINFO_BASE) /**< DEVINFO base pointer */ +/** @} End of group EFR32BG24A010F1024GJ42_Peripheral_Declaration */ + +/**************************************************************************//** + * @defgroup EFR32BG24A010F1024GJ42_Peripheral_Parameters EFR32BG24A010F1024GJ42 Peripheral Parameters + * @{ + * @brief Device peripheral parameter values + *****************************************************************************/ + +/* Common peripheral register block offsets. */ +#define PER_REG_BLOCK_SET_OFFSET 0x1000UL /**< Offset to SET register block */ +#define PER_REG_BLOCK_CLR_OFFSET 0x2000UL /**< Offset to CLEAR register block */ +#define PER_REG_BLOCK_TGL_OFFSET 0x3000UL /**< Offset to TOGGLE register block */ + +#define DMEM_AHB_DATA_WIDTH 0x20UL /**> Data width of the AHB interface */ +#define DMEM_BANK0_SIZE 0x4000UL /**> Bank0 size */ +#define DMEM_BANK10_SIZE 0x4000UL /**> Bank10 size */ +#define DMEM_BANK11_SIZE 0x4000UL /**> Bank11 size */ +#define DMEM_BANK12_SIZE 0x4000UL /**> Bank12 size */ +#define DMEM_BANK13_SIZE 0x4000UL /**> Bank13 size */ +#define DMEM_BANK14_SIZE 0x4000UL /**> Bank14 size */ +#define DMEM_BANK15_SIZE 0x4000UL /**> Bank15 size */ +#define DMEM_BANK16_SIZE 0x0UL /**> Bank16 size */ +#define DMEM_BANK17_SIZE 0x0UL /**> Bank17 size */ +#define DMEM_BANK18_SIZE 0x0UL /**> Bank18 size */ +#define DMEM_BANK19_SIZE 0x0UL /**> Bank19 size */ +#define DMEM_BANK1_SIZE 0x4000UL /**> Bank1 size */ +#define DMEM_BANK20_SIZE 0x0UL /**> Bank20 size */ +#define DMEM_BANK21_SIZE 0x0UL /**> Bank21 size */ +#define DMEM_BANK22_SIZE 0x0UL /**> Bank22 size */ +#define DMEM_BANK23_SIZE 0x0UL /**> Bank23 size */ +#define DMEM_BANK24_SIZE 0x0UL /**> Bank24 size */ +#define DMEM_BANK25_SIZE 0x0UL /**> Bank25 size */ +#define DMEM_BANK26_SIZE 0x0UL /**> Bank26 size */ +#define DMEM_BANK27_SIZE 0x0UL /**> Bank27 size */ +#define DMEM_BANK28_SIZE 0x0UL /**> Bank28 size */ +#define DMEM_BANK29_SIZE 0x0UL /**> Bank29 size */ +#define DMEM_BANK2_SIZE 0x4000UL /**> Bank2 size */ +#define DMEM_BANK30_SIZE 0x0UL /**> Bank30 size */ +#define DMEM_BANK31_SIZE 0x0UL /**> Bank31 size */ +#define DMEM_BANK3_SIZE 0x4000UL /**> Bank3 size */ +#define DMEM_BANK4_SIZE 0x4000UL /**> Bank4 size */ +#define DMEM_BANK5_SIZE 0x4000UL /**> Bank5 size */ +#define DMEM_BANK6_SIZE 0x4000UL /**> Bank6 size */ +#define DMEM_BANK7_SIZE 0x4000UL /**> Bank7 size */ +#define DMEM_BANK8_SIZE 0x4000UL /**> Bank8 size */ +#define DMEM_BANK9_SIZE 0x4000UL /**> Bank9 size */ +#define DMEM_ECC_EXCLUDE 0x0UL /**> ECC exclude */ +#define DMEM_MEM_SIZE 0x40000UL /**> Total memory size */ +#define DMEM_NUM_BANKS 0x10UL /**> Number of physical SRAM banks */ +#define DMEM_NUM_PORTS 0x4UL /**> Number of AHB slave ports */ +#define DMEM_NUM_PORTS_IS_2 0x0UL /**> Boolean indicating if NUM_PORTS=2 */ +#define DMEM_WAITSTATE_EXCLUDE 0x0UL /**> Waitstate exclude */ + +#define CMU_EXCLUDELCD 0x1UL /**> Exclude LCD */ +#define CMU_EXCLUDELESENSE 0x1UL /**> Exclude LESENSE */ + +#define HFRCO0_EM23ONDEMAND 0x0UL /**> EM23 On Demand */ +#define HFRCO0_EXCLUDEEM23ONDEMAND 0x1UL /**> Exclude EM23 On Demand */ + +#define LFXO_NO_CTUNE 0x0UL /**> CTUNE Not Present */ +#define LFXO_CTUNE 0x1UL /**> CTUNE Present */ + +#define MSC_CDA_PRESENT 0x0UL /**> */ +#define MSC_FDIO_WIDTH 0x40UL /**> None */ +#define MSC_FLASHADDRBITS 0x15UL /**> None */ +#define MSC_FLASHBLOCKADDRBITS 0x15UL /**> None */ +#define MSC_FLASH_BLOCK_INFO_PCOUNT 0x2UL /**> None */ +#define MSC_FLASH_BLOCK_MAIN_PCOUNT 0xD0UL /**> */ +#define MSC_INFOADDRBITS 0xEUL /**> None */ +#define MSC_INFOBLOCKADDRBITS 0xEUL /**> None */ +#define MSC_INFO_PSIZE_BITS 0xDUL /**> None */ +#define MSC_MAIN_PSIZE_BITS 0xDUL /**> None */ +#define MSC_REDUNDANCY 0x2UL /**> None */ +#define MSC_ROOTMAIN_PRESENT 0x1UL /**> */ +#define MSC_UD_PRESENT 0x1UL /**> */ +#define MSC_YADDRBITS 0x6UL /**> */ + +#define ICACHE0_AHB_LITE 0x0UL /**> AHB Lite */ +#define ICACHE0_CACHEABLE_SIZE 0x180000UL /**> Cache Size */ +#define ICACHE0_CACHEABLE_START 0x8000000UL /**> Cache Start */ +#define ICACHE0_DEFAULT_OFF 0x0UL /**> Default off */ +#define ICACHE0_FLASH_SIZE 0x180000UL /**> Flash size */ +#define ICACHE0_FLASH_START 0x8000000UL /**> Flash start */ +#define ICACHE0_LOOPCACHE_MEM_ADDR_BITS 0x3UL /**> Loopcache Memory Address bits */ +#define ICACHE0_LOOPCACHE_STICKINESS_BITS 0x4UL /**> Loopcache Stickiness bits */ +#define ICACHE0_PARITY_BITS 0x1UL /**> Use Parity */ +#define ICACHE0_PC_BITS 0x20UL /**> Performance Counter bits */ +#define ICACHE0_PIPE_STAGE 0x1UL /**> Pipeline Stage */ +#define ICACHE0_RAM_ADDR_BITS 0x0UL /**> RAM Address bits */ +#define ICACHE0_RAM_DATA_BITS 0x0UL /**> RAM Data bits */ +#define ICACHE0_SET_BITS 0x7UL /**> Set bits */ +#define ICACHE0_USE_HREADY_GATING 0x1UL /**> Use HREADY gating */ +#define ICACHE0_USE_IDLE_GATING 0x1UL /**> Use IDLE gating */ +#define ICACHE0_USE_LOOPCACHE 0x1UL /**> Use Loopcache */ +#define ICACHE0_WAY_BITS 0x1UL /**> Way bits */ +#define ICACHE0_WORDS_PER_BLOCK 0x0UL /**> Words Per Block */ +#define ICACHE0_WPB_BITS 0x1UL /**> Words Per Block bits */ +#define ICACHE0_WPL_BITS 0x3UL /**> Words Per Line bits */ + +#define PRS_ASYNC_CH_NUM 0x10UL /**> None */ +#define PRS_PRSSEL_WIDTH 0x4UL /**> New Param */ +#define PRS_SPRSSEL_WIDTH 0x2UL /**> New Param */ +#define PRS_SYNC_CH_NUM 0x4UL /**> None */ + +#define GPIO_MODE_WIDTH 0x4UL /**> Mode Width */ +#define GPIO_NUM_EM4_WU 0xCUL /**> New Param */ +#define GPIO_NUM_EVEN_PA 0x5UL /**> Num of even pins port A */ +#define GPIO_NUM_EVEN_PB 0x3UL /**> Num of even pins port B */ +#define GPIO_NUM_EVEN_PC 0x5UL /**> Num of even pins port C */ +#define GPIO_NUM_EVEN_PD 0x3UL /**> Num of even pins port D */ +#define GPIO_NUM_EXT_INT 0xCUL /**> New Param */ +#define GPIO_NUM_EXT_INT_L 0x8UL /**> New Param */ +#define GPIO_NUM_EXT_INT_U 0x4UL /**> New Param */ +#define GPIO_NUM_EXT_INT_U_ZERO 0x0UL /**> New Param */ +#define GPIO_NUM_ODD_PA 0x5UL /**> Num of odd pins port A */ +#define GPIO_NUM_ODD_PB 0x3UL /**> Num of odd pins port B */ +#define GPIO_NUM_ODD_PC 0x5UL /**> Num of odd pins port C */ +#define GPIO_NUM_ODD_PD 0x3UL /**> Num of odd pins port D */ +#define GPIO_PINSEL_WIDTH 0x4UL /**> Route config pin select width */ +#define GPIO_PORTSEL_WIDTH 0x2UL /**> Route config port select width */ +#define GPIO_PORT_A_WIDTH 0xAUL /**> Port A Width */ +#define GPIO_PORT_A_WIDTH_ZERO 0x0UL /**> Port A Width is Zero */ +#define GPIO_PORT_A_WL 0x8UL /**> New Param */ +#define GPIO_PORT_A_WU 0x2UL /**> New Param */ +#define GPIO_PORT_A_WU_ZERO 0x0UL /**> New Param */ +#define GPIO_PORT_B_WIDTH 0x6UL /**> Port B Width */ +#define GPIO_PORT_B_WIDTH_ZERO 0x0UL /**> Port B Width is Zero */ +#define GPIO_PORT_B_WL 0x6UL /**> New Param */ +#define GPIO_PORT_B_WU 0x0UL /**> New Param */ +#define GPIO_PORT_B_WU_ZERO 0x1UL /**> New Param */ +#define GPIO_PORT_C_WIDTH 0xAUL /**> Port C Width */ +#define GPIO_PORT_C_WIDTH_ZERO 0x0UL /**> Port C Width is Zero */ +#define GPIO_PORT_C_WL 0x8UL /**> New Param */ +#define GPIO_PORT_C_WU 0x2UL /**> New Param */ +#define GPIO_PORT_C_WU_ZERO 0x0UL /**> New Param */ +#define GPIO_PORT_D_WIDTH 0x6UL /**> Port D Width */ +#define GPIO_PORT_D_WIDTH_ZERO 0x0UL /**> Port D Width is Zero */ +#define GPIO_PORT_D_WL 0x6UL /**> New Param */ +#define GPIO_PORT_D_WU 0x0UL /**> New Param */ +#define GPIO_PORT_D_WU_ZERO 0x1UL /**> New Param */ +#define GPIO_SLEWRATE_WIDTH 0x3UL /**> Slew Rate Width Param */ + +#define LDMA_CH_BITS 0x5UL /**> New Param */ +#define LDMA_CH_NUM 0x8UL /**> New Param */ +#define LDMA_FIFO_BITS 0x5UL /**> New Param */ +#define LDMA_FIFO_DEPTH 0x10UL /**> New Param */ + +#define LDMAXBAR_CH_BITS 0x5UL /**> None */ +#define LDMAXBAR_CH_NUM 0x8UL /**> None */ +#define LDMAXBAR_SIGSEL_W 0x4UL /**> New Param */ +#define LDMAXBAR_SOURCESEL_W 0x6UL /**> New Param */ + +#define TIMER0_CC_NUM 0x3UL /**> Number of Compare/Capture Channels */ +#define TIMER0_CNTWIDTH 0x20UL /**> Counter Width */ +#define TIMER0_DTI 0x1UL /**> Dead-time insertion enabled */ +#define TIMER0_DTI_CC_NUM 0x3UL /**> Number of DTI Channels */ +#define TIMER0_NO_DTI 0x0UL /**> */ + +#define TIMER1_CC_NUM 0x3UL /**> Number of Compare/Capture Channels */ +#define TIMER1_CNTWIDTH 0x20UL /**> Counter Width */ +#define TIMER1_DTI 0x1UL /**> Dead-time insertion enabled */ +#define TIMER1_DTI_CC_NUM 0x3UL /**> Number of DTI Channels */ +#define TIMER1_NO_DTI 0x0UL /**> */ + +#define TIMER2_CC_NUM 0x3UL /**> Number of Compare/Capture Channels */ +#define TIMER2_CNTWIDTH 0x10UL /**> Counter Width */ +#define TIMER2_DTI 0x1UL /**> Dead-time insertion enabled */ +#define TIMER2_DTI_CC_NUM 0x3UL /**> Number of DTI Channels */ +#define TIMER2_NO_DTI 0x0UL /**> */ + +#define TIMER3_CC_NUM 0x3UL /**> Number of Compare/Capture Channels */ +#define TIMER3_CNTWIDTH 0x10UL /**> Counter Width */ +#define TIMER3_DTI 0x1UL /**> Dead-time insertion enabled */ +#define TIMER3_DTI_CC_NUM 0x3UL /**> Number of DTI Channels */ +#define TIMER3_NO_DTI 0x0UL /**> */ + +#define TIMER4_CC_NUM 0x3UL /**> Number of Compare/Capture Channels */ +#define TIMER4_CNTWIDTH 0x10UL /**> Counter Width */ +#define TIMER4_DTI 0x1UL /**> Dead-time insertion enabled */ +#define TIMER4_DTI_CC_NUM 0x3UL /**> Number of DTI Channels */ +#define TIMER4_NO_DTI 0x0UL /**> */ + +#define USART0_AUTOTX_REG 0x1UL /**> None */ +#define USART0_AUTOTX_REG_B 0x0UL /**> None */ +#define USART0_AUTOTX_TRIGGER 0x1UL /**> None */ +#define USART0_AUTOTX_TRIGGER_B 0x0UL /**> New Param */ +#define USART0_CLK_PRS 0x1UL /**> None */ +#define USART0_CLK_PRS_B 0x0UL /**> New Param */ +#define USART0_FLOW_CONTROL 0x1UL /**> None */ +#define USART0_FLOW_CONTROL_B 0x0UL /**> New Param */ +#define USART0_I2S 0x1UL /**> None */ +#define USART0_I2S_B 0x0UL /**> New Param */ +#define USART0_IRDA_AVAILABLE 0x1UL /**> None */ +#define USART0_IRDA_AVAILABLE_B 0x0UL /**> New Param */ +#define USART0_MVDIS_FUNC 0x1UL /**> None */ +#define USART0_MVDIS_FUNC_B 0x0UL /**> New Param */ +#define USART0_RX_PRS 0x1UL /**> None */ +#define USART0_RX_PRS_B 0x0UL /**> New Param */ +#define USART0_SC_AVAILABLE 0x1UL /**> None */ +#define USART0_SC_AVAILABLE_B 0x0UL /**> New Param */ +#define USART0_SYNC_AVAILABLE 0x1UL /**> None */ +#define USART0_SYNC_AVAILABLE_B 0x0UL /**> New Param */ +#define USART0_SYNC_LATE_SAMPLE 0x1UL /**> None */ +#define USART0_SYNC_LATE_SAMPLE_B 0x0UL /**> New Param */ +#define USART0_TIMER 0x1UL /**> New Param */ +#define USART0_TIMER_B 0x0UL /**> New Param */ + +#define BURTC_CNTWIDTH 0x20UL /**> None */ +#define BURTC_PRECNT_WIDTH 0xFUL /**> */ + +#define I2C1_DELAY 0x7D0UL /**> Delay cell selection */ +#define I2C1_DELAY_CHAIN_NUM 0x2UL /**> Number of delay chain */ + +#define SYSCFG_CHIP_FAMILY 0x3CUL /**> CHIP Family */ +#define SYSCFG_DEMODRAM_INST_COUNT 0x2UL /**> */ +#define SYSCFG_FRCRAM_INST_COUNT 0x1UL /**> */ +#define SYSCFG_SEQRAM_INST_COUNT 0x2UL /**> None */ +#define SYSCFG_SWINT_NUM 0x4UL /**> Software interupts */ + +#define DCDC_DRVSPEED_WIDTH 0x2UL /**> Drive Speed bitfield width */ +#define DCDC_IPKVAL_WIDTH 0x4UL /**> Peak Current Setting bitfield Width */ +#define DCDC_VCMPIBIAS_WIDTH 0x2UL /**> VCMP ibias bitfield width */ + +#define HOSTMAILBOX_NUM_MSGPTRS 0x4UL /**> */ + +#define EUSART1_EM2_CAPABLE 0x0UL /**> EM2 Capable instance */ +#define EUSART1_NOT_EM2_CAPABLE 0x1UL /**> Not EM2 Capable instance */ + +#define SYSRTC0_GROUP0_ALTIRQDIS 0x1UL /**> Group 0 Alternate IRQ disable */ +#define SYSRTC0_GROUP0_CAPDIS 0x0UL /**> Group 0 Capture disable */ +#define SYSRTC0_GROUP0_CMP1DIS 0x0UL /**> Group 0 Compare1 disable */ +#define SYSRTC0_GROUP0_DIS 0x0UL /**> Group 0 Disable */ +#define SYSRTC0_GROUP0_ROOTDIS 0x1UL /**> Group 0 ROOT disable */ +#define SYSRTC0_GROUP1_ALTIRQDIS 0x0UL /**> Group 1 Alternate IRQ disable */ +#define SYSRTC0_GROUP1_CAPDIS 0x0UL /**> Group 1 Capture disable */ +#define SYSRTC0_GROUP1_CMP1DIS 0x0UL /**> Group 1 Compare1 disable */ +#define SYSRTC0_GROUP1_DIS 0x0UL /**> Group 1 Disable */ +#define SYSRTC0_GROUP1_ROOTDIS 0x1UL /**> Group 1 ROOT disable */ +#define SYSRTC0_GROUP2_ALTIRQDIS 0x1UL /**> Group 2 Alternate IRQ disable */ +#define SYSRTC0_GROUP2_CAPDIS 0x1UL /**> Group 2 Capture disable */ +#define SYSRTC0_GROUP2_CMP1DIS 0x1UL /**> Group 2 Compare1 disable */ +#define SYSRTC0_GROUP2_DIS 0x0UL /**> Group 2 Disable */ +#define SYSRTC0_GROUP2_ROOTDIS 0x0UL /**> Group 2 ROOT disable */ +#define SYSRTC0_GROUP3_ALTIRQDIS 0x1UL /**> Group 3 Alternate IRQ disable */ +#define SYSRTC0_GROUP3_CAPDIS 0x1UL /**> Group 3 Capture disable */ +#define SYSRTC0_GROUP3_CMP1DIS 0x1UL /**> Group 3 Compare1 disable */ +#define SYSRTC0_GROUP3_DIS 0x1UL /**> Group 3 Disable */ +#define SYSRTC0_GROUP3_ROOTDIS 0x1UL /**> Group 3 ROOT disable */ +#define SYSRTC0_GROUP4_ALTIRQDIS 0x1UL /**> Group 4 Alternate IRQ disable */ +#define SYSRTC0_GROUP4_CAPDIS 0x1UL /**> Group 4 Capture disable */ +#define SYSRTC0_GROUP4_CMP1DIS 0x1UL /**> Group 4 Compare1 disable */ +#define SYSRTC0_GROUP4_DIS 0x1UL /**> Group 4 Disable */ +#define SYSRTC0_GROUP4_ROOTDIS 0x1UL /**> Group 4 ROOT disable */ +#define SYSRTC0_GROUP5_ALTIRQDIS 0x1UL /**> Group 5 Alternate IRQ disable */ +#define SYSRTC0_GROUP5_CAPDIS 0x1UL /**> Group 5 Capture disable */ +#define SYSRTC0_GROUP5_CMP1DIS 0x1UL /**> Group 5 Compare1 disable */ +#define SYSRTC0_GROUP5_DIS 0x1UL /**> Group 5 Disable */ +#define SYSRTC0_GROUP5_ROOTDIS 0x1UL /**> Group 5 ROOT disable */ +#define SYSRTC0_GROUP6_ALTIRQDIS 0x1UL /**> Group 6 Alternate IRQ disable */ +#define SYSRTC0_GROUP6_CAPDIS 0x1UL /**> Group 6 Capture disable */ +#define SYSRTC0_GROUP6_CMP1DIS 0x1UL /**> Group 6 Compare1 disable */ +#define SYSRTC0_GROUP6_DIS 0x1UL /**> Group 6 Disable */ +#define SYSRTC0_GROUP6_ROOTDIS 0x1UL /**> Group 6 ROOT disable */ +#define SYSRTC0_GROUP7_ALTIRQDIS 0x1UL /**> Group 7 Alternate IRQ disable */ +#define SYSRTC0_GROUP7_CAPDIS 0x1UL /**> Group 7 Capture disable */ +#define SYSRTC0_GROUP7_CMP1DIS 0x1UL /**> Group 7 Compare1 disable */ +#define SYSRTC0_GROUP7_DIS 0x1UL /**> Group 7 Disable */ +#define SYSRTC0_GROUP7_ROOTDIS 0x1UL /**> Group 7 ROOT disable */ +#define SYSRTC0_ROOTDIS 0x0UL /**> ROOT disable */ + +#define KEYSCAN_COLNUM 0x8UL /**> COLNUM */ +#define KEYSCAN_COLWIDTH 0x3UL /**> COLWIDTH */ +#define KEYSCAN_ROWNUM 0x6UL /**> ROWNUM */ + +#define RADIOAES_SIDECHANNEL_COUNTERMEASURES 0x1UL /**> Enable sidechannel counter measures */ + +#define SMU_NUM_BMPUS 0x9UL /**> Number of BMPUs */ +#define SMU_NUM_PPU_PERIPHS 0x36UL /**> Number of PPU Peripherals */ +#define SMU_NUM_PPU_PERIPHS_MOD_32 0x16UL /**> Number of PPU Peripherals (mod 32) */ +#define SMU_NUM_PPU_PERIPHS_SUB_32 0x16UL /**> Number of PPU peripherals minus 32 */ +#define SMU_PERIPHID_BITS 0x8UL /**> Bits used for Peripheral ID */ + +#define LETIMER0_CNT_WIDTH 0x18UL /**> Count Width */ + +#define IADC0_CONFIGNUM 0x2UL /**> CONFIG */ +#define IADC0_FULLRANGEUNIPOLAR 0x0UL /**> FULLRANGEUNIPOLAR */ +#define IADC0_SCANBYTES 0x1UL /**> SCANBYTES */ +#define IADC0_ENTRIES 0x10UL /**> ENTRIES */ + +#define ACMP0_DAC_INPUT 0x1UL /**> None */ +#define ACMP0_EXT_OVR_IF 0x1UL /**> None */ + +#define ACMP1_DAC_INPUT 0x1UL /**> None */ +#define ACMP1_EXT_OVR_IF 0x1UL /**> None */ + +#define VDAC0_ALT_WIDTH 0x6UL /**> VOUT_AUX Out Width */ +#define VDAC0_CH0_TRIG_LESENSE 0x0UL /**> CH0 Trig Source = LESENSE */ +#define VDAC0_CH1_TRIG_LESENSE 0x0UL /**> CH1 Trig Source = LESENSE */ +#define VDAC0_FIFO_DEPTH 0x4UL /**> WFIFO Depth */ +#define VDAC0_INT_PRESC_WIDTH 0x7UL /**> Internal Prescaler Width */ +#define VDAC0_RESOLUTION 0xCUL /**> DAC Resolution */ + +#define VDAC1_ALT_WIDTH 0x6UL /**> VOUT_AUX Out Width */ +#define VDAC1_CH0_TRIG_LESENSE 0x0UL /**> CH0 Trig Source = LESENSE */ +#define VDAC1_CH1_TRIG_LESENSE 0x0UL /**> CH1 Trig Source = LESENSE */ +#define VDAC1_FIFO_DEPTH 0x4UL /**> WFIFO Depth */ +#define VDAC1_INT_PRESC_WIDTH 0x7UL /**> Internal Prescaler Width */ +#define VDAC1_RESOLUTION 0xCUL /**> DAC Resolution */ + +#define PCNT0_PCNT_WIDTH 0x10UL /**> None */ + +#define HFRCOEM23_EM23ONDEMAND 0x1UL /**> EM23 On Demand */ +#define HFRCOEM23_EXCLUDEEM23ONDEMAND 0x0UL /**> Exclude EM23 On Demand */ + +#define HFXO0_BUFOUT 0x1UL /**> BUFOUT */ +#define HFXO0_EXCLUDEBUFOUT 0x0UL /**> Exclude BUFOUT */ + +#define I2C0_DELAY 0x3E8UL /**> Delay cell selection */ +#define I2C0_DELAY_CHAIN_NUM 0x2UL /**> Number of delay chain */ + +#define WDOG0_PCNUM 0x2UL /**> None */ + +#define WDOG1_PCNUM 0x2UL /**> None */ + +#define EUSART0_EM2_CAPABLE 0x1UL /**> EM2 Capable instance */ +#define EUSART0_NOT_EM2_CAPABLE 0x0UL /**> Not EM2 Capable instance */ + +#define RDMEM_FRC_BANK0_SIZE 0x1000UL /**> FRC_RAM_BANK0_SIZE */ +#define RDMEM_FRC_BANK1_SIZE 0x0UL /**> FRC_RAM_BANK1_SIZE */ +#define RDMEM_FRC_BANK2_SIZE 0x0UL /**> FRC_RAM_BANK2_SIZE */ +#define RDMEM_FRC_BANK3_SIZE 0x0UL /**> FRC_RAM_BANK3_SIZE */ +#define RDMEM_FRC_BANK4_SIZE 0x0UL /**> FRC_RAM_BANK4_SIZE */ +#define RDMEM_FRC_BANK5_SIZE 0x0UL /**> FRC_RAM_BANK5_SIZE */ +#define RDMEM_FRC_BANK6_SIZE 0x0UL /**> FRC_RAM_BANK6_SIZE */ +#define RDMEM_FRC_BANK7_SIZE 0x0UL /**> FRC_RAM_BANK7_SIZE */ +#define RDMEM_FRC_NUM_BANK 0x1UL /**> FRC_NUM_BANK */ +#define RDMEM_FRC_RAMADDRBITS 0xCUL /**> FRC RAM ADDRBITS */ +#define RDMEM_FRC_RAMADDRMINBITS 0xCUL /**> FRC RAM address bits for one bank */ +#define RDMEM_FRC_RAMECCADDR_WIDTH 0x20UL /**> FRC RAM ECC Address width */ +#define RDMEM_FRC_RAM_BWE_WIDTH 0x27UL /**> FRCRAM BWE width */ +#define RDMEM_FRC_RAM_DATA_WIDTH 0x27UL /**> FRC_RAM_DATA_WIDTH */ +#define RDMEM_FRC_RAM_ECC_EN 0x1UL /**> FRC RAM ECCEN */ +#define RDMEM_FRC_RAM_TOTAL_SIZE 0x1000UL /**> FRC_RAM_TOTAL_SIZE */ +#define RDMEM_SEQ_BANK0_SIZE 0x2000UL /**> SEQ_RAM_BANK0_SIZE */ +#define RDMEM_SEQ_BANK1_SIZE 0x2000UL /**> SEQ_RAM_BANK1_SIZE */ +#define RDMEM_SEQ_BANK2_SIZE 0x0UL /**> SEQ_RAM_BANK2_SIZE */ +#define RDMEM_SEQ_BANK3_SIZE 0x0UL /**> SEQ_RAM_BANK3_SIZE */ +#define RDMEM_SEQ_BANK4_SIZE 0x0UL /**> SEQ_RAM_BANK4_SIZE */ +#define RDMEM_SEQ_BANK5_SIZE 0x0UL /**> SEQ_RAM_BANK5_SIZE */ +#define RDMEM_SEQ_BANK6_SIZE 0x0UL /**> SEQ_RAM_BANK6_SIZE */ +#define RDMEM_SEQ_BANK7_SIZE 0x0UL /**> SEQ_RAM_BANK7_SIZE */ +#define RDMEM_SEQ_NUM_BANK 0x2UL /**> SEQ_NUM_BANK */ +#define RDMEM_SEQ_RAMADDRBITS 0xEUL /**> SEQ RAM ADDRBITS */ +#define RDMEM_SEQ_RAMADDRMINBITS 0xDUL /**> SEQ RAM address bits for one bank */ +#define RDMEM_SEQ_RAMECCADDR_WIDTH 0x20UL /**> SEQ RAM ECC Address width */ +#define RDMEM_SEQ_RAM_BWE_WIDTH 0x27UL /**> SEQRAM BWE width */ +#define RDMEM_SEQ_RAM_DATA_WIDTH 0x27UL /**> SEQ_RAM_DATA_WIDTH */ +#define RDMEM_SEQ_RAM_ECC_EN 0x1UL /**> SEQ RAM ECCEN */ +#define RDMEM_SEQ_RAM_TOTAL_SIZE 0x4000UL /**> SEQ_RAM_TOTAL_SIZE */ + +/* Instance macros for ACMP */ +#define ACMP(n) ( ((n)==0) ? ACMP0 :\ + ((n)==1) ? ACMP1 :\ + 0x0UL) +#define ACMP_NUM(ref) ( ((ref)==ACMP0) ? 0 :\ + ((ref)==ACMP1) ? 1 :\ + -1) +#define ACMP_DAC_INPUT(n) ( ((n)==0) ? ACMP0_DAC_INPUT :\ + ((n)==1) ? ACMP1_DAC_INPUT :\ + 0x0UL) +#define ACMP_EXT_OVR_IF(n) ( ((n)==0) ? ACMP0_EXT_OVR_IF :\ + ((n)==1) ? ACMP1_EXT_OVR_IF :\ + 0x0UL) + +/* Instance macros for EUSART */ +#define EUSART(n) ( ((n)==0) ? EUSART0 :\ + ((n)==1) ? EUSART1 :\ + 0x0UL) +#define EUSART_NUM(ref) ( ((ref)==EUSART0) ? 0 :\ + ((ref)==EUSART1) ? 1 :\ + -1) +#define EUSART_EM2_CAPABLE(n) ( ((n)==0) ? EUSART0_EM2_CAPABLE :\ + ((n)==1) ? EUSART1_EM2_CAPABLE :\ + 0x0UL) +#define EUSART_NOT_EM2_CAPABLE(n) ( ((n)==0) ? EUSART0_NOT_EM2_CAPABLE :\ + ((n)==1) ? EUSART1_NOT_EM2_CAPABLE :\ + 0x0UL) + +/* Instance macros for HFRCO */ +#define HFRCO(n) ( ((n)==0) ? HFRCO0 :\ + ((n)==1) ? HFRCOEM23 :\ + 0x0UL) +#define HFRCO_NUM(ref) ( ((ref)==HFRCO0) ? 0 :\ + ((ref)==HFRCOEM23) ? 1 :\ + -1) +#define HFRCO_EM23ONDEMAND(n) ( ((n)==0) ? HFRCO0_EM23ONDEMAND :\ + ((n)==1) ? HFRCOEM23_EM23ONDEMAND :\ + 0x0UL) +#define HFRCO_EXCLUDEEM23ONDEMAND(n) ( ((n)==0) ? HFRCO0_EXCLUDEEM23ONDEMAND :\ + ((n)==1) ? HFRCOEM23_EXCLUDEEM23ONDEMAND :\ + 0x0UL) + +/* Instance macros for I2C */ +#define I2C(n) ( ((n)==0) ? I2C0 :\ + ((n)==1) ? I2C1 :\ + 0x0UL) +#define I2C_NUM(ref) ( ((ref)==I2C0) ? 0 :\ + ((ref)==I2C1) ? 1 :\ + -1) +#define I2C_DELAY(n) ( ((n)==0) ? I2C0_DELAY :\ + ((n)==1) ? I2C1_DELAY :\ + 0x0UL) +#define I2C_DELAY_CHAIN_NUM(n) ( ((n)==0) ? I2C0_DELAY_CHAIN_NUM :\ + ((n)==1) ? I2C1_DELAY_CHAIN_NUM :\ + 0x0UL) + +/* Instance macros for TIMER */ +#define TIMER(n) ( ((n)==0) ? TIMER0 :\ + ((n)==1) ? TIMER1 :\ + ((n)==2) ? TIMER2 :\ + ((n)==3) ? TIMER3 :\ + ((n)==4) ? TIMER4 :\ + 0x0UL) +#define TIMER_NUM(ref) ( ((ref)==TIMER0) ? 0 :\ + ((ref)==TIMER1) ? 1 :\ + ((ref)==TIMER2) ? 2 :\ + ((ref)==TIMER3) ? 3 :\ + ((ref)==TIMER4) ? 4 :\ + -1) +#define TIMER_CC_NUM(n) ( ((n)==0) ? TIMER0_CC_NUM :\ + ((n)==1) ? TIMER1_CC_NUM :\ + ((n)==2) ? TIMER2_CC_NUM :\ + ((n)==3) ? TIMER3_CC_NUM :\ + ((n)==4) ? TIMER4_CC_NUM :\ + 0x0UL) +#define TIMER_CNTWIDTH(n) ( ((n)==0) ? TIMER0_CNTWIDTH :\ + ((n)==1) ? TIMER1_CNTWIDTH :\ + ((n)==2) ? TIMER2_CNTWIDTH :\ + ((n)==3) ? TIMER3_CNTWIDTH :\ + ((n)==4) ? TIMER4_CNTWIDTH :\ + 0x0UL) +#define TIMER_DTI(n) ( ((n)==0) ? TIMER0_DTI :\ + ((n)==1) ? TIMER1_DTI :\ + ((n)==2) ? TIMER2_DTI :\ + ((n)==3) ? TIMER3_DTI :\ + ((n)==4) ? TIMER4_DTI :\ + 0x0UL) +#define TIMER_DTI_CC_NUM(n) ( ((n)==0) ? TIMER0_DTI_CC_NUM :\ + ((n)==1) ? TIMER1_DTI_CC_NUM :\ + ((n)==2) ? TIMER2_DTI_CC_NUM :\ + ((n)==3) ? TIMER3_DTI_CC_NUM :\ + ((n)==4) ? TIMER4_DTI_CC_NUM :\ + 0x0UL) +#define TIMER_NO_DTI(n) ( ((n)==0) ? TIMER0_NO_DTI :\ + ((n)==1) ? TIMER1_NO_DTI :\ + ((n)==2) ? TIMER2_NO_DTI :\ + ((n)==3) ? TIMER3_NO_DTI :\ + ((n)==4) ? TIMER4_NO_DTI :\ + 0x0UL) + +/* Instance macros for VDAC */ +#define VDAC(n) ( ((n)==0) ? VDAC0 :\ + ((n)==1) ? VDAC1 :\ + 0x0UL) +#define VDAC_NUM(ref) ( ((ref)==VDAC0) ? 0 :\ + ((ref)==VDAC1) ? 1 :\ + -1) +#define VDAC_ALT_WIDTH(n) ( ((n)==0) ? VDAC0_ALT_WIDTH :\ + ((n)==1) ? VDAC1_ALT_WIDTH :\ + 0x0UL) +#define VDAC_CH0_TRIG_LESENSE(n) ( ((n)==0) ? VDAC0_CH0_TRIG_LESENSE :\ + ((n)==1) ? VDAC1_CH0_TRIG_LESENSE :\ + 0x0UL) +#define VDAC_CH1_TRIG_LESENSE(n) ( ((n)==0) ? VDAC0_CH1_TRIG_LESENSE :\ + ((n)==1) ? VDAC1_CH1_TRIG_LESENSE :\ + 0x0UL) +#define VDAC_FIFO_DEPTH(n) ( ((n)==0) ? VDAC0_FIFO_DEPTH :\ + ((n)==1) ? VDAC1_FIFO_DEPTH :\ + 0x0UL) +#define VDAC_INT_PRESC_WIDTH(n) ( ((n)==0) ? VDAC0_INT_PRESC_WIDTH :\ + ((n)==1) ? VDAC1_INT_PRESC_WIDTH :\ + 0x0UL) +#define VDAC_RESOLUTION(n) ( ((n)==0) ? VDAC0_RESOLUTION :\ + ((n)==1) ? VDAC1_RESOLUTION :\ + 0x0UL) + +/* Instance macros for WDOG */ +#define WDOG(n) ( ((n)==0) ? WDOG0 :\ + ((n)==1) ? WDOG1 :\ + 0x0UL) +#define WDOG_NUM(ref) ( ((ref)==WDOG0) ? 0 :\ + ((ref)==WDOG1) ? 1 :\ + -1) +#define WDOG_PCNUM(n) ( ((n)==0) ? WDOG0_PCNUM :\ + ((n)==1) ? WDOG1_PCNUM :\ + 0x0UL) + +/** @} End of group EFR32BG24A010F1024GJ42_Peripheral_Parameters */ + + +/** @} End of group EFR32BG24A010F1024GJ42 */ +/** @}} End of group Parts */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/platform/Device/SiliconLabs/EFR32BG24/Include/efr32bg24b410f1536ij42.h b/platform/Device/SiliconLabs/EFR32BG24/Include/efr32bg24b410f1536ij42.h new file mode 100644 index 00000000000..c0abd92e987 --- /dev/null +++ b/platform/Device/SiliconLabs/EFR32BG24/Include/efr32bg24b410f1536ij42.h @@ -0,0 +1,1534 @@ +/**************************************************************************//** + * @file + * @brief CMSIS Cortex-M Peripheral Access Layer Header File + * for EFR32BG24B410F1536IJ42 + ****************************************************************************** + * # 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. + * + *****************************************************************************/ +#ifndef EFR32BG24B410F1536IJ42_H +#define EFR32BG24B410F1536IJ42_H + +#ifdef __cplusplus +extern "C" { +#endif + +/**************************************************************************//** + * @addtogroup Parts + * @{ +*****************************************************************************/ + +/**************************************************************************//** + * @defgroup EFR32BG24B410F1536IJ42 EFR32BG24B410F1536IJ42 + * @{ +*****************************************************************************/ + +/** Interrupt Number Definition */ +typedef enum IRQn +{ + /****** Cortex-M Processor Exceptions Numbers ******************************************/ + NonMaskableInt_IRQn = -14, /*!< -14 Cortex-M Non Maskable Interrupt */ + HardFault_IRQn = -13, /*!< -13 Cortex-M Hard Fault Interrupt */ + MemoryManagement_IRQn = -12, /*!< -12 Cortex-M Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< -11 Cortex-M Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< -10 Cortex-M Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< -5 Cortex-M SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< -4 Cortex-M Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< -2 Cortex-M Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< -1 Cortex-M System Tick Interrupt */ + + /****** EFR32BG24 Peripheral Interrupt Numbers ******************************************/ + + SMU_SECURE_IRQn = 0,/*!< 0 EFR32 SMU_SECURE Interrupt */ + SMU_S_PRIVILEGED_IRQn = 1,/*!< 1 EFR32 SMU_S_PRIVILEGED Interrupt */ + SMU_NS_PRIVILEGED_IRQn= 2,/*!< 2 EFR32 SMU_NS_PRIVILEGED Interrupt */ + EMU_IRQn = 3,/*!< 3 EFR32 EMU Interrupt */ + TIMER0_IRQn = 4,/*!< 4 EFR32 TIMER0 Interrupt */ + TIMER1_IRQn = 5,/*!< 5 EFR32 TIMER1 Interrupt */ + TIMER2_IRQn = 6,/*!< 6 EFR32 TIMER2 Interrupt */ + TIMER3_IRQn = 7,/*!< 7 EFR32 TIMER3 Interrupt */ + TIMER4_IRQn = 8,/*!< 8 EFR32 TIMER4 Interrupt */ + USART0_RX_IRQn = 9,/*!< 9 EFR32 USART0_RX Interrupt */ + USART0_TX_IRQn = 10,/*!< 10 EFR32 USART0_TX Interrupt */ + EUSART0_RX_IRQn = 11,/*!< 11 EFR32 EUSART0_RX Interrupt */ + EUSART0_TX_IRQn = 12,/*!< 12 EFR32 EUSART0_TX Interrupt */ + EUSART1_RX_IRQn = 13,/*!< 13 EFR32 EUSART1_RX Interrupt */ + EUSART1_TX_IRQn = 14,/*!< 14 EFR32 EUSART1_TX Interrupt */ + ICACHE0_IRQn = 16,/*!< 16 EFR32 ICACHE0 Interrupt */ + BURTC_IRQn = 17,/*!< 17 EFR32 BURTC Interrupt */ + LETIMER0_IRQn = 18,/*!< 18 EFR32 LETIMER0 Interrupt */ + SYSCFG_IRQn = 19,/*!< 19 EFR32 SYSCFG Interrupt */ + MPAHBRAM_IRQn = 20,/*!< 20 EFR32 MPAHBRAM Interrupt */ + LDMA_IRQn = 21,/*!< 21 EFR32 LDMA Interrupt */ + LFXO_IRQn = 22,/*!< 22 EFR32 LFXO Interrupt */ + LFRCO_IRQn = 23,/*!< 23 EFR32 LFRCO Interrupt */ + ULFRCO_IRQn = 24,/*!< 24 EFR32 ULFRCO Interrupt */ + GPIO_ODD_IRQn = 25,/*!< 25 EFR32 GPIO_ODD Interrupt */ + GPIO_EVEN_IRQn = 26,/*!< 26 EFR32 GPIO_EVEN Interrupt */ + I2C0_IRQn = 27,/*!< 27 EFR32 I2C0 Interrupt */ + I2C1_IRQn = 28,/*!< 28 EFR32 I2C1 Interrupt */ + EMUDG_IRQn = 29,/*!< 29 EFR32 EMUDG Interrupt */ + AGC_IRQn = 30,/*!< 30 EFR32 AGC Interrupt */ + BUFC_IRQn = 31,/*!< 31 EFR32 BUFC Interrupt */ + FRC_PRI_IRQn = 32,/*!< 32 EFR32 FRC_PRI Interrupt */ + FRC_IRQn = 33,/*!< 33 EFR32 FRC Interrupt */ + MODEM_IRQn = 34,/*!< 34 EFR32 MODEM Interrupt */ + PROTIMER_IRQn = 35,/*!< 35 EFR32 PROTIMER Interrupt */ + RAC_RSM_IRQn = 36,/*!< 36 EFR32 RAC_RSM Interrupt */ + RAC_SEQ_IRQn = 37,/*!< 37 EFR32 RAC_SEQ Interrupt */ + HOSTMAILBOX_IRQn = 38,/*!< 38 EFR32 HOSTMAILBOX Interrupt */ + SYNTH_IRQn = 39,/*!< 39 EFR32 SYNTH Interrupt */ + ACMP0_IRQn = 40,/*!< 40 EFR32 ACMP0 Interrupt */ + ACMP1_IRQn = 41,/*!< 41 EFR32 ACMP1 Interrupt */ + WDOG0_IRQn = 42,/*!< 42 EFR32 WDOG0 Interrupt */ + WDOG1_IRQn = 43,/*!< 43 EFR32 WDOG1 Interrupt */ + HFXO0_IRQn = 44,/*!< 44 EFR32 HFXO0 Interrupt */ + HFRCO0_IRQn = 45,/*!< 45 EFR32 HFRCO0 Interrupt */ + HFRCOEM23_IRQn = 46,/*!< 46 EFR32 HFRCOEM23 Interrupt */ + CMU_IRQn = 47,/*!< 47 EFR32 CMU Interrupt */ + AES_IRQn = 48,/*!< 48 EFR32 AES Interrupt */ + IADC_IRQn = 49,/*!< 49 EFR32 IADC Interrupt */ + MSC_IRQn = 50,/*!< 50 EFR32 MSC Interrupt */ + DPLL0_IRQn = 51,/*!< 51 EFR32 DPLL0 Interrupt */ + EMUEFP_IRQn = 52,/*!< 52 EFR32 EMUEFP Interrupt */ + DCDC_IRQn = 53,/*!< 53 EFR32 DCDC Interrupt */ + PCNT0_IRQn = 54,/*!< 54 EFR32 PCNT0 Interrupt */ + SW0_IRQn = 55,/*!< 55 EFR32 SW0 Interrupt */ + SW1_IRQn = 56,/*!< 56 EFR32 SW1 Interrupt */ + SW2_IRQn = 57,/*!< 57 EFR32 SW2 Interrupt */ + SW3_IRQn = 58,/*!< 58 EFR32 SW3 Interrupt */ + KERNEL0_IRQn = 59,/*!< 59 EFR32 KERNEL0 Interrupt */ + KERNEL1_IRQn = 60,/*!< 60 EFR32 KERNEL1 Interrupt */ + M33CTI0_IRQn = 61,/*!< 61 EFR32 M33CTI0 Interrupt */ + M33CTI1_IRQn = 62,/*!< 62 EFR32 M33CTI1 Interrupt */ + FPUEXH_IRQn = 63,/*!< 63 EFR32 FPUEXH Interrupt */ + SETAMPERHOST_IRQn = 64,/*!< 64 EFR32 SETAMPERHOST Interrupt */ + SEMBRX_IRQn = 65,/*!< 65 EFR32 SEMBRX Interrupt */ + SEMBTX_IRQn = 66,/*!< 66 EFR32 SEMBTX Interrupt */ + SYSRTC_APP_IRQn = 67,/*!< 67 EFR32 SYSRTC_APP Interrupt */ + SYSRTC_SEQ_IRQn = 68,/*!< 68 EFR32 SYSRTC_SEQ Interrupt */ + KEYSCAN_IRQn = 69,/*!< 69 EFR32 KEYSCAN Interrupt */ + RFECA0_IRQn = 70,/*!< 70 EFR32 RFECA0 Interrupt */ + RFECA1_IRQn = 71,/*!< 71 EFR32 RFECA1 Interrupt */ + VDAC0_IRQn = 72,/*!< 72 EFR32 VDAC0 Interrupt */ + VDAC1_IRQn = 73,/*!< 73 EFR32 VDAC1 Interrupt */ + AHB2AHB0_IRQn = 74,/*!< 74 EFR32 AHB2AHB0 Interrupt */ + AHB2AHB1_IRQn = 75,/*!< 75 EFR32 AHB2AHB1 Interrupt */ +} IRQn_Type; + +/**************************************************************************//** + * @defgroup EFR32BG24B410F1536IJ42_Core EFR32BG24B410F1536IJ42 Core + * @{ + * @brief Processor and Core Peripheral Section + *****************************************************************************/ + +#define __CM33_REV 0x0004U /**< Cortex-M33 Core revision */ +#define __DSP_PRESENT 1U /**< Presence of DSP */ +#define __FPU_PRESENT 1U /**< Presence of FPU */ +#define __MPU_PRESENT 1U /**< Presence of MPU */ +#define __SAUREGION_PRESENT 1U /**< Presence of FPU */ +#define __TZ_PRESENT 1U /**< Presence of TrustZone */ +#define __VTOR_PRESENT 1U /**< Presence of VTOR register in SCB */ +#define __NVIC_PRIO_BITS 4U /**< NVIC interrupt priority bits */ +#define __Vendor_SysTickConfig 0U /**< Is 1 if different SysTick counter is used */ + +/** @} End of group EFR32BG24B410F1536IJ42_Core */ + +/**************************************************************************//** +* @defgroup EFR32BG24B410F1536IJ42_Part EFR32BG24B410F1536IJ42 Part +* @{ +******************************************************************************/ + +/** Part number */ + +/* If part number is not defined as compiler option, define it */ +#if !defined(EFR32BG24B410F1536IJ42) +#define EFR32BG24B410F1536IJ42 1 /**< FULL Part */ +#endif + +/** Configure part number */ +#define PART_NUMBER "EFR32BG24B410F1536IJ42" /**< Part Number */ + +/** Family / Line / Series / Config */ +#define _EFR32_BLUE_FAMILY 1 /** Device Family Name Identifier */ +#define _EFR32_BG_FAMILY 1 /** Device Family Identifier */ +#define _EFR_DEVICE 1 /** Product Line Identifier */ +#define _SILICON_LABS_32B_SERIES_2 /** Product Series Identifier */ +#define _SILICON_LABS_32B_SERIES 2 /** Product Series Identifier */ +#define _SILICON_LABS_32B_SERIES_2_CONFIG_4 /** Product Config Identifier */ +#define _SILICON_LABS_32B_SERIES_2_CONFIG 4 /** Product Config Identifier */ +#define _SILICON_LABS_GECKO_INTERNAL_SDID 215 /** Silicon Labs internal use only */ +#define _SILICON_LABS_GECKO_INTERNAL_SDID_215 /** Silicon Labs internal use only */ +#define _SILICON_LABS_SECURITY_FEATURE_SE 0 /** Mid */ +#define _SILICON_LABS_SECURITY_FEATURE_VAULT 1 /** High */ +#define _SILICON_LABS_SECURITY_FEATURE_ROT 2 /** Root Of Trust */ +#define _SILICON_LABS_SECURITY_FEATURE _SILICON_LABS_SECURITY_FEATURE_VAULT /** Security feature set */ +#define _SILICON_LABS_DCDC_FEATURE_NOTUSED 0 /** Not Used */ +#define _SILICON_LABS_DCDC_FEATURE_DCDC_BUCK 1 /** Includes Buck DCDC */ +#define _SILICON_LABS_DCDC_FEATURE_DCDC_BOOST 2 /** Includes Boost DCDC */ +#define _SILICON_LABS_DCDC_FEATURE_DCDC_BOB 3 /** Includes Buck or Boost DCDC */ +#define _SILICON_LABS_DCDC_FEATURE _SILICON_LABS_DCDC_FEATURE_DCDC_BUCK/** DCDC feature set */ +#define _SILICON_LABS_EFR32_RADIO_NONE 0 /** No radio present */ +#define _SILICON_LABS_EFR32_RADIO_SUBGHZ 1 /** Radio supports Sub-GHz */ +#define _SILICON_LABS_EFR32_RADIO_2G4HZ 2 /** Radio supports 2.4 GHz */ +#define _SILICON_LABS_EFR32_RADIO_DUALBAND 3 /** Radio supports dual band */ +#define _SILICON_LABS_EFR32_RADIO_TYPE _SILICON_LABS_EFR32_RADIO_2G4HZ /** Radio type */ +#define _SILICON_LABS_EFR32_2G4HZ_MP_PA_MAX_OUTPUT_DBM 10 /** Radio 2G4HZ MP PA output power */ +#define _SILICON_LABS_EFR32_2G4HZ_LP_PA_MAX_OUTPUT_DBM 0 /** Radio 2G4HZ LP PA output power */ +#define _SILICON_LABS_EFR32_2G4HZ_MP_PA_PRESENT/** Radio 2G4HZ MP PA is present */ +#define _SILICON_LABS_EFR32_2G4HZ_LP_PA_PRESENT/** Radio 2G4HZ LP PA is present */ +#define LFRCO_PRECISION_MODE 1 /** Precision mode of LFRCO enabled or disabled */ + +/** Memory Base addresses and limits */ +#define FLASH_MEM_BASE (0x08000000UL) /** FLASH_MEM base address */ +#define FLASH_MEM_SIZE (0x00180000UL) /** FLASH_MEM available address space */ +#define FLASH_MEM_END (0x0817FFFFUL) /** FLASH_MEM end address */ +#define FLASH_MEM_BITS (0x15UL) /** FLASH_MEM used bits */ +#define MSC_FLASH_MEM_BASE (0x08000000UL) /** MSC_FLASH_MEM base address */ +#define MSC_FLASH_MEM_SIZE (0x00180000UL) /** MSC_FLASH_MEM available address space */ +#define MSC_FLASH_MEM_END (0x0817FFFFUL) /** MSC_FLASH_MEM end address */ +#define MSC_FLASH_MEM_BITS (0x15UL) /** MSC_FLASH_MEM used bits */ +#define MSC_FLASH_USERDATA_MEM_BASE (0x0FE00000UL) /** MSC_FLASH_USERDATA_MEM base address */ +#define MSC_FLASH_USERDATA_MEM_SIZE (0x00000400UL) /** MSC_FLASH_USERDATA_MEM available address space */ +#define MSC_FLASH_USERDATA_MEM_END (0x0FE003FFUL) /** MSC_FLASH_USERDATA_MEM end address */ +#define MSC_FLASH_USERDATA_MEM_BITS (0xBUL) /** MSC_FLASH_USERDATA_MEM used bits */ +#define USERDATA_BASE (0x0FE00000UL) /** USERDATA base address */ +#define USERDATA_SIZE (0x00000400UL) /** USERDATA available address space */ +#define USERDATA_END (0x0FE003FFUL) /** USERDATA end address */ +#define USERDATA_BITS (0xBUL) /** USERDATA used bits */ +#define MSC_FLASH_DEVINFO_MEM_BASE (0x0FE08000UL) /** MSC_FLASH_DEVINFO_MEM base address */ +#define MSC_FLASH_DEVINFO_MEM_SIZE (0x00000400UL) /** MSC_FLASH_DEVINFO_MEM available address space */ +#define MSC_FLASH_DEVINFO_MEM_END (0x0FE083FFUL) /** MSC_FLASH_DEVINFO_MEM end address */ +#define MSC_FLASH_DEVINFO_MEM_BITS (0xBUL) /** MSC_FLASH_DEVINFO_MEM used bits */ +#define MSC_FLASH_CHIPCONFIG_MEM_BASE (0x0FE08400UL) /** MSC_FLASH_CHIPCONFIG_MEM base address */ +#define MSC_FLASH_CHIPCONFIG_MEM_SIZE (0x00000600UL) /** MSC_FLASH_CHIPCONFIG_MEM available address space */ +#define MSC_FLASH_CHIPCONFIG_MEM_END (0x0FE089FFUL) /** MSC_FLASH_CHIPCONFIG_MEM end address */ +#define MSC_FLASH_CHIPCONFIG_MEM_BITS (0xBUL) /** MSC_FLASH_CHIPCONFIG_MEM used bits */ +#define DMEM_RAM0_RAM_MEM_BASE (0x20000000UL) /** DMEM_RAM0_RAM_MEM base address */ +#define DMEM_RAM0_RAM_MEM_SIZE (0x00040000UL) /** DMEM_RAM0_RAM_MEM available address space */ +#define DMEM_RAM0_RAM_MEM_END (0x2003FFFFUL) /** DMEM_RAM0_RAM_MEM end address */ +#define DMEM_RAM0_RAM_MEM_BITS (0x13UL) /** DMEM_RAM0_RAM_MEM used bits */ +#define RAM_MEM_BASE (0x20000000UL) /** RAM_MEM base address */ +#define RAM_MEM_SIZE (0x00040000UL) /** RAM_MEM available address space */ +#define RAM_MEM_END (0x2003FFFFUL) /** RAM_MEM end address */ +#define RAM_MEM_BITS (0x13UL) /** RAM_MEM used bits */ +#define RDMEM_SEQRAM_S_MEM_BASE (0xA0000000UL) /** RDMEM_SEQRAM_S_MEM base address */ +#define RDMEM_SEQRAM_S_MEM_SIZE (0x00004000UL) /** RDMEM_SEQRAM_S_MEM available address space */ +#define RDMEM_SEQRAM_S_MEM_END (0xA0003FFFUL) /** RDMEM_SEQRAM_S_MEM end address */ +#define RDMEM_SEQRAM_S_MEM_BITS (0xFUL) /** RDMEM_SEQRAM_S_MEM used bits */ +#define RDMEM_FRCRAM_S_MEM_BASE (0xA0004000UL) /** RDMEM_FRCRAM_S_MEM base address */ +#define RDMEM_FRCRAM_S_MEM_SIZE (0x00001000UL) /** RDMEM_FRCRAM_S_MEM available address space */ +#define RDMEM_FRCRAM_S_MEM_END (0xA0004FFFUL) /** RDMEM_FRCRAM_S_MEM end address */ +#define RDMEM_FRCRAM_S_MEM_BITS (0xDUL) /** RDMEM_FRCRAM_S_MEM used bits */ +#define RDMEM_SEQRAM_NS_MEM_BASE (0xB0000000UL) /** RDMEM_SEQRAM_NS_MEM base address */ +#define RDMEM_SEQRAM_NS_MEM_SIZE (0x00004000UL) /** RDMEM_SEQRAM_NS_MEM available address space */ +#define RDMEM_SEQRAM_NS_MEM_END (0xB0003FFFUL) /** RDMEM_SEQRAM_NS_MEM end address */ +#define RDMEM_SEQRAM_NS_MEM_BITS (0xFUL) /** RDMEM_SEQRAM_NS_MEM used bits */ +#define RDMEM_SEQRAM_SEQRAM_MEM_BASE (0xB0000000UL) /** RDMEM_SEQRAM_SEQRAM_MEM base address */ +#define RDMEM_SEQRAM_SEQRAM_MEM_SIZE (0x00004000UL) /** RDMEM_SEQRAM_SEQRAM_MEM available address space */ +#define RDMEM_SEQRAM_SEQRAM_MEM_END (0xB0003FFFUL) /** RDMEM_SEQRAM_SEQRAM_MEM end address */ +#define RDMEM_SEQRAM_SEQRAM_MEM_BITS (0xFUL) /** RDMEM_SEQRAM_SEQRAM_MEM used bits */ +#define RDMEM_FRCRAM_FRCRAM_MEM_BASE (0xB0004000UL) /** RDMEM_FRCRAM_FRCRAM_MEM base address */ +#define RDMEM_FRCRAM_FRCRAM_MEM_SIZE (0x00001000UL) /** RDMEM_FRCRAM_FRCRAM_MEM available address space */ +#define RDMEM_FRCRAM_FRCRAM_MEM_END (0xB0004FFFUL) /** RDMEM_FRCRAM_FRCRAM_MEM end address */ +#define RDMEM_FRCRAM_FRCRAM_MEM_BITS (0xDUL) /** RDMEM_FRCRAM_FRCRAM_MEM used bits */ +#define RDMEM_FRCRAM_NS_MEM_BASE (0xB0004000UL) /** RDMEM_FRCRAM_NS_MEM base address */ +#define RDMEM_FRCRAM_NS_MEM_SIZE (0x00001000UL) /** RDMEM_FRCRAM_NS_MEM available address space */ +#define RDMEM_FRCRAM_NS_MEM_END (0xB0004FFFUL) /** RDMEM_FRCRAM_NS_MEM end address */ +#define RDMEM_FRCRAM_NS_MEM_BITS (0xDUL) /** RDMEM_FRCRAM_NS_MEM used bits */ + +/** Flash and SRAM limits for EFR32BG24B410F1536IJ42 */ +#define FLASH_BASE (0x08000000UL) /**< Flash Base Address */ +#define FLASH_SIZE (0x00180000UL) /**< Available Flash Memory */ +#define FLASH_PAGE_SIZE (0x00002000UL) /**< Flash Memory page size */ +#define SRAM_BASE (0x20000000UL) /**< SRAM Base Address */ +#define SRAM_SIZE (0x00040000UL) /**< Available SRAM Memory */ +#define DMA_CHAN_COUNT LDMA_CH_NUM /**< Number of DMA channels */ +#define EXT_IRQ_COUNT 76 /**< Number of External (NVIC) interrupts */ + +/* GPIO Avalibility Info */ +#define GPIO_PA_INDEX 0U /**< Index of port PA */ +#define GPIO_PA_COUNT 7U /**< Number of pins on port PA */ +#define GPIO_PA_MASK (0x00FEUL) /**< Port PA pin mask */ +#define GPIO_PA_PIN1 1U /**< GPIO pin PA1 is present. */ +#define GPIO_PA_PIN2 1U /**< GPIO pin PA2 is present. */ +#define GPIO_PA_PIN3 1U /**< GPIO pin PA3 is present. */ +#define GPIO_PA_PIN4 1U /**< GPIO pin PA4 is present. */ +#define GPIO_PA_PIN5 1U /**< GPIO pin PA5 is present. */ +#define GPIO_PA_PIN6 1U /**< GPIO pin PA6 is present. */ +#define GPIO_PA_PIN7 1U /**< GPIO pin PA7 is present. */ +#define GPIO_PB_INDEX 1U /**< Index of port PB */ +#define GPIO_PB_COUNT 3U /**< Number of pins on port PB */ +#define GPIO_PB_MASK (0x000BUL) /**< Port PB pin mask */ +#define GPIO_PB_PIN0 1U /**< GPIO pin PB0 is present. */ +#define GPIO_PB_PIN1 1U /**< GPIO pin PB1 is present. */ +#define GPIO_PB_PIN3 1U /**< GPIO pin PB3 is present. */ +#define GPIO_PC_INDEX 2U /**< Index of port PC */ +#define GPIO_PC_COUNT 7U /**< Number of pins on port PC */ +#define GPIO_PC_MASK (0x027EUL) /**< Port PC pin mask */ +#define GPIO_PC_PIN1 1U /**< GPIO pin PC1 is present. */ +#define GPIO_PC_PIN2 1U /**< GPIO pin PC2 is present. */ +#define GPIO_PC_PIN3 1U /**< GPIO pin PC3 is present. */ +#define GPIO_PC_PIN4 1U /**< GPIO pin PC4 is present. */ +#define GPIO_PC_PIN5 1U /**< GPIO pin PC5 is present. */ +#define GPIO_PC_PIN6 1U /**< GPIO pin PC6 is present. */ +#define GPIO_PC_PIN9 1U /**< GPIO pin PC9 is present. */ +#define GPIO_PD_INDEX 3U /**< Index of port PD */ +#define GPIO_PD_COUNT 3U /**< Number of pins on port PD */ +#define GPIO_PD_MASK (0x0023UL) /**< Port PD pin mask */ +#define GPIO_PD_PIN0 1U /**< GPIO pin PD0 is present. */ +#define GPIO_PD_PIN1 1U /**< GPIO pin PD1 is present. */ +#define GPIO_PD_PIN5 1U /**< GPIO pin PD5 is present. */ + +/* Fixed Resource Locations */ +#define GPIO_SWCLK_PORT GPIO_PA_INDEX /**< Port of SWCLK.*/ +#define GPIO_SWCLK_PIN 1U /**< Pin of SWCLK.*/ +#define GPIO_SWDIO_PORT GPIO_PA_INDEX /**< Port of SWDIO.*/ +#define GPIO_SWDIO_PIN 2U /**< Pin of SWDIO.*/ +#define GPIO_SWV_PORT GPIO_PA_INDEX /**< Port of SWV.*/ +#define GPIO_SWV_PIN 3U /**< Pin of SWV.*/ +#define GPIO_TDI_PORT GPIO_PA_INDEX /**< Port of TDI.*/ +#define GPIO_TDI_PIN 4U /**< Pin of TDI.*/ +#define GPIO_TDO_PORT GPIO_PA_INDEX /**< Port of TDO.*/ +#define GPIO_TDO_PIN 3U /**< Pin of TDO.*/ +#define GPIO_TRACECLK_PORT GPIO_PA_INDEX /**< Port of TRACECLK.*/ +#define GPIO_TRACECLK_PIN 4U /**< Pin of TRACECLK.*/ +#define GPIO_TRACEDATA0_PORT GPIO_PA_INDEX /**< Port of TRACEDATA0.*/ +#define GPIO_TRACEDATA0_PIN 3U /**< Pin of TRACEDATA0.*/ +#define GPIO_TRACEDATA1_PORT GPIO_PA_INDEX /**< Port of TRACEDATA1.*/ +#define GPIO_TRACEDATA1_PIN 5U /**< Pin of TRACEDATA1.*/ +#define GPIO_TRACEDATA2_PORT GPIO_PA_INDEX /**< Port of TRACEDATA2.*/ +#define GPIO_TRACEDATA2_PIN 6U /**< Pin of TRACEDATA2.*/ +#define GPIO_TRACEDATA3_PORT GPIO_PA_INDEX /**< Port of TRACEDATA3.*/ +#define GPIO_TRACEDATA3_PIN 7U /**< Pin of TRACEDATA3.*/ +#define GPIO_EFP_INT_PORT GPIO_PC_INDEX /**< Port of EFP_INT.*/ +#define GPIO_EFP_INT_PIN 5U /**< Pin of EFP_INT.*/ +#define GPIO_EFP_TX_SCL_PORT GPIO_PC_INDEX /**< Port of EFP_TX_SCL.*/ +#define GPIO_EFP_TX_SCL_PIN 2U /**< Pin of EFP_TX_SCL.*/ +#define GPIO_EFP_TX_SDA_PORT GPIO_PC_INDEX /**< Port of EFP_TX_SDA.*/ +#define GPIO_EFP_TX_SDA_PIN 1U /**< Pin of EFP_TX_SDA.*/ +#define GPIO_EM4WU0_PORT GPIO_PA_INDEX /**< Port of EM4WU0.*/ +#define GPIO_EM4WU0_PIN 5U /**< Pin of EM4WU0.*/ +#define GPIO_EM4WU10_PORT GPIO_PD_INDEX /**< Port of EM4WU10.*/ +#define GPIO_EM4WU10_PIN 5U /**< Pin of EM4WU10.*/ +#define GPIO_EM4WU3_PORT GPIO_PB_INDEX /**< Port of EM4WU3.*/ +#define GPIO_EM4WU3_PIN 1U /**< Pin of EM4WU3.*/ +#define GPIO_EM4WU4_PORT GPIO_PB_INDEX /**< Port of EM4WU4.*/ +#define GPIO_EM4WU4_PIN 3U /**< Pin of EM4WU4.*/ +#define GPIO_EM4WU7_PORT GPIO_PC_INDEX /**< Port of EM4WU7.*/ +#define GPIO_EM4WU7_PIN 5U /**< Pin of EM4WU7.*/ +#define GPIO_THMSW_EN_PORT GPIO_PC_INDEX /**< Port of THMSW_EN.*/ +#define GPIO_THMSW_EN_PIN 9U /**< Pin of THMSW_EN.*/ +#define GPIO_THMSW_HALFSWITCH_PORT GPIO_PC_INDEX /**< Port of THMSW_HALFSWITCH.*/ +#define GPIO_THMSW_HALFSWITCH_PIN 9U /**< Pin of THMSW_HALFSWITCH.*/ +#define LFXO_LFXTAL_I_PORT GPIO_PD_INDEX /**< Port of LFXTAL_I.*/ +#define LFXO_LFXTAL_I_PIN 1U /**< Pin of LFXTAL_I.*/ +#define LFXO_LFXTAL_O_PORT GPIO_PD_INDEX /**< Port of LFXTAL_O.*/ +#define LFXO_LFXTAL_O_PIN 0U /**< Pin of LFXTAL_O.*/ +#define LFXO_LF_EXTCLK_PORT GPIO_PD_INDEX /**< Port of LF_EXTCLK.*/ +#define LFXO_LF_EXTCLK_PIN 1U /**< Pin of LF_EXTCLK.*/ +#define VDAC0_CH0_MAIN_OUT_PORT GPIO_PB_INDEX /**< Port of CH0_MAIN_OUT.*/ +#define VDAC0_CH0_MAIN_OUT_PIN 0U /**< Pin of CH0_MAIN_OUT.*/ +#define VDAC0_CH1_MAIN_OUT_PORT GPIO_PB_INDEX /**< Port of CH1_MAIN_OUT.*/ +#define VDAC0_CH1_MAIN_OUT_PIN 1U /**< Pin of CH1_MAIN_OUT.*/ +#define VDAC1_CH1_MAIN_OUT_PORT GPIO_PB_INDEX /**< Port of CH1_MAIN_OUT.*/ +#define VDAC1_CH1_MAIN_OUT_PIN 3U /**< Pin of CH1_MAIN_OUT.*/ + +/* Part number capabilities */ +#define ACMP_PRESENT /** ACMP is available in this part */ +#define ACMP_COUNT 2 /** 2 ACMPs available */ +#define BURAM_PRESENT /** BURAM is available in this part */ +#define BURAM_COUNT 1 /** 1 BURAMs available */ +#define BURTC_PRESENT /** BURTC is available in this part */ +#define BURTC_COUNT 1 /** 1 BURTCs available */ +#define CMU_PRESENT /** CMU is available in this part */ +#define CMU_COUNT 1 /** 1 CMUs available */ +#define DCDC_PRESENT /** DCDC is available in this part */ +#define DCDC_COUNT 1 /** 1 DCDCs available */ +#define DMEM_PRESENT /** DMEM is available in this part */ +#define DMEM_COUNT 1 /** 1 DMEMs available */ +#define DPLL_PRESENT /** DPLL is available in this part */ +#define DPLL_COUNT 1 /** 1 DPLLs available */ +#define EMU_PRESENT /** EMU is available in this part */ +#define EMU_COUNT 1 /** 1 EMUs available */ +#define EUSART_PRESENT /** EUSART is available in this part */ +#define EUSART_COUNT 2 /** 2 EUSARTs available */ +#define FSRCO_PRESENT /** FSRCO is available in this part */ +#define FSRCO_COUNT 1 /** 1 FSRCOs available */ +#define GPCRC_PRESENT /** GPCRC is available in this part */ +#define GPCRC_COUNT 1 /** 1 GPCRCs available */ +#define GPIO_PRESENT /** GPIO is available in this part */ +#define GPIO_COUNT 1 /** 1 GPIOs available */ +#define HFRCO_PRESENT /** HFRCO is available in this part */ +#define HFRCO_COUNT 1 /** 1 HFRCOs available */ +#define HFRCOEM23_PRESENT /** HFRCOEM23 is available in this part */ +#define HFRCOEM23_COUNT 1 /** 1 HFRCOEM23s available */ +#define HFXO_PRESENT /** HFXO is available in this part */ +#define HFXO_COUNT 1 /** 1 HFXOs available */ +#define HOSTMAILBOX_PRESENT /** HOSTMAILBOX is available in this part */ +#define HOSTMAILBOX_COUNT 1 /** 1 HOSTMAILBOXs available */ +#define I2C_PRESENT /** I2C is available in this part */ +#define I2C_COUNT 2 /** 2 I2Cs available */ +#define IADC_PRESENT /** IADC is available in this part */ +#define IADC_COUNT 1 /** 1 IADCs available */ +#define ICACHE_PRESENT /** ICACHE is available in this part */ +#define ICACHE_COUNT 1 /** 1 ICACHEs available */ +#define KEYSCAN_PRESENT /** KEYSCAN is available in this part */ +#define KEYSCAN_COUNT 1 /** 1 KEYSCANs available */ +#define LDMA_PRESENT /** LDMA is available in this part */ +#define LDMA_COUNT 1 /** 1 LDMAs available */ +#define LDMAXBAR_PRESENT /** LDMAXBAR is available in this part */ +#define LDMAXBAR_COUNT 1 /** 1 LDMAXBARs available */ +#define LETIMER_PRESENT /** LETIMER is available in this part */ +#define LETIMER_COUNT 1 /** 1 LETIMERs available */ +#define LFRCO_PRESENT /** LFRCO is available in this part */ +#define LFRCO_COUNT 1 /** 1 LFRCOs available */ +#define LFXO_PRESENT /** LFXO is available in this part */ +#define LFXO_COUNT 1 /** 1 LFXOs available */ +#define MSC_PRESENT /** MSC is available in this part */ +#define MSC_COUNT 1 /** 1 MSCs available */ +#define PCNT_PRESENT /** PCNT is available in this part */ +#define PCNT_COUNT 1 /** 1 PCNTs available */ +#define PRS_PRESENT /** PRS is available in this part */ +#define PRS_COUNT 1 /** 1 PRSs available */ +#define RADIOAES_PRESENT /** RADIOAES is available in this part */ +#define RADIOAES_COUNT 1 /** 1 RADIOAESs available */ +#define SCRATCHPAD_PRESENT /** SCRATCHPAD is available in this part */ +#define SCRATCHPAD_COUNT 1 /** 1 SCRATCHPADs available */ +#define SEMAILBOX_PRESENT /** SEMAILBOX is available in this part */ +#define SEMAILBOX_COUNT 1 /** 1 SEMAILBOXs available */ +#define SMU_PRESENT /** SMU is available in this part */ +#define SMU_COUNT 1 /** 1 SMUs available */ +#define SYSCFG_PRESENT /** SYSCFG is available in this part */ +#define SYSCFG_COUNT 1 /** 1 SYSCFGs available */ +#define SYSRTC_PRESENT /** SYSRTC is available in this part */ +#define SYSRTC_COUNT 1 /** 1 SYSRTCs available */ +#define TIMER_PRESENT /** TIMER is available in this part */ +#define TIMER_COUNT 5 /** 5 TIMERs available */ +#define ULFRCO_PRESENT /** ULFRCO is available in this part */ +#define ULFRCO_COUNT 1 /** 1 ULFRCOs available */ +#define USART_PRESENT /** USART is available in this part */ +#define USART_COUNT 1 /** 1 USARTs available */ +#define VDAC_PRESENT /** VDAC is available in this part */ +#define VDAC_COUNT 2 /** 2 VDACs available */ +#define WDOG_PRESENT /** WDOG is available in this part */ +#define WDOG_COUNT 2 /** 2 WDOGs available */ +#define DEVINFO_PRESENT /** DEVINFO is available in this part */ +#define DEVINFO_COUNT 1 /** 1 DEVINFOs available */ + +/* Include standard ARM headers for the core */ +#include "core_cm33.h" /* Core Header File */ +#include "system_efr32bg24.h" /* System Header File */ + + +/** @} End of group EFR32BG24B410F1536IJ42_Part */ + +/**************************************************************************//** + * @defgroup EFR32BG24B410F1536IJ42_Peripheral_TypeDefs EFR32BG24B410F1536IJ42 Peripheral TypeDefs + * @{ + * @brief Device Specific Peripheral Register Structures + *****************************************************************************/ +#include "efr32bg24_scratchpad.h" +#include "efr32bg24_emu.h" +#include "efr32bg24_cmu.h" +#include "efr32bg24_hfrco.h" +#include "efr32bg24_fsrco.h" +#include "efr32bg24_dpll.h" +#include "efr32bg24_lfxo.h" +#include "efr32bg24_lfrco.h" +#include "efr32bg24_ulfrco.h" +#include "efr32bg24_msc.h" +#include "efr32bg24_icache.h" +#include "efr32bg24_prs.h" +#include "efr32bg24_gpio.h" +#include "efr32bg24_ldma.h" +#include "efr32bg24_ldmaxbar.h" +#include "efr32bg24_timer.h" +#include "efr32bg24_usart.h" +#include "efr32bg24_burtc.h" +#include "efr32bg24_i2c.h" +#include "efr32bg24_syscfg.h" +#include "efr32bg24_buram.h" +#include "efr32bg24_gpcrc.h" +#include "efr32bg24_dcdc.h" +#include "efr32bg24_mailbox.h" +#include "efr32bg24_eusart.h" +#include "efr32bg24_sysrtc.h" +#include "efr32bg24_keyscan.h" +#include "efr32bg24_mpahbram.h" +#include "efr32bg24_aes.h" +#include "efr32bg24_smu.h" +#include "efr32bg24_letimer.h" +#include "efr32bg24_iadc.h" +#include "efr32bg24_acmp.h" +#include "efr32bg24_vdac.h" +#include "efr32bg24_pcnt.h" +#include "efr32bg24_hfxo.h" +#include "efr32bg24_wdog.h" +#include "efr32bg24_semailbox.h" +#include "efr32bg24_devinfo.h" + +/* Custom headers for LDMAXBAR and PRS mappings */ +#include "efr32bg24_prs_signals.h" +#include "efr32bg24_dma_descriptor.h" +#include "efr32bg24_ldmaxbar_defines.h" +/** @} End of group EFR32BG24B410F1536IJ42_Peripheral_TypeDefs */ + +/**************************************************************************//** +* @defgroup EFR32BG24B410F1536IJ42_Peripheral_Base EFR32BG24B410F1536IJ42 Peripheral Memory Map +* @{ +*****************************************************************************/ + +#define SCRATCHPAD_S_BASE (0x40000000UL) /* SCRATCHPAD_S base address */ +#define EMU_S_BASE (0x40004000UL) /* EMU_S base address */ +#define CMU_S_BASE (0x40008000UL) /* CMU_S base address */ +#define HFRCO0_S_BASE (0x40010000UL) /* HFRCO0_S base address */ +#define FSRCO_S_BASE (0x40018000UL) /* FSRCO_S base address */ +#define DPLL0_S_BASE (0x4001C000UL) /* DPLL0_S base address */ +#define LFXO_S_BASE (0x40020000UL) /* LFXO_S base address */ +#define LFRCO_S_BASE (0x40024000UL) /* LFRCO_S base address */ +#define ULFRCO_S_BASE (0x40028000UL) /* ULFRCO_S base address */ +#define MSC_S_BASE (0x40030000UL) /* MSC_S base address */ +#define ICACHE0_S_BASE (0x40034000UL) /* ICACHE0_S base address */ +#define PRS_S_BASE (0x40038000UL) /* PRS_S base address */ +#define GPIO_S_BASE (0x4003C000UL) /* GPIO_S base address */ +#define LDMA_S_BASE (0x40040000UL) /* LDMA_S base address */ +#define LDMAXBAR_S_BASE (0x40044000UL) /* LDMAXBAR_S base address */ +#define TIMER0_S_BASE (0x40048000UL) /* TIMER0_S base address */ +#define TIMER1_S_BASE (0x4004C000UL) /* TIMER1_S base address */ +#define TIMER2_S_BASE (0x40050000UL) /* TIMER2_S base address */ +#define TIMER3_S_BASE (0x40054000UL) /* TIMER3_S base address */ +#define TIMER4_S_BASE (0x40058000UL) /* TIMER4_S base address */ +#define USART0_S_BASE (0x4005C000UL) /* USART0_S base address */ +#define BURTC_S_BASE (0x40064000UL) /* BURTC_S base address */ +#define I2C1_S_BASE (0x40068000UL) /* I2C1_S base address */ +#define SYSCFG_S_CFGNS_BASE (0x40078000UL) /* SYSCFG_S_CFGNS base address */ +#define SYSCFG_S_BASE (0x4007C000UL) /* SYSCFG_S base address */ +#define BURAM_S_BASE (0x40080000UL) /* BURAM_S base address */ +#define GPCRC_S_BASE (0x40088000UL) /* GPCRC_S base address */ +#define DCDC_S_BASE (0x40094000UL) /* DCDC_S base address */ +#define HOSTMAILBOX_S_BASE (0x40098000UL) /* HOSTMAILBOX_S base address */ +#define EUSART1_S_BASE (0x400A0000UL) /* EUSART1_S base address */ +#define SYSRTC0_S_BASE (0x400A8000UL) /* SYSRTC0_S base address */ +#define KEYSCAN_S_BASE (0x400B0000UL) /* KEYSCAN_S base address */ +#define DMEM_S_BASE (0x400B4000UL) /* DMEM_S base address */ +#define RADIOAES_S_BASE (0x44000000UL) /* RADIOAES_S base address */ +#define SMU_S_BASE (0x44008000UL) /* SMU_S base address */ +#define SMU_S_CFGNS_BASE (0x4400C000UL) /* SMU_S_CFGNS base address */ +#define LETIMER0_S_BASE (0x49000000UL) /* LETIMER0_S base address */ +#define IADC0_S_BASE (0x49004000UL) /* IADC0_S base address */ +#define ACMP0_S_BASE (0x49008000UL) /* ACMP0_S base address */ +#define ACMP1_S_BASE (0x4900C000UL) /* ACMP1_S base address */ +#define VDAC0_S_BASE (0x49024000UL) /* VDAC0_S base address */ +#define VDAC1_S_BASE (0x49028000UL) /* VDAC1_S base address */ +#define PCNT0_S_BASE (0x49030000UL) /* PCNT0_S base address */ +#define HFRCOEM23_S_BASE (0x4A000000UL) /* HFRCOEM23_S base address */ +#define HFXO0_S_BASE (0x4A004000UL) /* HFXO0_S base address */ +#define I2C0_S_BASE (0x4B000000UL) /* I2C0_S base address */ +#define WDOG0_S_BASE (0x4B004000UL) /* WDOG0_S base address */ +#define WDOG1_S_BASE (0x4B008000UL) /* WDOG1_S base address */ +#define EUSART0_S_BASE (0x4B010000UL) /* EUSART0_S base address */ +#define SEMAILBOX_S_HOST_BASE (0x4C000000UL) /* SEMAILBOX_S_HOST base address */ + +#define SCRATCHPAD_NS_BASE (0x50000000UL) /* SCRATCHPAD_NS base address */ +#define EMU_NS_BASE (0x50004000UL) /* EMU_NS base address */ +#define CMU_NS_BASE (0x50008000UL) /* CMU_NS base address */ +#define HFRCO0_NS_BASE (0x50010000UL) /* HFRCO0_NS base address */ +#define FSRCO_NS_BASE (0x50018000UL) /* FSRCO_NS base address */ +#define DPLL0_NS_BASE (0x5001C000UL) /* DPLL0_NS base address */ +#define LFXO_NS_BASE (0x50020000UL) /* LFXO_NS base address */ +#define LFRCO_NS_BASE (0x50024000UL) /* LFRCO_NS base address */ +#define ULFRCO_NS_BASE (0x50028000UL) /* ULFRCO_NS base address */ +#define MSC_NS_BASE (0x50030000UL) /* MSC_NS base address */ +#define ICACHE0_NS_BASE (0x50034000UL) /* ICACHE0_NS base address */ +#define PRS_NS_BASE (0x50038000UL) /* PRS_NS base address */ +#define GPIO_NS_BASE (0x5003C000UL) /* GPIO_NS base address */ +#define LDMA_NS_BASE (0x50040000UL) /* LDMA_NS base address */ +#define LDMAXBAR_NS_BASE (0x50044000UL) /* LDMAXBAR_NS base address */ +#define TIMER0_NS_BASE (0x50048000UL) /* TIMER0_NS base address */ +#define TIMER1_NS_BASE (0x5004C000UL) /* TIMER1_NS base address */ +#define TIMER2_NS_BASE (0x50050000UL) /* TIMER2_NS base address */ +#define TIMER3_NS_BASE (0x50054000UL) /* TIMER3_NS base address */ +#define TIMER4_NS_BASE (0x50058000UL) /* TIMER4_NS base address */ +#define USART0_NS_BASE (0x5005C000UL) /* USART0_NS base address */ +#define BURTC_NS_BASE (0x50064000UL) /* BURTC_NS base address */ +#define I2C1_NS_BASE (0x50068000UL) /* I2C1_NS base address */ +#define SYSCFG_NS_CFGNS_BASE (0x50078000UL) /* SYSCFG_NS_CFGNS base address */ +#define SYSCFG_NS_BASE (0x5007C000UL) /* SYSCFG_NS base address */ +#define BURAM_NS_BASE (0x50080000UL) /* BURAM_NS base address */ +#define GPCRC_NS_BASE (0x50088000UL) /* GPCRC_NS base address */ +#define DCDC_NS_BASE (0x50094000UL) /* DCDC_NS base address */ +#define HOSTMAILBOX_NS_BASE (0x50098000UL) /* HOSTMAILBOX_NS base address */ +#define EUSART1_NS_BASE (0x500A0000UL) /* EUSART1_NS base address */ +#define SYSRTC0_NS_BASE (0x500A8000UL) /* SYSRTC0_NS base address */ +#define KEYSCAN_NS_BASE (0x500B0000UL) /* KEYSCAN_NS base address */ +#define DMEM_NS_BASE (0x500B4000UL) /* DMEM_NS base address */ +#define RADIOAES_NS_BASE (0x54000000UL) /* RADIOAES_NS base address */ +#define SMU_NS_BASE (0x54008000UL) /* SMU_NS base address */ +#define SMU_NS_CFGNS_BASE (0x5400C000UL) /* SMU_NS_CFGNS base address */ +#define LETIMER0_NS_BASE (0x59000000UL) /* LETIMER0_NS base address */ +#define IADC0_NS_BASE (0x59004000UL) /* IADC0_NS base address */ +#define ACMP0_NS_BASE (0x59008000UL) /* ACMP0_NS base address */ +#define ACMP1_NS_BASE (0x5900C000UL) /* ACMP1_NS base address */ +#define VDAC0_NS_BASE (0x59024000UL) /* VDAC0_NS base address */ +#define VDAC1_NS_BASE (0x59028000UL) /* VDAC1_NS base address */ +#define PCNT0_NS_BASE (0x59030000UL) /* PCNT0_NS base address */ +#define HFRCOEM23_NS_BASE (0x5A000000UL) /* HFRCOEM23_NS base address */ +#define HFXO0_NS_BASE (0x5A004000UL) /* HFXO0_NS base address */ +#define I2C0_NS_BASE (0x5B000000UL) /* I2C0_NS base address */ +#define WDOG0_NS_BASE (0x5B004000UL) /* WDOG0_NS base address */ +#define WDOG1_NS_BASE (0x5B008000UL) /* WDOG1_NS base address */ +#define EUSART0_NS_BASE (0x5B010000UL) /* EUSART0_NS base address */ +#define SEMAILBOX_NS_HOST_BASE (0x5C000000UL) /* SEMAILBOX_NS_HOST base address */ + + +#if defined(SL_COMPONENT_CATALOG_PRESENT) +#include "sl_component_catalog.h" +#endif +#if defined(SL_CATALOG_TRUSTZONE_SECURE_CONFIG_PRESENT) +#include "sl_trustzone_secure_config.h" +#endif + +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SCRATCHPAD_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SCRATCHPAD_S) && (SL_TRUSTZONE_PERIPHERAL_SCRATCHPAD_S != 0))) +#define SCRATCHPAD_BASE (SCRATCHPAD_S_BASE) /* SCRATCHPAD base address */ +#else +#define SCRATCHPAD_BASE (SCRATCHPAD_NS_BASE) /* SCRATCHPAD base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SCRATCHPAD_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_EMU_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_EMU_S) && (SL_TRUSTZONE_PERIPHERAL_EMU_S != 0))) +#define EMU_BASE (EMU_S_BASE) /* EMU base address */ +#else +#define EMU_BASE (EMU_NS_BASE) /* EMU base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_EMU_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_CMU_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_CMU_S) && (SL_TRUSTZONE_PERIPHERAL_CMU_S != 0))) +#define CMU_BASE (CMU_S_BASE) /* CMU base address */ +#else +#define CMU_BASE (CMU_NS_BASE) /* CMU base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_CMU_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_HFRCO0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_HFRCO0_S) && (SL_TRUSTZONE_PERIPHERAL_HFRCO0_S != 0))) +#define HFRCO0_BASE (HFRCO0_S_BASE) /* HFRCO0 base address */ +#else +#define HFRCO0_BASE (HFRCO0_NS_BASE) /* HFRCO0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_HFRCO0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_FSRCO_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_FSRCO_S) && (SL_TRUSTZONE_PERIPHERAL_FSRCO_S != 0))) +#define FSRCO_BASE (FSRCO_S_BASE) /* FSRCO base address */ +#else +#define FSRCO_BASE (FSRCO_NS_BASE) /* FSRCO base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_FSRCO_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_DPLL0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_DPLL0_S) && (SL_TRUSTZONE_PERIPHERAL_DPLL0_S != 0))) +#define DPLL0_BASE (DPLL0_S_BASE) /* DPLL0 base address */ +#else +#define DPLL0_BASE (DPLL0_NS_BASE) /* DPLL0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_DPLL0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_LFXO_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_LFXO_S) && (SL_TRUSTZONE_PERIPHERAL_LFXO_S != 0))) +#define LFXO_BASE (LFXO_S_BASE) /* LFXO base address */ +#else +#define LFXO_BASE (LFXO_NS_BASE) /* LFXO base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_LFXO_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_LFRCO_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_LFRCO_S) && (SL_TRUSTZONE_PERIPHERAL_LFRCO_S != 0))) +#define LFRCO_BASE (LFRCO_S_BASE) /* LFRCO base address */ +#else +#define LFRCO_BASE (LFRCO_NS_BASE) /* LFRCO base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_LFRCO_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_ULFRCO_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_ULFRCO_S) && (SL_TRUSTZONE_PERIPHERAL_ULFRCO_S != 0))) +#define ULFRCO_BASE (ULFRCO_S_BASE) /* ULFRCO base address */ +#else +#define ULFRCO_BASE (ULFRCO_NS_BASE) /* ULFRCO base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_ULFRCO_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_MSC_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_MSC_S) && (SL_TRUSTZONE_PERIPHERAL_MSC_S != 0))) +#define MSC_BASE (MSC_S_BASE) /* MSC base address */ +#else +#define MSC_BASE (MSC_NS_BASE) /* MSC base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_MSC_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_ICACHE0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_ICACHE0_S) && (SL_TRUSTZONE_PERIPHERAL_ICACHE0_S != 0))) +#define ICACHE0_BASE (ICACHE0_S_BASE) /* ICACHE0 base address */ +#else +#define ICACHE0_BASE (ICACHE0_NS_BASE) /* ICACHE0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_ICACHE0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_PRS_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_PRS_S) && (SL_TRUSTZONE_PERIPHERAL_PRS_S != 0))) +#define PRS_BASE (PRS_S_BASE) /* PRS base address */ +#else +#define PRS_BASE (PRS_NS_BASE) /* PRS base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_PRS_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_GPIO_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_GPIO_S) && (SL_TRUSTZONE_PERIPHERAL_GPIO_S != 0))) +#define GPIO_BASE (GPIO_S_BASE) /* GPIO base address */ +#else +#define GPIO_BASE (GPIO_NS_BASE) /* GPIO base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_GPIO_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_LDMA_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_LDMA_S) && (SL_TRUSTZONE_PERIPHERAL_LDMA_S != 0))) +#define LDMA_BASE (LDMA_S_BASE) /* LDMA base address */ +#else +#define LDMA_BASE (LDMA_NS_BASE) /* LDMA base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_LDMA_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_LDMAXBAR_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_LDMAXBAR_S) && (SL_TRUSTZONE_PERIPHERAL_LDMAXBAR_S != 0))) +#define LDMAXBAR_BASE (LDMAXBAR_S_BASE) /* LDMAXBAR base address */ +#else +#define LDMAXBAR_BASE (LDMAXBAR_NS_BASE) /* LDMAXBAR base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_LDMAXBAR_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_TIMER0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_TIMER0_S) && (SL_TRUSTZONE_PERIPHERAL_TIMER0_S != 0))) +#define TIMER0_BASE (TIMER0_S_BASE) /* TIMER0 base address */ +#else +#define TIMER0_BASE (TIMER0_NS_BASE) /* TIMER0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_TIMER0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_TIMER1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_TIMER1_S) && (SL_TRUSTZONE_PERIPHERAL_TIMER1_S != 0))) +#define TIMER1_BASE (TIMER1_S_BASE) /* TIMER1 base address */ +#else +#define TIMER1_BASE (TIMER1_NS_BASE) /* TIMER1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_TIMER1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_TIMER2_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_TIMER2_S) && (SL_TRUSTZONE_PERIPHERAL_TIMER2_S != 0))) +#define TIMER2_BASE (TIMER2_S_BASE) /* TIMER2 base address */ +#else +#define TIMER2_BASE (TIMER2_NS_BASE) /* TIMER2 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_TIMER2_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_TIMER3_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_TIMER3_S) && (SL_TRUSTZONE_PERIPHERAL_TIMER3_S != 0))) +#define TIMER3_BASE (TIMER3_S_BASE) /* TIMER3 base address */ +#else +#define TIMER3_BASE (TIMER3_NS_BASE) /* TIMER3 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_TIMER3_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_TIMER4_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_TIMER4_S) && (SL_TRUSTZONE_PERIPHERAL_TIMER4_S != 0))) +#define TIMER4_BASE (TIMER4_S_BASE) /* TIMER4 base address */ +#else +#define TIMER4_BASE (TIMER4_NS_BASE) /* TIMER4 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_TIMER4_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_USART0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_USART0_S) && (SL_TRUSTZONE_PERIPHERAL_USART0_S != 0))) +#define USART0_BASE (USART0_S_BASE) /* USART0 base address */ +#else +#define USART0_BASE (USART0_NS_BASE) /* USART0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_USART0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_BURTC_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_BURTC_S) && (SL_TRUSTZONE_PERIPHERAL_BURTC_S != 0))) +#define BURTC_BASE (BURTC_S_BASE) /* BURTC base address */ +#else +#define BURTC_BASE (BURTC_NS_BASE) /* BURTC base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_BURTC_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_I2C1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_I2C1_S) && (SL_TRUSTZONE_PERIPHERAL_I2C1_S != 0))) +#define I2C1_BASE (I2C1_S_BASE) /* I2C1 base address */ +#else +#define I2C1_BASE (I2C1_NS_BASE) /* I2C1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_I2C1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SYSCFG_CFGNS_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SYSCFG_CFGNS_S) && (SL_TRUSTZONE_PERIPHERAL_SYSCFG_CFGNS_S != 0))) +#define SYSCFG_CFGNS_BASE (SYSCFG_S_CFGNS_BASE) /* SYSCFG_CFGNS base address */ +#else +#define SYSCFG_CFGNS_BASE (SYSCFG_NS_CFGNS_BASE) /* SYSCFG_CFGNS base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SYSCFG_CFGNS_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SYSCFG_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SYSCFG_S) && (SL_TRUSTZONE_PERIPHERAL_SYSCFG_S != 0))) +#define SYSCFG_BASE (SYSCFG_S_BASE) /* SYSCFG base address */ +#else +#define SYSCFG_BASE (SYSCFG_NS_BASE) /* SYSCFG base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SYSCFG_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_BURAM_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_BURAM_S) && (SL_TRUSTZONE_PERIPHERAL_BURAM_S != 0))) +#define BURAM_BASE (BURAM_S_BASE) /* BURAM base address */ +#else +#define BURAM_BASE (BURAM_NS_BASE) /* BURAM base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_BURAM_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_GPCRC_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_GPCRC_S) && (SL_TRUSTZONE_PERIPHERAL_GPCRC_S != 0))) +#define GPCRC_BASE (GPCRC_S_BASE) /* GPCRC base address */ +#else +#define GPCRC_BASE (GPCRC_NS_BASE) /* GPCRC base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_GPCRC_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_DCDC_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_DCDC_S) && (SL_TRUSTZONE_PERIPHERAL_DCDC_S != 0))) +#define DCDC_BASE (DCDC_S_BASE) /* DCDC base address */ +#else +#define DCDC_BASE (DCDC_NS_BASE) /* DCDC base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_DCDC_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_HOSTMAILBOX_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_HOSTMAILBOX_S) && (SL_TRUSTZONE_PERIPHERAL_HOSTMAILBOX_S != 0))) +#define HOSTMAILBOX_BASE (HOSTMAILBOX_S_BASE) /* HOSTMAILBOX base address */ +#else +#define HOSTMAILBOX_BASE (HOSTMAILBOX_NS_BASE) /* HOSTMAILBOX base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_HOSTMAILBOX_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_EUSART1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_EUSART1_S) && (SL_TRUSTZONE_PERIPHERAL_EUSART1_S != 0))) +#define EUSART1_BASE (EUSART1_S_BASE) /* EUSART1 base address */ +#else +#define EUSART1_BASE (EUSART1_NS_BASE) /* EUSART1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_EUSART1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SYSRTC0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SYSRTC0_S) && (SL_TRUSTZONE_PERIPHERAL_SYSRTC0_S != 0))) +#define SYSRTC0_BASE (SYSRTC0_S_BASE) /* SYSRTC0 base address */ +#else +#define SYSRTC0_BASE (SYSRTC0_NS_BASE) /* SYSRTC0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SYSRTC0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_KEYSCAN_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_KEYSCAN_S) && (SL_TRUSTZONE_PERIPHERAL_KEYSCAN_S != 0))) +#define KEYSCAN_BASE (KEYSCAN_S_BASE) /* KEYSCAN base address */ +#else +#define KEYSCAN_BASE (KEYSCAN_NS_BASE) /* KEYSCAN base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_KEYSCAN_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_DMEM_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_DMEM_S) && (SL_TRUSTZONE_PERIPHERAL_DMEM_S != 0))) +#define DMEM_BASE (DMEM_S_BASE) /* DMEM base address */ +#else +#define DMEM_BASE (DMEM_NS_BASE) /* DMEM base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_DMEM_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_RADIOAES_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_RADIOAES_S) && (SL_TRUSTZONE_PERIPHERAL_RADIOAES_S != 0))) +#define RADIOAES_BASE (RADIOAES_S_BASE) /* RADIOAES base address */ +#else +#define RADIOAES_BASE (RADIOAES_NS_BASE) /* RADIOAES base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_RADIOAES_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SMU_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SMU_S) && (SL_TRUSTZONE_PERIPHERAL_SMU_S != 0))) +#define SMU_BASE (SMU_S_BASE) /* SMU base address */ +#else +#define SMU_BASE (SMU_S_BASE) /* SMU base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SMU_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SMU_CFGNS_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SMU_CFGNS_S) && (SL_TRUSTZONE_PERIPHERAL_SMU_CFGNS_S != 0))) +#define SMU_CFGNS_BASE (SMU_S_CFGNS_BASE) /* SMU_CFGNS base address */ +#else +#define SMU_CFGNS_BASE (SMU_NS_CFGNS_BASE) /* SMU_CFGNS base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SMU_CFGNS_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_LETIMER0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_LETIMER0_S) && (SL_TRUSTZONE_PERIPHERAL_LETIMER0_S != 0))) +#define LETIMER0_BASE (LETIMER0_S_BASE) /* LETIMER0 base address */ +#else +#define LETIMER0_BASE (LETIMER0_NS_BASE) /* LETIMER0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_LETIMER0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_IADC0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_IADC0_S) && (SL_TRUSTZONE_PERIPHERAL_IADC0_S != 0))) +#define IADC0_BASE (IADC0_S_BASE) /* IADC0 base address */ +#else +#define IADC0_BASE (IADC0_NS_BASE) /* IADC0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_IADC0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_ACMP0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_ACMP0_S) && (SL_TRUSTZONE_PERIPHERAL_ACMP0_S != 0))) +#define ACMP0_BASE (ACMP0_S_BASE) /* ACMP0 base address */ +#else +#define ACMP0_BASE (ACMP0_NS_BASE) /* ACMP0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_ACMP0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_ACMP1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_ACMP1_S) && (SL_TRUSTZONE_PERIPHERAL_ACMP1_S != 0))) +#define ACMP1_BASE (ACMP1_S_BASE) /* ACMP1 base address */ +#else +#define ACMP1_BASE (ACMP1_NS_BASE) /* ACMP1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_ACMP1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_VDAC0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_VDAC0_S) && (SL_TRUSTZONE_PERIPHERAL_VDAC0_S != 0))) +#define VDAC0_BASE (VDAC0_S_BASE) /* VDAC0 base address */ +#else +#define VDAC0_BASE (VDAC0_NS_BASE) /* VDAC0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_VDAC0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_VDAC1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_VDAC1_S) && (SL_TRUSTZONE_PERIPHERAL_VDAC1_S != 0))) +#define VDAC1_BASE (VDAC1_S_BASE) /* VDAC1 base address */ +#else +#define VDAC1_BASE (VDAC1_NS_BASE) /* VDAC1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_VDAC1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_PCNT0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_PCNT0_S) && (SL_TRUSTZONE_PERIPHERAL_PCNT0_S != 0))) +#define PCNT0_BASE (PCNT0_S_BASE) /* PCNT0 base address */ +#else +#define PCNT0_BASE (PCNT0_NS_BASE) /* PCNT0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_PCNT0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_HFRCOEM23_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_HFRCOEM23_S) && (SL_TRUSTZONE_PERIPHERAL_HFRCOEM23_S != 0))) +#define HFRCOEM23_BASE (HFRCOEM23_S_BASE) /* HFRCOEM23 base address */ +#else +#define HFRCOEM23_BASE (HFRCOEM23_NS_BASE) /* HFRCOEM23 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_HFRCOEM23_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_HFXO0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_HFXO0_S) && (SL_TRUSTZONE_PERIPHERAL_HFXO0_S != 0))) +#define HFXO0_BASE (HFXO0_S_BASE) /* HFXO0 base address */ +#else +#define HFXO0_BASE (HFXO0_NS_BASE) /* HFXO0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_HFXO0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_I2C0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_I2C0_S) && (SL_TRUSTZONE_PERIPHERAL_I2C0_S != 0))) +#define I2C0_BASE (I2C0_S_BASE) /* I2C0 base address */ +#else +#define I2C0_BASE (I2C0_NS_BASE) /* I2C0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_I2C0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_WDOG0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_WDOG0_S) && (SL_TRUSTZONE_PERIPHERAL_WDOG0_S != 0))) +#define WDOG0_BASE (WDOG0_S_BASE) /* WDOG0 base address */ +#else +#define WDOG0_BASE (WDOG0_NS_BASE) /* WDOG0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_WDOG0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_WDOG1_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_WDOG1_S) && (SL_TRUSTZONE_PERIPHERAL_WDOG1_S != 0))) +#define WDOG1_BASE (WDOG1_S_BASE) /* WDOG1 base address */ +#else +#define WDOG1_BASE (WDOG1_NS_BASE) /* WDOG1 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_WDOG1_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_EUSART0_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_EUSART0_S) && (SL_TRUSTZONE_PERIPHERAL_EUSART0_S != 0))) +#define EUSART0_BASE (EUSART0_S_BASE) /* EUSART0 base address */ +#else +#define EUSART0_BASE (EUSART0_NS_BASE) /* EUSART0 base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_EUSART0_S +#if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_SEMAILBOX_HOST_S)) || (defined(SL_TRUSTZONE_PERIPHERAL_SEMAILBOX_HOST_S) && (SL_TRUSTZONE_PERIPHERAL_SEMAILBOX_HOST_S != 0))) +#define SEMAILBOX_HOST_BASE (SEMAILBOX_S_HOST_BASE) /* SEMAILBOX_HOST base address */ +#else +#define SEMAILBOX_HOST_BASE (SEMAILBOX_S_HOST_BASE) /* SEMAILBOX_HOST base address */ +#endif // SL_TRUSTZONE_PERIPHERAL_SEMAILBOX_HOST_S + +#define DEVINFO_BASE (0x0FE08000UL) /* DEVINFO base address */ +/** @} End of group EFR32BG24B410F1536IJ42_Peripheral_Base */ + +/**************************************************************************//** +* @defgroup EFR32BG24B410F1536IJ42_Peripheral_Declaration EFR32BG24B410F1536IJ42 Peripheral Declarations Map +* @{ +*****************************************************************************/ + +#define SCRATCHPAD_S ((SCRATCHPAD_TypeDef *) SCRATCHPAD_S_BASE) /**< SCRATCHPAD_S base pointer */ +#define EMU_S ((EMU_TypeDef *) EMU_S_BASE) /**< EMU_S base pointer */ +#define CMU_S ((CMU_TypeDef *) CMU_S_BASE) /**< CMU_S base pointer */ +#define HFRCO0_S ((HFRCO_TypeDef *) HFRCO0_S_BASE) /**< HFRCO0_S base pointer */ +#define FSRCO_S ((FSRCO_TypeDef *) FSRCO_S_BASE) /**< FSRCO_S base pointer */ +#define DPLL0_S ((DPLL_TypeDef *) DPLL0_S_BASE) /**< DPLL0_S base pointer */ +#define LFXO_S ((LFXO_TypeDef *) LFXO_S_BASE) /**< LFXO_S base pointer */ +#define LFRCO_S ((LFRCO_TypeDef *) LFRCO_S_BASE) /**< LFRCO_S base pointer */ +#define ULFRCO_S ((ULFRCO_TypeDef *) ULFRCO_S_BASE) /**< ULFRCO_S base pointer */ +#define MSC_S ((MSC_TypeDef *) MSC_S_BASE) /**< MSC_S base pointer */ +#define ICACHE0_S ((ICACHE_TypeDef *) ICACHE0_S_BASE) /**< ICACHE0_S base pointer */ +#define PRS_S ((PRS_TypeDef *) PRS_S_BASE) /**< PRS_S base pointer */ +#define GPIO_S ((GPIO_TypeDef *) GPIO_S_BASE) /**< GPIO_S base pointer */ +#define LDMA_S ((LDMA_TypeDef *) LDMA_S_BASE) /**< LDMA_S base pointer */ +#define LDMAXBAR_S ((LDMAXBAR_TypeDef *) LDMAXBAR_S_BASE) /**< LDMAXBAR_S base pointer */ +#define TIMER0_S ((TIMER_TypeDef *) TIMER0_S_BASE) /**< TIMER0_S base pointer */ +#define TIMER1_S ((TIMER_TypeDef *) TIMER1_S_BASE) /**< TIMER1_S base pointer */ +#define TIMER2_S ((TIMER_TypeDef *) TIMER2_S_BASE) /**< TIMER2_S base pointer */ +#define TIMER3_S ((TIMER_TypeDef *) TIMER3_S_BASE) /**< TIMER3_S base pointer */ +#define TIMER4_S ((TIMER_TypeDef *) TIMER4_S_BASE) /**< TIMER4_S base pointer */ +#define USART0_S ((USART_TypeDef *) USART0_S_BASE) /**< USART0_S base pointer */ +#define BURTC_S ((BURTC_TypeDef *) BURTC_S_BASE) /**< BURTC_S base pointer */ +#define I2C1_S ((I2C_TypeDef *) I2C1_S_BASE) /**< I2C1_S base pointer */ +#define SYSCFG_S_CFGNS ((SYSCFG_CFGNS_TypeDef *) SYSCFG_S_CFGNS_BASE) /**< SYSCFG_S_CFGNS base pointer */ +#define SYSCFG_S ((SYSCFG_TypeDef *) SYSCFG_S_BASE) /**< SYSCFG_S base pointer */ +#define BURAM_S ((BURAM_TypeDef *) BURAM_S_BASE) /**< BURAM_S base pointer */ +#define GPCRC_S ((GPCRC_TypeDef *) GPCRC_S_BASE) /**< GPCRC_S base pointer */ +#define DCDC_S ((DCDC_TypeDef *) DCDC_S_BASE) /**< DCDC_S base pointer */ +#define HOSTMAILBOX_S ((MAILBOX_TypeDef *) HOSTMAILBOX_S_BASE) /**< HOSTMAILBOX_S base pointer */ +#define EUSART1_S ((EUSART_TypeDef *) EUSART1_S_BASE) /**< EUSART1_S base pointer */ +#define SYSRTC0_S ((SYSRTC_TypeDef *) SYSRTC0_S_BASE) /**< SYSRTC0_S base pointer */ +#define KEYSCAN_S ((KEYSCAN_TypeDef *) KEYSCAN_S_BASE) /**< KEYSCAN_S base pointer */ +#define DMEM_S ((MPAHBRAM_TypeDef *) DMEM_S_BASE) /**< DMEM_S base pointer */ +#define RADIOAES_S ((AES_TypeDef *) RADIOAES_S_BASE) /**< RADIOAES_S base pointer */ +#define SMU_S ((SMU_TypeDef *) SMU_S_BASE) /**< SMU_S base pointer */ +#define SMU_S_CFGNS ((SMU_CFGNS_TypeDef *) SMU_S_CFGNS_BASE) /**< SMU_S_CFGNS base pointer */ +#define LETIMER0_S ((LETIMER_TypeDef *) LETIMER0_S_BASE) /**< LETIMER0_S base pointer */ +#define IADC0_S ((IADC_TypeDef *) IADC0_S_BASE) /**< IADC0_S base pointer */ +#define ACMP0_S ((ACMP_TypeDef *) ACMP0_S_BASE) /**< ACMP0_S base pointer */ +#define ACMP1_S ((ACMP_TypeDef *) ACMP1_S_BASE) /**< ACMP1_S base pointer */ +#define VDAC0_S ((VDAC_TypeDef *) VDAC0_S_BASE) /**< VDAC0_S base pointer */ +#define VDAC1_S ((VDAC_TypeDef *) VDAC1_S_BASE) /**< VDAC1_S base pointer */ +#define PCNT0_S ((PCNT_TypeDef *) PCNT0_S_BASE) /**< PCNT0_S base pointer */ +#define HFRCOEM23_S ((HFRCO_TypeDef *) HFRCOEM23_S_BASE) /**< HFRCOEM23_S base pointer */ +#define HFXO0_S ((HFXO_TypeDef *) HFXO0_S_BASE) /**< HFXO0_S base pointer */ +#define I2C0_S ((I2C_TypeDef *) I2C0_S_BASE) /**< I2C0_S base pointer */ +#define WDOG0_S ((WDOG_TypeDef *) WDOG0_S_BASE) /**< WDOG0_S base pointer */ +#define WDOG1_S ((WDOG_TypeDef *) WDOG1_S_BASE) /**< WDOG1_S base pointer */ +#define EUSART0_S ((EUSART_TypeDef *) EUSART0_S_BASE) /**< EUSART0_S base pointer */ +#define SEMAILBOX_S_HOST ((SEMAILBOX_HOST_TypeDef *) SEMAILBOX_S_HOST_BASE) /**< SEMAILBOX_S_HOST base pointer */ + +#define SCRATCHPAD_NS ((SCRATCHPAD_TypeDef *) SCRATCHPAD_NS_BASE) /**< SCRATCHPAD_NS base pointer */ +#define EMU_NS ((EMU_TypeDef *) EMU_NS_BASE) /**< EMU_NS base pointer */ +#define CMU_NS ((CMU_TypeDef *) CMU_NS_BASE) /**< CMU_NS base pointer */ +#define HFRCO0_NS ((HFRCO_TypeDef *) HFRCO0_NS_BASE) /**< HFRCO0_NS base pointer */ +#define FSRCO_NS ((FSRCO_TypeDef *) FSRCO_NS_BASE) /**< FSRCO_NS base pointer */ +#define DPLL0_NS ((DPLL_TypeDef *) DPLL0_NS_BASE) /**< DPLL0_NS base pointer */ +#define LFXO_NS ((LFXO_TypeDef *) LFXO_NS_BASE) /**< LFXO_NS base pointer */ +#define LFRCO_NS ((LFRCO_TypeDef *) LFRCO_NS_BASE) /**< LFRCO_NS base pointer */ +#define ULFRCO_NS ((ULFRCO_TypeDef *) ULFRCO_NS_BASE) /**< ULFRCO_NS base pointer */ +#define MSC_NS ((MSC_TypeDef *) MSC_NS_BASE) /**< MSC_NS base pointer */ +#define ICACHE0_NS ((ICACHE_TypeDef *) ICACHE0_NS_BASE) /**< ICACHE0_NS base pointer */ +#define PRS_NS ((PRS_TypeDef *) PRS_NS_BASE) /**< PRS_NS base pointer */ +#define GPIO_NS ((GPIO_TypeDef *) GPIO_NS_BASE) /**< GPIO_NS base pointer */ +#define LDMA_NS ((LDMA_TypeDef *) LDMA_NS_BASE) /**< LDMA_NS base pointer */ +#define LDMAXBAR_NS ((LDMAXBAR_TypeDef *) LDMAXBAR_NS_BASE) /**< LDMAXBAR_NS base pointer */ +#define TIMER0_NS ((TIMER_TypeDef *) TIMER0_NS_BASE) /**< TIMER0_NS base pointer */ +#define TIMER1_NS ((TIMER_TypeDef *) TIMER1_NS_BASE) /**< TIMER1_NS base pointer */ +#define TIMER2_NS ((TIMER_TypeDef *) TIMER2_NS_BASE) /**< TIMER2_NS base pointer */ +#define TIMER3_NS ((TIMER_TypeDef *) TIMER3_NS_BASE) /**< TIMER3_NS base pointer */ +#define TIMER4_NS ((TIMER_TypeDef *) TIMER4_NS_BASE) /**< TIMER4_NS base pointer */ +#define USART0_NS ((USART_TypeDef *) USART0_NS_BASE) /**< USART0_NS base pointer */ +#define BURTC_NS ((BURTC_TypeDef *) BURTC_NS_BASE) /**< BURTC_NS base pointer */ +#define I2C1_NS ((I2C_TypeDef *) I2C1_NS_BASE) /**< I2C1_NS base pointer */ +#define SYSCFG_NS_CFGNS ((SYSCFG_CFGNS_TypeDef *) SYSCFG_NS_CFGNS_BASE) /**< SYSCFG_NS_CFGNS base pointer */ +#define SYSCFG_NS ((SYSCFG_TypeDef *) SYSCFG_NS_BASE) /**< SYSCFG_NS base pointer */ +#define BURAM_NS ((BURAM_TypeDef *) BURAM_NS_BASE) /**< BURAM_NS base pointer */ +#define GPCRC_NS ((GPCRC_TypeDef *) GPCRC_NS_BASE) /**< GPCRC_NS base pointer */ +#define DCDC_NS ((DCDC_TypeDef *) DCDC_NS_BASE) /**< DCDC_NS base pointer */ +#define HOSTMAILBOX_NS ((MAILBOX_TypeDef *) HOSTMAILBOX_NS_BASE) /**< HOSTMAILBOX_NS base pointer */ +#define EUSART1_NS ((EUSART_TypeDef *) EUSART1_NS_BASE) /**< EUSART1_NS base pointer */ +#define SYSRTC0_NS ((SYSRTC_TypeDef *) SYSRTC0_NS_BASE) /**< SYSRTC0_NS base pointer */ +#define KEYSCAN_NS ((KEYSCAN_TypeDef *) KEYSCAN_NS_BASE) /**< KEYSCAN_NS base pointer */ +#define DMEM_NS ((MPAHBRAM_TypeDef *) DMEM_NS_BASE) /**< DMEM_NS base pointer */ +#define RADIOAES_NS ((AES_TypeDef *) RADIOAES_NS_BASE) /**< RADIOAES_NS base pointer */ +#define SMU_NS ((SMU_TypeDef *) SMU_NS_BASE) /**< SMU_NS base pointer */ +#define SMU_NS_CFGNS ((SMU_CFGNS_TypeDef *) SMU_NS_CFGNS_BASE) /**< SMU_NS_CFGNS base pointer */ +#define LETIMER0_NS ((LETIMER_TypeDef *) LETIMER0_NS_BASE) /**< LETIMER0_NS base pointer */ +#define IADC0_NS ((IADC_TypeDef *) IADC0_NS_BASE) /**< IADC0_NS base pointer */ +#define ACMP0_NS ((ACMP_TypeDef *) ACMP0_NS_BASE) /**< ACMP0_NS base pointer */ +#define ACMP1_NS ((ACMP_TypeDef *) ACMP1_NS_BASE) /**< ACMP1_NS base pointer */ +#define VDAC0_NS ((VDAC_TypeDef *) VDAC0_NS_BASE) /**< VDAC0_NS base pointer */ +#define VDAC1_NS ((VDAC_TypeDef *) VDAC1_NS_BASE) /**< VDAC1_NS base pointer */ +#define PCNT0_NS ((PCNT_TypeDef *) PCNT0_NS_BASE) /**< PCNT0_NS base pointer */ +#define HFRCOEM23_NS ((HFRCO_TypeDef *) HFRCOEM23_NS_BASE) /**< HFRCOEM23_NS base pointer */ +#define HFXO0_NS ((HFXO_TypeDef *) HFXO0_NS_BASE) /**< HFXO0_NS base pointer */ +#define I2C0_NS ((I2C_TypeDef *) I2C0_NS_BASE) /**< I2C0_NS base pointer */ +#define WDOG0_NS ((WDOG_TypeDef *) WDOG0_NS_BASE) /**< WDOG0_NS base pointer */ +#define WDOG1_NS ((WDOG_TypeDef *) WDOG1_NS_BASE) /**< WDOG1_NS base pointer */ +#define EUSART0_NS ((EUSART_TypeDef *) EUSART0_NS_BASE) /**< EUSART0_NS base pointer */ +#define SEMAILBOX_NS_HOST ((SEMAILBOX_HOST_TypeDef *) SEMAILBOX_NS_HOST_BASE) /**< SEMAILBOX_NS_HOST base pointer */ + + +#define SCRATCHPAD ((SCRATCHPAD_TypeDef *) SCRATCHPAD_BASE) /**< SCRATCHPAD base pointer */ +#define EMU ((EMU_TypeDef *) EMU_BASE) /**< EMU base pointer */ +#define CMU ((CMU_TypeDef *) CMU_BASE) /**< CMU base pointer */ +#define HFRCO0 ((HFRCO_TypeDef *) HFRCO0_BASE) /**< HFRCO0 base pointer */ +#define FSRCO ((FSRCO_TypeDef *) FSRCO_BASE) /**< FSRCO base pointer */ +#define DPLL0 ((DPLL_TypeDef *) DPLL0_BASE) /**< DPLL0 base pointer */ +#define LFXO ((LFXO_TypeDef *) LFXO_BASE) /**< LFXO base pointer */ +#define LFRCO ((LFRCO_TypeDef *) LFRCO_BASE) /**< LFRCO base pointer */ +#define ULFRCO ((ULFRCO_TypeDef *) ULFRCO_BASE) /**< ULFRCO base pointer */ +#define MSC ((MSC_TypeDef *) MSC_BASE) /**< MSC base pointer */ +#define ICACHE0 ((ICACHE_TypeDef *) ICACHE0_BASE) /**< ICACHE0 base pointer */ +#define PRS ((PRS_TypeDef *) PRS_BASE) /**< PRS base pointer */ +#define GPIO ((GPIO_TypeDef *) GPIO_BASE) /**< GPIO base pointer */ +#define LDMA ((LDMA_TypeDef *) LDMA_BASE) /**< LDMA base pointer */ +#define LDMAXBAR ((LDMAXBAR_TypeDef *) LDMAXBAR_BASE) /**< LDMAXBAR base pointer */ +#define TIMER0 ((TIMER_TypeDef *) TIMER0_BASE) /**< TIMER0 base pointer */ +#define TIMER1 ((TIMER_TypeDef *) TIMER1_BASE) /**< TIMER1 base pointer */ +#define TIMER2 ((TIMER_TypeDef *) TIMER2_BASE) /**< TIMER2 base pointer */ +#define TIMER3 ((TIMER_TypeDef *) TIMER3_BASE) /**< TIMER3 base pointer */ +#define TIMER4 ((TIMER_TypeDef *) TIMER4_BASE) /**< TIMER4 base pointer */ +#define USART0 ((USART_TypeDef *) USART0_BASE) /**< USART0 base pointer */ +#define BURTC ((BURTC_TypeDef *) BURTC_BASE) /**< BURTC base pointer */ +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) /**< I2C1 base pointer */ +#define SYSCFG_CFGNS ((SYSCFG_CFGNS_TypeDef *) SYSCFG_CFGNS_BASE) /**< SYSCFG_CFGNS base pointer */ +#define SYSCFG ((SYSCFG_TypeDef *) SYSCFG_BASE) /**< SYSCFG base pointer */ +#define BURAM ((BURAM_TypeDef *) BURAM_BASE) /**< BURAM base pointer */ +#define GPCRC ((GPCRC_TypeDef *) GPCRC_BASE) /**< GPCRC base pointer */ +#define DCDC ((DCDC_TypeDef *) DCDC_BASE) /**< DCDC base pointer */ +#define HOSTMAILBOX ((MAILBOX_TypeDef *) HOSTMAILBOX_BASE) /**< HOSTMAILBOX base pointer */ +#define EUSART1 ((EUSART_TypeDef *) EUSART1_BASE) /**< EUSART1 base pointer */ +#define SYSRTC0 ((SYSRTC_TypeDef *) SYSRTC0_BASE) /**< SYSRTC0 base pointer */ +#define KEYSCAN ((KEYSCAN_TypeDef *) KEYSCAN_BASE) /**< KEYSCAN base pointer */ +#define DMEM ((MPAHBRAM_TypeDef *) DMEM_BASE) /**< DMEM base pointer */ +#define RADIOAES ((AES_TypeDef *) RADIOAES_BASE) /**< RADIOAES base pointer */ +#define SMU ((SMU_TypeDef *) SMU_BASE) /**< SMU base pointer */ +#define SMU_CFGNS ((SMU_CFGNS_TypeDef *) SMU_CFGNS_BASE) /**< SMU_CFGNS base pointer */ +#define LETIMER0 ((LETIMER_TypeDef *) LETIMER0_BASE) /**< LETIMER0 base pointer */ +#define IADC0 ((IADC_TypeDef *) IADC0_BASE) /**< IADC0 base pointer */ +#define ACMP0 ((ACMP_TypeDef *) ACMP0_BASE) /**< ACMP0 base pointer */ +#define ACMP1 ((ACMP_TypeDef *) ACMP1_BASE) /**< ACMP1 base pointer */ +#define VDAC0 ((VDAC_TypeDef *) VDAC0_BASE) /**< VDAC0 base pointer */ +#define VDAC1 ((VDAC_TypeDef *) VDAC1_BASE) /**< VDAC1 base pointer */ +#define PCNT0 ((PCNT_TypeDef *) PCNT0_BASE) /**< PCNT0 base pointer */ +#define HFRCOEM23 ((HFRCO_TypeDef *) HFRCOEM23_BASE) /**< HFRCOEM23 base pointer */ +#define HFXO0 ((HFXO_TypeDef *) HFXO0_BASE) /**< HFXO0 base pointer */ +#define I2C0 ((I2C_TypeDef *) I2C0_BASE) /**< I2C0 base pointer */ +#define WDOG0 ((WDOG_TypeDef *) WDOG0_BASE) /**< WDOG0 base pointer */ +#define WDOG1 ((WDOG_TypeDef *) WDOG1_BASE) /**< WDOG1 base pointer */ +#define EUSART0 ((EUSART_TypeDef *) EUSART0_BASE) /**< EUSART0 base pointer */ +#define SEMAILBOX_HOST ((SEMAILBOX_HOST_TypeDef *) SEMAILBOX_HOST_BASE) /**< SEMAILBOX_HOST base pointer */ + +#define DEVINFO ((DEVINFO_TypeDef *) DEVINFO_BASE) /**< DEVINFO base pointer */ +/** @} End of group EFR32BG24B410F1536IJ42_Peripheral_Declaration */ + +/**************************************************************************//** + * @defgroup EFR32BG24B410F1536IJ42_Peripheral_Parameters EFR32BG24B410F1536IJ42 Peripheral Parameters + * @{ + * @brief Device peripheral parameter values + *****************************************************************************/ + +/* Common peripheral register block offsets. */ +#define PER_REG_BLOCK_SET_OFFSET 0x1000UL /**< Offset to SET register block */ +#define PER_REG_BLOCK_CLR_OFFSET 0x2000UL /**< Offset to CLEAR register block */ +#define PER_REG_BLOCK_TGL_OFFSET 0x3000UL /**< Offset to TOGGLE register block */ + +#define DMEM_AHB_DATA_WIDTH 0x20UL /**> Data width of the AHB interface */ +#define DMEM_BANK0_SIZE 0x4000UL /**> Bank0 size */ +#define DMEM_BANK10_SIZE 0x4000UL /**> Bank10 size */ +#define DMEM_BANK11_SIZE 0x4000UL /**> Bank11 size */ +#define DMEM_BANK12_SIZE 0x4000UL /**> Bank12 size */ +#define DMEM_BANK13_SIZE 0x4000UL /**> Bank13 size */ +#define DMEM_BANK14_SIZE 0x4000UL /**> Bank14 size */ +#define DMEM_BANK15_SIZE 0x4000UL /**> Bank15 size */ +#define DMEM_BANK16_SIZE 0x0UL /**> Bank16 size */ +#define DMEM_BANK17_SIZE 0x0UL /**> Bank17 size */ +#define DMEM_BANK18_SIZE 0x0UL /**> Bank18 size */ +#define DMEM_BANK19_SIZE 0x0UL /**> Bank19 size */ +#define DMEM_BANK1_SIZE 0x4000UL /**> Bank1 size */ +#define DMEM_BANK20_SIZE 0x0UL /**> Bank20 size */ +#define DMEM_BANK21_SIZE 0x0UL /**> Bank21 size */ +#define DMEM_BANK22_SIZE 0x0UL /**> Bank22 size */ +#define DMEM_BANK23_SIZE 0x0UL /**> Bank23 size */ +#define DMEM_BANK24_SIZE 0x0UL /**> Bank24 size */ +#define DMEM_BANK25_SIZE 0x0UL /**> Bank25 size */ +#define DMEM_BANK26_SIZE 0x0UL /**> Bank26 size */ +#define DMEM_BANK27_SIZE 0x0UL /**> Bank27 size */ +#define DMEM_BANK28_SIZE 0x0UL /**> Bank28 size */ +#define DMEM_BANK29_SIZE 0x0UL /**> Bank29 size */ +#define DMEM_BANK2_SIZE 0x4000UL /**> Bank2 size */ +#define DMEM_BANK30_SIZE 0x0UL /**> Bank30 size */ +#define DMEM_BANK31_SIZE 0x0UL /**> Bank31 size */ +#define DMEM_BANK3_SIZE 0x4000UL /**> Bank3 size */ +#define DMEM_BANK4_SIZE 0x4000UL /**> Bank4 size */ +#define DMEM_BANK5_SIZE 0x4000UL /**> Bank5 size */ +#define DMEM_BANK6_SIZE 0x4000UL /**> Bank6 size */ +#define DMEM_BANK7_SIZE 0x4000UL /**> Bank7 size */ +#define DMEM_BANK8_SIZE 0x4000UL /**> Bank8 size */ +#define DMEM_BANK9_SIZE 0x4000UL /**> Bank9 size */ +#define DMEM_ECC_EXCLUDE 0x0UL /**> ECC exclude */ +#define DMEM_MEM_SIZE 0x40000UL /**> Total memory size */ +#define DMEM_NUM_BANKS 0x10UL /**> Number of physical SRAM banks */ +#define DMEM_NUM_PORTS 0x4UL /**> Number of AHB slave ports */ +#define DMEM_NUM_PORTS_IS_2 0x0UL /**> Boolean indicating if NUM_PORTS=2 */ +#define DMEM_WAITSTATE_EXCLUDE 0x0UL /**> Waitstate exclude */ + +#define CMU_EXCLUDELCD 0x1UL /**> Exclude LCD */ +#define CMU_EXCLUDELESENSE 0x1UL /**> Exclude LESENSE */ + +#define HFRCO0_EM23ONDEMAND 0x0UL /**> EM23 On Demand */ +#define HFRCO0_EXCLUDEEM23ONDEMAND 0x1UL /**> Exclude EM23 On Demand */ + +#define LFXO_NO_CTUNE 0x0UL /**> CTUNE Not Present */ +#define LFXO_CTUNE 0x1UL /**> CTUNE Present */ + +#define MSC_CDA_PRESENT 0x0UL /**> */ +#define MSC_FDIO_WIDTH 0x40UL /**> None */ +#define MSC_FLASHADDRBITS 0x15UL /**> None */ +#define MSC_FLASHBLOCKADDRBITS 0x15UL /**> None */ +#define MSC_FLASH_BLOCK_INFO_PCOUNT 0x2UL /**> None */ +#define MSC_FLASH_BLOCK_MAIN_PCOUNT 0xD0UL /**> */ +#define MSC_INFOADDRBITS 0xEUL /**> None */ +#define MSC_INFOBLOCKADDRBITS 0xEUL /**> None */ +#define MSC_INFO_PSIZE_BITS 0xDUL /**> None */ +#define MSC_MAIN_PSIZE_BITS 0xDUL /**> None */ +#define MSC_REDUNDANCY 0x2UL /**> None */ +#define MSC_ROOTMAIN_PRESENT 0x1UL /**> */ +#define MSC_UD_PRESENT 0x1UL /**> */ +#define MSC_YADDRBITS 0x6UL /**> */ + +#define ICACHE0_AHB_LITE 0x0UL /**> AHB Lite */ +#define ICACHE0_CACHEABLE_SIZE 0x180000UL /**> Cache Size */ +#define ICACHE0_CACHEABLE_START 0x8000000UL /**> Cache Start */ +#define ICACHE0_DEFAULT_OFF 0x0UL /**> Default off */ +#define ICACHE0_FLASH_SIZE 0x180000UL /**> Flash size */ +#define ICACHE0_FLASH_START 0x8000000UL /**> Flash start */ +#define ICACHE0_LOOPCACHE_MEM_ADDR_BITS 0x3UL /**> Loopcache Memory Address bits */ +#define ICACHE0_LOOPCACHE_STICKINESS_BITS 0x4UL /**> Loopcache Stickiness bits */ +#define ICACHE0_PARITY_BITS 0x1UL /**> Use Parity */ +#define ICACHE0_PC_BITS 0x20UL /**> Performance Counter bits */ +#define ICACHE0_PIPE_STAGE 0x1UL /**> Pipeline Stage */ +#define ICACHE0_RAM_ADDR_BITS 0x0UL /**> RAM Address bits */ +#define ICACHE0_RAM_DATA_BITS 0x0UL /**> RAM Data bits */ +#define ICACHE0_SET_BITS 0x7UL /**> Set bits */ +#define ICACHE0_USE_HREADY_GATING 0x1UL /**> Use HREADY gating */ +#define ICACHE0_USE_IDLE_GATING 0x1UL /**> Use IDLE gating */ +#define ICACHE0_USE_LOOPCACHE 0x1UL /**> Use Loopcache */ +#define ICACHE0_WAY_BITS 0x1UL /**> Way bits */ +#define ICACHE0_WORDS_PER_BLOCK 0x0UL /**> Words Per Block */ +#define ICACHE0_WPB_BITS 0x1UL /**> Words Per Block bits */ +#define ICACHE0_WPL_BITS 0x3UL /**> Words Per Line bits */ + +#define PRS_ASYNC_CH_NUM 0x10UL /**> None */ +#define PRS_PRSSEL_WIDTH 0x4UL /**> New Param */ +#define PRS_SPRSSEL_WIDTH 0x2UL /**> New Param */ +#define PRS_SYNC_CH_NUM 0x4UL /**> None */ + +#define GPIO_MODE_WIDTH 0x4UL /**> Mode Width */ +#define GPIO_NUM_EM4_WU 0xCUL /**> New Param */ +#define GPIO_NUM_EVEN_PA 0x5UL /**> Num of even pins port A */ +#define GPIO_NUM_EVEN_PB 0x3UL /**> Num of even pins port B */ +#define GPIO_NUM_EVEN_PC 0x5UL /**> Num of even pins port C */ +#define GPIO_NUM_EVEN_PD 0x3UL /**> Num of even pins port D */ +#define GPIO_NUM_EXT_INT 0xCUL /**> New Param */ +#define GPIO_NUM_EXT_INT_L 0x8UL /**> New Param */ +#define GPIO_NUM_EXT_INT_U 0x4UL /**> New Param */ +#define GPIO_NUM_EXT_INT_U_ZERO 0x0UL /**> New Param */ +#define GPIO_NUM_ODD_PA 0x5UL /**> Num of odd pins port A */ +#define GPIO_NUM_ODD_PB 0x3UL /**> Num of odd pins port B */ +#define GPIO_NUM_ODD_PC 0x5UL /**> Num of odd pins port C */ +#define GPIO_NUM_ODD_PD 0x3UL /**> Num of odd pins port D */ +#define GPIO_PINSEL_WIDTH 0x4UL /**> Route config pin select width */ +#define GPIO_PORTSEL_WIDTH 0x2UL /**> Route config port select width */ +#define GPIO_PORT_A_WIDTH 0xAUL /**> Port A Width */ +#define GPIO_PORT_A_WIDTH_ZERO 0x0UL /**> Port A Width is Zero */ +#define GPIO_PORT_A_WL 0x8UL /**> New Param */ +#define GPIO_PORT_A_WU 0x2UL /**> New Param */ +#define GPIO_PORT_A_WU_ZERO 0x0UL /**> New Param */ +#define GPIO_PORT_B_WIDTH 0x6UL /**> Port B Width */ +#define GPIO_PORT_B_WIDTH_ZERO 0x0UL /**> Port B Width is Zero */ +#define GPIO_PORT_B_WL 0x6UL /**> New Param */ +#define GPIO_PORT_B_WU 0x0UL /**> New Param */ +#define GPIO_PORT_B_WU_ZERO 0x1UL /**> New Param */ +#define GPIO_PORT_C_WIDTH 0xAUL /**> Port C Width */ +#define GPIO_PORT_C_WIDTH_ZERO 0x0UL /**> Port C Width is Zero */ +#define GPIO_PORT_C_WL 0x8UL /**> New Param */ +#define GPIO_PORT_C_WU 0x2UL /**> New Param */ +#define GPIO_PORT_C_WU_ZERO 0x0UL /**> New Param */ +#define GPIO_PORT_D_WIDTH 0x6UL /**> Port D Width */ +#define GPIO_PORT_D_WIDTH_ZERO 0x0UL /**> Port D Width is Zero */ +#define GPIO_PORT_D_WL 0x6UL /**> New Param */ +#define GPIO_PORT_D_WU 0x0UL /**> New Param */ +#define GPIO_PORT_D_WU_ZERO 0x1UL /**> New Param */ +#define GPIO_SLEWRATE_WIDTH 0x3UL /**> Slew Rate Width Param */ + +#define LDMA_CH_BITS 0x5UL /**> New Param */ +#define LDMA_CH_NUM 0x8UL /**> New Param */ +#define LDMA_FIFO_BITS 0x5UL /**> New Param */ +#define LDMA_FIFO_DEPTH 0x10UL /**> New Param */ + +#define LDMAXBAR_CH_BITS 0x5UL /**> None */ +#define LDMAXBAR_CH_NUM 0x8UL /**> None */ +#define LDMAXBAR_SIGSEL_W 0x4UL /**> New Param */ +#define LDMAXBAR_SOURCESEL_W 0x6UL /**> New Param */ + +#define TIMER0_CC_NUM 0x3UL /**> Number of Compare/Capture Channels */ +#define TIMER0_CNTWIDTH 0x20UL /**> Counter Width */ +#define TIMER0_DTI 0x1UL /**> Dead-time insertion enabled */ +#define TIMER0_DTI_CC_NUM 0x3UL /**> Number of DTI Channels */ +#define TIMER0_NO_DTI 0x0UL /**> */ + +#define TIMER1_CC_NUM 0x3UL /**> Number of Compare/Capture Channels */ +#define TIMER1_CNTWIDTH 0x20UL /**> Counter Width */ +#define TIMER1_DTI 0x1UL /**> Dead-time insertion enabled */ +#define TIMER1_DTI_CC_NUM 0x3UL /**> Number of DTI Channels */ +#define TIMER1_NO_DTI 0x0UL /**> */ + +#define TIMER2_CC_NUM 0x3UL /**> Number of Compare/Capture Channels */ +#define TIMER2_CNTWIDTH 0x10UL /**> Counter Width */ +#define TIMER2_DTI 0x1UL /**> Dead-time insertion enabled */ +#define TIMER2_DTI_CC_NUM 0x3UL /**> Number of DTI Channels */ +#define TIMER2_NO_DTI 0x0UL /**> */ + +#define TIMER3_CC_NUM 0x3UL /**> Number of Compare/Capture Channels */ +#define TIMER3_CNTWIDTH 0x10UL /**> Counter Width */ +#define TIMER3_DTI 0x1UL /**> Dead-time insertion enabled */ +#define TIMER3_DTI_CC_NUM 0x3UL /**> Number of DTI Channels */ +#define TIMER3_NO_DTI 0x0UL /**> */ + +#define TIMER4_CC_NUM 0x3UL /**> Number of Compare/Capture Channels */ +#define TIMER4_CNTWIDTH 0x10UL /**> Counter Width */ +#define TIMER4_DTI 0x1UL /**> Dead-time insertion enabled */ +#define TIMER4_DTI_CC_NUM 0x3UL /**> Number of DTI Channels */ +#define TIMER4_NO_DTI 0x0UL /**> */ + +#define USART0_AUTOTX_REG 0x1UL /**> None */ +#define USART0_AUTOTX_REG_B 0x0UL /**> None */ +#define USART0_AUTOTX_TRIGGER 0x1UL /**> None */ +#define USART0_AUTOTX_TRIGGER_B 0x0UL /**> New Param */ +#define USART0_CLK_PRS 0x1UL /**> None */ +#define USART0_CLK_PRS_B 0x0UL /**> New Param */ +#define USART0_FLOW_CONTROL 0x1UL /**> None */ +#define USART0_FLOW_CONTROL_B 0x0UL /**> New Param */ +#define USART0_I2S 0x1UL /**> None */ +#define USART0_I2S_B 0x0UL /**> New Param */ +#define USART0_IRDA_AVAILABLE 0x1UL /**> None */ +#define USART0_IRDA_AVAILABLE_B 0x0UL /**> New Param */ +#define USART0_MVDIS_FUNC 0x1UL /**> None */ +#define USART0_MVDIS_FUNC_B 0x0UL /**> New Param */ +#define USART0_RX_PRS 0x1UL /**> None */ +#define USART0_RX_PRS_B 0x0UL /**> New Param */ +#define USART0_SC_AVAILABLE 0x1UL /**> None */ +#define USART0_SC_AVAILABLE_B 0x0UL /**> New Param */ +#define USART0_SYNC_AVAILABLE 0x1UL /**> None */ +#define USART0_SYNC_AVAILABLE_B 0x0UL /**> New Param */ +#define USART0_SYNC_LATE_SAMPLE 0x1UL /**> None */ +#define USART0_SYNC_LATE_SAMPLE_B 0x0UL /**> New Param */ +#define USART0_TIMER 0x1UL /**> New Param */ +#define USART0_TIMER_B 0x0UL /**> New Param */ + +#define BURTC_CNTWIDTH 0x20UL /**> None */ +#define BURTC_PRECNT_WIDTH 0xFUL /**> */ + +#define I2C1_DELAY 0x7D0UL /**> Delay cell selection */ +#define I2C1_DELAY_CHAIN_NUM 0x2UL /**> Number of delay chain */ + +#define SYSCFG_CHIP_FAMILY 0x3CUL /**> CHIP Family */ +#define SYSCFG_DEMODRAM_INST_COUNT 0x2UL /**> */ +#define SYSCFG_FRCRAM_INST_COUNT 0x1UL /**> */ +#define SYSCFG_SEQRAM_INST_COUNT 0x2UL /**> None */ +#define SYSCFG_SWINT_NUM 0x4UL /**> Software interupts */ + +#define DCDC_DRVSPEED_WIDTH 0x2UL /**> Drive Speed bitfield width */ +#define DCDC_IPKVAL_WIDTH 0x4UL /**> Peak Current Setting bitfield Width */ +#define DCDC_VCMPIBIAS_WIDTH 0x2UL /**> VCMP ibias bitfield width */ + +#define HOSTMAILBOX_NUM_MSGPTRS 0x4UL /**> */ + +#define EUSART1_EM2_CAPABLE 0x0UL /**> EM2 Capable instance */ +#define EUSART1_NOT_EM2_CAPABLE 0x1UL /**> Not EM2 Capable instance */ + +#define SYSRTC0_GROUP0_ALTIRQDIS 0x1UL /**> Group 0 Alternate IRQ disable */ +#define SYSRTC0_GROUP0_CAPDIS 0x0UL /**> Group 0 Capture disable */ +#define SYSRTC0_GROUP0_CMP1DIS 0x0UL /**> Group 0 Compare1 disable */ +#define SYSRTC0_GROUP0_DIS 0x0UL /**> Group 0 Disable */ +#define SYSRTC0_GROUP0_ROOTDIS 0x1UL /**> Group 0 ROOT disable */ +#define SYSRTC0_GROUP1_ALTIRQDIS 0x0UL /**> Group 1 Alternate IRQ disable */ +#define SYSRTC0_GROUP1_CAPDIS 0x0UL /**> Group 1 Capture disable */ +#define SYSRTC0_GROUP1_CMP1DIS 0x0UL /**> Group 1 Compare1 disable */ +#define SYSRTC0_GROUP1_DIS 0x0UL /**> Group 1 Disable */ +#define SYSRTC0_GROUP1_ROOTDIS 0x1UL /**> Group 1 ROOT disable */ +#define SYSRTC0_GROUP2_ALTIRQDIS 0x1UL /**> Group 2 Alternate IRQ disable */ +#define SYSRTC0_GROUP2_CAPDIS 0x1UL /**> Group 2 Capture disable */ +#define SYSRTC0_GROUP2_CMP1DIS 0x1UL /**> Group 2 Compare1 disable */ +#define SYSRTC0_GROUP2_DIS 0x0UL /**> Group 2 Disable */ +#define SYSRTC0_GROUP2_ROOTDIS 0x0UL /**> Group 2 ROOT disable */ +#define SYSRTC0_GROUP3_ALTIRQDIS 0x1UL /**> Group 3 Alternate IRQ disable */ +#define SYSRTC0_GROUP3_CAPDIS 0x1UL /**> Group 3 Capture disable */ +#define SYSRTC0_GROUP3_CMP1DIS 0x1UL /**> Group 3 Compare1 disable */ +#define SYSRTC0_GROUP3_DIS 0x1UL /**> Group 3 Disable */ +#define SYSRTC0_GROUP3_ROOTDIS 0x1UL /**> Group 3 ROOT disable */ +#define SYSRTC0_GROUP4_ALTIRQDIS 0x1UL /**> Group 4 Alternate IRQ disable */ +#define SYSRTC0_GROUP4_CAPDIS 0x1UL /**> Group 4 Capture disable */ +#define SYSRTC0_GROUP4_CMP1DIS 0x1UL /**> Group 4 Compare1 disable */ +#define SYSRTC0_GROUP4_DIS 0x1UL /**> Group 4 Disable */ +#define SYSRTC0_GROUP4_ROOTDIS 0x1UL /**> Group 4 ROOT disable */ +#define SYSRTC0_GROUP5_ALTIRQDIS 0x1UL /**> Group 5 Alternate IRQ disable */ +#define SYSRTC0_GROUP5_CAPDIS 0x1UL /**> Group 5 Capture disable */ +#define SYSRTC0_GROUP5_CMP1DIS 0x1UL /**> Group 5 Compare1 disable */ +#define SYSRTC0_GROUP5_DIS 0x1UL /**> Group 5 Disable */ +#define SYSRTC0_GROUP5_ROOTDIS 0x1UL /**> Group 5 ROOT disable */ +#define SYSRTC0_GROUP6_ALTIRQDIS 0x1UL /**> Group 6 Alternate IRQ disable */ +#define SYSRTC0_GROUP6_CAPDIS 0x1UL /**> Group 6 Capture disable */ +#define SYSRTC0_GROUP6_CMP1DIS 0x1UL /**> Group 6 Compare1 disable */ +#define SYSRTC0_GROUP6_DIS 0x1UL /**> Group 6 Disable */ +#define SYSRTC0_GROUP6_ROOTDIS 0x1UL /**> Group 6 ROOT disable */ +#define SYSRTC0_GROUP7_ALTIRQDIS 0x1UL /**> Group 7 Alternate IRQ disable */ +#define SYSRTC0_GROUP7_CAPDIS 0x1UL /**> Group 7 Capture disable */ +#define SYSRTC0_GROUP7_CMP1DIS 0x1UL /**> Group 7 Compare1 disable */ +#define SYSRTC0_GROUP7_DIS 0x1UL /**> Group 7 Disable */ +#define SYSRTC0_GROUP7_ROOTDIS 0x1UL /**> Group 7 ROOT disable */ +#define SYSRTC0_ROOTDIS 0x0UL /**> ROOT disable */ + +#define KEYSCAN_COLNUM 0x8UL /**> COLNUM */ +#define KEYSCAN_COLWIDTH 0x3UL /**> COLWIDTH */ +#define KEYSCAN_ROWNUM 0x6UL /**> ROWNUM */ + +#define RADIOAES_SIDECHANNEL_COUNTERMEASURES 0x1UL /**> Enable sidechannel counter measures */ + +#define SMU_NUM_BMPUS 0x9UL /**> Number of BMPUs */ +#define SMU_NUM_PPU_PERIPHS 0x36UL /**> Number of PPU Peripherals */ +#define SMU_NUM_PPU_PERIPHS_MOD_32 0x16UL /**> Number of PPU Peripherals (mod 32) */ +#define SMU_NUM_PPU_PERIPHS_SUB_32 0x16UL /**> Number of PPU peripherals minus 32 */ +#define SMU_PERIPHID_BITS 0x8UL /**> Bits used for Peripheral ID */ + +#define LETIMER0_CNT_WIDTH 0x18UL /**> Count Width */ + +#define IADC0_CONFIGNUM 0x2UL /**> CONFIG */ +#define IADC0_FULLRANGEUNIPOLAR 0x0UL /**> FULLRANGEUNIPOLAR */ +#define IADC0_SCANBYTES 0x1UL /**> SCANBYTES */ +#define IADC0_ENTRIES 0x10UL /**> ENTRIES */ + +#define ACMP0_DAC_INPUT 0x1UL /**> None */ +#define ACMP0_EXT_OVR_IF 0x1UL /**> None */ + +#define ACMP1_DAC_INPUT 0x1UL /**> None */ +#define ACMP1_EXT_OVR_IF 0x1UL /**> None */ + +#define VDAC0_ALT_WIDTH 0x6UL /**> VOUT_AUX Out Width */ +#define VDAC0_CH0_TRIG_LESENSE 0x0UL /**> CH0 Trig Source = LESENSE */ +#define VDAC0_CH1_TRIG_LESENSE 0x0UL /**> CH1 Trig Source = LESENSE */ +#define VDAC0_FIFO_DEPTH 0x4UL /**> WFIFO Depth */ +#define VDAC0_INT_PRESC_WIDTH 0x7UL /**> Internal Prescaler Width */ +#define VDAC0_RESOLUTION 0xCUL /**> DAC Resolution */ + +#define VDAC1_ALT_WIDTH 0x6UL /**> VOUT_AUX Out Width */ +#define VDAC1_CH0_TRIG_LESENSE 0x0UL /**> CH0 Trig Source = LESENSE */ +#define VDAC1_CH1_TRIG_LESENSE 0x0UL /**> CH1 Trig Source = LESENSE */ +#define VDAC1_FIFO_DEPTH 0x4UL /**> WFIFO Depth */ +#define VDAC1_INT_PRESC_WIDTH 0x7UL /**> Internal Prescaler Width */ +#define VDAC1_RESOLUTION 0xCUL /**> DAC Resolution */ + +#define PCNT0_PCNT_WIDTH 0x10UL /**> None */ + +#define HFRCOEM23_EM23ONDEMAND 0x1UL /**> EM23 On Demand */ +#define HFRCOEM23_EXCLUDEEM23ONDEMAND 0x0UL /**> Exclude EM23 On Demand */ + +#define HFXO0_BUFOUT 0x1UL /**> BUFOUT */ +#define HFXO0_EXCLUDEBUFOUT 0x0UL /**> Exclude BUFOUT */ + +#define I2C0_DELAY 0x3E8UL /**> Delay cell selection */ +#define I2C0_DELAY_CHAIN_NUM 0x2UL /**> Number of delay chain */ + +#define WDOG0_PCNUM 0x2UL /**> None */ + +#define WDOG1_PCNUM 0x2UL /**> None */ + +#define EUSART0_EM2_CAPABLE 0x1UL /**> EM2 Capable instance */ +#define EUSART0_NOT_EM2_CAPABLE 0x0UL /**> Not EM2 Capable instance */ + +#define RDMEM_FRC_BANK0_SIZE 0x1000UL /**> FRC_RAM_BANK0_SIZE */ +#define RDMEM_FRC_BANK1_SIZE 0x0UL /**> FRC_RAM_BANK1_SIZE */ +#define RDMEM_FRC_BANK2_SIZE 0x0UL /**> FRC_RAM_BANK2_SIZE */ +#define RDMEM_FRC_BANK3_SIZE 0x0UL /**> FRC_RAM_BANK3_SIZE */ +#define RDMEM_FRC_BANK4_SIZE 0x0UL /**> FRC_RAM_BANK4_SIZE */ +#define RDMEM_FRC_BANK5_SIZE 0x0UL /**> FRC_RAM_BANK5_SIZE */ +#define RDMEM_FRC_BANK6_SIZE 0x0UL /**> FRC_RAM_BANK6_SIZE */ +#define RDMEM_FRC_BANK7_SIZE 0x0UL /**> FRC_RAM_BANK7_SIZE */ +#define RDMEM_FRC_NUM_BANK 0x1UL /**> FRC_NUM_BANK */ +#define RDMEM_FRC_RAMADDRBITS 0xCUL /**> FRC RAM ADDRBITS */ +#define RDMEM_FRC_RAMADDRMINBITS 0xCUL /**> FRC RAM address bits for one bank */ +#define RDMEM_FRC_RAMECCADDR_WIDTH 0x20UL /**> FRC RAM ECC Address width */ +#define RDMEM_FRC_RAM_BWE_WIDTH 0x27UL /**> FRCRAM BWE width */ +#define RDMEM_FRC_RAM_DATA_WIDTH 0x27UL /**> FRC_RAM_DATA_WIDTH */ +#define RDMEM_FRC_RAM_ECC_EN 0x1UL /**> FRC RAM ECCEN */ +#define RDMEM_FRC_RAM_TOTAL_SIZE 0x1000UL /**> FRC_RAM_TOTAL_SIZE */ +#define RDMEM_SEQ_BANK0_SIZE 0x2000UL /**> SEQ_RAM_BANK0_SIZE */ +#define RDMEM_SEQ_BANK1_SIZE 0x2000UL /**> SEQ_RAM_BANK1_SIZE */ +#define RDMEM_SEQ_BANK2_SIZE 0x0UL /**> SEQ_RAM_BANK2_SIZE */ +#define RDMEM_SEQ_BANK3_SIZE 0x0UL /**> SEQ_RAM_BANK3_SIZE */ +#define RDMEM_SEQ_BANK4_SIZE 0x0UL /**> SEQ_RAM_BANK4_SIZE */ +#define RDMEM_SEQ_BANK5_SIZE 0x0UL /**> SEQ_RAM_BANK5_SIZE */ +#define RDMEM_SEQ_BANK6_SIZE 0x0UL /**> SEQ_RAM_BANK6_SIZE */ +#define RDMEM_SEQ_BANK7_SIZE 0x0UL /**> SEQ_RAM_BANK7_SIZE */ +#define RDMEM_SEQ_NUM_BANK 0x2UL /**> SEQ_NUM_BANK */ +#define RDMEM_SEQ_RAMADDRBITS 0xEUL /**> SEQ RAM ADDRBITS */ +#define RDMEM_SEQ_RAMADDRMINBITS 0xDUL /**> SEQ RAM address bits for one bank */ +#define RDMEM_SEQ_RAMECCADDR_WIDTH 0x20UL /**> SEQ RAM ECC Address width */ +#define RDMEM_SEQ_RAM_BWE_WIDTH 0x27UL /**> SEQRAM BWE width */ +#define RDMEM_SEQ_RAM_DATA_WIDTH 0x27UL /**> SEQ_RAM_DATA_WIDTH */ +#define RDMEM_SEQ_RAM_ECC_EN 0x1UL /**> SEQ RAM ECCEN */ +#define RDMEM_SEQ_RAM_TOTAL_SIZE 0x4000UL /**> SEQ_RAM_TOTAL_SIZE */ + +/* Instance macros for ACMP */ +#define ACMP(n) ( ((n)==0) ? ACMP0 :\ + ((n)==1) ? ACMP1 :\ + 0x0UL) +#define ACMP_NUM(ref) ( ((ref)==ACMP0) ? 0 :\ + ((ref)==ACMP1) ? 1 :\ + -1) +#define ACMP_DAC_INPUT(n) ( ((n)==0) ? ACMP0_DAC_INPUT :\ + ((n)==1) ? ACMP1_DAC_INPUT :\ + 0x0UL) +#define ACMP_EXT_OVR_IF(n) ( ((n)==0) ? ACMP0_EXT_OVR_IF :\ + ((n)==1) ? ACMP1_EXT_OVR_IF :\ + 0x0UL) + +/* Instance macros for EUSART */ +#define EUSART(n) ( ((n)==0) ? EUSART0 :\ + ((n)==1) ? EUSART1 :\ + 0x0UL) +#define EUSART_NUM(ref) ( ((ref)==EUSART0) ? 0 :\ + ((ref)==EUSART1) ? 1 :\ + -1) +#define EUSART_EM2_CAPABLE(n) ( ((n)==0) ? EUSART0_EM2_CAPABLE :\ + ((n)==1) ? EUSART1_EM2_CAPABLE :\ + 0x0UL) +#define EUSART_NOT_EM2_CAPABLE(n) ( ((n)==0) ? EUSART0_NOT_EM2_CAPABLE :\ + ((n)==1) ? EUSART1_NOT_EM2_CAPABLE :\ + 0x0UL) + +/* Instance macros for HFRCO */ +#define HFRCO(n) ( ((n)==0) ? HFRCO0 :\ + ((n)==1) ? HFRCOEM23 :\ + 0x0UL) +#define HFRCO_NUM(ref) ( ((ref)==HFRCO0) ? 0 :\ + ((ref)==HFRCOEM23) ? 1 :\ + -1) +#define HFRCO_EM23ONDEMAND(n) ( ((n)==0) ? HFRCO0_EM23ONDEMAND :\ + ((n)==1) ? HFRCOEM23_EM23ONDEMAND :\ + 0x0UL) +#define HFRCO_EXCLUDEEM23ONDEMAND(n) ( ((n)==0) ? HFRCO0_EXCLUDEEM23ONDEMAND :\ + ((n)==1) ? HFRCOEM23_EXCLUDEEM23ONDEMAND :\ + 0x0UL) + +/* Instance macros for I2C */ +#define I2C(n) ( ((n)==0) ? I2C0 :\ + ((n)==1) ? I2C1 :\ + 0x0UL) +#define I2C_NUM(ref) ( ((ref)==I2C0) ? 0 :\ + ((ref)==I2C1) ? 1 :\ + -1) +#define I2C_DELAY(n) ( ((n)==0) ? I2C0_DELAY :\ + ((n)==1) ? I2C1_DELAY :\ + 0x0UL) +#define I2C_DELAY_CHAIN_NUM(n) ( ((n)==0) ? I2C0_DELAY_CHAIN_NUM :\ + ((n)==1) ? I2C1_DELAY_CHAIN_NUM :\ + 0x0UL) + +/* Instance macros for TIMER */ +#define TIMER(n) ( ((n)==0) ? TIMER0 :\ + ((n)==1) ? TIMER1 :\ + ((n)==2) ? TIMER2 :\ + ((n)==3) ? TIMER3 :\ + ((n)==4) ? TIMER4 :\ + 0x0UL) +#define TIMER_NUM(ref) ( ((ref)==TIMER0) ? 0 :\ + ((ref)==TIMER1) ? 1 :\ + ((ref)==TIMER2) ? 2 :\ + ((ref)==TIMER3) ? 3 :\ + ((ref)==TIMER4) ? 4 :\ + -1) +#define TIMER_CC_NUM(n) ( ((n)==0) ? TIMER0_CC_NUM :\ + ((n)==1) ? TIMER1_CC_NUM :\ + ((n)==2) ? TIMER2_CC_NUM :\ + ((n)==3) ? TIMER3_CC_NUM :\ + ((n)==4) ? TIMER4_CC_NUM :\ + 0x0UL) +#define TIMER_CNTWIDTH(n) ( ((n)==0) ? TIMER0_CNTWIDTH :\ + ((n)==1) ? TIMER1_CNTWIDTH :\ + ((n)==2) ? TIMER2_CNTWIDTH :\ + ((n)==3) ? TIMER3_CNTWIDTH :\ + ((n)==4) ? TIMER4_CNTWIDTH :\ + 0x0UL) +#define TIMER_DTI(n) ( ((n)==0) ? TIMER0_DTI :\ + ((n)==1) ? TIMER1_DTI :\ + ((n)==2) ? TIMER2_DTI :\ + ((n)==3) ? TIMER3_DTI :\ + ((n)==4) ? TIMER4_DTI :\ + 0x0UL) +#define TIMER_DTI_CC_NUM(n) ( ((n)==0) ? TIMER0_DTI_CC_NUM :\ + ((n)==1) ? TIMER1_DTI_CC_NUM :\ + ((n)==2) ? TIMER2_DTI_CC_NUM :\ + ((n)==3) ? TIMER3_DTI_CC_NUM :\ + ((n)==4) ? TIMER4_DTI_CC_NUM :\ + 0x0UL) +#define TIMER_NO_DTI(n) ( ((n)==0) ? TIMER0_NO_DTI :\ + ((n)==1) ? TIMER1_NO_DTI :\ + ((n)==2) ? TIMER2_NO_DTI :\ + ((n)==3) ? TIMER3_NO_DTI :\ + ((n)==4) ? TIMER4_NO_DTI :\ + 0x0UL) + +/* Instance macros for VDAC */ +#define VDAC(n) ( ((n)==0) ? VDAC0 :\ + ((n)==1) ? VDAC1 :\ + 0x0UL) +#define VDAC_NUM(ref) ( ((ref)==VDAC0) ? 0 :\ + ((ref)==VDAC1) ? 1 :\ + -1) +#define VDAC_ALT_WIDTH(n) ( ((n)==0) ? VDAC0_ALT_WIDTH :\ + ((n)==1) ? VDAC1_ALT_WIDTH :\ + 0x0UL) +#define VDAC_CH0_TRIG_LESENSE(n) ( ((n)==0) ? VDAC0_CH0_TRIG_LESENSE :\ + ((n)==1) ? VDAC1_CH0_TRIG_LESENSE :\ + 0x0UL) +#define VDAC_CH1_TRIG_LESENSE(n) ( ((n)==0) ? VDAC0_CH1_TRIG_LESENSE :\ + ((n)==1) ? VDAC1_CH1_TRIG_LESENSE :\ + 0x0UL) +#define VDAC_FIFO_DEPTH(n) ( ((n)==0) ? VDAC0_FIFO_DEPTH :\ + ((n)==1) ? VDAC1_FIFO_DEPTH :\ + 0x0UL) +#define VDAC_INT_PRESC_WIDTH(n) ( ((n)==0) ? VDAC0_INT_PRESC_WIDTH :\ + ((n)==1) ? VDAC1_INT_PRESC_WIDTH :\ + 0x0UL) +#define VDAC_RESOLUTION(n) ( ((n)==0) ? VDAC0_RESOLUTION :\ + ((n)==1) ? VDAC1_RESOLUTION :\ + 0x0UL) + +/* Instance macros for WDOG */ +#define WDOG(n) ( ((n)==0) ? WDOG0 :\ + ((n)==1) ? WDOG1 :\ + 0x0UL) +#define WDOG_NUM(ref) ( ((ref)==WDOG0) ? 0 :\ + ((ref)==WDOG1) ? 1 :\ + -1) +#define WDOG_PCNUM(n) ( ((n)==0) ? WDOG0_PCNUM :\ + ((n)==1) ? WDOG1_PCNUM :\ + 0x0UL) + +/** @} End of group EFR32BG24B410F1536IJ42_Peripheral_Parameters */ + + +/** @} End of group EFR32BG24B410F1536IJ42 */ +/** @}} End of group Parts */ + +#ifdef __cplusplus +} +#endif +#endif diff --git a/platform/Device/SiliconLabs/EFR32BG24/Include/em_device.h b/platform/Device/SiliconLabs/EFR32BG24/Include/em_device.h index a7db37b2a1b..5e778b28573 100644 --- a/platform/Device/SiliconLabs/EFR32BG24/Include/em_device.h +++ b/platform/Device/SiliconLabs/EFR32BG24/Include/em_device.h @@ -41,7 +41,10 @@ #ifndef EM_DEVICE_H #define EM_DEVICE_H -#if defined(EFR32BG24A010F1024IM40) +#if defined(EFR32BG24A010F1024GJ42) +#include "efr32bg24a010f1024gj42.h" + +#elif defined(EFR32BG24A010F1024IM40) #include "efr32bg24a010f1024im40.h" #elif defined(EFR32BG24A010F1024IM48) @@ -89,6 +92,9 @@ #elif defined(EFR32BG24B220F1024IM48) #include "efr32bg24b220f1024im48.h" +#elif defined(EFR32BG24B410F1536IJ42) +#include "efr32bg24b410f1536ij42.h" + #elif defined(EFR32BG24B610F1536IM40) #include "efr32bg24b610f1536im40.h" diff --git a/platform/Device/component/efr32bg24a010f1024gj42.slcc b/platform/Device/component/efr32bg24a010f1024gj42.slcc new file mode 100644 index 00000000000..e7c48ff8418 --- /dev/null +++ b/platform/Device/component/efr32bg24a010f1024gj42.slcc @@ -0,0 +1,232 @@ +!!omap +- id: EFR32BG24A010F1024GJ42 +- package: platform +- description: Silicon Labs CMSIS-Device part headers for EFR32BG24A010F1024GJ42. +- category: Platform|Device|EFR32BG24 +- quality: production +- define: + - name: EFR32BG24A010F1024GJ42 + unless: + - device_content_override +- source: + - path: platform/Device/SiliconLabs/EFR32BG24/Source/system_efr32bg24.c + unless: + - device_content_override + - path: platform/Device/SiliconLabs/EFR32BG24/Source/startup_efr32bg24.c + unless: + - device_content_override +- include: + - file_list: + - path: efr32bg24a010f1024gj42.h + - path: efr32bg24_acmp.h + - path: efr32bg24_aes.h + - path: efr32bg24_buram.h + - path: efr32bg24_burtc.h + - path: efr32bg24_cmu.h + - path: efr32bg24_dcdc.h + - path: efr32bg24_devinfo.h + - path: efr32bg24_dma_descriptor.h + - path: efr32bg24_dpll.h + - path: efr32bg24_emu.h + - path: efr32bg24_eusart.h + - path: efr32bg24_fsrco.h + - path: efr32bg24_gpcrc.h + - path: efr32bg24_gpio.h + - path: efr32bg24_gpio_port.h + - path: efr32bg24_hfrco.h + - path: efr32bg24_hfxo.h + - path: efr32bg24_i2c.h + - path: efr32bg24_iadc.h + - path: efr32bg24_icache.h + - path: efr32bg24_keyscan.h + - path: efr32bg24_ldma.h + - path: efr32bg24_ldmaxbar.h + - path: efr32bg24_ldmaxbar_defines.h + - path: efr32bg24_letimer.h + - path: efr32bg24_lfrco.h + - path: efr32bg24_lfxo.h + - path: efr32bg24_mailbox.h + - path: efr32bg24_mpahbram.h + - path: efr32bg24_msc.h + - path: efr32bg24_mvp.h + - path: efr32bg24_pcnt.h + - path: efr32bg24_prs.h + - path: efr32bg24_prs_signals.h + - path: efr32bg24_scratchpad.h + - path: efr32bg24_semailbox.h + - path: efr32bg24_smu.h + - path: efr32bg24_syscfg.h + - path: efr32bg24_sysrtc.h + - path: efr32bg24_timer.h + - path: efr32bg24_ulfrco.h + - path: efr32bg24_usart.h + - path: efr32bg24_vdac.h + - path: efr32bg24_wdog.h + - path: em_device.h + - path: system_efr32bg24.h + path: platform/Device/SiliconLabs/EFR32BG24/Include/ + unless: + - device_content_override +- provides: + - name: efr32bg24a010f1024gj42 + - name: device + - name: device_series_2 + - name: device_sdid_215 + - name: device_generic_family_efr32xg24 + - name: device_family_efr32bg24 + - name: device_cortexm + - name: device_arm + - name: cortexm33 + - name: armv8m.main + - name: device_security_se + - name: device_dcdc_buck/** + - name: device_pa_10dbm + - name: device_pa_0dbm + - name: device_has_acmp + - name: device_has_acmp0 + - name: device_has_acmp1 + - name: device_has_buram + - name: device_has_burtc + - name: device_has_cmu + - name: device_has_dcdc + - name: device_has_devinfo + - name: device_has_dmem + - name: device_has_dpll + - name: device_has_dpll0 + - name: device_has_emu + - name: device_has_euart + - name: device_has_eusart + - name: device_has_eusart0 + - name: device_has_eusart1 + - name: device_has_fsrco + - name: device_has_gpcrc + - name: device_has_gpio + - name: device_has_hfrco + - name: device_has_hfrco0 + - name: device_has_hfrcoem2 + - name: device_has_hfrcoem23 + - name: device_has_hfxo + - name: device_has_hfxo0 + - name: device_has_hostmailbox + - name: device_has_i2c + - name: device_has_i2c0 + - name: device_has_i2c1 + - name: device_has_iadc + - name: device_has_iadc0 + - name: device_has_icache + - name: device_has_icache0 + - name: device_has_keyscan + - name: device_has_ldma + - name: device_has_ldmaxbar + - name: device_has_letimer + - name: device_has_letimer0 + - name: device_has_lfrco + - name: device_has_lfxo + - name: device_has_msc + - name: device_has_pcnt + - name: device_has_pcnt0 + - name: device_has_prs + - name: device_has_radioaes + - name: device_has_scratchpad + - name: device_has_semailbox + - name: device_has_smu + - name: device_has_syscfg + - name: device_has_sysrtc + - name: device_has_sysrtc0 + - name: device_has_timer + - name: device_has_timer0 + - name: device_has_timer1 + - name: device_has_timer2 + - name: device_has_timer3 + - name: device_has_timer4 + - name: device_has_uart + - name: device_has_ulfrco + - name: device_has_usart + - name: device_has_usart0 + - name: device_has_vdac + - name: device_has_vdac0 + - name: device_has_vdac1 + - name: device_has_wdog + - name: device_has_wdog0 + - name: device_has_wdog1 + - name: device_has_dwt + - name: device_has_emu_temp_sensor + - name: device_has_fpu + - name: device_has_mpu + - name: device_has_radio + - name: device_has_radio_2g4hz + - name: device_supports_rail + - name: device_supports_rail_stack + - name: device_supports_bluetooth + - name: device_supports_bluetooth_iq_sampling + - name: device_supports_bluetooth_antenna_switching + - name: device_supports_bluetooth_coded_phy + - name: device_supports_bluetooth_cte + - name: device_supports_connect + - name: device_compute_basic +- recommends: + - id: trustzone_unaware +- requires: + - name: cmsis_core +- template_contribution: + - name: device_opn + value: EFR32BG24A010F1024GJ42 + - name: device_arch + value: armv8m.main + - name: device_cpu + value: cortexm33 + - name: device_series + value: 2 + - name: device_family + value: efr32bg24 + - name: device_flash_addr + value: 134217728 + - name: device_flash_size + value: 1048576 + - name: device_flash_page_size + value: 8192 + - name: device_ram_addr + value: 536870912 + - name: device_ram_size + value: 131072 + - name: device_fpu + value: true + - name: device_mpu + value: true + - name: default_stack_size + value: 4096 + - name: default_heap_size + value: 2048 +- tag: + - device:opn:efr32bg24a010f1024gj42 +- toolchain_settings: + - option: device_opn + value: efr32bg24a010f1024gj42 + - option: architecture + value: armv8-mml + - option: cpu + value: cortex-m33 + - option: fpu + value: fpv5-sp + - option: cmse + unless: + - trustzone_nonsecure + value: enabled +- config_file: + - condition: + - custom_radio_config + directory: rail + path: platform/Device/config/215/device.yaml +- metadata: + device: + memory: + - name: Main Flash + page_size: 8192 + size: 1048576 + start: 134217728 + type: non-volatile + - name: RAM + size: 131072 + start: 536870912 + type: volatile + opn: efr32bg24a010f1024gj42 diff --git a/platform/Device/component/efr32bg24b410f1536ij42.slcc b/platform/Device/component/efr32bg24b410f1536ij42.slcc new file mode 100644 index 00000000000..178eaeb4a35 --- /dev/null +++ b/platform/Device/component/efr32bg24b410f1536ij42.slcc @@ -0,0 +1,232 @@ +!!omap +- id: EFR32BG24B410F1536IJ42 +- package: platform +- description: Silicon Labs CMSIS-Device part headers for EFR32BG24B410F1536IJ42. +- category: Platform|Device|EFR32BG24 +- quality: production +- define: + - name: EFR32BG24B410F1536IJ42 + unless: + - device_content_override +- source: + - path: platform/Device/SiliconLabs/EFR32BG24/Source/system_efr32bg24.c + unless: + - device_content_override + - path: platform/Device/SiliconLabs/EFR32BG24/Source/startup_efr32bg24.c + unless: + - device_content_override +- include: + - file_list: + - path: efr32bg24b410f1536ij42.h + - path: efr32bg24_acmp.h + - path: efr32bg24_aes.h + - path: efr32bg24_buram.h + - path: efr32bg24_burtc.h + - path: efr32bg24_cmu.h + - path: efr32bg24_dcdc.h + - path: efr32bg24_devinfo.h + - path: efr32bg24_dma_descriptor.h + - path: efr32bg24_dpll.h + - path: efr32bg24_emu.h + - path: efr32bg24_eusart.h + - path: efr32bg24_fsrco.h + - path: efr32bg24_gpcrc.h + - path: efr32bg24_gpio.h + - path: efr32bg24_gpio_port.h + - path: efr32bg24_hfrco.h + - path: efr32bg24_hfxo.h + - path: efr32bg24_i2c.h + - path: efr32bg24_iadc.h + - path: efr32bg24_icache.h + - path: efr32bg24_keyscan.h + - path: efr32bg24_ldma.h + - path: efr32bg24_ldmaxbar.h + - path: efr32bg24_ldmaxbar_defines.h + - path: efr32bg24_letimer.h + - path: efr32bg24_lfrco.h + - path: efr32bg24_lfxo.h + - path: efr32bg24_mailbox.h + - path: efr32bg24_mpahbram.h + - path: efr32bg24_msc.h + - path: efr32bg24_mvp.h + - path: efr32bg24_pcnt.h + - path: efr32bg24_prs.h + - path: efr32bg24_prs_signals.h + - path: efr32bg24_scratchpad.h + - path: efr32bg24_semailbox.h + - path: efr32bg24_smu.h + - path: efr32bg24_syscfg.h + - path: efr32bg24_sysrtc.h + - path: efr32bg24_timer.h + - path: efr32bg24_ulfrco.h + - path: efr32bg24_usart.h + - path: efr32bg24_vdac.h + - path: efr32bg24_wdog.h + - path: em_device.h + - path: system_efr32bg24.h + path: platform/Device/SiliconLabs/EFR32BG24/Include/ + unless: + - device_content_override +- provides: + - name: efr32bg24b410f1536ij42 + - name: device + - name: device_series_2 + - name: device_sdid_215 + - name: device_generic_family_efr32xg24 + - name: device_family_efr32bg24 + - name: device_cortexm + - name: device_arm + - name: cortexm33 + - name: armv8m.main + - name: device_security_vault + - name: device_dcdc_buck/** + - name: device_pa_10dbm + - name: device_pa_0dbm + - name: device_has_acmp + - name: device_has_acmp0 + - name: device_has_acmp1 + - name: device_has_buram + - name: device_has_burtc + - name: device_has_cmu + - name: device_has_dcdc + - name: device_has_devinfo + - name: device_has_dmem + - name: device_has_dpll + - name: device_has_dpll0 + - name: device_has_emu + - name: device_has_euart + - name: device_has_eusart + - name: device_has_eusart0 + - name: device_has_eusart1 + - name: device_has_fsrco + - name: device_has_gpcrc + - name: device_has_gpio + - name: device_has_hfrco + - name: device_has_hfrco0 + - name: device_has_hfrcoem2 + - name: device_has_hfrcoem23 + - name: device_has_hfxo + - name: device_has_hfxo0 + - name: device_has_hostmailbox + - name: device_has_i2c + - name: device_has_i2c0 + - name: device_has_i2c1 + - name: device_has_iadc + - name: device_has_iadc0 + - name: device_has_icache + - name: device_has_icache0 + - name: device_has_keyscan + - name: device_has_ldma + - name: device_has_ldmaxbar + - name: device_has_letimer + - name: device_has_letimer0 + - name: device_has_lfrco + - name: device_has_lfxo + - name: device_has_msc + - name: device_has_pcnt + - name: device_has_pcnt0 + - name: device_has_prs + - name: device_has_radioaes + - name: device_has_scratchpad + - name: device_has_semailbox + - name: device_has_smu + - name: device_has_syscfg + - name: device_has_sysrtc + - name: device_has_sysrtc0 + - name: device_has_timer + - name: device_has_timer0 + - name: device_has_timer1 + - name: device_has_timer2 + - name: device_has_timer3 + - name: device_has_timer4 + - name: device_has_uart + - name: device_has_ulfrco + - name: device_has_usart + - name: device_has_usart0 + - name: device_has_vdac + - name: device_has_vdac0 + - name: device_has_vdac1 + - name: device_has_wdog + - name: device_has_wdog0 + - name: device_has_wdog1 + - name: device_has_dwt + - name: device_has_emu_temp_sensor + - name: device_has_fpu + - name: device_has_mpu + - name: device_has_radio + - name: device_has_radio_2g4hz + - name: device_supports_rail + - name: device_supports_rail_stack + - name: device_supports_bluetooth + - name: device_supports_bluetooth_iq_sampling + - name: device_supports_bluetooth_antenna_switching + - name: device_supports_bluetooth_coded_phy + - name: device_supports_bluetooth_cte + - name: device_supports_connect + - name: device_compute_basic +- recommends: + - id: trustzone_unaware +- requires: + - name: cmsis_core +- template_contribution: + - name: device_opn + value: EFR32BG24B410F1536IJ42 + - name: device_arch + value: armv8m.main + - name: device_cpu + value: cortexm33 + - name: device_series + value: 2 + - name: device_family + value: efr32bg24 + - name: device_flash_addr + value: 134217728 + - name: device_flash_size + value: 1572864 + - name: device_flash_page_size + value: 8192 + - name: device_ram_addr + value: 536870912 + - name: device_ram_size + value: 262144 + - name: device_fpu + value: true + - name: device_mpu + value: true + - name: default_stack_size + value: 4096 + - name: default_heap_size + value: 2048 +- tag: + - device:opn:efr32bg24b410f1536ij42 +- toolchain_settings: + - option: device_opn + value: efr32bg24b410f1536ij42 + - option: architecture + value: armv8-mml + - option: cpu + value: cortex-m33 + - option: fpu + value: fpv5-sp + - option: cmse + unless: + - trustzone_nonsecure + value: enabled +- config_file: + - condition: + - custom_radio_config + directory: rail + path: platform/Device/config/215/device.yaml +- metadata: + device: + memory: + - name: Main Flash + page_size: 8192 + size: 1572864 + start: 134217728 + type: non-volatile + - name: RAM + size: 262144 + start: 536870912 + type: volatile + opn: efr32bg24b410f1536ij42 diff --git a/platform/bootloader/api/btl_interface.c b/platform/bootloader/api/btl_interface.c index b7cbcf71745..6a242f6a308 100644 --- a/platform/bootloader/api/btl_interface.c +++ b/platform/bootloader/api/btl_interface.c @@ -535,6 +535,7 @@ void bootloader_ppusatdnSaveReconfigureState(Bootloader_PPUSATDnCLKENnState_t *c // Store the PPUSATDn states ctx->PPUSATD0 = SMU->PPUSATD0; ctx->PPUSATD1 = SMU->PPUSATD1; + ctx->BMPUSATD0 = SMU->BMPUSATD0; #if defined(SMU_NS_CFGNS_BASE) // Store the PPUPATDn states @@ -592,6 +593,7 @@ void bootloader_ppusatdnSaveReconfigureState(Bootloader_PPUSATDnCLKENnState_t *c && bootloader_getAllocatedDMAChannel() != BOOTLOADER_ERROR_INIT_STORAGE) { SMU->PPUSATD0_SET = SMU_PPUSATD0_LDMA; SMU->PPUSATD0_SET = SMU_PPUSATD0_LDMAXBAR; + SMU->BMPUSATD0_SET = SMU_BMPUSATD0_LDMA; } SMU->PPUSATD0_SET = SMU_PPUSATD0_HFRCO0; @@ -605,6 +607,13 @@ void bootloader_ppusatdnSaveReconfigureState(Bootloader_PPUSATDnCLKENnState_t *c #if defined(SMU_PPUSATD1_SEMAILBOX) SMU->PPUSATD1_SET = SMU_PPUSATD1_SEMAILBOX; #endif // SMU_PPUSATD1_SEMAILBOX +#elif defined(SL_TRUSTZONE_SECURE) + #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_5) + SMU->BMPUSATD0_SET = SMU_BMPUSATD0_LDMA0; + SMU->BMPUSATD0_SET = SMU_BMPUSATD0_LDMA1; + #else + SMU->BMPUSATD0_SET = SMU_BMPUSATD0_LDMA; + #endif #endif // BOOTLOADER_DISABLE_MULTI_TIERED_FALLBACK bootloader_getPeripheralList(&ppusatd0, &ppusatd1); @@ -659,6 +668,7 @@ void bootloader_ppusatdnRestoreState(Bootloader_PPUSATDnCLKENnState_t *ctx) SMU->PPUSATD0 = ctx->PPUSATD0; SMU->PPUSATD1 = ctx->PPUSATD1; + SMU->BMPUSATD0 = ctx->BMPUSATD0; #if defined(SMU_NS_CFGNS_BASE) SMU->PPUPATD0 = ctx->PPUPATD0; SMU->PPUPATD1 = ctx->PPUPATD1; diff --git a/platform/bootloader/api/btl_interface.h b/platform/bootloader/api/btl_interface.h index 54a7e3bb49e..2a27c04f2f3 100644 --- a/platform/bootloader/api/btl_interface.h +++ b/platform/bootloader/api/btl_interface.h @@ -194,6 +194,7 @@ typedef struct { typedef struct { uint32_t PPUSATD0; uint32_t PPUSATD1; + uint32_t BMPUSATD0; #if defined(SMU_NS_CFGNS_BASE) uint32_t PPUPATD0; uint32_t PPUPATD1; diff --git a/platform/bootloader/api/btl_interface_ns.c b/platform/bootloader/api/btl_interface_ns.c index d5f97aa9b5d..d98256fe5d1 100644 --- a/platform/bootloader/api/btl_interface_ns.c +++ b/platform/bootloader/api/btl_interface_ns.c @@ -20,47 +20,47 @@ // ----------------------------------------------------------------------------- // Veneer NSC functions -extern int32_t bootloader_nsc_getInfo(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_getInfo(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); extern int32_t bootloader_nsc_init(void); extern int32_t bootloader_nsc_deinit(void); extern int32_t bootloader_nsc_rebootAndInstall(void); -extern int32_t bootloader_nsc_parseImageInfo(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_parseImageInfo(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); extern uint32_t bootloader_nsc_parserContextSize(void); extern int32_t bootloader_nsc_verifyApplication(uint32_t startAddress, uint32_t notUsed); extern int32_t bootloader_nsc_secureBootEnforced(void); -extern int32_t bootloader_nsc_getUpgradeLocation(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_getUpgradeLocation(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); extern uint32_t bootloader_nsc_remainingApplicationUpgrades(void); -extern int32_t bootloader_nsc_getCertificateVersion(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); -extern int32_t bootloader_nsc_getStorageInfo(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); -extern int32_t bootloader_nsc_getStorageSlotInfo(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); -extern int32_t bootloader_nsc_readStorage(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); -extern int32_t bootloader_nsc_writeStorage(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); -extern int32_t bootloader_nsc_eraseWriteStorage(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_getCertificateVersion(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_getStorageInfo(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_getStorageSlotInfo(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_readStorage(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_writeStorage(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_eraseWriteStorage(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); extern int32_t bootloader_nsc_eraseStorageSlot(uint32_t slotId, uint32_t notUsed); -extern int32_t bootloader_nsc_initChunkedEraseStorageSlot(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); -extern int32_t bootloader_nsc_chunkedEraseStorageSlot(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_initChunkedEraseStorageSlot(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_chunkedEraseStorageSlot(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); extern int32_t bootloader_nsc_setImageToBootload(int32_t slotId, uint32_t notUsed); -extern int32_t bootloader_nsc_setImagesToBootload(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); -extern int32_t bootloader_nsc_getImagesToBootload(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_setImagesToBootload(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_getImagesToBootload(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); extern int32_t bootloader_nsc_appendImageToBootloadList(int32_t slotId, uint32_t notUsed); extern int32_t bootloader_nsc_initVerifyImage(uint32_t slotId, uint32_t notUsed); extern int32_t bootloader_nsc_continueVerifyImage(void); extern int32_t bootloader_nsc_verifyImage(uint32_t slotId, uint32_t notUsed); -extern int32_t bootloader_nsc_getImageInfo(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); +extern int32_t bootloader_nsc_getImageInfo(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); extern int32_t bootloader_nsc_storageIsBusy(void); extern int32_t bootloader_nsc_getAllocatedDMAChannel(void); extern uint32_t bootloader_nsc_getResetReason(void); @@ -81,7 +81,7 @@ BootloaderResetCause_t bootloader_getResetReason(void) void bootloader_getInfo(BootloaderInformation_t *info) { - psa_outvec out_vec[] = { + sli_tz_outvec out_vec[] = { { .base = info, .len = sizeof(BootloaderInformation_t) } }; @@ -113,10 +113,10 @@ int32_t bootloader_parseImageInfo(uint8_t data[], ApplicationData_t *appInfo, uint32_t *bootloaderVersion) { - psa_invec in_vec[] = { + sli_tz_invec in_vec[] = { { .base = data, .len = numBytes } }; - psa_outvec out_vec[] = { + sli_tz_outvec out_vec[] = { { .base = appInfo, .len = sizeof(ApplicationData_t) }, { .base = bootloaderVersion, .len = sizeof(bootloaderVersion[0]) } }; @@ -152,7 +152,7 @@ bool bootloader_secureBootEnforced(void) bool bootloader_getUpgradeLocation(uint32_t *location) { - psa_outvec out_vec[] = { + sli_tz_outvec out_vec[] = { { .base = location, .len = sizeof(location[0]) } }; @@ -171,7 +171,7 @@ uint32_t bootloader_remainingApplicationUpgrades(void) bool bootloader_getCertificateVersion(uint32_t *version) { - psa_outvec out_vec[] = { + sli_tz_outvec out_vec[] = { { .base = version, .len = sizeof(version[0]) } }; @@ -183,7 +183,7 @@ bool bootloader_getCertificateVersion(uint32_t *version) void bootloader_getStorageInfo(BootloaderStorageInformation_t *info) { - psa_outvec out_vec[] = { + sli_tz_outvec out_vec[] = { { .base = info, .len = sizeof(BootloaderStorageInformation_t) } }; @@ -196,10 +196,10 @@ void bootloader_getStorageInfo(BootloaderStorageInformation_t *info) int32_t bootloader_getStorageSlotInfo(uint32_t slotId, BootloaderStorageSlot_t *slot) { - psa_invec in_vec[] = { + sli_tz_invec in_vec[] = { { .base = &slotId, .len = sizeof(slotId) } }; - psa_outvec out_vec[] = { + sli_tz_outvec out_vec[] = { { .base = slot, .len = sizeof(BootloaderStorageSlot_t) } }; @@ -214,11 +214,11 @@ int32_t bootloader_readStorage(uint32_t slotId, uint8_t *buffer, size_t length) { - psa_invec in_vec[] = { + sli_tz_invec in_vec[] = { { .base = &slotId, .len = sizeof(slotId) }, { .base = &offset, .len = sizeof(offset) } }; - psa_outvec out_vec[] = { + sli_tz_outvec out_vec[] = { { .base = buffer, .len = length } }; @@ -233,7 +233,7 @@ int32_t bootloader_writeStorage(uint32_t slotId, uint8_t *buffer, size_t length) { - psa_invec in_vec[] = { + sli_tz_invec in_vec[] = { { .base = &slotId, .len = sizeof(slotId) }, { .base = &offset, .len = sizeof(offset) }, { .base = buffer, .len = length } @@ -250,7 +250,7 @@ int32_t bootloader_eraseWriteStorage(uint32_t slotId, uint8_t *buffer, size_t length) { - psa_invec in_vec[] = { + sli_tz_invec in_vec[] = { { .base = &slotId, .len = sizeof(slotId) }, { .base = &offset, .len = sizeof(offset) }, { .base = buffer, .len = length } @@ -274,10 +274,10 @@ int32_t bootloader_eraseStorageSlot(uint32_t slotId) int32_t bootloader_initChunkedEraseStorageSlot(uint32_t slotId, BootloaderEraseStatus_t *eraseStat) { - psa_invec in_vec[] = { + sli_tz_invec in_vec[] = { { .base = &slotId, .len = sizeof(slotId) } }; - psa_outvec out_vec[] = { + sli_tz_outvec out_vec[] = { { .base = eraseStat, .len = sizeof(BootloaderEraseStatus_t) } }; @@ -289,10 +289,10 @@ int32_t bootloader_initChunkedEraseStorageSlot(uint32_t slotId, int32_t bootloader_chunkedEraseStorageSlot(BootloaderEraseStatus_t *eraseStat) { - psa_invec in_vec[] = { + sli_tz_invec in_vec[] = { { .base = (const void *) eraseStat->currentPageAddr, .len = eraseStat->pageSize } }; - psa_outvec out_vec[] = { + sli_tz_outvec out_vec[] = { { .base = eraseStat, .len = sizeof(BootloaderEraseStatus_t) } }; @@ -313,7 +313,7 @@ int32_t bootloader_setImageToBootload(int32_t slotId) int32_t bootloader_setImagesToBootload(int32_t *slotIds, size_t length) { - psa_invec in_vec[] = { + sli_tz_invec in_vec[] = { { .base = slotIds, .len = length * sizeof(slotIds[0]) } }; @@ -325,7 +325,7 @@ int32_t bootloader_setImagesToBootload(int32_t *slotIds, size_t length) int32_t bootloader_getImagesToBootload(int32_t *slotIds, size_t length) { - psa_outvec out_vec[] = { + sli_tz_outvec out_vec[] = { { .base = slotIds, .len = length * sizeof(slotIds[0]) } }; @@ -373,10 +373,10 @@ int32_t bootloader_getImageInfo(uint32_t slotId, ApplicationData_t *appInfo, uint32_t *bootloaderVersion) { - psa_invec in_vec[] = { + sli_tz_invec in_vec[] = { { .base = &slotId, .len = sizeof(slotId) } }; - psa_outvec out_vec[] = { + sli_tz_outvec out_vec[] = { { .base = appInfo, .len = sizeof(ApplicationData_t) }, { .base = bootloaderVersion, .len = sizeof(bootloaderVersion[0]) } }; diff --git a/platform/bootloader/api/btl_interface_nsc.c b/platform/bootloader/api/btl_interface_nsc.c index 4076e1f3d40..2c29ff9690f 100644 --- a/platform/bootloader/api/btl_interface_nsc.c +++ b/platform/bootloader/api/btl_interface_nsc.c @@ -24,6 +24,7 @@ #include "sli_tz_iovec_check.h" #include "sl_common.h" +#include "fih.h" // ----------------------------------------------------------------------------- // Defines @@ -75,10 +76,11 @@ static void bl_fatal_assert_action(void) __builtin_unreachable(); } -static void bl_assert_tz_iovecs_in_ns(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len, - sli_tz_iovec_params_t *iovec_copy_ptr) +static fih_int bl_assert_tz_iovecs_in_ns(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len, + sli_tz_iovec_params_t *iovec_copy_ptr) { + fih_int fih_rc = FIH_FAILURE; uint32_t status = sli_tz_iovecs_live_in_ns(in_vec, in_len, out_vec, @@ -87,6 +89,8 @@ static void bl_assert_tz_iovecs_in_ns(psa_invec *in_vec, size_t in_len, if (status != SLI_TZ_IOVEC_OK) { bl_fatal_assert_action(); } + fih_rc = FIH_SUCCESS; + FIH_RET(fih_rc); } // ----------------------------------------------------------------------------- @@ -101,15 +105,17 @@ uint32_t bootloader_nsc_getResetReason(void) } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_getInfo(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_getInfo(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if (out_vec[0].len != sizeof(BootloaderInformation_t)) { bl_fatal_assert_action(); } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); BootloaderInformation_t *info = (BootloaderInformation_t *) iovec_copy.out_vec[0].base; @@ -141,16 +147,18 @@ int32_t bootloader_nsc_rebootAndInstall(void) } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_parseImageInfo(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_parseImageInfo(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if ((out_vec[0].len != sizeof(ApplicationData_t)) || (out_vec[1].len != sizeof(uint32_t))) { bl_fatal_assert_action(); } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); uint8_t *data = (uint8_t *) iovec_copy.in_vec[0].base; size_t numBytes = iovec_copy.in_vec[0].len; @@ -206,15 +214,17 @@ int32_t bootloader_nsc_secureBootEnforced(void) } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_getUpgradeLocation(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_getUpgradeLocation(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if (out_vec[0].len != sizeof(uint32_t)) { bl_fatal_assert_action(); } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); uint32_t *location = (uint32_t *) iovec_copy.out_vec[0].base; @@ -232,15 +242,17 @@ uint32_t bootloader_nsc_remainingApplicationUpgrades(void) } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_getCertificateVersion(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_getCertificateVersion(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if (out_vec[0].len != sizeof(uint32_t)) { bl_fatal_assert_action(); } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); uint32_t *version = (uint32_t *) iovec_copy.out_vec[0].base; @@ -250,15 +262,17 @@ int32_t bootloader_nsc_getCertificateVersion(psa_invec *in_vec, size_t in_len, } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_getStorageInfo(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_getStorageInfo(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if (out_vec[0].len != sizeof(BootloaderStorageInformation_t)) { bl_fatal_assert_action(); } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); BootloaderStorageInformation_t *info = (BootloaderStorageInformation_t *) iovec_copy.out_vec[0].base; @@ -267,16 +281,18 @@ int32_t bootloader_nsc_getStorageInfo(psa_invec *in_vec, size_t in_len, } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_getStorageSlotInfo(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_getStorageSlotInfo(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if ((in_vec[0].len != sizeof(uint32_t)) || (out_vec[0].len != sizeof(BootloaderStorageSlot_t))) { bl_fatal_assert_action(); } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); uint32_t slotId = *((uint32_t *) iovec_copy.in_vec[0].base); BootloaderStorageSlot_t *slot = (BootloaderStorageSlot_t *) iovec_copy.out_vec[0].base; @@ -287,16 +303,18 @@ int32_t bootloader_nsc_getStorageSlotInfo(psa_invec *in_vec, size_t in_len, } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_readStorage(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_readStorage(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if ((in_vec[0].len != sizeof(uint32_t)) || (in_vec[1].len != sizeof(uint32_t))) { bl_fatal_assert_action(); } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); uint32_t slotId = *((uint32_t *) iovec_copy.in_vec[0].base); uint32_t offset = *((uint32_t *) iovec_copy.in_vec[1].base); @@ -309,16 +327,18 @@ int32_t bootloader_nsc_readStorage(psa_invec *in_vec, size_t in_len, } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_writeStorage(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_writeStorage(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if ((in_vec[0].len != sizeof(uint32_t)) || (in_vec[1].len != sizeof(uint32_t))) { bl_fatal_assert_action(); } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); uint32_t slotId = *((uint32_t *) iovec_copy.in_vec[0].base); uint32_t offset = *((uint32_t *) iovec_copy.in_vec[1].base); @@ -331,16 +351,18 @@ int32_t bootloader_nsc_writeStorage(psa_invec *in_vec, size_t in_len, } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_eraseWriteStorage(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_eraseWriteStorage(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if ((in_vec[0].len != sizeof(uint32_t)) || (in_vec[1].len != sizeof(uint32_t))) { bl_fatal_assert_action(); } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); uint32_t slotId = *((uint32_t *) iovec_copy.in_vec[0].base); uint32_t offset = *((uint32_t *) iovec_copy.in_vec[1].base); @@ -362,16 +384,18 @@ int32_t bootloader_nsc_eraseStorageSlot(uint32_t slotId, uint32_t notUsed) } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_initChunkedEraseStorageSlot(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_initChunkedEraseStorageSlot(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if ((in_vec[0].len != sizeof(uint32_t)) || (out_vec[0].len != sizeof(BootloaderEraseStatus_t))) { bl_fatal_assert_action(); } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); uint32_t slotId = *((uint32_t *) iovec_copy.in_vec[0].base); BootloaderEraseStatus_t *eraseStat = (BootloaderEraseStatus_t *) iovec_copy.out_vec[0].base; @@ -382,15 +406,17 @@ int32_t bootloader_nsc_initChunkedEraseStorageSlot(psa_invec *in_vec, size_t in_ } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_chunkedEraseStorageSlot(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_chunkedEraseStorageSlot(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if (out_vec[0].len != sizeof(BootloaderEraseStatus_t)) { bl_fatal_assert_action(); } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); uint32_t currentPageAddrChecked = (uint32_t) iovec_copy.in_vec[0].base; size_t pageSizeChecked = iovec_copy.in_vec[0].len; @@ -419,11 +445,13 @@ int32_t bootloader_nsc_setImageToBootload(int32_t slotId, uint32_t notUsed) } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_setImagesToBootload(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_setImagesToBootload(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); int32_t *slotIds = (int32_t *) iovec_copy.in_vec[0].base; size_t length = iovec_copy.in_vec[0].len / sizeof(slotIds[0]); @@ -434,11 +462,13 @@ int32_t bootloader_nsc_setImagesToBootload(psa_invec *in_vec, size_t in_len, } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_getImagesToBootload(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_getImagesToBootload(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); int32_t *slotIds = (int32_t *) iovec_copy.out_vec[0].base; size_t length = iovec_copy.out_vec[0].len / sizeof(slotIds[0]); @@ -494,9 +524,11 @@ int32_t bootloader_nsc_verifyImage(uint32_t slotId, uint32_t notUsed) } __attribute__((cmse_nonsecure_entry)) -int32_t bootloader_nsc_getImageInfo(psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len) +int32_t bootloader_nsc_getImageInfo(sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len) { + fih_int fih_rc = FIH_FAILURE; + (void) fih_rc; if ((in_vec[0].len != sizeof(uint32_t)) || (out_vec[0].len != sizeof(ApplicationData_t)) || (out_vec[1].len != sizeof(uint32_t))) { @@ -504,7 +536,7 @@ int32_t bootloader_nsc_getImageInfo(psa_invec *in_vec, size_t in_len, } sli_tz_iovec_params_t iovec_copy = { 0 }; - bl_assert_tz_iovecs_in_ns(in_vec, in_len, out_vec, out_len, &iovec_copy); + FIH_CALL(bl_assert_tz_iovecs_in_ns, fih_rc, in_vec, in_len, out_vec, out_len, &iovec_copy); uint32_t slotId = *((uint32_t *) iovec_copy.in_vec[0].base); ApplicationData_t *appInfo = (ApplicationData_t *) iovec_copy.out_vec[0].base; diff --git a/platform/bootloader/bootloader_evaluation_templates.xml b/platform/bootloader/bootloader_evaluation_templates.xml index 66eb013fa59..a2046dd2dd4 100644 --- a/platform/bootloader/bootloader_evaluation_templates.xml +++ b/platform/bootloader/bootloader_evaluation_templates.xml @@ -6,9 +6,9 @@ - - - + + + @@ -21,9 +21,9 @@ - - - + + + @@ -36,9 +36,9 @@ - + - + @@ -51,9 +51,9 @@ - + - + @@ -66,9 +66,9 @@ - + - + @@ -81,9 +81,9 @@ - + - + @@ -96,9 +96,9 @@ - + - + @@ -111,9 +111,9 @@ - - - + + + @@ -127,8 +127,8 @@ - - + + @@ -142,8 +142,8 @@ - - + + @@ -157,8 +157,8 @@ - - + + @@ -172,8 +172,8 @@ - - + + @@ -187,8 +187,8 @@ - - + + @@ -202,8 +202,8 @@ - - + + @@ -217,8 +217,8 @@ - - + + @@ -232,8 +232,8 @@ - - + + diff --git a/platform/bootloader/bootloader_production_templates.xml b/platform/bootloader/bootloader_production_templates.xml index 009fd5afae0..c237d586f43 100644 --- a/platform/bootloader/bootloader_production_templates.xml +++ b/platform/bootloader/bootloader_production_templates.xml @@ -7,8 +7,8 @@ - - + + @@ -22,8 +22,8 @@ - - + + @@ -36,9 +36,9 @@ - - - + + + @@ -51,9 +51,9 @@ - - - + + + @@ -66,9 +66,9 @@ - - - + + + @@ -81,9 +81,9 @@ - - - + + + @@ -96,9 +96,9 @@ - - - + + + @@ -111,9 +111,9 @@ - - - + + + @@ -126,9 +126,9 @@ - - - + + + @@ -141,9 +141,9 @@ - - - + + + @@ -157,8 +157,8 @@ - - + + @@ -172,8 +172,8 @@ - - + + @@ -187,8 +187,8 @@ - - + + @@ -202,8 +202,8 @@ - - + + @@ -217,8 +217,8 @@ - - + + @@ -232,8 +232,8 @@ - - + + @@ -246,9 +246,9 @@ - - - + + + @@ -261,9 +261,9 @@ - - - + + + @@ -276,9 +276,9 @@ - - - + + + @@ -291,9 +291,9 @@ - - - + + + @@ -307,8 +307,8 @@ - - + + @@ -321,9 +321,9 @@ - - - + + + @@ -336,9 +336,9 @@ - - - + + + @@ -351,9 +351,9 @@ - - - + + + @@ -366,9 +366,9 @@ - - - + + + @@ -381,9 +381,9 @@ - - - + + + @@ -396,9 +396,9 @@ - - - + + + @@ -411,9 +411,9 @@ - - - + + + @@ -426,9 +426,9 @@ - - - + + + @@ -441,9 +441,9 @@ - - - + + + @@ -456,9 +456,9 @@ - - - + + + @@ -471,9 +471,9 @@ - - - + + + @@ -487,8 +487,8 @@ - - + + @@ -502,8 +502,8 @@ - - + + diff --git a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32gg11b/first_stage.s37 b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32gg11b/first_stage.s37 index 57052955b73..1f7d8d45df6 100644 --- a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32gg11b/first_stage.s37 +++ b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32gg11b/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e2014d15bcdf3a6eba796ac4209cf9e0aa91c56dce31cd21921f7ea6b18b221 +oid sha256:d5af8d4b5fbff449a42f42c45c7fcaf73de1e6cd4275484224cdbe55d689562f size 4524 diff --git a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32gg12b/first_stage.s37 b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32gg12b/first_stage.s37 index 6083223f694..4aff14e4c0d 100644 --- a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32gg12b/first_stage.s37 +++ b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32gg12b/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab002867c0621239c5c95e37cd1d1b7d020e712a1369054de5948d07b010ecc4 +oid sha256:82fbb1e3ca3bdd00dd771ce241ab923df0ecfe4e065bbe0a71522ead66fd002f size 4548 diff --git a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32jg12b/first_stage.s37 b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32jg12b/first_stage.s37 index 89257bedabb..8f1bd1a81a1 100644 --- a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32jg12b/first_stage.s37 +++ b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32jg12b/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53ce636f8a476d037854335e0ed73f366160d2ae27987b2ea6707a5c79f461ca +oid sha256:34573afad282597d0ac32b3fd67460c2db38e6278a900f78b929b4d3cf8a2204 size 4516 diff --git a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32jg1b/first_stage.s37 b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32jg1b/first_stage.s37 index 1aaf96f3257..75c2e2a5d86 100644 --- a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32jg1b/first_stage.s37 +++ b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32jg1b/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cefd470d0d822fcdf9130f6f478c7abcf6875e22ab1694a27a6281a53b4e1902 +oid sha256:f967c9cb2f7defe7796c1fb5141bf4a43b4a11a6814c7c56c5fefaa59792b7b5 size 4548 diff --git a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32tg11b/first_stage.s37 b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32tg11b/first_stage.s37 index 909c2a13333..c4ec9570009 100644 --- a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32tg11b/first_stage.s37 +++ b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efm32tg11b/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:475b4bb6ca70eb5f32abd8a477659b6a326f244b2aece22bd6259dcbe16055f9 +oid sha256:2532c1f198f5ab5ad4d1c3fb2ecad4079ac26e25167661cfd135f9f952da1a32 size 4692 diff --git a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg11/first_stage.s37 b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg11/first_stage.s37 index f8646495380..4ea7b2ea735 100644 --- a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg11/first_stage.s37 +++ b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg11/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63bf20b55649c45acf1c0eba68909cc283d084a99696924d3b09448831b39a87 +oid sha256:0d2ee781f88c9af2996774c5193f588fbf7b4d0964dd03203e22540ad61e4c36 size 4556 diff --git a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg12/first_stage.s37 b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg12/first_stage.s37 index 035d7d445bf..5807d28f2ed 100644 --- a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg12/first_stage.s37 +++ b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg12/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8bd60dc57e770c2d337f5421c0c1410fbaac584ece188d07e637c2fe884a10c +oid sha256:f4199f5fb194ba37c6a741acfc848e4c67f85ec0c418d52b287c58197462615a size 4548 diff --git a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg13/first_stage.s37 b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg13/first_stage.s37 index 226c965283f..647da3c7869 100644 --- a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg13/first_stage.s37 +++ b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg13/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95c440ab49292caea5acdc5e537864ab5464aa7645a737da2a1884681c4033da +oid sha256:eab5c94d7f8c0400f95e7e4dfdc290fdaf1bc49414159f771636715759a4cb1c size 4548 diff --git a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg13_second_btl_in_main/first_stage.s37 b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg13_second_btl_in_main/first_stage.s37 index 4659b3fa15f..8eb5f7eafda 100644 --- a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg13_second_btl_in_main/first_stage.s37 +++ b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg13_second_btl_in_main/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e15453d86f4211948c36af66c0eac8b3c316a19ad6747846f16a6d1a9c6fffad +oid sha256:4684781a14e681b327da4ed718a84bd7ea5645d8a0862aebfac36f74ee3f8511 size 4428 diff --git a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg14/first_stage.s37 b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg14/first_stage.s37 index cc94e2120c2..9c4152f0cf6 100644 --- a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg14/first_stage.s37 +++ b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg14/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ae217e83c97c4dbaf8fcfb8819557b3de37c60ea92a638bdfd8be807b6cc6bf +oid sha256:b593bb7226ea5dac6c19e424077d38ddd0d0f1099e9a49298a2e732c3f879939 size 4548 diff --git a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg14_second_btl_in_main/first_stage.s37 b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg14_second_btl_in_main/first_stage.s37 index 29c4430ba6b..8d2048e3e8c 100644 --- a/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg14_second_btl_in_main/first_stage.s37 +++ b/platform/bootloader/build/first_stage/gcc/first_stage_btl_efx32xg14_second_btl_in_main/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aeb9d8ecbf9c026024c402fbe2d0617a3921dae1f3225cb70b448ab8070ab13e +oid sha256:d3ce41f13a48c4116849ce383f19c660d5c72e8473f5139aa48b410186d4958e size 4428 diff --git a/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32gg11b/first_stage.s37 b/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32gg11b/first_stage.s37 index 131f7edf2e8..f7752e02900 100644 --- a/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32gg11b/first_stage.s37 +++ b/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32gg11b/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24892ec858c02c8cfbc5a6b1f4ebeccb776d56ba62e5c7d049635a15e858e67c +oid sha256:f21f3f8520dfbb02097fb197c73adaa6150d2f923f5b681e8a5fadf45e75eb12 size 4394 diff --git a/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32gg12b/first_stage.s37 b/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32gg12b/first_stage.s37 index 89e4f24d8b9..514ceb800ff 100644 --- a/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32gg12b/first_stage.s37 +++ b/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32gg12b/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f753b5cfb491980ee4c6e6f04b0184241aa2fddd4dd83deef65dd8bd8a31c222 +oid sha256:5afa1bd06f9b6debadb45691297b9312766829e6aca3fe5031abea9d17478743 size 4394 diff --git a/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32jg12b/first_stage.s37 b/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32jg12b/first_stage.s37 index aeea2fbe76e..78cfd5b4cd3 100644 --- a/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32jg12b/first_stage.s37 +++ b/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32jg12b/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77850e1d498445773f23e286d283e3582fa6224053ea7cb5e53bd3b049a07b22 +oid sha256:7ed873c9b0c3509a671c646757597ca65418c875b83abddfca1f02aab06bef91 size 4206 diff --git a/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32jg1b/first_stage.s37 b/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32jg1b/first_stage.s37 index 57322b1c67b..a6f4461485a 100644 --- a/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32jg1b/first_stage.s37 +++ b/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32jg1b/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68832987cc533282365765174328cc5069bdfe25f8ad983cffcb3fa0924bb9ff +oid sha256:ba0884fdf97960d558948054a3f1e8e1fedcde3bedd9ca7f487cd2317ca30c46 size 4028 diff --git a/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32tg11b/first_stage.s37 b/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32tg11b/first_stage.s37 index 6c2011e3f94..e68feedc7c4 100644 --- a/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32tg11b/first_stage.s37 +++ b/platform/bootloader/build/first_stage/iar/first_stage_btl_efm32tg11b/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62026e56fde9901355e21061be644f6fe8f29d613ae83cf07ef0ea0e99348d30 +oid sha256:6de431a39055dddfb07570ccf0b35bf7062039490dad2da2475271f545957ccf size 4433 diff --git a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg11/first_stage.s37 b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg11/first_stage.s37 index 1755c6953a9..028cff80f2f 100644 --- a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg11/first_stage.s37 +++ b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg11/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:312ad159cca175999462befef819e90a7b3e394fe6702a2dfe3ef8a36ad8401d +oid sha256:1681b2c8441f4beef61a7b4caf915cf214e118221cfddd78709648685800b3a4 size 4157 diff --git a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg12/first_stage.s37 b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg12/first_stage.s37 index 6427b19a0a6..20d6f52ddaf 100644 --- a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg12/first_stage.s37 +++ b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg12/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0b1718eb81e17581adb068be73501fc23076980ac85a2acabc62f2bce4935b49 +oid sha256:a6de84a50eb23dc649d9047b7fbe075db0f36a16a038693b4b9ef5a03fe80b70 size 4353 diff --git a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg13/first_stage.s37 b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg13/first_stage.s37 index f0a49cf7d75..e937bcd6e8c 100644 --- a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg13/first_stage.s37 +++ b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg13/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11474354eefa0db1d726fb6fa92ddef99ed84d34d06a5f6879f533a5e32a4a1e +oid sha256:0f73b69b38492dda076d3b6c2c0be33046ff6f75d475a94c4e851b380c0995b8 size 4353 diff --git a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg13_second_btl_in_main/first_stage.s37 b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg13_second_btl_in_main/first_stage.s37 index 0b399aa3d27..61bf7f10ae3 100644 --- a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg13_second_btl_in_main/first_stage.s37 +++ b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg13_second_btl_in_main/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e6fab3e71984b446906740dfefea4039d81acf6c33f4026230a5058ef0da7ce +oid sha256:af66f83f8976143f2d75e2bf9dad4d714e9d4135d8ab14b6c6cd721bc22d310f size 4336 diff --git a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg14/first_stage.s37 b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg14/first_stage.s37 index 5d45e25af75..e5e4ca45afd 100644 --- a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg14/first_stage.s37 +++ b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg14/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c631d572baa5a08bdbf4ae65d8ca641d20b1d34b680b5459305f0fcff9df73d1 +oid sha256:bccdff74b2e7b237cc6b1a362052d1e38cded93c802fdebe0fcacd5afe223159 size 4353 diff --git a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg14_second_btl_in_main/first_stage.s37 b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg14_second_btl_in_main/first_stage.s37 index 6e2b2187764..adb43d5031c 100644 --- a/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg14_second_btl_in_main/first_stage.s37 +++ b/platform/bootloader/build/first_stage/iar/first_stage_btl_efx32xg14_second_btl_in_main/first_stage.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8325b565721a5a54fe003e650202678b576acd92e21033380726f59f3b4436cc +oid sha256:308a611d34d808b1840f25453f44aa463e20f1714fc24d885fa35a7448ca3d9f size 4336 diff --git a/platform/bootloader/component/bootloader_core.slcc b/platform/bootloader/component/bootloader_core.slcc index 5e168d6dfda..0fea3d79e8d 100644 --- a/platform/bootloader/component/bootloader_core.slcc +++ b/platform/bootloader/component/bootloader_core.slcc @@ -83,7 +83,8 @@ requires: condition: [device_generic_family_efr32xg28, bootloader_uart_xmodem] - name: bootloader_tz_secure_config condition: [device_generic_family_efr32xg28, bootloader_spiflash_storage_sfdp] - + - name: sl_fault_injection_hardening + condition: [device_series_2] recommends: - id: bootloader_include_parser - id: bootloader_uart_xmodem diff --git a/platform/bootloader/component/bootloader_core_secure.slcc b/platform/bootloader/component/bootloader_core_secure.slcc index b3b304f4aad..38372b05731 100644 --- a/platform/bootloader/component/bootloader_core_secure.slcc +++ b/platform/bootloader/component/bootloader_core_secure.slcc @@ -88,7 +88,7 @@ requires: - name: tz_service_syscfg - name: bootloader_tz_secure - name: bootloader_tz_utils - + - name: sl_fault_injection_hardening recommends: - id: bootloader_delay_driver - id: bootloader_ezsp_spi @@ -182,29 +182,7 @@ toolchain_settings: value: -std=gnu99 - option: optimize value: size - - option: gcc_linker_option - value: -Xlinker --cmse-implib - - option: gcc_linker_option - value: -Xlinker --out-implib=bootloader_secure_lib.o - condition: [device_sdid_200] - - option: gcc_linker_option - value: -Xlinker --out-implib=bootloader_secure_lib.o - condition: [device_sdid_205] - - option: gcc_linker_option - value: -Xlinker --out-implib=bootloader_secure_lib.o - condition: [device_sdid_210] - - option: gcc_linker_option - value: -Xlinker --out-implib=bootloader_secure_lib.o - condition: [device_sdid_215] - - option: gcc_linker_option - value: -Xlinker --out-implib=bootloader_secure_lib.o - condition: [device_sdid_220] - - option: gcc_linker_option - value: -Xlinker --out-implib=bootloader_secure_lib.o - condition: [device_sdid_230] - - option: gcc_linker_option - value: -Xlinker --out-implib=bootloader_secure_lib.o - condition: [device_sdid_235] + - option: trustzone_library + value: enabled validation_helper: - - path: platform/bootloader/component/scripts/bootloader_core_validation.lua - + - path: platform/bootloader/component/scripts/bootloader_core_validation.lua \ No newline at end of file diff --git a/platform/bootloader/component/bootloader_debug.slcc b/platform/bootloader/component/bootloader_debug.slcc index 7accbdc0992..844c519ee37 100644 --- a/platform/bootloader/component/bootloader_debug.slcc +++ b/platform/bootloader/component/bootloader_debug.slcc @@ -25,4 +25,6 @@ config_file: - path: platform/bootloader/debug/config/s1/btl_debug_cfg.h condition: [device_series_1] - path: platform/bootloader/debug/config/s2/btl_debug_cfg.h - condition: [device_series_2] \ No newline at end of file + condition: [device_series_2] +validation_helper: + - path: platform/bootloader/component/scripts/bootloader_debug_validation.lua \ No newline at end of file diff --git a/platform/bootloader/component/bootloader_interface.slcc b/platform/bootloader/component/bootloader_interface.slcc index f09ecdbbf62..9339252273b 100644 --- a/platform/bootloader/component/bootloader_interface.slcc +++ b/platform/bootloader/component/bootloader_interface.slcc @@ -50,6 +50,8 @@ requires: condition: [trustzone_secure] - name: tz_sl_interface condition: [trustzone_nonsecure] + - name: sl_fault_injection_hardening + condition: [trustzone_secure] define: - name: BOOTLOADER_APPLOADER diff --git a/platform/bootloader/component/scripts/bootloader_debug_validation.lua b/platform/bootloader/component/scripts/bootloader_debug_validation.lua new file mode 100644 index 00000000000..35e788fbe2e --- /dev/null +++ b/platform/bootloader/component/scripts/bootloader_debug_validation.lua @@ -0,0 +1,12 @@ +-- Validation script for bootlaoder debug + +local debug_print_enable = slc.config('SL_DEBUG_PRINT') +local debug_peripheral = slc.config('SL_DEBUG_PERIPHERAL') +local debug_port = slc.config('SL_DEBUG_SWV_PORT') +local debug_pin = slc.config('SL_DEBUG_SWV_PIN') + +if debug_print_enable.value == "1" then + if (not debug_peripheral) or (not debug_port) or (not debug_pin) then + validation.error('Please Configure GPIO peripheral for SWO', validation.target_for_project()) + end +end diff --git a/platform/bootloader/config/btl_config.h b/platform/bootloader/config/btl_config.h index be52f34e5ce..fb77efaa45e 100644 --- a/platform/bootloader/config/btl_config.h +++ b/platform/bootloader/config/btl_config.h @@ -41,7 +41,7 @@ MISRAC_ENABLE #endif #ifndef BOOTLOADER_VERSION_MAIN_CUSTOMER -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 #endif #define BOOTLOADER_VERSION_MAIN (BOOTLOADER_VERSION_MAIN_MAJOR << 24 \ diff --git a/platform/bootloader/config/s1/device_sdid_80/btl_core_cfg.h b/platform/bootloader/config/s1/device_sdid_80/btl_core_cfg.h index 2226fc05f59..dfc928d9267 100644 --- a/platform/bootloader/config/s1/device_sdid_80/btl_core_cfg.h +++ b/platform/bootloader/config/s1/device_sdid_80/btl_core_cfg.h @@ -90,7 +90,7 @@ // Bootloader Version Main Customer // Default: 0 // Bootloader Version Main Customer -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 // Use custom Bootloader Application Size // Default: 0 diff --git a/platform/bootloader/config/s1/device_sdid_80/device_has_radio/btl_core_cfg.h b/platform/bootloader/config/s1/device_sdid_80/device_has_radio/btl_core_cfg.h index 5383b2b1930..757db2c5d85 100644 --- a/platform/bootloader/config/s1/device_sdid_80/device_has_radio/btl_core_cfg.h +++ b/platform/bootloader/config/s1/device_sdid_80/device_has_radio/btl_core_cfg.h @@ -90,7 +90,7 @@ // Bootloader Version Main Customer // Default: 0 // Bootloader Version Main Customer -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 // Use custom Bootloader Application Size // Default: 0 diff --git a/platform/bootloader/config/s1/device_series_1/btl_core_cfg.h b/platform/bootloader/config/s1/device_series_1/btl_core_cfg.h index b6add5ce019..beaf943b86e 100644 --- a/platform/bootloader/config/s1/device_series_1/btl_core_cfg.h +++ b/platform/bootloader/config/s1/device_series_1/btl_core_cfg.h @@ -91,7 +91,7 @@ // Bootloader Version Main Customer // Default: 0 // Bootloader Version Main Customer -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 // Use custom Bootloader Application Size // Default: 0 diff --git a/platform/bootloader/config/s2/device_sdid_205/apploader/btl_core_cfg.h b/platform/bootloader/config/s2/device_sdid_205/apploader/btl_core_cfg.h index 98ac9ed2bfe..0bde1d67136 100644 --- a/platform/bootloader/config/s2/device_sdid_205/apploader/btl_core_cfg.h +++ b/platform/bootloader/config/s2/device_sdid_205/apploader/btl_core_cfg.h @@ -103,7 +103,7 @@ // Bootloader Version Main Customer // Default: 0 // Bootloader Version Main Customer -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 // Use custom Bootloader Application Size // Default: 0 diff --git a/platform/bootloader/config/s2/device_sdid_205/apploader/btl_core_s_cfg.h b/platform/bootloader/config/s2/device_sdid_205/apploader/btl_core_s_cfg.h index 06ef7bbf091..0a4fb4a8766 100644 --- a/platform/bootloader/config/s2/device_sdid_205/apploader/btl_core_s_cfg.h +++ b/platform/bootloader/config/s2/device_sdid_205/apploader/btl_core_s_cfg.h @@ -93,7 +93,7 @@ // Bootloader Version Main Customer // Default: 0 // Bootloader Version Main Customer -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 // Use custom Bootloader Application Size // Default: 0 diff --git a/platform/bootloader/config/s2/device_sdid_205/btl_core_cfg.h b/platform/bootloader/config/s2/device_sdid_205/btl_core_cfg.h index f7581967819..7471899f54a 100644 --- a/platform/bootloader/config/s2/device_sdid_205/btl_core_cfg.h +++ b/platform/bootloader/config/s2/device_sdid_205/btl_core_cfg.h @@ -114,7 +114,7 @@ // Bootloader Version Main Customer // Default: 0 // Bootloader Version Main Customer -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 // Use custom Bootloader Application Size // Default: 0 diff --git a/platform/bootloader/config/s2/device_sdid_205/btl_core_s_cfg.h b/platform/bootloader/config/s2/device_sdid_205/btl_core_s_cfg.h index 94f384973d5..efa1beda6da 100644 --- a/platform/bootloader/config/s2/device_sdid_205/btl_core_s_cfg.h +++ b/platform/bootloader/config/s2/device_sdid_205/btl_core_s_cfg.h @@ -93,7 +93,7 @@ // Bootloader Version Main Customer // Default: 0 // Bootloader Version Main Customer -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 // Use custom Bootloader Application Size // Default: 0 diff --git a/platform/bootloader/config/s2/device_series_2/apploader/btl_core_cfg.h b/platform/bootloader/config/s2/device_series_2/apploader/btl_core_cfg.h index 774d3782f8e..5d615f847f0 100644 --- a/platform/bootloader/config/s2/device_series_2/apploader/btl_core_cfg.h +++ b/platform/bootloader/config/s2/device_series_2/apploader/btl_core_cfg.h @@ -103,7 +103,7 @@ // Bootloader Version Main Customer // Default: 0 // Bootloader Version Main Customer -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 // Use custom Bootloader Application Size // Default: 0 diff --git a/platform/bootloader/config/s2/device_series_2/apploader/btl_core_s_cfg.h b/platform/bootloader/config/s2/device_series_2/apploader/btl_core_s_cfg.h index 9a8c57087e2..30b8e444092 100644 --- a/platform/bootloader/config/s2/device_series_2/apploader/btl_core_s_cfg.h +++ b/platform/bootloader/config/s2/device_series_2/apploader/btl_core_s_cfg.h @@ -98,7 +98,7 @@ // Bootloader Version Main Customer // Default: 0 // Bootloader Version Main Customer -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 // Use custom Bootloader Application Size // Default: 0 diff --git a/platform/bootloader/config/s2/device_series_2/btl_core_cfg.h b/platform/bootloader/config/s2/device_series_2/btl_core_cfg.h index ec055bfc461..65875b74222 100644 --- a/platform/bootloader/config/s2/device_series_2/btl_core_cfg.h +++ b/platform/bootloader/config/s2/device_series_2/btl_core_cfg.h @@ -114,7 +114,7 @@ // Bootloader Version Main Customer // Default: 0 // Bootloader Version Main Customer -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 // Use custom Bootloader Application Size // Default: 0 diff --git a/platform/bootloader/config/s2/device_series_2/btl_core_s_cfg.h b/platform/bootloader/config/s2/device_series_2/btl_core_s_cfg.h index e1964c93d0c..1b29b013543 100644 --- a/platform/bootloader/config/s2/device_series_2/btl_core_s_cfg.h +++ b/platform/bootloader/config/s2/device_series_2/btl_core_s_cfg.h @@ -98,7 +98,7 @@ // Bootloader Version Main Customer // Default: 0 // Bootloader Version Main Customer -#define BOOTLOADER_VERSION_MAIN_CUSTOMER 1 +#define BOOTLOADER_VERSION_MAIN_CUSTOMER 2 // Use custom Bootloader Application Size // Default: 0 diff --git a/platform/bootloader/core/btl_helper.h b/platform/bootloader/core/btl_helper.h index 6028d9a11c1..8b3dcdeed42 100644 --- a/platform/bootloader/core/btl_helper.h +++ b/platform/bootloader/core/btl_helper.h @@ -19,29 +19,112 @@ #define BTL_HELPER_H #include "em_device.h" - -static inline void cleanUpRAM(uint32_t startAddr, const uint32_t endAddr) +#if defined(_SILICON_LABS_32B_SERIES_2) +#include "fih.h" +#endif +// Linker Symbols +#if defined (__GNUC__) +extern uint32_t __StackTop, __StackLimit; +extern uint32_t __data_start__, __data_end__; +extern uint32_t __bss_start__, __bss_end__; +#else +extern uint32_t CSTACK$$Base, CSTACK$$Limit; +extern uint32_t STACKSEAL$$Limit, HEAP$$Base; +#endif +#if defined(_SILICON_LABS_32B_SERIES_2) +static inline fih_int cleanUpRAM(uint32_t startAddr, const uint32_t endAddr) { - volatile uint32_t *volatile ramStart = (volatile uint32_t *volatile)startAddr; + fih_int fih_rc = FIH_FAILURE; + volatile uint32_t *volatile ramStart = (volatile uint32_t *)startAddr; while ((uint32_t)ramStart < endAddr) { *ramStart = 0u; ramStart++; } + fih_rc = FIH_SUCCESS; + FIH_RET(fih_rc); } - +#endif static inline void jumpToApplicationRoutine(uint32_t startOfAppSpace) { +#if defined(BOOTLOADER_SECURE) + +// Erase rw section + __ASM volatile( + "ldr r3,=0 \n" + "mov r1, %[rwStart] \n" // Load start address + "mov r2, %[rwEnd] \n" // Load end address +#if defined(__GNUC__) + "mov r4, %[bssStart] \n" // Load bss section start address + "mov r5, %[bssEnd] \n" // Load bss section end address +#endif + "data_clean_up_loop: \n" + "cmp r1, r2 \n" // Check if we have reached the end address + "beq data_clean_up_finished \n" + "str r3, [r1] \n" // Clear the RAM content pointed by R1 + "add r1, r1, #4 \n" // Increment by 4 to get to the next word address + "b data_clean_up_loop \n" + "data_clean_up_finished: \n" +#if defined(__GNUC__) + "bss_clean_up_loop: \n" + "cmp r4, r5 \n" // Check if we have reached the end address + "beq bss_clean_up_finished \n" + "str r3, [r4] \n" // Clear the RAM content pointed by R4 + "add r4, r4, #4 \n" // Increment by 4 to get to the next word address + "b bss_clean_up_loop \n" + "bss_clean_up_finished: \n" +#endif + : //No outputs +#if defined(__GNUC__) + :[rwStart] "r" (&__data_start__), [rwEnd] "r" (&__data_end__), [bssStart] "r" (&__bss_start__), [bssEnd] "r" (&__bss_end__) //Inputs + : "r1", "r2", "r3", "r4", "r5" //Clobbered registers + ); +#else + :[rwStart] "r" (&STACKSEAL$$Limit), [rwEnd] "r" (&HEAP$$Base) //Inputs + : "r1", "r2", "r3" //Clobbered registers + ); +#endif + +#if defined(TEST_BOOTLOADER_RAM_CLEAN_UP) + __ASM volatile( + "mov r5, %[dataSection] \n" // Address of the last word in the rw section + "mov r6, %[stackSection] \n" // Address of the last word in the stack section + "mov r7, #0xFEEB \n" // Magic word stored at the end of data and stack sections + "sub r5, r5, #4 \n" + "sub r6, r6, #4 \n" + "str r7, [r5] \n" // Store magic word at the end of data section + "str r7, [r6] \n" // Store magic word at the end of stack section + : //No outputs +#if defined(__GNUC__) + :[dataSection] "r" (&__bss_end__), [stackSection] "r" (&__StackTop) //Inputs + : "r5", "r6", "r7", "r3" //Clobbered registers + ); +#else + :[dataSection] "r" (&HEAP$$Base), [stackSection] "r" (&CSTACK$$Limit) //Inputs + : "r5", "r6", "r7", "r3" //Clobbered registers + ); +#endif +#endif // end of TEST_BOOTLOADER_RAM_CLEAN_UP + +#endif // end of BOOTLOADER_SECURE + #if defined(BOOTLOADER_SECURE) // We should not leave any traces of the secure bootloader before jumping into the application // clean up entire RAM content except for the reset reason word __ASM volatile( "ldr r4,=0 \n" - "mov r2, %[ramBase] \n" // Load start address - "mov r3, %[ramEnd] \n" // Load end address + "mov r2, %[stackBase] \n" // Load start address + "mov r3, %[stackTop] \n" // Load end address +#if defined(TEST_BOOTLOADER_RAM_CLEAN_UP) + "sub r3, r3, #4 \n" // Account for magic word at the top of stack section +#endif + "mov r1, %[ramBase] \n" + "cmp r2, r1 \n" // Check if stack base is equal to SRAM_BASE + "bne ram_clean_up_loop \n" + "add r2, r2, #4 \n" // Increment by 4 to omit reset reason word in SRAM "ram_clean_up_loop: \n" "cmp r2, r3 \n" // Check if we have reached the end address "beq ram_clean_up_finished \n" - "str r4, [r2, r4] \n" // Clear the RAM content pointed by R2 + "str r4, [r2] \n" // Clear the RAM content pointed by R2 "add r2, r2, #4 \n" // Increment by 4 to get to the next word address "b ram_clean_up_loop \n" "ram_clean_up_finished: \n" @@ -57,14 +140,20 @@ static inline void jumpToApplicationRoutine(uint32_t startOfAppSpace) "mov pc, r0 \n" // Set PC : // No outputs #if defined(BOOTLOADER_SECURE) - :[startOfAppSpace] "r" (startOfAppSpace), [ramBase] "r" (SRAM_BASE + 4u), [ramEnd] "r" (SRAM_BASE + SRAM_SIZE) // Inputs +#if defined(__GNUC__) + :[startOfAppSpace] "r" (startOfAppSpace), [stackBase] "r" (&__StackLimit), [stackTop] "r" (&__StackTop), [ramBase] "r" (SRAM_BASE) // Inputs : "r0", "r1", "r2", "r3", "r4" // Clobbered registers ); +#else + :[startOfAppSpace] "r" (startOfAppSpace), [stackBase] "r" (&CSTACK$$Base), [stackTop] "r" (&CSTACK$$Limit), [ramBase] "r" (SRAM_BASE) + : "r0", "r1", "r2", "r3", "r4" // Clobbered registers + ); +#endif // __GNUC__ #else :[startOfAppSpace] "r" (startOfAppSpace) // Inputs : "r0", "r1" // Clobbered registers ); -#endif +#endif // BOOTLOADER_SECURE } #endif // BTL_HELPER_H diff --git a/platform/bootloader/core/btl_main.c b/platform/bootloader/core/btl_main.c index 1e9788168d5..f58e812b370 100644 --- a/platform/bootloader/core/btl_main.c +++ b/platform/bootloader/core/btl_main.c @@ -48,7 +48,9 @@ #include "em_cmu.h" #include "em_gpio.h" #include "em_chip.h" - +#if defined(_SILICON_LABS_32B_SERIES_2) +#include "fih.h" +#endif #if defined(__GNUC__) #define ROM_END_SIZE 0 extern const size_t __rom_end__; @@ -112,9 +114,13 @@ __STATIC_INLINE void configureSMUToDefault(void) SMU->PPUSATD1_SET = _SMU_PPUSATD1_MASK; // SAU treats all access as secure +#if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) SAU->CTRL = 0; __DSB(); __ISB(); +#else + #error "The startup code requires access to the CMSE toolchain extension to set proper SAU settings." +#endif // __ARM_FEATURE_CMSE // Clear and disable the SMU PPUSEC and BMPUSEC interrupt. NVIC_DisableIRQ(SMU_SECURE_IRQn); @@ -433,9 +439,15 @@ void SystemInit2(void) enterApp = false; verifyApp = false; } - +#if defined(_SILICON_LABS_32B_SERIES_2) && defined(CRYPTOACC_PRESENT) + // fih_delay_init is applicable for vse devices + fih_delay_init(); +#endif // App should be verified if (verifyApp) { +#if defined(_SILICON_LABS_32B_SERIES_2) + fih_delay(); +#endif // If app verification fails, enter bootloader instead enterApp = bootload_verifyApplication(startOfAppSpace); if (!enterApp) { diff --git a/platform/bootloader/core/btl_main_s.c b/platform/bootloader/core/btl_main_s.c index ed6c0750ff7..57030944972 100644 --- a/platform/bootloader/core/btl_main_s.c +++ b/platform/bootloader/core/btl_main_s.c @@ -50,6 +50,7 @@ #include "em_gpio.h" #include "em_chip.h" +#include "fih.h" // ----------------------------------------------------------------------------- // Defines @@ -507,8 +508,9 @@ static void setup_mpu(void) * Sets up the static isolation boundaries which are constant throughout * the runtime of the system. Assumes that the SMU is clocked. *****************************************************************************/ -static void setup_static_boundaries(void) +static fih_int setup_static_boundaries(void) { + fih_int fih_rc = FIH_FAILURE; // Memory map configuration // Uses the SMU to split flash into S/NSC/NS, and RAM into S/NS. SMU->LOCK = SMU_LOCK_SMULOCKKEY_UNLOCK; @@ -574,6 +576,8 @@ static void setup_static_boundaries(void) #if defined(TEST_BOOTLOADER_MEMORY_BOUNDARY) memory_boundary_test(); #endif + fih_rc = FIH_SUCCESS; + FIH_RET(fih_rc); } __STATIC_INLINE void lockBootloaderArea(void) @@ -699,9 +703,13 @@ void SystemInit2(void) enterApp = false; verifyApp = false; } - +#if defined(CRYPTOACC_PRESENT) + // fih_delay_init is applicable for vse devices + fih_delay_init(); +#endif // App should be verified if (verifyApp) { + fih_delay(); // If app verification fails, enter bootloader instead enterApp = bootload_verifyApplication(startOfAppSpace); if (!enterApp) { @@ -754,6 +762,7 @@ void SystemInit2(void) // Main Bootloader implementation int main(void) { + fih_int fih_rc = FIH_FAILURE; CHIP_Init(); #if defined(BOOTLOADER_APPLOADER) sl_device_init_clocks(); @@ -796,7 +805,7 @@ int main(void) smu_configure_peripherals(); smu_configure_bus_masters(); #endif // BOOTLOADER_APPLOADER - setup_static_boundaries(); + FIH_CALL(setup_static_boundaries, fih_rc); // Lock the whole bootloader flash unconditionally lockBootloaderArea(); @@ -816,7 +825,7 @@ int main(void) #endif // We might have been through a softreset triggered by the application, // do not leave any traces of the secure application before jumping into the NS bootloader - cleanUpRAM(SRAM_BASE + NS_RAM_OFFSET, SRAM_BASE + SRAM_SIZE); + FIH_CALL(cleanUpRAM, fih_rc, (SRAM_BASE + NS_RAM_OFFSET), (SRAM_BASE + SRAM_SIZE)); jump_to_ns(); // Should never reach this point diff --git a/platform/bootloader/core/btl_reset.c b/platform/bootloader/core/btl_reset.c index 4e58d0320ba..2cab1ec7d15 100644 --- a/platform/bootloader/core/btl_reset.c +++ b/platform/bootloader/core/btl_reset.c @@ -24,9 +24,27 @@ /// Mask for accessing the counter signature #define BOOTLOADER_RESET_COUNTER_SIGNATURE_MASK 0xFFF0u +#if defined BOOTLOADER_ENABLE +#if defined(__GNUC__) +BootloaderResetCause_t rcause __attribute__((section(".bootloader_reset_section"))); +extern const BootloaderResetCause_t __ResetReasonStart__; +#elif defined(__ICCARM__) +#pragma section = "BOOTLOADER_RESET_REASON" +#endif +#endif + void reset_setResetReason(uint16_t resetReason) { - BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (SRAM_BASE); +#if defined BOOTLOADER_ENABLE +#if defined(__GNUC__) + uint32_t resetReasonBase = (uint32_t)&__ResetReasonStart__; +#elif defined(__ICCARM__) + void *resetReasonBase = __section_begin("BOOTLOADER_RESET_REASON"); +#endif +#else + uint32_t resetReasonBase = SRAM_BASE; +#endif + BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (resetReasonBase); cause->reason = resetReason; @@ -38,14 +56,32 @@ void reset_setResetReason(uint16_t resetReason) void reset_invalidateResetReason(void) { - BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (SRAM_BASE); +#if defined BOOTLOADER_ENABLE +#if defined(__GNUC__) + uint32_t resetReasonBase = (uint32_t)&__ResetReasonStart__; +#elif defined(__ICCARM__) + void *resetReasonBase = __section_begin("BOOTLOADER_RESET_REASON"); +#endif +#else + uint32_t resetReasonBase = SRAM_BASE; +#endif + BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (resetReasonBase); cause->signature = BOOTLOADER_RESET_SIGNATURE_INVALID; } void reset_enableResetCounter(void) { - BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (SRAM_BASE); +#if defined BOOTLOADER_ENABLE +#if defined(__GNUC__) + uint32_t resetReasonBase = (uint32_t)&__ResetReasonStart__; +#elif defined(__ICCARM__) + void *resetReasonBase = __section_begin("BOOTLOADER_RESET_REASON"); +#endif +#else + uint32_t resetReasonBase = SRAM_BASE; +#endif + BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (resetReasonBase); // Set the upper 12 bits to a shorter signature and use the lower 4 bits // for the counter value (starts at 0). @@ -55,14 +91,32 @@ void reset_enableResetCounter(void) void reset_disableResetCounter(void) { - BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (SRAM_BASE); +#if defined BOOTLOADER_ENABLE +#if defined(__GNUC__) + uint32_t resetReasonBase = (uint32_t)&__ResetReasonStart__; +#elif defined(__ICCARM__) + void *resetReasonBase = __section_begin("BOOTLOADER_RESET_REASON"); +#endif +#else + uint32_t resetReasonBase = SRAM_BASE; +#endif + BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (resetReasonBase); cause->signature = BOOTLOADER_RESET_SIGNATURE_VALID; } bool reset_resetCounterEnabled(void) { - BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (SRAM_BASE); +#if defined BOOTLOADER_ENABLE +#if defined(__GNUC__) + uint32_t resetReasonBase = (uint32_t)&__ResetReasonStart__; +#elif defined(__ICCARM__) + void *resetReasonBase = __section_begin("BOOTLOADER_RESET_REASON"); +#endif +#else + uint32_t resetReasonBase = SRAM_BASE; +#endif + BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (resetReasonBase); if ((cause->signature & BOOTLOADER_RESET_COUNTER_SIGNATURE_MASK) == BOOTLOADER_RESET_COUNTER_SIGNATURE) { @@ -74,7 +128,16 @@ bool reset_resetCounterEnabled(void) uint8_t reset_getResetCounter(void) { - BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (SRAM_BASE); +#if defined BOOTLOADER_ENABLE +#if defined(__GNUC__) + uint32_t resetReasonBase = (uint32_t)&__ResetReasonStart__; +#elif defined(__ICCARM__) + void *resetReasonBase = __section_begin("BOOTLOADER_RESET_REASON"); +#endif +#else + uint32_t resetReasonBase = SRAM_BASE; +#endif + BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (resetReasonBase); // Return 0 if the reset counter is not enabled return (uint8_t)(reset_resetCounterEnabled() ? cause->signature & 0xFu : 0u); @@ -82,7 +145,16 @@ uint8_t reset_getResetCounter(void) void reset_incrementResetCounter(void) { - BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (SRAM_BASE); +#if defined BOOTLOADER_ENABLE +#if defined(__GNUC__) + uint32_t resetReasonBase = (uint32_t)&__ResetReasonStart__; +#elif defined(__ICCARM__) + void *resetReasonBase = __section_begin("BOOTLOADER_RESET_REASON"); +#endif +#else + uint32_t resetReasonBase = SRAM_BASE; +#endif + BootloaderResetCause_t *cause = (BootloaderResetCause_t *) (resetReasonBase); // Only increment when the counter signature is set if (reset_resetCounterEnabled()) { @@ -109,12 +181,21 @@ void reset_resetWithReason(uint16_t resetReason) uint16_t reset_classifyReset(void) { - BootloaderResetCause_t* resetCause = (BootloaderResetCause_t*) (SRAM_BASE); +#if defined BOOTLOADER_ENABLE +#if defined(__GNUC__) + uint32_t resetReasonBase = (uint32_t)&__ResetReasonStart__; +#elif defined(__ICCARM__) + void *resetReasonBase = __section_begin("BOOTLOADER_RESET_REASON"); +#endif +#else + uint32_t resetReasonBase = SRAM_BASE; +#endif + BootloaderResetCause_t* cause = (BootloaderResetCause_t*) (resetReasonBase); - if (resetCause->signature == BOOTLOADER_RESET_SIGNATURE_VALID) { + if (cause->signature == BOOTLOADER_RESET_SIGNATURE_VALID) { return reset_getResetReason(); - } else if ((resetCause->signature == 0x0000u) - && (resetCause->reason == 0x0001u)) { + } else if ((cause->signature == 0x0000u) + && (cause->reason == 0x0001u)) { // BLE reset cause return BOOTLOADER_RESET_REASON_BOOTLOAD; } else { @@ -124,6 +205,15 @@ uint16_t reset_classifyReset(void) uint16_t reset_getResetReason(void) { - BootloaderResetCause_t* resetCause = (BootloaderResetCause_t*) (SRAM_BASE); - return resetCause->reason; +#if defined BOOTLOADER_ENABLE +#if defined(__GNUC__) + uint32_t resetReasonBase = (uint32_t)&__ResetReasonStart__; +#elif defined(__ICCARM__) + void *resetReasonBase = __section_begin("BOOTLOADER_RESET_REASON"); +#endif +#else + uint32_t resetReasonBase = SRAM_BASE; +#endif + BootloaderResetCause_t* cause = (BootloaderResetCause_t*) (resetReasonBase); + return cause->reason; } diff --git a/platform/bootloader/debug/btl_debug_swo.c b/platform/bootloader/debug/btl_debug_swo.c index 62b59a4512e..9f8bebc84d5 100644 --- a/platform/bootloader/debug/btl_debug_swo.c +++ b/platform/bootloader/debug/btl_debug_swo.c @@ -21,6 +21,7 @@ #include "em_cmu.h" #include "btl_debug_cfg.h" +#if defined (SL_DEBUG_PRINT) && (SL_DEBUG_PRINT == 1) void btl_debugInit(void) { //Below variable is supported for Cortex-M4,M33 @@ -126,7 +127,7 @@ void btl_debugInit(void) ITM->TER |= (1UL << 0); #endif } - +#endif void btl_debugWriteChar(char c) { (void) ITM_SendChar((uint32_t)c); diff --git a/platform/bootloader/debug/config/s1/btl_debug_cfg.h b/platform/bootloader/debug/config/s1/btl_debug_cfg.h index d7a5f85fed8..2ac117b5723 100644 --- a/platform/bootloader/debug/config/s1/btl_debug_cfg.h +++ b/platform/bootloader/debug/config/s1/btl_debug_cfg.h @@ -48,7 +48,6 @@ // Enable assertions in the source code /// Enable Assert in source code. #define SL_DEBUG_ASSERT 0 - // // <<< end of configuration section >>> @@ -57,13 +56,17 @@ // $[DBG_SL_DEBUG] /// SWO Debug Peripheral. #define SL_DEBUG_PERIPHERAL DBG - +#if defined(SL_DEBUG_PRINT) && (SL_DEBUG_PRINT == 1) /// SWO Debug Port. #define SL_DEBUG_SWV_PORT gpioPortF /// SWO Debug Pin. #define SL_DEBUG_SWV_PIN 2 /// SWO Debug Location #define SL_DEBUG_SWV_LOC 0 +#else +/// SWO Debug Port. +#define SL_DEBUG_SWV_PORT 0 +#endif // [DBG_SL_DEBUG]$ // <<< sl:end pin_tool >>> @@ -71,4 +74,4 @@ * @} (end addtogroup Debug) */ -#endif // BTL_DEBUG_CONFIG_H \ No newline at end of file +#endif // BTL_DEBUG_CONFIG_H diff --git a/platform/bootloader/debug/config/s2/btl_debug_cfg.h b/platform/bootloader/debug/config/s2/btl_debug_cfg.h index 8ce274a321b..0d3fc3ae3f1 100644 --- a/platform/bootloader/debug/config/s2/btl_debug_cfg.h +++ b/platform/bootloader/debug/config/s2/btl_debug_cfg.h @@ -44,12 +44,16 @@ // $[GPIO_SL_DEBUG] /// SWO Debug Peripheral. #define SL_DEBUG_PERIPHERAL GPIO - +#if defined(SL_DEBUG_PRINT) && (SL_DEBUG_PRINT == 1) /// SWO Debug Port. #define SL_DEBUG_SWV_PORT gpioPortA /// SWO Debug Pin. #define SL_DEBUG_SWV_PIN 3 +#else +/// SWO Debug Port. +#define SL_DEBUG_SWV_PORT 0 +#endif // [GPIO_SL_DEBUG]$ // <<< sl:end pin_tool >>> -#endif // BTL_DEBUG_CONFIG_H \ No newline at end of file +#endif // BTL_DEBUG_CONFIG_H diff --git a/platform/bootloader/sample-apps/workspaces/bootloader-apploader/bootloader-apploader-secure.slcp b/platform/bootloader/sample-apps/workspaces/bootloader-apploader/bootloader-apploader-secure.slcp index a8da4e97ef3..de63a964c61 100644 --- a/platform/bootloader/sample-apps/workspaces/bootloader-apploader/bootloader-apploader-secure.slcp +++ b/platform/bootloader/sample-apps/workspaces/bootloader-apploader/bootloader-apploader-secure.slcp @@ -32,7 +32,7 @@ import: - id: bootloader-apploader-nonsecure export: library: - - path: bootloader_secure_lib.o + - path: artifact/trustzone_secure_library.o tag: - "companion:bootloader-apploader-nonsecure.slcp" readme: diff --git a/platform/bootloader/sample-apps/workspaces/bootloader-spi-ezsp/bootloader-spi-ezsp-secure.slcp b/platform/bootloader/sample-apps/workspaces/bootloader-spi-ezsp/bootloader-spi-ezsp-secure.slcp index 71bd821f85b..2a521b84b59 100644 --- a/platform/bootloader/sample-apps/workspaces/bootloader-spi-ezsp/bootloader-spi-ezsp-secure.slcp +++ b/platform/bootloader/sample-apps/workspaces/bootloader-spi-ezsp/bootloader-spi-ezsp-secure.slcp @@ -36,7 +36,7 @@ define: export: library: - - path: bootloader_secure_lib.o + - path: artifact/trustzone_secure_library.o tag: - "companion:bootloader-spi-ezsp-nonsecure.slcp" readme: diff --git a/platform/bootloader/sample-apps/workspaces/bootloader-uart-bgapi/bootloader-uart-bgapi-secure.slcp b/platform/bootloader/sample-apps/workspaces/bootloader-uart-bgapi/bootloader-uart-bgapi-secure.slcp index 6a43f28cb6b..2a663655c37 100644 --- a/platform/bootloader/sample-apps/workspaces/bootloader-uart-bgapi/bootloader-uart-bgapi-secure.slcp +++ b/platform/bootloader/sample-apps/workspaces/bootloader-uart-bgapi/bootloader-uart-bgapi-secure.slcp @@ -39,7 +39,7 @@ define: export: library: - - path: bootloader_secure_lib.o + - path: artifact/trustzone_secure_library.o tag: - "companion:bootloader-uart-bgapi-nonsecure.slcp" readme: diff --git a/platform/bootloader/sample-apps/workspaces/bootloader-uart-xmodem/bootloader-uart-xmodem-secure.slcp b/platform/bootloader/sample-apps/workspaces/bootloader-uart-xmodem/bootloader-uart-xmodem-secure.slcp index c4e65694a6d..dffb0ea0600 100644 --- a/platform/bootloader/sample-apps/workspaces/bootloader-uart-xmodem/bootloader-uart-xmodem-secure.slcp +++ b/platform/bootloader/sample-apps/workspaces/bootloader-uart-xmodem/bootloader-uart-xmodem-secure.slcp @@ -38,7 +38,7 @@ configuration: value: 1 export: library: - - path: bootloader_secure_lib.o + - path: artifact/trustzone_secure_library.o tag: - "companion:bootloader-uart-xmodem-nonsecure.slcp" readme: diff --git a/platform/common/inc/sl_gsdk_version.h b/platform/common/inc/sl_gsdk_version.h index 12dac19f966..4d9e36d310f 100644 --- a/platform/common/inc/sl_gsdk_version.h +++ b/platform/common/inc/sl_gsdk_version.h @@ -31,7 +31,7 @@ #define SL_GSDK_MAJOR_VERSION 4 #define SL_GSDK_MINOR_VERSION 2 -#define SL_GSDK_PATCH_VERSION 1 +#define SL_GSDK_PATCH_VERSION 2 #define SL_GSDK_VERSION ((SL_GSDK_MAJOR_VERSION << 8) \ | (SL_GSDK_MINOR_VERSION << 4) \ diff --git a/platform/common/postbuild_profile/bootloader_trustzone_secure.slpb b/platform/common/postbuild_profile/bootloader_trustzone_secure.slpb index d3008849028..bc4ce84c67c 100644 --- a/platform/common/postbuild_profile/bootloader_trustzone_secure.slpb +++ b/platform/common/postbuild_profile/bootloader_trustzone_secure.slpb @@ -7,4 +7,7 @@ steps: - task: copy input: "{{build_dir}}/{{project_name}}.s37" output: "../artifact/{{project_name}}.s37" - export: bootloader_secure_app \ No newline at end of file + export: bootloader_secure_app + - task: "copy" + output: "artifact/trustzone_secure_library.o" + input: "{{build_dir}}/trustzone_secure_library.o" \ No newline at end of file diff --git a/platform/security/postbuild_profile/tz_application.slpb b/platform/common/postbuild_profile/tz_application.slpb similarity index 100% rename from platform/security/postbuild_profile/tz_application.slpb rename to platform/common/postbuild_profile/tz_application.slpb diff --git a/platform/common/postbuild_profile/tz_application_sign.slpb b/platform/common/postbuild_profile/tz_application_sign.slpb new file mode 100644 index 00000000000..7c4bdc5a5ad --- /dev/null +++ b/platform/common/postbuild_profile/tz_application_sign.slpb @@ -0,0 +1,13 @@ +steps: + # Create combined S+NS app + - task: convert + input: + - "{{trustzone_secure_binary}}" + - "{{trustzone_nonsecure_binary}}" + output: artifact/{{workspace_name}}-combined.s37 + + # Sign combined S+NS app + - task: convert + input: "artifact/{{workspace_name}}-combined.s37" + output: artifact/{{workspace_name}}-combined-signed.s37 + keyfile: "{{private_sign_key}}" diff --git a/platform/security/postbuild_profile/tz_nonsecure_application.slpb b/platform/common/postbuild_profile/tz_nonsecure_application.slpb similarity index 100% rename from platform/security/postbuild_profile/tz_nonsecure_application.slpb rename to platform/common/postbuild_profile/tz_nonsecure_application.slpb diff --git a/platform/common/postbuild_profile/tz_secure_application.slpb b/platform/common/postbuild_profile/tz_secure_application.slpb new file mode 100644 index 00000000000..9c3e37972b6 --- /dev/null +++ b/platform/common/postbuild_profile/tz_secure_application.slpb @@ -0,0 +1,10 @@ +parameters: + - name: build_dir +steps: + - task: copy + input: "{{build_dir}}/{{project_name}}.s37" + output: "artifact/{{project_name}}.s37" + export: trustzone_secure_binary + - task: "copy" + output: "artifact/trustzone_secure_library.o" + input: "{{build_dir}}/trustzone_secure_library.o" diff --git a/platform/common/postbuild_profile/tz_secure_application_key.slpb b/platform/common/postbuild_profile/tz_secure_application_key.slpb new file mode 100644 index 00000000000..c4955ff8be2 --- /dev/null +++ b/platform/common/postbuild_profile/tz_secure_application_key.slpb @@ -0,0 +1,16 @@ +parameters: + - name: build_dir +steps: + - task: copy + input: "{{build_dir}}/{{project_name}}.s37" + output: "artifact/{{project_name}}.s37" + export: trustzone_secure_binary + + - task: copy + input: "./autogen/example_signing_key.pem" + output: "artifact/sign_key.pem" + export: private_sign_key + + - task: "copy" + output: "artifact/trustzone_secure_library.o" + input: "{{build_dir}}/trustzone_secure_library.o" diff --git a/platform/common/toolchain/gcc/linkerfile.ld.jinja b/platform/common/toolchain/gcc/linkerfile.ld.jinja index 5e816754bbb..d34ce73bb23 100644 --- a/platform/common/toolchain/gcc/linkerfile.ld.jinja +++ b/platform/common/toolchain/gcc/linkerfile.ld.jinja @@ -36,6 +36,7 @@ {%- set flash_addr = device_flash_addr | first | default(0, true) %} {%- set flash_size = device_flash_size | first %} {%- set flash_page_size = device_flash_page_size | first %} +{%- set bootloader_reset_cause_size = 4 %} {%- if bootloader_enable %} {%- if memory_flash_start is defined %} @@ -66,6 +67,12 @@ {%- set app_ram_size = sram_size %} {%- endif %} +{%- if bootloader_enable %} +{%- set bootloader_reset_region_start = app_ram_start %} +{%- set app_ram_start = app_ram_start + bootloader_reset_cause_size %} +{%- set app_ram_size = app_ram_size - bootloader_reset_cause_size %} +{%- endif %} + {%- if memory_flash_start is defined %} {%- set app_flash_start = memory_flash_start | first %} {%- else %} @@ -109,6 +116,7 @@ { FLASH (rx) : ORIGIN = 0x{{ '%0x' % bootloader_flash_startaddr }}, LENGTH = 0x{{ '%0x' % bootloader_flash_size }} RAM (rwx) : ORIGIN = 0x{{ '%0x' % app_ram_start }}, LENGTH = 0x{{ '%0x' % app_ram_size }} + BOOTLOADER_RESET_REGION (rwx) : ORIGIN = 0x{{ '%0x' % bootloader_reset_region_start }}, LENGTH = 0x{{ '%0x' % bootloader_reset_cause_size }} } {%- else %} MEMORY @@ -222,6 +230,18 @@ SECTIONS __etext = .; + {%- if bootloader_enable %} + + . = ORIGIN(BOOTLOADER_RESET_REGION); + + .bootloader_reset_section (NOLOAD): + { + __ResetReasonStart__ = .; + KEEP(*(.bootloader_reset_section)) + } > BOOTLOADER_RESET_REGION + +{%- endif %} + /* Start placing output sections which are loaded into RAM */ . = ORIGIN(RAM); @@ -389,4 +409,4 @@ SECTIONS {%- if (memory_flash_start and not memory_flash_size) or (memory_flash_size and not memory_flash_start) %} ASSERT( 0, "memory_flash_start and memory_flash_size, Should define/undefine both!") {%- endif %} -} +} \ No newline at end of file diff --git a/platform/common/toolchain/iar/linkerfile.icf.jinja b/platform/common/toolchain/iar/linkerfile.icf.jinja index 8c27fbb6b0b..34d1bac78c3 100644 --- a/platform/common/toolchain/iar/linkerfile.icf.jinja +++ b/platform/common/toolchain/iar/linkerfile.icf.jinja @@ -93,7 +93,6 @@ {%- endif %} /**** End of ICF editor section. ###ICF###*/ - define memory mem with size = 4G; define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; @@ -103,6 +102,13 @@ define region MAIN_FLASH_region = mem:[from 0x{{ '%0x' % app_flash_start }} define symbol STACK_SEAL_SIZE = 8; {%- endif %} +{%- if bootloader_enable %} +define block BOOTLOADER_RESET_REASON with size = 4, alignment = 4 +{ + section .reset_reason +}; +{%- endif %} + define block CSTACK with alignment = 8 { section .stack @@ -174,6 +180,9 @@ define block application with fixed order define block application_ram with fixed order { +{%- if bootloader_enable %} + block BOOTLOADER_RESET_REASON, +{%- endif %} block CSTACK, {%- if trustzone_secure %} block STACKSEAL, @@ -186,6 +195,9 @@ initialize by copy { readwrite }; do not initialize { +{%- if bootloader_enable %} + section .reset_reason, +{%- endif %} section .noinit, section .stack, {%- if trustzone_secure %} diff --git a/platform/common/toolchain/toolchains.slct b/platform/common/toolchain/toolchains.slct index 1ec32ad779a..10cfeffb2b5 100644 --- a/platform/common/toolchain/toolchains.slct +++ b/platform/common/toolchain/toolchains.slct @@ -68,6 +68,9 @@ schema: type: str trustzone_library: type: str + enum: + - enabled + - disabled cmse: type: str enum: @@ -326,9 +329,11 @@ exporter: action: append value: "{{value}}" trustzone_library: - - tool: linker - option: generate_trustzone_lib - value: "{{value}}" + enabled: + - tool: linker + option: generate_trustzone_lib + value: "trustzone_secure_library.o" + disabled: [] architecture: [] gcc_compiler_option: - tool: makefile.arm.gcc.compiler diff --git a/platform/driver/leddrv/inc/sl_pwm_led.h b/platform/driver/leddrv/inc/sl_pwm_led.h index 8cddab2db5b..1ca2c689550 100644 --- a/platform/driver/leddrv/inc/sl_pwm_led.h +++ b/platform/driver/leddrv/inc/sl_pwm_led.h @@ -36,7 +36,7 @@ typedef struct { #if defined(_SILICON_LABS_32B_SERIES_0) || defined(_SILICON_LABS_32B_SERIES_1) uint8_t location; /**< GPIO location */ #endif - uint8_t level; /**< PWM duty cycle [0-65535] */ + uint16_t level; /**< PWM duty cycle [0-65535] */ uint8_t polarity; /**< GPIO polarity (active high/low) */ sl_led_state_t state; /**< Current state (ON/OFF) */ TIMER_TypeDef *timer; /**< TIMER instance */ diff --git a/platform/driver/mvp/src/sl_mvp.c b/platform/driver/mvp/src/sl_mvp.c index 3c8f6ca596e..6cd8be8d985 100644 --- a/platform/driver/mvp/src/sl_mvp.c +++ b/platform/driver/mvp/src/sl_mvp.c @@ -310,6 +310,7 @@ void sli_mvp_prog_set_loop(sli_mvp_program_t *prog, // Program Loop Iterations and increment bit masks prog->LOOP[index].CFG = ((count - 1) << _MVP_LOOPCFG_NUMITERS_SHIFT) | (incrarray << _MVP_LOOPCFG_ARRAY0INCRDIM0_SHIFT); + prog->LOOP[index].RST = 0; // Update instruction field with loop information // This is done with a read-modify-write since it overlays fields set by the instruction call diff --git a/platform/driver/mvp/src/sl_mvp_util.c b/platform/driver/mvp/src/sl_mvp_util.c index a8ee15bd52a..5ae80fa55e6 100644 --- a/platform/driver/mvp/src/sl_mvp_util.c +++ b/platform/driver/mvp/src/sl_mvp_util.c @@ -51,6 +51,7 @@ sl_status_t sli_mvp_util_memclr_f16(sli_mvp_program_context_t *p, int depth = vecs; int height = rows; int width = cols; + int8_t *dest = dst; bool parallel = false; sl_status_t status = SL_STATUS_OK; unsigned batch_size = 2 * vecs * rows * cols; @@ -72,7 +73,7 @@ sl_status_t sli_mvp_util_memclr_f16(sli_mvp_program_context_t *p, sli_mvp_prog_set_reg_f16c(p->p, SLI_MVP_R0, 0, 0); sli_mvp_pb_config_array_nhwc(p->p, SLI_MVP_ARRAY(0), - dst, + dest, parallel == true ? SLI_MVP_DATATYPE_COMPLEX_BINARY16 : SLI_MVP_DATATYPE_BINARY16, @@ -100,7 +101,7 @@ sl_status_t sli_mvp_util_memclr_f16(sli_mvp_program_context_t *p, } else { return status; } - dst += batch_size; + dest += batch_size; } return status; } diff --git a/platform/emdrv/nvm3/lib/libnvm3_CM0P_gcc.a b/platform/emdrv/nvm3/lib/libnvm3_CM0P_gcc.a index 8ea7580995f..261f3a6bf96 100644 --- a/platform/emdrv/nvm3/lib/libnvm3_CM0P_gcc.a +++ b/platform/emdrv/nvm3/lib/libnvm3_CM0P_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aad1200b05593b4451a568c574d84c0d777f02febb121e79e38ca01a9f114b4d +oid sha256:cd7a8f1cadbe096d351c14fab241de9984575abedabb75124f914cc35c821037 size 34086 diff --git a/platform/emdrv/nvm3/lib/libnvm3_CM0P_iar.a b/platform/emdrv/nvm3/lib/libnvm3_CM0P_iar.a index b2e48d324de..6a63984b9c6 100644 --- a/platform/emdrv/nvm3/lib/libnvm3_CM0P_iar.a +++ b/platform/emdrv/nvm3/lib/libnvm3_CM0P_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c0b2bf0db7cfa4c489a8790e4e24a1980503649b5f8ca7d60411247a882d47e +oid sha256:1a3aacdfb1fa423f214d43600746f4d26d54bd0af0b24e02b545df88d32eb2a5 size 75458 diff --git a/platform/emdrv/nvm3/lib/libnvm3_CM33_gcc.a b/platform/emdrv/nvm3/lib/libnvm3_CM33_gcc.a index 0d1b7b75185..80d7963290d 100644 --- a/platform/emdrv/nvm3/lib/libnvm3_CM33_gcc.a +++ b/platform/emdrv/nvm3/lib/libnvm3_CM33_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:421502016b6e522e5ae5957b8ebaa952c4b8f7fe3f4e2c09fc58b4ca015b1cc4 +oid sha256:0657dc18492a7c468c9424add785c4d30279e60f8a4ba606fb47d318a4548a23 size 33530 diff --git a/platform/emdrv/nvm3/lib/libnvm3_CM33_iar.a b/platform/emdrv/nvm3/lib/libnvm3_CM33_iar.a index a14a22d53d5..cdb878bf959 100644 --- a/platform/emdrv/nvm3/lib/libnvm3_CM33_iar.a +++ b/platform/emdrv/nvm3/lib/libnvm3_CM33_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79693c1ccb178bc5f84c82226eedba1edc0c40f456e80b52ef2c7520dc4e8e1a +oid sha256:d88c4c5abc857033b9d7a874fba9a0fe8fe94bff3bb015a720962462eff60c40 size 113452 diff --git a/platform/emdrv/nvm3/lib/libnvm3_CM3_gcc.a b/platform/emdrv/nvm3/lib/libnvm3_CM3_gcc.a index 5db4be63ffb..480d8b77de1 100644 --- a/platform/emdrv/nvm3/lib/libnvm3_CM3_gcc.a +++ b/platform/emdrv/nvm3/lib/libnvm3_CM3_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:846022b266fbaf7a7f77036879961ada6768dc601089838fc75a3cbe8a8ffeab +oid sha256:f86255d6b54cc8a2d2522c96b3758e67d15948bd40e7768ddb4bda98d650631c size 33434 diff --git a/platform/emdrv/nvm3/lib/libnvm3_CM3_iar.a b/platform/emdrv/nvm3/lib/libnvm3_CM3_iar.a index f21642e6fc5..633e245dc2c 100644 --- a/platform/emdrv/nvm3/lib/libnvm3_CM3_iar.a +++ b/platform/emdrv/nvm3/lib/libnvm3_CM3_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:583f20784d13d70668c1b6550433c50549f790d23248de611471bc14ca902f84 +oid sha256:bf81d3c60142bfb4eb62944a21d86f30a29e545f5e5b1082022169cba905a2cb size 115160 diff --git a/platform/emdrv/nvm3/lib/libnvm3_CM4_gcc.a b/platform/emdrv/nvm3/lib/libnvm3_CM4_gcc.a index 6039118e20d..ecd10b9914f 100644 --- a/platform/emdrv/nvm3/lib/libnvm3_CM4_gcc.a +++ b/platform/emdrv/nvm3/lib/libnvm3_CM4_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8c9ac0febaf9e2e0e6da18619e9c6b3c6dab31f00446ce002fd56dadbdd2e29 +oid sha256:68ae993a4aebf32dcaa264fb6a233800c4cf123beecd09f323f3b70ca0f1cead size 33502 diff --git a/platform/emdrv/nvm3/lib/libnvm3_CM4_iar.a b/platform/emdrv/nvm3/lib/libnvm3_CM4_iar.a index 0613b7ba01c..77f6ef94945 100644 --- a/platform/emdrv/nvm3/lib/libnvm3_CM4_iar.a +++ b/platform/emdrv/nvm3/lib/libnvm3_CM4_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1bc0ff9bfe02914d077b8218f2a79e0c39b8f76065dd8509f354e14c71184567 +oid sha256:e0308ff90e2ee96ca57464e98c3e7d3f6fffd5bc69ff56668e8e59b5b792f947 size 115928 diff --git a/platform/emdrv/spidrv/init/sl_spidrv_init.c.jinja b/platform/emdrv/spidrv/init/sl_spidrv_init.c.jinja index e9e978550d1..2fd411eb07e 100644 --- a/platform/emdrv/spidrv/init/sl_spidrv_init.c.jinja +++ b/platform/emdrv/spidrv/init/sl_spidrv_init.c.jinja @@ -122,11 +122,11 @@ SPIDRV_Init_t sl_spidrv_eusart_init_{{instance}} = { void sl_spidrv_init_instances(void) { {%- for instance in spidrv_usart_instances %} #if !defined(SL_SPIDRV_USART_{{instance | upper}}_CS_PIN) - EFM_ASSERT(sl_spidrv_usart_init_{{instance}}.csControl == spidrvCsControlAuto); + EFM_ASSERT(sl_spidrv_usart_init_{{instance}}.csControl == spidrvCsControlApplication); #endif{% endfor %} {%- for instance in spidrv_eusart_instances %} #if !defined(SL_SPIDRV_EUSART_{{instance | upper}}_CS_PIN) - EFM_ASSERT(sl_spidrv_eusart_init_{{instance}}.csControl == spidrvCsControlAuto); + EFM_ASSERT(sl_spidrv_eusart_init_{{instance}}.csControl == spidrvCsControlApplication); #endif {% endfor %} {%- for instance in spidrv_instances %} diff --git a/platform/emlib/inc/em_cmu.h b/platform/emlib/inc/em_cmu.h index 8aac026f9c3..b8386cfa6aa 100644 --- a/platform/emlib/inc/em_cmu.h +++ b/platform/emlib/inc/em_cmu.h @@ -1314,6 +1314,7 @@ void CMU_HFXOCTuneSet(uint32_t ctune); uint32_t CMU_HFXOCTuneGet(void); void CMU_HFXOCTuneDeltaSet(int32_t delta); int32_t CMU_HFXOCTuneDeltaGet(void); +void CMU_HFXOCoreBiasCurrentCalibrate(void); void CMU_LFXOInit(const CMU_LFXOInit_TypeDef *lfxoInit); void CMU_LFXOPrecisionSet(uint16_t precision); uint16_t CMU_LFXOPrecisionGet(void); diff --git a/platform/emlib/src/em_cmu.c b/platform/emlib/src/em_cmu.c index 1264c11507b..a2d29f092ed 100644 --- a/platform/emlib/src/em_cmu.c +++ b/platform/emlib/src/em_cmu.c @@ -3159,17 +3159,14 @@ void CMU_HFXOCrystalSharingFollowerInit(CMU_PRS_Status_Output_Select_TypeDef prs *****************************************************************************/ void CMU_HFXOCTuneSet(uint32_t ctune) { - uint32_t hfxoCtrlBkup; + uint32_t hfxoCtrlBkup = HFXO0->CTRL; // Make sure the given CTUNE value is within the allowable range EFM_ASSERT(ctune <= (_HFXO_XTALCTRL_CTUNEXIANA_MASK >> _HFXO_XTALCTRL_CTUNEXIANA_SHIFT)); - hfxoCtrlBkup = HFXO0->CTRL; - - // These two bits need to be set to allow writing the ctune register - HFXO0->CTRL_SET = HFXO_CTRL_FORCEEN; - while ((HFXO0->STATUS & HFXO_STATUS_COREBIASOPTRDY) == 0) { - // Wait for crystal to startup + // Keep oscillator running, if it is enabled + if (HFXO0->STATUS & _HFXO_STATUS_ENS_MASK) { + HFXO0->CTRL_SET = HFXO_CTRL_FORCEEN; } HFXO0->CTRL_SET = HFXO_CTRL_DISONDEMAND; @@ -3195,7 +3192,12 @@ void CMU_HFXOCTuneSet(uint32_t ctune) | ((uint32_t)ctuneXoana << _HFXO_XTALCTRL_CTUNEXOANA_SHIFT) | ((ctune << _HFXO_XTALCTRL_CTUNEXIANA_SHIFT) & _HFXO_XTALCTRL_CTUNEXIANA_MASK)); - HFXO0->CTRL = hfxoCtrlBkup; + BUS_RegMaskedWrite(&HFXO0->CTRL, _HFXO_CTRL_DISONDEMAND_MASK, hfxoCtrlBkup); + + // Unforce to return control to hardware request + if (HFXO0->STATUS & _HFXO_STATUS_ENS_MASK) { + BUS_RegMaskedWrite(&HFXO0->CTRL, _HFXO_CTRL_FORCEEN_MASK, hfxoCtrlBkup); + } } /**************************************************************************//** @@ -3212,8 +3214,37 @@ void CMU_HFXOCTuneSet(uint32_t ctune) *****************************************************************************/ uint32_t CMU_HFXOCTuneGet(void) { - return ((HFXO0->XTALCTRL & _HFXO_XTALCTRL_CTUNEXIANA_MASK) - >> _HFXO_XTALCTRL_CTUNEXIANA_SHIFT); + uint32_t ctune = 0; + uint32_t hfxoCtrlBkup = HFXO0->CTRL; + + // Keep oscillator running, if it is enabled + if (HFXO0->STATUS & _HFXO_STATUS_ENS_MASK) { + HFXO0->CTRL_SET = HFXO_CTRL_FORCEEN; + } + + HFXO0->CTRL_SET = HFXO_CTRL_DISONDEMAND; + +#if defined(HFXO_CMD_MANUALOVERRIDE) + HFXO0->CMD_SET = HFXO_CMD_MANUALOVERRIDE; +#endif + +#if defined(HFXO_STATUS_FSMLOCK) + while ((HFXO0->STATUS & HFXO_STATUS_FSMLOCK) != 0) { + // Wait for crystal to switch modes. + } +#endif + + ctune = ((HFXO0->XTALCTRL & _HFXO_XTALCTRL_CTUNEXIANA_MASK) + >> _HFXO_XTALCTRL_CTUNEXIANA_SHIFT); + + BUS_RegMaskedWrite(&HFXO0->CTRL, _HFXO_CTRL_DISONDEMAND_MASK, hfxoCtrlBkup); + + // Unforce to return control to hardware request + if (HFXO0->STATUS & _HFXO_STATUS_ENS_MASK) { + BUS_RegMaskedWrite(&HFXO0->CTRL, _HFXO_CTRL_FORCEEN_MASK, hfxoCtrlBkup); + } + + return ctune; } /**************************************************************************//** @@ -3244,6 +3275,62 @@ int32_t CMU_HFXOCTuneDeltaGet(void) return (int32_t)ctuneDelta; } +/**************************************************************************//** + * @brief + * Recalibrate the HFXO's Core Bias Current. + * + * @note + * Care should be taken when using this function as it can cause disturbance + * on the HFXO frequency while the optimization is underway. It's recommended + * to only use this function when HFXO isn't being used. It's also a blocking + * function that can be time consuming. + *****************************************************************************/ +void CMU_HFXOCoreBiasCurrentCalibrate(void) +{ + uint32_t hfxoCtrlBkup = HFXO0->CTRL; + + // These two bits need to be set to allow writing the registers + HFXO0->CTRL_SET = HFXO_CTRL_FORCEEN; + while ((HFXO0->STATUS & (HFXO_STATUS_COREBIASOPTRDY | HFXO_STATUS_RDY)) != (HFXO_STATUS_COREBIASOPTRDY | HFXO_STATUS_RDY)) { + // Wait for crystal to startup + } + + HFXO0->CTRL_SET = HFXO_CTRL_DISONDEMAND; + +#if defined(HFXO_CMD_MANUALOVERRIDE) + HFXO0->CMD_SET = HFXO_CMD_MANUALOVERRIDE; +#endif + +#if defined(HFXO_STATUS_FSMLOCK) + while ((HFXO0->STATUS & HFXO_STATUS_FSMLOCK) != 0) { + // Wait for crystal to switch modes. + } +#endif + + // Making sure HFXO is in steady state + EFM_ASSERT((HFXO0->STATUS & (HFXO_STATUS_COREBIASOPTRDY | HFXO_STATUS_RDY | HFXO_STATUS_ENS)) == (HFXO_STATUS_COREBIASOPTRDY | HFXO_STATUS_RDY | HFXO_STATUS_ENS)); + + // Start core bias optimization + HFXO0->CMD_SET = HFXO_CMD_COREBIASOPT; + while ((HFXO0->STATUS & HFXO_STATUS_COREBIASOPTRDY) == HFXO_STATUS_COREBIASOPTRDY) { + // Wait for core bias optimization to start + } + while ((HFXO0->STATUS & HFXO_STATUS_COREBIASOPTRDY) == 0) { + // Wait for core bias optimization to finish + } + + // Force COREBIASANA bitfields modification +#if defined(HFXO_CMD_MANUALOVERRIDE) + HFXO0->CMD_SET = HFXO_CMD_MANUALOVERRIDE; +#endif + + while ((HFXO0->STATUS & HFXO_STATUS_COREBIASOPTRDY) == 0) { + // Wait for core bias current value to be written in COREBIASANA bitfields + } + + BUS_RegMaskedWrite(&HFXO0->CTRL, (_HFXO_CTRL_DISONDEMAND_MASK | _HFXO_CTRL_FORCEEN_MASK), hfxoCtrlBkup); +} + /**************************************************************************//** * @brief * Initialize LFXO control registers. diff --git a/platform/emlib/src/em_crypto.c b/platform/emlib/src/em_crypto.c index 4a915cc90ec..29009056792 100644 --- a/platform/emlib/src/em_crypto.c +++ b/platform/emlib/src/em_crypto.c @@ -76,6 +76,24 @@ *********************** STATIC FUNCTIONS ********************************** ******************************************************************************/ +#ifdef USE_VARIABLE_SIZED_DATA_LOADS +__STATIC_INLINE void CRYPTO_DataWriteVariableSize(CRYPTO_DataReg_TypeDef dataReg, + const CRYPTO_Data_TypeDef val, + int valSize); +#endif // USE_VARIABLE_SIZED_DATA_LOADS + +__STATIC_INLINE void cryptoBurstToCryptoAndZeroize(volatile uint32_t * reg, + const uint32_t * val); + +__STATIC_INLINE void cryptoBurstFromCryptoAndZeroize(volatile uint32_t * reg, + uint32_t * val); + +__STATIC_INLINE void cryptoBigintZeroize(uint32_t * words32bits, + unsigned num32bitWords); + +__STATIC_INLINE void cryptoBigintIncrement(uint32_t * words32bits, + unsigned num32bitWords); + __STATIC_INLINE void CRYPTO_AES_ProcessLoop(CRYPTO_TypeDef *crypto, unsigned int len, CRYPTO_DataReg_TypeDef inReg, @@ -320,6 +338,49 @@ void CRYPTO_QDataWriteUnaligned(CRYPTO_QDataReg_TypeDef qdataReg, } } +// Write sensitive value (typically key) to CRYPTO and zeroize local registers. +// Sensitive values in local registers may leak to stack or read directly by +// malicious software. +__STATIC_INLINE void cryptoBurstToCryptoAndZeroize(volatile uint32_t * reg, + const uint32_t * val) +{ + /* Load data from memory into local registers. */ + register volatile uint32_t v0 = val[0]; + register volatile uint32_t v1 = val[1]; + register volatile uint32_t v2 = val[2]; + register volatile uint32_t v3 = val[3]; + /* Store data to CRYPTO */ + *reg = v0; + *reg = v1; + *reg = v2; + *reg = v3; + v0 = 0; + v1 = 0; + v2 = 0; + v3 = 0; +} + +// Read sensitive value (typically key) from CRYPTO and zeroize local registers. +// Sensitive values in local registers may leak to stack or read directly by +// malicious software. +__STATIC_INLINE void cryptoBurstFromCryptoAndZeroize(volatile uint32_t * reg, uint32_t * val) +{ + /* Load data from CRYPTO into local registers. */ + register volatile uint32_t v0 = *reg; + register volatile uint32_t v1 = *reg; + register volatile uint32_t v2 = *reg; + register volatile uint32_t v3 = *reg; + /* Store data to memory */ + val[0] = v0; + val[1] = v1; + val[2] = v2; + val[3] = v3; + v0 = 0; + v1 = 0; + v2 = 0; + v3 = 0; +} + void CRYPTO_KeyBufWrite(CRYPTO_TypeDef *crypto, CRYPTO_KeyBuf_TypeDef val, CRYPTO_KeyWidth_TypeDef keyWidth) @@ -328,11 +389,12 @@ void CRYPTO_KeyBufWrite(CRYPTO_TypeDef *crypto, /* Set AES-256 mode */ BUS_RegBitWrite(&crypto->CTRL, _CRYPTO_CTRL_AES_SHIFT, _CRYPTO_CTRL_AES_AES256); /* Load key in KEYBUF register (= DDATA4) */ - CRYPTO_DDataWrite(&crypto->DDATA4, val); + cryptoBurstToCryptoAndZeroize(&crypto->DDATA4, &val[0]); + cryptoBurstToCryptoAndZeroize(&crypto->DDATA4, &val[4]); } else { /* Set AES-128 mode */ BUS_RegBitWrite(&crypto->CTRL, _CRYPTO_CTRL_AES_SHIFT, _CRYPTO_CTRL_AES_AES128); - CRYPTO_BurstToCrypto(&crypto->KEYBUF, &val[0]); + cryptoBurstToCryptoAndZeroize(&crypto->KEYBUF, &val[0]); } } @@ -350,6 +412,11 @@ void CRYPTO_KeyBufWriteUnaligned(CRYPTO_TypeDef *crypto, memcpy(temp, val, 32); } CRYPTO_KeyBufWrite(crypto, temp, keyWidth); + // Wipe out the plaintext key from the temp buffer on stack. + cryptoBigintZeroize(temp, + keyWidth == cryptoKey128Bits + ? CRYPTO_DATA_SIZE_IN_32BIT_WORDS + : CRYPTO_DDATA_SIZE_IN_32BIT_WORDS); } else { // Avoid casting val directly to uint32_t pointer as this can lead to the // compiler making incorrect assumptions in the case where val is un- @@ -425,9 +492,9 @@ void CRYPTO_KeyRead(CRYPTO_TypeDef * crypto, { EFM_ASSERT(&val[0] != NULL); - CRYPTO_BurstFromCrypto(&crypto->KEY, &val[0]); + cryptoBurstFromCryptoAndZeroize(&crypto->KEY, &val[0]); if (keyWidth == cryptoKey256Bits) { - CRYPTO_BurstFromCrypto(&crypto->KEY, &val[4]); + cryptoBurstFromCryptoAndZeroize(&crypto->KEY, &val[4]); } } @@ -462,6 +529,11 @@ void CRYPTO_KeyReadUnaligned(CRYPTO_TypeDef * crypto, } else { memcpy(val, temp, 32); } + // Wipe out the plaintext key from the temp buffer on stack. + cryptoBigintZeroize(temp, + keyWidth == cryptoKey128Bits + ? CRYPTO_DATA_SIZE_IN_32BIT_WORDS + : CRYPTO_DDATA_SIZE_IN_32BIT_WORDS); } else { // Avoid casting val directly to uint32_t pointer as this can lead to the // compiler making incorrect assumptions in the case where val is un- @@ -761,9 +833,9 @@ void CRYPTO_SHA_256(CRYPTO_TypeDef * crypto, __STATIC_INLINE void cryptoBigintZeroize(uint32_t * words32bits, unsigned num32bitWords) { - while (num32bitWords > 0UL) { - num32bitWords--; - *words32bits++ = 0; + volatile uint32_t *p = words32bits; + while (num32bitWords--) { + *p++ = 0; } } diff --git a/platform/emlib/src/em_iadc.c b/platform/emlib/src/em_iadc.c index 3993c05066b..fd602a19971 100644 --- a/platform/emlib/src/em_iadc.c +++ b/platform/emlib/src/em_iadc.c @@ -37,6 +37,11 @@ #include "sl_common.h" #include +/***************************************************************************//** + * @addtogroup emlib + * @{ + ******************************************************************************/ + /***************************************************************************//** * @addtogroup iadc IADC - Incremental ADC * @brief Incremental Analog to Digital Converter (IADC) Peripheral API @@ -1151,4 +1156,5 @@ uint32_t IADC_getReferenceVoltage(IADC_CfgReference_t reference) } /** @} (end addtogroup iadc) */ +/** @} (end addtogroup emlib) */ #endif /* defined(IADC_COUNT) && (IADC_COUNT > 0) */ diff --git a/platform/hwconf_data/hwconfig.hwdata b/platform/hwconf_data/hwconfig.hwdata index 1e867aaed59..bede743cddb 100644 --- a/platform/hwconf_data/hwconfig.hwdata +++ b/platform/hwconf_data/hwconfig.hwdata @@ -1,251 +1,251 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/platform/middleware/glib/glib/glib.c b/platform/middleware/glib/glib/glib.c index c96f932b428..adde498b424 100644 --- a/platform/middleware/glib/glib/glib.c +++ b/platform/middleware/glib/glib/glib.c @@ -88,7 +88,7 @@ EMSTATUS GLIB_contextInit(GLIB_Context_t *pContext) } /* Configure font. Default to NORMAL 8x8 if included in project. */ -#ifndef GLIB_NO_DEFAULT_FONT +#ifdef GLIB_DEFAULT_FONT GLIB_setFont(pContext, GLIB_DEFAULT_FONT); #endif diff --git a/platform/middleware/glib/glib/glib.h b/platform/middleware/glib/glib/glib.h index 4c0f612250d..508ed6f1553 100644 --- a/platform/middleware/glib/glib/glib.h +++ b/platform/middleware/glib/glib/glib.h @@ -49,7 +49,7 @@ * DMD (Dot Matrix Display). So in order to draw something on a physical * display the user application needs to provide GLIB with a single * implementation of the DMD interface. Sample DMD implementations are - * provided for the displays that are connected to the Silion Labs Starter + * provided for the displays that are connected to the Silicon Labs Starter * Kits and the Silicon Labs Development Kits. * * @n @section glib_init Initialization @@ -64,7 +64,7 @@ * structure is initialized using the @ref GLIB_contextInit() function. * * Every GLIB drawing function will require a @ref GLIB_Context_t as one of - * the functions arguments. The GBLI context contains important configuration + * the functions arguments. The GLIB context contains important configuration * values that all the drawing functions use. It contains the foreground and * background color, and it also contains information on what font to use * when rendering text on the display. @@ -126,7 +126,7 @@ * * GLIB provides these fonts for the user * - * @li @ref GLIB_FontNormal8x8 A normal 8x8 pixel font which is the defaul font + * @li @ref GLIB_FontNormal8x8 A normal 8x8 pixel font which is the default font * if nothing else is configured. * @li @ref GLIB_FontNarrow6x8 A narrow 6x8 pixel font which can be used if * the default font is to wide. @@ -385,6 +385,8 @@ EMSTATUS GLIB_drawPixelColor(GLIB_Context_t *pContext, int32_t x, int32_t y, /* Fonts included in the library */ #if (SL_GLIB_FONTNORMAL_8X8 == 1) extern const GLIB_Font_t GLIB_FontNormal8x8; /* Default */ +#else +#define GLIB_NO_DEFAULT_FONT #endif #if (SL_GLIB_FONTNARROW_6X8 == 1) diff --git a/platform/peripheral/src/peripheral_dcdc_coulomb_counter.c b/platform/peripheral/src/peripheral_dcdc_coulomb_counter.c index 6a84f487d3f..a19079bef80 100644 --- a/platform/peripheral/src/peripheral_dcdc_coulomb_counter.c +++ b/platform/peripheral/src/peripheral_dcdc_coulomb_counter.c @@ -61,8 +61,8 @@ void sl_dcdc_coulomb_counter_init(const sl_dcdc_coulomb_counter_config_t *p_conf /* Set configuration. */ /* The counter thresholds can be used be used to establish a service */ /* interval for the coulomb counter hardware. */ - DCDC->CCTHR = ((p_config->counter_threshold_em0) << _DCDC_CCTHR_EM0CNT_SHIFT) - | ((p_config->counter_threshold_em2) << _DCDC_CCTHR_EM2CNT_SHIFT); + DCDC->CCTHR = ((uint32_t)(p_config->counter_threshold_em0) << _DCDC_CCTHR_EM0CNT_SHIFT) + | ((uint32_t)(p_config->counter_threshold_em2) << _DCDC_CCTHR_EM2CNT_SHIFT); } /***************************************************************************//** diff --git a/platform/radio/efr32_multiphy_configurator/efr32multiphyconfig/_version.py b/platform/radio/efr32_multiphy_configurator/efr32multiphyconfig/_version.py index 7c90333b449..38103f06e34 100644 --- a/platform/radio/efr32_multiphy_configurator/efr32multiphyconfig/_version.py +++ b/platform/radio/efr32_multiphy_configurator/efr32multiphyconfig/_version.py @@ -1,5 +1,5 @@ -__version__ = '2023.1.1' +__version__ = '2204.6.2' diff --git a/platform/radio/efr32_multiphy_configurator/pyradioconfig/_version.py b/platform/radio/efr32_multiphy_configurator/pyradioconfig/_version.py index 7c90333b449..38103f06e34 100644 --- a/platform/radio/efr32_multiphy_configurator/pyradioconfig/_version.py +++ b/platform/radio/efr32_multiphy_configurator/pyradioconfig/_version.py @@ -1,5 +1,5 @@ -__version__ = '2023.1.1' +__version__ = '2204.6.2' diff --git a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/margay/calculators/calc_demodulator.py b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/margay/calculators/calc_demodulator.py index 5b61cd53412..2330250a1f2 100644 --- a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/margay/calculators/calc_demodulator.py +++ b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/margay/calculators/calc_demodulator.py @@ -1,4 +1,5 @@ from pyradioconfig.parts.ocelot.calculators.calc_demodulator import CALC_Demodulator_ocelot +from pyradioconfig.calculator_model_framework.Utils.LogMgr import LogMgr from math import * @@ -58,4 +59,29 @@ def calc_log2x4_actual(self, model): log2x4_actual = floor(4*log2(dec1_actual)) # Write the model var - model.vars.log2x4_actual.value = log2x4_actual \ No newline at end of file + model.vars.log2x4_actual.value = log2x4_actual + + def calc_rssi_rf_adjust_db(self, model): + + #Read in model vars + rf_band = model.vars.rf_band.value + + #Calculate rf adjustment based on band + if rf_band == model.vars.rf_band.var_enum.BAND_169: + rssi_rf_adjust_db = -19.03 + elif rf_band == model.vars.rf_band.var_enum.BAND_315: + rssi_rf_adjust_db = -17.13 + elif rf_band == model.vars.rf_band.var_enum.BAND_434: + rssi_rf_adjust_db = -15.98 + elif rf_band == model.vars.rf_band.var_enum.BAND_490: + rssi_rf_adjust_db = -14.90 + elif rf_band == model.vars.rf_band.var_enum.BAND_868: + rssi_rf_adjust_db = -11.02 + elif rf_band == model.vars.rf_band.var_enum.BAND_915: + rssi_rf_adjust_db = -10.10 + else: + LogMgr.Warning("Warning: No RSSI adjustment available for this band") + rssi_rf_adjust_db = -11.0 #This was the default in early RAIL for Margay and so won't impact customers for now + + #Write the model var + model.vars.rssi_rf_adjust_db.value = rssi_rf_adjust_db \ No newline at end of file diff --git a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/margay/filters/phy_filters.py b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/margay/filters/phy_filters.py index 1de7a3e92b3..f15c3ba3fce 100644 --- a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/margay/filters/phy_filters.py +++ b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/margay/filters/phy_filters.py @@ -7,7 +7,6 @@ class PhyFilters(IPhyFilter): customer_phy_groups = [ 'Phys_Internal_Base_Customer_Aclara', 'Phys_Internal_Base_Customer_Acuity', - 'Phys_Internal_Base_Customer_Amazon', 'Phys_Internal_Base_Customer_Chamberlain', 'Phys_Internal_Base_Customer_Essence', 'Phys_Internal_Base_Customer_HoneywellEnergyAxis', @@ -31,6 +30,7 @@ class PhyFilters(IPhyFilter): simplicity_studio_phy_groups = [ 'Phys_Studio_Base', 'Phys_Studio_Base_Standard_SUNFSK', + 'Phys_Studio_Base_Sidewalk', 'Phys_Studio_Connect', 'Phys_Studio_LongRange', 'Phys_Studio_MBus', diff --git a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/margay/phys/Phys_Studio_Base_Sidewalk.py b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/margay/phys/Phys_Studio_Base_Sidewalk.py new file mode 100644 index 00000000000..78b6590c104 --- /dev/null +++ b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/margay/phys/Phys_Studio_Base_Sidewalk.py @@ -0,0 +1,6 @@ +from pyradioconfig.parts.ocelot.phys.Phys_Studio_Base_Sidewalk import Phys_Studio_Base_Sidewalk_Ocelot + + +class Phys_Studio_Base_Sidewalk_Margay(Phys_Studio_Base_Sidewalk_Ocelot): + # Inherit all from Ocelot + pass diff --git a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/nerio/filters/phy_filters.py b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/nerio/filters/phy_filters.py index a7301e97e78..37f893307a8 100644 --- a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/nerio/filters/phy_filters.py +++ b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/nerio/filters/phy_filters.py @@ -8,7 +8,6 @@ class PhyFilters(IPhyFilter): customer_phy_groups = [ 'Phys_Acuity', - 'Phys_Amazon', 'Phys_ATnT', 'Phys_Bluetooth_LE', 'Phys_Deprecated', diff --git a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/nerio/phys/Phys_Studio_Base_Sidewalk.py b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/nerio/phys/Phys_Studio_Base_Sidewalk.py new file mode 100644 index 00000000000..79c076d0c28 --- /dev/null +++ b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/nerio/phys/Phys_Studio_Base_Sidewalk.py @@ -0,0 +1,132 @@ +from pyradioconfig.calculator_model_framework.interfaces.iphy import IPhy + +# Though this file/class is named "Studio", we actually only expose for later parts at this time +class Phys_Studio_Base_Sidewalk_Nerio(IPhy): + + def sidewalk_2fsk_base(self, model, phy): + + self._set_sidewalk_tolerances(model, phy) + + #Modulation + phy.profile_inputs.modulation_type.value = model.vars.modulation_type.var_enum.FSK2 + phy.profile_inputs.fsk_symbol_map.value = model.vars.fsk_symbol_map.var_enum.MAP0 + + #Preamble + phy.profile_inputs.preamble_pattern.value = 1 + phy.profile_inputs.preamble_pattern_len.value = 2 + phy.profile_inputs.preamble_length.value = 8*8 #Planning for 8-octets at this point, may need to change + + #Syncword + phy.profile_inputs.syncword_0.value = 0b1001000001001110 + phy.profile_inputs.syncword_1.value = 0x0 + phy.profile_inputs.syncword_length.value = 16 + + #Xtal + phy.profile_inputs.xtal_frequency_hz.value = 39000000 + + #Encoding + phy.profile_inputs.diff_encoding_mode.value = model.vars.diff_encoding_mode.var_enum.DISABLED + phy.profile_inputs.dsss_chipping_code.value = 0 + phy.profile_inputs.dsss_len.value = 0 + phy.profile_inputs.dsss_spreading_factor.value = 0 + + #Whitening + phy.profile_inputs.white_poly.value = model.vars.white_poly.var_enum.PN9_802154 + phy.profile_inputs.white_seed.value = 0xFF # This has been tested, need a 0 in position 8 due to EFR32 whitening architecture + phy.profile_inputs.white_output_bit.value = 8 + + #CRC + phy.profile_inputs.payload_crc_en.value = True + phy.profile_inputs.crc_poly.value = model.vars.crc_poly.var_enum.CCITT_16 #Assuming 2-octet FCS is default + phy.profile_inputs.crc_invert.value = False + phy.profile_inputs.crc_pad_input.value = False + phy.profile_inputs.crc_seed.value = 0x00000000 + phy.profile_inputs.crc_bit_endian.value = model.vars.crc_bit_endian.var_enum.MSB_FIRST + phy.profile_inputs.crc_byte_endian.value = model.vars.crc_byte_endian.var_enum.MSB_FIRST + phy.profile_inputs.crc_input_order.value = model.vars.crc_input_order.var_enum.LSB_FIRST + + #Variable Length + phy.profile_inputs.frame_length_type.value = model.vars.frame_length_type.var_enum.VARIABLE_LENGTH + phy.profile_inputs.var_length_numbits.value = 11 + phy.profile_inputs.var_length_shift.value = 0 + phy.profile_inputs.var_length_maxlength.value = 2047 + phy.profile_inputs.var_length_minlength.value = 0 + phy.profile_inputs.var_length_includecrc.value = True + phy.profile_inputs.var_length_adjust.value = 0 + phy.profile_inputs.var_length_bitendian.value = model.vars.var_length_bitendian.var_enum.MSB_FIRST + phy.profile_inputs.var_length_byteendian.value = model.vars.var_length_byteendian.var_enum.MSB_FIRST + + #Header + phy.profile_inputs.header_calc_crc.value = False + phy.profile_inputs.header_en.value = True + phy.profile_inputs.header_size.value = 2 + phy.profile_inputs.header_white_en.value = False + + #Additional Framing Details + phy.profile_inputs.frame_bitendian.value = model.vars.frame_bitendian.var_enum.LSB_FIRST + + def _set_sidewalk_tolerances(self, model, phy): + # These tolerances are from the initial PHY definition and are updated for later parts + # Leaving alone for Nerio definition due to optimized timing detection threshold + phy.profile_inputs.baudrate_tol_ppm.value = 0 + phy.profile_inputs.rx_xtal_error_ppm.value = 10 + phy.profile_inputs.tx_xtal_error_ppm.value = 10 + + def PHY_Sidewalk_2GFSK_50Kbps(self, model): + phy = self._makePhy(model, model.profiles.Base, phy_description='Sidewalk 50kbps 2GFSK mi=1.0') + + #Start with the common Amazon Sidewalk 2FSK base function + self.sidewalk_2fsk_base(model, phy) + + #Define major PHY parameters + phy.profile_inputs.base_frequency_hz.value = 902200000 + phy.profile_inputs.channel_spacing_hz.value = 200000 + phy.profile_inputs.bitrate.value = 50000 + phy.profile_inputs.deviation.value = 25000 + phy.profile_inputs.shaping_filter.value = model.vars.shaping_filter.var_enum.Gaussian + phy.profile_inputs.shaping_filter_param.value = 1.0 + + #Whitening on by default + phy.profile_inputs.payload_white_en.value = True + + def PHY_Sidewalk_2GFSK_150Kbps(self, model): + phy = self._makePhy(model, model.profiles.Base, phy_description='Sidewalk 150kbps 2GFSK mi=0.5') + + # Start with the common Amazon Sidewalk 2FSK base function + self.sidewalk_2fsk_base(model, phy) + + # Define major PHY parameters + phy.profile_inputs.base_frequency_hz.value = 902200000 + phy.profile_inputs.channel_spacing_hz.value = 406349 + phy.profile_inputs.bitrate.value = 150000 + phy.profile_inputs.deviation.value = 37500 + phy.profile_inputs.shaping_filter.value = model.vars.shaping_filter.var_enum.Gaussian + phy.profile_inputs.shaping_filter_param.value = 0.5 + + # Whitening on by default + phy.profile_inputs.payload_white_en.value = True + + self._timing_detection_optimization(phy) + + def PHY_Sidewalk_2GFSK_250Kbps(self, model): + phy = self._makePhy(model, model.profiles.Base, phy_description='Sidewalk 250kbps 2GFSK mi=0.5') + + # Start with the common Amazon Sidewalk 2FSK base function + self.sidewalk_2fsk_base(model, phy) + + # Define major PHY parameters + phy.profile_inputs.base_frequency_hz.value = 902200000 + phy.profile_inputs.channel_spacing_hz.value = 512000 + phy.profile_inputs.bitrate.value = 250000 + phy.profile_inputs.deviation.value = 62500 + phy.profile_inputs.shaping_filter.value = model.vars.shaping_filter.var_enum.Gaussian + phy.profile_inputs.shaping_filter_param.value = 0.5 + + # Whitening on by default + phy.profile_inputs.payload_white_en.value = True + + # Optimizations + self._timing_detection_optimization(phy) + + def _timing_detection_optimization(self, phy): + phy.profile_inputs.timing_detection_threshold.value = 20 \ No newline at end of file diff --git a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/ocelot/filters/phy_filters.py b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/ocelot/filters/phy_filters.py index 8a5ec4a0d6b..1f7317ab527 100644 --- a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/ocelot/filters/phy_filters.py +++ b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/ocelot/filters/phy_filters.py @@ -31,9 +31,9 @@ class PhyFilters(IPhyFilter): ] #Studio white list (these PHYs show in Studio as proprietary starting points) - simplicity_studio_phy_groups = ['Phys_Studio_Base', 'Phys_Studio_Base_Standard_SUNFSK', 'Phys_Studio_Connect', - 'Phys_Studio_LongRange', 'Phys_Studio_MBus', 'phys_studio_wisun_fan_1_0', - 'phys_studio_wisun_fan_1_1', 'phys_studio_wisun_han'] + simplicity_studio_phy_groups = ['Phys_Studio_Base', 'Phys_Studio_Base_Standard_SUNFSK', 'Phys_Studio_Base_Sidewalk', + 'Phys_Studio_Connect', 'Phys_Studio_LongRange', 'Phys_Studio_MBus', + 'phys_studio_wisun_fan_1_0', 'phys_studio_wisun_fan_1_1', 'phys_studio_wisun_han'] # Special designation for simulation PHYs sim_tests_phy_groups = [] diff --git a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/ocelot/phys/Phys_Studio_Base_Sidewalk.py b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/ocelot/phys/Phys_Studio_Base_Sidewalk.py new file mode 100644 index 00000000000..9a7b304d8c9 --- /dev/null +++ b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/ocelot/phys/Phys_Studio_Base_Sidewalk.py @@ -0,0 +1,15 @@ +from pyradioconfig.parts.nerio.phys.Phys_Studio_Base_Sidewalk import Phys_Studio_Base_Sidewalk_Nerio + + +class Phys_Studio_Base_Sidewalk_Ocelot(Phys_Studio_Base_Sidewalk_Nerio): + + def _set_sidewalk_tolerances(self, model, phy): + # Match Wi-SUN FSK specs + phy.profile_inputs.baudrate_tol_ppm.value = 300 + phy.profile_inputs.rx_xtal_error_ppm.value = 20 + phy.profile_inputs.tx_xtal_error_ppm.value = 20 + phy.profile_inputs.deviation_tol_ppm.value = 300000 + + def _timing_detection_optimization(self, phy): + #No longer needed due to TRECS demodd + pass diff --git a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/sol/filters/phy_filters.py b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/sol/filters/phy_filters.py index 440a5122d0a..313deb3699b 100644 --- a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/sol/filters/phy_filters.py +++ b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/sol/filters/phy_filters.py @@ -23,6 +23,7 @@ class PhyFilters_Sol(IPhyFilter): # Studio white list (these PHYs show in Studio as proprietary starting points) simplicity_studio_phy_groups = ['Phys_Studio_Base', 'Phys_Studio_Base_Standard_SUNFSK', + 'Phys_Studio_Base_Sidewalk', 'Phys_Studio_Connect', 'Phys_Studio_SUN_OQPSK', 'phys_studio_wisun_fan_1_0', diff --git a/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/sol/phys/Phys_Studio_Base_Sidewalk.py b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/sol/phys/Phys_Studio_Base_Sidewalk.py new file mode 100644 index 00000000000..2b9360959f1 --- /dev/null +++ b/platform/radio/efr32_multiphy_configurator/pyradioconfig/parts/sol/phys/Phys_Studio_Base_Sidewalk.py @@ -0,0 +1,6 @@ +from pyradioconfig.parts.ocelot.phys.Phys_Studio_Base_Sidewalk import Phys_Studio_Base_Sidewalk_Ocelot + + +class Phys_Studio_Base_Sidewalk_Sol(Phys_Studio_Base_Sidewalk_Ocelot): + #Inherit all from Ocelot + pass diff --git a/platform/radio/radio_configuration/Base/simple_long_preamble/device_sdid_215/rf_band_2400/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_long_preamble/device_sdid_215/rf_band_2400/radio_settings.radioconf index 9b867e2caae..8daeba3b7c9 100644 --- a/platform/radio/radio_configuration/Base/simple_long_preamble/device_sdid_215/rf_band_2400/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_long_preamble/device_sdid_215/rf_band_2400/radio_settings.radioconf @@ -25,4 +25,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_169/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_169/2p4GHz/radio_settings.radioconf index 58b84d1ff0f..cbaf296e6a7 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_169/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_169/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_434/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_434/2p4GHz/radio_settings.radioconf index dfea466759a..e47f79ae8cd 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_434/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_434/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_490/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_490/2p4GHz/radio_settings.radioconf index d889eebb76b..8afdfe14d0a 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_490/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_490/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_868/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_868/2p4GHz/radio_settings.radioconf index 48d7595342a..8751ee62b48 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_868/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_868/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_915/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_915/2p4GHz/radio_settings.radioconf index dd9d2fee872..cc08e338b86 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_915/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_80/rf_band_915/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_169/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_169/2p4GHz/radio_settings.radioconf index 6320ad17d40..4e40da506bd 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_169/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_169/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_434/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_434/2p4GHz/radio_settings.radioconf index 49830a1dc24..d1ed3a878a0 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_434/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_434/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_490/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_490/2p4GHz/radio_settings.radioconf index b855225dde6..7f513a97439 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_490/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_490/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_868/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_868/2p4GHz/radio_settings.radioconf index 29801eaec4b..542475a89ff 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_868/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_868/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_915/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_915/2p4GHz/radio_settings.radioconf index 91d35f8a28e..d35afd77dfb 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_915/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_84/rf_band_915/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_169/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_169/2p4GHz/radio_settings.radioconf index eb98786b97a..a20f7a10caa 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_169/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_169/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_434/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_434/2p4GHz/radio_settings.radioconf index c534184f5eb..12aa92ceef7 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_434/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_434/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_490/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_490/2p4GHz/radio_settings.radioconf index 3ee7a11c70e..5c3cf1a04d5 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_490/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_490/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_868/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_868/2p4GHz/radio_settings.radioconf index eac5c927724..2311bbe4b71 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_868/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_868/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_868/subGHz/rf_band_914/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_868/subGHz/rf_band_914/radio_settings.radioconf index 63e508a5e4c..b232759b593 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_868/subGHz/rf_band_914/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_868/subGHz/rf_band_914/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_915/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_915/2p4GHz/radio_settings.radioconf index 5068cdc5517..f28ec4bd55e 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_915/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_89/rf_band_915/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_169/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_169/2p4GHz/radio_settings.radioconf index 7c623ffcf7d..fbf1ccacf72 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_169/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_169/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_434/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_434/2p4GHz/radio_settings.radioconf index 82a146af8b9..58e7916015e 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_434/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_434/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_490/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_490/2p4GHz/radio_settings.radioconf index 1bf792242ac..3a2ced1222e 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_490/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_490/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_868/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_868/2p4GHz/radio_settings.radioconf index e8b2626c73e..874a66b7dbc 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_868/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_868/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_868/subGHz/rf_band_914/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_868/subGHz/rf_band_914/radio_settings.radioconf index d68be10b329..4620c498acd 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_868/subGHz/rf_band_914/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_868/subGHz/rf_band_914/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_915/2p4GHz/radio_settings.radioconf b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_915/2p4GHz/radio_settings.radioconf index 7afd2315f6a..8350d335f99 100644 --- a/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_915/2p4GHz/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Base/simple_rail_multiphy/device_sdid_95/rf_band_915/2p4GHz/radio_settings.radioconf @@ -431,4 +431,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_80/rf_band_868/radio_settings.radioconf b/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_80/rf_band_868/radio_settings.radioconf index c23ff35b827..3ff80ef1ab5 100644 --- a/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_80/rf_band_868/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_80/rf_band_868/radio_settings.radioconf @@ -106,4 +106,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_84/rf_band_868/radio_settings.radioconf b/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_84/rf_band_868/radio_settings.radioconf index e2f2a741e73..88f5c1b67d1 100644 --- a/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_84/rf_band_868/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_84/rf_band_868/radio_settings.radioconf @@ -106,4 +106,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_89/rf_band_868/radio_settings.radioconf b/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_89/rf_band_868/radio_settings.radioconf index 33effaff5de..4c75fa2a3f3 100644 --- a/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_89/rf_band_868/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_89/rf_band_868/radio_settings.radioconf @@ -106,4 +106,4 @@ - + \ No newline at end of file diff --git a/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_95/rf_band_868/radio_settings.radioconf b/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_95/rf_band_868/radio_settings.radioconf index a844a198768..98a6ee6b9bd 100644 --- a/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_95/rf_band_868/radio_settings.radioconf +++ b/platform/radio/radio_configuration/Mbus/wmbus_meter_868/device_sdid_95/rf_band_868/radio_settings.radioconf @@ -106,4 +106,4 @@ - + \ No newline at end of file diff --git a/platform/radio/rail_lib/apps/component/rail_test_core.slcc b/platform/radio/rail_lib/apps/component/rail_test_core.slcc index 55c95b40a80..a69c84b8a12 100644 --- a/platform/radio/rail_lib/apps/component/rail_test_core.slcc +++ b/platform/radio/rail_lib/apps/component/rail_test_core.slcc @@ -1940,7 +1940,7 @@ template_contribution: handler: getHFXOPPMError help: "Compute the HFXO PPM deviation.\\n Must be called after a complete thermistor measurement\\n ie after getThermistor." condition: - - device_series_2 + - device_sdid_220 - name: cli_command value: @@ -1975,18 +1975,6 @@ template_contribution: condition: - device_sdid_220 - - name: cli_command - value: - name: getSetFemProtectionConfig - handler: getSetFemProtectionConfig - help: "Show/Configure the FEM protection configuration." - argument: - - type: uint16opt - help: "Arg1: Tx duty cycle in percentage\\n Arg2: Power in deci-dBm at FEM output\\n Arg3: If present, reset to defaults" - condition: - - device_sdid_220 - - rail_util_eff - - name: cli_command value: name: getSetEffControl @@ -2063,10 +2051,10 @@ template_contribution: value: name: getSetClpcFastLoop handler: getSetClpcFastLoop - help: "Returns the target and slope for FSK and OFDM" + help: "Returns the target and slope for a specific mode and sensor" argument: - type: uint16opt - help: "TargetFSK: Sets the target, in millivolts\\n [uint16opt] SlopeFSK: Sets the delta millivolts/raw levels\\n [uint16opt] TargetOFDM: Sets the target, in millivolts\\n [uint16opt] SlopeOFDM: Sets the delta millivolts/raw levels\\n" + help: "ModeSensorIndex: Choose a mode&sensor\\n [uint16opt] TargetMv: Sets the target, in millivolts\\n [uint16opt] Slope: Sets the delta millivolts/PA power level\\n" condition: - device_sdid_220 - rail_util_eff @@ -2075,10 +2063,10 @@ template_contribution: value: name: getSetClpcFastLoopCal handler: getSetClpcFastLoopCal - help: " Returns the CAL1 and CAL2 points for requested \\n calibration index. Index 0 = FSK_1, Index 1 = OFDM_1" + help: " Returns the CAL1 and CAL2 points for a specific mode\\n and sensor" argument: - type: int16opt - help: "CalIndex: Calibration Index\\n [int16opt] Cal1Ddbm: Cal 1 Output Power\\n [int16opt] Cal1: Cal 1 millivolts\\n [int16opt] Cal2Ddbm: Cal 2 Output Power\\n [int16opt] Cal2: Cal 2 millivolts counts\\n" + help: "ModeSensorIndex: Choose a mode&sensor\\n [int16opt] Cal1Ddbm: Cal 1 Output Power\\n [int16opt] Cal1Mv: Cal 1 millivolts\\n [int16opt] Cal2Ddbm: Cal 2 Output Power\\n [int16opt] Cal2Mv: Cal 2 millivolts\\n" condition: - device_sdid_220 - rail_util_eff @@ -2087,10 +2075,10 @@ template_contribution: value: name: getSetClpcFastLoopCalSlp handler: getSetClpcFastLoopCalSlp - help: " Returns Calibration slope equation. Index 0 = FSK_1, Index 1 = OFDM_1" + help: " Returns Calibration slope equation for a specific mode\\n and sensor" argument: - type: int16opt - help: "CalIndex: Calibration Index\\n [int16opt] Slope1e1: Cal slope * 10\\n [int16opt] Offset290Ddbm: Offset at 29 dBm" + help: "ModeSensorIndex: Choose a mode&sensor\\n [int16opt] Slope1e1: Cal slope * 10 in mV/ddBm\\n [int16opt] Offset290Ddbm: Offset at 29 dBm" condition: - device_sdid_220 - rail_util_eff @@ -2107,6 +2095,18 @@ template_contribution: - device_sdid_220 - rail_util_eff + - name: cli_command + value: + name: getSetEffClpcFlags + handler: getSetEffClpcFlags + help: "No parameters, returns the current EFF CLPC Flags\\n Bit 0: (1) = ANTV sensor first, 0 = SAW2 sensor first" + argument: + - type: uint8opt + help: "Arg1: Flags" + condition: + - device_sdid_220 + - rail_util_eff + - name: cli_command value: name: getSetEffTempThreshold diff --git a/platform/radio/rail_lib/apps/railtest/app_ci/debug_ci.c b/platform/radio/rail_lib/apps/railtest/app_ci/debug_ci.c index ffff6a31237..e2f222c635f 100644 --- a/platform/radio/rail_lib/apps/railtest/app_ci/debug_ci.c +++ b/platform/radio/rail_lib/apps/railtest/app_ci/debug_ci.c @@ -58,7 +58,9 @@ uint32_t rxOverflowDelay = 10 * 1000000; // 10 seconds uint32_t thermistorResistance = 0; +#if RAIL_SUPPORTS_HFXO_COMPENSATION static int8_t crystalPPMError = RAIL_INVALID_PPM_VALUE; +#endif bool isHFXOCompensationSystematic = false; #define MAX_DEBUG_BYTES (128) @@ -66,7 +68,7 @@ static char debugPrintBuffer[MAX_DEBUG_BYTES]; static uint8_t debugDataBuffer[MAX_DEBUG_BYTES]; #ifdef SL_RAIL_UTIL_EFF_DEVICE -static const char *effCalNames[] = RAIL_EFF_CAL_ENUM_NAMES; +static const char *effModeSensorNames[] = RAIL_EFF_MODE_SENSOR_ENUM_NAMES; #endif /* @@ -284,9 +286,9 @@ void getThermistorImpedance(sl_cli_command_arg_t *args) #endif } +#if RAIL_SUPPORTS_HFXO_COMPENSATION void getHFXOPPMError(sl_cli_command_arg_t *args) { -#if RAIL_SUPPORTS_EXTERNAL_THERMISTOR RAIL_Status_t status; CHECK_RAIL_HANDLE(sl_cli_get_command_string(args, 0)); @@ -304,12 +306,8 @@ void getHFXOPPMError(sl_cli_command_arg_t *args) } else { responsePrintError(sl_cli_get_command_string(args, 0), 0xFF, "Thermistor measurement error."); } -#else - responsePrintError(sl_cli_get_command_string(args, 0), 0xFF, "Feature not supported in this target."); -#endif } -#if RAIL_SUPPORTS_HFXO_COMPENSATION void configHFXOCompensation(sl_cli_command_arg_t *args) { // Get current config @@ -414,7 +412,7 @@ void compensateHFXO(sl_cli_command_arg_t *args) responsePrintError(sl_cli_get_command_string(args, 0), 0xFF, "Compensation:Disabled"); } } -#endif +#endif // RAIL_SUPPORTS_HFXO_COMPENSATION void configThermalProtection(sl_cli_command_arg_t *args) { @@ -516,47 +514,6 @@ void getTemperature(sl_cli_command_arg_t *args) #endif } -void getSetFemProtectionConfig(sl_cli_command_arg_t *args) -{ -#ifdef SL_RAIL_UTIL_EFF_DEVICE - if (SL_RAIL_UTIL_EFF_DEVICE != RAIL_EFF_DEVICE_NONE) { - RAIL_Status_t status = RAIL_STATUS_NO_ERROR; - - // Only update protection configuration if an argument is given, - // otherwise print the current configuration - if (sl_cli_get_argument_count(args) > 0) { - femConfig.txDutyCycle = sl_cli_get_argument_uint32(args, 0); - - if (sl_cli_get_argument_count(args) > 1) { - femConfig.PMaxContinuousTx = sl_cli_get_argument_uint32(args, 1); - } - - if (sl_cli_get_argument_count(args) > 2) { - // Reset the configuration - (void) RAIL_SetFemProtectionConfig(railHandle, NULL); - } else { - // Check and possibly apply the configuration - (void) RAIL_SetFemProtectionConfig(railHandle, &femConfig); - } - } - - // Get FEM parameters after update - status = RAIL_GetFemProtectionConfig(railHandle, &femConfig); - - if (status == RAIL_STATUS_NO_ERROR) { - responsePrint(sl_cli_get_command_string(args, 0), - "TxDutyCycle:%u,PMaxContinuousTx:%d", - femConfig.txDutyCycle, femConfig.PMaxContinuousTx); - } else { - responsePrintError(sl_cli_get_command_string(args, 0), 31, - "Incorrect configuration"); - } - } -#else - responsePrintError(sl_cli_get_command_string(args, 0), 0xFF, "Feature not supported in this target."); -#endif // SL_RAIL_UTIL_EFF_DEVICE -} - void getSetEffControl(sl_cli_command_arg_t *args) { #ifdef SL_RAIL_UTIL_EFF_DEVICE @@ -779,32 +736,32 @@ void getSetClpcFastLoop(sl_cli_command_arg_t *args) #ifdef SL_RAIL_UTIL_EFF_DEVICE if (SL_RAIL_UTIL_EFF_DEVICE != RAIL_EFF_DEVICE_NONE) { bool changeValues = false; - uint16_t newTargetFsk; - uint16_t newSlopeFsk; - uint16_t newTargetOfdm; - uint16_t newSlopeOfdm; + RAIL_EffModeSensor_t modeSensorIndex = RAIL_EFF_MODE_SENSOR_FSK_ANTV; + uint16_t newTargetMv = 0; + uint16_t newSlopeMvPerPaLevel = 0; - if (sl_cli_get_argument_count(args) > 3) { + if (sl_cli_get_argument_count(args) > 2) { + modeSensorIndex = sl_cli_get_argument_int16(args, 0); changeValues = true; - newTargetFsk = sl_cli_get_argument_uint16(args, 0); - newSlopeFsk = sl_cli_get_argument_uint16(args, 1); - newTargetOfdm = sl_cli_get_argument_uint16(args, 2); - newSlopeOfdm = sl_cli_get_argument_uint16(args, 3); + newTargetMv = sl_cli_get_argument_uint16(args, 1); + newSlopeMvPerPaLevel = sl_cli_get_argument_uint16(args, 2); + } else if (sl_cli_get_argument_count(args) > 0) { + modeSensorIndex = sl_cli_get_argument_int16(args, 0); + } else { + // MISRA compliance } CHECK_RAIL_HANDLE(sl_cli_get_command_string(args, 0)); - RAIL_Status_t status = RAIL_GetSetClpcFastLoop(railHandle, &newTargetFsk, &newSlopeFsk, &newTargetOfdm, &newSlopeOfdm, changeValues); + RAIL_Status_t status = RAIL_GetSetClpcFastLoop(railHandle, modeSensorIndex, &newTargetMv, &newSlopeMvPerPaLevel, changeValues); if (status == RAIL_STATUS_NO_ERROR) { responsePrintStart(sl_cli_get_command_string(args, 0)); - responsePrintEnd("EFF CLPC FSK fast loop target (millivolts):%d," - "EFF CLPC FSK fast loop slope (millivolts/raw level):%d," - "EFF CLPC OFDM fast loop target (millivolts):%d," - "EFF CLPC OFDM fast loop slope (millivolts/raw level):%d", - newTargetFsk, - newSlopeFsk, - newTargetOfdm, - newSlopeOfdm + responsePrintEnd("Mode Sensor Index:%s," + "EFF CLPC target (millivolts):%d," + "EFF CLPC slope (millivolts/raw level):%d", + effModeSensorNames[modeSensorIndex], + newTargetMv, + newSlopeMvPerPaLevel ); } else { responsePrintError(sl_cli_get_command_string(args, 0), 0xFF, "Could not get CLPC fast loop values."); @@ -820,38 +777,40 @@ void getSetClpcFastLoopCal(sl_cli_command_arg_t *args) #ifdef SL_RAIL_UTIL_EFF_DEVICE if (SL_RAIL_UTIL_EFF_DEVICE != RAIL_EFF_DEVICE_NONE) { bool changeValues = false; - RAIL_EffCalConfigEnum_t calibrationIndex = RAIL_EFF_CAL_FSK_1; + RAIL_EffModeSensor_t modeSensorIndex = RAIL_EFF_MODE_SENSOR_FSK_ANTV; RAIL_EffCalConfig_t calibrationEntry; if (sl_cli_get_argument_count(args) > 4) { changeValues = true; - calibrationIndex = sl_cli_get_argument_int16(args, 0); + modeSensorIndex = sl_cli_get_argument_int16(args, 0); calibrationEntry.cal1Ddbm = sl_cli_get_argument_int16(args, 1); - calibrationEntry.cal1 = sl_cli_get_argument_int16(args, 2); + calibrationEntry.cal1Mv = sl_cli_get_argument_int16(args, 2); calibrationEntry.cal2Ddbm = sl_cli_get_argument_int16(args, 3); - calibrationEntry.cal2 = sl_cli_get_argument_int16(args, 4); + calibrationEntry.cal2Mv = sl_cli_get_argument_int16(args, 4); } else if (sl_cli_get_argument_count(args) > 0) { - calibrationIndex = sl_cli_get_argument_int16(args, 0); + modeSensorIndex = sl_cli_get_argument_int16(args, 0); + } else { + // MISRA compliance } CHECK_RAIL_HANDLE(sl_cli_get_command_string(args, 0)); RAIL_Status_t status = RAIL_GetSetClpcFastLoopCal(railHandle, - calibrationIndex, + modeSensorIndex, &calibrationEntry, changeValues); if (status == RAIL_STATUS_NO_ERROR) { responsePrintStart(sl_cli_get_command_string(args, 0)); - responsePrintEnd("Cal Index:%s," + responsePrintEnd("Mode Sensor Index:%s," "Cal 1 ddBm:%d," "Cal 1 millivolts:%d," "Cal 2 ddBm:%d," - "Cal 2 AUXADC counts:%d", - effCalNames[calibrationIndex], + "Cal 2 millivolts:%d", + effModeSensorNames[modeSensorIndex], calibrationEntry.cal1Ddbm, - calibrationEntry.cal1, + calibrationEntry.cal1Mv, calibrationEntry.cal2Ddbm, - calibrationEntry.cal2 + calibrationEntry.cal2Mv ); } else { responsePrintError(sl_cli_get_command_string(args, 0), 0xFF, "Could not get CLPC fast loop cal values."); @@ -866,34 +825,36 @@ void getSetClpcFastLoopCalSlp(sl_cli_command_arg_t *args) { #ifdef SL_RAIL_UTIL_EFF_DEVICE if (SL_RAIL_UTIL_EFF_DEVICE != RAIL_EFF_DEVICE_NONE) { - RAIL_EffCalConfigEnum_t calibrationIndex = RAIL_EFF_CAL_FSK_1; - int16_t newSlope1e1; - int16_t newoffset290Ddbm; bool changeValues = false; + RAIL_EffModeSensor_t modeSensorIndex = RAIL_EFF_MODE_SENSOR_FSK_ANTV; + int16_t newSlope1e1MvPerDdbm; + int16_t newoffset290Ddbm; if (sl_cli_get_argument_count(args) > 2) { changeValues = true; - calibrationIndex = sl_cli_get_argument_int16(args, 0); - newSlope1e1 = sl_cli_get_argument_int16(args, 1); + modeSensorIndex = sl_cli_get_argument_int16(args, 0); + newSlope1e1MvPerDdbm = sl_cli_get_argument_int16(args, 1); newoffset290Ddbm = sl_cli_get_argument_int16(args, 2); } else if (sl_cli_get_argument_count(args) > 0) { - calibrationIndex = sl_cli_get_argument_int16(args, 0); + modeSensorIndex = sl_cli_get_argument_int16(args, 0); + } else { + // MISRA compliance } CHECK_RAIL_HANDLE(sl_cli_get_command_string(args, 0)); RAIL_Status_t status = RAIL_GetSetClpcFastLoopCalSlp(railHandle, - calibrationIndex, - &newSlope1e1, + modeSensorIndex, + &newSlope1e1MvPerDdbm, &newoffset290Ddbm, changeValues); if (status == RAIL_STATUS_NO_ERROR) { responsePrintStart(sl_cli_get_command_string(args, 0)); - responsePrintEnd("Cal Index:%s," + responsePrintEnd("Mode Sensor Index:%s," "Cal Slope * 10:%d," "Cal Offset at 290 ddBm:%d", - effCalNames[calibrationIndex], - newSlope1e1, + effModeSensorNames[modeSensorIndex], + newSlope1e1MvPerDdbm, newoffset290Ddbm ); } else { @@ -934,6 +895,36 @@ void getSetClpcEnable(sl_cli_command_arg_t *args) #endif // SL_RAIL_UTIL_EFF_DEVICE } +void getSetEffClpcFlags(sl_cli_command_arg_t *args) +{ +#ifdef SL_RAIL_UTIL_EFF_DEVICE + if (SL_RAIL_UTIL_EFF_DEVICE != RAIL_EFF_DEVICE_NONE) { + uint8_t flags; + bool change = false; + + // Only update flags if argument is given, + // otherwise print the current configuration + if (sl_cli_get_argument_count(args) == 1) { + // Set flags to first argument + flags = sl_cli_get_argument_uint8(args, 0); + change = true; + } + RAIL_Status_t status = RAIL_GetSetEffClpcFlags(railHandle, &flags, change); + + if (status == RAIL_STATUS_NO_ERROR) { + responsePrintStart(sl_cli_get_command_string(args, 0)); + responsePrintEnd("EFF Flags:0x%x", + flags + ); + } else { + responsePrintError(sl_cli_get_command_string(args, 0), 0xFF, "Could not get EFF flags."); + } + } +#else + responsePrintError(sl_cli_get_command_string(args, 0), 0xFF, "Feature not supported in this target."); +#endif // SL_RAIL_UTIL_EFF_DEVICE +} + void getSetEffTempThreshold(sl_cli_command_arg_t *args) { #ifdef SL_RAIL_UTIL_EFF_DEVICE @@ -1170,6 +1161,10 @@ static void setOfdmPrsSignal(uint8_t *signal, uint32_t ofdmSignalIndex, char *pi break; default: + // RAIL_LIB-9407: we can't end up here because ofdmSignalIndex is + // provided by getAvailableOfdmPrsSignalIndex(), so it is between 0 and + // OFDM_PRS_SIGNAL_COUNT. Return to prevent build warnings. + return; break; } *prsmuxlsbSetAddress = (*signal << (ofdmSignal * PRSMUXLSB_FIELD_SIZE)); @@ -1206,6 +1201,9 @@ static void clearOfdmPrsSignal(char *pinName) break; default: + // RAIL_LIB-9407: we can't end up here because i is between 0 and + // OFDM_PRS_SIGNAL_COUNT. Return to prevent build warnings. + return; break; } *prsmuxlsbClrAddress = (PRSMUXLSB_FIELD_MASK << (ofdmSignal * PRSMUXLSB_FIELD_SIZE)); diff --git a/platform/radio/rail_lib/apps/railtest/app_ci/trx_ci.c b/platform/radio/rail_lib/apps/railtest/app_ci/trx_ci.c index a83d7580b58..444015af6f8 100644 --- a/platform/radio/rail_lib/apps/railtest/app_ci/trx_ci.c +++ b/platform/radio/rail_lib/apps/railtest/app_ci/trx_ci.c @@ -479,17 +479,6 @@ void setTxStream(sl_cli_command_arg_t *args) } streamMode = stream; enableAppMode(TX_STREAM, enable, sl_cli_get_command_string(args, 0)); - -#ifdef SL_RAIL_UTIL_EFF_DEVICE - // Check if EFF supports Tx - if (RAIL_EFF_SUPPORTS_TRANSMIT(SL_RAIL_UTIL_EFF_DEVICE)) { - /* If configured power is higher than RAIL_UTIL_EFF_MAX_TX_CONTINUOUS_POWER_DBM - then it is limited to that latter */ - responsePrint("Warning", - "Messsage:FEM used so power is limited to %d dBm", - femConfig.PMaxContinuousTx); - } -#endif } void configDirectMode(sl_cli_command_arg_t *args) diff --git a/platform/radio/rail_lib/apps/railtest/app_ci/zwave_ci.c b/platform/radio/rail_lib/apps/railtest/app_ci/zwave_ci.c index 7d5fb438aab..edb5fe1e3d6 100644 --- a/platform/radio/rail_lib/apps/railtest/app_ci/zwave_ci.c +++ b/platform/radio/rail_lib/apps/railtest/app_ci/zwave_ci.c @@ -135,11 +135,14 @@ void zwaveStatus(sl_cli_command_arg_t *args) responsePrint(sl_cli_get_command_string(args, 0), "ZWAVE:%s," "Promiscuous:%s," - "BeamDetect:%s", + "BeamDetect:%s," + "PromiscuousBeam:%s", enabled ? "Enabled" : "Disabled", ((config.options & RAIL_ZWAVE_OPTION_PROMISCUOUS_MODE) != 0U) ? "Enabled" : "Disabled", ((config.options & RAIL_ZWAVE_OPTION_DETECT_BEAM_FRAMES) != 0U) + ? "Enabled" : "Disabled", + ((config.options & RAIL_ZWAVE_OPTION_PROMISCUOUS_BEAM_MODE) != 0U) ? "Enabled" : "Disabled"); } @@ -191,7 +194,8 @@ void zwaveConfigureOptions(sl_cli_command_arg_t *args) "Promiscuous:%s," "BeamDetect:%s," "NodeIDFiltering:%s," - "AutoAck:%s", + "AutoAck:%s," + "PromiscuousBeam:%s", ((config.options & RAIL_ZWAVE_OPTION_PROMISCUOUS_MODE) != 0U) ? "Enabled" : "Disabled", ((config.options & RAIL_ZWAVE_OPTION_DETECT_BEAM_FRAMES) != 0U) @@ -200,6 +204,8 @@ void zwaveConfigureOptions(sl_cli_command_arg_t *args) ? "Enabled" : "Disabled", (config.ackConfig.enable && (config.options & RAIL_ZWAVE_OPTION_NODE_ID_FILTERING) != 0U) + ? "Enabled" : "Disabled", + ((config.options & RAIL_ZWAVE_OPTION_PROMISCUOUS_BEAM_MODE) != 0U) ? "Enabled" : "Disabled"); } @@ -364,7 +370,7 @@ void RAILCb_ZWAVE_BeamFrame(RAIL_Handle_t railHandle) != RAIL_STATUS_NO_ERROR)) { return; } - + (void)RAIL_ZWAVE_GetBeamHomeIdHash(railHandle, &beamPacket->beamPacket.beamHomeIdHash); (void)RAIL_ZWAVE_GetLrBeamTxPower(railHandle, &beamPacket->beamPacket.lrBeamTxPower); (void)RAIL_ZWAVE_GetBeamChannelIndex(railHandle, &beamPacket->beamPacket.channelIndex); (void)RAIL_ZWAVE_GetBeamRssi(railHandle, &beamPacket->beamPacket.beamRssi); diff --git a/platform/radio/rail_lib/apps/railtest/app_common.h b/platform/radio/rail_lib/apps/railtest/app_common.h index 3f6c7b10728..b7281344cdc 100644 --- a/platform/radio/rail_lib/apps/railtest/app_common.h +++ b/platform/radio/rail_lib/apps/railtest/app_common.h @@ -146,6 +146,9 @@ extern "C" { "IEEE802154_MODESWITCH_END", \ "DETECT_RSSI_THRESHOLD", \ "THERMISTOR_DONE", \ + "TX_BLOCKED_TOO_HOT", \ + "TEMPERATURE_TOO_HOT", \ + "TEMPERATURE_COOL_DOWN", \ } // Since channel hopping is pretty space intensive, put some limitations on it @@ -256,6 +259,10 @@ typedef struct ZWaveBeamData { * RSSI at which the beam was received. */ int8_t beamRssi; + /** + * The HomeIdhash contained in the received beam. + */ + uint8_t beamHomeIdHash; } ZWaveBeamData_t; typedef struct RxPacketData { @@ -532,11 +539,6 @@ extern uint32_t* channelHoppingBuffer; // Variable containing current receive frequency offset extern RAIL_FrequencyOffset_t rxFreqOffset; -#ifdef SL_RAIL_UTIL_EFF_DEVICE -// Variable tracking FEM configuration -extern RAIL_FemProtectionConfig_t femConfig; -#endif - // Variables tracking the compensation mode extern bool isHFXOCompensationSystematic; diff --git a/platform/radio/rail_lib/apps/railtest/app_main.c b/platform/radio/rail_lib/apps/railtest/app_main.c index c09bc07dc7d..c96a4eeb8d2 100644 --- a/platform/radio/rail_lib/apps/railtest/app_main.c +++ b/platform/radio/rail_lib/apps/railtest/app_main.c @@ -79,7 +79,7 @@ #include "sl_rail_util_timing_test.h" #endif -_Static_assert(sizeof(RailAppEvent_t) <= 40, +_Static_assert(sizeof(RailAppEvent_t) <= 44, "Adjust BUFFER_POOL_ALLOCATOR_BUFFER_SIZE_MAX per sizeof(RailAppEvent_t) growth"); // Includes for Silicon Labs-only, internal testing @@ -187,7 +187,11 @@ static volatile bool calibrateRadio = false; bool volatile newTxError = false; static volatile bool rxAckTimeout = false; static volatile uint32_t ackTimeoutDuration = 0; +#ifdef SL_CATALOG_RAIL_UTIL_EFF_PRESENT +RAIL_Events_t enablePrintEvents = RAIL_EVENT_TX_BLOCKED_TOO_HOT; +#else RAIL_Events_t enablePrintEvents = RAIL_EVENTS_NONE; +#endif bool printRxErrorPackets = false; bool printRxFreqOffsetData = false; bool printingEnabled = RAIL_PRINTING_DEFAULT_BOOL; @@ -937,6 +941,15 @@ void sl_rail_util_on_event(RAIL_Handle_t railHandle, RAIL_Events_t events) sl_bt_ll_coex_handle_events(events); } #endif //SL_CATALOG_RAIL_UTIL_COEX_PRESENT +#ifdef SL_CATALOG_RAIL_UTIL_EFF_PRESENT + if (events & RAIL_EVENT_TX_BLOCKED_TOO_HOT) { + if (currentAppMode() == TX_STREAM) { + // If this event is triggered when app is in stream mode, it needs to be stopped + // Then make app transition to idle + enableAppMode(TX_STREAM, false, NULL); + } + } +#endif } volatile bool allowPowerManagerSleep = false; @@ -1324,15 +1337,17 @@ void printPacket(char *cmdName, responsePrintStart(cmdName); if (packetData != NULL) { responsePrintContinue( - "len:%d,timeUs:%u,timePos:%u,crc:%s,filterMask:0x%x,rssi:%d,lqi:%d,phy:%d", + "len:%d,timeUs:%u,timePos:%u,DurationUs:%u,crc:%s,filterMask:0x%x,rssi:%d,lqi:%d,phy:%d", packetData->dataLength, packetData->appendedInfo.timeReceived.packetTime, packetData->appendedInfo.timeReceived.timePosition, + packetData->appendedInfo.timeReceived.packetDurationUs, (packetData->appendedInfo.crcPassed) ? "Pass" : "Fail", packetData->filterMask, packetData->appendedInfo.rssi, packetData->appendedInfo.lqi, packetData->appendedInfo.subPhyId); + responsePrintContinue( "isAck:%s,syncWordId:%d,antenna:%d,channelHopIdx:%d,channel:%u", packetData->appendedInfo.isAck ? "True" : "False", diff --git a/platform/radio/rail_lib/apps/railtest/app_trx.c b/platform/radio/rail_lib/apps/railtest/app_trx.c index 36287ffedcd..99f4addcfb8 100644 --- a/platform/radio/rail_lib/apps/railtest/app_trx.c +++ b/platform/radio/rail_lib/apps/railtest/app_trx.c @@ -79,14 +79,6 @@ bool rxFifoManual = false; // To enable power manager sleep from the main loop. extern volatile bool allowPowerManagerSleep; -// Used to track the FEM protection configuration -#ifdef SL_RAIL_UTIL_EFF_DEVICE -RAIL_FemProtectionConfig_t femConfig = { - .PMaxContinuousTx = RAIL_UTIL_EFF_MAX_TX_CONTINUOUS_POWER_DBM, - .txDutyCycle = RAIL_UTIL_EFF_MAX_TX_DUTY_CYCLE -}; -#endif - /****************************************************************************** * Static *****************************************************************************/ diff --git a/platform/radio/rail_lib/apps/railtest/railtest_helpers.c b/platform/radio/rail_lib/apps/railtest/railtest_helpers.c index ee37e9d1e06..518b69e5c79 100644 --- a/platform/radio/rail_lib/apps/railtest/railtest_helpers.c +++ b/platform/radio/rail_lib/apps/railtest/railtest_helpers.c @@ -195,8 +195,12 @@ void printRailAppEvents(void) &railtestEvent->rxPacket); } else if (railtestEvent->type == BEAM_PACKET) { // Now print the most recent packet we may have received in Z-Wave mode - responsePrint("ZWaveBeamFrame", "nodeId:0x%x,channelHopIdx:%d,lrBeam:%s,lrBeamTxPower:%d,beamRssi:%d", - railtestEvent->beamPacket.nodeId, railtestEvent->beamPacket.channelIndex, + responsePrint("ZWaveBeamFrame", + "nodeId:0x%x,beamHomeIdHash:0x%x," + "channelHopIdx:%d,lrBeam:%s,lrBeamTxPower:%d,beamRssi:%d", + railtestEvent->beamPacket.nodeId, + railtestEvent->beamPacket.beamHomeIdHash, + railtestEvent->beamPacket.channelIndex, (railtestEvent->beamPacket.lrBeamTxPower == RAIL_ZWAVE_LR_BEAM_TX_POWER_INVALID) ? "No" : "Yes", railtestEvent->beamPacket.lrBeamTxPower, diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111a256v2_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111a256v2_gcc.a index a37c3857515..1d49f9ff5f6 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111a256v2_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111a256v2_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce97cb46299a7bab7c21f0106da4b1708e5bb64fb1d3a6c2068ece118b74fad5 +oid sha256:dc7a9d6aa096ba9a972f3bdf2c3729ea44eae9ab7af4e9b1cd7c6f6529681f1e size 51842 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111a256v2_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111a256v2_iar.a index 953eb7e4605..50119f692ff 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111a256v2_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111a256v2_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c315612631218018fefcd9cbd7304d095ea7a16c663b8f78274f324dd4c018aa +oid sha256:8f58b366f35f49d334fbf21ff82b23ea6a7e011b1a67f5a6eda047e72c45b8f4 size 36132 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111e256v2_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111e256v2_gcc.a index 3c113ae2ffb..d59160cc98e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111e256v2_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111e256v2_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18153bc6dc53360de44392976a2fb005fcb919f17c96b4f806ea6fda4af7f2d0 +oid sha256:c7fd54a6d8d20d6f255ea40f3a13722f249d44d86ba43328cd6abf86ddab8389 size 51842 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111e256v2_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111e256v2_iar.a index 5fadae726df..2f83dd94add 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111e256v2_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm111e256v2_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bed8202cbee1893ed3212bc7ef71328d4ccd3d2efa1f404e8e40f282584d43da +oid sha256:caa02901a114da505e07a779f3ee7e0c2ae1d8f41e57d32672734700b4986be9 size 36132 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm113a256v2_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm113a256v2_gcc.a index dd802e03eae..79b5ca31e92 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm113a256v2_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm113a256v2_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:46fd916573e6ff076702ac79f5c949952072733fae5a0369c29c82acad52c845 +oid sha256:be84be4072baad84edc4e117ac2aed77a978352914d5a55f3dd7f252dc1e1291 size 51842 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm113a256v2_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm113a256v2_iar.a index 204dd822627..936c73978cf 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm113a256v2_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm113a256v2_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b5e2d228698c344df45f8e53ee0dbff8472d2aa18aae8380c470bf8385c1f80 +oid sha256:5ea92784a2cdb64446c8c4a9a1fbf614ebb45ea352bd99cd85e5fb1fe86b8adb size 36132 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s12f256ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s12f256ga_gcc.a index db867fc90f8..da0e2c3242d 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s12f256ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s12f256ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:afc1ecce2d710937c7775ec6ac71b506df3f745c42f4fbecd64cd494afc78301 +oid sha256:ff59904bc9a7cbb5985665e0b7d4bac07132c04bdcee2f131d09ae0b5a8c26d8 size 51850 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s12f256ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s12f256ga_iar.a index fc4a5bd8328..57e1e62aee7 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s12f256ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s12f256ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:914b282c5d4a76d98848a6e5d7c9a59cbf964faa45331c3bcd8477065800026a +oid sha256:933f0b82c9352700b7eb22022692d964d291d0b793bda5fdf300da96cf41a685 size 36158 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s22f256ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s22f256ga_gcc.a index 07225a90256..c018767e627 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s22f256ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s22f256ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d757cbb9a7ebd011861ece885cced1674db4ad2c1a2f667dc930cf869ee16dc5 +oid sha256:3824a02d08c8f43d783bc394d4580fc9df829babe9c25fe638aba9903182e0c8 size 51850 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s22f256ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s22f256ga_iar.a index 783eb67fa27..7241c5426c2 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s22f256ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm11s22f256ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4cb8edff954a1a615cb03b30b6395e94c399e0185e41ceb9d0b3eb244810909 +oid sha256:1dfe790d5c80839b0c5086f9aefd36dec7e01816117880560df88f78536321fc size 36158 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121a256v2_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121a256v2_gcc.a index 7b8bf2fe2b7..1dd1691909a 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121a256v2_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121a256v2_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efa098e7f467ce3b922303becf222a813c427c0f278d17487cc34ea0df34ba7e +oid sha256:5ecad2f790fcf7300b8ce38a284466fee0b624f6cf3bee8eed8c384074de2084 size 51842 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121a256v2_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121a256v2_iar.a index 21b3e9af851..ad7d6a69502 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121a256v2_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121a256v2_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bded4e167227c38a56cba5424c9babf61f069f8447c90440be9962cd6f0b156b +oid sha256:82774b75a8a493484cadacdb5ae0034927c91a9349f7f233a7fefb5f9e8e8a52 size 36132 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121n256v2_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121n256v2_gcc.a index 3282ff7cfa2..3dcc2b9f565 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121n256v2_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121n256v2_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31bf02217b032c30b9accb26f700f3065bd5f389759499b6f2b59c13b7907f21 +oid sha256:424da4480e75407a06531707027950ccf730bdfa54301ae712e3226846fe8c05 size 51842 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121n256v2_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121n256v2_iar.a index 8e6975341a9..1d39b2988b2 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121n256v2_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm121n256v2_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4a981f85bbb080e6c3f1c684a6ac777c0e8d18a8dbea8783727167ee0e8b2af +oid sha256:85effc0343f6a79e5fbefc67972a61c79b57b8bbd816426e6795d6df77298a0e size 36132 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123a256v2_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123a256v2_gcc.a index 31a9552bbc7..e6fcdab5385 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123a256v2_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123a256v2_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08261dbb6365bc0a7a56cf6b6d595b192780a4e3d7e33bd23ebdccad9f352414 +oid sha256:0ceba8882d8902b43ef8b77eea57d4bc308090b49455fb4f9a97c394e7112d49 size 51842 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123a256v2_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123a256v2_iar.a index a0a1b10a257..4884e0e9bb9 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123a256v2_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123a256v2_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ebcaaa71c8da2cd5e7e64351e74921cf1b68620e135ffd097d16671677b9579 +oid sha256:a8a0ae2c3ec218b102fc8ee4f0649b8bc0a423477f8cc1aae812803bd4e8919b size 36132 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123n256v2_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123n256v2_gcc.a index c7af938bfb4..0d3a3e6ddee 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123n256v2_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123n256v2_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2ea4dda3d7f42a392110d47859d37b05db7f935bbfe51456e65f116f087481c +oid sha256:89bfbdf96c43d0cfeb3cc4befda273934aff18e0bb6fd2e8f2dabc643d01894b size 51842 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123n256v2_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123n256v2_iar.a index feeda5fb617..42e23ff1d47 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123n256v2_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm123n256v2_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b2d6ee71703800bcd01d57ba0a3a39d6a42bed5420fb9e0481d5cc9ec0259150 +oid sha256:ed2c346fa17c84f944ba6cfed3ff3ffade784695780aee51ac2c95158b4138f4 size 36132 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ga_gcc.a index b2455f87825..2a91967b905 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11c3ae7fd80d944debce4efaff406c73a8c461c0a7f36af5f7b54609e95344b3 +oid sha256:e6bc4635717cd171c3722bd43034c2fe601e39e9ef6652ae62a61e6745a5a9bb size 56310 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ga_iar.a index 46d1989d425..49b5508cb8f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:50f5d2842a063dc72bb45f258af82bd90aaa9647ac862aea9083d3c44fed9459 +oid sha256:f9da117b4ff4eb1039fdec2d947227afc5e35750d8f50f50765c20dd2ebf776d size 39380 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ge_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ge_gcc.a index c4f5699ec17..d1dca771ce3 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ge_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ge_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d9a4f4cccab9260f27e39775f86d405ddc55be9b6f66554cc28ba34427b7c48 +oid sha256:4e4aa85d617e5b5d2b34b226ba763a172df3ba819a6a9b656f12f15d5904dabf size 56310 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ge_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ge_iar.a index 4899a9bb994..87a0289d640 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ge_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p22f512ge_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b4c6b75ab45f16d523bb8c61c193c52019ac6a0a0b8e1a0e89d12d34aac838e +oid sha256:53239cee4884d87546f259ccbed9dda310e2cced24f202750a2ca835ef5dc963 size 39380 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ga_gcc.a index 0651fc6e837..62d97741692 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52108cc0f634733f14451650b4d6e7c8b98bc383136ac870eaae9b5181ccfcb3 +oid sha256:40a54e3f0a176575190067bee853a6bb2d5b40a520044aa8e4764203e4a93cb7 size 56310 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ga_iar.a index af6e5024f6d..4e3a072ebe8 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4844d4ae30ad5eaf3e29398ed77a6e868ea4d403e8e722838f368f69a50633be +oid sha256:c539e78159c0ce82eed0aa2731f16e4492c7202fd5003a5b494274fb74a8cd31 size 39380 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ge_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ge_gcc.a index 1174e8c5d8d..15fdb1cfd57 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ge_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ge_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cac8ce53b27790f9e97559b4660443201ebb4da58f54fc0d606ee1e58afd8796 +oid sha256:8ddcac6db08640ecfea4a00f9265b75b2ab58f7ab39c18106810f465dcbf18df size 56310 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ge_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ge_iar.a index b6d41d9e40a..b1d79c49692 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ge_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13p32f512ge_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b064b8d675f74d6635d29992f1553808b8bb8c86ac7dc6d6a90ed36f988ab613 +oid sha256:184817b1b33eb49c41ded71a69ee1303c4ef30b0242bc186f7785e5ba8e3bb10 size 39380 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512ga_gcc.a index cbe9d7b3976..cfb180614f8 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9426b9e9a487a21684da3774021a5feef059cdbcc0488eb4be350ccae634b14d +oid sha256:919ab04aa1cc516ab915d6cbddfa21a4442f5bf534ecb409f09becbab333c311 size 56310 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512ga_iar.a index 094468a21e0..ea2d86b7a8d 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56f6bca5322696b188db24f1d79b46ed356ad2ba86af1d9e1701be3c5cba5b16 +oid sha256:a0dd15c28570683c05c5dce908c663a941d45ec21768c483788db7538f6259b4 size 39380 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512gn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512gn_gcc.a index 94399725113..334e756b5c0 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512gn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512gn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c8e190533856503180e9014e1803b991ee75ee12c5b9c04bf69dd9753ff3792 +oid sha256:12aadaac364eaf6c6e5b01d9043de22ed5b3b3f396213ecd8b859cbef3201fc1 size 56310 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512gn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512gn_iar.a index d56d89c336a..fdad6f6049f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512gn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s22f512gn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28b2540fae87b1d216d89c4aa6aa017c000a0312f36a1745d4c437e3e88eb463 +oid sha256:a36227e102909c11289fc33a3305eebb18be7b0b14f525e5cad8b859f5d7a89e size 39380 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512ga_gcc.a index f5f50213cf1..4ac25bdb780 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c03efca5b5991fc6645cb5f9b6dc6afd4ff170e77d463d8ef3d4de7f770bd110 +oid sha256:046986b77b61aafe3b0c7d07e963783922da6ac8e409a344ddf07a956629f177 size 56310 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512ga_iar.a index eb852f40e23..e82d5e9d4d1 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89ac4a47da273a3ebcbd54f3d20629a82f6b6c4f0689b9492c6536f716736842 +oid sha256:b55fcf02fcdf48f7b30f2619ad8fd1263a477fcc3443a5285c347821ad12b7e0 size 39380 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512gn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512gn_gcc.a index 26733c34181..2cb9cbb06ff 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512gn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512gn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d59dc1940da29a1d2ee4975fba6c9906d89845d7dc100f083473beaf1423d223 +oid sha256:8d6713d2bb4f43c31c7631d142e0f2ba163f9a2bf5e7b9f597761b1e52e487da size 56310 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512gn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512gn_iar.a index 4d8f83e1d19..0a46b0482d8 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512gn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm13s32f512gn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb1454beb15a2050055f2359c37d03c76d46df9be1171d4eab8d60e40f0043bf +oid sha256:a5b19c8cc3f6c4e45c4f2d14f759fd94fbba905abe164316f8fc00cc861d943d size 39380 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jif_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jif_gcc.a index 35208d2e774..15c3b7a069a 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jif_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jif_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3dd235542aeaaed06e03d649ae351ec66ee40be0cc1f513be48e703f29da707f +oid sha256:30a3c9af764cae388ee5043a48fca357b8bcd98ab8c214ff07581a771540a464 size 53096 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jif_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jif_iar.a index 3a918abbe79..0cde67b2e53 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jif_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jif_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98b34fe7aa6fca594f83f2cadc78735c5cef2b715e8ee79528031cb6638fa25a +oid sha256:95719d3ee95f7e448d68060ccc60cd6bc31e98306657b270f5b73833a10bb538 size 36702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jnf_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jnf_gcc.a index a729852e1ae..df461100e6d 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jnf_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jnf_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18374226ae1cd4848a52935f45518b6beb1a317d661afe2e3b02b5fd4346ebd1 +oid sha256:598f243f5642cdeefe04057a8e7faf10ddd2636cc8f76da49876b3f55abf0f19 size 53096 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jnf_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jnf_iar.a index deeb3621aa2..c7408329e3d 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jnf_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210l022jnf_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:087e3d40fb09ddb91d6909fc1c988d6821020a08f8ff20415a9a313e0f30d3ec +oid sha256:84f6bc48d352570b9f4c737ed5dc7da0ae9824015ea2443c6469d5dbc6bf1bbd size 36702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jif_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jif_gcc.a index a7e345f33c3..6198c7ccbc5 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jif_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jif_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ea319e1a4736fa66f779086ce15424c0974788c8f1f9673a5181ab60ec7f5ab +oid sha256:efd19a2a56100a9ea4be5299c7b8cf82942b86937519aa16206ada759c23b6d8 size 53096 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jif_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jif_iar.a index a5023fa877d..e30661b5ab4 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jif_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jif_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24d0b0b7025c3ba0c65baafdcd8dff06e5b9fe5a3e07a7af0b8219e1cad359e6 +oid sha256:24a045d43027e301f3400ff347ef7d29ca6f6e66f3ab9d24bd1c1a250f1dd1a2 size 36702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jnf_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jnf_gcc.a index 5dcb42e3d61..a9af851cd2e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jnf_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jnf_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec6a1a07e51dc76074de9df568897434cdb57e938899af59149667f8570df5cd +oid sha256:1133470f7452c4c80d511117eb691c4e9c60d5f715dcc8eea5137e135798d861 size 53096 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jnf_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jnf_iar.a index 8606576795a..7beb4a4c04b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jnf_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210la22jnf_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06fa7bf82ae18ee63a71a4d82432f6915c2b8cb436d962d9b592f68d154a4d78 +oid sha256:00cae4246696ae02006b95fc36994e8cc8d1582af3ef7bcbaa92b8f859630b1c size 36702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jia_gcc.a index 58c64b1d8b9..4d09ef03ff7 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c305e6c0177b2c58b092ef27ca1740e9e581525d73c0ddac3c8e1aa9f9c452b +oid sha256:9840202053d4458ff51913e9e21fecd1317fec80e2afb98633768df0eb7dccb9 size 53096 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jia_iar.a index a1b7d643fb5..1ea9b4e80b2 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:996250ac961708e046180aaf918351243fb251d78b074f4d221c91fac612d2b5 +oid sha256:0ba2b54eec70e51bf9a63deab3aa8fcaf9b8380422894306b4cae9e0a1c894fd size 36702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jna_gcc.a index c8ff05c5041..704bb6d5faa 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ecadcf193705feb0cd066e46e45477f035991571a16e91735252575c77ec1d2 +oid sha256:370cefe6cc2141e20a18eb534f0027799dd1943304c6fa0c2d5d916e263f21c4 size 53096 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jna_iar.a index 4971c801da3..c08ad8d1148 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p022jna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:308aaf910feb9447bde0d5173ecb16eb3df2f6ba1727a8a256fb97334bfeb9fc +oid sha256:4a75ba85ff3b0e14832501a3d787b258ad17a38062443ba50ab1b0f7a80666a2 size 36702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jia_gcc.a index e9b44acf848..6c5264a3c07 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f723504bb73c2a30a636dca1ea10a46a27e77f89f1c9989475253a6d8cce85c +oid sha256:920f11463a2cf03fcc332f8690eea06d6e14560da8e9b3e43594ec61ea3ea5d5 size 53224 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jia_iar.a index f42c0dbb976..734b7d4d03b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ddb0ae359174e99dc8e7c157906bfa031aaaacbdf5852e23d2ce1fca4a46d50b +oid sha256:137094f0e60d927ea37486aabde63b58073027ef88435119ba36e040d1cc6bcd size 36966 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jna_gcc.a index 3325449968c..937eb96a35b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d054d95af1e1aba1a412d76c128c21d6a7e45866f39cb96da11c1af51da8dbe +oid sha256:40b2de9deb5f623b040b4bc4c80618a509e603556760c5c85ba15b3490689ccd size 53224 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jna_iar.a index ef84f3b3fbb..55ff3791c73 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210p032jna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e87ee5966e217d17cbe5df97185d23fac0294e1bb258034668e55af3db5d433a +oid sha256:ae5ad18be7d2468907cf3fbbc0eff283ac0767ad5f8d8652bbc51b46b23203f3 size 36966 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jia_gcc.a index 2971806c6ee..567ae1e49d2 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1dd7848ddc0d651d89dbb6a3940d0396cefb89a0900695765ee57d2b1d1dabe +oid sha256:b7f3fce08dd54f37ba1634e052eef29052e00079e1ecea1c3f94292f076584be size 53096 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jia_iar.a index 9c35a47a1f8..5c4bb2a28f3 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92ba1ae69b8dbcf00bd0eb22958985769467a0691ffce6907594d13623c26815 +oid sha256:82bc8621f01c3cb07edcdb2074adc0d19a45c5bd1a2262d77098f5ebcaec79f4 size 36702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jna_gcc.a index 08ddee4abd8..a664b96e593 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:23647bc2dfd2ce6033b8535825ffd6c4b6c95563947f02d10799b3b1094adec7 +oid sha256:dc5b84149f73e638601bb0b612c0147c77c85e1f3cb31dfe2f0f20fdc4026ba4 size 53096 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jna_iar.a index ee09cef338f..66634add4b5 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa22jna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1513aef8433bfeaca386815ae58165275fe348904f6b794281f8948d797ac4f4 +oid sha256:26107dc3ef8a8cb1968de8ca98efab348e59ded93ddd56aa254c09da1eb2b1fe size 36702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jia_gcc.a index d15614682aa..6ec1513685b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9586415e15132f56b8015fb846c100159c7ac3c77c4c9862be39fa9c78ab4a87 +oid sha256:faad3e65ec14c960c0876038c5d349774f2ad42db94d1e42c578eb7f96eda2e1 size 53224 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jia_iar.a index 229d6926439..1e9352fec81 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:488759a5703964aaceb3e49cc7909999345db6d116b3a30a69cf175d4906334e +oid sha256:dac54c7351cfc578c2db2b8ab288c12e37c7e128c48f6da70033191cebef0e7f size 36966 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jna_gcc.a index 18cf33e608a..620758a8beb 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31843bfc3b035475b343b019bd408e3aab609a8758d9d7e56cffd4a2bb6c6e60 +oid sha256:badd78a0e8cb578b1430ad85c65007442f08f3fc8bebeb5f77381187131d51d0 size 53224 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jna_iar.a index d3d9bd76aef..32907edd6e8 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pa32jna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20b1ce1fbd1e1d3f0af556a31046f6eaa1fcb5d81213fa281aad43996373b0d3 +oid sha256:9ffd80263e8e8c69aea052d322f8d4fec8c2cf5f938ed6f8af84be41e4195b71 size 36966 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb22jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb22jia_gcc.a index 761cf81dfaf..9a7269ce762 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb22jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb22jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1084179da1c596dffcf0c08ae0569b9d990976d9ea104cfff56a5d041ed0ba57 +oid sha256:49803bb82ec901bdc0910c5d2d64f8f5bf18aa17a7bec9199d91e5d5813d3c71 size 53096 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb22jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb22jia_iar.a index 7f83c643567..149ccdb6a98 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb22jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb22jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3eee1c67aa53485cef90977846944a4515be1b7f6d3fa3021b1d29d0b1dffed +oid sha256:c095f11d71fff67d1f458480adf2fee87fd75b35b2ab856eb73425f25e1125c5 size 36702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb32jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb32jia_gcc.a index 1042e6881ae..dadf3fa743c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb32jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb32jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:637b4145a2361204b852f9bcb7dc6ea11236a66edf631ee5cdfcaa7545ea2d01 +oid sha256:030fa8c7d2893ec5d5c1e98773a13368ecca21e73558be69ac5f6ba7b91018bd size 53224 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb32jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb32jia_iar.a index fa481cdca59..f2d651eb26e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb32jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm210pb32jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b6daf725f85e3d33e86a1d96ae867d6e0b6a3616f7d3d96412b40fe78d71366 +oid sha256:ec9f6bccec9133a07fced058222aac8eb79630955358a5e3d247a9a009926fd9 size 36966 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22hna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22hna_gcc.a index 2d972cdc57f..c314329f84c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22hna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22hna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dca57ce786237060eeeb8b7390f806de554c4ef273ea0033ceb8112455ee7a16 +oid sha256:b48656a966dfc884fd4c0a90ff7ea1c787ea4045693b1ee99ad429c04e96b652 size 58226 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22hna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22hna_iar.a index 47468686a6f..57fccb466e2 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22hna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22hna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf73d284a3be2fbe4bd58dce5b354c149f27b9b2cc80bae26b6c8d24c92c23ff +oid sha256:9521b91af7e6c3cce56c90154dfcd03d0e4fdcde7057e21f9501fbe1dc0e443f size 40840 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22wga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22wga_gcc.a index 4fd8cd2fa27..9a9b562de2a 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22wga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22wga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54f29d44c434a3a76e07745c134258fbdf96a6f2eb5a6441da7bec0a69d3ba6b +oid sha256:146abab21c8f6ac5a6b48c0bf1de5a86b6bee5c57612a3487482a7ae9d3d4955 size 54872 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22wga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22wga_iar.a index 520caf4f2d5..380e8b57eb9 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22wga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220pc22wga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:385a657ff9c360b7dd81f4ce2ec5d8959284b7e3ce060e1449a8abb1438aab7f +oid sha256:a716944a649c3bc7a84ef816e86fe86f5ca105f300e0f2c393bcc752089d696d size 37922 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc12wga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc12wga_gcc.a index 80cf95c7f27..74ba4222bf4 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc12wga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc12wga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20e67e81fa482603536be38d42768a5c23c24b5c5b5d14bcefdd574b75f23cb5 +oid sha256:917b0b480b5724b5b989bcb9a46b4a5bada11de19a2d150e6556238eb517254e size 54744 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc12wga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc12wga_iar.a index 238499455b3..b9456b999db 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc12wga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc12wga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a7b080187f8f7ce8b57118844e6cb19587fe90d93e9d6cb4beb1bb8b229d20f +oid sha256:8a42ca46c93cdc9c42da92f39df6703e70d15afdd1901788bbe85498406e3d80 size 37282 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22hna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22hna_gcc.a index 9236a56a0cb..07fbf529d5b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22hna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22hna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5b68b5db984403ac51d3a86b215e6777529020bba532fe5876ad7121a266530 +oid sha256:e2b2e80f7ded275a3b2cc369b3527e29a6f2717c20b85ca936f2387254848f81 size 58226 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22hna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22hna_iar.a index e79c482affd..c080268ed91 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22hna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22hna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f8ee46980b5f542c40681fed33121eec562d6dfe9b094fa23a94d83ff57b90f +oid sha256:0c25093b168f32ebae395dfc3170f0d135131c4380003ee1a63127d64d123001 size 40840 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22wga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22wga_gcc.a index 0a0d629dea7..ce49eff6bff 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22wga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22wga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:063775ce360ae536c4edabc7ec9e46b58c523eef12ab38195232e0d50dca1d9c +oid sha256:1271ce0137529f533f5897d00b2d6f4c20635b2d0250565fafdb9e39537baa1b size 54872 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22wga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22wga_iar.a index 4563b5cf6c6..e40d70693e9 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22wga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc22wga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f371616d90e15b94b6008d614cb34d294c78db737a16efca846e9e2561f55142 +oid sha256:506b4d7bf9b1e8e4c7d06ba0f78c419be48ce56de688ec643235b479dc2200d2 size 37922 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc23hna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc23hna_gcc.a index 0d5eb0b211d..d00047013d6 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc23hna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc23hna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c6aba17ca0e1cdce4a8b8ec7fcadb567ae1b3be82cba3b6f887ee224ba1e717 +oid sha256:30e15b270cbd6fbc9a3b920ad263a5684a2ac4ed1c3a84431f0c775a476356bf size 58018 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc23hna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc23hna_iar.a index 0b434dae806..3851703f401 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc23hna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm220sc23hna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d1060cba025e573451d9e51f8226e2d07aadaaae5838da774b5f9c4b2c4e877 +oid sha256:d4e1b3e2d460bda4101105fbbabe95661bbf8c7670c28f9fa8e118606b0a6239 size 40578 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa22vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa22vna_gcc.a index d7b2ed89f74..539e109421e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa22vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa22vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c095c5697c09682209b2dbaadacf611763ca6d7a0f307d06d47cacbf84a3cd9 +oid sha256:7f177f59c79a0d66ff954482c6f7b5f1a23519227f50475055adf647dfd4af66 size 57940 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa22vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa22vna_iar.a index a06ebf89df0..afb98ef8a96 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa22vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa22vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e4bef3dd9390722316ad0545b0a14fcc59db628a2002665adc10e5e035a1919 +oid sha256:67beaf7fb6420c22bf0463d1b1eb6c7121c026957f955a7698d6ebb1581092cd size 40546 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vna_gcc.a index 286b6ab7fd2..507268529a6 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:033a20bb8265fe9ad51ceb0ccb499103f7907742f048eb8fac53d09b4470f084 +oid sha256:72ad38f87ec0aa337d5ba1a3a0051894f26b0e5174ef32ea9e922dc05a32b703 size 58178 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vna_iar.a index 5c35bf9a7cc..6fa3c5048b1 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a86cb1f2fb1b74f9918c352cfabbfa447beba1131ea3e664b8e8ec34713767d9 +oid sha256:8a28cb7931a6af5fa2d47dc75c8e4da8e3d3afdc161262eb6b54500a342a6c3c size 40970 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vnn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vnn_gcc.a index 7076389e12e..ef399f891be 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vnn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vnn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c862adc1129df41c9f9c17411a30b5b1949003e385411c4d777cbf5a5766ff50 +oid sha256:79dbc9c925af851e6c0a41273efc80435f69878fd15583020636ec432e7114bd size 58178 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vnn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vnn_iar.a index 911fa99b4df..3388eaac696 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vnn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pa32vnn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:860f00d312b874fa57ef472bf5d4cc1b50fd70575106a4ed7bb8095a36735e03 +oid sha256:3992a3d9fb6a332734f56e33fbb35924c0297fa1c5476399a69adb131a6cc5c3 size 40970 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb22vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb22vna_gcc.a index b717a47a2e4..5c369992cf2 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb22vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb22vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7b926102959c7b0953fa36a5a2f858f0e4468896d7143070e3f53669699ff18 +oid sha256:34be1c80adf2e4385ae629b09ffda4bb5a842d43170237e6c92a33c1dc37b688 size 57940 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb22vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb22vna_iar.a index d0d523e2658..05e9c963b1f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb22vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb22vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8fc891948c398312e5bb81fd282d2882100d9c10b8e1eb5b3e1e13ea7437d4ae +oid sha256:7b9a76b7ce5c4133687881c22706c8d857aa9c9410f0035debfadb1f324341c6 size 40546 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vna_gcc.a index ff2bea63a01..534640d0586 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11a20e61d3a6c03031efcbf9f77c72c6c0c713e67552f73638c28bacd1aee5a4 +oid sha256:115f9372ef1c0fcfbf897128f71b6810f946f7ed34407a4da0279c832dc08306 size 58178 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vna_iar.a index 059e29bb8a7..1b333977770 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86cd18c30a237859942cdf0a43f7ce87d1263aeecf5b13dafaf82acfd64d2c01 +oid sha256:1629ac5013ec3c7b38c956299df80f306fc8f2b8d483c09d2206505d9971c0f4 size 40970 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vnn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vnn_gcc.a index 02274787150..95cc72ed16c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vnn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vnn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6aed058479c1e5b73026af9dcc973f703a2fce7749ccd87c65219be8f5023669 +oid sha256:f4957d0a402266708eb0d492289db8b55c284d2245c98b4c7244c93f998759a1 size 58178 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vnn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vnn_iar.a index b2028d41cb8..c2c28f430fd 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vnn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240pb32vnn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3ed9457602cb0151b21d28c01d01b5173ef8b2b119ef503458fe4616ffc828f +oid sha256:23f46fa1125602ed1edc4d185b401fc71ca0b9ad8e52182c517be408399f41b4 size 40970 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sa22vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sa22vna_gcc.a index 61e679d3628..31079177cd4 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sa22vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sa22vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:493b2d0db451056e94fa29362a71b4f73bb07a71785da792457a60dd81f7aa91 +oid sha256:3ec36c0d2d3ebc785863558cac45461abeb70655e608b2e26863a21b28756c39 size 57940 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sa22vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sa22vna_iar.a index 332eff6d527..091db3fadd6 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sa22vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sa22vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:730f5e12e5d0b399698c5f88960b86cf35e4d2ad0ffe7297235984cb85edd78e +oid sha256:d1f31cabf6931437c5e4f51b467a69ab9d1724a1bf25bcd33da9fbbf7c80f16a size 40546 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sb22vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sb22vna_gcc.a index e84f4cb0464..75fb6f28afd 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sb22vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sb22vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c3a3eee60162f2b2bb04da6ba12f6d78024c06b0e4d3f4c669376c140e73b45 +oid sha256:2051df974edaca26bbe0fee71a271edf564974e1fb2612a1bcd6e60e7928a8ed size 57940 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sb22vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sb22vna_iar.a index 253c8eecaa8..36608e6aa07 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sb22vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm240sb22vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e590ea34005924804edfca4c3c6da6376fb758ba24acc9eb0f8eb2f7c2941a32 +oid sha256:e31cb003d177d834f4aa6fa0ffa102ecb8ebefe8b402b64c4e16c431d7617e3b size 40546 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm241sd22vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm241sd22vna_gcc.a index 40d5f103406..97afd90f2fc 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm241sd22vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm241sd22vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3e6c6a571634ed5226bd1cc4f4a94bdd7e5e15418cc8cd8bd3c73422b5de597 +oid sha256:19d27669d0922e940da2486431588f9310621078740b0b917386e24f7392ff52 size 57976 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm241sd22vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm241sd22vna_iar.a index 5c633aafc1b..ae7e00415f3 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm241sd22vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_bgm241sd22vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d1a7bfccc909ed0bb48741b357d398884fd54970d3d674637976da62aaf0f711 +oid sha256:488a20c339bb2e41c678a07eeef8b7220cd660642cfd9e331d8367714c85202a size 40578 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sa27hgn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sa27hgn_gcc.a index 664a48e9b4d..023a00e4ef0 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sa27hgn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sa27hgn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5418683655c786a67418bc8a7e84898bf2cd4ce29861461974416a8fc7540aeb +oid sha256:7b4accf572d3ee981dd883b0f7b20f13f0f18fa2e064282507b77119e47fabb2 size 58046 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sa27hgn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sa27hgn_iar.a index a433bbb52b1..068162381ff 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sa27hgn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sa27hgn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60e45320ba4ac7702bfa570321f862568e872200bc49d106cd7b7a15b0da51b8 +oid sha256:f2ba77944b6dcf1dfbfd10b5795f5b7b525fa322944385745404a5689ca869ed size 42306 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sb27hgn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sb27hgn_gcc.a index 2771bd8d813..29a00fda747 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sb27hgn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sb27hgn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6a03b307d928ad1add6eacd7e2352dba88154502e880634476b0692e90375e8 +oid sha256:95dce58e1990c829fb8b70e5d61385aa6c50d82f484f58b76d023bc4979802d0 size 58046 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sb27hgn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sb27hgn_iar.a index 0468be53c91..12d63d9cc13 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sb27hgn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_fgm230sb27hgn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e769b1aebcf058b44d7dbbfa4ef1e211952d1138e3b6edf2aa665d9007d4b2e +oid sha256:fb62e83a8145a9967e3738a40653561baed470acb5532ae51bc03f44956fc744 size 42306 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111a256v2_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111a256v2_gcc.a index e2f574e3d6d..57815d58b74 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111a256v2_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111a256v2_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3546dcb5788018f5de6645eaf63350ab4924fc19a6ff0eee88a6eb2440a21baf +oid sha256:8acdf1a27db62ee50ba746897b3133e9e778b7a8bbf830044e87f107ddd11e70 size 55230 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111a256v2_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111a256v2_iar.a index 32af8b015d4..e102797394c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111a256v2_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111a256v2_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:36413856c2798f9d45a5b6092ca3f1e5cc3bdb78873f48127bf2f6c1dbf4d751 +oid sha256:281daaefc8c446a864d8940d754f03c2f37a6b69d6bb06e5d9d3806158ce4063 size 38784 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111e256v2_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111e256v2_gcc.a index 0c3aa0e28e6..9baa9afd0ba 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111e256v2_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111e256v2_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c6c78fafd1f829b832da0925d695f11a438b79d1ad985a67b6cafee3c2ea808 +oid sha256:cbdc8c25dae9fcf7413d1fd8fedd3d512079975f1fbde81bd5d02608b57412fd size 55230 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111e256v2_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111e256v2_iar.a index 6a8f728d830..08d8c8c1f74 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111e256v2_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm111e256v2_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab6c367898ff7ce33a29a40e629309ea7b8cabef62c1277c78f146739ed22845 +oid sha256:fc65dee8c6c8eaecc932af197c5d5c2bd44cf316f8fb2da66893a506a93d9278 size 38784 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ga_gcc.a index f238900c1c6..8c53a0a12a4 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a2c19646bfd6d6bfb10907f40d9437eded8457ff8e5723d663fc7a2b49df622 +oid sha256:f2314ac465fc53fef8857010d611bcdfebaf6151b6a89cf40929580fa2e239f3 size 57702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ga_iar.a index 7a605f06ff3..135032fd52a 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a401138055a79756e2a57e2e8b4a00c028a021a6d4a743509a413c284a0f5a8 +oid sha256:05dbd9880975ab44c372e75744588e72c1a55143b2068d6ab0d2dcec906486bc size 41898 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ge_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ge_gcc.a index cb8a181aba8..4a9511ac719 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ge_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ge_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c89aed1f156b37258f45f24c5c4bcf77bb2446517058eab47fbc1474280ffd8c +oid sha256:bd2ce310d1d7322a7de6f7798a8cdb13612f8c99f29687ca001846f2a1e53c90 size 57702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ge_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ge_iar.a index 5ef08dc7b40..734a88939fc 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ge_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p02f1024ge_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd933962becc03c8ebf806a56af4bda680b4fcf06a6f7390ed23a7171a56cdb4 +oid sha256:e29a45450a95822424e3b3c4c918d72d2673bee2610fc98ba78a15e515f013f0 size 41898 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ga_gcc.a index 4f97d77d76a..b881645dff3 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b89759ed509739d94994817f3e3cf6500336b5e9596abfa1a81dd529ddd565e9 +oid sha256:de20f20e12e28fee87f1fb32233f32bd275e3fa7cb47c1fe0a99c6e81ac5c04d size 57702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ga_iar.a index cf3f7f57a04..1adf7253739 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c6953791c99f2199d357db6385a544124fe769970e7917e2c3f0a842a4b7d26 +oid sha256:c66b685b222f3d03bde54ffa46867f996814ab4f42b24bf7fed3f389b7c6240f size 41898 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ge_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ge_gcc.a index 0b36a056a11..d7aebcc71a9 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ge_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ge_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37c3f3807b4de804fb9ab83c3e0b1b5adcad37f2b1d6cbefaa98531df27f7759 +oid sha256:656572d2b9287640d92cb134d0ee3dc5c50a3083e42fe1146e32abc2e6fde0ad size 57702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ge_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ge_iar.a index 3708f38c87f..001f584de7e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ge_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p22f1024ge_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09d59a04ae2fa03683d038a898586c1d105df292eb3dc1a87b0c795d1594f723 +oid sha256:17cdae18dbe38f2c2843562693d2d2712c8aaa22712c23d0d6ee5d7c66fe5609 size 41898 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ga_gcc.a index 571e33823f4..07b1aa48db2 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f34b2b0863949dbe8f90182162e09ae1a6d9081e8f3838b9ad2b62088151a93a +oid sha256:d603cb5d0407d8d3a07e92cad753fdfb0ef47b7a1daed2b0d112349b8ca83aea size 57702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ga_iar.a index ed1091b8414..772d4e49302 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60e3b0d8d937f7e165741e72a8d2d3f445a0d768f14a0c63dbf150663c0c0107 +oid sha256:068d79872dc77c9738a2b12ddf23ab16e36cbb4c1653fff4f0ca23b60521bc34 size 41898 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ge_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ge_gcc.a index 61c56639148..ff88e0ddcc3 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ge_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ge_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47d63e53287f8c7c3dcfc5ca3d1985d59a34aad0265d907d23c0a9a1a65e107a +oid sha256:7dafe6548394abdf43f79bec624189de33d81ab78ea0e4554c71df44e479851b size 57702 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ge_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ge_iar.a index b692e760f8b..d271607f32a 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ge_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm12p32f1024ge_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f21c277f6fb1d7f55e7e3486c0e04d9f886cec78509eb4cbaa9f541bf1800b9d +oid sha256:a236bc4c38fa9581fb1b7bb721109349e112fce6ff09bcb10d22229fa22891ee size 41898 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ga_gcc.a index e160e8e8ce0..3a63f40b56e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d7d3654d7edb7c721be9c6cddb0e0bd4e842105e441597891deecb558212904 +oid sha256:ddfbf1fd0cca38bb2a4e6f1627e62eada55aaf6a2369c1b7ddc35911be75772c size 59294 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ga_iar.a index 7771b5b133c..afb089966e6 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:991c2657e00fea909349e6fe7543ca6e0b21f6efc9782f5f366df53a4679444b +oid sha256:c1fbda157533a9f3d9e6862b17772d0f23539d162735536df7c6479a8bbe075b size 41844 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ge_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ge_gcc.a index d1646ac9a96..785e5e3a793 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ge_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ge_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a5871291a4e5f54dd383ac1ccbc329ff8cc604a89ff10a1f19816af33a29e8f +oid sha256:b56fbe51e7b4e1021b0c3e2ba362a6cf760952d9eab6171bbb2a61b52bb7a1c5 size 59294 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ge_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ge_iar.a index cfc8926e9cc..b28b6cedf07 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ge_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p02f512ge_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6cb46d6c0336141d09dbc47ef8ea4f3e8482dd1c2a1df6615e2ff10f9c57ceb8 +oid sha256:a0765e932f7c5f346697c5750686b5fd5abf56be3ec388a82e74cf53bf23b9c7 size 41844 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ga_gcc.a index 85eb3672eef..ceb28157077 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ac4f36e5f0363fccc5a987b1da87a4c6517a4d82e807da94567c7f49e06e39f +oid sha256:c0d3707b6208bdce9a48fef7d8eeb87a55a9faa7f9ed6ecdac44d0a28860d252 size 59366 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ga_iar.a index e63484d9254..b0776d9a5b8 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e134efe57c5f30e01d13f141c6bcdf94fb76050488b53a52a0e94975ee6d6634 +oid sha256:deb831e13ea29f17c91c164560358863b3d812f98113c4cc1dc459f2132356d5 size 41976 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ge_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ge_gcc.a index c2986ee1cb6..1ec52646eb1 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ge_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ge_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd9e801541fb6118d167c6a5dfa3f7a67b331aa38a20430e2d24384b3832d746 +oid sha256:d041465a744501fe6f99bb5796123baf97fe1fd1957a78d0a8321499ddeec34b size 59366 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ge_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ge_iar.a index f79cc46abad..d287fd7c069 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ge_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13p12f512ge_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f837073fcbd11a69150b236df228315ef1e06905bee7e7f99b7533fe81ee83ea +oid sha256:b5b610c19deabf4f71948eeb8c119a1691ae7c5b9fb5e0ca4f4fdf7720a15c1d size 41976 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512ga_gcc.a index c377fdf99c0..2e78b06a831 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ed378c5a79c0dedcbf0c07692c820f25c7fdb4a758ecd2b552f18e709ed6d29 +oid sha256:96b80ab429edf2de8c2cb4e412d07db97b6ef4e4e652fbc38a19c587dcb76705 size 59294 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512ga_iar.a index 044427962f5..36a518f443b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf32703404c91ca9aa58b006fd5605429f36d4c7be416cf757b7acc69ca66848 +oid sha256:9f2d265834e9b0aa3b2a66d52140be853bd79592f4cf8223d60794dca28382b1 size 41844 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512gn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512gn_gcc.a index e96114ec77d..ed0f126040b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512gn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512gn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c9ac6cfbb9a8d5f41322672e428e8d1edd4145bdbab48fdea837699ef456ba6 +oid sha256:d932be64e293d85400dcd2fd469955067d69bdaca606db38196ed3388ba466bd size 59294 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512gn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512gn_iar.a index 3d4d00c101c..6630f4baa9b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512gn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s02f512gn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af91170185fad6f42903f79c018e17f47e6dd57653e0585b03baac5a7512e965 +oid sha256:3e1e27b073c3674e3140a0ac3e58698d7915197f56627b90662878a2389d3de7 size 41844 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512ga_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512ga_gcc.a index da1abe8ae24..1bc67406e4c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512ga_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512ga_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd613eae8120da940dd07a52beff9d5d60b1c1c712ee8f6a73dafbba9d227bc6 +oid sha256:73f3b22fb609291c636c1f4a15ef9f0c95d19dae6a0999484caa07ffc114ddf5 size 59366 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512ga_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512ga_iar.a index 6a7ab1ad99b..c6a1db3d2ea 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512ga_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512ga_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38d193e9d5c309d4e26627ca9dff67c13b6b2886ec504826e07fc80894d385a9 +oid sha256:9db7a81824a21e2874a7120c8dbafb4f2efb2bf041bd02086b64eda573bdcd17 size 41976 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512gn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512gn_gcc.a index 142afa0f695..05dda0d8302 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512gn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512gn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9377acda17221fd5b8c05e770c6e13ddc462cf65c2ed2cb01ee55ed42533021b +oid sha256:ab703b281f8034fb74e9019d6875757ee90c85e0abaa08fad4761704c3343e5a size 59366 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512gn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512gn_iar.a index 4e759f96c84..1aad90043f7 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512gn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm13s12f512gn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c241e69fceae21fcb8a7c0051791338b128c766212c311adbb316c88bd5cbd8 +oid sha256:dbe0a8abb920e882746309baee56f78902df81b2a4b46303fd4fcc5fd9fa2884 size 41976 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jif_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jif_gcc.a index 84aecaee132..45e758df434 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jif_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jif_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:23f2c498aca070f6701d94558356a59eb8e870c67e72f6859312e6e385f76771 +oid sha256:fced7dc583c5380e6477baf11330fe49bd5a5588225356d028701a34d941b4a9 size 56000 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jif_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jif_iar.a index 81efdd7c1ed..2597587805f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jif_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jif_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6badc87932d9a172746b3a3aab0138c18ee935bcf44a69e5f40a521572a97933 +oid sha256:b7ea3b48d0a557f750660b28af3fdd8ebce9fa8462a8df86b65f1165e4e65ae2 size 39080 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jnf_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jnf_gcc.a index 4a899b23725..bbb70d48aa4 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jnf_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jnf_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4704822bccc029a082b15dc1efd9f235f4fbc8784b81c80a0f25d5fd38f9fb1a +oid sha256:82201b85b14a2d87de1bf68aa04d2b8995c3258c25d3dd7ed5be4cf434eb845f size 56000 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jnf_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jnf_iar.a index 19f2f54531e..f03b0793b09 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jnf_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210l022jnf_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81b9ff1ac13e1ff492e15c10adbdfaddc77bb766c6b9eab84881551024a11aa0 +oid sha256:6a5d7336e5a9b329521027cfd99828805ae13f643b897a295d8d67da9e96dce8 size 39080 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jif_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jif_gcc.a index e5c6354f4bc..99813070d39 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jif_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jif_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d8befb731d6cd0066633f0ce49e3194058bfcf26cf15e662fb2ced36122595dd +oid sha256:20c5f2a3a4676404d58b9012d8b47d336a7367e1edb44878b6982aaf5db81ff2 size 56000 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jif_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jif_iar.a index ef7cd29d89c..d3752278e16 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jif_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jif_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa547869c91f97a99290851487298e9a919152bdf026929cab34d2ae1717564c +oid sha256:451258b902cc0e27d0cd2d3764381e8449db6d3c86b638329a8a5bc1c15e463f size 39080 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jnf_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jnf_gcc.a index 0bf76afe9c4..fc29b678d99 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jnf_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jnf_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf2dea89b2e24500ac7eb32c7f987f5acf9d761bb391514c9cba898cc1dd2f24 +oid sha256:d5a098c6d810659a8872438158a0fbb1641019618a9e9aba7dea9b127e3e4534 size 56000 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jnf_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jnf_iar.a index 4cff2fe1713..c2581468f91 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jnf_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210la22jnf_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2d88f4b194c946167d805bbd903505a5f547f14246811d52e0e221d94972ee0 +oid sha256:f4ba8a4d01e46e7966c7208ece7a20be58521909e6a34067c3ed9e7f20a5f400 size 39080 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jia_gcc.a index 155de0820d5..bc3f3ff7a9c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86bf498d752c13418fec603e2391a831026a798d790d976c1ac295bb22ffa488 +oid sha256:9c249c9f0c0497649b6980ab13700787851003ac019a501e28534f07711b53ea size 56000 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jia_iar.a index 1202c2ad107..bbe7128d805 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7f3dc69745eca2ef973c565236b82097db92ce5f0244f658c5acaa2a3c23a33 +oid sha256:4b9c5d9e582a0928d636c177c58ed24e4a06eb4502778b0cb7c40b26ce85b318 size 39080 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jna_gcc.a index 93ad30dd631..dfdb64884c0 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f64cf82ebb7f50311ab7061786d1a53f067be9ec49c4a1acf17675ffeb127532 +oid sha256:939126285b211dbd83c3c13b2d6db8145171136d3c0967261b12a80ab5b08f71 size 56000 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jna_iar.a index 1cb64bd21f4..819d86306a8 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p022jna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bc29ca4ad36ad5cc8c6927dc4f03f1abbd63e7d0e3e220aa552f9277973a6af +oid sha256:5234732ef5f03e6a222f2dc0b0f0f42d7620b44eec8022684c43a81f7d88bd29 size 39080 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jia_gcc.a index f1939288aef..2586a888c0c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:430b12db6bb50f5112ad847e97acf68249736c805af82a8091420a94073d7e39 +oid sha256:c9dc6bc2c4ea9f9dc07ba369fc4ec8eff52f73bee7ab66468faae1ce1341b975 size 56264 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jia_iar.a index b267b894d58..62f8c9baf73 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68f926336081c25a5dbd24b4c16f0177ea61dbae2dbe3beffe02108e7fd72ae0 +oid sha256:5087f4669a70af4019870997c40661e505b13fc2d4ecee1625bacd459d5554ef size 39620 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jna_gcc.a index ceb43076863..fdf7949b90c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8cb221cbc7aed0d7979129b3a0e87f859459e5bc738d8295be88ef6bfc206f86 +oid sha256:67aec42dd8afe1174881b1f053403dba1766cc1f251356bae7623276ec0dad90 size 56264 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jna_iar.a index 3a80898739a..0ee860ab539 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210p032jna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cfb755ffdf7594fb9f381cd1c26ca825bf2b61acba26161b101ce08bce4ea5bf +oid sha256:4061fe1942d5448b17f3c63cc2372cb8355c8edf51793586edb378d37e2832ee size 39620 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jia_gcc.a index 4e3fb7c5c0c..843bdaac78f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bdf0494e9c14b389a2b508916ddc4f4b54abe32b3f85736311f125f14a7f9f8c +oid sha256:ac76259213812cfe635b27f1c349f6e325377266cbb1501450453e77ed0388dc size 56000 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jia_iar.a index eb14c3ec1cd..7810a60aa6c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:50671c6f8cef6dcca240428f638f96541563d8d8d14fb96ab2ea30d12b88d9b1 +oid sha256:fbd9f650716b8cc3b38f097eb02d10e998701eb7a7ddf6e11fee76b1fbdc0dcc size 39080 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jna_gcc.a index 9ac0fdde653..4aea833b814 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ecfb511a4292e95aea3766b4c6e097d33a4225ea889b78ea6501753846ea6943 +oid sha256:1c5a5add08253aae403edb445a9be488c55f77bca4958ae43a5709c5321df3cc size 56000 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jna_iar.a index f719501885b..8d28531cdd2 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa22jna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e66ab5f4ba4783c120093264a16c3707c8cf3af98670856cf30a754560ffcf8a +oid sha256:f26a911196519056fe0d58ecc398076517430e43dee915286b8be4e1a7875d52 size 39080 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jia_gcc.a index 01a55c95618..75c0a6694ed 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f021372f758ba3b5b8f1a5c451c3acf568509ea0a0b495f7a9b71ff3bc9cf3e5 +oid sha256:bc60287059201c798fdec7f53b88511ff126922d8c186e7bdb4e8ce86dc84d1a size 56264 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jia_iar.a index 26822d5b11c..20690db0f36 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc503412c1232811c960e72c230e30cee85a92393df1d9b58992e533f2b2150d +oid sha256:b7ce4186178e6d0f10623d4b1b216caa4101353e306554815738e4f5583969be size 39620 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jna_gcc.a index ec24f505dc4..9adc8ffd427 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83b64c4baad10e91b4e3ebe690cab4940e14effda44fa27e7187da905d26c4c3 +oid sha256:229dfeb11d163ee13aafcfe0ecfc19deab8290ddbd1270058072ef0fd3caad93 size 56264 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jna_iar.a index 42d824a15de..78680696531 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pa32jna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5eff836b9dd2434cae093b436a29e80c0d702f4f035a33211fffa6883beff7ce +oid sha256:bf07a1aecc72489eb9e9c3cab6ca14a7255964d9e48deaa9095bd24de74f48b4 size 39620 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb22jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb22jia_gcc.a index 1ed0c19c261..81dba223b76 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb22jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb22jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:23028ea8e9dcd317c3ee7f0b21482628a597254642d205d9c16fcf8118509862 +oid sha256:fdfc077f2440ba3db0d0dd78f389d67e793fca1743611fc168a366bf771d8d45 size 56000 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb22jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb22jia_iar.a index c74f4a05f10..a37b3083c05 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb22jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb22jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:396578563b6e35e4697ce780ad2977de631fc4816e4f8adc039f50b0b94c2d97 +oid sha256:f084aacc5658c56b3bb9c5848fdb02a4b11858b7b5216db882817c12b21c95aa size 39080 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb32jia_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb32jia_gcc.a index 5651c131a8d..fc9d8793e7f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb32jia_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb32jia_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4dd902330a9222565617d7a79c770dde13b52ce5558fe39e7253d4ffed08f4b5 +oid sha256:a58bdf71eac2371cebfeb7cd9f94aada572b637bf10a75deb55a0b85edd1f46e size 56264 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb32jia_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb32jia_iar.a index fd56771bd2d..0c9fc5aeb66 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb32jia_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm210pb32jia_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2080cb24145b5f5b678dec618b5f050d9a0f5a04bbd00c88bc7eade154a3e337 +oid sha256:ae88c9acdbbcc3c4a37d4714f26520abe7bc53149de0d5ec1a7100283a35eee0 size 39620 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220pc22hna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220pc22hna_gcc.a index 3bea3c78f05..59f9482b59d 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220pc22hna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220pc22hna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66aec13eaf57722f66005cef1a1d11858cde72355bb52a7cad010cc19f1a82b4 +oid sha256:e53db0f5de261f2cd566a1c941669a02a1fcaf8cab0a863bb41ee6c7f78be775 size 60166 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220pc22hna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220pc22hna_iar.a index d7a8e0fef1e..c05fa65347c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220pc22hna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220pc22hna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77e3f7d457fd4c781b61b5e3b81948eed1b3a6feb420a73920323c2f4beea78d +oid sha256:82fedbc1d6b829ff592ea25b64a3455c133b543af7a7f061ee242b9d8ec797a1 size 42420 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220sc22hna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220sc22hna_gcc.a index 1319ba65a92..21e20855657 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220sc22hna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220sc22hna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32ba082f5164beef1eab3c1967cd359e57eda0183bc95c04bd341ba368e485fa +oid sha256:1cce103de1186bb675399ddf73808cd0e16b7dee4fbbf666801631144123621d size 60038 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220sc22hna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220sc22hna_iar.a index 5789f6a53bc..a591abf7b19 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220sc22hna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm220sc22hna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:69bdb441032bfd29cbb239e45bb14a2973ecaf2d014406e7f8b25bcda4a7d03a +oid sha256:f3ccc10fbc769a428d5390eb3fe81b4e39fbdeefb694ff661b8d4e251802ab33 size 41780 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022rnf_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022rnf_gcc.a index 07713da3245..e33e2f62168 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022rnf_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022rnf_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:991c13851ff6f221d6bffcdbe4e4e431ae1a10ffca6b4b35427d7cc7ebbd2506 +oid sha256:42bd6a1b6b287d695fac156308d434c7d18e8cd3c625dcd1b0b99c074a3fc82a size 60202 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022rnf_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022rnf_iar.a index e4b86be7d98..3b6591dc67e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022rnf_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022rnf_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67945424237de38b22c61a7fb46eaa658c00455e38db69c6ff0c31b817d0fac8 +oid sha256:a6fa8d9272ae4f783e33b08f0faaebd03e191819c912cb4d640703a9d0b5962c size 42474 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022vnf_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022vnf_gcc.a index d92213d6276..287a3c85ffc 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022vnf_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022vnf_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dceb91b57197532f06ec35ba63512d0ea147bef622e7b3532134ce63d68e4c27 +oid sha256:751f754767d8921a256ec6cd52714bcdd2503d03a3ef95085b95a3bc575c1e54 size 60202 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022vnf_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022vnf_iar.a index b553f3d5002..cbcb6457b4c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022vnf_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240l022vnf_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc1ab40253b67b087063134b90f30823cf6368c81c525d157240a7697fd52709 +oid sha256:7a16b365d6510a8ff3dd0379c024ee1b20b9bff1c463133f53f10f89955ff47f size 42474 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa22vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa22vna_gcc.a index 4e1ff539b0e..21497c49ca0 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa22vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa22vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52f98a65eeb2e9eb7fb5431a9105effe2e2ea8364c5814030c0a89702fa93861 +oid sha256:32b272c2aca373c440585e528354b5359d96fc5370079f4ca9896f2de5798ef6 size 60182 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa22vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa22vna_iar.a index 103f3cf5071..4f1aa513c89 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa22vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa22vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:73e244acc0f966a77e60fc3c26c97c325bcee33ca341ce4f9c50f937872fdfb1 +oid sha256:5eda01c160cc95beb54b81f899eab16d1b72847caa5340c06537bba443fc70c3 size 42454 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vna_gcc.a index b1586fc4d8f..b1fc61167b1 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68e7a4ea51c5798028767ed74c9322bfd11a393d1504f1f2d9db133f8cd1c83d +oid sha256:c237f125df311d444dfcdabe7bf3aaa35d17a6e14b15fc46a826bf78636bd579 size 61534 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vna_iar.a index 20979ebff21..f601804d59b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bda2f273dc5f301fd956a2baba6a8f0b0a10349a9fa78780e78f7fd02d506526 +oid sha256:e269ed01a3970883cc2db15a60f6b907194b782b7204f6a213a3eb332cd40a55 size 43700 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vnn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vnn_gcc.a index acc3b10fd0c..2df0301dc84 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vnn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vnn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39cf4721220da763a935b0871385cb3dfe1b174a56180319ef7c8c0b99dabcab +oid sha256:ac317bc8956f2e72f1c264c6c02f1a1138ee9c84da18a1a4df9dcbbb88ad404d size 61534 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vnn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vnn_iar.a index 2dc41a8c520..4754ea54b8e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vnn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pa32vnn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7a43cbfdf05caec0874c30d2fe6747ac23b4f64a57ab96dd761d8b631a1dfec +oid sha256:50cb4fa3d897a6743b502fc513b85db81024e73e21942a47566cfebda3190a88 size 43700 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb22vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb22vna_gcc.a index c9f61084f06..3ef7967be2a 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb22vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb22vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74c75f8c879ae69d7fc4766c49cf4eafd1119015499b5ef4d37589ab93a133a6 +oid sha256:e53420bd71c391935f474b188f321fc163af1ae57bf7308efd3859a63d7577ea size 60182 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb22vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb22vna_iar.a index fd670653e58..a989bc5fa33 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb22vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb22vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f237ac4dd506a258658bf3dd5896c3df1b76ff621d80a475531ccf36c5b17708 +oid sha256:eb1700b16f4596b3ee2aa3f2ee3c2f5bee2070bcf98f9905640b65ff731ce8f5 size 42454 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vna_gcc.a index 15840a8f7fd..7db069c1be2 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d1181d15298fe78faee87eac3fdffcd33a778a170451a035b6888449cf74ab06 +oid sha256:63f7c82984b7a14990a46bcd2175ab6af63f0ea25180af8839acb64ad4091ecf size 61534 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vna_iar.a index 340f764ece7..0e17aad2d4f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:334a21da21ef195ba6cbeae802c7985bad2362ff725c93afd801429642ffba6f +oid sha256:49820a3d19ed1e880fe220f7898297fd6e92cad6c5749d4da9bf117ecff34b47 size 43700 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vnn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vnn_gcc.a index ae6eedb0de2..5375d3c0a1e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vnn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vnn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56d320c2105e06f739b2d54f0e0e610c7ece93c52ac9f348fbd316f453b1ecdc +oid sha256:99658b3c638fe561cee0d46ac565ba40e8cb26b26e6834817d16a6ae705c678a size 61534 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vnn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vnn_iar.a index 671d692f1a8..d58ea2c533d 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vnn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240pb32vnn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6fdb7c682c0f51de43c027a94ff9362ea45fe156cb15cc327e938d3b6e1462c3 +oid sha256:5fec7ccb4fe7d94337c3a7892e336a40afddc5b614acfa8bcf4e1ef041c3a8eb size 43700 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sa22vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sa22vna_gcc.a index 32d4bbf22b4..8baaab2ea1a 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sa22vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sa22vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08ab28da510c797191433cd1fd20eaaa182bb65cbfc6818e810c17275c0dc296 +oid sha256:6be2b58a741a16788826f6f928ab3c089bf711c02e69d408e52127256d52fd36 size 60182 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sa22vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sa22vna_iar.a index 25a18bb93e2..5fa068b869e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sa22vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sa22vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e08cdf37718d03e4901deb9370f19d9a20a9aa6e8a1e4522e7e20c7ee2482a5 +oid sha256:cd1fe4ebbd90db969b1251f0dc7c3e684c26e96e6093eb7a4d8e464841db6694 size 42454 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sb22vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sb22vna_gcc.a index c02ab26dabe..e5eb3da1fce 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sb22vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sb22vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:646ea6ebc6cf33ca361a9e49459c2daa2e4e8b7de43486b8ce01951a4d1997e0 +oid sha256:12c0ff35ec0c34c1399a38fefd6d1c5fe050639f1058f73c2297e9a882a806f9 size 60182 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sb22vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sb22vna_iar.a index b02af2eeff7..50b93a8b33a 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sb22vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sb22vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0edf6162df7be2914451ce70f08424cf7583ad1d2c567684362c2b9ee0d5a527 +oid sha256:ff56d66d096aba7ddf1b056dc297375726df08ca7a2693a4b6c7c903cf782ada size 42454 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sd22vna_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sd22vna_gcc.a index 93983ab7efc..44c58c716c9 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sd22vna_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sd22vna_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c62fa99b688bc43905e45c10c5304770c8cd07909b0e078f3ca74155704191a2 +oid sha256:df50b90ab48a32a97be2a01d1980cd83528799c28c110c7082bfdc92891310d5 size 60182 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sd22vna_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sd22vna_iar.a index 044ca630c4d..ac0be7efa56 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sd22vna_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_mgm240sd22vna_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a437999740f2939f3ddba31d2073397ee03e313b00d9ca40f85ec1a92c20bc1 +oid sha256:f9bf6da579790b6cd58ea88043a1ec7d7ba146f48dffc2d1919e4db5f11c5066 size 42454 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn1_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn1_gcc.a index 1424a0604d1..e579eae1129 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn1_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn1_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:651938a2b6f465bde4a8e178947eb0fc828241defacd6ce621d1820dc170ea98 +oid sha256:863216569bc662b239b05161a05622e0b947920e689523c0a4fbdd05d9e9c54b size 56760 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn1_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn1_iar.a index 4c6b4a3152f..a9d299c4597 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn1_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn1_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3205041d16232c8ac73fe7b2c3e89070bc087266ae1f90e35f9e3c9eb44c5de6 +oid sha256:980f5f7c3fd2077b983e7632acef23082bcae25349959d560529ed254860dda1 size 42974 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn_gcc.a index 52aef4e9f98..3c74d4caeb7 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4c02e353919387be4816112b199105d634a1e7b1d42449dc6db5cc1e6f95d0b +oid sha256:c76d66054bd94cfab537faa5e0fe13f903c77f70fe8d873dd13cfcd5d5f9777e size 56752 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn_iar.a index 13a0ee704dc..c250a538e3f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm130s037hgn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8235ed17b90fcf301b697d21a2250a0ed8c573420e1589ea91e1fb3fff2bdbc9 +oid sha256:4a70111fc0a34524499b9af7a5e1c8180e300534cea40aaa9fbd12fc51f86e42 size 42964 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hgn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hgn_gcc.a index ef60a2d5144..dad9d9a397c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hgn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hgn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:147ce07ccd87fc69ed148aaaf373a94315c7e369d3b6f128eb772a617ece7f4d +oid sha256:fa384fd57271fc27536aed6a8e460c84733604a2ba96dd6dbd029065582ed494 size 65554 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hgn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hgn_iar.a index e5e5308ba8c..1030464e62a 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hgn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hgn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:090eeb23dc64871a93fe89e42242e72ac56ca4a603fcabf866edb17aeb7d5efe +oid sha256:b395c038493d40e6bf65ee575be68fccab765ceb94e2bf126ed412ef630ddf41 size 50958 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hnn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hnn_gcc.a index a39da50ae02..bd66836d68f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hnn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hnn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:21aa92668dadb38cd35944e9f964462a7027bfb6b7eca24d719462163a50f1c5 +oid sha256:396ffdcd233490ef11b9f74ee67c5653cde11397b9c7a86424cfcb1d311f7b94 size 65554 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hnn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hnn_iar.a index c6ecdd399c3..576a0dd573f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hnn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sa27hnn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d4dc84daba48435866c38abf165d9aad72cba559e92dae2bde8921d6a05b9a0 +oid sha256:e8af456407929e41791f9efbea9491df3f6cc508e4f8bd993bad48887db67ad3 size 50958 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sb27hgn_gcc.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sb27hgn_gcc.a index 47f6f3f14a8..aff5f0e8df6 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sb27hgn_gcc.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sb27hgn_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ead38c94bcfa928886f26213a35cb2ef4891561e61456852576a06a639c85e4 +oid sha256:132c1712f19d287b5ad9ead03a674bec5a316d8f900383f5358f6067dc1941c4 size 65554 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sb27hgn_iar.a b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sb27hgn_iar.a index 8930d6fcb41..a392fa12f39 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sb27hgn_iar.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_config_zgm230sb27hgn_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:959398e45451ecb23dc0452a7583a4a40fb8020f619ab88aec55fa47b227f289 +oid sha256:feb4ecef15e0d5ad76d890ca2ce719eb720e479b1f2483e026fcc96b28ce9739 size 50958 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg12_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg12_gcc_release.a index c5319245836..eb2e6c19a40 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg12_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg12_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d0c710694e5e38c376ebdd656f2453452b1a59128ae85fbf0da04a248954314 -size 482198 +oid sha256:7b764c73ec4759dafa9779f3e484df1f92e812fecbf478d4e04e5e5572b801be +size 482598 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg12_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg12_iar_release.a index d40ad794672..4d022be3dea 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg12_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg12_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68c96a060223768b89e5fa620b4301c82ff84573ed5127f532b67791589d775d -size 922514 +oid sha256:c550dc58ec024994a971373e1ef2be7998eaf262f1e3986d844bf3b8fbc58e2e +size 924418 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg13_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg13_gcc_release.a index 530c4d67e27..d9b79503c52 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg13_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg13_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fef2f93b26c2d660266481b3bc4eb6aab58110a0340f2324cbba4298820a610 -size 518798 +oid sha256:712d1aad4229abda719f73f896041018c38c7039ea06a82fa80bc5f8ee5e4a46 +size 519398 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg13_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg13_iar_release.a index bee03f82fc8..eb27e0cbdf7 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg13_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg13_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7624a41b5e90f04c99d5c3fd55ac8118fe6a68587d58ad04a60e9d4793fa1721 -size 983586 +oid sha256:4cf588fb9185a3570c97ec03a9cde8565cb3d79afbc53333f602ed69925c8088 +size 986562 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg14_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg14_gcc_release.a index 0d9e6ad486a..a1dbb359440 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg14_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg14_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c5148764cfaf23787046d5442d1f9e8337c754f91bd34740b36d8e28f6cb26d -size 509086 +oid sha256:99b1929e71fb555284fb18653c1e5ea9bc7c5cd2a07fa0ff496d9677edf5b7bf +size 509690 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg14_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg14_iar_release.a index f5459b4aa6b..e8bb39453b1 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg14_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg14_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38432970fdf8e12d7fd30a092c0c8ec07a4e9a93e8063375dbaeedcc78449899 -size 967538 +oid sha256:06aff840054645dc889bede599cd92bafff4c4d22cde16f80bd515f8620df26f +size 970514 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg1_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg1_gcc_release.a index 24a2446040b..ea2bb61e230 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg1_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg1_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fddf05ffbc3db3f1466a4c7ba42f7cd429a26e2cb21dc1899992a9a6e7cabe09 -size 452274 +oid sha256:916db912f6205f6dbebeb88388048cbfbf5dc7b9f5d4a4877fefa5a5e66c7ae4 +size 452678 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg1_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg1_iar_release.a index a85ee40fd54..db788c1e9ac 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg1_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg1_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95ee383aa5d3b9e01854b9ef64f4cf20c2a3b864108844d105823741fea6b054 -size 864966 +oid sha256:43615bb9dc22dbdebb20cfc2b8f2eab050c9a0be38bf3464c225131581743a8e +size 866994 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg21_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg21_gcc_release.a index 18c6ef90c7c..6452aa8cafd 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg21_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg21_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3e6c1514cf16ff1cd0d8c21ee45e29e16c4089d452c98af6110709be10b3d94 -size 456232 +oid sha256:9f47033410f86d15e163200c0ac34b2bc6b7d79ca5c7742284ef2ede40eb3c77 +size 456644 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg21_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg21_iar_release.a index 2f390277534..53a9a9739c5 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg21_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg21_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b50a7a09b7e1c6a5f136f90de7db8c4c239968cf8b90ce06602459b232652eb9 -size 894308 +oid sha256:3b63f1392cbb1051d15b2def37f280bab496b63adf7b92d3d2b063ce6c3997c5 +size 896384 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg22_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg22_gcc_release.a index 84d324fca15..df172673fde 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg22_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg22_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39fb176a6e898ab9f374b53a117272cf1216456d190cf3b08c330d1580b3181e -size 493102 +oid sha256:42c63d5fef174190458eceeaa12e8507dd49967be91234979a4ec2a49c31bb86 +size 493662 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg22_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg22_iar_release.a index 3d3130df2e0..5138cd7b8b1 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg22_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg22_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e042d3beac88dfaa8006926e5a1c394a0b76ea5a259115f2cb647aa3727620e -size 947466 +oid sha256:d7cf50ca2e3e07af656311edf0fdb8fcfa4dfcf7948e999d0972dc8521b8f74f +size 950094 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg23_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg23_gcc_release.a index 1c92dc92859..e1544797553 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg23_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg23_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6a9400db2916726dac8b8b64ae93167039d126838d71f360768e3cbd0ae7d19 -size 514882 +oid sha256:cf2dd2107af2e2529ed579cf93d25ab84e3709d5c5b09e72aab8fad3a910151f +size 513094 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg23_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg23_iar_release.a index 8994a4a1a87..e19c95274b2 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg23_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg23_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1a59b9c5e5a6e44ee43e9ea1c06b2682589180ca8c354ac7c410deb1a6dbd25 -size 1000446 +oid sha256:313164e0ec17416d2ae6c45b3594c7c65b983ff638fdf33444837be761b4f764 +size 998014 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg24_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg24_gcc_release.a index 33f20a8f738..78c8cafff2b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg24_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg24_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57abe2efcb6e41862755f1b002105419659848f294940b43c12f91e81d33f0ba -size 501430 +oid sha256:e0731affcd94140a2e90bb9c9cda3f4cded122192ff08681fb3fc76fa9308c20 +size 502002 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg24_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg24_iar_release.a index d0eb1c66dfe..9e8704ee3d3 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg24_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg24_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5615d1ae7a2e1085f4b0b621b7d02c3a344865da718421f64cbabb105414698f -size 972718 +oid sha256:3b6b8cb6575092a3f8e7d51963aaf5f93ef91f586746815a915d32c7745dca6e +size 975366 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg25_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg25_gcc_release.a index 62e4af3705a..d464f9af45f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg25_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg25_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25e24f360cb4134dcde5a22ef49a705a6d0a9c80325d131ce6cab6f3c52c16cd -size 593126 +oid sha256:1f794551ffe70fed6fbfc16cb07ac8fc526f6eccd613aa09b767f902ccc2c510 +size 596512 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg25_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg25_iar_release.a index 603b74ee701..8817cf2988e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg25_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg25_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02b4d1054375d1c24a02dddeeeff83a0e69f5d92923c4d8ef743d0b7f5a231c0 -size 1102906 +oid sha256:be3747e02f9db2db2c3e2decaba87cd591ed9017afa85ae6bfd9a0a2b0cd5470 +size 1115956 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg27_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg27_gcc_release.a index fc285c35969..ce40b5df0cb 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg27_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg27_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebfc01d49730fc02dffb5178eb648796fb8ee4b85307c78e1e5769a6deb5e649 -size 492982 +oid sha256:a09ea78d37b971ff11f6c299ede303db12b1c12eae99f7126a5aa1519b272823 +size 493550 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg27_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg27_iar_release.a index 8e9ab028177..42a152e586f 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg27_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg27_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a8f813820a6a49439880af0493acbcd1206e589763e36988d18de110709e3367 -size 947358 +oid sha256:f5689b7916a177154e5b364da2a00eeaf4da665380e59315baac955aa6ba3cb5 +size 949990 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg28_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg28_gcc_release.a index 5360fbf117f..9a5b2a3a908 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg28_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg28_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac90a7a90871fd0935f2b4843d918f019ba247373261a7222de10b21da4ce358 -size 528660 +oid sha256:227d723e70be027c12e25bb81d055c2dc654603156b9c19b8987dec443a01907 +size 529496 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg28_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg28_iar_release.a index 2bea41046e2..70f28350d95 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg28_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_efr32xg28_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9db412e49efdee8a7d077efdfe585aa4098688bc611c25782a5b321d07c72b0f -size 1033188 +oid sha256:a959213b78b5eb5a15e37b4f1d4abda06077f0d624876b3867beb2ce09d4a327 +size 1036960 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg12_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg12_gcc_release.a index fb113760a1b..133ec823809 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg12_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg12_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74ab5a36c827058036693524838b3b5323e086942d5b126d0085fba1456bbe79 -size 448952 +oid sha256:9532bff36702c4d8ec1c068544a200cfd390d50fc7ce6cb2df3c4fa64921952a +size 449352 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg12_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg12_iar_release.a index 0b2090eb5e2..0a32db04d1e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg12_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg12_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c674db03a1f77058f1e7e4a5699b80ffbc92e2482f215dd8669d22a36862f27 -size 883136 +oid sha256:a765b1eac25c8f107bda29cd922a8d60b0b99c762eb0d99791120960f60f8f20 +size 885028 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg13_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg13_gcc_release.a index 332a91dae1a..1734487dd1a 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg13_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg13_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e0d5a1407519cfff30b5434d65115665dc05aacc85bb9baadc438ec62853e21 -size 463728 +oid sha256:d6bbe495f5f288acb8e72661c4765a4bbb6ca72c90f5ef78715f3ecffaa0c2f1 +size 464332 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg13_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg13_iar_release.a index 2a2bf7e785a..252099f1f00 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg13_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg13_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f5ac116f00e9ad71603b588b67c8b0893ff34cc4f0d77f1ee9b642b076535de -size 922644 +oid sha256:06b2627f65da4d72116367a66b04168aee3638a0ff72cd1b63c1d2f93b22e7aa +size 925616 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg14_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg14_gcc_release.a index 4b5c7aee933..3b16b63310d 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg14_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg14_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b52156d15091c1b50ec9acbbfa1f85da0d25a721edd60f619ad453836e698e74 -size 461300 +oid sha256:83a34aa20f881d7748e021c6a96ba0278e1dd3c3d9214d2b8712ed83929e0b62 +size 461908 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg14_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg14_iar_release.a index 84dd48564e2..7db48fdfbb7 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg14_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg14_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e112406292bf70c020102d7c7e7e46eaea0c25895abe7a149fce71ba93b758d1 -size 913104 +oid sha256:43f391f02f5d8123e2c4116a2e86e63048d9ae88f89e373166e0f94a3bcf01d5 +size 916076 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg1_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg1_gcc_release.a index a9c6783adb1..d2939f65faa 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg1_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg1_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9d4cda594f261ed0b42281b79cdd0d6c516529093a0e04b2b780955769f2467 -size 430550 +oid sha256:ee1a3af0c34722b62e8bc7ce285f0d8f65ee42ca7fc45bb21bd5492e650f8960 +size 430954 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg1_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg1_iar_release.a index f87a3bf0837..c9d67390121 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg1_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg1_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6953a1697df56293a14df0e524068722bb9cc2525ebc521d7d00f177a363c8eb -size 836598 +oid sha256:66b167ca8d4dbdb346bd1d1d30f1ee6a5f3821bfb2cfbcb3c4408bda68bd31a2 +size 838622 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg21_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg21_gcc_release.a index b4192399fdd..741049489a7 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg21_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg21_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:441b9db234e99215cb2cfe708390bd6bc280dc0ce3d293125c2f5e9f07bad967 -size 441086 +oid sha256:bbcb072b4f3fe26f374a947cac32e6527b7a3ce98d0d6ec1030ef9b0bba46076 +size 441498 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg21_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg21_iar_release.a index 43beaba923c..696ea1c9fcf 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg21_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg21_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58c57057f2ffdc7f4d9ab4d97ee906f7e920e23e4ea7146f187cc10cc5fef0a3 -size 876130 +oid sha256:18f7a29d58e185475c7e807e4759b7a293385de2493504c31da25b0c8e846a69 +size 878202 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg22_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg22_gcc_release.a index d79943b5816..943b82a1e4d 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg22_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg22_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c85be39229ac70aeb9f2c29d047cb607fd693af991a2d2ca1e9ad4166898621 -size 465978 +oid sha256:6b10768bb58ef6be1967f7c0e23fabfcb536b30f221f2585d954bda965635d34 +size 466546 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg22_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg22_iar_release.a index da3e61702eb..8bbcbd77b80 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg22_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg22_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:69763e8090f7d08269c5afbec7856c178907c63d61bf424a6d95c9cb30219800 -size 917630 +oid sha256:0ab07d9571c1efebe5631c2065ac5fab976cd02c5033bcfe6352021e3d7a98eb +size 920246 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg23_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg23_gcc_release.a index 91786979a53..32006b18e2e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg23_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg23_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:954c597456009058a2b888191b787b97db4db4b85bca1f038b1adea23038073f -size 480266 +oid sha256:1beb4b1157194629b4dc4c09410eaf83581a30a49d55dbaf433e925fa3db0bae +size 478486 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg23_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg23_iar_release.a index 87bc38bf73d..d630534db34 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg23_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg23_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ffb1610a0b22481808effd5dc1313240336a7c97e5fe328de10011e50f85461 -size 963250 +oid sha256:d38b6e686ac6057257162caf93e0b94e658c2094ff07b97fff1dbcd9bbe9d473 +size 960818 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg24_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg24_gcc_release.a index 4ab70ed9a62..ebed6ec4f6a 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg24_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg24_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:211144f09d534951917012a4d5089d72ba05e6028b37e0c76f6622737a6c6eb3 -size 469814 +oid sha256:28ec3cc9a18c1202187edfd1153acf13d6062a9e87a08025515f964a9ca49598 +size 470394 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg24_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg24_iar_release.a index c489497bd39..77658880bf4 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg24_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg24_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a52006ba7fd5a2e5040bc7677ed60a8014c30d2087cf7ff0e84e41741ffa5023 -size 940086 +oid sha256:f27b2ad190b82a311715e9be48dad56da74ef3734f211986b0e5a4a3e5b6d7b3 +size 942730 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg25_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg25_gcc_release.a index 13a1edbfdea..c9f5e7118b5 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg25_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg25_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55e38d9b1373791c5af635190e3eb486aefe82292ce601aabb10796f4e3ec334 -size 585668 +oid sha256:c1911eef3525555d3638daeb92e70f9517e26aae44552a48a27809fe7da9cc71 +size 589054 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg25_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg25_iar_release.a index 0837425bff9..70682e6a4fb 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg25_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg25_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fbfacb5f113b5ba6a3240c366081704cd901e40e4722ae24339039189d17e3a3 -size 1094704 +oid sha256:8387621b913241a4023e1c5ae45874be5d5d85cdccaf6922ec5e8f9b0ce3ed31 +size 1107750 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg27_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg27_gcc_release.a index 3a9539cd55c..96c08e761b0 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg27_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg27_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:354ce3faf22ef020515d43c81df471936f2127d43141413b372dee1115552ad4 -size 465794 +oid sha256:b751e3216c3ddbcaf22863a05a67b7940d76002c60c65355b7ec7e558beceeda +size 466362 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg27_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg27_iar_release.a index c9df02248da..fdfc853db86 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg27_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg27_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c94d4d7bf0fdec466259bd13751608b3292c83d530199a21e9d8684e4eafe30c -size 916662 +oid sha256:2aa0198b558ce85c8f00eb8e4a4beca879c72f717f335ee91b0c1efa89801302 +size 919290 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg28_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg28_gcc_release.a index cfb896c5c67..538c09b1898 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg28_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg28_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08764b11df73333ef830bbdf749f00243a2a07769aced44fb73f70ba05d0de59 -size 493936 +oid sha256:d525198cb22107b8fe8d8abd2a82d2e1a8e46e44e49ad73ee37587e64c5eb7aa +size 494768 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg28_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg28_iar_release.a index 23625ed7abb..36c07a7a819 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg28_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_module_efr32xg28_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f917b91a4b9d9ef62d9aa5bd15a1d6ade6269dc0df31da41a830f809ec812b6b -size 995860 +oid sha256:e535eaac22e986133003f183704c9e7b7eed5856eb29932d273c1f15abf0793f +size 999636 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg12_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg12_gcc_release.a index 1c6d203ee5e..f27d6a5cb9e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg12_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg12_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f73883e48ff69a3e9b0b1b0a18793810b322eda013a2877015ea2dac87f84f39 -size 510296 +oid sha256:fa55fd0d84d391b282553e7a0025cfe7b2f5b0f5d1d57849fdb602ad3758c844 +size 510712 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg12_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg12_iar_release.a index c38087efb15..9470e8fad80 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg12_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg12_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c32f6326f871f120741e9e791dd41601a65c9880b2224ea067b19b9c6cf42f29 -size 1075452 +oid sha256:ea716de7df57c58f39f65be7d72d37118895d121c0bfefc8c515e5fbb59c2857 +size 1077296 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg13_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg13_gcc_release.a index 2870a1f3e0e..51ce524dc34 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg13_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg13_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6fedec537a129fddced1bf5d9c4c63d519b6a2c4ad0c17086cae7e545c6b6ead -size 547668 +oid sha256:e3f19646b0fa46ff621cf0fe1949b3eb1df9a916cdc8924978ab46e8b4e4e67b +size 548280 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg13_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg13_iar_release.a index e55b716fde1..e2c5ca6b650 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg13_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg13_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a072305d6317cbc4097d3c2de74dacad94759d6d61cd3c55574d0434341f828b -size 1140544 +oid sha256:657ae9d0f39d915265c9c23388b2a6bdfcbdde0f2024a2bce4b8115d0edcc7c0 +size 1143444 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg14_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg14_gcc_release.a index d1c068e3909..63c2f199271 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg14_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg14_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:465076897d9caa860cba0dc9a4a043813b775636c3c2165f69725c22d81c3073 -size 537964 +oid sha256:0c6be40f4754e3976ce6afa5fcc4cb087511b0ef2e26b8f84501bf89ab5e46c8 +size 538580 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg14_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg14_iar_release.a index 77af2c0123b..02632179ccf 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg14_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg14_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c84b8c580775f4147eadf7d6426148f2db1506ee2322380b60b135366b97436 -size 1125320 +oid sha256:209dbf3150a84d4482d1888b92a51738c61a250a83473133d431749525736334 +size 1128220 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg1_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg1_gcc_release.a index 89dd7468f94..27045dba642 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg1_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg1_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38c766985db3c1914122849ef7f7001f1dcd4362d312537f43735c0ef9a80008 -size 479324 +oid sha256:b412e5c4d5a45d5e971096550a4cdd6867f9bcc640ad1a9bb142dcc017c32ae5 +size 479740 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg1_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg1_iar_release.a index 589f765a52b..458fb0cd596 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg1_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg1_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8db605ecd84b6938c39e85366bcfc99571ec846a5d5b64eed4170c50c71464a1 -size 1014488 +oid sha256:1218bfdb23e03440101b83b3f608fec6c4212f1cd2373788837c5d8ea9c6fc4c +size 1016440 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg21_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg21_gcc_release.a index e532dc76c39..08072709638 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg21_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg21_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:05f9b8fc13668f43ff34e03b721d0ab3526cfcd05a3ae44b1d7301cf56438386 -size 483134 +oid sha256:e7f3da53779df78c41534d8f30c1fc7f3fc1fc418c3f06a9e4aaec6b6d14453d +size 483554 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg21_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg21_iar_release.a index 5e1ccdc0dca..5d8fae0b133 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg21_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg21_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9550a5eb73717656ec8e9d8d6db586fb0b22f97c4fe251f6d42691f99f2661ae -size 1036522 +oid sha256:c5080a1f3ab9fb8b8e8a31801801cb6d7b6352a31b0cf65ea0cf40cb06969b9a +size 1038522 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg22_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg22_gcc_release.a index 377aa111a01..832d729fa2e 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg22_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg22_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3081f7e4de9957969b32593a3d0e067b50879a025c9e50591580d716b77cc5d9 -size 520540 +oid sha256:fe5bf0e9ad14d281b7c5bb8ae07b94b2c85b4d559911f0c012674aec66899e77 +size 521108 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg22_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg22_iar_release.a index a9ca50aeb0c..dce2a1c94f4 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg22_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg22_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af3abf80c6a422d0b127fc3a365f570c3885ad757e31c8d39a984a10fb2230b8 -size 1090280 +oid sha256:f07d786420972ad807e364aacced8509570a45de06108a675993912d9cb5568d +size 1092948 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg23_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg23_gcc_release.a index 728e88b8177..c75bde69326 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg23_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg23_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d478b5fd1f388c1ad9c7f4b2b4abd7ac7cdc9a6b5cbdfd1e8bf6cddc5dee24cf -size 543596 +oid sha256:0f6e4fbd3c14a16f678561e09ef612e136c88b2885d125abe68ecf0cd0081835 +size 541356 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg23_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg23_iar_release.a index e92474d3a25..87ed7e2cae6 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg23_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg23_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3564762fa8fd5e036e0a9785df16d93853c29c6e67354354f6a5154814379d4b -size 1149760 +oid sha256:a3b7680c48305b769884cb1b025131d279a67d912531bd57dcbcef2852b08f9e +size 1143164 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg24_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg24_gcc_release.a index ccf0734ad15..1fc58c24f58 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg24_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg24_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e16897be32a3fa4365dceb754251444ddad6597743dd92d3456c470e9da5cd3 -size 530046 +oid sha256:d9c0cc76abc574e51fceb5fdb58df99f8a4193315b102f019e6955ee13006523 +size 530634 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg24_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg24_iar_release.a index 289c0bfe1b9..4334e044ee4 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg24_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg24_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7950c0d7d9c81149bcbaeba3bfafd955007d2cf1d5bae2985631e09169c55c78 -size 1118826 +oid sha256:929e9ef29de2d9024c0dd8d3269b64b864da304a3e7b9a536f19b3c5db5d0c62 +size 1121502 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg25_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg25_gcc_release.a index bba2514bc24..a71f0c5f644 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg25_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg25_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4814243816b8907d330287220825b11e6a763f305029bc2b4f55ef527bb7405 -size 620148 +oid sha256:e664f5f5a6daa2b3c5708f6e7375421d6c21628f066ec72f91e4deb369f20300 +size 623642 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg25_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg25_iar_release.a index e2c4a3bf9f3..c6b4ac6bf79 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg25_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg25_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:69ed76c919e98266504931dfed09e9e9a612f8b19caad3c9c88f3b28bf60532e -size 1244612 +oid sha256:e0785d5f87bb598f821d2a072cd90aa046819a3d8856b586c6023cd90028031c +size 1258178 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg27_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg27_gcc_release.a index b6b9799e19a..26badc9dfe6 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg27_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg27_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:94d957183e0c9665c373d8cdd797836d7641971405e9cc5aa2c88030f2f51963 -size 520420 +oid sha256:cf91ca63f983735802a0343cf99a9f2a43fae2d6b0f7ffba6ca2c10a094cf3a9 +size 520996 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg27_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg27_iar_release.a index f3c6644f0e8..1e3f559edd4 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg27_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg27_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0afd372164a18bbb4d7e70e16543f9fd7fe9527c91dc01b414fe30ef646c8225 -size 1091460 +oid sha256:c03fb12fa8098336e40672876505a1586b45b3fd8e60a6b94910508f5e9978f9 +size 1094136 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg28_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg28_gcc_release.a index 2adc082151b..19bee9ac748 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg28_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg28_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56d3ad208c5d7d22eda467640064ec006d007a91ccda8b7a0ffadc28414f0f23 -size 558278 +oid sha256:6c6341461a677552727947d5414757e0d7e9edbf1f0c833df2e24fd8c80e932d +size 559114 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg28_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg28_iar_release.a index 827b8d56565..be3e88b22df 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg28_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_efr32xg28_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ee1cd2c477bfaf15beac086893cf32579376a186843295452182562483722ce -size 1187674 +oid sha256:a045081ae616e701a29d4b636a7d500ecb1f80a81b6eaeefbe7d4aa3e0ec3a01 +size 1191502 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg12_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg12_gcc_release.a index ef1b617fe88..c3ffef4e04b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg12_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg12_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6916cc1f27c0785693384d0f84726f25df788fc60e372f3b2e824164865a32d -size 477046 +oid sha256:7ed9e894616b55b2dfbf8784eae0278a706b1bd2a9f327bd205a838287f17d37 +size 477462 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg12_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg12_iar_release.a index 5713a13cdfc..2460221875c 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg12_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg12_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cf5ca5602eab4695f550d702ab15b0cc4b4030faeb5c1e67b17fb3a7465a24f -size 1035118 +oid sha256:8c138e08e2f17ce195da9a5e97571a7eed8bb6f6d145316de0facfcf235e45c8 +size 1036962 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg13_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg13_gcc_release.a index 6bbe4fd0e4e..e3426d07258 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg13_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg13_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6915f1a8c9022e1afa2b8bd85edf85fd702bdab4e08471c1871394083b42c7c1 -size 492602 +oid sha256:450aeede1dfb63470e44916aec8c8d70d9982b43867a101874aaf4ac23a97443 +size 493218 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg13_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg13_iar_release.a index 1d188752662..0fa4377d429 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg13_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg13_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0333b8ffd1d78a668351781162f158286f2e8ffc862590e6dd805b5ae8557c18 -size 1078546 +oid sha256:2ae19fe65ca36862b3792608741e91b1e47997a6a50919341b4228567fb5cd92 +size 1081450 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg14_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg14_gcc_release.a index ee8d31f7f58..210e8d01f35 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg14_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg14_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70ed0b9e4c97c8f4da12703df6c228183d035984c05cc60e9eb09f714df69acf -size 490182 +oid sha256:9ef4a7f8e829c156e18e7cff77b240ad357d73f3fd9645f8a6da514e925f178c +size 490802 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg14_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg14_iar_release.a index 43c1d549899..dfab36b34ff 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg14_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg14_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6641b0ad93903be5633d8196e22cad68caa143402173993f19ccb3edcae6c7e9 -size 1069914 +oid sha256:0c91e55395a272f14b2cf1f95dcb05c39ef893577ccbde518cc1a52dc2a9972c +size 1072822 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg1_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg1_gcc_release.a index a4f20f353cc..fad9731127b 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg1_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg1_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:412b4dc40eae0d0612908f23b93035538a91ce14ea1372a1ca4b7dbb7643d5e8 -size 457604 +oid sha256:ce8e8a0261e0461669439db9da8dc7719813ae901a9dc261ff656ddd44279176 +size 458020 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg1_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg1_iar_release.a index a4e4cbb851f..592f4342360 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg1_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg1_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:608ad29a48f72a90c308dae0162aa5943bc2b35bfe37e0133873405d7528e287 -size 984984 +oid sha256:2b9ee8b1710deee28ecf054d8bcdad750e7361a550888aea4f967afd00acfe1c +size 986936 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg21_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg21_gcc_release.a index b56e6ff05b0..56351e29a18 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg21_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg21_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b2efff2998fdb68523ecbef1ae578c6f37694604c9196e4412ba927f98363dd2 -size 467996 +oid sha256:d8325118f8b84298c4b32eb7b96e1b012cc7ae279820f706bde2ca65fe6eeeee +size 468416 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg21_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg21_iar_release.a index c93e3220a41..e1c77f67234 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg21_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg21_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c3309b0afadef448ea67e60d7ecbb023b28b9a8881e2250170b8b0ec5a363fb -size 1017384 +oid sha256:178735fc3da2046e719c0c8c32cc357f9c29a134f5f9545fba1278e59487b159 +size 1019392 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg22_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg22_gcc_release.a index 8d175d72243..f7b6dc15aaa 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg22_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg22_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f158c083b84e3a4c914af2b1827b04e5b2cbde03d58bc36e7fb29b689c86a222 -size 493404 +oid sha256:1b6bd14222ed185b255ca36d8c5512297f2cabe79f64def00f7a70e6922ab42f +size 493980 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg22_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg22_iar_release.a index fb423b565cd..864070669a5 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg22_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg22_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1b47bd14388421ec76e3e6f7815c2e1aea960d8517e7f12f93986181522e9a6 -size 1059432 +oid sha256:b0e432e8d81ef7e11e4d81f87c563d32ba1711f64ceeba124709f7b2e60d9b55 +size 1062092 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg23_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg23_gcc_release.a index 18fb13d330c..f78b0736062 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg23_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg23_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a79028fb902f2deb5c05ae1b07c6a7e68c1beed3338f33f1a04b148edd5a64c -size 508980 +oid sha256:db2e185ba2f5e091a1ca1ec873f61c16396a8d17505f2a8c1b2ddbefc1d7e090 +size 506748 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg23_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg23_iar_release.a index 99fb4b12452..dd04226fb79 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg23_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg23_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02e5b07887f672d24ac64a09c28131c18555f69f7d8768bac6804898a60293f6 -size 1111624 +oid sha256:13f0719fb6157018c91c12dc01613f3d1a0588e9291a1db9a8902b9caedd0720 +size 1105032 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg24_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg24_gcc_release.a index f828906194e..1c448da7707 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg24_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg24_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a39c141a7b37f50d058316e6bcebca7b7129b021da371b82eedb37952678eda3 -size 498432 +oid sha256:66910f85c73b0d0e92166207e7fc84cc5af7286aea59e8c3a71d50c9ebfd3cc4 +size 499028 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg24_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg24_iar_release.a index 42889236bbf..8aa97033d59 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg24_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg24_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:603cca9d8629cf9479e6f534ce836fb9bb4a8bd3acf3c70d4556692110e5581f -size 1085296 +oid sha256:516cad850adb035c0f7157d3f03460b05d3ad5caf64c707e8eb1d3bc83638e10 +size 1087972 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg25_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg25_gcc_release.a index 5071eee92e5..bed5aad58c2 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg25_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg25_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d68a5b4ff7e53c38c37f9002d202b37ac2470ca48e2bafdcb19ef285f3fb78cf -size 612682 +oid sha256:ce1b9cd52253f358e11f590c846f9fda5bfcdb0041b8883a7399174c7d5ea805 +size 616172 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg25_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg25_iar_release.a index 716672c0021..38f61dd4b71 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg25_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg25_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:71cd04d7bb5fc208fcdcaba8ca219fe54e5e8ab55b34418103292a3a48f08888 -size 1237822 +oid sha256:8c920584c5eedef8e1642199a71301e3fd794d9d9059c04df719ff38b53ba4dc +size 1251388 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg27_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg27_gcc_release.a index 3f74869538a..31c76c647c1 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg27_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg27_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d6dbb4ec1ddcf993ad55651ea94f9289e78313c5a8971a2ff524cd38dc135f8 -size 493220 +oid sha256:10a574b887fb4de39a7ea82d8a7744a50353a77220ae90958aae9073e11505e4 +size 493796 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg27_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg27_iar_release.a index c873654f3c9..68b2a552719 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg27_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg27_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81b514227146b72495a20b79bc5af0ac8bbfb2c9a9fb7004a547516009952eb0 -size 1059756 +oid sha256:ad8a2d306ddfc685909a339ebd9fe8696d00c91e0f009fc957b3018a964cf308 +size 1062436 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg28_gcc_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg28_gcc_release.a index cea68f30b61..d261d5bd371 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg28_gcc_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg28_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eff0f67522b3e65b25e1c1806006bf141fd21cf8e08244debceb0fc144a8f540 -size 523554 +oid sha256:e1cd5935f86599bc5435599c2cf453893dc104775a31251f70f1591020fd3f68 +size 524386 diff --git a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg28_iar_release.a b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg28_iar_release.a index f45f909b44a..051feb37caf 100644 --- a/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg28_iar_release.a +++ b/platform/radio/rail_lib/autogen/librail_release/librail_multiprotocol_module_efr32xg28_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b9bb4e130b9d8595537a6f8df96d973533639939e6573c623614cc53bdff71a -size 1149402 +oid sha256:e83c24ee0ecf26754958ea52e2bfd2e4ae1c38f3a9afdb30a962e963403953fa +size 1153234 diff --git a/platform/radio/rail_lib/autogen/ver_def.h b/platform/radio/rail_lib/autogen/ver_def.h index 63f10a7fb64..f999ce95f4d 100644 --- a/platform/radio/rail_lib/autogen/ver_def.h +++ b/platform/radio/rail_lib/autogen/ver_def.h @@ -42,12 +42,12 @@ typedef struct // LOCAL_COMMITS_FLAG << 1 | DIRTY_FLAG) } FW_GIT_INFO_t; -#define GIT_INFO_SHORT_HASH (0xe13420b5UL) +#define GIT_INFO_SHORT_HASH (0x129dd122UL) #define GIT_INFO_TAG_MAJOR (2) #define GIT_INFO_TAG_MINOR (14) -#define GIT_INFO_TAG_REV (1) +#define GIT_INFO_TAG_REV (2) #define GIT_INFO_TAG_BUILD (0) -#define GIT_INFO_DETAILS (0x11) +#define GIT_INFO_DETAILS (0x10) #endif // __RAIL_AUTOGEN_VER_DEF_H__ diff --git a/platform/radio/rail_lib/chip/efr32/efr32xg1x/rail_chip_specific.h b/platform/radio/rail_lib/chip/efr32/efr32xg1x/rail_chip_specific.h index c4ac5ae6884..65ad006f252 100644 --- a/platform/radio/rail_lib/chip/efr32/efr32xg1x/rail_chip_specific.h +++ b/platform/radio/rail_lib/chip/efr32/efr32xg1x/rail_chip_specific.h @@ -80,7 +80,7 @@ extern "C" { * @brief The EFR32XG1 series size needed for * \ref RAIL_StateBufferEntry_t::bufferBytes. */ -#define RAIL_EFR32XG1_STATE_BUFFER_BYTES 464 +#define RAIL_EFR32XG1_STATE_BUFFER_BYTES 456 /** * @def RAIL_EFR32XG12_STATE_BUFFER_BYTES @@ -94,14 +94,14 @@ extern "C" { * @brief The EFR32XG13 series size needed for * \ref RAIL_StateBufferEntry_t::bufferBytes. */ -#define RAIL_EFR32XG13_STATE_BUFFER_BYTES 480 +#define RAIL_EFR32XG13_STATE_BUFFER_BYTES 488 /** * @def RAIL_EFR32XG14_STATE_BUFFER_BYTES * @brief The EFR32XG14 series size needed for * \ref RAIL_StateBufferEntry_t::bufferBytes. */ -#define RAIL_EFR32XG14_STATE_BUFFER_BYTES 488 +#define RAIL_EFR32XG14_STATE_BUFFER_BYTES 496 /** * @def RAIL_STATE_BUFFER_BYTES diff --git a/platform/radio/rail_lib/chip/efr32/efr32xg2x/rail_chip_specific.h b/platform/radio/rail_lib/chip/efr32/efr32xg2x/rail_chip_specific.h index c1866b66dad..d5e4b055296 100644 --- a/platform/radio/rail_lib/chip/efr32/efr32xg2x/rail_chip_specific.h +++ b/platform/radio/rail_lib/chip/efr32/efr32xg2x/rail_chip_specific.h @@ -97,7 +97,7 @@ extern "C" { * @brief The EFR32XG23 series size needed for * \ref RAIL_StateBufferEntry_t::bufferBytes. */ -#define RAIL_EFR32XG23_STATE_BUFFER_BYTES 560 +#define RAIL_EFR32XG23_STATE_BUFFER_BYTES 568 /** * @def RAIL_EFR32XG24_STATE_BUFFER_BYTES @@ -111,7 +111,7 @@ extern "C" { * @brief The EFR32XG25 series size needed for * \ref RAIL_StateBufferEntry_t::bufferBytes. */ -#define RAIL_EFR32XG25_STATE_BUFFER_BYTES 616 +#define RAIL_EFR32XG25_STATE_BUFFER_BYTES 608 /** * @def RAIL_EFR32XG27_STATE_BUFFER_BYTES @@ -125,7 +125,7 @@ extern "C" { * @brief The EFR32XG28 series size needed for * \ref RAIL_StateBufferEntry_t::bufferBytes. */ -#define RAIL_EFR32XG28_STATE_BUFFER_BYTES 560 +#define RAIL_EFR32XG28_STATE_BUFFER_BYTES 568 #ifndef RAIL_STATE_BUFFER_BYTES /** diff --git a/platform/radio/rail_lib/common/rail.h b/platform/radio/rail_lib/common/rail.h index a397d2c2ca0..7f59004f02b 100644 --- a/platform/radio/rail_lib/common/rail.h +++ b/platform/radio/rail_lib/common/rail.h @@ -2636,6 +2636,25 @@ RAIL_Status_t RAIL_SetTxPowerDbm(RAIL_Handle_t railHandle, /// RAIL_TxPower_t RAIL_GetTxPowerDbm(RAIL_Handle_t railHandle); +/** + * Get the TX PA power setting table and related values. + * + * @param[in] railHandle A RAIL instance handle. + * @param[in] mode PA mode for which to get the powersetting table + * @param[out] minPower A pointer to a \ref RAIL_TxPower_t + * @param[out] maxPower A pointer to a \ref RAIL_TxPower_t + * @param[out] step In deci-dBm increments. A pointer to a \ref RAIL_TxPowerLevel_t + * @return Power setting table start address. When NULL is returned all out params + * above won't be set. + * + * The number of entries in the table can be calculated based on the minPower, maxPower, + * and step parameters. For example, for minPower = 115 (11.5 dBm), maxPower = 300 (30 dBm), + * and step = 1, the number of entries in table would be 186 + */ +const RAIL_PaPowerSetting_t *RAIL_GetPowerSettingTable(RAIL_Handle_t railHandle, RAIL_TxPowerMode_t mode, + RAIL_TxPower_t *minPower, RAIL_TxPower_t *maxPower, + RAIL_TxPowerLevel_t *step); + /** * Set the TX PA power setting used to configure the PA hardware for the PA output * power determined by \ref RAIL_SetTxPowerDbm(). @@ -3500,7 +3519,7 @@ RAIL_Status_t RAIL_ScheduleRx(RAIL_Handle_t railHandle, * This function can be used in any RX mode. It does not free up any * internal resources. If used in RX \ref RAIL_DataMethod_t::FIFO_MODE, the * value in \ref RAIL_RxPacketInfo_t::packetBytes will only return the data - * remaining in the FIFO. Any data read via earlier earlier calls to + * remaining in the FIFO. Any data read via earlier calls to * \ref RAIL_ReadRxFifo() is not included. * * @note When getting information about an arriving packet that is not yet complete, @@ -5682,8 +5701,8 @@ RAIL_RadioStateEfr32_t RAIL_GetRadioStateAlt(RAIL_Handle_t railHandle); */ /** Minimum power for CLPC usage in deci-dBm. Below this power CLPC will not activate. - * Recommend staying above 22 dBm for best performance. Signed unit, do not add U. */ -#define RAIL_CLPC_MINIMUM_POWER 200 + * Recommend staying above 19 dBm for best performance. Signed unit, do not add U. */ +#define RAIL_CLPC_MINIMUM_POWER 180 /** * Configure the attached EFF device. @@ -5698,13 +5717,16 @@ RAIL_Status_t RAIL_ConfigEff(RAIL_Handle_t genericRailHandle, const RAIL_EffConfig_t *config); /** Number of temperature values provided for the EFF thermal protection */ -#define RAIL_EFF_TEMP_MEASURE_COUNT (8U) +#define RAIL_EFF_TEMP_MEASURE_COUNT (6U) +/** Number of deprecated temperature values in EFF thermal protection */ +#define RAIL_EFF_TEMP_MEASURE_DEPRECATED_COUNT (2U) /** Number of temperature values provided for HFXO metrics */ -#define RAIL_HFXO_TEMP_MEASURE_COUNT (1U) +#define RAIL_HFXO_TEMP_MEASURE_COUNT (1U) /** Total number of temperature values provided by \ref RAIL_GetTemperature(). */ -#define RAIL_TEMP_MEASURE_COUNT (RAIL_CHIP_TEMP_MEASURE_COUNT \ - + RAIL_EFF_TEMP_MEASURE_COUNT \ +#define RAIL_TEMP_MEASURE_COUNT (RAIL_CHIP_TEMP_MEASURE_COUNT \ + + RAIL_EFF_TEMP_MEASURE_COUNT \ + + RAIL_EFF_TEMP_MEASURE_DEPRECATED_COUNT \ + RAIL_HFXO_TEMP_MEASURE_COUNT) /** @@ -5723,8 +5745,8 @@ RAIL_Status_t RAIL_ConfigEff(RAIL_Handle_t genericRailHandle, * tempBuffer[6] is the minimal EFF temperature value after Tx * tempBuffer[7] is the maximal EFF temperature value before Tx * tempBuffer[8] is the maximal EFF temperature value after Tx - * tempBuffer[9] is the average EFF temperature value before Tx - * tempBuffer[10] is the average EFF temperature value after Tx + * tempBuffer[9] is not used + * tempBuffer[10] is not used * * If \ref RAIL_SUPPORTS_HFXO_COMPENSATION * tempBuffer[11] is the HFXO temperature @@ -5739,34 +5761,6 @@ RAIL_Status_t RAIL_GetTemperature(RAIL_Handle_t railHandle, int16_t tempBuffer[RAIL_TEMP_MEASURE_COUNT], bool reset); -/** - * Set the FEM maximum power for continuous TX and the duty cycle for TX operations - * from \ref RAIL_FemProtectionConfig_t. - * Default continuous TX power is defined at 200 deci-dBm and can be set to a - * maximum of 300 deci-dBm. - * Default duty cycle is defined at 50 percent and can be set to a maximum of - * 100 percent. - * - * @param[in] railHandle A RAIL instance handle. - * @param[in] newFemConfig Pointer to the new limits to use for the FEM protection configuration - * @return Status code indicating success of the function call. - * - * @note Setting the power for continuous TX to 0 will apply the default value. Setting - * duty cycle to 0 will disable duty cycle protection. Passing a NULL for newFemConfig will reset - * to defaults. - * For an ambient temperature above 70 degrees Celsius, it is recommended to use the default configuration. - */ -RAIL_Status_t RAIL_SetFemProtectionConfig(RAIL_Handle_t railHandle, const RAIL_FemProtectionConfig_t *newFemConfig); - -/** - * Get the FEM protection configuration. - * - * @param[in] railHandle A RAIL instance handle. - * @param[out] femConfig Current FEM protection configuration written to this pointer. - * @return Status code indicating success of the function call. - */ -RAIL_Status_t RAIL_GetFemProtectionConfig(RAIL_Handle_t railHandle, RAIL_FemProtectionConfig_t *femConfig); - /** Number of bytes provided by \ref RAIL_GetSetEffControl(). */ #define RAIL_EFF_CONTROL_SIZE (52U) @@ -5856,13 +5850,13 @@ RAIL_Status_t RAIL_GetSetEffBypassDwellTimeMs(RAIL_Handle_t railHandle, * Fast Loop calibration values into new variables. * * @param[in] railHandle A RAIL instance handle - * @param[in] calibrationIndex Which calibration entry in the array to update + * @param[in] modeSensorIndex The mode sensor to use for this operation. * @param[in,out] calibrationEntry The calibration entry to retrieve or update * @param[in] changeValues If true, use new values to update the CLPC fast loop calibration * @return Status code indicating success of the function call. */ RAIL_Status_t RAIL_GetSetClpcFastLoopCal(RAIL_Handle_t railHandle, - RAIL_EffCalConfigEnum_t calibrationIndex, + RAIL_EffModeSensor_t modeSensorIndex, RAIL_EffCalConfig_t *calibrationEntry, bool changeValues); @@ -5872,36 +5866,34 @@ RAIL_Status_t RAIL_GetSetClpcFastLoopCal(RAIL_Handle_t railHandle, * Fast Loop calibration equations into new variables. * * @param[in] railHandle A RAIL instance handle - * @param[in] calibrationIndex Which calibration entry in the array to update - * @param[in,out] newSlope1e1 A pointer to a uint16_t that will contain the CLPC Cal slope + * @param[in] modeSensorIndex The mode sensor to use for this operation. + * @param[in,out] newSlope1e1MvPerDdbm A pointer to a uint16_t that will contain the CLPC Cal slope, in mV/ddBm * 10 * @param[in,out] newoffset290Ddbm A pointer to a uint16_t that will contain the CLPC Cal offset from 29 dB * @param[in] changeValues If true, use new values to update the CLPC fast loop calibration equations * @return Status code indicating success of the function call. */ RAIL_Status_t RAIL_GetSetClpcFastLoopCalSlp(RAIL_Handle_t railHandle, - RAIL_EffCalConfigEnum_t calibrationIndex, - int16_t *newSlope1e1, + RAIL_EffModeSensor_t modeSensorIndex, + int16_t *newSlope1e1MvPerDdbm, int16_t *newoffset290Ddbm, bool changeValues); /** * If changeValues is true, update current CLPC Fast Loop Target and - * Slope first for FSK and OFDM. If false, copy the current CLPC Fast - * Loop values into newTarget and newSlope for FSK and OFDM. + * Slope. If false, copy the current CLPC Fast Loop values into + * newTarget and newSlope. * * @param[in] railHandle A RAIL instance handle - * @param[in,out] newTargetFsk A pointer to a uint16_t that will contain the CLPC Fast Loop Target for FSK - * @param[in,out] newSlopeFsk A pointer to a uint16_t that will contain the CLPC Fast Loop Slope for FSK - * @param[in,out] newTargetOfdm A pointer to a uint16_t that will contain the CLPC Fast Loop Target for OFDM - * @param[in,out] newSlopeOfdm A pointer to a uint16_t that will contain the CLPC Fast Loop Slope for OFDM - * @param[in] changeValues If true, use newTarget and newGain to update the CLPC Fast Loop values + * @param[in] modeSensorIndex The mode sensor to use for this operation. + * @param[in,out] newTargetMv A pointer to a uint16_t that will contain the CLPC Fast Loop Target in mV + * @param[in,out] newSlopeMvPerPaLevel A pointer to a uint16_t that will contain the CLPC Fast Loop Slope in mV/(PA power level) + * @param[in] changeValues If true, use newTargetMv and newSlopeMvPerPaLevel to update the CLPC Fast Loop values * @return Status code indicating success of the function call. */ RAIL_Status_t RAIL_GetSetClpcFastLoop(RAIL_Handle_t railHandle, - uint16_t *newTargetFsk, - uint16_t *newSlopeFsk, - uint16_t *newTargetOfdm, - uint16_t *newSlopeOfdm, + RAIL_EffModeSensor_t modeSensorIndex, + uint16_t *newTargetMv, + uint16_t *newSlopeMvPerPaLevel, bool changeValues); /** @@ -5917,6 +5909,21 @@ RAIL_Status_t RAIL_GetSetClpcEnable(RAIL_Handle_t railHandle, uint8_t *newClpcEnable, bool changeClpcEnable); +#ifndef DOXYGEN_SHOULD_SKIP_THIS +/** + * Get or set the EFF CLPC control flags for internal developer control. + * This interface may change at any time. + * + * @param[in] railHandle A RAIL instance handle + * @param[in] flags Pointer to the location of a single uint8_t containing flag values + * @param[in] change If true, use flags to update current EFF CLPC flags + * @return RAIL_Status_t indicating success or failure of the function + */ +RAIL_Status_t RAIL_GetSetEffClpcFlags(RAIL_Handle_t railHandle, + uint8_t *flags, + bool change); +#endif + /** * Get and set the EFF temperature threshold. * @@ -5949,9 +5956,12 @@ RAIL_Status_t RAIL_GetSetEffTempThreshold(RAIL_Handle_t railHandle, /** * Enable or disable the thermal protection if \ref RAIL_SUPPORTS_THERMAL_PROTECTION * is defined and update the temperature threshold and cool down hysteresis preventing or - * allowing transmissions. When the temperature threshold is exceeded, - * any transmission is blocked until the temperature decreases by a precise number - * of degrees specified by the cool down hysteresis parameter. + * allowing transmissions. + * + * When the temperature threshold minus a precise number of degrees + * specified by the cool down hysteresis parameter is exceeded, + * any future transmits are blocked until the temperature decreases below that limit. + * Besides, if the temperature threshold is exceeded, any active transmit is aborted. * * By default the threshold is set to \ref RAIL_CHIP_TEMP_THRESHOLD_MAX and * the cool down hysteresis is set to \ref RAIL_CHIP_TEMP_COOLDOWN_DEFAULT. diff --git a/platform/radio/rail_lib/common/rail_features.h b/platform/radio/rail_lib/common/rail_features.h index b31d255b88b..8354710cbe6 100644 --- a/platform/radio/rail_lib/common/rail_features.h +++ b/platform/radio/rail_lib/common/rail_features.h @@ -502,7 +502,7 @@ extern "C" { /// IEEE 802.15.4G-2012 feature subset needed for Zigbee R22 GB868. /// See also runtime refinement \ref /// RAIL_IEEE802154_SupportsGSubsetGB868(). -#if 1 +#if (_SILICON_LABS_32B_SERIES_2_CONFIG != 3) #define RAIL_IEEE802154_SUPPORTS_G_SUBSET_GB868 \ ((RAIL_SUPPORTS_PROTOCOL_IEEE802154 != 0) && (RAIL_SUPPORTS_SUBGHZ_BAND != 0)) #else diff --git a/platform/radio/rail_lib/common/rail_types.h b/platform/radio/rail_lib/common/rail_types.h index 4ad226b3fb2..2060a72dd7f 100644 --- a/platform/radio/rail_lib/common/rail_types.h +++ b/platform/radio/rail_lib/common/rail_types.h @@ -366,6 +366,13 @@ typedef struct RAIL_PacketTimeStamp { * value filled in by a call using this structure. */ RAIL_PacketTimePosition_t timePosition; + /** + * A value specifying the on-air duration of the data packet, + * starting with the first bit of the PHR (i.e. end of sync word). + * Preamble and sync word duration are hence excluded. + * Only valid for receive packets at the present time on EFR32xG25 only. + */ + RAIL_Time_t packetDurationUs; } RAIL_PacketTimeStamp_t; /** @} */ // end of group System_Timing @@ -842,6 +849,12 @@ RAIL_ENUM_GENERIC(RAIL_Events_t, uint64_t) { RAIL_EVENT_DETECT_RSSI_THRESHOLD_SHIFT, /** Shift position of \ref RAIL_EVENT_THERMISTOR_DONE bit */ RAIL_EVENT_THERMISTOR_DONE_SHIFT, + /** Shift position of \ref RAIL_EVENT_TX_BLOCKED_TOO_HOT bit */ + RAIL_EVENT_TX_BLOCKED_TOO_HOT_SHIFT, + /** Shift position of \ref RAIL_EVENT_TEMPERATURE_TOO_HOT bit */ + RAIL_EVENT_TEMPERATURE_TOO_HOT_SHIFT, + /** Shift position of \ref RAIL_EVENT_TEMPERATURE_COOL_DOWN bit */ + RAIL_EVENT_TEMPERATURE_COOL_DOWN_SHIFT, }; /** Shift position of \ref RAIL_EVENT_SCHEDULED_TX_STARTED bit */ @@ -1520,6 +1533,34 @@ RAIL_ENUM_GENERIC(RAIL_Events_t, uint64_t) { */ #define RAIL_EVENT_THERMISTOR_DONE (1ULL << RAIL_EVENT_THERMISTOR_DONE_SHIFT) +/** + * Occurs when a Tx has been blocked because of temperature exceeding + * the safety threshold. + * + * Only occurs on platforms where \ref RAIL_SUPPORTS_EFF is true. + */ +#define RAIL_EVENT_TX_BLOCKED_TOO_HOT (1ULL << RAIL_EVENT_TX_BLOCKED_TOO_HOT_SHIFT) + +/** + * Occurs when die internal temperature exceeds the temperature threshold subtracted + * by the cool down parameter from \ref RAIL_ChipTempConfig_t. + * Transmits are blocked until temperature has cooled enough, indicated by + * \ref RAIL_EVENT_TEMPERATURE_COOL_DOWN. + * + * Only occurs on platforms where \ref RAIL_SUPPORTS_THERMAL_PROTECTION is true. + */ +#define RAIL_EVENT_TEMPERATURE_TOO_HOT (1ULL << RAIL_EVENT_TEMPERATURE_TOO_HOT_SHIFT) + +/** + * Occurs when die internal temperature falls below the temperature threshold subtracted + * by the cool down parameter from \ref RAIL_ChipTempConfig_t. + * Transmits are no longer blocked by temperature limitation, indicated by + * \ref RAIL_EVENT_TEMPERATURE_TOO_HOT. + * + * Only occurs on platforms where \ref RAIL_SUPPORTS_THERMAL_PROTECTION is true. + */ +#define RAIL_EVENT_TEMPERATURE_COOL_DOWN (1ULL << RAIL_EVENT_TEMPERATURE_COOL_DOWN_SHIFT) + /** A value representing all possible events */ #define RAIL_EVENTS_ALL 0xFFFFFFFFFFFFFFFFULL @@ -4442,16 +4483,10 @@ RAIL_ENUM(RAIL_EffDevice_t) { || ((x) == RAIL_EFF_DEVICE_EFF01B11IMFB0) \ ) -/** Maximum ambient temperature in Kelvin, allowing transmissions when +/** Maximum EFF internal temperature in Kelvin, allowing transmissions when * \ref RAIL_SUPPORTS_EFF is enabled. */ -#define RAIL_EFF_TEMP_THRESHOLD_MAX (393U) - -/** - * Default number of Kelvin degrees below threshold needed to unblock transmissions - * blocked because the temperature threshold was exceeded. - */ -#define RAIL_EFF_TEMP_COOLDOWN_DEFAULT (13U) +#define RAIL_EFF_TEMP_THRESHOLD_MAX (383U) /** * @enum RAIL_EffLnaMode_t @@ -4512,71 +4547,75 @@ RAIL_ENUM(RAIL_ClpcEnable_t) { #endif//DOXYGEN_SHOULD_SKIP_THIS /** - * @enum RAIL_EffCalConfigEnum_t - * @brief EFF Closed Loop Power Control (CLPC) Calibration Indices + * @enum RAIL_EffModeSensor_t + * @brief EFF Closed Loop Power Control (CLPC) Mode Sensor Indices * - * The calibration indices point to entries into the calibration array. - * FSK is always the first entry. OFDM is the rest. + * The mode sensor indices are used to access specific settings with CLPC. */ -RAIL_ENUM(RAIL_EffCalConfigEnum_t) { - RAIL_EFF_CAL_FSK_1 = 0, /**< CLPC FSK power calibration entry 1. */ - RAIL_EFF_CAL_OFDM_1 = 1, /**< CLPC OFDM power calibration entry 1. */ - RAIL_EFF_CAL_COUNT = 2 /**< A count of the choices in this enumeration. Must be last. */ +RAIL_ENUM(RAIL_EffModeSensor_t) { + RAIL_EFF_MODE_SENSOR_FSK_ANTV = 0, /**< CLPC FSK ANTV Sensor. */ + RAIL_EFF_MODE_SENSOR_FSK_SAW2 = 1, /**< CLPC FSK SAW2 Sensor. */ + RAIL_EFF_MODE_SENSOR_OFDM_ANTV = 2, /**< CLPC OFDM ANTV power calibration entry 1. */ + RAIL_EFF_MODE_SENSOR_OFDM_SAW2 = 3, /**< CLPC OFDM SAW2 power calibration entry 1. */ + RAIL_EFF_MODE_SENSOR_COUNT /**< A count of the choices in this enumeration. Must be last. */ }; #ifndef DOXYGEN_SHOULD_SKIP_THIS // Self-referencing defines minimize compiler complaints when using RAIL_ENUM -#define RAIL_EFF_CAL_FSK_1 ((RAIL_EffCalConfigEnum_t) RAIL_EFF_CAL_FSK_1) -#define RAIL_EFF_CAL_OFDM_1 ((RAIL_EffCalConfigEnum_t) RAIL_EFF_CAL_OFDM_1) -#define RAIL_EFF_CAL_COUNT ((RAIL_EffCalConfigEnum_t) RAIL_EFF_CAL_COUNT) +#define RAIL_EFF_MODE_SENSOR_FSK_ANTV ((RAIL_EffModeSensor_t) RAIL_EFF_MODE_SENSOR_FSK_ANTV) +#define RAIL_EFF_MODE_SENSOR_FSK_SAW2 ((RAIL_EffModeSensor_t) RAIL_EFF_MODE_SENSOR_FSK_SAW2) +#define RAIL_EFF_MODE_SENSOR_OFDM_ANTV ((RAIL_EffModeSensor_t) RAIL_EFF_MODE_SENSOR_OFDM_ANTV) +#define RAIL_EFF_MODE_SENSOR_OFDM_SAW2 ((RAIL_EffModeSensor_t) RAIL_EFF_MODE_SENSOR_OFDM_SAW2) +#define RAIL_EFF_MODE_SENSOR_COUNT ((RAIL_EffModeSensor_t) RAIL_EFF_CAL_COUNT) #endif//DOXYGEN_SHOULD_SKIP_THIS /** - * @def RAIL_EFF_CAL_ENUM_NAMES + * @def RAIL_EFF_MODE_SENSOR_ENUM_NAMES * @brief A macro that is string versions of the calibration enums. */ -#define RAIL_EFF_CAL_ENUM_NAMES { \ - "RAIL_EFF_CAL_FSK_1", \ - "RAIL_EFF_CAL_OFDM_1", \ +#define RAIL_EFF_MODE_SENSOR_ENUM_NAMES { \ + "RAIL_EFF_MODE_SENSOR_FSK_ANTV", \ + "RAIL_EFF_MODE_SENSOR_FSK_SAW2", \ + "RAIL_EFF_MODE_SENSOR_OFDM_ANTV", \ + "RAIL_EFF_MODE_SENSOR_OFDM_SAW2", \ } -/** - * @struct RAIL_FemProtectionConfig_t - * - * @brief Temperature protection configuration for the attached FEM. - */ -typedef struct RAIL_FemProtectionConfig { - RAIL_TxPower_t PMaxContinuousTx; /**< Power limit at FEM output, in deci-dBm */ - uint8_t txDutyCycle; /**< TX duty cycle limit, in percentage */ - uint8_t reserved_padding1; /**< Padding for 32 bit alignment */ - uint32_t reserved[2]; /**< Reserved. Values ignored. */ -} RAIL_FemProtectionConfig_t; - /** @struct RAIL_EffCalConfig_t * * @brief Calibration data for CLPC in a specific mode. */ typedef struct RAIL_EffCalConfig { RAIL_TxPower_t cal1Ddbm; /**< Measured Output Power for CAL1 (nominally 270 ddBm) */ - uint16_t cal1; /**< Measured Output Voltage using sensor at CAL1 ddBm */ + uint16_t cal1Mv; /**< Measured Output Voltage using sensor at CAL1 ddBm */ RAIL_TxPower_t cal2Ddbm; /**< Measured Output Power for CAL2 (nominally at 290 ddBm) */ - uint16_t cal2; /**< Measured Output Voltage using sensor at CAL2 ddBm */ + uint16_t cal2Mv; /**< Measured Output Voltage using sensor at CAL2 ddBm */ } RAIL_EffCalConfig_t; +/** @struct RAIL_EffClpcSensorConfig_t + * + * @brief Configuration data for a CLPC sensor. + * + * A structure of type \ref RAIL_EffClpcSensorConfig_t stores curve and calibration information for a CLPC sensor. + */ +typedef struct RAIL_EffClpcSensorConfig { + int64_t coefA; /**< Coefficient A for Sensor Voltage curve. Multiplied by 1e7. */ + int64_t coefB; /**< Coefficient B for Sensor Voltage curve. Multiplied by 1e7. */ + int64_t coefC; /**< Coefficient C for Sensor Voltage curve. Multiplied by 1e7. */ + int64_t coefD; /**< Coefficient D for Sensor Voltage curve. Multiplied by 1e7. */ + RAIL_EffCalConfig_t calData; /**< Calibration data for Sensor for this mode */ + int16_t slope1e1MvPerDdbm; /**< Calculated slope * 10 for Sensor calibration, measured in mV/ddBm */ + int16_t offset290Ddbm; /**< Calculated effective offset at 290 ddBm for Sensor calibration */ +} RAIL_EffClpcSensorConfig_t; + /** @struct RAIL_EffClpcConfig_t * * @brief Configuration data for CLPC in a specific mode. * - * A structure of type \ref RAIL_EffClpcConfig_t stores calibration information for each mode. + * A structure of type \ref RAIL_EffClpcConfig_t stores calibration information for each sensor in a specific mode. */ typedef struct RAIL_EffClpcConfig { - int64_t antvA; /**< Coefficient A for Sensor Voltage curve. Multiplied by 1e7. */ - int64_t antvB; /**< Coefficient B for Sensor Voltage curve. Multiplied by 1e7. */ - int64_t antvC; /**< Coefficient C for Sensor Voltage curve. Multiplied by 1e7. */ - int64_t antvD; /**< Coefficient D for Sensor Voltage curve. Multiplied by 1e7. */ - RAIL_EffCalConfig_t calData; /**< Calibration data for this mode */ - int16_t slope1e1; /**< Calculated slope * 10 for calibration */ - int16_t offset290Ddbm; /**< Calculated effective offset at 290 ddBm for calibration */ + RAIL_EffClpcSensorConfig_t antv; /**< ANTV sensor configuration */ + RAIL_EffClpcSensorConfig_t saw2; /**< SAW2 sensor configuration */ } RAIL_EffClpcConfig_t; /** @@ -4600,9 +4639,8 @@ typedef struct RAIL_EffConfig { RAIL_EffClpcConfig_t ofdmClpcConfig;/**< Config Structure for OFDM CLPC settings */ uint8_t clpcReserved; /**< Reserved for future use */ RAIL_ClpcEnable_t clpcEnable; /**< Select CLPC mode */ - uint8_t maxTxContinuousPowerDbm; /**< Maximum continuous power (in dBm) */ - uint8_t maxTxDutyCycle; /**< Maximum transmit duty cycle (as a - percentage) */ + bool advProtectionEnable; /**< Indicates whether the advanced thermal protection is enabled */ + uint8_t reservedByte; /**< Word alignment */ uint16_t tempThresholdK; /**< Temperature of EFF above which transmit is not allowed, in degrees Kelvin */ } RAIL_EffConfig_t; @@ -4617,16 +4655,15 @@ typedef struct RAIL_EffConfig { * @{ */ -/** Maximum ambient temperature in Kelvin, allowing transmissions when +/** Maximum junction temperature in Kelvin. A margin is subtracted before using it when * \ref RAIL_SUPPORTS_THERMAL_PROTECTION is enabled. */ -#define RAIL_CHIP_TEMP_THRESHOLD_MAX (393U) +#define RAIL_CHIP_TEMP_THRESHOLD_MAX (398U) /** - * Default number of Kelvin degrees below threshold needed to unblock transmissions - * blocked because the temperature threshold was exceeded. + * Default number of Kelvin degrees below threshold needed to allow transmissions. */ -#define RAIL_CHIP_TEMP_COOLDOWN_DEFAULT (13U) +#define RAIL_CHIP_TEMP_COOLDOWN_DEFAULT (7U) /** * @struct RAIL_ChipTempConfig_t diff --git a/platform/radio/rail_lib/plugin/pa-conversions/efr32xg25/sl_rail_util_pa_dbm_powersetting_mapping_table_eff.h b/platform/radio/rail_lib/plugin/pa-conversions/efr32xg25/sl_rail_util_pa_dbm_powersetting_mapping_table_eff.h index 4eae3809d64..34573be661b 100644 --- a/platform/radio/rail_lib/plugin/pa-conversions/efr32xg25/sl_rail_util_pa_dbm_powersetting_mapping_table_eff.h +++ b/platform/radio/rail_lib/plugin/pa-conversions/efr32xg25/sl_rail_util_pa_dbm_powersetting_mapping_table_eff.h @@ -38,490 +38,484 @@ extern "C" { #endif -#define RAIL_PA_CURVES_EFF_OFDM_CURVES_NUM_VALUES (248U) +#define RAIL_PA_CURVES_EFF_OFDM_CURVES_NUM_VALUES (244U) #define RAIL_PA_CURVES_EFF_OFDM_CURVES_STEP_DDBM (1U) -#define RAIL_PA_CURVES_EFF_OFDM_MAX_POWER_DDBM (300U) -#define RAIL_PA_CURVES_EFF_OFDM_MIN_POWER_DDBM (53U) +#define RAIL_PA_CURVES_EFF_OFDM_MAX_POWER_DDBM (350U) +#define RAIL_PA_CURVES_EFF_OFDM_MIN_POWER_DDBM (107U) #define RAIL_PA_CURVES_EFF_OFDM_CURVES \ { \ - 0x20f1e /* 5.3 dBm */, \ - 0x20f1e /* 5.4 dBm */, \ - 0x20f1e /* 5.5 dBm */, \ - 0x20f1e /* 5.6 dBm */, \ - 0x20f1e /* 5.7 dBm */, \ - 0x2101e /* 5.8 dBm */, \ - 0x2101e /* 5.9 dBm */, \ - 0x2101e /* 6.0 dBm */, \ - 0x2101e /* 6.1 dBm */, \ - 0x2101e /* 6.2 dBm */, \ - 0x2111e /* 6.3 dBm */, \ - 0x2111e /* 6.4 dBm */, \ - 0x2111e /* 6.5 dBm */, \ - 0x2111e /* 6.6 dBm */, \ - 0x2111e /* 6.7 dBm */, \ - 0x2121e /* 6.8 dBm */, \ - 0x2121e /* 6.9 dBm */, \ - 0x2121e /* 7.0 dBm */, \ - 0x2121e /* 7.1 dBm */, \ - 0x2131e /* 7.2 dBm */, \ - 0x2131e /* 7.3 dBm */, \ - 0x2131e /* 7.4 dBm */, \ - 0x2131e /* 7.5 dBm */, \ - 0x2141e /* 7.6 dBm */, \ - 0x2141e /* 7.7 dBm */, \ - 0x2141e /* 7.8 dBm */, \ - 0x2141e /* 7.9 dBm */, \ - 0x2151e /* 8.0 dBm */, \ - 0x2151e /* 8.1 dBm */, \ - 0x2151e /* 8.2 dBm */, \ - 0x2151e /* 8.3 dBm */, \ - 0x2161e /* 8.4 dBm */, \ - 0x2161e /* 8.5 dBm */, \ - 0x2161e /* 8.6 dBm */, \ - 0x2171e /* 8.7 dBm */, \ - 0x2171e /* 8.8 dBm */, \ - 0x2171e /* 8.9 dBm */, \ - 0x2171f /* 9.0 dBm */, \ - 0x2171f /* 9.1 dBm */, \ - 0x2171f /* 9.2 dBm */, \ - 0x21720 /* 9.3 dBm */, \ - 0x21721 /* 9.4 dBm */, \ - 0x21721 /* 9.5 dBm */, \ - 0x21721 /* 9.6 dBm */, \ - 0x21721 /* 9.7 dBm */, \ - 0x21722 /* 9.8 dBm */, \ - 0x21722 /* 9.9 dBm */, \ - 0x21722 /* 10.0 dBm */, \ - 0x21723 /* 10.1 dBm */, \ - 0x21723 /* 10.2 dBm */, \ - 0x21724 /* 10.3 dBm */, \ - 0x21724 /* 10.4 dBm */, \ - 0x21724 /* 10.5 dBm */, \ - 0x21824 /* 10.6 dBm */, \ - 0x21824 /* 10.7 dBm */, \ - 0x21824 /* 10.8 dBm */, \ - 0x21924 /* 10.9 dBm */, \ - 0x21a24 /* 11.0 dBm */, \ - 0x21a24 /* 11.1 dBm */, \ - 0x21a24 /* 11.2 dBm */, \ - 0x21b24 /* 11.3 dBm */, \ - 0x21b24 /* 11.4 dBm */, \ - 0x21b24 /* 11.5 dBm */, \ - 0x21c24 /* 11.6 dBm */, \ - 0x21c24 /* 11.7 dBm */, \ - 0x21c24 /* 11.8 dBm */, \ - 0x21d24 /* 11.9 dBm */, \ - 0x21d24 /* 12.0 dBm */, \ - 0x21d24 /* 12.1 dBm */, \ - 0x21e24 /* 12.2 dBm */, \ - 0x21e24 /* 12.3 dBm */, \ - 0x21e24 /* 12.4 dBm */, \ - 0x21f24 /* 12.5 dBm */, \ - 0x21f24 /* 12.6 dBm */, \ - 0x21f24 /* 12.7 dBm */, \ - 0x22024 /* 12.8 dBm */, \ - 0x22024 /* 12.9 dBm */, \ - 0x22024 /* 13.0 dBm */, \ - 0x22124 /* 13.1 dBm */, \ - 0x22124 /* 13.2 dBm */, \ - 0x22125 /* 13.3 dBm */, \ - 0x22125 /* 13.4 dBm */, \ - 0x22126 /* 13.5 dBm */, \ - 0x22126 /* 13.6 dBm */, \ - 0x22126 /* 13.7 dBm */, \ - 0x22127 /* 13.8 dBm */, \ - 0x22127 /* 13.9 dBm */, \ - 0x22128 /* 14.0 dBm */, \ - 0x22128 /* 14.1 dBm */, \ - 0x22129 /* 14.2 dBm */, \ - 0x22129 /* 14.3 dBm */, \ - 0x2212a /* 14.4 dBm */, \ - 0x2212a /* 14.5 dBm */, \ - 0x2222a /* 14.6 dBm */, \ - 0x2222a /* 14.7 dBm */, \ - 0x2232a /* 14.8 dBm */, \ - 0x2232a /* 14.9 dBm */, \ - 0x2232a /* 15.0 dBm */, \ - 0x2232a /* 15.1 dBm */, \ - 0x2242a /* 15.2 dBm */, \ - 0x2242a /* 15.3 dBm */, \ - 0x2252a /* 15.4 dBm */, \ - 0x2252a /* 15.5 dBm */, \ - 0x2262a /* 15.6 dBm */, \ - 0x2262a /* 15.7 dBm */, \ - 0x2272a /* 15.8 dBm */, \ - 0x2282a /* 15.9 dBm */, \ - 0x2282a /* 16.0 dBm */, \ - 0x2292a /* 16.1 dBm */, \ - 0x2292a /* 16.2 dBm */, \ - 0x22a2a /* 16.3 dBm */, \ - 0x22a2a /* 16.4 dBm */, \ - 0x22b2a /* 16.5 dBm */, \ - 0x22c2a /* 16.6 dBm */, \ - 0x22c2a /* 16.7 dBm */, \ - 0x22d2a /* 16.8 dBm */, \ - 0x22d2a /* 16.9 dBm */, \ - 0x22e2a /* 17.0 dBm */, \ - 0x22f2a /* 17.1 dBm */, \ - 0x22f2a /* 17.2 dBm */, \ - 0x2302a /* 17.3 dBm */, \ - 0x2312a /* 17.4 dBm */, \ - 0x2312a /* 17.5 dBm */, \ - 0x2322a /* 17.6 dBm */, \ - 0x2332a /* 17.7 dBm */, \ - 0x2342a /* 17.8 dBm */, \ - 0x2342a /* 17.9 dBm */, \ - 0x2352a /* 18.0 dBm */, \ - 0x2362a /* 18.1 dBm */, \ - 0x2372a /* 18.2 dBm */, \ - 0x2382a /* 18.3 dBm */, \ - 0x2382a /* 18.4 dBm */, \ - 0x2392a /* 18.5 dBm */, \ - 0x23a2a /* 18.6 dBm */, \ - 0x23b2a /* 18.7 dBm */, \ - 0x23c2a /* 18.8 dBm */, \ - 0x23d2a /* 18.9 dBm */, \ - 0x23e2a /* 19.0 dBm */, \ - 0x23f2a /* 19.1 dBm */, \ - 0x23f2b /* 19.2 dBm */, \ - 0x23f2b /* 19.3 dBm */, \ - 0x23f2c /* 19.4 dBm */, \ - 0x23f2c /* 19.5 dBm */, \ - 0x23f2d /* 19.6 dBm */, \ - 0x23f2d /* 19.7 dBm */, \ - 0x23f2e /* 19.8 dBm */, \ - 0x23f2e /* 19.9 dBm */, \ - 0x23f2f /* 20.0 dBm */, \ - 0x23f30 /* 20.1 dBm */, \ - 0x23f30 /* 20.2 dBm */, \ - 0x23f31 /* 20.3 dBm */, \ - 0x23f31 /* 20.4 dBm */, \ - 0x23f32 /* 20.5 dBm */, \ - 0x23f33 /* 20.6 dBm */, \ - 0x23f33 /* 20.7 dBm */, \ - 0x23f34 /* 20.8 dBm */, \ - 0x23f35 /* 20.9 dBm */, \ - 0x23f36 /* 21.0 dBm */, \ - 0x23f36 /* 21.1 dBm */, \ - 0x23f37 /* 21.2 dBm */, \ - 0x23f38 /* 21.3 dBm */, \ - 0x23f39 /* 21.4 dBm */, \ - 0x23f3a /* 21.5 dBm */, \ - 0x23f3a /* 21.6 dBm */, \ - 0x23f3b /* 21.7 dBm */, \ - 0x23f3c /* 21.8 dBm */, \ - 0x23f3d /* 21.9 dBm */, \ - 0x23f3e /* 22.0 dBm */, \ - 0x23f3e /* 22.1 dBm */, \ - 0x23f3f /* 22.2 dBm */, \ - 0x23f40 /* 22.3 dBm */, \ - 0x23f41 /* 22.4 dBm */, \ - 0x23f42 /* 22.5 dBm */, \ - 0x23f43 /* 22.6 dBm */, \ - 0x23f44 /* 22.7 dBm */, \ - 0x23f44 /* 22.8 dBm */, \ - 0x23f45 /* 22.9 dBm */, \ - 0x23f46 /* 23.0 dBm */, \ - 0x23f47 /* 23.1 dBm */, \ - 0x23f48 /* 23.2 dBm */, \ - 0x23f49 /* 23.3 dBm */, \ - 0x23f4a /* 23.4 dBm */, \ - 0x23f4b /* 23.5 dBm */, \ - 0x23f4c /* 23.6 dBm */, \ - 0x23f4d /* 23.7 dBm */, \ - 0x23f4e /* 23.8 dBm */, \ - 0x23f50 /* 23.9 dBm */, \ - 0x23f51 /* 24.0 dBm */, \ - 0x23f52 /* 24.1 dBm */, \ - 0x23f53 /* 24.2 dBm */, \ - 0x23f54 /* 24.3 dBm */, \ - 0x23f56 /* 24.4 dBm */, \ - 0x23f57 /* 24.5 dBm */, \ - 0x23f58 /* 24.6 dBm */, \ - 0x23f5a /* 24.7 dBm */, \ - 0x23f5b /* 24.8 dBm */, \ - 0x23f5c /* 24.9 dBm */, \ - 0x23f5e /* 25.0 dBm */, \ - 0x23f5f /* 25.1 dBm */, \ - 0x23f61 /* 25.2 dBm */, \ - 0x23f62 /* 25.3 dBm */, \ - 0x23f64 /* 25.4 dBm */, \ - 0x23f66 /* 25.5 dBm */, \ - 0x23f67 /* 25.6 dBm */, \ - 0x23f69 /* 25.7 dBm */, \ - 0x23f6b /* 25.8 dBm */, \ - 0x23f6e /* 25.9 dBm */, \ - 0x23f6f /* 26.0 dBm */, \ - 0x23f71 /* 26.1 dBm */, \ - 0x23f74 /* 26.2 dBm */, \ - 0x23f75 /* 26.3 dBm */, \ - 0x23f77 /* 26.4 dBm */, \ - 0x23f7a /* 26.5 dBm */, \ - 0x23f7c /* 26.6 dBm */, \ - 0x23f7e /* 26.7 dBm */, \ - 0x23f81 /* 26.8 dBm */, \ - 0x23f83 /* 26.9 dBm */, \ - 0x23f86 /* 27.0 dBm */, \ - 0x23f89 /* 27.1 dBm */, \ - 0x23f8c /* 27.2 dBm */, \ - 0x23f8f /* 27.3 dBm */, \ - 0x23f92 /* 27.4 dBm */, \ - 0x23f96 /* 27.5 dBm */, \ - 0x23f99 /* 27.6 dBm */, \ - 0x23f9e /* 27.7 dBm */, \ - 0x24284 /* 27.8 dBm */, \ - 0x24484 /* 27.9 dBm */, \ - 0x24684 /* 28.0 dBm */, \ - 0x24884 /* 28.1 dBm */, \ - 0x24a84 /* 28.2 dBm */, \ - 0x24e84 /* 28.3 dBm */, \ - 0x25084 /* 28.4 dBm */, \ - 0x25284 /* 28.5 dBm */, \ - 0x25684 /* 28.6 dBm */, \ - 0x25a84 /* 28.7 dBm */, \ - 0x25e84 /* 28.8 dBm */, \ - 0x26484 /* 28.9 dBm */, \ - 0x26784 /* 29.0 dBm */, \ - 0x26d84 /* 29.1 dBm */, \ - 0x27384 /* 29.2 dBm */, \ - 0x27c84 /* 29.3 dBm */, \ - 0x27f8c /* 29.4 dBm */, \ - 0x27f94 /* 29.5 dBm */, \ - 0x27f9d /* 29.6 dBm */, \ - 0x27fa6 /* 29.7 dBm */, \ - 0x27fb0 /* 29.8 dBm */, \ - 0x27fbb /* 29.9 dBm */, \ - 0x27fc6 /* 30.0 dBm */ \ + 0x20f1e, /* 10.7 dBm */ \ + 0x2101e, /* 10.8 dBm */ \ + 0x2101e, /* 10.9 dBm */ \ + 0x2101e, /* 11.0 dBm */ \ + 0x2101e, /* 11.1 dBm */ \ + 0x2101e, /* 11.2 dBm */ \ + 0x2111e, /* 11.3 dBm */ \ + 0x2111e, /* 11.4 dBm */ \ + 0x2111e, /* 11.5 dBm */ \ + 0x2111e, /* 11.6 dBm */ \ + 0x2111e, /* 11.7 dBm */ \ + 0x2121e, /* 11.8 dBm */ \ + 0x2121e, /* 11.9 dBm */ \ + 0x2121e, /* 12.0 dBm */ \ + 0x2121e, /* 12.1 dBm */ \ + 0x2131e, /* 12.2 dBm */ \ + 0x2131e, /* 12.3 dBm */ \ + 0x2131e, /* 12.4 dBm */ \ + 0x2131e, /* 12.5 dBm */ \ + 0x2141e, /* 12.6 dBm */ \ + 0x2141e, /* 12.7 dBm */ \ + 0x2141e, /* 12.8 dBm */ \ + 0x2141e, /* 12.9 dBm */ \ + 0x2151e, /* 13.0 dBm */ \ + 0x2151e, /* 13.1 dBm */ \ + 0x2151e, /* 13.2 dBm */ \ + 0x2151e, /* 13.3 dBm */ \ + 0x2161e, /* 13.4 dBm */ \ + 0x2161e, /* 13.5 dBm */ \ + 0x2161e, /* 13.6 dBm */ \ + 0x2171e, /* 13.7 dBm */ \ + 0x2171e, /* 13.8 dBm */ \ + 0x2171e, /* 13.9 dBm */ \ + 0x2171f, /* 14.0 dBm */ \ + 0x2171f, /* 14.1 dBm */ \ + 0x2171f, /* 14.2 dBm */ \ + 0x21720, /* 14.3 dBm */ \ + 0x21721, /* 14.4 dBm */ \ + 0x21721, /* 14.5 dBm */ \ + 0x21721, /* 14.6 dBm */ \ + 0x21721, /* 14.7 dBm */ \ + 0x21722, /* 14.8 dBm */ \ + 0x21722, /* 14.9 dBm */ \ + 0x21722, /* 15.0 dBm */ \ + 0x21723, /* 15.1 dBm */ \ + 0x21723, /* 15.2 dBm */ \ + 0x21724, /* 15.3 dBm */ \ + 0x21724, /* 15.4 dBm */ \ + 0x21724, /* 15.5 dBm */ \ + 0x21824, /* 15.6 dBm */ \ + 0x21824, /* 15.7 dBm */ \ + 0x21824, /* 15.8 dBm */ \ + 0x21924, /* 15.9 dBm */ \ + 0x21a24, /* 16.0 dBm */ \ + 0x21a24, /* 16.1 dBm */ \ + 0x21a24, /* 16.2 dBm */ \ + 0x21b24, /* 16.3 dBm */ \ + 0x21b24, /* 16.4 dBm */ \ + 0x21b24, /* 16.5 dBm */ \ + 0x21c24, /* 16.6 dBm */ \ + 0x21c24, /* 16.7 dBm */ \ + 0x21c24, /* 16.8 dBm */ \ + 0x21d24, /* 16.9 dBm */ \ + 0x21d24, /* 17.0 dBm */ \ + 0x21d24, /* 17.1 dBm */ \ + 0x21e24, /* 17.2 dBm */ \ + 0x21e24, /* 17.3 dBm */ \ + 0x21e24, /* 17.4 dBm */ \ + 0x21f24, /* 17.5 dBm */ \ + 0x21f24, /* 17.6 dBm */ \ + 0x21f24, /* 17.7 dBm */ \ + 0x22024, /* 17.8 dBm */ \ + 0x22024, /* 17.9 dBm */ \ + 0x22024, /* 18.0 dBm */ \ + 0x22124, /* 18.1 dBm */ \ + 0x22124, /* 18.2 dBm */ \ + 0x22125, /* 18.3 dBm */ \ + 0x22125, /* 18.4 dBm */ \ + 0x22126, /* 18.5 dBm */ \ + 0x22126, /* 18.6 dBm */ \ + 0x22126, /* 18.7 dBm */ \ + 0x22127, /* 18.8 dBm */ \ + 0x22127, /* 18.9 dBm */ \ + 0x22128, /* 19.0 dBm */ \ + 0x22128, /* 19.1 dBm */ \ + 0x22129, /* 19.2 dBm */ \ + 0x22129, /* 19.3 dBm */ \ + 0x2212a, /* 19.4 dBm */ \ + 0x2212a, /* 19.5 dBm */ \ + 0x2222a, /* 19.6 dBm */ \ + 0x2222a, /* 19.7 dBm */ \ + 0x2232a, /* 19.8 dBm */ \ + 0x2232a, /* 19.9 dBm */ \ + 0x2232a, /* 20.0 dBm */ \ + 0x2232a, /* 20.1 dBm */ \ + 0x2242a, /* 20.2 dBm */ \ + 0x2242a, /* 20.3 dBm */ \ + 0x2252a, /* 20.4 dBm */ \ + 0x2252a, /* 20.5 dBm */ \ + 0x2262a, /* 20.6 dBm */ \ + 0x2262a, /* 20.7 dBm */ \ + 0x2272a, /* 20.8 dBm */ \ + 0x2282a, /* 20.9 dBm */ \ + 0x2282a, /* 21.0 dBm */ \ + 0x2292a, /* 21.1 dBm */ \ + 0x2292a, /* 21.2 dBm */ \ + 0x22a2a, /* 21.3 dBm */ \ + 0x22a2a, /* 21.4 dBm */ \ + 0x22b2a, /* 21.5 dBm */ \ + 0x22c2a, /* 21.6 dBm */ \ + 0x22c2a, /* 21.7 dBm */ \ + 0x22d2a, /* 21.8 dBm */ \ + 0x22d2a, /* 21.9 dBm */ \ + 0x22e2a, /* 22.0 dBm */ \ + 0x22f2a, /* 22.1 dBm */ \ + 0x22f2a, /* 22.2 dBm */ \ + 0x2302a, /* 22.3 dBm */ \ + 0x2312a, /* 22.4 dBm */ \ + 0x2312a, /* 22.5 dBm */ \ + 0x2322a, /* 22.6 dBm */ \ + 0x2332a, /* 22.7 dBm */ \ + 0x2342a, /* 22.8 dBm */ \ + 0x2342a, /* 22.9 dBm */ \ + 0x2352a, /* 23.0 dBm */ \ + 0x2362a, /* 23.1 dBm */ \ + 0x2372a, /* 23.2 dBm */ \ + 0x2382a, /* 23.3 dBm */ \ + 0x2382a, /* 23.4 dBm */ \ + 0x2392a, /* 23.5 dBm */ \ + 0x23a2a, /* 23.6 dBm */ \ + 0x23b2a, /* 23.7 dBm */ \ + 0x23c2a, /* 23.8 dBm */ \ + 0x23d2a, /* 23.9 dBm */ \ + 0x23e2a, /* 24.0 dBm */ \ + 0x23f2a, /* 24.1 dBm */ \ + 0x23f2b, /* 24.2 dBm */ \ + 0x23f2b, /* 24.3 dBm */ \ + 0x23f2c, /* 24.4 dBm */ \ + 0x23f2c, /* 24.5 dBm */ \ + 0x23f2d, /* 24.6 dBm */ \ + 0x23f2d, /* 24.7 dBm */ \ + 0x23f2e, /* 24.8 dBm */ \ + 0x23f2e, /* 24.9 dBm */ \ + 0x23f2f, /* 25.0 dBm */ \ + 0x23f30, /* 25.1 dBm */ \ + 0x23f30, /* 25.2 dBm */ \ + 0x23f31, /* 25.3 dBm */ \ + 0x23f31, /* 25.4 dBm */ \ + 0x23f32, /* 25.5 dBm */ \ + 0x23f33, /* 25.6 dBm */ \ + 0x23f33, /* 25.7 dBm */ \ + 0x23f34, /* 25.8 dBm */ \ + 0x23f35, /* 25.9 dBm */ \ + 0x23f36, /* 26.0 dBm */ \ + 0x23f36, /* 26.1 dBm */ \ + 0x23f37, /* 26.2 dBm */ \ + 0x23f38, /* 26.3 dBm */ \ + 0x23f39, /* 26.4 dBm */ \ + 0x23f3a, /* 26.5 dBm */ \ + 0x23f3a, /* 26.6 dBm */ \ + 0x23f3b, /* 26.7 dBm */ \ + 0x23f3c, /* 26.8 dBm */ \ + 0x23f3d, /* 26.9 dBm */ \ + 0x23f3e, /* 27.0 dBm */ \ + 0x23f3e, /* 27.1 dBm */ \ + 0x23f3f, /* 27.2 dBm */ \ + 0x23f40, /* 27.3 dBm */ \ + 0x23f41, /* 27.4 dBm */ \ + 0x23f42, /* 27.5 dBm */ \ + 0x23f43, /* 27.6 dBm */ \ + 0x23f44, /* 27.7 dBm */ \ + 0x23f44, /* 27.8 dBm */ \ + 0x23f45, /* 27.9 dBm */ \ + 0x23f46, /* 28.0 dBm */ \ + 0x23f47, /* 28.1 dBm */ \ + 0x23f48, /* 28.2 dBm */ \ + 0x23f49, /* 28.3 dBm */ \ + 0x23f4a, /* 28.4 dBm */ \ + 0x23f4b, /* 28.5 dBm */ \ + 0x23f4c, /* 28.6 dBm */ \ + 0x23f4d, /* 28.7 dBm */ \ + 0x23f4e, /* 28.8 dBm */ \ + 0x23f50, /* 28.9 dBm */ \ + 0x23f51, /* 29.0 dBm */ \ + 0x23f52, /* 29.1 dBm */ \ + 0x23f53, /* 29.2 dBm */ \ + 0x23f54, /* 29.3 dBm */ \ + 0x23f56, /* 29.4 dBm */ \ + 0x23f57, /* 29.5 dBm */ \ + 0x23f58, /* 29.6 dBm */ \ + 0x23f5a, /* 29.7 dBm */ \ + 0x23f5b, /* 29.8 dBm */ \ + 0x23f5c, /* 29.9 dBm */ \ + 0x23f5e, /* 30.0 dBm */ \ + 0x23f5f, /* 30.1 dBm */ \ + 0x23f61, /* 30.2 dBm */ \ + 0x23f62, /* 30.3 dBm */ \ + 0x23f64, /* 30.4 dBm */ \ + 0x23f66, /* 30.5 dBm */ \ + 0x23f67, /* 30.6 dBm */ \ + 0x23f69, /* 30.7 dBm */ \ + 0x23f6b, /* 30.8 dBm */ \ + 0x23f6e, /* 30.9 dBm */ \ + 0x23f6f, /* 31.0 dBm */ \ + 0x23f71, /* 31.1 dBm */ \ + 0x23f74, /* 31.2 dBm */ \ + 0x23f75, /* 31.3 dBm */ \ + 0x23f77, /* 31.4 dBm */ \ + 0x23f7a, /* 31.5 dBm */ \ + 0x23f7c, /* 31.6 dBm */ \ + 0x23f7e, /* 31.7 dBm */ \ + 0x23f81, /* 31.8 dBm */ \ + 0x23f83, /* 31.9 dBm */ \ + 0x23f86, /* 32.0 dBm */ \ + 0x23f89, /* 32.1 dBm */ \ + 0x23f8c, /* 32.2 dBm */ \ + 0x23f8f, /* 32.3 dBm */ \ + 0x23f92, /* 32.4 dBm */ \ + 0x23f96, /* 32.5 dBm */ \ + 0x23f99, /* 32.6 dBm */ \ + 0x23f9e, /* 32.7 dBm */ \ + 0x24284, /* 32.8 dBm */ \ + 0x24484, /* 32.9 dBm */ \ + 0x24684, /* 33.0 dBm */ \ + 0x24884, /* 33.1 dBm */ \ + 0x24a84, /* 33.2 dBm */ \ + 0x24e84, /* 33.3 dBm */ \ + 0x25084, /* 33.4 dBm */ \ + 0x25284, /* 33.5 dBm */ \ + 0x25684, /* 33.6 dBm */ \ + 0x25a84, /* 33.7 dBm */ \ + 0x25e84, /* 33.8 dBm */ \ + 0x26484, /* 33.9 dBm */ \ + 0x26784, /* 34.0 dBm */ \ + 0x26d84, /* 34.1 dBm */ \ + 0x27384, /* 34.2 dBm */ \ + 0x27c84, /* 34.3 dBm */ \ + 0x27f8c, /* 34.4 dBm */ \ + 0x27f94, /* 34.5 dBm */ \ + 0x27f9d, /* 34.6 dBm */ \ + 0x27fa6, /* 34.7 dBm */ \ + 0x27fb0, /* 34.8 dBm */ \ + 0x27fbb, /* 34.9 dBm */ \ + 0x27fc6, /* 35.0 dBm */ \ } -#define RAIL_PA_CURVES_EFF_SUBGIG_CURVES_NUM_VALUES (222U) +#define RAIL_PA_CURVES_EFF_SUBGIG_CURVES_NUM_VALUES (220U) #define RAIL_PA_CURVES_EFF_SUBGIG_CURVES_STEP_DDBM (1U) -#define RAIL_PA_CURVES_EFF_SUBGIG_MAX_POWER_DDBM (300U) -#define RAIL_PA_CURVES_EFF_SUBGIG_MIN_POWER_DDBM (79U) +#define RAIL_PA_CURVES_EFF_SUBGIG_MAX_POWER_DDBM (356U) +#define RAIL_PA_CURVES_EFF_SUBGIG_MIN_POWER_DDBM (137U) #define RAIL_PA_CURVES_EFF_SUBGIG_CURVES \ { \ - 0x41f0018 /* 7.9 dBm */, \ - 0x41f0018 /* 8.0 dBm */, \ - 0x41f0018 /* 8.1 dBm */, \ - 0x41f0019 /* 8.2 dBm */, \ - 0x41f0019 /* 8.3 dBm */, \ - 0x41f0019 /* 8.4 dBm */, \ - 0x41f001a /* 8.5 dBm */, \ - 0x41f001a /* 8.6 dBm */, \ - 0x41f001b /* 8.7 dBm */, \ - 0x41f001b /* 8.8 dBm */, \ - 0x41f001b /* 8.9 dBm */, \ - 0x41f001b /* 9.0 dBm */, \ - 0x41f001c /* 9.1 dBm */, \ - 0x41f001c /* 9.2 dBm */, \ - 0x41f001c /* 9.3 dBm */, \ - 0x41f001d /* 9.4 dBm */, \ - 0x41f001d /* 9.5 dBm */, \ - 0x41f001e /* 9.6 dBm */, \ - 0x41f001e /* 9.7 dBm */, \ - 0x41f001f /* 9.8 dBm */, \ - 0x41f001f /* 9.9 dBm */, \ - 0x41f0100 /* 10.0 dBm */, \ - 0x41f0100 /* 10.1 dBm */, \ - 0x41f0102 /* 10.2 dBm */, \ - 0x41f0102 /* 10.3 dBm */, \ - 0x41f0102 /* 10.4 dBm */, \ - 0x41f0102 /* 10.5 dBm */, \ - 0x41f0103 /* 10.6 dBm */, \ - 0x41f0103 /* 10.7 dBm */, \ - 0x41f0104 /* 10.8 dBm */, \ - 0x41f0104 /* 10.9 dBm */, \ - 0x41f0105 /* 11.0 dBm */, \ - 0x41f0105 /* 11.1 dBm */, \ - 0x41f0106 /* 11.2 dBm */, \ - 0x41f0106 /* 11.3 dBm */, \ - 0x41f0106 /* 11.4 dBm */, \ - 0x41f0107 /* 11.5 dBm */, \ - 0x41f0107 /* 11.6 dBm */, \ - 0x41f0108 /* 11.7 dBm */, \ - 0x41f0108 /* 11.8 dBm */, \ - 0x41f0109 /* 11.9 dBm */, \ - 0x41f010a /* 12.0 dBm */, \ - 0x41f010a /* 12.1 dBm */, \ - 0x41f010b /* 12.2 dBm */, \ - 0x41f010b /* 12.3 dBm */, \ - 0x41f010b /* 12.4 dBm */, \ - 0x41f010d /* 12.5 dBm */, \ - 0x41f010d /* 12.6 dBm */, \ - 0x41f010e /* 12.7 dBm */, \ - 0x41f010e /* 12.8 dBm */, \ - 0x41f010f /* 12.9 dBm */, \ - 0x41f010f /* 13.0 dBm */, \ - 0x41f010f /* 13.1 dBm */, \ - 0x41f010f /* 13.2 dBm */, \ - 0x41f0110 /* 13.3 dBm */, \ - 0x41f0111 /* 13.4 dBm */, \ - 0x41f0111 /* 13.5 dBm */, \ - 0x41f0112 /* 13.6 dBm */, \ - 0x41f0112 /* 13.7 dBm */, \ - 0x41f0113 /* 13.8 dBm */, \ - 0x41f0113 /* 13.9 dBm */, \ - 0x41f0114 /* 14.0 dBm */, \ - 0x41f0115 /* 14.1 dBm */, \ - 0x41f0116 /* 14.2 dBm */, \ - 0x41f0116 /* 14.3 dBm */, \ - 0x41f0117 /* 14.4 dBm */, \ - 0x41f0117 /* 14.5 dBm */, \ - 0x41f0118 /* 14.6 dBm */, \ - 0x41f0119 /* 14.7 dBm */, \ - 0x41f011a /* 14.8 dBm */, \ - 0x41f011b /* 14.9 dBm */, \ - 0x41f011b /* 15.0 dBm */, \ - 0x41f011c /* 15.1 dBm */, \ - 0x41f011d /* 15.2 dBm */, \ - 0x41f011e /* 15.3 dBm */, \ - 0x41f011f /* 15.4 dBm */, \ - 0x41f0201 /* 15.5 dBm */, \ - 0x41f0203 /* 15.6 dBm */, \ - 0x41f0205 /* 15.7 dBm */, \ - 0x41f0207 /* 15.8 dBm */, \ - 0x41f0209 /* 15.9 dBm */, \ - 0x41f020b /* 16.0 dBm */, \ - 0x41f020d /* 16.1 dBm */, \ - 0x41f020f /* 16.2 dBm */, \ - 0x41f0211 /* 16.3 dBm */, \ - 0x41f0213 /* 16.4 dBm */, \ - 0x41f0215 /* 16.5 dBm */, \ - 0x41f0217 /* 16.6 dBm */, \ - 0x41f0219 /* 16.7 dBm */, \ - 0x41f021b /* 16.8 dBm */, \ - 0x41f021d /* 16.9 dBm */, \ - 0x41f021f /* 17.0 dBm */, \ - 0x41f021f /* 17.1 dBm */, \ - 0x40b0104 /* 17.2 dBm */, \ - 0x40b0104 /* 17.3 dBm */, \ - 0x40b0105 /* 17.4 dBm */, \ - 0x40b0105 /* 17.5 dBm */, \ - 0x40b0106 /* 17.6 dBm */, \ - 0x40b0106 /* 17.7 dBm */, \ - 0x40b0107 /* 17.8 dBm */, \ - 0x40b0107 /* 17.9 dBm */, \ - 0x40b0108 /* 18.0 dBm */, \ - 0x40b0108 /* 18.1 dBm */, \ - 0x40b0109 /* 18.2 dBm */, \ - 0x40b010a /* 18.3 dBm */, \ - 0x40b010a /* 18.4 dBm */, \ - 0x40b010b /* 18.5 dBm */, \ - 0x40b010b /* 18.6 dBm */, \ - 0x40b010c /* 18.7 dBm */, \ - 0x40b010c /* 18.8 dBm */, \ - 0x40b010d /* 18.9 dBm */, \ - 0x40b010d /* 19.0 dBm */, \ - 0x40b010e /* 19.1 dBm */, \ - 0x40b010f /* 19.2 dBm */, \ - 0x40b010f /* 19.3 dBm */, \ - 0x40b010f /* 19.4 dBm */, \ - 0x40b010f /* 19.5 dBm */, \ - 0x40b0110 /* 19.6 dBm */, \ - 0x40b0110 /* 19.7 dBm */, \ - 0x40b0111 /* 19.8 dBm */, \ - 0x40b0112 /* 19.9 dBm */, \ - 0x40b0113 /* 20.0 dBm */, \ - 0x40b0113 /* 20.1 dBm */, \ - 0x40b0114 /* 20.2 dBm */, \ - 0x40b0115 /* 20.3 dBm */, \ - 0x40b0116 /* 20.4 dBm */, \ - 0x40b0116 /* 20.5 dBm */, \ - 0x40b0117 /* 20.6 dBm */, \ - 0x40b0117 /* 20.7 dBm */, \ - 0x40b0117 /* 20.8 dBm */, \ - 0x40b0118 /* 20.9 dBm */, \ - 0x40b0118 /* 21.0 dBm */, \ - 0x40b0119 /* 21.1 dBm */, \ - 0x40b011a /* 21.2 dBm */, \ - 0x40b011b /* 21.3 dBm */, \ - 0x40b011b /* 21.4 dBm */, \ - 0x40b011c /* 21.5 dBm */, \ - 0x40b011d /* 21.6 dBm */, \ - 0x40b011e /* 21.7 dBm */, \ - 0x40b011f /* 21.8 dBm */, \ - 0x40b0201 /* 21.9 dBm */, \ - 0x40b0203 /* 22.0 dBm */, \ - 0x40b0205 /* 22.1 dBm */, \ - 0x40b0207 /* 22.2 dBm */, \ - 0x40b0209 /* 22.3 dBm */, \ - 0x40b020b /* 22.4 dBm */, \ - 0x40b020d /* 22.5 dBm */, \ - 0x40b020f /* 22.6 dBm */, \ - 0x40b0211 /* 22.7 dBm */, \ - 0x40b0213 /* 22.8 dBm */, \ - 0x40b0217 /* 22.9 dBm */, \ - 0x40b0219 /* 23.0 dBm */, \ - 0x40b021b /* 23.1 dBm */, \ - 0x40b021d /* 23.2 dBm */, \ - 0x40b021f /* 23.3 dBm */, \ - 0x40b021f /* 23.4 dBm */, \ - 0x4030104 /* 23.5 dBm */, \ - 0x4030104 /* 23.6 dBm */, \ - 0x4030105 /* 23.7 dBm */, \ - 0x4030105 /* 23.8 dBm */, \ - 0x4030106 /* 23.9 dBm */, \ - 0x4030106 /* 24.0 dBm */, \ - 0x4030107 /* 24.1 dBm */, \ - 0x4030107 /* 24.2 dBm */, \ - 0x4030108 /* 24.3 dBm */, \ - 0x4030108 /* 24.4 dBm */, \ - 0x4030108 /* 24.5 dBm */, \ - 0x4030109 /* 24.6 dBm */, \ - 0x403010a /* 24.7 dBm */, \ - 0x403010a /* 24.8 dBm */, \ - 0x403010b /* 24.9 dBm */, \ - 0x403010b /* 25.0 dBm */, \ - 0x403010c /* 25.1 dBm */, \ - 0x403010c /* 25.2 dBm */, \ - 0x403010d /* 25.3 dBm */, \ - 0x403010e /* 25.4 dBm */, \ - 0x403010e /* 25.5 dBm */, \ - 0x403010f /* 25.6 dBm */, \ - 0x403010f /* 25.7 dBm */, \ - 0x4030110 /* 25.8 dBm */, \ - 0x4030110 /* 25.9 dBm */, \ - 0x4030111 /* 26.0 dBm */, \ - 0x4030111 /* 26.1 dBm */, \ - 0x4030112 /* 26.2 dBm */, \ - 0x4030113 /* 26.3 dBm */, \ - 0x4030113 /* 26.4 dBm */, \ - 0x4030114 /* 26.5 dBm */, \ - 0x4030115 /* 26.6 dBm */, \ - 0x4030116 /* 26.7 dBm */, \ - 0x4030117 /* 26.8 dBm */, \ - 0x4030117 /* 26.9 dBm */, \ - 0x4030118 /* 27.0 dBm */, \ - 0x4030119 /* 27.1 dBm */, \ - 0x403011a /* 27.2 dBm */, \ - 0x403011b /* 27.3 dBm */, \ - 0x403011c /* 27.4 dBm */, \ - 0x403011d /* 27.5 dBm */, \ - 0x403011e /* 27.6 dBm */, \ - 0x403011f /* 27.7 dBm */, \ - 0x4030201 /* 27.8 dBm */, \ - 0x4030203 /* 27.9 dBm */, \ - 0x4030207 /* 28.0 dBm */, \ - 0x4030209 /* 28.1 dBm */, \ - 0x403020b /* 28.2 dBm */, \ - 0x403020d /* 28.3 dBm */, \ - 0x4030211 /* 28.4 dBm */, \ - 0x4030213 /* 28.5 dBm */, \ - 0x4030217 /* 28.6 dBm */, \ - 0x4030219 /* 28.7 dBm */, \ - 0x403021d /* 28.8 dBm */, \ - 0x4000100 /* 28.9 dBm */, \ - 0x4000100 /* 29.0 dBm */, \ - 0x4000102 /* 29.1 dBm */, \ - 0x4000102 /* 29.2 dBm */, \ - 0x4000104 /* 29.3 dBm */, \ - 0x4000104 /* 29.4 dBm */, \ - 0x4000106 /* 29.5 dBm */, \ - 0x4000108 /* 29.6 dBm */, \ - 0x4000108 /* 29.7 dBm */, \ - 0x400010a /* 29.8 dBm */, \ - 0x400010c /* 29.9 dBm */, \ - 0x400010e /* 30.0 dBm */ \ + 0x41f0018, /* 13.7 dBm */ \ + 0x41f0019, /* 13.8 dBm */ \ + 0x41f0019, /* 13.9 dBm */ \ + 0x41f0019, /* 14.0 dBm */ \ + 0x41f001a, /* 14.1 dBm */ \ + 0x41f001a, /* 14.2 dBm */ \ + 0x41f001b, /* 14.3 dBm */ \ + 0x41f001b, /* 14.4 dBm */ \ + 0x41f001b, /* 14.5 dBm */ \ + 0x41f001b, /* 14.6 dBm */ \ + 0x41f001c, /* 14.7 dBm */ \ + 0x41f001c, /* 14.8 dBm */ \ + 0x41f001c, /* 14.9 dBm */ \ + 0x41f001d, /* 15.0 dBm */ \ + 0x41f001d, /* 15.1 dBm */ \ + 0x41f001e, /* 15.2 dBm */ \ + 0x41f001e, /* 15.3 dBm */ \ + 0x41f001f, /* 15.4 dBm */ \ + 0x41f001f, /* 15.5 dBm */ \ + 0x41f0100, /* 15.6 dBm */ \ + 0x41f0100, /* 15.7 dBm */ \ + 0x41f0102, /* 15.8 dBm */ \ + 0x41f0102, /* 15.9 dBm */ \ + 0x41f0102, /* 16.0 dBm */ \ + 0x41f0102, /* 16.1 dBm */ \ + 0x41f0103, /* 16.2 dBm */ \ + 0x41f0103, /* 16.3 dBm */ \ + 0x41f0104, /* 16.4 dBm */ \ + 0x41f0104, /* 16.5 dBm */ \ + 0x41f0105, /* 16.6 dBm */ \ + 0x41f0105, /* 16.7 dBm */ \ + 0x41f0106, /* 16.8 dBm */ \ + 0x41f0106, /* 16.9 dBm */ \ + 0x41f0106, /* 17.0 dBm */ \ + 0x41f0107, /* 17.1 dBm */ \ + 0x41f0107, /* 17.2 dBm */ \ + 0x41f0108, /* 17.3 dBm */ \ + 0x41f0108, /* 17.4 dBm */ \ + 0x41f0109, /* 17.5 dBm */ \ + 0x41f010a, /* 17.6 dBm */ \ + 0x41f010a, /* 17.7 dBm */ \ + 0x41f010b, /* 17.8 dBm */ \ + 0x41f010b, /* 17.9 dBm */ \ + 0x41f010b, /* 18.0 dBm */ \ + 0x41f010d, /* 18.1 dBm */ \ + 0x41f010d, /* 18.2 dBm */ \ + 0x41f010e, /* 18.3 dBm */ \ + 0x41f010e, /* 18.4 dBm */ \ + 0x41f010f, /* 18.5 dBm */ \ + 0x41f010f, /* 18.6 dBm */ \ + 0x41f010f, /* 18.7 dBm */ \ + 0x41f010f, /* 18.8 dBm */ \ + 0x41f0110, /* 18.9 dBm */ \ + 0x41f0111, /* 19.0 dBm */ \ + 0x41f0111, /* 19.1 dBm */ \ + 0x41f0112, /* 19.2 dBm */ \ + 0x41f0112, /* 19.3 dBm */ \ + 0x41f0113, /* 19.4 dBm */ \ + 0x41f0113, /* 19.5 dBm */ \ + 0x41f0114, /* 19.6 dBm */ \ + 0x41f0115, /* 19.7 dBm */ \ + 0x41f0116, /* 19.8 dBm */ \ + 0x41f0116, /* 19.9 dBm */ \ + 0x41f0117, /* 20.0 dBm */ \ + 0x41f0117, /* 20.1 dBm */ \ + 0x41f0118, /* 20.2 dBm */ \ + 0x41f0119, /* 20.3 dBm */ \ + 0x41f011a, /* 20.4 dBm */ \ + 0x41f011b, /* 20.5 dBm */ \ + 0x41f011b, /* 20.6 dBm */ \ + 0x41f011c, /* 20.7 dBm */ \ + 0x41f011d, /* 20.8 dBm */ \ + 0x41f011e, /* 20.9 dBm */ \ + 0x41f011f, /* 21.0 dBm */ \ + 0x41f0201, /* 21.1 dBm */ \ + 0x41f0203, /* 21.2 dBm */ \ + 0x41f0205, /* 21.3 dBm */ \ + 0x41f0207, /* 21.4 dBm */ \ + 0x41f0209, /* 21.5 dBm */ \ + 0x41f020b, /* 21.6 dBm */ \ + 0x41f020d, /* 21.7 dBm */ \ + 0x41f020f, /* 21.8 dBm */ \ + 0x41f0211, /* 21.9 dBm */ \ + 0x41f0213, /* 22.0 dBm */ \ + 0x41f0215, /* 22.1 dBm */ \ + 0x41f0217, /* 22.2 dBm */ \ + 0x41f0219, /* 22.3 dBm */ \ + 0x41f021b, /* 22.4 dBm */ \ + 0x41f021d, /* 22.5 dBm */ \ + 0x41f021f, /* 22.6 dBm */ \ + 0x41f021f, /* 22.7 dBm */ \ + 0x40b0104, /* 22.8 dBm */ \ + 0x40b0104, /* 22.9 dBm */ \ + 0x40b0105, /* 23.0 dBm */ \ + 0x40b0105, /* 23.1 dBm */ \ + 0x40b0106, /* 23.2 dBm */ \ + 0x40b0106, /* 23.3 dBm */ \ + 0x40b0107, /* 23.4 dBm */ \ + 0x40b0107, /* 23.5 dBm */ \ + 0x40b0108, /* 23.6 dBm */ \ + 0x40b0108, /* 23.7 dBm */ \ + 0x40b0109, /* 23.8 dBm */ \ + 0x40b010a, /* 23.9 dBm */ \ + 0x40b010a, /* 24.0 dBm */ \ + 0x40b010b, /* 24.1 dBm */ \ + 0x40b010b, /* 24.2 dBm */ \ + 0x40b010c, /* 24.3 dBm */ \ + 0x40b010c, /* 24.4 dBm */ \ + 0x40b010d, /* 24.5 dBm */ \ + 0x40b010d, /* 24.6 dBm */ \ + 0x40b010e, /* 24.7 dBm */ \ + 0x40b010f, /* 24.8 dBm */ \ + 0x40b010f, /* 24.9 dBm */ \ + 0x40b010f, /* 25.0 dBm */ \ + 0x40b010f, /* 25.1 dBm */ \ + 0x40b0110, /* 25.2 dBm */ \ + 0x40b0110, /* 25.3 dBm */ \ + 0x40b0111, /* 25.4 dBm */ \ + 0x40b0112, /* 25.5 dBm */ \ + 0x40b0113, /* 25.6 dBm */ \ + 0x40b0113, /* 25.7 dBm */ \ + 0x40b0114, /* 25.8 dBm */ \ + 0x40b0115, /* 25.9 dBm */ \ + 0x40b0116, /* 26.0 dBm */ \ + 0x40b0116, /* 26.1 dBm */ \ + 0x40b0117, /* 26.2 dBm */ \ + 0x40b0117, /* 26.3 dBm */ \ + 0x40b0117, /* 26.4 dBm */ \ + 0x40b0118, /* 26.5 dBm */ \ + 0x40b0118, /* 26.6 dBm */ \ + 0x40b0119, /* 26.7 dBm */ \ + 0x40b011a, /* 26.8 dBm */ \ + 0x40b011b, /* 26.9 dBm */ \ + 0x40b011b, /* 27.0 dBm */ \ + 0x40b011c, /* 27.1 dBm */ \ + 0x40b011d, /* 27.2 dBm */ \ + 0x40b011e, /* 27.3 dBm */ \ + 0x40b011f, /* 27.4 dBm */ \ + 0x40b0201, /* 27.5 dBm */ \ + 0x40b0203, /* 27.6 dBm */ \ + 0x40b0205, /* 27.7 dBm */ \ + 0x40b0207, /* 27.8 dBm */ \ + 0x40b0209, /* 27.9 dBm */ \ + 0x40b020b, /* 28.0 dBm */ \ + 0x40b020d, /* 28.1 dBm */ \ + 0x40b020f, /* 28.2 dBm */ \ + 0x40b0211, /* 28.3 dBm */ \ + 0x40b0213, /* 28.4 dBm */ \ + 0x40b0217, /* 28.5 dBm */ \ + 0x40b0219, /* 28.6 dBm */ \ + 0x40b021b, /* 28.7 dBm */ \ + 0x40b021d, /* 28.8 dBm */ \ + 0x40b021f, /* 28.9 dBm */ \ + 0x40b021f, /* 29.0 dBm */ \ + 0x4030104, /* 29.1 dBm */ \ + 0x4030104, /* 29.2 dBm */ \ + 0x4030105, /* 29.3 dBm */ \ + 0x4030105, /* 29.4 dBm */ \ + 0x4030106, /* 29.5 dBm */ \ + 0x4030106, /* 29.6 dBm */ \ + 0x4030107, /* 29.7 dBm */ \ + 0x4030107, /* 29.8 dBm */ \ + 0x4030108, /* 29.9 dBm */ \ + 0x4030108, /* 30.0 dBm */ \ + 0x4030108, /* 30.1 dBm */ \ + 0x4030109, /* 30.2 dBm */ \ + 0x403010a, /* 30.3 dBm */ \ + 0x403010a, /* 30.4 dBm */ \ + 0x403010b, /* 30.5 dBm */ \ + 0x403010b, /* 30.6 dBm */ \ + 0x403010c, /* 30.7 dBm */ \ + 0x403010c, /* 30.8 dBm */ \ + 0x403010d, /* 30.9 dBm */ \ + 0x403010e, /* 31.0 dBm */ \ + 0x403010e, /* 31.1 dBm */ \ + 0x403010f, /* 31.2 dBm */ \ + 0x403010f, /* 31.3 dBm */ \ + 0x4030110, /* 31.4 dBm */ \ + 0x4030110, /* 31.5 dBm */ \ + 0x4030111, /* 31.6 dBm */ \ + 0x4030111, /* 31.7 dBm */ \ + 0x4030112, /* 31.8 dBm */ \ + 0x4030113, /* 31.9 dBm */ \ + 0x4030113, /* 32.0 dBm */ \ + 0x4030114, /* 32.1 dBm */ \ + 0x4030115, /* 32.2 dBm */ \ + 0x4030116, /* 32.3 dBm */ \ + 0x4030117, /* 32.4 dBm */ \ + 0x4030117, /* 32.5 dBm */ \ + 0x4030118, /* 32.6 dBm */ \ + 0x4030119, /* 32.7 dBm */ \ + 0x403011a, /* 32.8 dBm */ \ + 0x403011b, /* 32.9 dBm */ \ + 0x403011c, /* 33.0 dBm */ \ + 0x403011d, /* 33.1 dBm */ \ + 0x403011e, /* 33.2 dBm */ \ + 0x403011f, /* 33.3 dBm */ \ + 0x4030201, /* 33.4 dBm */ \ + 0x4030203, /* 33.5 dBm */ \ + 0x4030207, /* 33.6 dBm */ \ + 0x4030209, /* 33.7 dBm */ \ + 0x403020b, /* 33.8 dBm */ \ + 0x403020d, /* 33.9 dBm */ \ + 0x4030211, /* 34.0 dBm */ \ + 0x4030213, /* 34.1 dBm */ \ + 0x4030217, /* 34.2 dBm */ \ + 0x4030219, /* 34.3 dBm */ \ + 0x403021d, /* 34.4 dBm */ \ + 0x4000100, /* 34.5 dBm */ \ + 0x4000100, /* 34.6 dBm */ \ + 0x4000102, /* 34.7 dBm */ \ + 0x4000102, /* 34.8 dBm */ \ + 0x4000104, /* 34.9 dBm */ \ + 0x4000104, /* 35.0 dBm */ \ + 0x4000106, /* 35.1 dBm */ \ + 0x4000108, /* 35.2 dBm */ \ + 0x4000108, /* 35.3 dBm */ \ + 0x400010a, /* 35.4 dBm */ \ + 0x400010c, /* 35.5 dBm */ \ + 0x400010e, /* 35.6 dBm */ \ } #endif diff --git a/platform/radio/rail_lib/plugin/pa-conversions/pa_conversions_efr32.c b/platform/radio/rail_lib/plugin/pa-conversions/pa_conversions_efr32.c index 32cd3d7ee74..60d3b449bb3 100644 --- a/platform/radio/rail_lib/plugin/pa-conversions/pa_conversions_efr32.c +++ b/platform/radio/rail_lib/plugin/pa-conversions/pa_conversions_efr32.c @@ -173,6 +173,40 @@ RAIL_Status_t RAIL_InitTxPowerCurvesAlt(const RAIL_TxPowerCurvesConfigAlt_t *con return RAIL_STATUS_NO_ERROR; } +#ifdef RAIL_PA_CONVERSIONS_WEAK +__WEAK +#endif +const RAIL_PaPowerSetting_t *RAIL_GetPowerSettingTable(RAIL_Handle_t railHandle, RAIL_TxPowerMode_t mode, + RAIL_TxPower_t *minPower, RAIL_TxPower_t *maxPower, + RAIL_TxPowerLevel_t *step) +{ + (void)railHandle; +#if RAIL_SUPPORTS_DBM_POWERSETTING_MAPPING_TABLE + // Check for an invalid Tx power mode + if ((mode >= RAIL_NUM_PA) + #ifdef RAIL_TX_POWER_MODE_2P4GIG_HIGHEST + || (mode == RAIL_TX_POWER_MODE_2P4GIG_HIGHEST) + #endif + #ifdef RAIL_TX_POWER_MODE_SUBGIG_HIGHEST + || (mode == RAIL_TX_POWER_MODE_SUBGIG_HIGHEST) + #endif + ) { + return NULL; + } + RAIL_PaDescriptor_t *modeInfo = &powerCurvesState.curves[mode]; + *minPower = modeInfo->minPowerDbm; + *maxPower = modeInfo->maxPowerDbm; + *step = modeInfo->step; + return (RAIL_PaPowerSetting_t*)(modeInfo->conversion.mappingTable); +#else + (void)mode; + (void)minPower; + (void)maxPower; + (void)step; + return NULL; +#endif +} + #ifdef RAIL_PA_CONVERSIONS_WEAK __WEAK #endif @@ -201,7 +235,14 @@ RAIL_TxPowerLevel_t RAIL_ConvertDbmToRaw(RAIL_Handle_t railHandle, } // Check for an invalid Tx power mode - if (mode >= RAIL_TX_POWER_MODE_NONE) { + if ((mode >= RAIL_NUM_PA) + #ifdef RAIL_TX_POWER_MODE_2P4GIG_HIGHEST + || (mode == RAIL_TX_POWER_MODE_2P4GIG_HIGHEST) + #endif + #ifdef RAIL_TX_POWER_MODE_SUBGIG_HIGHEST + || (mode == RAIL_TX_POWER_MODE_SUBGIG_HIGHEST) + #endif + ) { return 0U; } @@ -223,7 +264,7 @@ RAIL_TxPowerLevel_t RAIL_ConvertDbmToRaw(RAIL_Handle_t railHandle, // Power level is within bounds (MISRA required else) } - uint32_t powerIndex = (power - minPower) * step; + uint32_t powerIndex = (power - minPower) / step; RAIL_SetPaPowerSetting(railHandle, modeInfo->conversion.mappingTable[powerIndex], minPower, maxPower, power); return 0U; } @@ -339,7 +380,14 @@ RAIL_TxPower_t RAIL_ConvertRawToDbm(RAIL_Handle_t railHandle, (void)railHandle; // Check for an invalid Tx power mode - if (mode >= RAIL_TX_POWER_MODE_NONE) { + if ((mode >= RAIL_NUM_PA) + #ifdef RAIL_TX_POWER_MODE_2P4GIG_HIGHEST + || (mode == RAIL_TX_POWER_MODE_2P4GIG_HIGHEST) + #endif + #ifdef RAIL_TX_POWER_MODE_SUBGIG_HIGHEST + || (mode == RAIL_TX_POWER_MODE_SUBGIG_HIGHEST) + #endif + ) { return RAIL_TX_POWER_MIN; } @@ -433,7 +481,14 @@ RAIL_Status_t RAIL_GetTxPowerCurveLimits(RAIL_Handle_t railHandle, { (void)railHandle; // Check for an invalid Tx power mode - if (mode >= RAIL_TX_POWER_MODE_NONE) { + if ((mode >= RAIL_NUM_PA) + #ifdef RAIL_TX_POWER_MODE_2P4GIG_HIGHEST + || (mode == RAIL_TX_POWER_MODE_2P4GIG_HIGHEST) + #endif + #ifdef RAIL_TX_POWER_MODE_SUBGIG_HIGHEST + || (mode == RAIL_TX_POWER_MODE_SUBGIG_HIGHEST) + #endif + ) { return RAIL_STATUS_INVALID_PARAMETER; } RAIL_PaDescriptor_t const *modeInfo = &powerCurvesState.curves[mode]; diff --git a/platform/radio/rail_lib/plugin/rail_util_eff/config/efr32xg2x/sl_rail_util_eff_config.h b/platform/radio/rail_lib/plugin/rail_util_eff/config/efr32xg2x/sl_rail_util_eff_config.h index ae9fc918761..f408ea1e92a 100644 --- a/platform/radio/rail_lib/plugin/rail_util_eff/config/efr32xg2x/sl_rail_util_eff_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_eff/config/efr32xg2x/sl_rail_util_eff_config.h @@ -69,71 +69,138 @@ // <1..105000:1> // Default: 30000 #define SL_RAIL_UTIL_EFF_BYPASS_DWELL_TIME_MS 30000 -// Coefficient A for FSK sensor voltage curve. Multiplied by 1e7. + +// Coefficient A for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 844 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_A 844 -// Coefficient B for FSK sensor voltage curve. Multiplied by 1e7. +// Default: 574 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_A 574 +// Coefficient B for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -437473 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_B -437473 -// Coefficient C for FSK sensor voltage curve. Multiplied by 1e7. +// Default: -235763 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_B -235763 +// Coefficient C for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 87928015 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_C 87928015 -// Coefficient D for FSK sensor voltage curve. Multiplied by 1e7. +// Default: 38562724 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_C 38562724 +// Coefficient D for FSK ANTV sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -5063115821 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_D -5063115821L -// Entry 1 measured FSK Output Power for CAL1 (nominally 270 ddBm). +// Default: -1115923360 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_D -1115923360L +// Entry 1 measured FSK ANTV Output Power for CAL1 (nominally 270 ddBm). // <180..350:1> -// Default: 270 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1_DDBM 270 -// Entry 1 measured FSK sensor voltage at CAL1 ddBm, in millivolts. +// Default: 241 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_DDBM 241 +// Entry 1 measured FSK ANTV sensor voltage at CAL1 ddBm, in millivolts. // <1..65535:1> -// Default: 340 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1 340 -// Entry 1 measured FSK Output Power for CAL2 (nominally 290 ddBm). +// Default: 264 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_MV 264 +// Entry 1 measured FSK ANTV Output Power for CAL2 (nominally 290 ddBm). // <180..350:1> -// Default: 290 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2_DDBM 290 -// Entry 1 measured FSK sensor voltage at CAL2 ddBm, in millivolts. +// Default: 291 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_DDBM 291 +// Entry 1 measured FSK ANTV sensor voltage at CAL2 ddBm, in millivolts. // <1..65535:1> -// Default: 423 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2 423 +// Default: 451 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_MV 451 -// Coefficient A for OFDM sensor voltage curve. Multiplied by 1e7. +// Coefficient A for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 844 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_A 844 -// Coefficient B for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: 392 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_A 392 +// Coefficient B for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -437473 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_B -437473 -// Coefficient C for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: -180237 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_B -180237 +// Coefficient C for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: 87928015 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_C 87928015 -// Coefficient D for OFDM sensor voltage curve. Multiplied by 1e7. +// Default: 32942736 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_C 32942736 +// Coefficient D for FSK SAW2 sensor voltage curve. Multiplied by 1e7. // <-2147483647..2147483647:1> -// Default: -5063115821 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_D -5063115821L -// Entry 1 measured OFDM Output Power for CAL1 (nominally 270 ddBm). +// Default: -1097941542 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_D -1097941542L +// Entry 1 measured FSK SAW2 Output Power for CAL1 (nominally 270 ddBm). // <180..350:1> -// Default: 270 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1_DDBM 270 -// Entry 1 measured OFDM sensor voltage at CAL1 ddBm, in millivolts. +// Default: 200 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_DDBM 200 +// Entry 1 measured FSK SAW2 sensor voltage at CAL1 ddBm, in millivolts. // <1..65535:1> -// Default: 450 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1 450 -// Entry 1 measured OFDM Output Power for CAL2 (nominally 290 ddBm). +// Default: 127 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_MV 127 +// Entry 1 measured FSK SAW2 Output Power for CAL2 (nominally 290 ddBm). +// <180..350:1> +// Default: 241 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_DDBM 241 +// Entry 1 measured FSK SAW2 sensor voltage at CAL2 ddBm, in millivolts. +// <1..65535:1> +// Default: 170 +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_MV 170 + +// Coefficient A for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 574 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_A 574 +// Coefficient B for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -235763 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_B -235763 +// Coefficient C for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 38562724 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_C 38562724 +// Coefficient D for OFDM ANTV sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -1115923360 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_D -1115923360L +// Entry 1 measured OFDM ANTV Output Power for CAL1 (nominally 270 ddBm). +// <180..350:1> +// Default: 222 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_DDBM 222 +// Entry 1 measured OFDM ANTV sensor voltage at CAL1 ddBm, in millivolts. +// <1..65535:1> +// Default: 249 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_MV 249 +// Entry 2 measured OFDM ANTV Output Power for CAL2 (nominally 290 ddBm). // <180..350:1> // Default: 290 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2_DDBM 290 -// Entry 1 measured OFDM sensor voltage at CAL2 ddBm, in millivolts. +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_DDBM 290 +// Entry 2 measured OFDM ANTV sensor voltage at CAL2 ddBm, in millivolts. +// <1..65535:1> +// Default: 507 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_MV 507 + +// Coefficient A for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 2178 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_A 2178 +// Coefficient B for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: -1312415 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_B -1312415 +// Coefficient C for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-2147483647..2147483647:1> +// Default: 271823274 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_C 271823274 +// Coefficient D for OFDM SAW2 sensor voltage curve. Multiplied by 1e7. +// <-20000000000..20000000000:1> +// Default: -17876500819 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_D -17876500819L +// Entry 1 measured OFDM SAW2 Output Power for CAL1 (nominally 270 ddBm). +// <180..350:1> +// Default: 250 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_DDBM 250 +// Entry 1 measured OFDM SAW2 sensor voltage at CAL1 ddBm, in millivolts. +// <1..65535:1> +// Default: 208 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_MV 208 +// Entry 1 measured OFDM SAW2 Output Power for CAL2 (nominally 290 ddBm). +// <180..350:1> +// Default: 289 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_DDBM 289 +// Entry 1 measured OFDM SAW2 sensor voltage at CAL2 ddBm, in millivolts. // <1..65535:1> -// Default: 544 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2 544 +// Default: 366 +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_MV 366 // Select CLPC mode // Disable CLPC power control. Flare modes will only be transmit/receive. @@ -143,18 +210,10 @@ // Allow full power control // Default: RAIL_EFF_CLPC_MODE_CHANGE #define SL_RAIL_UTIL_EFF_CLPC_ENABLE RAIL_EFF_CLPC_MODE_CHANGE -// Maximum continuous transfer power in dBm -// <20..30:1> -// Default: 20 -#define RAIL_UTIL_EFF_MAX_TX_CONTINUOUS_POWER_DBM 20 -// Maximum transmit duty cycle as a percentage -// <10..100:1> -// Default: 50 -#define RAIL_UTIL_EFF_MAX_TX_DUTY_CYCLE 50 -// Temperature of EFF above which transmit is not allowed, in degrees Kelvin -// <1..398:1> -// Default: 373 -#define SL_RAIL_UTIL_EFF_TEMPERATURE_THRESHOLD_EFF_DEGREES_K 373 +// Temperature of EFF above which transmit is not allowed, in degrees Kelvin. A security margin is subtracted before using it. +// <1..383:1> +// Default: 383 +#define SL_RAIL_UTIL_EFF_TEMPERATURE_THRESHOLD_EFF_DEGREES_K 383 // // <<< end of configuration section >>> diff --git a/platform/radio/rail_lib/plugin/rail_util_eff/sl_rail_util_eff.c b/platform/radio/rail_lib/plugin/rail_util_eff/sl_rail_util_eff.c index 7093e1c15b1..563c25a7cc0 100644 --- a/platform/radio/rail_lib/plugin/rail_util_eff/sl_rail_util_eff.c +++ b/platform/radio/rail_lib/plugin/rail_util_eff/sl_rail_util_eff.c @@ -41,54 +41,104 @@ #error "At least one EFF LNA mode must be enabled" #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_A -#define SL_RAIL_UTIL_EFF_CLPC_FSK_A 844 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_A +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_A 574 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_B -#define SL_RAIL_UTIL_EFF_CLPC_FSK_B -437473 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_B +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_B -235763 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_C -#define SL_RAIL_UTIL_EFF_CLPC_FSK_C 87928015 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_C +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_C 38562724 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_D -#define SL_RAIL_UTIL_EFF_CLPC_FSK_D -5063115821L +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_D +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_D -1115923360L #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1_DDBM -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1_DDBM 270 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_DDBM +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_DDBM 241 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1 340 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_MV +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_MV 264 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2_DDBM -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2_DDBM 290 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_DDBM +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_DDBM 291 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2 -#define SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2 423 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_MV +#define SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_MV 451 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_A -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_A 844 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_A +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_A 392 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_B -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_B -437473 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_B +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_B -180237 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_C -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_C 87928015 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_C +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_C 32942736 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_D -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_D -5063115821L +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_D +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_D -1097941542L #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1_DDBM -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1_DDBM 270 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_DDBM +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_DDBM 200 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1 450 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_MV +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_MV 127 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2_DDBM -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2_DDBM 290 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_DDBM +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_DDBM 241 #endif -#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2 -#define SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2 544 +#ifndef SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_MV +#define SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_MV 170 +#endif + +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_A +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_A 574 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_B +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_B -235763 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_C +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_C 38562724 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_D +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_D -1115923360L +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_DDBM +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_DDBM 222 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_MV +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_MV 249 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_DDBM +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_DDBM 290 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_MV +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_MV 507 +#endif + +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_A +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_A 2178 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_B +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_B -1312415 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_C +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_C 271823274 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_D +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_D -17876500819L +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_DDBM +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_DDBM 250 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_MV +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_MV 208 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_DDBM +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_DDBM 289 +#endif +#ifndef SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_MV +#define SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_MV 366 #endif RAIL_Status_t sl_rail_util_eff_init(void) @@ -104,27 +154,43 @@ RAIL_Status_t sl_rail_util_eff_init(void) .urbanBypassMv = SL_RAIL_UTIL_EFF_URBAN_BYPASS_MV, .urbanDwellTimeMs = SL_RAIL_UTIL_EFF_URBAN_DWELL_TIME_MS, .bypassDwellTimeMs = SL_RAIL_UTIL_EFF_BYPASS_DWELL_TIME_MS, - .fskClpcConfig.antvA = SL_RAIL_UTIL_EFF_CLPC_FSK_A, - .fskClpcConfig.antvB = SL_RAIL_UTIL_EFF_CLPC_FSK_B, - .fskClpcConfig.antvC = SL_RAIL_UTIL_EFF_CLPC_FSK_C, - .fskClpcConfig.antvD = SL_RAIL_UTIL_EFF_CLPC_FSK_D, + .fskClpcConfig.antv.coefA = SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_A, + .fskClpcConfig.antv.coefB = SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_B, + .fskClpcConfig.antv.coefC = SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_C, + .fskClpcConfig.antv.coefD = SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_D, + .fskClpcConfig.antv.calData.cal1Ddbm = SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_DDBM, + .fskClpcConfig.antv.calData.cal1Mv = SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL1_MV, + .fskClpcConfig.antv.calData.cal2Ddbm = SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_DDBM, + .fskClpcConfig.antv.calData.cal2Mv = SL_RAIL_UTIL_EFF_CLPC_FSK_ANTV_1_CAL2_MV, + + .fskClpcConfig.saw2.coefA = SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_A, + .fskClpcConfig.saw2.coefB = SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_B, + .fskClpcConfig.saw2.coefC = SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_C, + .fskClpcConfig.saw2.coefD = SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_D, + .fskClpcConfig.saw2.calData.cal1Ddbm = SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_DDBM, + .fskClpcConfig.saw2.calData.cal1Mv = SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL1_MV, + .fskClpcConfig.saw2.calData.cal2Ddbm = SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_DDBM, + .fskClpcConfig.saw2.calData.cal2Mv = SL_RAIL_UTIL_EFF_CLPC_FSK_SAW2_1_CAL2_MV, + + .ofdmClpcConfig.antv.coefA = SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_A, + .ofdmClpcConfig.antv.coefB = SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_B, + .ofdmClpcConfig.antv.coefC = SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_C, + .ofdmClpcConfig.antv.coefD = SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_D, + .ofdmClpcConfig.antv.calData.cal1Ddbm = SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_DDBM, + .ofdmClpcConfig.antv.calData.cal1Mv = SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL1_MV, + .ofdmClpcConfig.antv.calData.cal2Ddbm = SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_DDBM, + .ofdmClpcConfig.antv.calData.cal2Mv = SL_RAIL_UTIL_EFF_CLPC_OFDM_ANTV_1_CAL2_MV, - .fskClpcConfig.calData.cal1Ddbm = SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1_DDBM, - .fskClpcConfig.calData.cal1 = SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL1, - .fskClpcConfig.calData.cal2Ddbm = SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2_DDBM, - .fskClpcConfig.calData.cal2 = SL_RAIL_UTIL_EFF_CLPC_FSK_1_CAL2, + .ofdmClpcConfig.saw2.coefA = SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_A, + .ofdmClpcConfig.saw2.coefB = SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_B, + .ofdmClpcConfig.saw2.coefC = SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_C, + .ofdmClpcConfig.saw2.coefD = SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_D, + .ofdmClpcConfig.saw2.calData.cal1Ddbm = SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_DDBM, + .ofdmClpcConfig.saw2.calData.cal1Mv = SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL1_MV, + .ofdmClpcConfig.saw2.calData.cal2Ddbm = SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_DDBM, + .ofdmClpcConfig.saw2.calData.cal2Mv = SL_RAIL_UTIL_EFF_CLPC_OFDM_SAW2_1_CAL2_MV, - .ofdmClpcConfig.antvA = SL_RAIL_UTIL_EFF_CLPC_OFDM_A, - .ofdmClpcConfig.antvB = SL_RAIL_UTIL_EFF_CLPC_OFDM_B, - .ofdmClpcConfig.antvC = SL_RAIL_UTIL_EFF_CLPC_OFDM_C, - .ofdmClpcConfig.antvD = SL_RAIL_UTIL_EFF_CLPC_OFDM_D, - .ofdmClpcConfig.calData.cal1Ddbm = SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1_DDBM, - .ofdmClpcConfig.calData.cal1 = SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL1, - .ofdmClpcConfig.calData.cal2Ddbm = SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2_DDBM, - .ofdmClpcConfig.calData.cal2 = SL_RAIL_UTIL_EFF_CLPC_OFDM_1_CAL2, .clpcEnable = SL_RAIL_UTIL_EFF_CLPC_ENABLE, - .maxTxContinuousPowerDbm = RAIL_UTIL_EFF_MAX_TX_CONTINUOUS_POWER_DBM, - .maxTxDutyCycle = RAIL_UTIL_EFF_MAX_TX_DUTY_CYCLE, .tempThresholdK = SL_RAIL_UTIL_EFF_TEMPERATURE_THRESHOLD_EFF_DEGREES_K, }; diff --git a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg1x/sl_rail_util_init_inst_config.h b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg1x/sl_rail_util_init_inst_config.h index 4646b283014..a228411f607 100644 --- a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg1x/sl_rail_util_init_inst_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg1x/sl_rail_util_init_inst_config.h @@ -322,13 +322,23 @@ // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_DETECT_RSSI_THRESHOLD_INSTANCE_ENABLE 0 // -// - // Thermistor Events // End of thermistor measurement // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_THERMISTOR_DONE_INSTANCE_ENABLE 0 // +// Temperature Events +// Transmit blocked because of temperature limitation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TX_BLOCKED_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature is too hot for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature has cooled enough for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_COOL_DOWN_INSTANCE_ENABLE 0 +// +// // // diff --git a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg21/sl_rail_util_init_inst_config.h b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg21/sl_rail_util_init_inst_config.h index 32484e52b92..fb45e8a89a4 100644 --- a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg21/sl_rail_util_init_inst_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg21/sl_rail_util_init_inst_config.h @@ -306,13 +306,23 @@ // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_DETECT_RSSI_THRESHOLD_INSTANCE_ENABLE 0 // -// - // Thermistor Events // End of thermistor measurement // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_THERMISTOR_DONE_INSTANCE_ENABLE 0 // +// Temperature Events +// Transmit blocked because of temperature limitation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TX_BLOCKED_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature is too hot for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature has cooled enough for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_COOL_DOWN_INSTANCE_ENABLE 0 +// +// // // diff --git a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg22/sl_rail_util_init_inst_config.h b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg22/sl_rail_util_init_inst_config.h index 32484e52b92..fb45e8a89a4 100644 --- a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg22/sl_rail_util_init_inst_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg22/sl_rail_util_init_inst_config.h @@ -306,13 +306,23 @@ // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_DETECT_RSSI_THRESHOLD_INSTANCE_ENABLE 0 // -// - // Thermistor Events // End of thermistor measurement // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_THERMISTOR_DONE_INSTANCE_ENABLE 0 // +// Temperature Events +// Transmit blocked because of temperature limitation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TX_BLOCKED_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature is too hot for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature has cooled enough for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_COOL_DOWN_INSTANCE_ENABLE 0 +// +// // // diff --git a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg23/sl_rail_util_init_inst_config.h b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg23/sl_rail_util_init_inst_config.h index 6177e2c31c9..cedc9788724 100644 --- a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg23/sl_rail_util_init_inst_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg23/sl_rail_util_init_inst_config.h @@ -313,13 +313,23 @@ // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_DETECT_RSSI_THRESHOLD_INSTANCE_ENABLE 0 // -// - // Thermistor Events // End of thermistor measurement // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_THERMISTOR_DONE_INSTANCE_ENABLE 0 // +// Temperature Events +// Transmit blocked because of temperature limitation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TX_BLOCKED_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature is too hot for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature has cooled enough for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_COOL_DOWN_INSTANCE_ENABLE 0 +// +// // // diff --git a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg24/sl_rail_util_init_inst_config.h b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg24/sl_rail_util_init_inst_config.h index 32484e52b92..fb45e8a89a4 100644 --- a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg24/sl_rail_util_init_inst_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg24/sl_rail_util_init_inst_config.h @@ -306,13 +306,23 @@ // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_DETECT_RSSI_THRESHOLD_INSTANCE_ENABLE 0 // -// - // Thermistor Events // End of thermistor measurement // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_THERMISTOR_DONE_INSTANCE_ENABLE 0 // +// Temperature Events +// Transmit blocked because of temperature limitation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TX_BLOCKED_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature is too hot for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature has cooled enough for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_COOL_DOWN_INSTANCE_ENABLE 0 +// +// // // diff --git a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg25/sl_rail_util_init_inst_config.h b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg25/sl_rail_util_init_inst_config.h index a7e39bb8466..90aca4a25cf 100644 --- a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg25/sl_rail_util_init_inst_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg25/sl_rail_util_init_inst_config.h @@ -284,12 +284,22 @@ #define SL_RAIL_UTIL_INIT_EVENT_DETECT_RSSI_THRESHOLD_INSTANCE_ENABLE 0 // // - // Thermistor Events // End of thermistor measurement // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_THERMISTOR_DONE_INSTANCE_ENABLE 0 // +// Temperature Events +// Transmit blocked because of temperature limitation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TX_BLOCKED_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature is too hot for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature has cooled enough for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_COOL_DOWN_INSTANCE_ENABLE 0 +// // // diff --git a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg27/sl_rail_util_init_inst_config.h b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg27/sl_rail_util_init_inst_config.h index 583e40aed7d..e10af8b36b7 100644 --- a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg27/sl_rail_util_init_inst_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg27/sl_rail_util_init_inst_config.h @@ -312,13 +312,23 @@ // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_DETECT_RSSI_THRESHOLD_INSTANCE_ENABLE 0 // -// - // Thermistor Events // End of thermistor measurement // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_THERMISTOR_DONE_INSTANCE_ENABLE 0 // +// Temperature Events +// Transmit blocked because of temperature limitation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TX_BLOCKED_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature is too hot for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature has cooled enough for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_COOL_DOWN_INSTANCE_ENABLE 0 +// +// // // diff --git a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg28/sl_rail_util_init_inst_config.h b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg28/sl_rail_util_init_inst_config.h index 6177e2c31c9..cedc9788724 100644 --- a/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg28/sl_rail_util_init_inst_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_init/config/efr32xg28/sl_rail_util_init_inst_config.h @@ -313,13 +313,23 @@ // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_DETECT_RSSI_THRESHOLD_INSTANCE_ENABLE 0 // -// - // Thermistor Events // End of thermistor measurement // Default: 0 #define SL_RAIL_UTIL_INIT_EVENT_THERMISTOR_DONE_INSTANCE_ENABLE 0 // +// Temperature Events +// Transmit blocked because of temperature limitation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TX_BLOCKED_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature is too hot for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_TOO_HOT_INSTANCE_ENABLE 0 +// Temperature has cooled enough for Tx operation +// Default: 0 +#define SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_COOL_DOWN_INSTANCE_ENABLE 0 +// +// // // diff --git a/platform/radio/rail_lib/plugin/rail_util_init/sl_rail_util_init.h.jinja b/platform/radio/rail_lib/plugin/rail_util_init/sl_rail_util_init.h.jinja index 37d4c94df52..2802184ff39 100644 --- a/platform/radio/rail_lib/plugin/rail_util_init/sl_rail_util_init.h.jinja +++ b/platform/radio/rail_lib/plugin/rail_util_init/sl_rail_util_init.h.jinja @@ -201,7 +201,13 @@ void sl_rail_util_on_event(RAIL_Handle_t rail_handle, | (SL_RAIL_UTIL_INIT_EVENT_DETECT_RSSI_THRESHOLD_{{ inst | upper }}_ENABLE \ ? RAIL_EVENT_DETECT_RSSI_THRESHOLD : RAIL_EVENTS_NONE) \ | (SL_RAIL_UTIL_INIT_EVENT_THERMISTOR_DONE_{{ inst | upper }}_ENABLE \ - ? RAIL_EVENT_THERMISTOR_DONE : RAIL_EVENTS_NONE)) + ? RAIL_EVENT_THERMISTOR_DONE : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TX_BLOCKED_TOO_HOT_{{ inst | upper }}_ENABLE \ + ? RAIL_EVENT_TX_BLOCKED_TOO_HOT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_TOO_HOT_{{ inst | upper }}_ENABLE \ + ? RAIL_EVENT_TEMPERATURE_TOO_HOT : RAIL_EVENTS_NONE) \ + | (SL_RAIL_UTIL_INIT_EVENT_TEMPERATURE_COOL_DOWN_{{ inst | upper }}_ENABLE \ + ? RAIL_EVENT_TEMPERATURE_COOL_DOWN : RAIL_EVENTS_NONE)) /** * An inverted event mask, available to the application, specifying the radio diff --git a/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg1x/sl_rail_util_protocol_config.h b/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg1x/sl_rail_util_protocol_config.h index f7bf1fef1b4..97289ac24af 100644 --- a/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg1x/sl_rail_util_protocol_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg1x/sl_rail_util_protocol_config.h @@ -274,6 +274,9 @@ // Filter Packets Based on Node ID // Default: 0 #define SL_RAIL_UTIL_PROTOCOL_ZWAVE_NODE_ID_FILTERING_ENABLE 0 +// Enable Promiscuous Beam Mode +// Default: 0 +#define SL_RAIL_UTIL_PROTOCOL_ZWAVE_PROMISCUOUS_BEAM_MODE_ENABLE 0 // // Z-Wave: Transition Times diff --git a/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg23/sl_rail_util_protocol_config.h b/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg23/sl_rail_util_protocol_config.h index ef0250765a3..363ce0e694a 100644 --- a/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg23/sl_rail_util_protocol_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg23/sl_rail_util_protocol_config.h @@ -38,97 +38,6 @@ // <<< Use Configuration Wizard in Context Menu >>> -// IEEE 802.15.4, GB868 Settings -// GB868: Node Configuration -// Enable/Disable IEEE 802.15.4 868 Hz Protocol -// Default: 1 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_ENABLE 1 -// PAN Coordinator -// Default: 0 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_PAN_COORDINATOR_ENABLE 0 -// Promiscuous Mode -// Default: 1 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_PROMISCUOUS_MODE_ENABLE 1 -// Default Frame Pending bit value for outgoing ACKs in response to Data Request Command -// Default: 0 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_DEFAULT_FRAME_PENDING_STATE 0 -// - -// GB868: Receivable Frame Types -// Beacon Frames -// Default: 1 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_ACCEPT_BEACON_FRAME_ENABLE 1 -// Data Frames -// Default: 1 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_ACCEPT_DATA_FRAME_ENABLE 1 -// ACK Frames -// Default: 0 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_ACCEPT_ACK_FRAME_ENABLE 0 -// Command Frames -// Default: 1 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_ACCEPT_COMMAND_FRAME_ENABLE 1 -// - -// GB868: Transition Times -// Transition time (microseconds) from idle to RX -// <0-65535:1> -// Default: 100 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_TIMING_IDLE_TO_RX_US 100 -// Transition time (microseconds) from TX to RX -// <0-65535:1> -// Default: 440 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_TIMING_TX_TO_RX_US 440 -// Transition time (microseconds) from idle to TX -// <0-65535:1> -// Default: 100 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_TIMING_IDLE_TO_TX_US 100 -// Transition time (microseconds) from RX to TX -// <0-65535:1> -// Default: 450 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_TIMING_RX_TO_TX_US 450 -// - -// GB868: RX Search Timeouts -// Enable RX Search timeout after Idle -// Default: 0 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_TIMING_RX_SEARCH_TIMEOUT_AFTER_IDLE_ENABLE 0 -// Max time (microseconds) radio will search for packet when coming from idle -// <1-65535:1> -// Default: 65535 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_TIMING_RX_SEARCH_TIMEOUT_AFTER_IDLE_US 65535 -// -// Enable RX Search timeout after TX -// Default: 0 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_TIMING_RX_SEARCH_TIMEOUT_AFTER_TX_ENABLE 0 -// Max time (microseconds) radio will search for packet when coming from TX -// <1-65535:1> -// Default: 65535 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_TIMING_RX_SEARCH_TIMEOUT_AFTER_TX_US 65535 -// -// - -// GB868: Auto ACK Configuration -// Enable Auto ACKs -// Default: 1 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_AUTO_ACK_ENABLE 1 -// RX ACK timeout duration (microseconds) -// <1-65535:1> -// Default: 1800 -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_AUTO_ACK_TIMEOUT_US 1800 -// Radio state transition after attempting to receive ACK -// Idle -// RX -// Default: RAIL_RF_STATE_RX -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_AUTO_ACK_RX_TRANSITION_STATE RAIL_RF_STATE_RX -// Radio state transition after transmitting ACK -// Idle -// RX -// Default: RAIL_RF_STATE_RX -#define SL_RAIL_UTIL_PROTOCOL_IEEE802154_GB868_AUTO_ACK_TX_TRANSITION_STATE RAIL_RF_STATE_RX -// -// -// - // Z-Wave Settings // Z-Wave: Configuration Options // Enable/Disable Z-Wave @@ -143,6 +52,9 @@ // Filter Packets Based on Node ID // Default: 0 #define SL_RAIL_UTIL_PROTOCOL_ZWAVE_NODE_ID_FILTERING_ENABLE 0 +// Enable Promiscuous Beam Mode +// Default: 0 +#define SL_RAIL_UTIL_PROTOCOL_ZWAVE_PROMISCUOUS_BEAM_MODE_ENABLE 0 // // Z-Wave: Transition Times diff --git a/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg25/sl_rail_util_protocol_config.h b/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg25/sl_rail_util_protocol_config.h index 47fe199d590..f1ad249f955 100644 --- a/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg25/sl_rail_util_protocol_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg25/sl_rail_util_protocol_config.h @@ -140,6 +140,9 @@ // Filter Packets Based on Node ID // Default: 0 #define SL_RAIL_UTIL_PROTOCOL_ZWAVE_NODE_ID_FILTERING_ENABLE 0 +// Enable Promiscuous Beam Mode +// Default: 0 +#define SL_RAIL_UTIL_PROTOCOL_ZWAVE_PROMISCUOUS_BEAM_MODE_ENABLE 0 // // Z-Wave: Transition Times diff --git a/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg28/sl_rail_util_protocol_config.h b/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg28/sl_rail_util_protocol_config.h index 0154318b677..1bfe01bf1e0 100644 --- a/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg28/sl_rail_util_protocol_config.h +++ b/platform/radio/rail_lib/plugin/rail_util_protocol/config/efr32xg28/sl_rail_util_protocol_config.h @@ -182,6 +182,9 @@ // Filter Packets Based on Node ID // Default: 0 #define SL_RAIL_UTIL_PROTOCOL_ZWAVE_NODE_ID_FILTERING_ENABLE 0 +// Enable Promiscuous Beam Mode +// Default: 0 +#define SL_RAIL_UTIL_PROTOCOL_ZWAVE_PROMISCUOUS_BEAM_MODE_ENABLE 0 // // Z-Wave: Transition Times diff --git a/platform/radio/rail_lib/plugin/rail_util_protocol/sl_rail_util_protocol.c b/platform/radio/rail_lib/plugin/rail_util_protocol/sl_rail_util_protocol.c index d075c00ca16..0c8a5ab6756 100644 --- a/platform/radio/rail_lib/plugin/rail_util_protocol/sl_rail_util_protocol.c +++ b/platform/radio/rail_lib/plugin/rail_util_protocol/sl_rail_util_protocol.c @@ -255,7 +255,9 @@ static RAIL_Status_t sl_rail_util_protocol_config_zwave(RAIL_Handle_t handle, | (SL_RAIL_UTIL_PROTOCOL_ZWAVE_DETECT_BEAM_FRAME_ENABLE ? RAIL_ZWAVE_OPTION_DETECT_BEAM_FRAMES : 0U) | (SL_RAIL_UTIL_PROTOCOL_ZWAVE_NODE_ID_FILTERING_ENABLE - ? RAIL_ZWAVE_OPTION_NODE_ID_FILTERING : 0U), + ? RAIL_ZWAVE_OPTION_NODE_ID_FILTERING : 0U) + | (SL_RAIL_UTIL_PROTOCOL_ZWAVE_PROMISCUOUS_BEAM_MODE_ENABLE + ? RAIL_ZWAVE_OPTION_PROMISCUOUS_BEAM_MODE : 0U), .ackConfig = { .enable = SL_RAIL_UTIL_PROTOCOL_ZWAVE_AUTO_ACK_ENABLE, .ackTimeout = SL_RAIL_UTIL_PROTOCOL_ZWAVE_AUTO_ACK_TIMEOUT_US, diff --git a/platform/radio/rail_lib/protocol/zwave/rail_zwave.h b/platform/radio/rail_lib/protocol/zwave/rail_zwave.h index e1b8343e21c..d6a8dde2b20 100644 --- a/platform/radio/rail_lib/protocol/zwave/rail_zwave.h +++ b/platform/radio/rail_lib/protocol/zwave/rail_zwave.h @@ -55,7 +55,7 @@ extern "C" { /// // Main RAIL_EVENT callback /// static void RAILCb_Event(RAIL_Handle_t railHandle, RAIL_Events_t events) /// { -/// // Get beamNodeId and channel index from Beam Packet +/// // Get beamNodeId and channel index from beam packet /// if (events & RAIL_EVENT_ZWAVE_BEAM) { /// if (RAIL_ZWAVE_IsEnabled(railHandle)) { /// if ((RAIL_ZWAVE_GetBeamNodeId(railHandle, &gRecentBeamNodeId) @@ -105,6 +105,8 @@ RAIL_ENUM_GENERIC(RAIL_ZWAVE_Options_t, uint32_t) { RAIL_ZWAVE_OPTION_DETECT_BEAM_FRAMES_SHIFT, /** Shift position of \ref RAIL_ZWAVE_OPTION_NODE_ID_FILTERING bit */ RAIL_ZWAVE_OPTION_NODE_ID_FILTERING_SHIFT, + /** Shift position of \ref RAIL_ZWAVE_OPTION_PROMISCUOUS_BEAM_MODE bit */ + RAIL_ZWAVE_OPTION_PROMISCUOUS_BEAM_MODE_SHIFT, }; // RAIL_ZWAVE_Options_t bitmasks @@ -116,40 +118,59 @@ RAIL_ENUM_GENERIC(RAIL_ZWAVE_Options_t, uint32_t) { #define RAIL_ZWAVE_OPTIONS_DEFAULT RAIL_ZWAVE_OPTIONS_NONE /** - * An option to configure promiscuous mode, accepting packets regardless - * of HomeId. Defaults to false, filtering packets based on the HomeId. + * An option to configure promiscuous mode, accepting non-beam packets + * regardless of their HomeId. By default packets are filtered by their HomeId. * When true, such filtering is disabled. */ #define RAIL_ZWAVE_OPTION_PROMISCUOUS_MODE \ (1u << RAIL_ZWAVE_OPTION_PROMISCUOUS_MODE_SHIFT) + +/** + * An option to filter non-beam packets based on their NodeId when + * \ref RAIL_ZWAVE_OPTION_PROMISCUOUS_MODE is disabled. + * + * @note This option has no effect when + * \ref RAIL_ZWAVE_OPTION_PROMISCUOUS_MODE is enabled. + */ +#define RAIL_ZWAVE_OPTION_NODE_ID_FILTERING \ + (1u << RAIL_ZWAVE_OPTION_NODE_ID_FILTERING_SHIFT) + /** - * An option to configure Beam frame recognition. Defaults to false. - * When true, Beam frames that are broadcast or match the NodeId and - * HomeIdHash values will trigger \ref RAIL_EVENT_ZWAVE_BEAM event, - * in addition to \ref RAIL_EVENT_RX_PACKET_ABORTED which occurs for - * every received Beam frame. + * An option to configure beam frame recognition. By default beams are not + * considered special and will be received as if they were normal Z-Wave + * frames, assuredly triggering \ref RAIL_EVENT_RX_FRAME_ERROR. + * When true, beam frames that are broadcast or match the NodeId and + * HomeIdHash values will trigger \ref RAIL_EVENT_ZWAVE_BEAM event. + * (All beams additionally trigger \ref RAIL_EVENT_RX_PACKET_ABORTED + * regardless of NodeId / HomeIdHash values.) * * @note This option takes precedence over \ref * RAIL_ZWAVE_OPTION_PROMISCUOUS_MODE when receiving a beam frame. - * If this option is false, beam frames are not considered special - * and will be received as if they were normal Z-Wave frames, assuredly - * triggering \ref RAIL_EVENT_RX_FRAME_ERROR. + * For promiscuous beam handling see related + * \ref RAIL_ZWAVE_OPTION_PROMISCUOUS_BEAM_MODE option. */ #define RAIL_ZWAVE_OPTION_DETECT_BEAM_FRAMES \ (1u << RAIL_ZWAVE_OPTION_DETECT_BEAM_FRAMES_SHIFT) + /** - * An option to filter packets based on Node ID when not - * promiscuous. + * An option to receive all beams promiscuously when \ref + * RAIL_ZWAVE_OPTION_DETECT_BEAM_FRAMES is enabled. + * When true, beam frames are received regardless of their NodeId or HomeIdHash + * resulting in \ref RAIL_EVENT_ZWAVE_BEAM (and also \ref + * RAIL_EVENT_RX_PACKET_ABORTED) for each beam frame. + * + * @note This option has no effect when + * \ref RAIL_ZWAVE_OPTION_DETECT_BEAM_FRAMES is disabled. */ -#define RAIL_ZWAVE_OPTION_NODE_ID_FILTERING \ - (1u << RAIL_ZWAVE_OPTION_NODE_ID_FILTERING_SHIFT) +#define RAIL_ZWAVE_OPTION_PROMISCUOUS_BEAM_MODE \ + (1u << RAIL_ZWAVE_OPTION_PROMISCUOUS_BEAM_MODE_SHIFT) /** A value representing all options */ #define RAIL_ZWAVE_OPTIONS_ALL 0xFFFFFFFFU /** * @enum RAIL_ZWAVE_NodeId_t - * @brief A Z-Wave Node Id. + * @brief A Z-Wave Node ID. * * This data type is 12 bits wide when using the ZWave Long Range PHY, and * 8 bits wide otherwise. @@ -206,7 +227,7 @@ RAIL_ENUM_GENERIC(RAIL_ZWAVE_HomeId_t, uint32_t) { /** * @enum RAIL_ZWAVE_HomeIdHash_t - * @brief A Z-Wave Home Id hash. + * @brief A Z-Wave Home ID hash. * * @note Certain values (as shown) are illegal. */ @@ -216,7 +237,7 @@ RAIL_ENUM(RAIL_ZWAVE_HomeIdHash_t) { RAIL_ZWAVE_HOME_ID_HASH_ILLEGAL_3 = 0x55U, /**< An illegal HomeIdHash value. */ RAIL_ZWAVE_HOME_ID_HASH_DONT_CARE = 0x55U, /**< Illegal HomeIdHash value that suppresses checking the - HomeIdHash field of Beam + HomeIdHash field of beam packets. */ RAIL_ZWAVE_HOME_ID_HASH_DEFAULT = RAIL_ZWAVE_HOME_ID_HASH_DONT_CARE, /**< Default to don't care. */ @@ -337,8 +358,8 @@ RAIL_ENUM(RAIL_ZWAVE_RegionId_t) { #endif//DOXYGEN_SHOULD_SKIP_THIS /** - * Invalid Beam TX power value returned when \ref RAIL_ZWAVE_GetLrBeamTxPower - * is called after receiving a regular non long range beam. + * Invalid beam TX power value returned when \ref RAIL_ZWAVE_GetLrBeamTxPower + * is called after receiving a regular non-long-range beam. */ #define RAIL_ZWAVE_LR_BEAM_TX_POWER_INVALID (0xFFU) @@ -357,7 +378,7 @@ typedef struct RAIL_ZWAVE_LrAckData { /** * @struct RAIL_ZWAVE_BeamRxConfig_t - * @brief Configuration structure for Z-Wave Beam Detection. + * @brief Configuration structure for Z-Wave beam detection. * This structure should not be used without direct instruction * by Silicon Labs. Appropriate defaults for this are built into * the RAIL library. @@ -509,12 +530,12 @@ RAIL_Status_t RAIL_ZWAVE_SetNodeId(RAIL_Handle_t railHandle, * Inform RAIL of the Z-Wave node's HomeId and its hash for receive filtering * * @param[in] railHandle A handle of RAIL instance. - * @param[in] homeId A Z-Wave Home ID. - * @param[in] homeIdHash The hash of the Home Id expected in Beam frames. - * If this is \ref RAIL_ZWAVE_HOME_ID_HASH_DONT_CARE, Beam frame detection - * will not check the HomeIdHash in a received Beam frame at all, and - * \ref RAIL_EVENT_ZWAVE_BEAM will trigger based solely on the nodeId - * in the Beam frame. + * @param[in] homeId A Z-Wave HomeId. + * @param[in] homeIdHash The hash of the HomeId expected in beam frames. + * If this is \ref RAIL_ZWAVE_HOME_ID_HASH_DONT_CARE, beam frame detection + * will not check the HomeIdHash in a received beam frame at all, and + * \ref RAIL_EVENT_ZWAVE_BEAM will trigger based solely on the NodeId + * in the beam frame. * @return Status code indicating success of the function call. * * @note Until this API is called, RAIL will assume the HomeId is an @@ -526,8 +547,8 @@ RAIL_Status_t RAIL_ZWAVE_SetHomeId(RAIL_Handle_t railHandle, RAIL_ZWAVE_HomeIdHash_t homeIdHash); /** - * Get the NodeId of the most recently seen Beam frame that targeted this - * node. + * Get the NodeId of the most recently seen beam frame that triggered + * \ref RAIL_EVENT_ZWAVE_BEAM. * * @param[in] railHandle A handle of RAIL instance. * @param[out] pNodeId A pointer to \ref RAIL_ZWAVE_NodeId_t to populate. @@ -540,9 +561,24 @@ RAIL_Status_t RAIL_ZWAVE_SetHomeId(RAIL_Handle_t railHandle, RAIL_Status_t RAIL_ZWAVE_GetBeamNodeId(RAIL_Handle_t railHandle, RAIL_ZWAVE_NodeId_t *pNodeId); +/** + * Get the HomeIdHash of the most recently seen beam frame that triggered + * \ref RAIL_EVENT_ZWAVE_BEAM. + * + * @param[in] railHandle A handle of RAIL instance. + * @param[out] pBeamHomeIdHash A pointer to \ref RAIL_ZWAVE_HomeIdHash_t to populate. + * @return Status code indicating success of the function call. + * + * @note This is best called while handling the \ref RAIL_EVENT_ZWAVE_BEAM + * event; if multiple beams are received only the most recent beam's HomeIdHash + * is provided. + */ +RAIL_Status_t RAIL_ZWAVE_GetBeamHomeIdHash(RAIL_Handle_t railHandle, + RAIL_ZWAVE_HomeIdHash_t *pBeamHomeIdHash); + /** * Get the channel hopping index of the most recently seen beam frame that - * targeted this node. + * triggered \ref RAIL_EVENT_ZWAVE_BEAM. * * @param[in] railHandle A handle of RAIL instance. * @param[out] pChannelIndex A pointer to a uint8_t to populate with @@ -559,16 +595,17 @@ RAIL_Status_t RAIL_ZWAVE_GetBeamChannelIndex(RAIL_Handle_t railHandle, uint8_t *pChannelIndex); /** - * Get the TX power used to transmit the long range beam frame. + * Get the TX power used by the transmitter of the most recently seen + * long range beam frame that triggered \ref RAIL_EVENT_ZWAVE_BEAM. * * @param[in] railHandle A handle of RAIL instance. * @param[out] pLrBeamTxPower An application provided pointer to a uint8_t to * be populated with the TX power of the latest long range beam. This will * be set to \ref RAIL_ZWAVE_LR_BEAM_TX_POWER_INVALID if this API is called - * after receiving a regular non long range beam. + * after receiving a regular non-long-range beam. * @return Status code indicating success of the function call. This function * will return \ref RAIL_STATUS_INVALID_STATE if called after receiving a - * regular non long range beam. + * regular (non-long-range) beam. * * @note This is best called while handling the \ref RAIL_EVENT_ZWAVE_BEAM * event; if multiple beams are received only the most recent long range @@ -718,7 +755,7 @@ RAIL_TxPower_t RAIL_ZWAVE_GetTxLowPowerDbm(RAIL_Handle_t railHandle); * * @return status indicating whether or not the radio was able to configure * beam packet detection/reception. Reasons for failure include an un-idled - * radio or a non Japan or Korea region configured before calling this function. + * radio or a non-Japan non-Korea region configured before calling this function. */ RAIL_Status_t RAIL_ZWAVE_ReceiveBeam(RAIL_Handle_t railHandle, uint8_t *beamDetectIndex, diff --git a/platform/release-highlights.txt b/platform/release-highlights.txt index d186da409b8..94c8d61e93e 100644 --- a/platform/release-highlights.txt +++ b/platform/release-highlights.txt @@ -1,2 +1,4 @@ -Gecko Platform 4.2.1.0 -- Targeted quality improvements and bug fixes +Gecko Platform 4.2.2.0 +- Security + - Released software support for TrustZone, GA quality +- Other targeted quality improvements and bug fixes diff --git a/platform/security/component/scripts/upgrade.lua b/platform/security/component/scripts/upgrade.lua new file mode 100644 index 00000000000..f7053cdace8 --- /dev/null +++ b/platform/security/component/scripts/upgrade.lua @@ -0,0 +1,22 @@ +local changeset = {} + +local old_config = slc.config('SL_PSA_ITS_SUPPORT_V3_DRIVER') + +if slc.is_selected('psa_its') then + if (old_config == nil) then + table.insert(changeset, { + ['option'] = 'SL_PSA_ITS_SUPPORT_V1_DRIVER', + ['value'] = '1' + }) + table.insert(changeset, { + ['option'] = 'SL_PSA_ITS_SUPPORT_V2_DRIVER', + ['value'] = '1' + }) + table.insert(changeset, { + ['option'] = 'SL_PSA_ITS_SUPPORT_V3_DRIVER', + ['value'] = '0' + }) + end +end + +return changeset \ No newline at end of file diff --git a/platform/security/component/tz_common.slcc b/platform/security/component/tz_common.slcc index b4d42a93571..f8e872f2c88 100644 --- a/platform/security/component/tz_common.slcc +++ b/platform/security/component/tz_common.slcc @@ -5,7 +5,7 @@ description: >- This component provides includes files and functionality common for TZ Secure and NonSecure applications. ui_hints: visibility: never -quality: evaluation +quality: production component_root_path: platform/security provides: diff --git a/platform/security/component/tz_iovec_check.slcc b/platform/security/component/tz_iovec_check.slcc index 7b49facaf2e..0d3eeb9a2e1 100644 --- a/platform/security/component/tz_iovec_check.slcc +++ b/platform/security/component/tz_iovec_check.slcc @@ -6,8 +6,8 @@ description: >- category: Platform|Security|TrustZone ui_hints: visibility: never -quality: evaluation -component_root_path: platform/security/sl_component +quality: production +component_root_path: platform/security/sl_component/sl_trustzone requires: - name: sl_assert @@ -16,27 +16,14 @@ provides: - name: tz_iovec_check include: - - path: ../../../util/third_party/ - - - path: ../../../util/third_party/trusted-firmware-m/interface/include - unless: [tz_service_common] - file_list: - - path: psa/client.h - - path: psa_config.h - - path: psa/error.h - - - path: ../../../util/third_party/mbedtls/include - file_list: - - path: psa/crypto.h - - - path: sl_trustzone/inc/common + - path: inc/common file_list: - path: sli_tz_iovec.h - - path: sl_trustzone/inc/secure + - path: inc/secure file_list: - path: sli_tz_iovec_check.h source: - - path: sl_trustzone/src/sli_tz_iovec_check.c + - path: src/sli_tz_iovec_check.c condition: [trustzone_secure] diff --git a/platform/security/component/tz_ns_interface.slcc b/platform/security/component/tz_ns_interface.slcc index 09d66021477..cd3758fc138 100644 --- a/platform/security/component/tz_ns_interface.slcc +++ b/platform/security/component/tz_ns_interface.slcc @@ -6,7 +6,7 @@ description: >- category: Platform|Security|TrustZone ui_hints: visibility: never -quality: evaluation +quality: production component_root_path: platform/security provides: diff --git a/platform/security/component/tz_secure_config.slcc b/platform/security/component/tz_secure_config.slcc index 4aa6af62ece..a994bce6477 100644 --- a/platform/security/component/tz_secure_config.slcc +++ b/platform/security/component/tz_secure_config.slcc @@ -5,7 +5,7 @@ description: >- category: Platform|Security|TrustZone ui_hints: visibility: never -quality: evaluation +quality: production component_root_path: platform/security/sl_component/sl_trustzone provides: diff --git a/platform/security/component/tz_secure_key_library.slcc b/platform/security/component/tz_secure_key_library.slcc index 67c29edae24..e1a377dc04c 100644 --- a/platform/security/component/tz_secure_key_library.slcc +++ b/platform/security/component/tz_secure_key_library.slcc @@ -4,7 +4,7 @@ label: TrustZone Secure Key Library description: >- This component enables TrustZone secure library and its Non-Secure interface. category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: platform/security/sl_component/sl_trustzone provides: diff --git a/platform/security/component/tz_secure_key_library_ns.slcc b/platform/security/component/tz_secure_key_library_ns.slcc index 0c7ad1af82f..fbec4db6c43 100644 --- a/platform/security/component/tz_secure_key_library_ns.slcc +++ b/platform/security/component/tz_secure_key_library_ns.slcc @@ -3,7 +3,7 @@ package: platform description: >- This component provides the NS interface files of the Secure Key library. category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: platform/security ui_hints: visibility: never diff --git a/platform/security/component/tz_secure_key_library_s.slcc b/platform/security/component/tz_secure_key_library_s.slcc index 8c5ea8ac28e..e9ca1b82844 100644 --- a/platform/security/component/tz_secure_key_library_s.slcc +++ b/platform/security/component/tz_secure_key_library_s.slcc @@ -3,7 +3,7 @@ package: platform description: >- This component provides a TrustZone secure library for services category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: platform/security/sl_component/sl_trustzone ui_hints: visibility: never @@ -28,6 +28,7 @@ requires: - name: mpu - name: tz_common + - name: sl_fault_injection_hardening - name: tz_service_attestation - name: tz_service_nvm3 - name: tz_service_psa_its @@ -48,6 +49,10 @@ source: template_file: - path: config/template/tz_secure_memory_autogen.h.jinja +toolchain_settings: + - option: trustzone_library + value: enabled + template_contribution: - name: linker_no_token_page priority: 0 diff --git a/platform/security/component/tz_secure_nvm3_s.slcc b/platform/security/component/tz_secure_nvm3_s.slcc index 236a51d3140..e083e641c50 100644 --- a/platform/security/component/tz_secure_nvm3_s.slcc +++ b/platform/security/component/tz_secure_nvm3_s.slcc @@ -4,7 +4,7 @@ label: Internal NVM3 support for TrustZone secure library description: >- This component includes the NVM3 support needed internally by the TrustZone secure library when configured with ITS support. category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: platform/security/sl_component/sl_trustzone ui_hints: visibility: never diff --git a/platform/security/component/tz_service_attestation.slcc b/platform/security/component/tz_service_attestation.slcc index a275241e09f..4674b8e0d65 100644 --- a/platform/security/component/tz_service_attestation.slcc +++ b/platform/security/component/tz_service_attestation.slcc @@ -4,7 +4,7 @@ label: PSA Attestation Service for TrustZone Secure Key Library description: >- This component includes the attestation support for TrustZone secure library. category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: platform/security provides: diff --git a/platform/security/component/tz_service_common.slcc b/platform/security/component/tz_service_common.slcc index 29e9431dd46..60eb63f270a 100644 --- a/platform/security/component/tz_service_common.slcc +++ b/platform/security/component/tz_service_common.slcc @@ -6,7 +6,7 @@ description: >- category: Platform|Security|TrustZone ui_hints: visibility: never -quality: evaluation +quality: production component_root_path: util/third_party/trusted-firmware-m provides: diff --git a/platform/security/component/tz_service_config.slcc b/platform/security/component/tz_service_config.slcc index 5c8bf050c79..21a0846a293 100644 --- a/platform/security/component/tz_service_config.slcc +++ b/platform/security/component/tz_service_config.slcc @@ -5,7 +5,7 @@ description: >- category: Platform|Security|TrustZone ui_hints: visibility: never -quality: evaluation +quality: production component_root_path: platform/security/sl_component/sl_trustzone provides: diff --git a/platform/security/component/tz_service_msc.slcc b/platform/security/component/tz_service_msc.slcc index 1f5be4d890f..e3497149336 100644 --- a/platform/security/component/tz_service_msc.slcc +++ b/platform/security/component/tz_service_msc.slcc @@ -3,10 +3,14 @@ package: platform label: MSC Service for TrustZone Secure Key Library description: >- This component provides an interface for the TZ Non-Secure application to - access a subset of the MSC's functionality. + access a very limited subset of the MSC's functionality. The functionality + provided is mainly used by the CMU module for configuring flash access wait + states. category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: platform/security/sl_component/sl_trustzone/ +ui_hints: + visibility: never provides: - name: tz_service_msc @@ -26,8 +30,6 @@ include: - path: sli_tz_service_msc.h source: - - path: src/sli_tz_service_msc_ns.c - condition: [trustzone_nonsecure] - path: src/sli_tz_service_msc_s.c condition: [trustzone_secure] @@ -36,18 +38,6 @@ template_contribution: value: TZ_SERVICE_MSC_PRESENT condition: [trustzone_nonsecure] - - name: tz_msc_sid_func_mapping - value: - sid: SLI_TZ_SERVICE_MSC_WRITEWORD_SID - func: sli_tz_msc_write_word - condition: [trustzone_nonsecure] - - - name: tz_msc_sid_func_mapping - value: - sid: SLI_TZ_SERVICE_MSC_WRITEWORDDMA_SID - func: sli_tz_msc_write_word_dma - condition: [trustzone_nonsecure] - - name: simple_func_mapping_no_args value: sli_tz_msc_get_locked condition: [trustzone_nonsecure] @@ -87,15 +77,3 @@ template_contribution: - name: simple_func_mapping_with_args value: sli_tz_msc_set_misclockword condition: [trustzone_nonsecure] - - - name: simple_func_mapping_no_args - value: sli_tz_msc_init - condition: [trustzone_nonsecure] - - - name: simple_func_mapping_no_args - value: sli_tz_msc_deinit - condition: [trustzone_nonsecure] - - - name: simple_func_mapping_with_args - value: sli_tz_msc_erase_page - condition: [trustzone_nonsecure] \ No newline at end of file diff --git a/platform/security/component/tz_service_nvm3.slcc b/platform/security/component/tz_service_nvm3.slcc index c074eafa7a4..ae613480f97 100644 --- a/platform/security/component/tz_service_nvm3.slcc +++ b/platform/security/component/tz_service_nvm3.slcc @@ -4,7 +4,7 @@ label: NVM3 Service for TrustZone Secure Key Library description: >- This component includes the NVM3 support for TrustZone secure library. category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: util/third_party/trusted-firmware-m provides: diff --git a/platform/security/component/tz_service_nvm3_common.slcc b/platform/security/component/tz_service_nvm3_common.slcc index ea12d5e1a8b..b0c5ec2818d 100644 --- a/platform/security/component/tz_service_nvm3_common.slcc +++ b/platform/security/component/tz_service_nvm3_common.slcc @@ -4,7 +4,7 @@ label: NVM3 and ITS service helper component for TrustZone secure library description: >- This component provides the common files required for the NVM3 and ITS services category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: util/third_party/trusted-firmware-m ui_hints: visibility: never diff --git a/platform/security/component/tz_service_psa_crypto.slcc b/platform/security/component/tz_service_psa_crypto.slcc index 3a7b4b5b435..dbd6d4b7f1b 100644 --- a/platform/security/component/tz_service_psa_crypto.slcc +++ b/platform/security/component/tz_service_psa_crypto.slcc @@ -4,7 +4,7 @@ label: PSA Crypto Service for TrustZone Secure Key Library description: >- This component includes the PSA Crypto core support for TrustZone secure library. category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: util/third_party/trusted-firmware-m provides: diff --git a/platform/security/component/tz_service_psa_its.slcc b/platform/security/component/tz_service_psa_its.slcc index 18d2dae8b52..9d1d2ea4895 100644 --- a/platform/security/component/tz_service_psa_its.slcc +++ b/platform/security/component/tz_service_psa_its.slcc @@ -4,7 +4,7 @@ label: PSA ITS Service for TrustZone Secure Key Library description: >- This component includes the PSA Internal Trusted Storage support for TrustZone secure library. category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: platform/security/sl_component provides: diff --git a/platform/security/component/tz_service_se_manager.slcc b/platform/security/component/tz_service_se_manager.slcc index 69ecd726f4d..61a17d044e9 100644 --- a/platform/security/component/tz_service_se_manager.slcc +++ b/platform/security/component/tz_service_se_manager.slcc @@ -4,7 +4,7 @@ label: SE Manager Service for TrustZone Secure Key Library description: >- This component includes the SE Manager support for TrustZone secure library. category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: platform/security/sl_component/sl_trustzone/ provides: diff --git a/platform/security/component/tz_service_syscfg.slcc b/platform/security/component/tz_service_syscfg.slcc index 8b93f0c6541..d0ddcae5889 100644 --- a/platform/security/component/tz_service_syscfg.slcc +++ b/platform/security/component/tz_service_syscfg.slcc @@ -4,7 +4,7 @@ label: SYSCFG Service for TrustZone Secure Key Library description: >- This component includes API that provides access to SYSCFG registers. category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: platform/security/sl_component/sl_trustzone/ provides: diff --git a/platform/security/component/tz_sl_interface.slcc b/platform/security/component/tz_sl_interface.slcc index d7e3db52559..4ef1433a01a 100644 --- a/platform/security/component/tz_sl_interface.slcc +++ b/platform/security/component/tz_sl_interface.slcc @@ -4,21 +4,29 @@ label: Interface for TrustZone Secure Key Library description: >- This component provides the TrustZone secure library interface files category: Platform|Security|TrustZone -quality: evaluation +quality: production ui_hints: visibility: never component_root_path: platform/security/sl_component/sl_trustzone provides: - name: tz_sl_interface +requires: + - name: tz_common + - name: tz_iovec_check source: - path: src/sli_tz_s_interface.c condition: [trustzone_secure] include: + - path: ../../../../util/third_party/ + condition: [trustzone_secure] - path: ../../../../util/third_party/trusted-firmware-m/interface/include unless: [tz_service_common] file_list: - path: tfm_crypto_defs.h - path: tfm_api.h + - path: psa_config.h + - path: psa/client.h + - path: psa/error.h template_file: - path: config/template/sli_tz_s_interface_funcs_autogen.h.jinja export: true diff --git a/platform/security/component/tz_sl_interface_crypto.slcc b/platform/security/component/tz_sl_interface_crypto.slcc index ff5e9a95310..b5320b7b075 100644 --- a/platform/security/component/tz_sl_interface_crypto.slcc +++ b/platform/security/component/tz_sl_interface_crypto.slcc @@ -3,7 +3,7 @@ package: platform description: >- This component provides a TrustZone secure library interface category: Platform|Security|TrustZone -quality: evaluation +quality: production component_root_path: platform/security ui_hints: visibility: never diff --git a/platform/security/component/tz_sl_interface_crypto_aead_funcs.slcc b/platform/security/component/tz_sl_interface_crypto_aead_funcs.slcc index 761de70caa1..9505f4f4b69 100644 --- a/platform/security/component/tz_sl_interface_crypto_aead_funcs.slcc +++ b/platform/security/component/tz_sl_interface_crypto_aead_funcs.slcc @@ -3,7 +3,7 @@ package: platform description: >- This component provides a TrustZone secure library interface crypto aead functions category: Platform|Security|TrustZone -quality: evaluation +quality: production ui_hints: visibility: never provides: diff --git a/platform/security/component/tz_sl_interface_crypto_asym_sign_funcs.slcc b/platform/security/component/tz_sl_interface_crypto_asym_sign_funcs.slcc index 41df8252e13..8b673f1fb12 100644 --- a/platform/security/component/tz_sl_interface_crypto_asym_sign_funcs.slcc +++ b/platform/security/component/tz_sl_interface_crypto_asym_sign_funcs.slcc @@ -3,7 +3,7 @@ package: platform description: >- This component provides a TrustZone secure library interface crypto asym sign functions category: Platform|Security|TrustZone -quality: evaluation +quality: production ui_hints: visibility: never provides: diff --git a/platform/security/component/tz_sl_interface_crypto_cipher_funcs.slcc b/platform/security/component/tz_sl_interface_crypto_cipher_funcs.slcc index 76bf31c6c0a..1c1bab59dde 100644 --- a/platform/security/component/tz_sl_interface_crypto_cipher_funcs.slcc +++ b/platform/security/component/tz_sl_interface_crypto_cipher_funcs.slcc @@ -3,7 +3,7 @@ package: platform description: >- This component provides a TrustZone secure library interface crypto cipher functions category: Platform|Security|TrustZone -quality: evaluation +quality: production ui_hints: visibility: never provides: diff --git a/platform/security/component/tz_sl_interface_crypto_hash_funcs.slcc b/platform/security/component/tz_sl_interface_crypto_hash_funcs.slcc index 09330bd19c2..37a3e5e0d73 100644 --- a/platform/security/component/tz_sl_interface_crypto_hash_funcs.slcc +++ b/platform/security/component/tz_sl_interface_crypto_hash_funcs.slcc @@ -3,7 +3,7 @@ package: platform description: >- This component provides a TrustZone secure library interface crypto hash functions category: Platform|Security|TrustZone -quality: evaluation +quality: production ui_hints: visibility: never provides: diff --git a/platform/security/component/tz_sl_interface_crypto_key_derivation_funcs.slcc b/platform/security/component/tz_sl_interface_crypto_key_derivation_funcs.slcc index 2d39c06da39..ba87df1aae5 100644 --- a/platform/security/component/tz_sl_interface_crypto_key_derivation_funcs.slcc +++ b/platform/security/component/tz_sl_interface_crypto_key_derivation_funcs.slcc @@ -3,7 +3,7 @@ package: platform description: >- This component provides a TrustZone secure library interface crypto key derivation functions category: Platform|Security|TrustZone -quality: evaluation +quality: production ui_hints: visibility: never provides: diff --git a/platform/security/component/tz_sl_interface_crypto_key_funcs.slcc b/platform/security/component/tz_sl_interface_crypto_key_funcs.slcc index f402f98a357..71bb694c82a 100644 --- a/platform/security/component/tz_sl_interface_crypto_key_funcs.slcc +++ b/platform/security/component/tz_sl_interface_crypto_key_funcs.slcc @@ -3,7 +3,7 @@ package: platform description: >- This component provides a TrustZone secure library interface crypto key functions category: Platform|Security|TrustZone -quality: evaluation +quality: production ui_hints: visibility: never provides: diff --git a/platform/security/component/tz_sl_interface_crypto_mac_funcs.slcc b/platform/security/component/tz_sl_interface_crypto_mac_funcs.slcc index 4c643bfd6a1..745ce921936 100644 --- a/platform/security/component/tz_sl_interface_crypto_mac_funcs.slcc +++ b/platform/security/component/tz_sl_interface_crypto_mac_funcs.slcc @@ -3,7 +3,7 @@ package: platform description: >- This component provides a TrustZone secure library interface crypto mac functions category: Platform|Security|TrustZone -quality: evaluation +quality: production ui_hints: visibility: never provides: diff --git a/platform/security/component/tz_sl_interface_crypto_rng_funcs.slcc b/platform/security/component/tz_sl_interface_crypto_rng_funcs.slcc index aab9d8356d2..de759d17322 100644 --- a/platform/security/component/tz_sl_interface_crypto_rng_funcs.slcc +++ b/platform/security/component/tz_sl_interface_crypto_rng_funcs.slcc @@ -3,7 +3,7 @@ package: platform description: >- This component provides a TrustZone secure library interface crypto rng functions category: Platform|Security|TrustZone -quality: evaluation +quality: production ui_hints: visibility: never provides: diff --git a/platform/security/component/tz_util.slcc b/platform/security/component/tz_util.slcc index e33b2c5e40f..9a663d23625 100644 --- a/platform/security/component/tz_util.slcc +++ b/platform/security/component/tz_util.slcc @@ -5,7 +5,7 @@ description: >- This component provides includes utility files for TZ Secure and NonSecure applications. ui_hints: visibility: never -quality: evaluation +quality: production component_root_path: platform/security provides: diff --git a/platform/security/sl_component/sl_psa_driver/inc/sli_psa_driver_common.h b/platform/security/sl_component/sl_psa_driver/inc/sli_psa_driver_common.h index 62bdb19d600..f4536c3fcf0 100644 --- a/platform/security/sl_component/sl_psa_driver/inc/sli_psa_driver_common.h +++ b/platform/security/sl_component/sl_psa_driver/inc/sli_psa_driver_common.h @@ -128,16 +128,15 @@ psa_status_t sli_psa_validate_ecc_weierstrass_privkey(const void *privkey, * Number of bytes to clear. ******************************************************************************/ __STATIC_INLINE -void sli_psa_zeroize(void *v, size_t n) +psa_status_t sli_psa_zeroize(void *v, size_t n) { - if (n == 0) { - return; - } - - volatile unsigned char *p = v; - while (n--) { - *p++ = 0; + if (n > 0) { + volatile unsigned char *p = v; + while (n--) { + *p++ = 0; + } } + return PSA_SUCCESS; } /***************************************************************************//** diff --git a/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_aead.c b/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_aead.c index b2215c2c949..9197c6e3d6d 100644 --- a/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_aead.c +++ b/platform/security/sl_component/sl_psa_driver/src/sli_crypto_transparent_driver_aead.c @@ -356,7 +356,8 @@ psa_status_t sli_crypto_transparent_aead_encrypt_tag(const psa_key_attributes_t case PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 0): // Verify key type if (psa_get_key_type(attributes) != PSA_KEY_TYPE_AES) { - return PSA_ERROR_NOT_SUPPORTED; + psa_status = PSA_ERROR_NOT_SUPPORTED; + goto exit; } psa_status = sli_ccm_crypt_and_tag(&operation, @@ -376,7 +377,8 @@ psa_status_t sli_crypto_transparent_aead_encrypt_tag(const psa_key_attributes_t case PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_GCM, 0): { // Verify key type if (psa_get_key_type(attributes) != PSA_KEY_TYPE_AES) { - return PSA_ERROR_NOT_SUPPORTED; + psa_status = PSA_ERROR_NOT_SUPPORTED; + goto exit; } sli_gcm_crypt_and_tag(&operation, @@ -391,14 +393,13 @@ psa_status_t sli_crypto_transparent_aead_encrypt_tag(const psa_key_attributes_t *tag_length, tag); - sli_psa_zeroize(&operation, sizeof(operation)); - psa_status = PSA_SUCCESS; break; } #endif // PSA_WANT_ALG_GCM default: - return PSA_ERROR_NOT_SUPPORTED; + psa_status = PSA_ERROR_NOT_SUPPORTED; + goto exit; } if (psa_status == PSA_SUCCESS) { @@ -408,6 +409,11 @@ psa_status_t sli_crypto_transparent_aead_encrypt_tag(const psa_key_attributes_t *tag_length = 0; } + exit: + // Wipe out potential sensitive info from the operation structure, + // including the plaintext key. + sli_psa_zeroize(&operation, sizeof(operation)); + return psa_status; #else // PSA_WANT_ALG_CCM || PSA_WANT_ALG_GCM @@ -503,7 +509,8 @@ psa_status_t sli_crypto_transparent_aead_decrypt_tag(const psa_key_attributes_t case PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 0): // Verify key type if (psa_get_key_type(attributes) != PSA_KEY_TYPE_AES) { - return PSA_ERROR_NOT_SUPPORTED; + psa_status = PSA_ERROR_NOT_SUPPORTED; + goto exit; } psa_status = sli_ccm_crypt_and_tag(&operation, @@ -519,7 +526,8 @@ psa_status_t sli_crypto_transparent_aead_decrypt_tag(const psa_key_attributes_t tag_length); if (psa_status != PSA_SUCCESS) { - return psa_status; + sli_psa_zeroize(calc_tag, tag_length); + goto exit; } // Check that the provided tag equals the calculated one @@ -543,7 +551,8 @@ psa_status_t sli_crypto_transparent_aead_decrypt_tag(const psa_key_attributes_t case PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_GCM, 0): { // Verify key type if (psa_get_key_type(attributes) != PSA_KEY_TYPE_AES) { - return PSA_ERROR_NOT_SUPPORTED; + psa_status = PSA_ERROR_NOT_SUPPORTED; + goto exit; } sli_gcm_crypt_and_tag(&operation, @@ -558,8 +567,6 @@ psa_status_t sli_crypto_transparent_aead_decrypt_tag(const psa_key_attributes_t tag_length, calc_tag); - sli_psa_zeroize(&operation, sizeof(operation)); - // Check that the provided tag equals the calculated one // (in constant time). Note that the tag computed // is encrypted, so we don't have to decrypt check_tag. @@ -570,6 +577,7 @@ psa_status_t sli_crypto_transparent_aead_decrypt_tag(const psa_key_attributes_t *plaintext_length = 0; sli_psa_zeroize(plaintext, ciphertext_length); psa_status = PSA_ERROR_INVALID_SIGNATURE; + goto exit; } else { *plaintext_length = ciphertext_length; psa_status = PSA_SUCCESS; @@ -579,9 +587,15 @@ psa_status_t sli_crypto_transparent_aead_decrypt_tag(const psa_key_attributes_t } #endif // PSA_WANT_ALG_GCM default: - return PSA_ERROR_NOT_SUPPORTED; + psa_status = PSA_ERROR_NOT_SUPPORTED; + goto exit; } + exit: + // Wipe out potential sensitive info from the operation structure, + // including the plaintext key. + sli_psa_zeroize(&operation, sizeof(operation)); + return psa_status; #else // PSA_WANT_ALG_CCM || PSA_WANT_ALG_GCM diff --git a/platform/security/sl_component/sl_psa_driver/src/sli_cryptoacc_transparent_driver_key_derivation.c b/platform/security/sl_component/sl_psa_driver/src/sli_cryptoacc_transparent_driver_key_derivation.c index 1e8f9d07d5e..95674273787 100644 --- a/platform/security/sl_component/sl_psa_driver/src/sli_cryptoacc_transparent_driver_key_derivation.c +++ b/platform/security/sl_component/sl_psa_driver/src/sli_cryptoacc_transparent_driver_key_derivation.c @@ -32,6 +32,7 @@ #if defined(CRYPTOACC_PRESENT) +#include "sli_psa_driver_common.h" // sli_psa_zeroize #include "sli_cryptoacc_transparent_types.h" #include "sli_cryptoacc_transparent_functions.h" #include "cryptoacc_management.h" @@ -173,7 +174,7 @@ psa_status_t sli_cryptoacc_transparent_key_agreement(psa_algorithm_t alg, } memcpy(output, tmp_output_buf, PSA_BITS_TO_BYTES(key_bits)); - memset(tmp_output_buf, 0, sizeof(tmp_output_buf)); + sli_psa_zeroize(tmp_output_buf, sizeof(tmp_output_buf)); *output_length = PSA_BITS_TO_BYTES(key_bits); return PSA_SUCCESS; diff --git a/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_key_derivation.c b/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_key_derivation.c index 330e9cb628e..f1980bdc486 100644 --- a/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_key_derivation.c +++ b/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_key_derivation.c @@ -32,19 +32,20 @@ #if defined(SEMAILBOX_PRESENT) -#include - -#include "psa/crypto.h" +#include "sli_psa_driver_common.h" // sli_psa_zeroize() #include "sli_se_opaque_functions.h" #include "sli_se_driver_key_management.h" #include "sli_se_driver_key_derivation.h" #include "sli_se_version_dependencies.h" +#include "psa/crypto.h" #include "sl_se_manager.h" #include "sl_se_manager_key_derivation.h" #include "sl_se_manager_util.h" #include "sli_se_manager_internal.h" +#include + // ----------------------------------------------------------------------------- // Function Definitions @@ -557,14 +558,14 @@ psa_status_t sli_se_driver_key_agreement(psa_algorithm_t alg, sli_se_unpad_curve_point(tmp_output_buf, tmp_output_buf, PSA_BITS_TO_BYTES(key_bits)); - memset(tmp_priv_padded_buf, 0, sizeof(tmp_priv_padded_buf)); + sli_psa_zeroize(tmp_priv_padded_buf, sizeof(tmp_priv_padded_buf)); } #endif // VAULT padding // Montgomery curve computations do not require the temporary buffer to store the y-coord. if (key_type == PSA_KEY_TYPE_ECC_KEY_PAIR(PSA_ECC_FAMILY_SECP_R1)) { memcpy(output, tmp_output_buf, PSA_BITS_TO_BYTES(key_bits)); - memset(tmp_output_buf, 0, sizeof(tmp_output_buf)); + sli_psa_zeroize(tmp_output_buf, sizeof(tmp_output_buf)); } *output_length = PSA_BITS_TO_BYTES(key_bits); diff --git a/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_key_management.c b/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_key_management.c index 9e8c43b5ea3..1d70549cdf0 100644 --- a/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_key_management.c +++ b/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_key_management.c @@ -37,7 +37,7 @@ #include "psa/crypto.h" #include "sli_se_opaque_types.h" #include "sli_se_driver_key_management.h" -#include "sli_psa_driver_common.h" +#include "sli_psa_driver_common.h" // sli_psa_zeroize() #include "sli_se_version_dependencies.h" #include "sl_se_manager_key_derivation.h" @@ -947,7 +947,7 @@ psa_status_t sli_se_opaque_import_key(const psa_key_attributes_t *attributes, } exit: #if defined(SLI_SE_KEY_PADDING_REQUIRED) - memset(temp_buffer, 0, sizeof(temp_buffer)); + sli_psa_zeroize(temp_buffer, sizeof(temp_buffer)); #endif return psa_status; } diff --git a/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_mac.c b/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_mac.c index d715d6082ba..3123cb50d28 100644 --- a/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_mac.c +++ b/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_mac.c @@ -32,6 +32,7 @@ #if defined(SEMAILBOX_PRESENT) +#include "sli_psa_driver_common.h" // sli_psa_zeroize() #include "psa/crypto.h" #include "mbedtls/platform.h" @@ -139,11 +140,12 @@ psa_status_t sli_se_driver_mac_compute(sl_se_key_descriptor_t *key_desc, uint8_t *temp_key_buf = NULL; uint32_t key_buffer_size = key_desc->storage.location.buffer.size; size_t padding = sli_se_get_padding(key_buffer_size); + size_t word_aligned_buffer_size = 0; if (padding > 0u) { // We can only manipulate the transparent keys. if (key_desc->storage.method == SL_SE_KEY_STORAGE_EXTERNAL_PLAINTEXT) { - size_t word_aligned_buffer_size + word_aligned_buffer_size = sli_se_word_align(key_desc->storage.location.buffer.size); temp_key_buf = mbedtls_calloc(1, word_aligned_buffer_size); if (temp_key_buf == NULL) { @@ -171,6 +173,7 @@ psa_status_t sli_se_driver_mac_compute(sl_se_key_descriptor_t *key_desc, #if defined(SLI_SE_KEY_PADDING_REQUIRED) if (padding > 0u) { + sli_psa_zeroize(temp_key_buf, word_aligned_buffer_size); mbedtls_free(temp_key_buf); } #endif // SLI_SE_KEY_PADDING_REQUIRED @@ -182,7 +185,7 @@ psa_status_t sli_se_driver_mac_compute(sl_se_key_descriptor_t *key_desc, *mac_length = 0; } - memset(tmp_hmac, 0, sizeof(tmp_hmac)); + sli_psa_zeroize(tmp_hmac, sizeof(tmp_hmac)); goto exit; } diff --git a/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_signature.c b/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_signature.c index e90c9d98c1f..c5ca3ce33e7 100644 --- a/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_signature.c +++ b/platform/security/sl_component/sl_psa_driver/src/sli_se_driver_signature.c @@ -32,6 +32,7 @@ #if defined(SEMAILBOX_PRESENT) +#include "sli_psa_driver_common.h" // sli_psa_zeroize() #include "psa/crypto.h" #include "sli_se_transparent_types.h" #include "sli_se_transparent_functions.h" @@ -320,7 +321,7 @@ psa_status_t sli_se_sign_message(const psa_key_attributes_t *attributes, && defined(PSA_WANT_ALG_ECDSA) && defined(PSA_WANT_ECC_SECP_R1_521) \ && defined(SLI_SE_KEY_PADDING_REQUIRED) if (offset > 0) { - memset(temp_key_buf, 0, sizeof(temp_key_buf)); + sli_psa_zeroize(temp_key_buf, sizeof(temp_key_buf)); // Copy over from temp signature sli_se_unpad_curve_point(temp_signature_buffer, signature, key_size); } @@ -838,7 +839,7 @@ psa_status_t sli_se_sign_hash(const psa_key_attributes_t *attributes, #if (_SILICON_LABS_SECURITY_FEATURE == _SILICON_LABS_SECURITY_FEATURE_VAULT) \ && defined(PSA_WANT_ECC_SECP_R1_521) && defined(SLI_SE_KEY_PADDING_REQUIRED) if (offset > 0) { - memset(temp_key_buf, 0, sizeof(temp_key_buf)); + sli_psa_zeroize(temp_key_buf, sizeof(temp_key_buf)); // Copy over from temp signature sli_se_unpad_curve_point(temp_signature_buffer, signature, key_size); } diff --git a/platform/security/sl_component/sl_trustzone/config/template/sli_tz_funcs_sids_autogen.h.jinja b/platform/security/sl_component/sl_trustzone/config/template/sli_tz_funcs_sids_autogen.h.jinja index c5bf0cfdd58..f804a90f1ac 100644 --- a/platform/security/sl_component/sl_trustzone/config/template/sli_tz_funcs_sids_autogen.h.jinja +++ b/platform/security/sl_component/sl_trustzone/config/template/sli_tz_funcs_sids_autogen.h.jinja @@ -1,22 +1,16 @@ +// This is an autogenerated file, any changes to this file will be overwritten. + #ifndef SLI_TZ_FUNCS_SIDS_AUTOGEN_H #define SLI_TZ_FUNCS_SIDS_AUTOGEN_H -#ifdef __cplusplus -extern "C" { -#endif - //------------------------------------------------------------------------------ // Service function identifiers -/** - * \brief Define a progressive numerical value for each SID which can be used - * when dispatching the requests to the service - */ +// Define progressive numerical values for the secure function IDs (SID) that +// are used when dispatching requests from the non-secure world to tje . - /** - * \brief nvm3 service identifiers - */ - enum { +// NVM3 service +enum { {% for m in tz_nvm3_sid_func_mapping_default|unique -%} {{ m.sid }}, {% endfor %} @@ -26,10 +20,7 @@ extern "C" { SLI_TZ_SERVICE_NVM3_MAX_SID, }; - /** - * \brief se manager service identifiers - */ - +// SE Manager service enum { {% for m in tz_se_manager_mapping|unique -%} {{ m.sid }}, @@ -37,10 +28,7 @@ enum { SLI_TZ_SERVICE_SE_MANAGER_MAX_SID, }; - /** - * \brief attestation service identifiers - */ - +// Attestation service enum { {% for m in tz_attestation_mapping|unique -%} {{ m.sid }}, @@ -48,10 +36,8 @@ enum { SLI_TZ_SERVICE_ATTESTATION_MAX_SID, }; - /** - * \brief its service identifiers - */ +// ITS service enum { {% for m in tz_its_sid_func_mapping|unique -%} {{ m.sid }}, @@ -59,20 +45,8 @@ enum { SLI_TZ_SERVICE_ITS_MAX_SID, }; - /** - * \brief msc service identifiers - */ -enum { -{% for m in tz_msc_sid_func_mapping|unique -%} - {{ m.sid }}, -{% endfor %} - SLI_TZ_SERVICE_MSC_MAX_SID, -}; - - /** - * \brief crypto service identifiers - */ +// Crypto service enum { TFM_CRYPTO_SID_MIN = -1, {% for fp in tfm_interface_func|unique -%} @@ -81,6 +55,7 @@ enum { TFM_CRYPTO_SID_MAX, }; +// Simple services without a function parameter enum { {% for m in simple_func_mapping_no_args|unique -%} {{ m|upper }}_SID, @@ -88,14 +63,12 @@ enum { SLI_TZ_SIMPLE_NO_ARGS_MAX_SID, }; +// Simple services with a function parameter enum { {% for m in simple_func_mapping_with_args|unique -%} {{ m|upper }}_SID, {% endfor %} SLI_TZ_SIMPLE_MAX_SID, }; -#ifdef __cplusplus -} -#endif -#endif /* SLI_TZ_FUNCS_SIDS_AUTOGEN_H */ +#endif // SLI_TZ_FUNCS_SIDS_AUTOGEN_H diff --git a/platform/security/sl_component/sl_trustzone/config/template/sli_tz_s_interface_funcs_autogen.h.jinja b/platform/security/sl_component/sl_trustzone/config/template/sli_tz_s_interface_funcs_autogen.h.jinja index b790fc3f6c7..69cd51384dd 100644 --- a/platform/security/sl_component/sl_trustzone/config/template/sli_tz_s_interface_funcs_autogen.h.jinja +++ b/platform/security/sl_component/sl_trustzone/config/template/sli_tz_s_interface_funcs_autogen.h.jinja @@ -1,10 +1,8 @@ +// This is an autogenerated file, any changes to this file will be overwritten. + #ifndef SLI_TZ_S_INTERFACE_FUNCS_AUTOGEN_H #define SLI_TZ_S_INTERFACE_FUNCS_AUTOGEN_H -#ifdef __cplusplus -extern "C" { -#endif - //------------------------------------------------------------------------------ // Local typedefs @@ -14,11 +12,10 @@ typedef int32_t (*iovec_fn) (psa_invec *in_vec, psa_outvec *out_vec, size_t out_len); - -//Function pointer conforming to syscfg simple function signature. +// Function pointer conforming to syscfg simple function signature. typedef uint32_t (*sli_tz_simple_fn) (uint32_t arg); -//Function pointer conforming to syscfg simple function signature with no args. +// Function pointer conforming to syscfg simple function signature with no args. typedef uint32_t (*sli_tz_simple_fn_no_args) (void); //------------------------------------------------------------------------------ @@ -32,16 +29,7 @@ static const iovec_fn crypto_function_table[] = { }; #endif // TZ_SERVICE_PSA_CRYPTO_PRESENT -#if defined(TZ_SERVICE_MSC_PRESENT) -static const iovec_fn msc_function_table[] = { -{% for msc_m in tz_msc_sid_func_mapping|unique -%} - (iovec_fn){{ msc_m.func }}, -{% endfor %} -}; -#endif // TZ_SERVICE_MSC_PRESENT - -#if defined(TZ_SERVICE_PSA_ITS_PRESENT) \ - || defined(TZ_SERVICE_NVM3_PRESENT) +#if defined(TZ_SERVICE_PSA_ITS_PRESENT) || defined(TZ_SERVICE_NVM3_PRESENT) static const iovec_fn nvm3_function_table[] = { {% for m in tz_nvm3_sid_func_mapping_default|unique -%} (iovec_fn){{ m.func }}, @@ -50,7 +38,7 @@ static const iovec_fn nvm3_function_table[] = { (iovec_fn){{ m.func }}, {% endfor %} }; -#endif +#endif // TZ_SERVICE_PSA_ITS_PRESENT || TZ_SERVICE_NVM3_PRESENT #if defined(TZ_SERVICE_PSA_ITS_PRESENT) static const iovec_fn its_function_table[] = { @@ -76,8 +64,7 @@ static const iovec_fn attestation_function_table[] = { }; #endif // TZ_SERVICE_ATTESTATION_PRESENT -#if defined(TZ_SERVICE_SYSCFG_PRESENT) \ - || defined(TZ_SERVICE_MSC_PRESENT) +#if defined(TZ_SERVICE_SYSCFG_PRESENT) || defined(TZ_SERVICE_MSC_PRESENT) static const sli_tz_simple_fn simple_function_table[] = { {% for m in simple_func_mapping_with_args|unique -%} (sli_tz_simple_fn){{ m }}, @@ -89,10 +76,6 @@ static const sli_tz_simple_fn_no_args simple_function_table_no_args[] = { (sli_tz_simple_fn_no_args){{ m }}, {% endfor %} }; -#endif //TZ_SERVICE_SYSCFG_PRESENT || TZ_SERVICE_MSC_PRESENT - -#ifdef __cplusplus -} -#endif +#endif // TZ_SERVICE_SYSCFG_PRESENT || TZ_SERVICE_MSC_PRESENT #endif // SLI_TZ_S_INTERFACE_FUNCS_AUTOGEN_H diff --git a/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_iovec.h b/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_iovec.h index ebd7193646a..02cad8b6928 100644 --- a/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_iovec.h +++ b/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_iovec.h @@ -31,11 +31,24 @@ #ifndef __SLI_TZ_IOVEC_H__ #define __SLI_TZ_IOVEC_H__ -#include "psa/crypto.h" +#include // size_t + #ifdef __cplusplus extern "C" { #endif +/** + * \brief Maximum number of input and output vectors for a call from NS to S. + */ +#define SLI_TZ_MAX_IOVEC (6u) + +/** + * \brief Number of elements in array. + */ +#if !defined(IOVEC_LEN) + #define IOVEC_LEN(arr) ((uint32_t)(sizeof(arr) / sizeof(arr[0]))) +#endif + /** * A read-only input memory region provided to an RoT Service. */ diff --git a/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_service_msc.h b/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_service_msc.h index 5fe70b3eb96..6833043af1f 100644 --- a/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_service_msc.h +++ b/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_service_msc.h @@ -31,14 +31,13 @@ #ifndef __SLI_TZ_MSC_VENEERS_H__ #define __SLI_TZ_MSC_VENEERS_H__ -#include -#include - +#include "sli_tz_iovec.h" #include "sli_tz_util.h" -#include "psa/crypto_types.h" -#include "psa/client.h" #include "sli_tz_funcs_sids_autogen.h" +#include +#include + #ifdef __cplusplus extern "C" { #endif @@ -66,25 +65,6 @@ uint32_t sli_tz_msc_get_misclockword(void); uint32_t sli_tz_msc_set_misclockword(uint32_t value); -uint32_t sli_tz_msc_init(void); - -uint32_t sli_tz_msc_deinit(void); - -uint32_t sli_tz_msc_erase_page(uint32_t startAddress); - -//------------------------------------- -// Full services (IOVEC usage) - -int32_t sli_tz_msc_write_word(sli_tz_invec in_vec[], - size_t in_len, - sli_tz_outvec out_vec[], - size_t out_len); - -int32_t sli_tz_msc_write_word_dma(sli_tz_invec in_vec[], - size_t in_len, - sli_tz_outvec out_vec[], - size_t out_len); - #ifdef __cplusplus } #endif diff --git a/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_service_nvm3.h b/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_service_nvm3.h index 66caf000f51..76ede3ff28f 100644 --- a/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_service_nvm3.h +++ b/platform/security/sl_component/sl_trustzone/inc/common/sli_tz_service_nvm3.h @@ -47,6 +47,16 @@ extern "C" { #include "sl_component_catalog.h" #endif +//------------------------------------------------------------------------------ +// Defines and macros + +#define SLI_TZ_SERVICE_NVM3_MAX_INSTANCES (5) +#define SLI_TZ_SERVICE_NVM3_NON_DEFAULT_INSTANCE_CACHE_START_INDEX (1) +#define SLI_TZ_SERVICE_NVM3_DEFAULT_HANDLE_MAGIC (0xBADC0C0A) + +#define SLI_TZ_SERVICE_NVM3_HANDLE_IS_DEFAULT(handle) \ + (handle->nvmAdr == (nvm3_HalPtr_t)SLI_TZ_SERVICE_NVM3_DEFAULT_HANDLE_MAGIC) + //------------------------------------------------------------------------------ // Function declarations diff --git a/platform/security/sl_component/sl_trustzone/inc/nonsecure/sli_tz_ns_interface.h b/platform/security/sl_component/sl_trustzone/inc/nonsecure/sli_tz_ns_interface.h index dfaed5d98e3..38cd3d0f53c 100644 --- a/platform/security/sl_component/sl_trustzone/inc/nonsecure/sli_tz_ns_interface.h +++ b/platform/security/sl_component/sl_trustzone/inc/nonsecure/sli_tz_ns_interface.h @@ -31,10 +31,9 @@ #ifndef __SLI_TZ_NS_INTERFACE_H__ #define __SLI_TZ_NS_INTERFACE_H__ -#include -#include "psa/crypto_types.h" -#include "psa/client.h" +#include "sli_tz_iovec.h" #include "sl_status.h" +#include #ifdef __cplusplus extern "C" { @@ -43,8 +42,8 @@ extern "C" { //------------------------------------------------------------------------------ // Typedefs -typedef int32_t (*sli_tz_veneer_fn) (psa_invec *in_vec, size_t in_len, - psa_outvec *out_vec, size_t out_len); +typedef int32_t (*sli_tz_veneer_fn) (sli_tz_invec *in_vec, size_t in_len, + sli_tz_outvec *out_vec, size_t out_len); typedef uint32_t (*sli_tz_veneer_simple_fn) (uint32_t sid, uint32_t arg); diff --git a/platform/security/sl_component/sl_trustzone/inc/secure/sli_tz_iovec_check.h b/platform/security/sl_component/sl_trustzone/inc/secure/sli_tz_iovec_check.h index 26b936f85cb..7af5e4f13bc 100644 --- a/platform/security/sl_component/sl_trustzone/inc/secure/sli_tz_iovec_check.h +++ b/platform/security/sl_component/sl_trustzone/inc/secure/sli_tz_iovec_check.h @@ -31,9 +31,13 @@ #ifndef __SLI_TZ_IOVEC_CHECK_H__ #define __SLI_TZ_IOVEC_CHECK_H__ -#include "psa/crypto.h" -#include "psa/client.h" +#include "sli_tz_iovec.h" #include "sl_assert.h" +#include + +#if defined(TZ_SERVICE_PSA_ITS_PRESENT) || defined(TZ_SERVICE_NVM3_PRESENT) +#include "nvm3.h" +#endif #ifdef __cplusplus extern "C" { @@ -66,25 +70,47 @@ extern "C" { // Structure used for temporarily copying iovec parameters from NS client. typedef struct { - psa_invec in_vec[PSA_MAX_IOVEC]; - psa_outvec out_vec[PSA_MAX_IOVEC]; + sli_tz_invec in_vec[SLI_TZ_MAX_IOVEC]; + sli_tz_outvec out_vec[SLI_TZ_MAX_IOVEC]; } sli_tz_iovec_params_t; //------------------------------------------------------------------------------ // Function declarations /** - * \brief Check whether the iovec parameters live in a NonSecure region. + * \brief Check whether the iovec parameters live in a non-secure region. * * \return Return /ref SLI_TZ_IOVEC_OK if all the iovec parameters live in a * NonSecure region, otherwise /ref SLI_TZ_IOVEC_ERROR. */ -uint32_t sli_tz_iovecs_live_in_ns(psa_invec in_vec[], +uint32_t sli_tz_iovecs_live_in_ns(sli_tz_invec in_vec[], size_t in_len, - psa_outvec out_vec[], + sli_tz_outvec out_vec[], size_t out_len, sli_tz_iovec_params_t *iovec_copy); +#if defined(TZ_SERVICE_PSA_ITS_PRESENT) || defined(TZ_SERVICE_NVM3_PRESENT) + +/** + * \brief Check that all pointers passed through nvm3_Init_t structs point to + * non-secure memory regions. + * + * \return Return /ref SLI_TZ_IOVEC_OK if all the iovec parameters live in a + * NonSecure region, otherwise /ref SLI_TZ_IOVEC_ERROR. + */ +uint32_t sli_tz_nvm3_init_struct_points_to_ns(nvm3_Init_t *init_copy); + +/** + * \brief Check that all pointers passed through nvm3_Handle_t structs point to + * non-secure memory regions. + * + * \return Return /ref SLI_TZ_IOVEC_OK if all the iovec parameters live in a + * NonSecure region, otherwise /ref SLI_TZ_IOVEC_ERROR. + */ +uint32_t sli_tz_nvm3_handle_struct_points_to_ns(nvm3_Handle_t *handle_copy); + +#endif // TZ_SERVICE_PSA_ITS_PRESENT || TZ_SERVICE_NVM3_PRESENT + #ifdef __cplusplus } #endif diff --git a/platform/security/sl_component/sl_trustzone/src/sli_tz_iovec_check.c b/platform/security/sl_component/sl_trustzone/src/sli_tz_iovec_check.c index 4ac4b732136..296c0b27ed4 100644 --- a/platform/security/sl_component/sl_trustzone/src/sli_tz_iovec_check.c +++ b/platform/security/sl_component/sl_trustzone/src/sli_tz_iovec_check.c @@ -30,6 +30,17 @@ #include "sli_tz_iovec_check.h" +#if defined(TZ_SERVICE_CONFIG_PRESENT) + #include "tz_service_config_autogen.h" +#endif + +#if defined(TZ_SERVICE_PSA_ITS_PRESENT) || defined(TZ_SERVICE_NVM3_PRESENT) + #include "nvm3.h" + #include "sli_tz_service_nvm3.h" +#endif + +#include "sl_assert.h" + #include #include #include @@ -52,15 +63,15 @@ static inline bool object_lives_in_ns(const void *object, size_t object_size) //------------------------------------------------------------------------------ // Global functions -uint32_t sli_tz_iovecs_live_in_ns(psa_invec in_vec[], +uint32_t sli_tz_iovecs_live_in_ns(sli_tz_invec in_vec[], size_t in_len, - psa_outvec out_vec[], + sli_tz_outvec out_vec[], size_t out_len, sli_tz_iovec_params_t *iovec_copy) { // We can only handle a limited amount of iovecs per secure function call. - if ((in_len > PSA_MAX_IOVEC) - || (out_len > PSA_MAX_IOVEC)) { + if ((in_len > SLI_TZ_MAX_IOVEC) + || (out_len > SLI_TZ_MAX_IOVEC)) { return SLI_TZ_IOVEC_ERROR; } @@ -68,7 +79,7 @@ uint32_t sli_tz_iovecs_live_in_ns(psa_invec in_vec[], // structures themselves. if (in_len > 0) { if ((in_vec == NULL) - || (!object_lives_in_ns(in_vec, sizeof(psa_invec) * in_len))) { + || (!object_lives_in_ns(in_vec, sizeof(sli_tz_invec) * in_len))) { return SLI_TZ_IOVEC_ERROR; } } else { @@ -78,7 +89,7 @@ uint32_t sli_tz_iovecs_live_in_ns(psa_invec in_vec[], } if (out_len > 0) { if ((out_vec == NULL) - || (!object_lives_in_ns(out_vec, sizeof(psa_outvec) * out_len))) { + || (!object_lives_in_ns(out_vec, sizeof(sli_tz_outvec) * out_len))) { return SLI_TZ_IOVEC_ERROR; } } else { @@ -119,3 +130,68 @@ uint32_t sli_tz_iovecs_live_in_ns(psa_invec in_vec[], return SLI_TZ_IOVEC_OK; } + +//-------------------------------------- +// Service-specific nested pointer checks + +#if defined(TZ_SERVICE_PSA_ITS_PRESENT) || defined(TZ_SERVICE_NVM3_PRESENT) + +uint32_t sli_tz_nvm3_init_struct_points_to_ns(nvm3_Init_t *init_copy) +{ + #if !defined(SLI_TZ_SERVICE_NVM3_DISABLE_REGION_VALIDATION) + if (!object_lives_in_ns(init_copy->nvmAdr, init_copy->nvmSize)) { + return SLI_TZ_IOVEC_ERROR; + } + #endif + + // The flash handle- and cache pointers must explicitly be set to NULL by NS + // to make it clear that it allow the secure application to manage these + // aspects of NVM3. We don't want to make the NS side believe it can provide + // its own pointers for these parameters. + EFM_ASSERT(init_copy->cachePtr == NULL); + EFM_ASSERT(init_copy->halHandle == NULL); + + return SLI_TZ_IOVEC_OK; +} + +uint32_t sli_tz_nvm3_handle_struct_points_to_ns(nvm3_Handle_t *handle_copy) +{ + #if !defined(SLI_TZ_SERVICE_NVM3_DISABLE_REGION_VALIDATION) + if (!object_lives_in_ns(handle_copy->nvmAdr, handle_copy->nvmSize)) { + return SLI_TZ_IOVEC_ERROR; + } + #endif + + // Make sure that the cache pointer passed has indeed been allocated and + // installed by the secure library. + extern nvm3_CacheEntry_t *sli_tz_nvm3_caches[]; + bool cache_pointer_valid = false; + for (size_t i = 0; i < SLI_TZ_SERVICE_NVM3_MAX_INSTANCES; ++i) { + if (sli_tz_nvm3_caches[i] == handle_copy->cache.entryPtr) { + cache_pointer_valid = true; + break; + } + } + if (!cache_pointer_valid) { + return SLI_TZ_IOVEC_ERROR; + } + + #if !defined(SLI_TZ_SERVICE_NVM3_DISABLE_REGION_VALIDATION) + if (!object_lives_in_ns(handle_copy->fifoFirstObj, sizeof(nvm3_Obj_t)) + || !object_lives_in_ns(handle_copy->fifoNextObj, sizeof(nvm3_Obj_t))) { + return SLI_TZ_IOVEC_ERROR; + } + #endif + + // We only allow the use of the flash HAL defined in nvm3_hal_flash.c. The + // pointer to this struct is installed in the handle by the secure app (see + // tfm_nvm3_open / tfm_nvm3_init_default). + extern const nvm3_HalHandle_t nvm3_halFlashHandle; + if (handle_copy->halHandle != &nvm3_halFlashHandle) { + return SLI_TZ_IOVEC_ERROR; + } + + return SLI_TZ_IOVEC_OK; +} + +#endif // TZ_SERVICE_PSA_ITS_PRESENT || TZ_SERVICE_NVM3_PRESENT diff --git a/platform/security/sl_component/sl_trustzone/src/sli_tz_ns_interface.c b/platform/security/sl_component/sl_trustzone/src/sli_tz_ns_interface.c index 9db8ad90e2c..e7abdcaff58 100644 --- a/platform/security/sl_component/sl_trustzone/src/sli_tz_ns_interface.c +++ b/platform/security/sl_component/sl_trustzone/src/sli_tz_ns_interface.c @@ -108,7 +108,7 @@ int32_t sli_tz_ns_interface_dispatch(sli_tz_veneer_fn fn, } #endif // RTOS_KERNEL_PRESENT - int32_t result = fn((psa_invec *)arg0, arg1, (psa_outvec *)arg2, arg3); + int32_t result = fn((sli_tz_invec *)arg0, arg1, (sli_tz_outvec *)arg2, arg3); #if defined(RTOS_KERNEL_PRESENT) if (osKernelGetState() == osKernelRunning) { diff --git a/platform/security/sl_component/sl_trustzone/src/sli_tz_s_interface.c b/platform/security/sl_component/sl_trustzone/src/sli_tz_s_interface.c index 9c35cc175e8..001e697d269 100644 --- a/platform/security/sl_component/sl_trustzone/src/sli_tz_s_interface.c +++ b/platform/security/sl_component/sl_trustzone/src/sli_tz_s_interface.c @@ -28,6 +28,8 @@ * ******************************************************************************/ +#include + #if defined(TZ_SERVICE_CONFIG_PRESENT) #include "tz_service_config_autogen.h" #endif @@ -41,28 +43,56 @@ #include "psa/client.h" #if defined(TZ_SERVICE_PSA_CRYPTO_PRESENT) -#include "sli_tz_service_psa_crypto.h" -#endif // TZ_SERVICE_PSA_CRYPTO_PRESENT + #include "sli_tz_service_psa_crypto.h" +#endif #include "sli_tz_service_syscfg.h" #if defined(TZ_SERVICE_NVM3_PRESENT) || defined(TZ_SERVICE_PSA_ITS_PRESENT) #include "sli_tz_service_nvm3.h" -#endif // TZ_SERVICE_NVM3_PRESENT || TZ_SERVICE_PSA_ITS_PRESENT + #include "nvm3.h" +#endif #if defined(TZ_SERVICE_MSC_PRESENT) #include "sli_tz_service_msc.h" - #include "em_msc.h" -#endif // TZ_SERVICE_MSC_PRESENT +#endif #if defined(TZ_SERVICE_PSA_ITS_PRESENT) #include "sli_tz_service_its.h" -#endif // TZ_SERVICE_PSA_ITS_PRESENT +#endif #if defined(TZ_SERVICE_SE_MANAGER_PRESENT) #include "sli_tz_service_se_manager.h" -#endif // TZ_SERVICE_SE_MANAGER_PRESENT + #include "sl_se_manager_types.h" +#endif #if defined(TZ_SERVICE_ATTESTATION_PRESENT) #include "sli_tz_service_attestation.h" -#endif // TZ_SERVICE_ATTESTATION_PRESENT +#endif #include "sli_tz_s_interface_funcs_autogen.h" +//------------------------------------------------------------------------------ +// Macros + +#if defined(TZ_SERVICE_NVM3_PRESENT) + + #define NVM3_FUNCTION_HAS_INIT_STRUCT_PARAM(function_id) \ + (function_id == SLI_TZ_SERVICE_NVM3_INITDEFAULT_SID \ + || function_id == SLI_TZ_SERVICE_NVM3_OPEN_SID) + +// Only applies to input parameters. + #define NVM3_FUNCTION_HAS_HANDLE_STRUCT_PARAM(function_id) \ + !(function_id == SLI_TZ_SERVICE_NVM3_INITDEFAULT_SID \ + || function_id == SLI_TZ_SERVICE_NVM3_DEINITDEFAULT_SID \ + || function_id == SLI_TZ_SERVICE_NVM3_OPEN_SID \ + || function_id == SLI_TZ_SERVICE_NVM3_SETERASECOUNT_SID) + +#elif defined(TZ_SERVICE_PSA_ITS_PRESENT) + + #define NVM3_FUNCTION_HAS_INIT_STRUCT_PARAM(function_id) \ + (function_id == SLI_TZ_SERVICE_NVM3_INITDEFAULT_SID) + + #define NVM3_FUNCTION_HAS_HANDLE_STRUCT_PARAM(function_id) \ + !(function_id == SLI_TZ_SERVICE_NVM3_INITDEFAULT_SID \ + || function_id == SLI_TZ_SERVICE_NVM3_DEINITDEFAULT_SID) + +#endif // TZ_SERVICE_NVM3_PRESENT + //------------------------------------------------------------------------------ // Global secure dispatch functions @@ -105,59 +135,7 @@ int32_t sli_tz_s_interface_dispatch_crypto(psa_invec in_vec[], } #endif // TZ_SERVICE_PSA_CRYPTO_PRESENT -#if defined(TZ_SERVICE_SYSCFG_PRESENT) \ - || defined(TZ_SERVICE_MSC_PRESENT) -int32_t sli_tz_s_interface_dispatch_simple(uint32_t sid, - uint32_t arg) -{ - EFM_ASSERT(sizeof(simple_function_table) / sizeof(simple_function_table[0]) - == SLI_TZ_SIMPLE_MAX_SID); - EFM_ASSERT(sid < SLI_TZ_SIMPLE_MAX_SID); - return simple_function_table[sid](arg); -} - -int32_t sli_tz_s_interface_dispatch_simple_no_args(uint32_t sid) -{ - EFM_ASSERT(sizeof(simple_function_table_no_args) / sizeof(simple_function_table_no_args[0]) - == SLI_TZ_SIMPLE_NO_ARGS_MAX_SID); - EFM_ASSERT(sid < SLI_TZ_SIMPLE_NO_ARGS_MAX_SID); - return simple_function_table_no_args[sid](); -} - -#endif //TZ_SERVICE_SYSCFG_PRESENT || TZ_SERVICE_MSC_PRESENT - -#if defined(TZ_SERVICE_MSC_PRESENT) -int32_t sli_tz_s_interface_dispatch_msc(sli_tz_invec in_vec[], - size_t in_len, - sli_tz_outvec out_vec[], - size_t out_len) -{ - EFM_ASSERT(sizeof(msc_function_table) / sizeof(msc_function_table[0]) - == SLI_TZ_SERVICE_MSC_MAX_SID); - sli_tz_iovec_params_t iovec_copy = { 0 }; - - uint32_t status = sli_tz_iovecs_live_in_ns(in_vec, - in_len, - out_vec, - out_len, - &iovec_copy); - if (status != SLI_TZ_IOVEC_OK) { - return mscReturnInvalidAddr; - } - - SLI_TZ_IOVEC_ASSERT_STRUCT_SIZE(iovec_copy.in_vec[0], sli_tz_fn_id); - - sli_tz_fn_id function_id = *((sli_tz_fn_id *)iovec_copy.in_vec[0].base); - if (function_id >= SLI_TZ_SERVICE_MSC_MAX_SID) { - return mscReturnInvalidAddr; - } - iovec_fn fn = msc_function_table[function_id]; - - return fn(iovec_copy.in_vec, in_len, iovec_copy.out_vec, out_len); -} -#endif // TZ_SERVICE_MSC_PRESENT -#if defined(TZ_SERVICE_PSA_ITS_PRESENT) \ - || defined(TZ_SERVICE_NVM3_PRESENT) +#if defined(TZ_SERVICE_PSA_ITS_PRESENT) || defined(TZ_SERVICE_NVM3_PRESENT) int32_t sli_tz_s_interface_dispatch_nvm3(sli_tz_invec in_vec[], size_t in_len, sli_tz_outvec out_vec[], @@ -182,11 +160,71 @@ int32_t sli_tz_s_interface_dispatch_nvm3(sli_tz_invec in_vec[], if (function_id >= SLI_TZ_SERVICE_NVM3_MAX_SID) { return PSA_ERROR_INVALID_ARGUMENT; } + + // Check that potential nvm3_Init_t struct doesn't contain illegal pointers. + nvm3_Init_t init_copy = { 0 }; + if (NVM3_FUNCTION_HAS_INIT_STRUCT_PARAM(function_id)) { + // The init struct is passed in in_vec[1] for all functions using it. + SLI_TZ_IOVEC_ASSERT_STRUCT_SIZE(iovec_copy.in_vec[1], nvm3_Init_t); + + // Copy the nvm3_Init_t structure into secure RAM in order to make sure that + // the pointers we're verifying are not modified after we have performed our + // check (TOCTOU). + memcpy(&init_copy, iovec_copy.in_vec[1].base, sizeof(nvm3_Init_t)); + iovec_copy.in_vec[1].base = &init_copy; + + status = sli_tz_nvm3_init_struct_points_to_ns(&init_copy); + if (status != SLI_TZ_IOVEC_OK) { + return PSA_ERROR_INVALID_ARGUMENT; + } + } + + // Check that (potential) nvm3_Handle_t struct doesn't contain illegal pointers. + nvm3_Handle_t handle_copy = { 0 }; + nvm3_Handle_t *passed_handle = (nvm3_Handle_t *)iovec_copy.in_vec[1].base; + if (NVM3_FUNCTION_HAS_HANDLE_STRUCT_PARAM(function_id)) { + // The handle struct is passed in in_vec[1] for all functions using it + // (with the exception of tfm_nvm3_open() since it's used as an output + // there). We don't reach here for that function, though. + SLI_TZ_IOVEC_ASSERT_STRUCT_SIZE(iovec_copy.in_vec[1], nvm3_Handle_t); + + // We don't need to check the values contained in the handle in case it is + // the default instance (since that lives in secure RAM which we know the + // NS app cannot modify). The use of the default instance handler is + // signalled using a magic value in the nvmAdr member of the handle. + if (SLI_TZ_SERVICE_NVM3_HANDLE_IS_DEFAULT(passed_handle)) { + // Replace the dummy handle passed with the actual default handle. + extern nvm3_Handle_t *nvm3_defaultHandle; + iovec_copy.in_vec[1].base = nvm3_defaultHandle; + } else { + // Copy the nvm3_Handle_t structure into secure RAM in order to make sure + // that the pointers we're verifying are not modified after we have + // performed our check (TOCTOU). + memcpy(&handle_copy, iovec_copy.in_vec[1].base, sizeof(nvm3_Handle_t)); + iovec_copy.in_vec[1].base = &handle_copy; + + status = sli_tz_nvm3_handle_struct_points_to_ns(&handle_copy); + if (status != SLI_TZ_IOVEC_OK) { + return PSA_ERROR_INVALID_ARGUMENT; + } + } + } + iovec_fn fn = nvm3_function_table[function_id]; + int32_t ret = fn(iovec_copy.in_vec, in_len, iovec_copy.out_vec, out_len); + + // We need to update the original handle structure with the changes from + // our copy, if used. + if (NVM3_FUNCTION_HAS_HANDLE_STRUCT_PARAM(function_id) + && !SLI_TZ_SERVICE_NVM3_HANDLE_IS_DEFAULT(passed_handle)) { + memcpy((void *)in_vec[1].base, + &handle_copy, + sizeof(nvm3_Handle_t)); + } - return fn(iovec_copy.in_vec, in_len, iovec_copy.out_vec, out_len); + return ret; } -#endif // defined(TZ_SERVICE_PSA_ITS_PRESENT) || defined(TZ_SERVICE_NVM3_PRESENT) +#endif // TZ_SERVICE_PSA_ITS_PRESENT || TZ_SERVICE_NVM3_PRESENT #if defined(TZ_SERVICE_PSA_ITS_PRESENT) int32_t sli_tz_s_interface_dispatch_its(psa_invec in_vec[], @@ -244,8 +282,18 @@ int32_t sli_tz_s_interface_dispatch_se_manager(sli_tz_invec in_vec[], if (function_id >= SLI_TZ_SERVICE_SE_MANAGER_MAX_SID) { return SL_STATUS_INVALID_PARAMETER; } - iovec_fn fn = se_manager_function_table[function_id]; + // The context struct is passed in in_vec[1] for all functions. + SLI_TZ_IOVEC_ASSERT_STRUCT_SIZE(iovec_copy.in_vec[1], + sl_se_command_context_t); + + // Operate on a fresh sl_se_command_context_t structure in secure RAM in order + // to make sure that the pointers we're installing into it are not modified by + // the NS application during execution. + sl_se_command_context_t secure_command_context = SL_SE_COMMAND_CONTEXT_INIT; + iovec_copy.in_vec[1].base = &secure_command_context; + + iovec_fn fn = se_manager_function_table[function_id]; return fn(iovec_copy.in_vec, in_len, iovec_copy.out_vec, out_len); } #endif // TZ_SERVICE_SE_MANAGER_PRESENT @@ -280,3 +328,30 @@ int32_t sli_tz_s_interface_dispatch_attestation(psa_invec in_vec[], return fn(iovec_copy.in_vec, in_len, iovec_copy.out_vec, out_len); } #endif // TZ_SERVICE_ATTESTATION_PRESENT + +#if defined(TZ_SERVICE_SYSCFG_PRESENT) || defined(TZ_SERVICE_MSC_PRESENT) +int32_t sli_tz_s_interface_dispatch_simple(uint32_t sid, + uint32_t arg) +{ + EFM_ASSERT(sizeof(simple_function_table) / sizeof(simple_function_table[0]) + == SLI_TZ_SIMPLE_MAX_SID); + + if (sid >= SLI_TZ_SIMPLE_MAX_SID) { + return PSA_ERROR_INVALID_ARGUMENT; + } + + return simple_function_table[sid](arg); +} + +int32_t sli_tz_s_interface_dispatch_simple_no_args(uint32_t sid) +{ + EFM_ASSERT(sizeof(simple_function_table_no_args) / sizeof(simple_function_table_no_args[0]) + == SLI_TZ_SIMPLE_NO_ARGS_MAX_SID); + + if (sid >= SLI_TZ_SIMPLE_NO_ARGS_MAX_SID) { + return PSA_ERROR_INVALID_ARGUMENT; + } + + return simple_function_table_no_args[sid](); +} +#endif //TZ_SERVICE_SYSCFG_PRESENT || TZ_SERVICE_MSC_PRESENT diff --git a/platform/security/sl_component/sl_trustzone/src/sli_tz_secure_main.c b/platform/security/sl_component/sl_trustzone/src/sli_tz_secure_main.c index ebe9a3f4c8a..49c00989b06 100644 --- a/platform/security/sl_component/sl_trustzone/src/sli_tz_secure_main.c +++ b/platform/security/sl_component/sl_trustzone/src/sli_tz_secure_main.c @@ -42,15 +42,18 @@ #include "sl_se_manager.h" #include "sl_se_manager_util.h" -#if !defined(SEMAILBOX_PRESENT) +#if defined(CRYPTOACC_PRESENT) #include "psa/internal_trusted_storage.h" #include "sli_psa_driver_common.h" + #include "cryptoacc_management.h" #endif #include "tz_secure_memory_autogen.h" #include "sli_se_version_dependencies.h" #include "sl_mpu.h" +#include "fih.h" + // ----------------------------------------------------------------------------- // External symbols @@ -91,9 +94,16 @@ typedef void (*nsfunc)(void) __attribute__((cmse_nonsecure_call)); #define FIRMWARE_START_ADDRESS ((uint32_t)&linker_vectors_begin) -#define INFINITE_LOOP() while (1) {} +// THe FIH panic loop is a FI hardened infinite loop that includes multiple +// branch instructions that loopback in order to make unlooping difficult. +#if defined(TFM_FIH_PROFILE_ON) + #define INFINITE_LOOP() FIH_PANIC +#else + #define INFINITE_LOOP() while (1) {} +#endif // defined(TFM_FIH_PROFILE_ON) -#define AIRCR_UNLOCK_VECTKEY (0x5FAUL) +#define AIRCR_UNLOCK_VECTKEY (0x05FAUL) +#define AIRCR_VECTKEY_STAT (0xFA05UL) // Mark the full range below as NS in SAU, // and let the PPU generate access faults instead. @@ -110,6 +120,21 @@ typedef void (*nsfunc)(void) __attribute__((cmse_nonsecure_call)); // Each page is represented as a bit in the registers. #define NUM_PAGELOCK_REGISTERS (FLASH_SIZE / FLASH_PAGE_SIZE / 32) +#if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) && defined(SLI_PSA_ITS_ENCRYPTED) +// The oldest supported HSE/VSE firmware versions + #if (_SILICON_LABS_32B_SERIES_2_CONFIG >= 3) + #define OLDEST_SUPPORTED_SE_FW_VERSION (0x00020201) // v2.2.1 + #else + #define OLDEST_SUPPORTED_SE_FW_VERSION (0x0001020e) // v1.2.14 + #endif + + #if !defined(SEMAILBOX_PRESENT) + #define ROOT_MAILBOX_SIZE (512UL) + #endif +// Negative iniitalisation value. + #define A_NEGATIVE_VALUE 0xAAAA5555 +#endif // defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) && defined(SLI_PSA_ITS_ENCRYPTED) + #if defined (__ICCARM__) #define BUILTIN_UNREACHABLE() #elif defined (__GNUC__) @@ -119,33 +144,55 @@ typedef void (*nsfunc)(void) __attribute__((cmse_nonsecure_call)); // ----------------------------------------------------------------------------- // Static function declarations -static bool bootloader_present(void); -static inline void configure_sau(void); -static inline void configure_smu(void); -static inline void smu_configure_peripherals(void); -static inline void smu_configure_bus_masters(void); -static inline void smu_enable_security_fault_interrupts(void); -static inline void configure_interrupt_target_states(void); -static inline void prioritise_secure_exceptions(void); -static inline void enable_fault_exceptions(void); -static inline void enable_ns_fpu(void); -static inline void enable_page_locks(void); -static inline void start_ns_app(void); +static inline bool bootloader_present(void); +#if defined(TFM_FIH_PROFILE_ON) && defined(FIH_ENABLE_DELAY) +static inline void configure_sau_smu_for_fih_delay(void); +#endif +static inline void configure_smu_peripherals(void); +static inline void configure_smu_bus_masters(void); +static inline void enable_smu_security_fault_interrupts(void); + +// Force all FIH instrumented functions to be called explicitly, +// that is, apply the noinline attribute to instruct the compiler. +// The reason is that FIH instrumentation consumes a huge portion +// of stack, and if all functions are inlined the stack frame of +// the secure main() function will become bigger than 3KBytes which +// is the total configured stack size causing stack overflow. +// By forcing the compiler to generate explicit funciton calls, each +// call will generate a new small stack frame which lives only until +// the function returns. +static fih_int __attribute__ ((noinline)) configure_sau(void); +static fih_int __attribute__ ((noinline)) configure_sau_region(uint32_t rnr, uint32_t rbar, uint32_t rlar); +static fih_int __attribute__ ((noinline)) configure_smu(void); +static fih_int __attribute__ ((noinline)) configure_interrupt_target_states(void); +static fih_int __attribute__ ((noinline)) prioritise_secure_exceptions(void); +static fih_int __attribute__ ((noinline)) enable_fault_exceptions(void); +static fih_int __attribute__ ((noinline)) enable_ns_fpu(void); +static fih_int __attribute__ ((noinline)) enable_page_locks(void); +__WEAK void start_ns_app(void); + #if defined(CRYPTOACC_PRESENT) -static inline void clear_rootdata(void); +static fih_int __attribute__ ((noinline)) clear_rootdata(void); #endif #if (_SILICON_LABS_SECURITY_FEATURE != _SILICON_LABS_SECURITY_FEATURE_VAULT) -static inline void store_otp_configuration(void); -static inline void store_se_otp_version(void); +__WEAK fih_int __attribute__ ((noinline)) store_otp_configuration(void); +static fih_int __attribute__ ((noinline)) store_se_otp_version(void); #endif // (_SILICON_LABS_SECURITY_FEATURE != _SILICON_LABS_SECURITY_FEATURE_VAULT) static inline void fatal_error(void); -static inline void configure_mpu(void); +static fih_int __attribute__ ((noinline)) configure_mpu(void); #if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) && defined(SLI_PSA_ITS_ENCRYPTED) +static fih_int __attribute__ ((noinline)) check_se_version(uint32_t se_version); #if defined(SEMAILBOX_PRESENT) -static inline void verify_hse_version(void); +static fih_int __attribute__ ((noinline)) verify_hse_version(void); #else -static inline void setup_storage_root_key(void); +extern bool rootIsOutputMailboxValid(void); +static fih_int __attribute__ ((noinline)) vse_is_mailbox_valid(void); +static fih_int __attribute__ ((noinline)) vse_get_reply_ptr(uint32_t **vse_reply_ptr); +static fih_int __attribute__ ((noinline)) vse_get_se_version(const uint32_t *vse_reply_ptr, uint32_t *se_version); +static fih_int __attribute__ ((noinline)) vse_get_reply_status(const uint32_t *vse_reply_ptr, uint32_t *vse_reply_status); +static fih_int __attribute__ ((noinline)) vse_get_data_length(const uint32_t *vse_reply_ptr, uint32_t *vse_data_length); +static fih_int __attribute__ ((noinline)) setup_storage_root_key(void); #endif #endif // defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) && defined(SLI_PSA_ITS_ENCRYPTED) @@ -193,83 +240,122 @@ static volatile uint32_t *const pagelock_registers[] = { #endif }; -// ----------------------------------------------------------------------------- -// Test functions - -#if defined(SLI_TZ_SECURE_MAIN_CONFIG_TEST) -extern void tz_secure_main_config_test(void); -#if defined(CRYPTOACC_PRESENT) -extern void tz_test_memory_prepare(void); -#endif // CRYPTOACC_PRESENT -#endif - // ----------------------------------------------------------------------------- // Main function int main(void) { - enable_fault_exceptions(); + fih_int fih_rc = FIH_FAILURE; + + #if defined(TFM_FIH_PROFILE_ON) && defined(FIH_ENABLE_DELAY) + configure_sau_smu_for_fih_delay(); + #if defined(CRYPTOACC_PRESENT) + cryptoacc_trng_initialize(); + #endif + #endif + + FIH_CALL(enable_fault_exceptions, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } // Prioritise secure exceptions to avoid NS being able to pre-empt // secure SVC or SecureFault. - prioritise_secure_exceptions(); + FIH_CALL(prioritise_secure_exceptions, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } // Configure interrupt target states before any secure interrupts are enabled. - configure_interrupt_target_states(); + FIH_CALL(configure_interrupt_target_states, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } #if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) && defined(SLI_PSA_ITS_ENCRYPTED) #if defined(SEMAILBOX_PRESENT) - // HSE devices don't need any SRK initialization, since it will be available as an internal - // key. However, we'll still check the SE version to ensure that SRK is supported. - verify_hse_version(); + // HSE devices don't need any SRK initialization, since it will be available + // as an internal key. However, we'll still check the SE version to ensure + // that SRK is supported. + FIH_CALL(verify_hse_version, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } #else // SEMAILBOX_PRESENT // Setup SRK for devices without an HSE. (The SE version is checked as part of this // procedure.) Note that this is done before setting up the SAU/SMU since the root key is // stored in FRCRAM which is not guaranteed to stay Secure after TZ initialization. We // therefore need to initialize and clear the SRK passed from the VSE before setting // anything to Non-Secure. - setup_storage_root_key(); + FIH_CALL(setup_storage_root_key, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } #endif // SEMAILBOX_PRESENT #endif // defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) && defined(SLI_PSA_ITS_ENCRYPTED) #if (_SILICON_LABS_SECURITY_FEATURE != _SILICON_LABS_SECURITY_FEATURE_VAULT) - if (sl_se_init() != SL_STATUS_OK) { + sl_status_t sl_status = sl_se_init(); + if (fih_not_eq(fih_int_encode(sl_status), fih_int_encode(SL_STATUS_OK))) { + fatal_error(); + } + + FIH_CALL(store_se_otp_version, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } + + FIH_CALL(store_otp_configuration, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { fatal_error(); } - store_se_otp_version(); - store_otp_configuration(); #endif #if defined(CRYPTOACC_PRESENT) - #if defined(SLI_TZ_SECURE_MAIN_CONFIG_TEST) - tz_test_memory_prepare(); - #endif // At the startup of the VSE devices, we need to invalidate the // ROOTDATA0 register which is only accessible by S to ensure that NS apps // can't craft a malicious mailbox command. This is a possible scenario since // FRCRAM, which is used as the (virtual) mailbox interface has to be configured as NS. - clear_rootdata(); + FIH_CALL(clear_rootdata, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } #endif // CRYPTOACC_PRESENT // We should configure the SAU as early as possible in order to avoid odd // PPU security faults when accessing peripherals (e.g. CMU) after they have // been reconfigured by the SMU. - configure_sau(); - configure_smu(); - configure_mpu(); + FIH_CALL(configure_sau, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } + FIH_CALL(configure_smu, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } + FIH_CALL(configure_mpu, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } // The NS app should not be able to write to secure flash (including the // bootloader). As an extra layer of protection, we will enable flash page // locks. This also stops the NS app from being able to erase the S code // using the MSC service, which is another benefit. - enable_page_locks(); - - psa_crypto_init(); + FIH_CALL(enable_page_locks, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } - #if defined(SLI_TZ_SECURE_MAIN_CONFIG_TEST) - tz_secure_main_config_test(); - #endif // SLI_TZ_SECURE_MAIN_CONFIG_TEST + volatile psa_status_t psa_status = PSA_ERROR_GENERIC_ERROR; + psa_status = psa_crypto_init(); + if (fih_not_eq(fih_int_encode(psa_status), fih_int_encode(PSA_SUCCESS))) { + fatal_error(); + } - enable_ns_fpu(); + FIH_CALL(enable_ns_fpu, fih_rc); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + } start_ns_app(); @@ -280,13 +366,44 @@ int main(void) // ----------------------------------------------------------------------------- // Static functions -static bool bootloader_present(void) +#if defined(TFM_FIH_PROFILE_ON) +static int32_t __attribute__ ((noinline)) bootloader_table_valid(void) +{ + return bootloader_pointerValid(mainBootloaderTable) ? FIH_TRUE : FIH_FALSE; +} +static int32_t __attribute__ ((noinline)) bootloader_magic_valid(void) +{ + if (mainBootloaderTable->header.type == BOOTLOADER_MAGIC_MAIN) { + return FIH_TRUE; + } else { + return FIH_FALSE; + } +} +#endif + +static inline bool bootloader_present(void) { +#if defined(TFM_FIH_PROFILE_ON) + volatile int32_t rc_1 = bootloader_table_valid(); + volatile int32_t rc_2 = bootloader_table_valid(); + if (rc_1 != rc_2) { + fatal_error(); + } + if (rc_1 == FIH_TRUE) { + rc_1 = bootloader_magic_valid(); + rc_2 = bootloader_magic_valid(); + if (rc_1 != rc_2) { + fatal_error(); + } + return rc_1 == FIH_TRUE ? true : false; + } +#else if (bootloader_pointerValid(mainBootloaderTable)) { if (mainBootloaderTable->header.type == BOOTLOADER_MAGIC_MAIN) { return true; } } +#endif return false; } @@ -299,6 +416,17 @@ static inline void fatal_error(void) INFINITE_LOOP(); #else NVIC_SystemReset(); + #if defined(TFM_FIH_PROFILE_ON) && defined(TFM_FIH_PROFILE_HIGH) + __asm volatile ("b fatal_error"); + __asm volatile ("b fatal_error"); + __asm volatile ("b fatal_error"); + __asm volatile ("b fatal_error"); + __asm volatile ("b fatal_error"); + __asm volatile ("b fatal_error"); + __asm volatile ("b fatal_error"); + __asm volatile ("b fatal_error"); + __asm volatile ("b fatal_error"); + #endif BUILTIN_UNREACHABLE(); #endif } @@ -307,28 +435,56 @@ static inline void fatal_error(void) /**************************************************************************//** * @brief Clear the ROOTDATA0 register *****************************************************************************/ -static inline void clear_rootdata(void) +static fih_int __attribute__ ((noinline)) clear_rootdata(void) { + fih_int fih_rc = FIH_FAILURE; // if fatal_error glitched, return failure + + #if defined(TFM_FIH_PROFILE_ON) && defined(FIH_ENABLE_DELAY) + // CMU is already set to NS during fih_delay initialisation in + // configure_sau_smu_for_fih_delay. + CMU_TypeDef *cmu = CMU_NS; + #else + CMU_TypeDef *cmu = CMU_S; + #endif + #if defined(CMU_CLKEN0_SYSCFG) // Saving the state is not necessary. - CMU_S->CLKEN0_SET = CMU_CLKEN0_SYSCFG; + cmu->CLKEN0_SET = CMU_CLKEN0_SYSCFG; #endif - // We only clear ROOTDATA0, which is used as the input channel. - SYSCFG_S->ROOTDATA0 = _SYSCFG_ROOTDATA0_RESETVALUE; + #define VSE_MB_ADDRESS_INVALIDATED (0xFFFFFFFFUL) + // Set ROOTDATA0 (which is used as the input channel) to an invalid address. + SYSCFG_S->ROOTDATA0 = VSE_MB_ADDRESS_INVALIDATED; + + if (fih_not_eq(fih_int_encode(SYSCFG_S->ROOTDATA0), + fih_int_encode(VSE_MB_ADDRESS_INVALIDATED))) { + fatal_error(); + } else { + fih_rc = FIH_SUCCESS; + } #if defined(CMU_CLKEN0_SYSCFG) - CMU_S->CLKEN0_CLR = CMU_CLKEN0_SYSCFG; + cmu->CLKEN0_CLR = CMU_CLKEN0_SYSCFG; #endif + + FIH_RET(fih_rc); } #endif /**************************************************************************//** * @brief Configure the memory region below the secure main to XN *****************************************************************************/ -static inline void configure_mpu(void) +static fih_int __attribute__ ((noinline)) configure_mpu(void) { - sl_status_t status; + fih_int fih_rc = FIH_FAILURE; // if fatal_error glitched, return failure + volatile sl_status_t status = SL_STATUS_FAIL; +#if defined(SL_CATALOG_GECKO_BOOTLOADER_INTERFACE_PRESENT) + #define FIH_INIT_STEP_CONFIGURE_MPU 2 +#else + #define FIH_INIT_STEP_CONFIGURE_MPU 1 +#endif + FIH_CFI_STEP_INIT(FIH_INIT_STEP_CONFIGURE_MPU); + #if defined(SL_CATALOG_GECKO_BOOTLOADER_INTERFACE_PRESENT) if (bootloader_present()) { // The main bootloader table pointer is valid, assume we have a bootloader. @@ -338,10 +494,14 @@ static inline void configure_mpu(void) status = sl_mpu_disable_execute(FLASH_BASE, FIRMWARE_START_ADDRESS - 1, FIRMWARE_START_ADDRESS - FLASH_BASE); - if (status != SL_STATUS_OK) { + if (fih_not_eq(fih_int_encode(status), fih_int_encode(SL_STATUS_OK))) { fatal_error(); + goto exit; // if fatal_error is glitched } + // Reset status to FAIL in case next call is glitched. + status = SL_STATUS_FAIL; } + FIH_CFI_STEP_DECREMENT(); #endif // SL_CATALOG_GECKO_BOOTLOADER_INTERFACE_PRESENT // Everything after S space is painted XN. Nothing from NS will be executed @@ -349,114 +509,192 @@ static inline void configure_mpu(void) status = sl_mpu_disable_execute(TZ_S_FLASH_END, FLASH_BASE + FLASH_SIZE - 1u, FLASH_BASE + FLASH_SIZE - TZ_S_FLASH_END); - if (status != SL_STATUS_OK) { + if (fih_not_eq(fih_int_encode(status), fih_int_encode(SL_STATUS_OK))) { fatal_error(); + goto exit; // if fatal_error is glitched + } else { + fih_rc = FIH_SUCCESS; + FIH_CFI_STEP_DECREMENT(); } + + FIH_RET(fih_rc); + exit: + FIH_CFI_STEP_ERR_RESET(); + FIH_RET(FIH_FAILURE); } #if (_SILICON_LABS_SECURITY_FEATURE != _SILICON_LABS_SECURITY_FEATURE_VAULT) /**************************************************************************//** * @brief Store the debug state *****************************************************************************/ -static inline void store_otp_configuration(void) +__WEAK fih_int __attribute__ ((noinline)) store_otp_configuration(void) { - #if defined(SLI_TZ_ATTESTATION_TEST) - otp_configuration.enable_secure_boot = true; - otp_initialized = true; - #else + fih_int fih_rc = FIH_FAILURE; // if fatal_error is glitched, return failure sl_se_command_context_t cmd_ctx; sl_status_t status = sl_se_read_otp(&cmd_ctx, &otp_configuration); - if (status != SL_STATUS_OK + if (fih_not_eq(fih_int_encode(status), fih_int_encode(SL_STATUS_OK)) #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_1) - && status != SL_STATUS_COMMAND_IS_INVALID) { + && fih_not_eq(fih_int_encode(status), fih_int_encode(SL_STATUS_COMMAND_IS_INVALID)) #else - && status != SL_STATUS_NOT_INITIALIZED) { + && fih_not_eq(fih_int_encode(status), fih_int_encode(SL_STATUS_NOT_INITIALIZED)) #endif + ) { fatal_error(); + } else { + fih_rc = FIH_SUCCESS; } if (status == SL_STATUS_OK) { otp_initialized = true; } else { otp_initialized = false; } - #endif + + FIH_RET(fih_rc); } /**************************************************************************//** * @brief Store the SE OTP version *****************************************************************************/ -static inline void store_se_otp_version(void) +static fih_int __attribute__ ((noinline)) store_se_otp_version(void) { + fih_int fih_rc = FIH_FAILURE; // if fatal_error is glitched, return failure + sl_se_command_context_t cmd_ctx; sl_status_t status = sl_se_get_otp_version(&cmd_ctx, &otp_version); - if (status != SL_STATUS_OK) { + if (fih_not_eq(fih_int_encode(status), fih_int_encode(SL_STATUS_OK))) { #if defined(CRYPTOACC_PRESENT) otp_version = 0u; + fih_rc = FIH_SUCCESS; #else fatal_error(); #endif + } else { + if (fih_eq(fih_int_encode(otp_version), fih_int_encode(0))) { + fatal_error(); + } else { + fih_rc = FIH_SUCCESS; + } } + + FIH_RET(fih_rc); } #endif // (_SILICON_LABS_SECURITY_FEATURE != _SILICON_LABS_SECURITY_FEATURE_VAULT) +/**************************************************************************//** + * @brief Configure the specified SAU region. + *****************************************************************************/ +static fih_int __attribute__ ((noinline)) configure_sau_region(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + fih_int fih_rc = FIH_FAILURE; // if fatal_error is glitched, return failure + + SAU->RNR = rnr; + SAU->RBAR = rbar; + SAU->RLAR = rlar; + + if (fih_not_eq(fih_int_encode(SAU->RNR), fih_int_encode(rnr)) + || fih_not_eq(fih_int_encode(SAU->RBAR), fih_int_encode(rbar)) + || fih_not_eq(fih_int_encode(SAU->RLAR), fih_int_encode(rlar))) { + fatal_error(); + } else { + fih_rc = FIH_SUCCESS; + } + + FIH_RET(fih_rc); +} + +struct sau_cfg_t { + uint32_t RBAR; + uint32_t RLAR; +}; + +#define CONFIGURED_SAU_REGIONS 7 + +static const struct sau_cfg_t sau_cfg[CONFIGURED_SAU_REGIONS] = { + { // NS Flash ( an overlapping NSC region for SG veneers is setup in SMU ) + (uint32_t)&linker_sg_begin, + FLASH_BASE + FLASH_SIZE - 1u, + }, + { // RNR # 1 NS Peripherals + PERIPHERALS_BASE_NS_START, + PERIPHERALS_BASE_NS_END, + }, + { // RNR # 2 NS SRAM + SRAM_BASE + TZ_NS_RAM_OFFSET, + SRAM_BASE + SRAM_SIZE - 1u, + }, + { // RNR # 3 User Data + MSC_FLASH_USERDATA_MEM_BASE, + MSC_FLASH_USERDATA_MEM_END, + }, + { // RNR # 4 Device Info + MSC_FLASH_DEVINFO_MEM_BASE, + MSC_FLASH_DEVINFO_MEM_END, + }, + { // RNR # 5 Chip Config + MSC_FLASH_CHIPCONFIG_MEM_BASE, + MSC_FLASH_CHIPCONFIG_MEM_END, + }, + { // RNR # 6 EPPB + EPPB_REGION_START, + EPPB_REGION_END, + }, +}; + /**************************************************************************//** * @brief Configure the memory ranges' security attributes using the SAU. *****************************************************************************/ -static inline void configure_sau(void) +static fih_int __attribute__ ((noinline)) configure_sau(void) { - #define CONFIGURED_SAU_REGIONS 7 + fih_int fih_rc; + uint32_t i; + #define FIH_INIT_STEP_CONFIGURE_SAU 3 + + FIH_CFI_STEP_INIT(FIH_INIT_STEP_CONFIGURE_SAU); + + // Enable the needed SAU regions + // NOTE: SAU_RLAR_NSC_Pos is not needed since we set all regions to NS. + // For NS Flash ( an overlapping NSC region for SG veneers is setup in SMU ) + for (i = 0; i < CONFIGURED_SAU_REGIONS; i++) { + FIH_CALL(configure_sau_region, fih_rc, + i & SAU_RNR_REGION_Msk, + sau_cfg[i].RBAR & SAU_RBAR_BADDR_Msk, + (sau_cfg[i].RLAR & SAU_RLAR_LADDR_Msk) | SAU_RLAR_ENABLE_Msk); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + goto exit; // if fatal_error is glitched + } + } + + FIH_CFI_STEP_DECREMENT(); - // Disable all the regions - for (uint32_t i = CONFIGURED_SAU_REGIONS; + // Disable the remaining regions + for (; // i = CONFIGURED_SAU_REGIONS; i should not be clobbered in between i < ((SAU->TYPE & SAU_TYPE_SREGION_Msk) >> SAU_TYPE_SREGION_Pos); i++) { - SAU->RNR = i; - SAU->RLAR = 0u; + FIH_CALL(configure_sau_region, fih_rc, i, 0u, 0u); // Enable mask not set + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + goto exit; // if fatal_error is glitched + } } - // Configure SAU for flash - SAU->RNR = 0; // Flash - SAU->RBAR = ((uint32_t)&linker_sg_begin) & SAU_RBAR_BADDR_Msk; - SAU->RLAR = ((FLASH_BASE + FLASH_SIZE - 1u) & SAU_RLAR_LADDR_Msk) - | (0 << SAU_RLAR_NSC_Pos) - | SAU_RLAR_ENABLE_Msk; - SAU->RNR = 1; // NS Peripherals - SAU->RBAR = PERIPHERALS_BASE_NS_START & SAU_RBAR_BADDR_Msk; - SAU->RLAR = ((PERIPHERALS_BASE_NS_END) &SAU_RLAR_LADDR_Msk) - | (0 << SAU_RLAR_NSC_Pos) - | SAU_RLAR_ENABLE_Msk; - SAU->RNR = 2; // SRAM - SAU->RBAR = (SRAM_BASE + TZ_NS_RAM_OFFSET) & SAU_RBAR_BADDR_Msk; - SAU->RLAR = ((SRAM_BASE + SRAM_SIZE - 1u) & SAU_RLAR_LADDR_Msk) - | (0 << SAU_RLAR_NSC_Pos) - | SAU_RLAR_ENABLE_Msk; - SAU->RNR = 3; // User Data - SAU->RBAR = MSC_FLASH_USERDATA_MEM_BASE & SAU_RBAR_BADDR_Msk; - SAU->RLAR = (MSC_FLASH_USERDATA_MEM_END & SAU_RLAR_LADDR_Msk) - | (0 << SAU_RLAR_NSC_Pos) - | SAU_RLAR_ENABLE_Msk; - SAU->RNR = 4; // Device Info - SAU->RBAR = MSC_FLASH_DEVINFO_MEM_BASE & SAU_RBAR_BADDR_Msk; - SAU->RLAR = (MSC_FLASH_DEVINFO_MEM_END & SAU_RLAR_LADDR_Msk) - | (0 << SAU_RLAR_NSC_Pos) - | SAU_RLAR_ENABLE_Msk; - SAU->RNR = 5; // Chip Config - SAU->RBAR = MSC_FLASH_CHIPCONFIG_MEM_BASE & SAU_RBAR_BADDR_Msk; - SAU->RLAR = (MSC_FLASH_CHIPCONFIG_MEM_END & SAU_RLAR_LADDR_Msk) - | (0 << SAU_RLAR_NSC_Pos) - | SAU_RLAR_ENABLE_Msk; - SAU->RNR = 6; // EPPB - SAU->RBAR = EPPB_REGION_START & SAU_RBAR_BADDR_Msk; - SAU->RLAR = (EPPB_REGION_END & SAU_RLAR_LADDR_Msk) - | (0 << SAU_RLAR_NSC_Pos) - | SAU_RLAR_ENABLE_Msk; + FIH_CFI_STEP_DECREMENT(); + + /* Enable SAU */ +#ifdef TFM_FIH_PROFILE_ON + TZ_SAU_Enable(); + TZ_SAU_Enable(); +#endif TZ_SAU_Enable(); - // Ensure that the new SAU configuration is used by subsequent instructions. - __DSB(); - __ISB(); + FIH_CFI_STEP_DECREMENT(); + + FIH_RET(fih_rc); + exit: + FIH_CFI_STEP_ERR_RESET(); + FIH_RET(FIH_FAILURE); } /**************************************************************************//** @@ -467,39 +705,84 @@ static inline void configure_sau(void) * and RAM. All of the peripherals are mapped and available for the non-secure * application, except for the a few secure-only peripherals. *****************************************************************************/ -static inline void configure_smu(void) +static fih_int __attribute__ ((noinline)) configure_smu(void) { + #define FIH_INIT_STEP_CONFIGURE_SMU 5 + + FIH_CFI_STEP_INIT(FIH_INIT_STEP_CONFIGURE_SMU); + // Enable clocking (where necessary). #if defined(CMU_CLKEN1_SMU) + #if defined(TFM_FIH_PROFILE_ON) && defined(FIH_ENABLE_DELAY) + CMU_NS->CLKEN1_SET = CMU_CLKEN1_SMU; + #else CMU_S->CLKEN1_SET = CMU_CLKEN1_SMU; + #endif // defined(TFM_FIH_PROFILE_ON) && defined(FIH_ENABLE_DELAY) #endif SMU->LOCK = SMU_LOCK_SMULOCKKEY_UNLOCK; // Configure flash into S/NSC/NS regions. - // S - NSC boundary SMU->ESAUMRB01 = FLASH_BASE & _SMU_ESAUMRB01_MASK; + if (fih_not_eq(fih_int_encode(SMU->ESAUMRB01), + fih_int_encode(FLASH_BASE & _SMU_ESAUMRB01_MASK))) { + fatal_error(); + goto exit; // if fatal_error is glitched + } // NSC - NS boundary SMU->ESAUMRB12 = (FLASH_BASE + TZ_NS_FLASH_OFFSET) & _SMU_ESAUMRB12_MASK; + if (fih_not_eq(fih_int_encode(SMU->ESAUMRB12), + fih_int_encode((FLASH_BASE + TZ_NS_FLASH_OFFSET) & _SMU_ESAUMRB12_MASK))) { + fatal_error(); + goto exit; // if fatal_error is glitched + } // Configure RAM into S/NS regions. // S - NSC boundary SMU->ESAUMRB45 = (SRAM_BASE + TZ_NS_RAM_OFFSET) & _SMU_ESAUMRB45_MASK; + if (fih_not_eq(fih_int_encode(SMU->ESAUMRB45), + fih_int_encode((SRAM_BASE + TZ_NS_RAM_OFFSET) & _SMU_ESAUMRB45_MASK))) { + fatal_error(); + goto exit; // if fatal_error is glitched + } // NSC - NS boundary SMU->ESAUMRB56 = (SRAM_BASE + TZ_NS_RAM_OFFSET) & _SMU_ESAUMRB56_MASK; + if (fih_not_eq(fih_int_encode(SMU->ESAUMRB56), + fih_int_encode((SRAM_BASE + TZ_NS_RAM_OFFSET) & _SMU_ESAUMRB56_MASK))) { + fatal_error(); + goto exit; // if fatal_error is glitched + } // Make the info page NS. SMU->ESAURTYPES0 = SMU_ESAURTYPES0_ESAUR3NS; + if (fih_not_eq(fih_int_encode(SMU->ESAURTYPES0), + fih_int_encode(SMU_ESAURTYPES0_ESAUR3NS))) { + fatal_error(); + goto exit; // if fatal_error is glitched + } // Make the EPPB area NS. SMU->ESAURTYPES1 = SMU_ESAURTYPES1_ESAUR11NS; + if (fih_not_eq(fih_int_encode(SMU->ESAURTYPES1), + fih_int_encode(SMU_ESAURTYPES1_ESAUR11NS))) { + fatal_error(); + goto exit; // if fatal_error is glitched + } + + FIH_CFI_STEP_DECREMENT(); + + configure_smu_peripherals(); + + FIH_CFI_STEP_DECREMENT(); - smu_configure_peripherals(); + configure_smu_bus_masters(); - smu_configure_bus_masters(); + FIH_CFI_STEP_DECREMENT(); - smu_enable_security_fault_interrupts(); + enable_smu_security_fault_interrupts(); + + FIH_CFI_STEP_DECREMENT(); // Lock SMU config. SMU->LOCK = 0; @@ -508,14 +791,55 @@ static inline void configure_smu(void) #if defined(CMU_CLKEN1_SMU) CMU_NS->CLKEN1_CLR = CMU_CLKEN1_SMU; #endif + + FIH_CFI_STEP_DECREMENT(); + + FIH_RET(FIH_SUCCESS); + + exit: + FIH_CFI_STEP_ERR_RESET(); + FIH_RET(FIH_FAILURE); } +#if defined(TFM_FIH_PROFILE_ON) && defined(FIH_ENABLE_DELAY) + +static inline void configure_sau_smu_for_fih_delay(void) +{ + // Enable SAU region needed for NS Peripherals, especially CMU_NS + TZ_SAU_Enable(); + SAU->RNR = 1; // NS Peripherals + SAU->RBAR = PERIPHERALS_BASE_NS_START & SAU_RBAR_BADDR_Msk; + SAU->RLAR = ((PERIPHERALS_BASE_NS_END) &SAU_RLAR_LADDR_Msk) + | (0 << SAU_RLAR_NSC_Pos) + | SAU_RLAR_ENABLE_Msk; + + // Enable SMU clock (where necessary). + // NOTE: We use CMU_S before CMU is set to NS in PPUSATD0. + #if defined(CMU_CLKEN1_SMU) + CMU_S->CLKEN1_SET = CMU_CLKEN1_SMU; + #endif + SMU->LOCK = SMU_LOCK_SMULOCKKEY_UNLOCK; + + configure_smu_peripherals(); + + // Lock SMU config. + SMU->LOCK = 0; + + // Disable SMU clock (where necessary). + // NOTE: CMU_NS is required for CMU access from now on + #if defined(CMU_CLKEN1_SMU) + CMU_NS->CLKEN1_CLR = CMU_CLKEN1_SMU; + #endif +} + +#endif // defined(TFM_FIH_PROFILE_ON) && defined(FIH_ENABLE_DELAY) + /**************************************************************************//** * @brief Configures secure attributes of peripherals using the SMU. * * This function is device dependent. Assumes that the SMU is clocked. *****************************************************************************/ -static inline void smu_configure_peripherals(void) +static inline void configure_smu_peripherals(void) { #if defined(SEMAILBOX_PRESENT) // All peripherals are non-secure except SMU, SEMAILBOX, MSC and SYSCFG. @@ -541,7 +865,7 @@ static inline void smu_configure_peripherals(void) * * This function is device dependent. Assumes that the SMU is clocked. *****************************************************************************/ -static inline void smu_configure_bus_masters(void) +static inline void configure_smu_bus_masters(void) { #if defined(SEMAILBOX_PRESENT) && (_SILICON_LABS_32B_SERIES_2_CONFIG == 1) // Configure all bus-masters execpt for SEDMA as non-secure. @@ -563,7 +887,7 @@ static inline void smu_configure_bus_masters(void) * * Assumes that the SMU is clocked. *****************************************************************************/ -static inline void smu_enable_security_fault_interrupts(void) +static inline void enable_smu_security_fault_interrupts(void) { NVIC_ClearPendingIRQ(SMU_SECURE_IRQn); SMU->IF_CLR = SMU_IF_PPUSEC | SMU_IF_BMPUSEC; @@ -578,8 +902,10 @@ static inline void smu_enable_security_fault_interrupts(void) * everything points to the secure world, and this function redirects all * intterupts to non-secure to better support existing applications. *****************************************************************************/ -static inline void configure_interrupt_target_states(void) +static fih_int __attribute__ ((noinline)) configure_interrupt_target_states(void) { + fih_int fih_rc = FIH_SUCCESS; + // Start by setting all Interrupt Non-Secure State (ITNS) bits. This results // in all IRQs being targeted at the NS world. for (size_t i = 0; i < sizeof(NVIC->ITNS) / sizeof(NVIC->ITNS[0]); i++) { @@ -601,6 +927,48 @@ static inline void configure_interrupt_target_states(void) NVIC_ClearTargetState(SYSCFG_IRQn); NVIC_ClearTargetState(MSC_IRQn); #endif + +#if defined(TFM_FIH_PROFILE_ON) && defined(TFM_FIH_PROFILE_HIGH) + +#define NUM_ITNS_REGS (EXT_IRQ_COUNT / 32 + (EXT_IRQ_COUNT % 32 ? 1 : 0)) +#define CLEAR_ITNS_BIT(irqn) \ + expected_itns[(((uint32_t)irqn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)irqn) & 0x1FUL))); + uint32_t expected_itns[NUM_ITNS_REGS]; + + for (size_t i = 0; i < NUM_ITNS_REGS; i++) { + expected_itns[i] = 0xFFFFFFFF; + } + +#if defined(SEMAILBOX_PRESENT) + CLEAR_ITNS_BIT(SEMBRX_IRQn); + CLEAR_ITNS_BIT(SEMBTX_IRQn); + CLEAR_ITNS_BIT(SMU_SECURE_IRQn); + CLEAR_ITNS_BIT(SYSCFG_IRQn); + CLEAR_ITNS_BIT(MSC_IRQn); +#elif defined(CRYPTOACC_PRESENT) + CLEAR_ITNS_BIT(CRYPTOACC_IRQn); + CLEAR_ITNS_BIT(TRNG_IRQn); + CLEAR_ITNS_BIT(PKE_IRQn); + CLEAR_ITNS_BIT(SMU_SECURE_IRQn); + CLEAR_ITNS_BIT(SYSCFG_IRQn); + CLEAR_ITNS_BIT(MSC_IRQn); +#endif + + // Clear unused most significant irq bits in ITNS + for (size_t i = EXT_IRQ_COUNT; i < 32 * NUM_ITNS_REGS; i++) { + CLEAR_ITNS_BIT(i); + } + + // Check that all Interrupt Non-Secure State (ITNS) bits are as exptected + for (size_t i = 0; i < NUM_ITNS_REGS; i++) { + if (fih_not_eq(fih_int_encode(NVIC->ITNS[i]), fih_int_encode(expected_itns[i]))) { + fatal_error(); + fih_rc = FIH_FAILURE; // if fatal_error is glitched, return failure + } + } +#endif // defined(TFM_FIH_PROFILE_ON) && defined(TFM_FIH_PROFILE_HIGH) + + FIH_RET(fih_rc); } /**************************************************************************//** @@ -610,43 +978,84 @@ static inline void configure_interrupt_target_states(void) * so that the priority range for Secure interrupts extends to higher * priorities than the range for Non-secure interrupts. *****************************************************************************/ -static inline void prioritise_secure_exceptions(void) +static fih_int __attribute__ ((noinline)) prioritise_secure_exceptions(void) { - uint32_t scb_AIRCR = SCB->AIRCR; + fih_int fih_rc = FIH_FAILURE; // if fatal_error is glitched, return failure + uint32_t scb_vectkey = AIRCR_UNLOCK_VECTKEY; - SCB->AIRCR = SCB_AIRCR_PRIS_Msk - | (scb_vectkey << SCB_AIRCR_VECTKEY_Pos) - | (scb_AIRCR & ~SCB_AIRCR_VECTKEY_Msk); + uint32_t scb_AIRCR = SCB_AIRCR_PRIS_Msk + | (scb_vectkey << SCB_AIRCR_VECTKEY_Pos) + | (SCB->AIRCR & ~SCB_AIRCR_VECTKEY_Msk); + + SCB->AIRCR = scb_AIRCR; + + scb_AIRCR &= ~SCB_AIRCR_VECTKEY_Msk; + scb_AIRCR |= AIRCR_VECTKEY_STAT << SCB_AIRCR_VECTKEY_Pos; + + // Verify register if store instruction was glitched + if (fih_not_eq(fih_int_encode(scb_AIRCR), fih_int_encode(SCB->AIRCR))) { + fatal_error(); + } else { + fih_rc = FIH_SUCCESS; + } + FIH_RET(fih_rc); } /**************************************************************************//** * @brief Enables SecureFault, BusFault, UsageFault, and MemFault system * exceptions. *****************************************************************************/ -static inline void enable_fault_exceptions(void) +static fih_int __attribute__ ((noinline)) enable_fault_exceptions(void) { + uint32_t enable_mask = SCB_SHCSR_SECUREFAULTENA_Msk + | SCB_SHCSR_BUSFAULTENA_Msk + | SCB_SHCSR_USGFAULTENA_Msk + | SCB_SHCSR_MEMFAULTENA_Msk; + // Enable SecureFault, BusFault, UsageFault and MemFault. - SCB->SHCSR |= SCB_SHCSR_SECUREFAULTENA_Msk - | SCB_SHCSR_BUSFAULTENA_Msk - | SCB_SHCSR_USGFAULTENA_Msk - | SCB_SHCSR_MEMFAULTENA_Msk; + volatile uint32_t shcsr = SCB->SHCSR | enable_mask; + + SCB->SHCSR = shcsr; + + #if defined(TFM_FIH_PROFILE_ON) && defined(TFM_FIH_PROFILE_HIGH) + // Verify register if store instruction was glitched + if (fih_not_eq(fih_int_encode(shcsr & enable_mask), + fih_int_encode(SCB->SHCSR & enable_mask))) { + fatal_error(); + FIH_RET(FIH_FAILURE); // if fatal_error is glitched, return failure + } + #endif + FIH_RET(FIH_SUCCESS); } /**************************************************************************//** * @brief Enable the FPU for the non-secure app. *****************************************************************************/ -static inline void enable_ns_fpu(void) +static fih_int __attribute__ ((noinline)) enable_ns_fpu(void) { - SCB->NSACR |= (SCB_NSACR_CP10_Msk) // enable CP10 Full Access - | (SCB_NSACR_CP11_Msk); // enable CP11 Full Access + volatile uint32_t nsacr = SCB->NSACR + | (SCB_NSACR_CP10_Msk) // enable CP10 Full Access + | (SCB_NSACR_CP11_Msk); // enable CP11 Full Access + SCB->NSACR = nsacr; + + #if defined(TFM_FIH_PROFILE_ON) && defined(TFM_FIH_PROFILE_HIGH) + // Verify register if store instruction was glitched + if (fih_not_eq(fih_int_encode(nsacr), fih_int_encode(SCB->NSACR))) { + fatal_error(); + FIH_RET(FIH_FAILURE); // if fatal_error is glitched, return failure + } + #endif + FIH_RET(FIH_SUCCESS); } /**************************************************************************//** * @brief Enable the flash page locks corresponding to the bootloader and * secure library code. *****************************************************************************/ -static inline void enable_page_locks(void) +static fih_int __attribute__ ((noinline)) enable_page_locks(void) { + fih_int fih_rc = FIH_SUCCESS; + #if defined(_CMU_CLKEN1_MASK) CMU->CLKEN1_SET = CMU_CLKEN1_MSC; #endif @@ -660,10 +1069,20 @@ static inline void enable_page_locks(void) // (for example when the total amount of pages to lock is zero mod 32). // This should not be a problem though, as pushing 0 into _SET is a no-op *pagelock_registers[i] = (1u << pages_to_lock) - 1; + if (fih_not_eq(fih_int_encode(*pagelock_registers[i]), + fih_int_encode((1u << pages_to_lock) - 1))) { + fatal_error(); + fih_rc = FIH_FAILURE; // if fatal_error is glitched, return failure + } pages_to_lock = 0u; break; } else { *pagelock_registers[i] = 0xffffffffu; + if (fih_not_eq(fih_int_encode(*pagelock_registers[i]), + fih_int_encode(0xffffffffu))) { + fatal_error(); + fih_rc = FIH_FAILURE; // if fatal_error is glitched, return failure + } pages_to_lock -= 32u; } } @@ -671,6 +1090,8 @@ static inline void enable_page_locks(void) #if defined(_CMU_CLKEN1_MASK) CMU->CLKEN1_CLR = CMU_CLKEN1_MSC; #endif + + FIH_RET(fih_rc); } /**************************************************************************//** @@ -678,23 +1099,108 @@ static inline void enable_page_locks(void) * * This function should not return. *****************************************************************************/ -static inline void start_ns_app(void) +__WEAK void start_ns_app(void) { // Set stack pointer. __TZ_set_MSP_NS(*((uint32_t *)(FLASH_BASE + TZ_NS_FLASH_OFFSET))); __TZ_set_PSP_NS(*((uint32_t *)(FLASH_BASE + TZ_NS_FLASH_OFFSET))); - // Set vector table (may be done by SystemInit() on NS side, but do it here to - // be sure). + #if defined(TFM_FIH_PROFILE_ON) && defined(TFM_FIH_PROFILE_HIGH) + // Verify MSP_NS is not glitched + if (fih_not_eq(fih_int_encode(__TZ_get_MSP_NS()), + fih_int_encode(*((uint32_t *)(FLASH_BASE + + TZ_NS_FLASH_OFFSET))))) { + fatal_error(); + } + #endif + + // Set vector table (may be done by SystemInit() on NS side, but do it here + // to be sure). SCB_NS->VTOR = (FLASH_BASE + TZ_NS_FLASH_OFFSET); - // Call non-secure reset handler. - nsfunc fp = (nsfunc) * ((uint32_t *)((FLASH_BASE + TZ_NS_FLASH_OFFSET) + 4UL)); + #if defined(TFM_FIH_PROFILE_ON) && defined(TFM_FIH_PROFILE_HIGH) + // Verify NS VTOR is not glitched + if (fih_not_eq(fih_int_encode(SCB_NS->VTOR), + fih_int_encode(FLASH_BASE + TZ_NS_FLASH_OFFSET))) { + fatal_error(); + } + #endif + + // Read address of the non-secure reset handler. + volatile uint32_t *fp_location = + (uint32_t *)(FLASH_BASE + TZ_NS_FLASH_OFFSET + 4UL); + nsfunc fp = (nsfunc) * fp_location; + + // Verify that the read of the NS reset handler address is not glitched + if (fih_not_eq(fih_int_encode((int32_t)fp), + fih_int_encode((int32_t)(*fp_location)))) { + fatal_error(); + } + + // Reset the Secure MSP to the top of stack which should be located where + // the stack seal starts. The existing stack frames on the secure stack can + // be dismissed, and veneer functions will generate new frames starting from + // the top of stack. + extern uint32_t __STACK_SEAL; + __set_MSP((uint32_t) &__STACK_SEAL); + + // NOTE: + // Make sure the stack pointer is not moved after resetting the secure MSP + // above, between and before the call to the NS reset handler just below. + // Moving the stack pointer between, HERE, will break the secure stack. + // If possible, avoid any other code in between, HERE. + + // Call the non-secure reset handler,, should not return. fp(); } #if defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) && defined(SLI_PSA_ITS_ENCRYPTED) +static fih_int __attribute__ ((noinline)) check_se_version(uint32_t se_version) +{ + fih_int fih_rc = FIH_FAILURE; // if fatal_error is glitched, return failure + volatile int32_t version_diff = A_NEGATIVE_VALUE; + #define FIH_INIT_STEP_VERFIY_SE_VERSION 3 + FIH_CFI_STEP_INIT(FIH_INIT_STEP_VERFIY_SE_VERSION); + + // Verify that the SE version newer than the oldest supported version. + if (se_version < OLDEST_SUPPORTED_SE_FW_VERSION) { + fatal_error(); + goto exit; // if fatal_error is glitched + } + + FIH_CFI_STEP_DECREMENT(); + + // Double check that that se_version is higher than the initial version with + // SRK support in case the previous if statement was glitched. + // The following subtraction is based on the assumption that both minuend and + // subtrahend are unsigned 32-bit values masked with 0x00FFFFFFU, ref + // definition of SLI_VERSION_REMOVE_DIE_ID. + version_diff = SLI_VERSION_REMOVE_DIE_ID(se_version) - OLDEST_SUPPORTED_SE_FW_VERSION; + if (version_diff < 0) { + fatal_error(); + goto exit; // if fatal_error is glitched + } + + FIH_CFI_STEP_DECREMENT(); + + // Additional check that the version_diff is different than the initial value. + if (fih_eq(fih_int_encode(version_diff), + fih_int_encode(A_NEGATIVE_VALUE))) { + fatal_error(); + goto exit; // if fatal_error is glitched + } else { + fih_rc = FIH_SUCCESS; + FIH_CFI_STEP_DECREMENT(); + } + + FIH_RET(fih_rc); + + exit: + FIH_CFI_STEP_ERR_RESET(); + FIH_RET(FIH_FAILURE); +} + #if defined(SEMAILBOX_PRESENT) /**************************************************************************//** * @brief Verify that the HSE has a supported firmware version. @@ -703,127 +1209,287 @@ static inline void start_ns_app(void) * secure key storage to work. Support for this was added in SE FW v1.2.12, * which is the minimum version supported. *****************************************************************************/ -static inline void verify_hse_version(void) +static fih_int __attribute__ ((noinline)) verify_hse_version(void) { + fih_int fih_rc = FIH_FAILURE; + #define FIH_INIT_STEP_VERIFY_HSE_VERSION 2 + FIH_CFI_STEP_INIT(FIH_INIT_STEP_VERIFY_HSE_VERSION); + sl_se_command_context_t cmd_ctx; uint32_t se_version = 0; sl_status_t status = sl_se_get_se_version(&cmd_ctx, &se_version); if (status != SL_STATUS_OK) { fatal_error(); + goto exit; // if fatal_error is glitched } - if (!SLI_SE_VERSION_SUPPORTS_SRK(se_version)) { - // SE firmware version must be at least v1.2.12 for xG21/xG22 and at least - // v2.2.0 for xG23+. + + FIH_CFI_STEP_DECREMENT(); + + // Check that the SE fw version is accepted. + FIH_CALL(check_se_version, fih_rc, se_version); + if (fih_eq(fih_rc, FIH_SUCCESS)) { + FIH_CFI_STEP_DECREMENT(); + FIH_RET(fih_rc); + } + + exit: + FIH_CFI_STEP_ERR_RESET(); + fatal_error(); + FIH_RET(FIH_FAILURE); // if fatal_error is glitched, return failure +} + +#else // defined(SEMAILBOX_PRESENT) + +static fih_int __attribute__ ((noinline)) vse_is_mailbox_valid(void) +{ + if (!rootIsOutputMailboxValid()) { + FIH_RET(fih_int_encode(SE_RESPONSE_MAILBOX_INVALID)); + } else { + FIH_RET(fih_int_encode(SE_RESPONSE_OK)); + } +} + +static fih_int __attribute__ ((noinline)) vse_get_reply_ptr(uint32_t **vse_reply_ptr) +{ + #if ((defined(SL_TRUSTZONE_SECURE) && !defined(SL_TRUSTZONE_PERIPHERAL_AHBRADIO_S)) \ + || (defined(SL_TRUSTZONE_PERIPHERAL_AHBRADIO_S) && SL_TRUSTZONE_PERIPHERAL_AHBRADIO_S)) + + #define RDMEM_FRCRAM_MEM_BASE RDMEM_FRCRAM_S_MEM_BASE + #define ROOT_MAILBOX_OUTPUT_BASE SYSCFG->ROOTDATA1; + #define ROOT_MAILBOX_OUTPUT_BASE_EXPECTED ROOT_MAILBOX_OUTPUT_S_BASE + #else + #define RDMEM_FRCRAM_MEM_BASE RDMEM_FRCRAM_NS_MEM_BASE + // VSE will always output the secure address, if NS is desired, caculate the NS address. + #define ROOT_MAILBOX_OUTPUT_BASE (SYSCFG->ROOTDATA1 - RDMEM_FRCRAM_S_MEM_BASE + RDMEM_FRCRAM_NS_MEM_BASE) + #define ROOT_MAILBOX_OUTPUT_BASE_EXPECTED (RDMEM_FRCRAM_NS_MEM_END + 1 - ROOT_MAILBOX_SIZE) + #endif + + #if defined(TFM_FIH_PROFILE_ON) && defined(FIH_ENABLE_DELAY) + // CMU is already set to NS during fih_delay initialisation + // configure_sau_smu_for_fih_delay. + CMU_TypeDef *cmu = CMU_NS; + #else + CMU_TypeDef *cmu = CMU_S; + #endif + + // Store current CLKEN0 state + uint32_t clken0_state = cmu->CLKEN0; + + cmu->CLKEN0_SET = CMU_CLKEN0_SYSCFG; + + // Get pointer to VSE mailbox reply structure + *vse_reply_ptr = (uint32_t*)(ROOT_MAILBOX_OUTPUT_BASE); + + // Restore prior CLKEN0 state + cmu->CLKEN0 = clken0_state; + + if ((uint32_t) *vse_reply_ptr > ROOT_MAILBOX_OUTPUT_BASE_EXPECTED + || (uint32_t)*vse_reply_ptr < RDMEM_FRCRAM_MEM_BASE) { fatal_error(); } + FIH_RET(FIH_SUCCESS); +} + +static fih_int __attribute__ ((noinline)) vse_get_se_version(const uint32_t *vse_reply_ptr, uint32_t *se_version) +{ + *se_version = vse_reply_ptr[1]; + FIH_RET(FIH_SUCCESS); +} + +static fih_int __attribute__ ((noinline)) vse_get_reply_status(const uint32_t *vse_reply_ptr, uint32_t *vse_reply_status) +{ + *vse_reply_status = vse_reply_ptr[2]; + FIH_RET(FIH_SUCCESS); +} + +static fih_int __attribute__ ((noinline)) vse_get_data_length(const uint32_t *vse_reply_ptr, uint32_t *vse_data_length) +{ + *vse_data_length = vse_reply_ptr[4]; + FIH_RET(FIH_SUCCESS); } -#endif -#if !defined(SEMAILBOX_PRESENT) /**************************************************************************//** * @brief Setup Storage Root Key (SRK) * * Reads the TrustZone Root Key / Storage Root Key passed from the VSE and * configures ITS to use it for NVM3 encryption. *****************************************************************************/ -static inline void setup_storage_root_key(void) +static fih_int __attribute__ ((noinline)) setup_storage_root_key(void) { - #if defined(CRYPTOACC_PRESENT) + fih_int fih_rc = FIH_FAILURE; // if fatal_error is glitched, return failure - #define VSE_REPLY_SIZE_WORDS 5 - #define VSE_REPLY_STATUS_TRUSTZONE_ROOT_KEY (1 << 22) - #define TZ_SRK_SIZE_WORDS 8 + #if defined(CRYPTOACC_PRESENT) + // Size of VSE Output Mailbox instance. + #define VSE_REPLY_SIZE_BYTES 20UL + #define VSE_REPLY_SIZE_WORDS (VSE_REPLY_SIZE_BYTES / sizeof(uint32_t)) + // The data field size is the full output mailbox minus + // the header/reply structure which is 20 bytes. + #define ROOT_MAILBOX_DATA_SIZE (ROOT_MAILBOX_SIZE - VSE_REPLY_SIZE_BYTES) + #define VSE_REPLY_STATUS_TRUSTZONE_ROOT_KEY (1 << 22) + #define TZ_SRK_SIZE_WORDS 8 typedef struct { uint32_t data[TZ_SRK_SIZE_WORDS]; uint32_t checksum; } vse_srk_t; - // Store current CLKEN0 state - uint32_t clken0_state = CMU_S->CLKEN0; + #define FIH_INIT_STEP_SETUP_STORAGE_ROOT_KEY 8 - // Read the SRK next to the VSE mailbox - CMU_S->CLKEN0_SET = CMU_CLKEN0_SYSCFG; - uint32_t *vse_reply = (uint32_t*)SYSCFG_S->ROOTDATA1; + uint32_t *vse_reply = NULL; + uint32_t se_version = 0; + uint32_t vse_reply_status = 0; + uint32_t vse_data_length = ROOT_MAILBOX_SIZE; // initialise to invalid size + vse_srk_t *srk; + uint32_t checksum = 0; + volatile psa_status_t status = PSA_ERROR_GENERIC_ERROR; - // Restore prior CLKEN0 state - CMU_S->CLKEN0 = clken0_state; + FIH_CFI_STEP_INIT(FIH_INIT_STEP_SETUP_STORAGE_ROOT_KEY); + + // Check that the VSE mailbox is valid + FIH_CALL(vse_is_mailbox_valid, fih_rc); + if (fih_not_eq(fih_rc, fih_int_encode(SE_RESPONSE_OK))) { + fatal_error(); + goto exit; // if fatal_error is glitched + } + + FIH_CFI_STEP_DECREMENT(); + + // Get pointer to the VSE output mailbox reply structure + FIH_CALL(vse_get_reply_ptr, fih_rc, &vse_reply); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + goto exit; // if fatal_error is glitched + } + if (fih_eq(fih_int_encode((int32_t)vse_reply), + fih_int_encode((int32_t)NULL))) { + fatal_error(); + goto exit; // if fatal_error is glitched + } + + FIH_CFI_STEP_DECREMENT(); + + // Get VSE firmware version + FIH_CALL(vse_get_se_version, fih_rc, vse_reply, &se_version); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + goto exit; // if fatal_error is glitched + } - // Verify that the SE version supports SRK - uint32_t se_version = vse_reply[1]; - if (!SLI_SE_VERSION_SUPPORTS_SRK(se_version)) { - // SE firmware version must be at least v1.2.12 for xG21/xG22 and at least - // v2.2.0 for xG23+. + // Verify that the SE firmware version is accepted. + FIH_CALL(check_se_version, fih_rc, se_version); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { fatal_error(); + goto exit; // if fatal_error is glitched } + FIH_CFI_STEP_DECREMENT(); + // Verify that the TrustZone Root Key flag is present in the reply status - uint32_t vse_reply_status = vse_reply[2]; - if ((vse_reply_status & VSE_REPLY_STATUS_TRUSTZONE_ROOT_KEY) == 0) { + FIH_CALL(vse_get_reply_status, fih_rc, vse_reply, &vse_reply_status); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { fatal_error(); + goto exit; // if fatal_error is glitched } + if (fih_eq(fih_int_encode(vse_reply_status & VSE_REPLY_STATUS_TRUSTZONE_ROOT_KEY), + fih_int_encode(0))) { + fatal_error(); + goto exit; // if fatal_error is glitched + } + + FIH_CFI_STEP_DECREMENT(); // Read the SRK next to the mailbox, i.e. after the VSE reply header, data length and // checksum (+1). - uint32_t vse_data_length = vse_reply[4]; - vse_srk_t *srk = (vse_srk_t*)(vse_reply + VSE_REPLY_SIZE_WORDS + vse_data_length + 1); + FIH_CALL(vse_get_data_length, fih_rc, vse_reply, &vse_data_length); + if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + fatal_error(); + goto exit; // if fatal_error is glitched + } + if (vse_data_length > ROOT_MAILBOX_DATA_SIZE) { + fatal_error(); + goto exit; // if fatal_error is glitched + } + + FIH_CFI_STEP_DECREMENT(); + + // Set pointer to the SRK now as we determined the VSE data length + srk = (vse_srk_t*)(vse_reply + VSE_REPLY_SIZE_WORDS + vse_data_length + 1); // Verify checksum - uint32_t checksum = 0; for (uint32_t i = 0; i < sizeof(srk->data) / sizeof(uint32_t); ++i) { checksum ^= srk->data[i]; } - if (checksum != srk->checksum) { + if (fih_not_eq(fih_int_encode(checksum), fih_int_encode(srk->checksum))) { fatal_error(); + goto exit; // if fatal_error is glitched } + FIH_CFI_STEP_DECREMENT(); + // Set the ITS root key. Note that this function is not dependent on PSA Crypto // being initialized. - psa_status_t status = sli_psa_its_set_root_key((uint8_t*)srk->data, - sizeof(srk->data)); - if (status != PSA_SUCCESS) { + status = sli_psa_its_set_root_key((uint8_t*)srk->data, sizeof(srk->data)); + if (fih_not_eq(fih_int_encode(status), fih_int_encode(PSA_SUCCESS))) { fatal_error(); + goto exit; // if fatal_error is glitched } + FIH_CFI_STEP_DECREMENT(); + // Clear the SRK from the mailbox location - sli_psa_zeroize(srk, sizeof(vse_srk_t)); + status = PSA_ERROR_GENERIC_ERROR; + status = sli_psa_zeroize(srk, sizeof(vse_srk_t)); + if (fih_not_eq(fih_int_encode(status), fih_int_encode(PSA_SUCCESS))) { + fatal_error(); + goto exit; // if fatal_error is glitched + } else { + fih_rc = FIH_SUCCESS; + } + + FIH_CFI_STEP_DECREMENT(); + #else // defined(CRYPTOACC_PRESENT) #error "Unknown device without SEMAILBOX (HSE) or CRYPTOACC (VSE)" #endif // defined(CRYPTOACC_PRESENT) + + FIH_RET(fih_rc); + exit: + FIH_CFI_STEP_ERR_RESET(); + FIH_RET(FIH_FAILURE); } -#endif // !SEMAILBOX_PRESENT +#endif // #if SEMAILBOX_PRESENT #else ... #endif // defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) && defined(SLI_PSA_ITS_ENCRYPTED) // ----------------------------------------------------------------------------- // Fault handlers -void SMU_SECURE_IRQHandler(void) +__WEAK void SMU_SECURE_IRQHandler(void) { fatal_error(); } -void HardFault_Handler(void) +__WEAK void HardFault_Handler(void) { fatal_error(); } -void SecureFault_Handler(void) +__WEAK void SecureFault_Handler(void) { fatal_error(); } -void UsageFault_Handler(void) +__WEAK void UsageFault_Handler(void) { fatal_error(); } -void BusFault_Handler(void) +__WEAK void BusFault_Handler(void) { fatal_error(); } -void mpu_fault_handler(void) +__WEAK void mpu_fault_handler(void) { fatal_error(); } diff --git a/platform/security/sl_component/sl_trustzone/src/sli_tz_service_attestation.c b/platform/security/sl_component/sl_trustzone/src/sli_tz_service_attestation.c index 68802054770..12e3a315258 100644 --- a/platform/security/sl_component/sl_trustzone/src/sli_tz_service_attestation.c +++ b/platform/security/sl_component/sl_trustzone/src/sli_tz_service_attestation.c @@ -39,9 +39,11 @@ #include "em_system.h" // SE Manager + #include "sl_se_manager.h" // sl_se_init(),,, #include "sl_se_manager_util.h" // PSA Crypto + #include "psa/client.h" // psa_invec, psa_outvec #include "psa/crypto.h" #include "psa/crypto_types.h" #include "psa/crypto_values.h" @@ -65,10 +67,12 @@ #include "api/application_properties.h" #else // PSA Crypto + #include "psa/client.h" // psa_invec, psa_outvec #include "psa/crypto_types.h" #include "psa/crypto_values.h" // SE Manager + #include "sl_se_manager.h" // sl_se_init(),,, #include "sl_se_manager_util.h" #include "sl_se_manager_attestation.h" #endif // (_SILICON_LABS_SECURITY_FEATURE != _SILICON_LABS_SECURITY_FEATURE_VAULT) diff --git a/platform/security/sl_component/sl_trustzone/src/sli_tz_service_msc_ns.c b/platform/security/sl_component/sl_trustzone/src/sli_tz_service_msc_ns.c deleted file mode 100644 index ae310ef5e19..00000000000 --- a/platform/security/sl_component/sl_trustzone/src/sli_tz_service_msc_ns.c +++ /dev/null @@ -1,204 +0,0 @@ -/***************************************************************************//** - * @file - * @brief Silicon Labs TrustZone secure MSC service (non-secure side). - ******************************************************************************* - * # 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. - * - ******************************************************************************/ - -#include "sli_tz_service_msc.h" -#include "sli_tz_ns_interface.h" -#include "sli_tz_s_interface.h" - -#include "em_msc.h" - -//------------------------------------------------------------------------------ -// Function definitions - -/***************************************************************************//** - * @brief - * Initialize MSC module. Puts MSC hw in a known state. - ******************************************************************************/ -void MSC_Init(void) -{ - (void)sli_tz_ns_interface_dispatch_simple_noarg( - (sli_tz_veneer_simple_noarg_fn)sli_tz_s_interface_dispatch_simple_no_args, - SLI_TZ_MSC_INIT_SID); -} - -/***************************************************************************//** - * @brief - * Turn off MSC flash write enable and lock MSC registers. - ******************************************************************************/ -void MSC_Deinit(void) -{ - (void)sli_tz_ns_interface_dispatch_simple_noarg( - (sli_tz_veneer_simple_noarg_fn)sli_tz_s_interface_dispatch_simple_no_args, - SLI_TZ_MSC_DEINIT_SID); -} - -/***************************************************************************//** - * @brief - * Erases a page in flash memory. - * - * @note - * This function is placed in flash memory: care therefore needs to be taken - * in order to avoid erasing the flash page it lives in. - * - * @param[in] startAddress - * Pointer to the flash page to erase. Must be aligned to beginning of page - * boundary. - * @return - * Returns the status of erase operation, @ref MSC_Status_TypeDef - * @verbatim - * mscReturnOk - Operation completed successfully. - * mscReturnInvalidAddr - Operation tried to erase a non-flash area. - * flashReturnLocked - MSC registers are locked or the operation tried to - * erase a locked area of the flash. - * flashReturnTimeOut - Operation timed out. - * @endverbatim - ******************************************************************************/ -MSC_Status_TypeDef MSC_ErasePage(uint32_t *startAddress) -{ - return (MSC_Status_TypeDef)sli_tz_ns_interface_dispatch_simple( - (sli_tz_veneer_simple_fn)sli_tz_s_interface_dispatch_simple, - SLI_TZ_MSC_ERASE_PAGE_SID, - (uint32_t)startAddress); -} - -/***************************************************************************//** - * @brief - * Writes data to flash memory. Write data must be aligned to words and - * contain a number of bytes that is divisible by four. - * @note - * It is recommended to erase the flash page before performing a write. - * - * The Flash memory is organized into 64-bit wide double-words. - * Each 64-bit double-word can be written only twice using burst write - * operation between erasing cycles. The user's application must store data in - * RAM to sustain burst write operation. - * - * EFR32XG21 RevC is not able to program every word twice between erases. - * - * @param[in] address - * Pointer to the flash word to write to. Must be aligned to words. - * @param[in] data - * Data to write to flash. - * @param[in] numBytes - * Number of bytes to write to flash. NB: Must be divisable by four. - * @return - * Returns the status of the write operation, @ref MSC_Status_TypeDef - * @verbatim - * flashReturnOk - Operation completed successfully. - * flashReturnInvalidAddr - Operation tried to write to a non-flash area. - * flashReturnLocked - MSC registers are locked or the operation tried to - * program a locked area of the flash. - * flashReturnTimeOut - Operation timed out. - * @endverbatim - ******************************************************************************/ -MSC_Status_TypeDef MSC_WriteWord(uint32_t *address, - const void *data, - uint32_t numBytes) -{ - sli_tz_fn_id fn_id = SLI_TZ_SERVICE_MSC_WRITEWORD_SID; - sli_tz_invec in_vec[] = { - { .base = &fn_id, .len = sizeof(sli_tz_fn_id) }, - { .base = data, .len = numBytes }, - }; - sli_tz_outvec out_vec[] = { - { .base = address, .len = numBytes } - }; - - return (MSC_Status_TypeDef)sli_tz_ns_interface_dispatch( - (sli_tz_veneer_fn)sli_tz_s_interface_dispatch_msc, - (uint32_t)in_vec, - IOVEC_LEN(in_vec), - (uint32_t)out_vec, - IOVEC_LEN(out_vec)); -} - -/***************************************************************************//** - * @brief - * Writes data to flash memory using the DMA. - * - * @details - * This function uses the LDMA to write data to the internal flash memory. - * This is the fastest way to write data to the flash and should be used when - * the application wants to achieve write speeds like they are reported in the - * datasheet. Note that copying data from flash to flash will be slower than - * copying from RAM to flash. So the source data must be in RAM in order to - * see the write speeds similar to the datasheet numbers. - * - * In order to make use of the LDMA bus master, it first needs to be - * (re)configured as a TZ secure bus master. For security reasons, the non- - * secure application cannot be allowed to interrupt the exectution of the - * secure code during this time period. For this reason, this function will - * enter a critical region and wait until any ongoing LDMA operations have - * finished before performing the write operaion. - * - * @note - * This function requires that the LDMA and LDMAXBAR clock is enabled. - * - * @param[in] ch - * DMA channel to use - * - * @param[in] address - * A pointer to the flash word to write to. Must be aligned to words. - * - * @param[in] data - * Data to write to flash. - * - * @param[in] numBytes - * A number of bytes to write from flash. NB: Must be divisible by four. - * - * @return - * Returns the status of the write operation. - * @verbatim - * flashReturnOk - The operation completed successfully. - * flashReturnInvalidAddr - The operation tried to erase a non-flash area. - * @endverbatim - ******************************************************************************/ -MSC_Status_TypeDef MSC_WriteWordDma(int ch, - uint32_t *address, - const void *data, - uint32_t numBytes) -{ - sli_tz_fn_id fn_id = SLI_TZ_SERVICE_MSC_WRITEWORDDMA_SID; - sli_tz_invec in_vec[] = { - { .base = &fn_id, .len = sizeof(sli_tz_fn_id) }, - { .base = &ch, .len = sizeof(int) }, - { .base = data, .len = numBytes }, - }; - sli_tz_outvec out_vec[] = { - { .base = address, .len = numBytes } - }; - - return (MSC_Status_TypeDef)sli_tz_ns_interface_dispatch( - (sli_tz_veneer_fn)sli_tz_s_interface_dispatch_msc, - (uint32_t)in_vec, - IOVEC_LEN(in_vec), - (uint32_t)out_vec, - IOVEC_LEN(out_vec)); -} diff --git a/platform/security/sl_component/sl_trustzone/src/sli_tz_service_msc_s.c b/platform/security/sl_component/sl_trustzone/src/sli_tz_service_msc_s.c index b5cbdeca2a6..f53befd19ff 100644 --- a/platform/security/sl_component/sl_trustzone/src/sli_tz_service_msc_s.c +++ b/platform/security/sl_component/sl_trustzone/src/sli_tz_service_msc_s.c @@ -31,33 +31,7 @@ #include "sli_tz_service_msc.h" #include "sli_tz_iovec_check.h" -#include "em_device.h" #include "em_msc.h" -#include "em_core.h" - -//------------------------------------------------------------------------------ -// Macros - -// Note that we explicitly use the NS alias of the LDMA, since this macro is -// used before the LDMA is configured as a secure peripheral. -#define SLI_LDMA_NOT_READY() \ - (((LDMA_NS->STATUS & LDMA_STATUS_ANYBUSY) != 0) \ - || ((LDMA_NS->STATUS & LDMA_STATUS_ANYREQ) != 0)) - -// Devices with Memory Mapped LDMA (MMLDMA) IP have two AHB bus masters that are -// called LDMA0 and LDMA1, replacing the LDMA bus master in devices with earlier -// LDMA IP versions. The bus master to use is configured in the LDMA_CH_CFG -// register. However the sli_tz_msc_write_word_dma() function below calls the -// MSC_WriteWordDma() function which just applies the reset value of the CFG -// register (_LDMA_CH_CFG_RESETVALUE) which corresponds to LDMA0. Therefore -// we can translate SMU_BMPUSATD0_LDMA to SMU_BMPUSATD0_LDMA0 here: -#if !defined(SMU_BMPUSATD0_LDMA) - #if defined(SMU_BMPUSATD0_LDMA0) - #define SMU_BMPUSATD0_LDMA SMU_BMPUSATD0_LDMA0 - #else - #error Unsupported LDMA configuration. - #endif -#endif //------------------------------------------------------------------------------ // Function definitions @@ -119,102 +93,3 @@ uint32_t sli_tz_msc_set_misclockword(uint32_t value) MSC_MiscLockWordSet(value); return SLI_TZ_DISPATCH_UNUSED_RETVAL; } - -uint32_t sli_tz_msc_init(void) -{ - MSC_Init(); - return SLI_TZ_DISPATCH_UNUSED_RETVAL; -} - -uint32_t sli_tz_msc_deinit(void) -{ - MSC_Deinit(); - return SLI_TZ_DISPATCH_UNUSED_RETVAL; -} - -uint32_t sli_tz_msc_erase_page(uint32_t startAddress) -{ - return (uint32_t)MSC_ErasePage((uint32_t *)startAddress); -} - -//------------------------------------- -// Full services (IOVEC usage) - -int32_t sli_tz_msc_write_word(sli_tz_invec in_vec[], - size_t in_len, - sli_tz_outvec out_vec[], - size_t out_len) -{ - SLI_TZ_IOVEC_ASSERT_N_IOVECS(2, 1); - - const void *data = in_vec[1].base; - uint32_t numBytes = in_vec[1].len; - uint32_t *address = out_vec[0].base; - - return (uint32_t)MSC_WriteWord(address, data, numBytes); -} - -int32_t sli_tz_msc_write_word_dma(sli_tz_invec in_vec[], - size_t in_len, - sli_tz_outvec out_vec[], - size_t out_len) -{ - SLI_TZ_IOVEC_ASSERT_N_IOVECS(3, 1); - - SLI_TZ_IOVEC_ASSERT_STRUCT_SIZE(in_vec[1], int); - - int ch = *((int *)in_vec[1].base); - const void *data = in_vec[2].base; - uint32_t numBytes = in_vec[2].len; - uint32_t *address = out_vec[0].base; - - // Enter a critical section in order to avoid being interrupted while the LDMA - // is configured as a secure bus master. - CORE_DECLARE_IRQ_STATE; - CORE_ENTER_CRITICAL(); - - // Wait for LDMA to finish any ongoing operation before configuring it as a - // secure bus master. - uint32_t timeOut = MSC_PROGRAM_TIMEOUT; - while (SLI_LDMA_NOT_READY() && (timeOut != 0)) { - timeOut--; - } - if (timeOut == 0) { - CORE_EXIT_CRITICAL(); - return mscReturnTimeOut; - } - - // Make sure that the LDMA is configured as a secure bus master before - // staring the operation. If we did not do this, and the LDMA is configured as - // non-secure, the LDMA would not be able to write to the MSC registers. - #if (_SILICON_LABS_32B_SERIES_2_CONFIG > 1) - CMU->CLKEN1_SET = CMU_CLKEN1_SMU; - #endif - SMU->LOCK = SMU_LOCK_SMULOCKKEY_UNLOCK; - uint32_t prev_bus_master_state = SMU->BMPUSATD0 & SMU_BMPUSATD0_LDMA; - SMU->BMPUSATD0_SET = SMU_BMPUSATD0_LDMA; - - // We also configure the LDMA and LDMAXBAR peripherals as secure during the - // MSC operation. This should technically not be needed since we're in a - // critical region, however, it is done as an additional security measure. - uint32_t prev_peripherals_state = SMU->PPUSATD0 - & (SMU_PPUSATD0_LDMA - | SMU_PPUSATD0_LDMAXBAR); - SMU->PPUSATD0_SET = SMU_PPUSATD0_LDMA | SMU_PPUSATD0_LDMAXBAR; - - uint32_t status = (uint32_t)MSC_WriteWordDma(ch, address, data, numBytes); - - // Restore security attributes and wrap up SMU usage. - SMU->BMPUSATD0_TGL = SMU_BMPUSATD0_LDMA ^ prev_bus_master_state; - SMU->PPUSATD0_TGL = (SMU_PPUSATD0_LDMA - | SMU_PPUSATD0_LDMAXBAR) - ^ prev_peripherals_state; - SMU->LOCK = 0; - #if (_SILICON_LABS_32B_SERIES_2_CONFIG > 1) - CMU->CLKEN1_CLR = CMU_CLKEN1_SMU; - #endif - - CORE_EXIT_CRITICAL(); - - return status; -} diff --git a/platform/security/sl_component/sl_trustzone/src/sli_tz_service_nvm3_s.c b/platform/security/sl_component/sl_trustzone/src/sli_tz_service_nvm3_s.c index 37efa466911..c975c6a482a 100644 --- a/platform/security/sl_component/sl_trustzone/src/sli_tz_service_nvm3_s.c +++ b/platform/security/sl_component/sl_trustzone/src/sli_tz_service_nvm3_s.c @@ -28,8 +28,6 @@ * ******************************************************************************/ -// TODO: add IPC mode code - #include #include @@ -37,25 +35,26 @@ #include "tfm_nvm3_include.h" -#if defined(TFM_CONFIG_SL_SECURE_LIBRARY) #include "psa/crypto_types.h" #include "psa/client.h" + +#include "mbedtls/platform.h" + #include "sli_tz_service_nvm3.h" #include "sli_tz_iovec_check.h" -#else // defined(TFM_CONFIG_SL_SECURE_LIBRARY) -#ifndef TFM_PSA_API -#include "tfm_secure_api.h" -#endif -#endif // defined(TFM_CONFIG_SL_SECURE_LIBRARY) + +//------------------------------------------------------------------------------ +// Global variables nvm3_Handle_t nvm3_defaultHandleData; nvm3_Handle_t *nvm3_defaultHandle = &nvm3_defaultHandleData; -psa_status_t tfm_nvm3_init(void) -{ - // This init function is required by TFM and not used otherwise. - return PSA_SUCCESS; -} +// Pointers to caches allocated for different NVM3 instances. Index 0 is used by +// the default instance -- SLI_TZ_SERVICE_NVM3_INSTANCE_CACHE_START_INDEX. +nvm3_CacheEntry_t *sli_tz_nvm3_caches[SLI_TZ_SERVICE_NVM3_MAX_INSTANCES] = { 0 }; + +//------------------------------------------------------------------------------ +// Common (ITS and NVM3) service functions psa_status_t tfm_nvm3_init_default(psa_invec in_vec[], size_t in_len, @@ -67,26 +66,52 @@ psa_status_t tfm_nvm3_init_default(psa_invec in_vec[], SLI_TZ_IOVEC_ASSERT_STRUCT_SIZE(in_vec[1], nvm3_Init_t); SLI_TZ_IOVEC_ASSERT_STRUCT_SIZE(out_vec[0], Ecode_t); - // Copy the provided init data into a new struct, such that the hal handle can be - // modified without changing the original struct. + // Copy the provided init data into a new struct, such that the original + // remains untouched (which is expected since it's a const parameter). nvm3_Init_t init_data = *((nvm3_Init_t *)in_vec[1].base); - if (init_data.halHandle != NULL) { - // The flash handle must explicitly be set to NULL by NS to make it clear that - // that the Secure-side flash handle will be used instead. We don't want to - // make the NS side believe it can provide its own flash handle. + + if (init_data.halHandle != NULL + || init_data.cachePtr != NULL) { + // The flash handle- and cache pointers must explicitly be set to NULL by NS + // to make it clear that it allow the secure application to manage these + // aspects of NVM3. We don't want to make the NS side believe it can provide + // its own pointers for these parameters. return PSA_ERROR_PROGRAMMER_ERROR; } - // Overwrite NULL pointer with actual flash handle defined in nvm3_hal_flash.c + // Overwrite NULL pointer with actual flash handle defined in nvm3_hal_flash.c. extern const nvm3_HalHandle_t nvm3_halFlashHandle; init_data.halHandle = &nvm3_halFlashHandle; + // Install a pointer to the cache (either a newly allocated one, or the + // existing one if we're reopening the instance). + if (nvm3_defaultHandle->hasBeenOpened) { + if (sli_tz_nvm3_caches[0] == NULL) { + return PSA_ERROR_BAD_STATE; + } + } else { + // Allocate a new cache for the default instance. + sli_tz_nvm3_caches[0] = + (nvm3_CacheEntry_t *)mbedtls_calloc(init_data.cacheEntryCount, + sizeof(nvm3_CacheEntry_t)); + if (sli_tz_nvm3_caches[0] == NULL) { + return PSA_ERROR_INSUFFICIENT_MEMORY; + } + } + init_data.cachePtr = sli_tz_nvm3_caches[0]; + Ecode_t *nvm3_status = out_vec[0].base; - // We use nvm3_open() instead of nvm3_initDefault() in order to be able to provide - // the updated default init data. + // We use nvm3_open() instead of nvm3_initDefault() in order to be able to + // provide the updated default init data. *nvm3_status = nvm3_open(nvm3_defaultHandle, &init_data); + if (*nvm3_status != ECODE_NVM3_OK + && *nvm3_status != ECODE_NVM3_ERR_OPENED_WITH_OTHER_PARAMETERS) { + mbedtls_free(sli_tz_nvm3_caches[0]); + sli_tz_nvm3_caches[0] = NULL; + } + return PSA_SUCCESS; } @@ -104,10 +129,17 @@ psa_status_t tfm_nvm3_deinit_default(psa_invec in_vec[], *nvm3_status = nvm3_close(nvm3_defaultHandle); + mbedtls_free(sli_tz_nvm3_caches[0]); + sli_tz_nvm3_caches[0] = NULL; + return PSA_SUCCESS; } +//------------------------------------------------------------------------------ +// NVM3-exclusive service functions + #if defined(TZ_SERVICE_NVM3_PRESENT) + psa_status_t tfm_nvm3_read_partial_data(psa_invec in_vec[], size_t in_len, psa_outvec out_vec[], @@ -130,10 +162,6 @@ psa_status_t tfm_nvm3_read_partial_data(psa_invec in_vec[], void *value = out_vec[1].base; size_t len = out_vec[1].len; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_readPartialData(h, key, value, ofs, len); return PSA_SUCCESS; @@ -159,10 +187,6 @@ psa_status_t tfm_nvm3_read_data(psa_invec in_vec[], void *value = out_vec[1].base; size_t len = out_vec[1].len; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_readData(h, key, value, len); return PSA_SUCCESS; @@ -188,10 +212,6 @@ psa_status_t tfm_nvm3_write_data(psa_invec in_vec[], // Output arguments Ecode_t *nvm3_status = out_vec[0].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_writeData(h, key, value, len); return PSA_SUCCESS; @@ -215,10 +235,6 @@ psa_status_t tfm_nvm3_delete_object(psa_invec in_vec[], // Output arguments Ecode_t *nvm3_status = out_vec[0].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_deleteObject(h, key); return PSA_SUCCESS; @@ -236,26 +252,68 @@ psa_status_t tfm_nvm3_open(psa_invec in_vec[], SLI_TZ_IOVEC_ASSERT_STRUCT_SIZE(out_vec[1], nvm3_Handle_t); // Input arguments - nvm3_Init_t *i = (nvm3_Init_t *)in_vec[1].base; + // Copy the provided init data into a new struct, such that the original + // remains untouched (which is expected since it's a const parameter). + nvm3_Init_t init_data = *((nvm3_Init_t *)in_vec[1].base); // Output arguments Ecode_t *nvm3_status = out_vec[0].base; - nvm3_Handle_t *h = (nvm3_Handle_t *)out_vec[1].base; - - if (i->halHandle != NULL) { - // The flash handle must explicitly be set to NULL by NS to make it clear that - // that the Secure-side flash handle will be used instead. We don't want to - // make the NS side believe it can provide its own flash handle. + nvm3_Handle_t *handle = (nvm3_Handle_t *)out_vec[1].base; + + if (init_data.halHandle != NULL + || init_data.cachePtr != NULL) { + // The flash handle- and cache pointers must explicitly be set to NULL by NS + // to make it clear that it allow the secure application to manage these + // aspects of NVM3. We don't want to make the NS side believe it can provide + // its own pointers for these parameters. return PSA_ERROR_PROGRAMMER_ERROR; } - // Overwrite NULL pointer with actual flash handle defined in nvm3_hal_flash.c + // Overwrite NULL pointer with actual flash handle defined in nvm3_hal_flash.c. extern const nvm3_HalHandle_t nvm3_halFlashHandle; - i->halHandle = &nvm3_halFlashHandle; + init_data.halHandle = &nvm3_halFlashHandle; + + // Install a pointer to the cache (either a newly allocated one, or the + // existing one if we're reopening the instance). + nvm3_CacheEntry_t **cache = NULL; + if (handle->hasBeenOpened) { + for (size_t i = SLI_TZ_SERVICE_NVM3_NON_DEFAULT_INSTANCE_CACHE_START_INDEX; + i < SLI_TZ_SERVICE_NVM3_MAX_INSTANCES; + ++i) { + if (sli_tz_nvm3_caches[i] == handle->cache.entryPtr) { + init_data.cachePtr = sli_tz_nvm3_caches[i]; + cache = &sli_tz_nvm3_caches[i]; + break; + } + } + } else { + for (size_t i = SLI_TZ_SERVICE_NVM3_NON_DEFAULT_INSTANCE_CACHE_START_INDEX; + i < SLI_TZ_SERVICE_NVM3_MAX_INSTANCES; + ++i) { + if (sli_tz_nvm3_caches[i] == NULL) { + init_data.cachePtr = + (nvm3_CacheEntry_t *)mbedtls_calloc(init_data.cacheEntryCount, + sizeof(nvm3_CacheEntry_t)); + if (init_data.cachePtr == NULL) { + return PSA_ERROR_INSUFFICIENT_MEMORY; + } + sli_tz_nvm3_caches[i] = init_data.cachePtr; + cache = &sli_tz_nvm3_caches[i]; + break; + } + } + } + if (init_data.cachePtr == NULL) { + return PSA_ERROR_BAD_STATE; + } - /* check if base is in NS */ + *nvm3_status = nvm3_open(handle, &init_data); - *nvm3_status = nvm3_open(h, i); + if (*nvm3_status != ECODE_NVM3_OK + && *nvm3_status != ECODE_NVM3_ERR_OPENED_WITH_OTHER_PARAMETERS) { + mbedtls_free(*cache); + *cache = NULL; + } return PSA_SUCCESS; } @@ -276,12 +334,21 @@ psa_status_t tfm_nvm3_close(psa_invec in_vec[], // Output arguments Ecode_t *nvm3_status = out_vec[0].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; + nvm3_CacheEntry_t **cache = NULL; + for (size_t i = SLI_TZ_SERVICE_NVM3_NON_DEFAULT_INSTANCE_CACHE_START_INDEX; + i < SLI_TZ_SERVICE_NVM3_MAX_INSTANCES; + ++i) { + if (sli_tz_nvm3_caches[i] == h->cache.entryPtr) { + cache = &sli_tz_nvm3_caches[i]; + break; + } } *nvm3_status = nvm3_close(h); + mbedtls_free(*cache); + *cache = NULL; + return PSA_SUCCESS; } @@ -307,10 +374,6 @@ psa_status_t tfm_nvm3_get_object_info(psa_invec in_vec[], uint32_t *type = (uint32_t *)out_vec[1].base; size_t *len = (size_t *)out_vec[2].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_getObjectInfo(h, key, type, len); return PSA_SUCCESS; @@ -336,10 +399,6 @@ psa_status_t tfm_nvm3_write_counter(psa_invec in_vec[], // Output arguments Ecode_t *nvm3_status = out_vec[0].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_writeCounter(h, key, value); return PSA_SUCCESS; @@ -365,10 +424,6 @@ psa_status_t tfm_nvm3_read_counter(psa_invec in_vec[], Ecode_t *nvm3_status = out_vec[0].base; uint32_t *value = (uint32_t *)out_vec[1].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_readCounter(h, key, value); return PSA_SUCCESS; @@ -400,10 +455,6 @@ psa_status_t tfm_nvm3_increment_counter(psa_invec in_vec[], Ecode_t *nvm3_status = out_vec[0].base; uint32_t *new_value = (uint32_t *)out_vec[1].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_incrementCounter(h, key, new_value); return PSA_SUCCESS; @@ -425,10 +476,6 @@ psa_status_t tfm_nvm3_erase_all(psa_invec in_vec[], // Output arguments Ecode_t *nvm3_status = out_vec[0].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_eraseAll(h); return PSA_SUCCESS; @@ -452,10 +499,6 @@ psa_status_t tfm_nvm3_get_erase_count(psa_invec in_vec[], Ecode_t *nvm3_status = out_vec[0].base; uint32_t *erase_cnt = (uint32_t *)out_vec[1].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_getEraseCount(h, erase_cnt); return PSA_SUCCESS; @@ -482,8 +525,6 @@ psa_status_t tfm_nvm3_set_erase_count(psa_invec in_vec[], return PSA_SUCCESS; } -/* Ecode_t nvm3_repack(nvm3_Handle_t *h); */ - psa_status_t tfm_nvm3_repack(psa_invec in_vec[], size_t in_len, psa_outvec out_vec[], @@ -500,10 +541,6 @@ psa_status_t tfm_nvm3_repack(psa_invec in_vec[], // Output arguments Ecode_t *nvm3_status = out_vec[0].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_repack(h); return PSA_SUCCESS; @@ -525,10 +562,6 @@ psa_status_t tfm_nvm3_repack_needed(psa_invec in_vec[], // Output arguments bool *nvm3_status = out_vec[0].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_repackNeeded(h); return PSA_SUCCESS; @@ -554,10 +587,6 @@ psa_status_t tfm_nvm3_resize(psa_invec in_vec[], // Output arguments Ecode_t *nvm3_status = out_vec[0].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *nvm3_status = nvm3_resize(h, new_addr, new_size); return PSA_SUCCESS; @@ -593,10 +622,6 @@ psa_status_t tfm_nvm3_enum_objects(psa_invec in_vec[], size_t *ret_val = out_vec[0].base; nvm3_ObjectKey_t *key_list_ptr = (nvm3_ObjectKey_t *)out_vec[1].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *ret_val = nvm3_enumObjects(h, key_list_ptr, key_list_size, key_min, key_max); return PSA_SUCCESS; @@ -632,12 +657,9 @@ psa_status_t tfm_nvm3_enum_deleted_objects(psa_invec in_vec[], size_t *ret_val = out_vec[0].base; nvm3_ObjectKey_t *key_list_ptr = (nvm3_ObjectKey_t *)out_vec[1].base; - if (h->nvmAdr == NULL) { - h = nvm3_defaultHandle; - } - *ret_val = nvm3_enumDeletedObjects(h, key_list_ptr, key_list_size, key_min, key_max); return PSA_SUCCESS; } -#endif // defined(TZ_SERVICE_NVM3_PRESENT) + +#endif // TZ_SERVICE_NVM3_PRESENT diff --git a/platform/service/cli/src/sl_cli_input.c b/platform/service/cli/src/sl_cli_input.c index 101f909e1e9..45473b8372a 100644 --- a/platform/service/cli/src/sl_cli_input.c +++ b/platform/service/cli/src/sl_cli_input.c @@ -34,6 +34,7 @@ #include "sli_cli_input.h" #include "sl_cli_command.h" #include "sli_cli_io.h" +#include "sl_string.h" #include #include #include @@ -314,7 +315,7 @@ void sl_cli_input_autocomplete(sl_cli_handle_t handle) #if SL_CLI_NUM_HISTORY_BYTES void sli_cli_input_update_history(sl_cli_handle_t handle) { - while ((strlen(handle->input_buffer) + 1) > (sizeof(handle->history_buf) - strlen(handle->history_buf))) { + while ((sl_strnlen(handle->input_buffer, sizeof(handle->input_buffer)) + 1) > (sizeof(handle->history_buf) - sl_strnlen(handle->history_buf, sizeof(handle->history_buf)))) { // Remove the oldest history string(s) to make space for the last size_t history_cnt = history_get_count(handle); size_t ofs_begin, ofs_end; diff --git a/platform/service/cpc/src/sl_cpc.c b/platform/service/cpc/src/sl_cpc.c index b1a7055713f..a112170fcf2 100644 --- a/platform/service/cpc/src/sl_cpc.c +++ b/platform/service/cpc/src/sl_cpc.c @@ -2235,15 +2235,45 @@ static sl_status_t re_transmit_frame(sl_cpc_endpoint_t* endpoint) sl_cpc_transmit_queue_item_t *item; sl_slist_node_t *item_node; bool free_hdlc_header = true; + MCU_DECLARE_IRQ_STATE; EFM_ASSERT(endpoint != NULL); - MCU_ATOMIC_SECTION(item_node = SLI_CPC_POP_BUFFER_HANDLE_LIST(&endpoint->re_transmit_queue, sl_cpc_transmit_queue_item_t); ); + MCU_ENTER_ATOMIC(); + item_node = SLI_CPC_POP_BUFFER_HANDLE_LIST(&endpoint->re_transmit_queue, sl_cpc_transmit_queue_item_t); if (item_node == NULL) { + MCU_EXIT_ATOMIC(); + return SL_STATUS_NOT_AVAILABLE; } item = SL_SLIST_ENTRY(item_node, sl_cpc_transmit_queue_item_t, node); + if (item->handle->ref_count > 0) { + // If ref_count is greater than 0, it means that the buffer is still + // currently owned by the SPI/UART driver. This is possible for instance + // with the following scenario: + // 1. buffer handle is transmitted + // 2. tx complete callback is called, timeout timer is armed + // 3. host sends a reject CRC error, re_transmit_frame is called + // immediately and the packet is put in the transmit_queue + // 4. process_tx_queue is called, buffer handle is sent to the driver for + // transmission, and the core moves the buffer handle from the global + // transmit_queue to endpoint's re_transmit_queue for bookkeeping + // 5. timeout callback, from timer armed during step 2, calls this + // function. + // + // Step 5 can happen before the tx complete callback of retransmission + // done at step 4 is called, so it's necessary to check if the buffer + // handle is still owned by the driver before going forward. + + // if that happened, put back buffer handle at the front of the retransmit queue + sli_cpc_push_buffer_handle(&endpoint->re_transmit_queue, &item->node, item->handle); + MCU_EXIT_ATOMIC(); + + return SL_STATUS_NOT_AVAILABLE; + } + MCU_EXIT_ATOMIC(); + #if defined(SLI_CPC_ENABLE_TEST_FEATURES) sli_cpc_on_frame_retransmit(item); #endif @@ -2263,11 +2293,13 @@ static sl_status_t re_transmit_frame(sl_cpc_endpoint_t* endpoint) item->handle->hdlc_header = NULL; } - //Put frame in Tx Q so that it can be transmitted by CPC Core later - MCU_ATOMIC_SECTION(sli_cpc_push_buffer_handle(&transmit_queue, &item->node, item->handle); ); + // Put frame in Tx Q so that it can be transmitted by CPC Core later + MCU_ENTER_ATOMIC(); + sli_cpc_push_buffer_handle(&transmit_queue, &item->node, item->handle); endpoint->packet_re_transmit_count++; endpoint->frames_count_re_transmit_queue--; + MCU_EXIT_ATOMIC(); // Signal task/process_action that frame is in Tx Queue sli_cpc_signal_event(SL_CPC_SIGNAL_TX); diff --git a/platform/service/cpc/src/sl_cpc_drv_secondary_uart_eusart.c b/platform/service/cpc/src/sl_cpc_drv_secondary_uart_eusart.c index 249bc4b4e7a..e3ec906ab08 100644 --- a/platform/service/cpc/src/sl_cpc_drv_secondary_uart_eusart.c +++ b/platform/service/cpc/src/sl_cpc_drv_secondary_uart_eusart.c @@ -161,6 +161,7 @@ static bool restart_dma = false; #endif static volatile bool resync_completed = false; +static volatile uint16_t ignore_hdlc_flag_during_resync_count = 0; /******************************************************************************* ************************** LOCAL FUNCTIONS ******************************** ******************************************************************************/ @@ -388,19 +389,12 @@ sl_status_t sli_cpc_drv_init(void) rx_descriptor_head = current_desc; // Start read channel - ecode = DMADRV_LdmaStartTransfer(read_channel, - &rx_config, - current_desc, - rx_dma_complete, - 0); - if (ecode != ECODE_OK) { - EFM_ASSERT(false); - return SL_STATUS_FAIL; - } + start_re_synch(); #if defined(SL_CATALOG_POWER_MANAGER_PRESENT) sl_power_manager_add_em_requirement(SL_POWER_MANAGER_EM1); #endif + return SL_STATUS_OK; } @@ -711,6 +705,8 @@ void sli_cpc_memory_on_rx_buffer_free(void) ******************************************************************************/ void SL_CPC_ISR_RX_HANDLER(SL_CPC_DRV_UART_PERIPHERAL_NO)(void) { + static uint16_t hdlc_header_flag_received = 0; + CORE_DECLARE_IRQ_STATE; CORE_ENTER_ATOMIC(); @@ -735,26 +731,37 @@ void SL_CPC_ISR_RX_HANDLER(SL_CPC_DRV_UART_PERIPHERAL_NO)(void) EFM_ASSERT(header_expected_next == true); // Can't resync when waiting for a payload if (data == SLI_CPC_HDLC_FLAG_VAL) { - // Get rid of any pending IRQ, we're done with the resync - EUSART_IntDisable(SL_CPC_DRV_UART_PERIPHERAL, EUSART_IEN_RXFL); - - // Already received first byte (HDLC FLAG) and RXCOUNT needs to be expected value -1 - EFM_ASSERT(rx_need_desc == false); - EFM_ASSERT(rx_descriptor_head != NULL); - rx_descriptor_head->xfer.xferCnt = SLI_CPC_HDLC_HEADER_RAW_SIZE - 2u; - - // Start read channel - Ecode_t ecode = DMADRV_LdmaStartTransfer(read_channel, - &rx_config, - rx_descriptor_head, - rx_dma_complete, - 0); - EFM_ASSERT(ecode == ECODE_OK); - - resync_completed = true; - - if (NVIC_GetPendingIRQ(SL_CPC_RX_IRQn(SL_CPC_DRV_UART_PERIPHERAL_NO)) != 0) { - NVIC_ClearPendingIRQ(SL_CPC_RX_IRQn(SL_CPC_DRV_UART_PERIPHERAL_NO)); + hdlc_header_flag_received++; + + // It's possible that we tried to resync on the end of a payload that contained + // a HDLC header flag. While this method is less than ideal, it allows us to + // ignore that byte and attemp to resync on the next HDLC header flag + if (hdlc_header_flag_received > ignore_hdlc_flag_during_resync_count) { + hdlc_header_flag_received = 0; + // Get rid of any pending IRQ, we're done with the resync + EUSART_IntDisable(SL_CPC_DRV_UART_PERIPHERAL, EUSART_IEN_RXFL); + + // Already received first byte (HDLC FLAG) and RXCOUNT needs to be expected value -1 + EFM_ASSERT(rx_need_desc == false); + EFM_ASSERT(rx_descriptor_head != NULL); + rx_descriptor_head->xfer.xferCnt = SLI_CPC_HDLC_HEADER_RAW_SIZE - 2u; + + // Start read channel + Ecode_t ecode = DMADRV_LdmaStartTransfer(read_channel, + &rx_config, + rx_descriptor_head, + rx_dma_complete, + 0); + EFM_ASSERT(ecode == ECODE_OK); + + // Restore XferCnt + rx_descriptor_head->xfer.xferCnt = ((SLI_CPC_RX_DATA_MAX_LENGTH < DMA_MAX_XFER_LEN) ? SLI_CPC_RX_DATA_MAX_LENGTH : DMA_MAX_XFER_LEN) - 1; + + resync_completed = true; + + if (NVIC_GetPendingIRQ(SL_CPC_RX_IRQn(SL_CPC_DRV_UART_PERIPHERAL_NO)) != 0) { + NVIC_ClearPendingIRQ(SL_CPC_RX_IRQn(SL_CPC_DRV_UART_PERIPHERAL_NO)); + } } } } @@ -814,6 +821,7 @@ static bool rx_dma_complete(unsigned int channel, uint16_t current_rx_buf_tot_len; bool rx_buf_free; bool dma_stopped = false; + bool resync_occured = false; (void)channel; (void)sequenceNo; @@ -842,6 +850,7 @@ static bool rx_dma_complete(unsigned int channel, next_rx_buf_tot_len = SLI_CPC_HDLC_HEADER_RAW_SIZE; memmove(rx_buffer + 1, rx_buffer, SLI_CPC_HDLC_HEADER_RAW_SIZE); rx_buffer[0] = SLI_CPC_HDLC_FLAG_VAL; + resync_occured = true; } EFM_ASSERT(completed_desc != NULL); @@ -887,6 +896,9 @@ static bool rx_dma_complete(unsigned int channel, // Validate HCS hcs = sli_cpc_hdlc_get_hcs(current_rx_buffer); if (!sli_cpc_validate_crc_sw(current_rx_buffer, SLI_CPC_HDLC_HEADER_SIZE, hcs)) { + if (resync_occured) { + ignore_hdlc_flag_during_resync_count++; + } DMADRV_StopTransfer(read_channel); SLI_CPC_DEBUG_TRACE_CORE_DRIVER_PACKET_DROPPED(); @@ -903,6 +915,7 @@ static bool rx_dma_complete(unsigned int channel, return false; } + ignore_hdlc_flag_during_resync_count = 0; next_rx_payload_len = sli_cpc_hdlc_get_length(current_rx_buffer); if (rx_need_desc diff --git a/platform/service/cpc/src/sl_cpc_drv_secondary_uart_usart.c b/platform/service/cpc/src/sl_cpc_drv_secondary_uart_usart.c index 73af8538e38..be6ffbd94e3 100644 --- a/platform/service/cpc/src/sl_cpc_drv_secondary_uart_usart.c +++ b/platform/service/cpc/src/sl_cpc_drv_secondary_uart_usart.c @@ -147,6 +147,7 @@ static bool restart_dma = false; #endif static volatile bool resync_completed = false; +static volatile uint16_t ignore_hdlc_flag_during_resync_count = 0; /******************************************************************************* ************************** LOCAL FUNCTIONS ******************************** ******************************************************************************/ @@ -375,15 +376,7 @@ sl_status_t sli_cpc_drv_init(void) rx_descriptor_head = current_desc; // Start read channel - ecode = DMADRV_LdmaStartTransfer(read_channel, - &rx_config, - current_desc, - rx_dma_complete, - 0); - if (ecode != ECODE_OK) { - EFM_ASSERT(false); - return SL_STATUS_FAIL; - } + start_re_synch(); #if defined(SL_CATALOG_POWER_MANAGER_PRESENT) sl_power_manager_add_em_requirement(SL_POWER_MANAGER_EM1); @@ -695,6 +688,8 @@ void sli_cpc_memory_on_rx_buffer_free(void) ******************************************************************************/ void SL_CPC_ISR_RX_HANDLER(SL_CPC_DRV_UART_PERIPHERAL_NO)(void) { + static uint16_t hdlc_header_flag_received = 0; + CORE_DECLARE_IRQ_STATE; CORE_ENTER_ATOMIC(); @@ -719,26 +714,37 @@ void SL_CPC_ISR_RX_HANDLER(SL_CPC_DRV_UART_PERIPHERAL_NO)(void) EFM_ASSERT(header_expected_next == true); // Can't resync when waiting for a payload if (data == SLI_CPC_HDLC_FLAG_VAL) { - // Get rid of any pending IRQ, we're done with the resync - USART_IntDisable(SL_CPC_DRV_UART_PERIPHERAL, USART_IF_RXDATAV); - - // Already received first byte (HDLC FLAG) and RXCOUNT needs to be expected value -1 - EFM_ASSERT(rx_need_desc == false); - EFM_ASSERT(rx_descriptor_head != NULL); - rx_descriptor_head->xfer.xferCnt = SLI_CPC_HDLC_HEADER_RAW_SIZE - 2u; - - // Start read channel - Ecode_t ecode = DMADRV_LdmaStartTransfer(read_channel, - &rx_config, - rx_descriptor_head, - rx_dma_complete, - 0); - EFM_ASSERT(ecode == ECODE_OK); - - resync_completed = true; - - if (NVIC_GetPendingIRQ(SL_CPC_RX_IRQn(SL_CPC_DRV_UART_PERIPHERAL_NO)) != 0) { - NVIC_ClearPendingIRQ(SL_CPC_RX_IRQn(SL_CPC_DRV_UART_PERIPHERAL_NO)); + hdlc_header_flag_received++; + + // It's possible that we tried to resync on the end of a payload that contained + // a HDLC header flag. While this method is less than ideal, it allows us to + // ignore that byte and attemp to resync on the next HDLC header flag + if (hdlc_header_flag_received > ignore_hdlc_flag_during_resync_count) { + hdlc_header_flag_received = 0; + // Get rid of any pending IRQ, we're done with the resync + USART_IntDisable(SL_CPC_DRV_UART_PERIPHERAL, USART_IF_RXDATAV); + + // Already received first byte (HDLC FLAG) and RXCOUNT needs to be expected value -1 + EFM_ASSERT(rx_need_desc == false); + EFM_ASSERT(rx_descriptor_head != NULL); + rx_descriptor_head->xfer.xferCnt = SLI_CPC_HDLC_HEADER_RAW_SIZE - 2u; + + // Start read channel + Ecode_t ecode = DMADRV_LdmaStartTransfer(read_channel, + &rx_config, + rx_descriptor_head, + rx_dma_complete, + 0); + EFM_ASSERT(ecode == ECODE_OK); + + // Restore XferCnt + rx_descriptor_head->xfer.xferCnt = ((SLI_CPC_RX_DATA_MAX_LENGTH < DMA_MAX_XFER_LEN) ? SLI_CPC_RX_DATA_MAX_LENGTH : DMA_MAX_XFER_LEN) - 1; + + resync_completed = true; + + if (NVIC_GetPendingIRQ(SL_CPC_RX_IRQn(SL_CPC_DRV_UART_PERIPHERAL_NO)) != 0) { + NVIC_ClearPendingIRQ(SL_CPC_RX_IRQn(SL_CPC_DRV_UART_PERIPHERAL_NO)); + } } } } @@ -798,6 +804,7 @@ static bool rx_dma_complete(unsigned int channel, uint16_t current_rx_buf_tot_len; bool rx_buf_free; bool dma_stopped = false; + bool resync_occured = false; (void)channel; (void)sequenceNo; @@ -826,6 +833,7 @@ static bool rx_dma_complete(unsigned int channel, next_rx_buf_tot_len = SLI_CPC_HDLC_HEADER_RAW_SIZE; memmove(rx_buffer + 1, rx_buffer, SLI_CPC_HDLC_HEADER_RAW_SIZE); rx_buffer[0] = SLI_CPC_HDLC_FLAG_VAL; + resync_occured = true; } EFM_ASSERT(completed_desc != NULL); @@ -871,6 +879,9 @@ static bool rx_dma_complete(unsigned int channel, // Validate HCS hcs = sli_cpc_hdlc_get_hcs(current_rx_buffer); if (!sli_cpc_validate_crc_sw(current_rx_buffer, SLI_CPC_HDLC_HEADER_SIZE, hcs)) { + if (resync_occured) { + ignore_hdlc_flag_during_resync_count++; + } DMADRV_StopTransfer(read_channel); SLI_CPC_DEBUG_TRACE_CORE_DRIVER_PACKET_DROPPED(); @@ -887,6 +898,7 @@ static bool rx_dma_complete(unsigned int channel, return false; } + ignore_hdlc_flag_during_resync_count = 0; next_rx_payload_len = sli_cpc_hdlc_get_length(current_rx_buffer); if (rx_need_desc diff --git a/platform/service/cpc/src/sl_cpc_system_secondary.c b/platform/service/cpc/src/sl_cpc_system_secondary.c index 3375e3347dd..17c3a7530eb 100644 --- a/platform/service/cpc/src/sl_cpc_system_secondary.c +++ b/platform/service/cpc/src/sl_cpc_system_secondary.c @@ -77,7 +77,11 @@ static bool restart_flag = false; static uint32_t enter_irq_end_ms; static sli_cpc_timer_handle_t enter_irq_timer; +#ifdef CPC_TEST_HEADER_SYNC +static bool process_uframes_flag = true; +#else static bool process_uframes_flag = false; +#endif static uint32_t fc_validation_value; diff --git a/platform/service/iostream/init/sl_iostream_init_eusart_instances.c.jinja b/platform/service/iostream/init/sl_iostream_init_eusart_instances.c.jinja index 030b34caf8b..133787397aa 100644 --- a/platform/service/iostream/init/sl_iostream_init_eusart_instances.c.jinja +++ b/platform/service/iostream/init/sl_iostream_init_eusart_instances.c.jinja @@ -163,8 +163,10 @@ static void events_handler(sl_power_manager_em_t from, (void) from; // Enable next byte detect to wake from sleep if (to < SL_POWER_MANAGER_EM3){ - {% for instance in iostream_eusart_instances %} - context_{{ instance }}.context.set_next_byte_detect(sl_iostream_{{ instance }}_handle->context, true); + {% for instance in iostream_eusart_instances %} + if (sl_iostream_{{ instance }}_handle->context != NULL) { + context_{{ instance }}.context.set_next_byte_detect(sl_iostream_{{ instance }}_handle->context, true); + } {% endfor %} } } diff --git a/platform/service/iostream/init/sl_iostream_init_eusart_instances.h.jinja b/platform/service/iostream/init/sl_iostream_init_eusart_instances.h.jinja index d8ac3fdc270..c8c6607dce9 100644 --- a/platform/service/iostream/init/sl_iostream_init_eusart_instances.h.jinja +++ b/platform/service/iostream/init/sl_iostream_init_eusart_instances.h.jinja @@ -19,7 +19,6 @@ void sl_iostream_eusart_init_instances(void); #if defined(SL_CATALOG_POWER_MANAGER_PRESENT) {% for instance in iostream_eusart_instances %} sl_power_manager_on_isr_exit_t sl_iostream_eusart_{{ instance }}_sleep_on_isr_exit(void); -bool sl_iostream_eusart_{{ instance }}_is_ok_to_sleep(void); {% endfor %} #endif diff --git a/platform/service/iostream/init/sl_iostream_init_leuart_instances.c.jinja b/platform/service/iostream/init/sl_iostream_init_leuart_instances.c.jinja index f1c2be775ce..33f2bbc49bc 100644 --- a/platform/service/iostream/init/sl_iostream_init_leuart_instances.c.jinja +++ b/platform/service/iostream/init/sl_iostream_init_leuart_instances.c.jinja @@ -132,7 +132,9 @@ static void events_handler(sl_power_manager_em_t from, if (to < SL_POWER_MANAGER_EM3){ {% for instance in iostream_leuart_instances %} // Enable next byte detection to wakeup from sleep on next byte - context_{{ instance }}.context.set_next_byte_detect(sl_iostream_{{ instance }}_handle->context, true); + if (sl_iostream_{{ instance }}_handle->context != NULL) { + context_{{ instance }}.context.set_next_byte_detect(sl_iostream_{{ instance }}_handle->context, true); + } {% endfor %} } diff --git a/platform/service/iostream/init/sl_iostream_init_leuart_instances.h.jinja b/platform/service/iostream/init/sl_iostream_init_leuart_instances.h.jinja index 2af11fc2e4c..5579b95f4a8 100644 --- a/platform/service/iostream/init/sl_iostream_init_leuart_instances.h.jinja +++ b/platform/service/iostream/init/sl_iostream_init_leuart_instances.h.jinja @@ -19,7 +19,6 @@ void sl_iostream_leuart_init_instances(void); #if defined(SL_CATALOG_POWER_MANAGER_PRESENT) {% for instance in iostream_leuart_instances %} sl_power_manager_on_isr_exit_t sl_iostream_leuart_{{ instance }}_sleep_on_isr_exit(void); -bool sl_iostream_leuart_{{ instance }}_is_ok_to_sleep(void); {% endfor %} #endif diff --git a/platform/service/iostream/init/sl_iostream_init_uart_instances.c.jinja b/platform/service/iostream/init/sl_iostream_init_uart_instances.c.jinja index a191823ea6d..b754bb3f5a5 100644 --- a/platform/service/iostream/init/sl_iostream_init_uart_instances.c.jinja +++ b/platform/service/iostream/init/sl_iostream_init_uart_instances.c.jinja @@ -164,7 +164,9 @@ static void events_handler(sl_power_manager_em_t from, if (to < SL_POWER_MANAGER_EM2){ {% for instance in iostream_uart_instances %} // Enable next byte detection to wakeup from sleep on next byte - context_{{ instance }}.context.set_next_byte_detect(sl_iostream_{{ instance }}_handle->context, true); + if (sl_iostream_{{ instance }}_handle->context != NULL) { + context_{{ instance }}.context.set_next_byte_detect(sl_iostream_{{ instance }}_handle->context, true); + } {% endfor %} } } diff --git a/platform/service/iostream/init/sl_iostream_init_uart_instances.h.jinja b/platform/service/iostream/init/sl_iostream_init_uart_instances.h.jinja index e1487506452..913709893c3 100644 --- a/platform/service/iostream/init/sl_iostream_init_uart_instances.h.jinja +++ b/platform/service/iostream/init/sl_iostream_init_uart_instances.h.jinja @@ -24,7 +24,6 @@ void sl_iostream_uart_init_instances(void); #if defined(SL_CATALOG_POWER_MANAGER_PRESENT) {% for instance in iostream_uart_instances %} sl_power_manager_on_isr_exit_t sl_iostream_uart_{{ instance }}_sleep_on_isr_exit(void); -bool sl_iostream_uart_{{ instance }}_is_ok_to_sleep(void); {% endfor %} #endif diff --git a/platform/service/iostream/init/sl_iostream_init_usart_instances.c.jinja b/platform/service/iostream/init/sl_iostream_init_usart_instances.c.jinja index a4ac291ea90..46816271998 100644 --- a/platform/service/iostream/init/sl_iostream_init_usart_instances.c.jinja +++ b/platform/service/iostream/init/sl_iostream_init_usart_instances.c.jinja @@ -219,7 +219,9 @@ static void events_handler(sl_power_manager_em_t from, if (to < SL_POWER_MANAGER_EM2){ {% for instance in iostream_usart_instances %} // Enable next byte detection to wakeup from sleep on next byte - context_{{ instance }}.context.set_next_byte_detect(sl_iostream_{{ instance }}_handle->context, true); + if (sl_iostream_{{ instance }}_handle->context != NULL) { + context_{{ instance }}.context.set_next_byte_detect(sl_iostream_{{ instance }}_handle->context, true); + } {% endfor %} } } diff --git a/platform/service/iostream/init/sl_iostream_init_usart_instances.h.jinja b/platform/service/iostream/init/sl_iostream_init_usart_instances.h.jinja index b515b3ab3a1..054779db5ce 100644 --- a/platform/service/iostream/init/sl_iostream_init_usart_instances.h.jinja +++ b/platform/service/iostream/init/sl_iostream_init_usart_instances.h.jinja @@ -24,7 +24,6 @@ void sl_iostream_usart_init_instances(void); #if defined(SL_CATALOG_POWER_MANAGER_PRESENT) {% for instance in iostream_usart_instances %} sl_power_manager_on_isr_exit_t sl_iostream_usart_{{ instance }}_sleep_on_isr_exit(void); -bool sl_iostream_usart_{{ instance }}_is_ok_to_sleep(void); {% endfor %} #endif diff --git a/platform/service/iostream/src/sl_iostream_eusart.c b/platform/service/iostream/src/sl_iostream_eusart.c index 550834d0bac..91d9ab2b974 100644 --- a/platform/service/iostream/src/sl_iostream_eusart.c +++ b/platform/service/iostream/src/sl_iostream_eusart.c @@ -454,6 +454,12 @@ static sl_status_t eusart_deinit(void *context) GPIO_PinModeSet(eusart_context->rts_port, eusart_context->rts_pin, gpioModeDisabled, 0); } + // Disable EUSART IRQ + #if defined(SL_CATALOG_POWER_MANAGER_PRESENT) && !defined(SL_IOSTREAM_UART_FLUSH_TX_BUFFER) + EUSART_IntDisable(eusart_context->eusart, EUSART_IF_TXC); + #endif + EUSART_IntDisable(eusart_context->eusart, EUSART_IF_RXFL); + // Disable EUSART peripheral EUSART_Enable(eusart_context->eusart, eusartDisable); diff --git a/platform/service/iostream/src/sl_iostream_leuart.c b/platform/service/iostream/src/sl_iostream_leuart.c index cb96ae218f7..b177dab637c 100644 --- a/platform/service/iostream/src/sl_iostream_leuart.c +++ b/platform/service/iostream/src/sl_iostream_leuart.c @@ -308,6 +308,12 @@ static sl_status_t leuart_deinit(void *context) GPIO_PinModeSet(leuart_context->tx_port, leuart_context->tx_pin, gpioModeDisabled, 0); GPIO_PinModeSet(leuart_context->rx_port, leuart_context->rx_pin, gpioModeDisabled, 0); + // Disable LEUART IRQ + #if defined(SL_CATALOG_POWER_MANAGER_PRESENT) && !defined(SL_IOSTREAM_UART_FLUSH_TX_BUFFER) + LEUART_IntDisable(leuart_context->leuart, LEUART_IF_TXC); + #endif + LEUART_IntDisable(leuart_context->leuart, LEUART_IF_RXDATAV); + // Disable LEUART peripheral LEUART_Enable(leuart_context->leuart, leuartDisable); diff --git a/platform/service/iostream/src/sl_iostream_uart.c b/platform/service/iostream/src/sl_iostream_uart.c index 340dd2072d1..1c13a3f4026 100644 --- a/platform/service/iostream/src/sl_iostream_uart.c +++ b/platform/service/iostream/src/sl_iostream_uart.c @@ -250,6 +250,10 @@ sl_status_t sli_iostream_uart_context_init(sl_iostream_uart_t *uart, #if defined(SL_CATALOG_POWER_MANAGER_PRESENT) && !defined(SL_CATALOG_KERNEL_PRESENT) static sl_power_manager_on_isr_exit_t sleep_on_isr_exit(void *context) { + if (context == NULL) { + return SL_POWER_MANAGER_IGNORE; + } + sl_iostream_uart_context_t *uart_context = (sl_iostream_uart_context_t *)context; if ((uart_context->tx_idle) && (uart_context->sleep == SL_POWER_MANAGER_SLEEP)) { @@ -699,7 +703,7 @@ static bool dma_irq_handler(unsigned int chan, unsigned int seq, void* user_para if (uart_context->rx_read_ptr >= write_ptr) { available_space = (size_t)(uart_context->rx_read_ptr - write_ptr); } else { - available_space = (size_t)(write_ptr - (uart_context->rx_buffer + uart_context->rx_buffer_len)); + available_space = (size_t)((uart_context->rx_buffer + uart_context->rx_buffer_len) - write_ptr); } // Space available in the RX buffer diff --git a/platform/service/iostream/src/sl_iostream_usart.c b/platform/service/iostream/src/sl_iostream_usart.c index ed6ede547ee..2a645da9800 100644 --- a/platform/service/iostream/src/sl_iostream_usart.c +++ b/platform/service/iostream/src/sl_iostream_usart.c @@ -383,6 +383,12 @@ static sl_status_t usart_deinit(void *context) } #endif + // Disable USART IRQ + #if defined(SL_CATALOG_POWER_MANAGER_PRESENT) && !defined(SL_IOSTREAM_UART_FLUSH_TX_BUFFER) + USART_IntDisable(usart_context->usart, USART_IF_TXC); + #endif + USART_IntDisable(usart_context->usart, USART_IF_RXDATAV); + // Disable USART peripheral USART_Enable(usart_context->usart, usartDisable); diff --git a/platform/service/legacy_hal/src/base-replacement.c b/platform/service/legacy_hal/src/base-replacement.c index 72224824542..1b8e36d8ff5 100644 --- a/platform/service/legacy_hal/src/base-replacement.c +++ b/platform/service/legacy_hal/src/base-replacement.c @@ -624,61 +624,12 @@ bool halInternalUartFlowControlRxIsEnabled(uint8_t port) void halInternalSetCtune(uint16_t tune) { - #if defined(_CMU_HFXOSTEADYSTATECTRL_CTUNE_MASK) // series 1 - CMU_CLOCK_SELECT_SET(HF, HFRCO); - - CMU_OscillatorEnable(cmuOsc_HFXO, false, false); - CMU->HFXOSTEADYSTATECTRL &= ~_CMU_HFXOSTEADYSTATECTRL_CTUNE_MASK; - CMU->HFXOSTEADYSTATECTRL |= (tune << _CMU_HFXOSTEADYSTATECTRL_CTUNE_SHIFT) - & _CMU_HFXOSTEADYSTATECTRL_CTUNE_MASK; - CMU_OscillatorEnable(cmuOsc_HFXO, true, true); - - CMU_CLOCK_SELECT_SET(HF, HFXO); - - #elif defined(_HFXO_XTALCTRL_CTUNEXIANA_MASK) // series 2 - CMU_CLOCK_SELECT_SET(SYSCLK, FSRCO); - - // clear FORCEEN bit and set DISONDEMAND bit to enable writing of ctune values - HFXO0->CTRL &= ~_HFXO_CTRL_FORCEEN_MASK; - HFXO0->CTRL |= _HFXO_CTRL_DISONDEMAND_MASK; - - // FSMLOCK only on series 2 config 1 and 2 - #if defined(_SILICON_LABS_32B_SERIES_2_CONFIG_1) || defined(_SILICON_LABS_32B_SERIES_2_CONFIG_2) - // wait until FSMLOCK becomes 0 - while ((HFXO0->STATUS & _HFXO_STATUS_FSMLOCK_MASK) == HFXO_STATUS_FSMLOCK) { - } - #endif - - // check that the HFXO is off - if ((HFXO0->STATUS & _HFXO_STATUS_ENS_MASK) != HFXO_STATUS_ENS) { - HFXO0->XTALCTRL &= ~_HFXO_XTALCTRL_CTUNEXIANA_MASK; - HFXO0->XTALCTRL |= (tune << _HFXO_XTALCTRL_CTUNEXIANA_SHIFT) - & _HFXO_XTALCTRL_CTUNEXIANA_MASK; - HFXO0->XTALCTRL &= ~_HFXO_XTALCTRL_CTUNEXOANA_MASK; - HFXO0->XTALCTRL |= (tune << _HFXO_XTALCTRL_CTUNEXOANA_SHIFT) - & _HFXO_XTALCTRL_CTUNEXOANA_MASK; - } - - // clear DISONDEMAND and set FORCEEN to reenable HFXO - HFXO0->CTRL &= ~_HFXO_CTRL_DISONDEMAND_MASK; - HFXO0->CTRL |= _HFXO_CTRL_FORCEEN_MASK; - - CMU_CLOCK_SELECT_SET(SYSCLK, HFXO); - - #endif // _CMU_HFXOSTARTUPCTRL_CTUNE_MASK + (void)RAIL_SetTune(RAIL_EFR32_HANDLE, tune); } uint16_t halInternalGetCtune(void) { - #if defined(_CMU_HFXOSTARTUPCTRL_CTUNE_MASK) // series 1 - return (CMU->HFXOSTEADYSTATECTRL & _CMU_HFXOSTEADYSTATECTRL_CTUNE_MASK) - >> _CMU_HFXOSTEADYSTATECTRL_CTUNE_SHIFT; - #elif defined(_HFXO_XTALCTRL_CTUNEXIANA_MASK) // series 2 - return (HFXO0->XTALCTRL & _HFXO_XTALCTRL_CTUNEXIANA_MASK) - >> _HFXO_XTALCTRL_CTUNEXIANA_SHIFT; - #else //!_CMU_HFXOSTEADYSTATECTRL_CTUNE_MASK - return 0U; - #endif //_CMU_HFXOSTEADYSTATECTRL_CTUNE_MASK + return (uint16_t)RAIL_GetTune(RAIL_EFR32_HANDLE); } #if defined(SL_CATALOG_SIMPLE_BUTTON_PRESENT) diff --git a/platform/service/sim_eeprom/sim_eeprom1/lib/libsim_eeprom1_CM4_gcc.a b/platform/service/sim_eeprom/sim_eeprom1/lib/libsim_eeprom1_CM4_gcc.a index 27270e3f121..10fb575f89a 100644 --- a/platform/service/sim_eeprom/sim_eeprom1/lib/libsim_eeprom1_CM4_gcc.a +++ b/platform/service/sim_eeprom/sim_eeprom1/lib/libsim_eeprom1_CM4_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:da855a62eb04c004948a0736d306d34ee758b41a49f2db18341fb022dada777d +oid sha256:282655d0802b7a2ed362a48bafb988b9b85ea9a37964c87f8eacdcf2a8eb5939 size 43360 diff --git a/platform/service/sim_eeprom/sim_eeprom1/lib/libsim_eeprom1_CM4_iar.a b/platform/service/sim_eeprom/sim_eeprom1/lib/libsim_eeprom1_CM4_iar.a index 2a97b6cc7a4..5a4575308dd 100644 --- a/platform/service/sim_eeprom/sim_eeprom1/lib/libsim_eeprom1_CM4_iar.a +++ b/platform/service/sim_eeprom/sim_eeprom1/lib/libsim_eeprom1_CM4_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e64570bbb95f12442a5ebf13e2d9ee7552b3616010c5402f6590267d608188fc +oid sha256:f9b36009dd09144e45c63d16041cf35e4159d7eb1ad8efaea444d6b57615dc33 size 30366 diff --git a/platform/service/sim_eeprom/sim_eeprom1_to_sim_eeprom2_upgrade/lib/libsim_eeprom1_to_sim_eeprom2_upgrade_CM4_gcc.a b/platform/service/sim_eeprom/sim_eeprom1_to_sim_eeprom2_upgrade/lib/libsim_eeprom1_to_sim_eeprom2_upgrade_CM4_gcc.a index cecb806d674..a674471ced4 100644 --- a/platform/service/sim_eeprom/sim_eeprom1_to_sim_eeprom2_upgrade/lib/libsim_eeprom1_to_sim_eeprom2_upgrade_CM4_gcc.a +++ b/platform/service/sim_eeprom/sim_eeprom1_to_sim_eeprom2_upgrade/lib/libsim_eeprom1_to_sim_eeprom2_upgrade_CM4_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:daf1bcdfbb14a34afd9208bca0fb5669e0e86a6bf3ef103e652930f85dc597e7 +oid sha256:27988377dac2a34d780c892a3a147a3353d7dba30b4478037a2eadf7993d72c0 size 31290 diff --git a/platform/service/sim_eeprom/sim_eeprom1_to_sim_eeprom2_upgrade/lib/libsim_eeprom1_to_sim_eeprom2_upgrade_CM4_iar.a b/platform/service/sim_eeprom/sim_eeprom1_to_sim_eeprom2_upgrade/lib/libsim_eeprom1_to_sim_eeprom2_upgrade_CM4_iar.a index baa836cb722..e74f657fa68 100644 --- a/platform/service/sim_eeprom/sim_eeprom1_to_sim_eeprom2_upgrade/lib/libsim_eeprom1_to_sim_eeprom2_upgrade_CM4_iar.a +++ b/platform/service/sim_eeprom/sim_eeprom1_to_sim_eeprom2_upgrade/lib/libsim_eeprom1_to_sim_eeprom2_upgrade_CM4_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:beab06bb296bc09118fb9d3f913f5f45850e1ef2ade61e0f1e3d660486dd6e88 +oid sha256:3fcba049147db25c215347035371a38abc2c84dc8bc33a1bdf5dab645f055ece size 19654 diff --git a/platform/service/sim_eeprom/sim_eeprom2/lib/libsim_eeprom2_CM4_gcc.a b/platform/service/sim_eeprom/sim_eeprom2/lib/libsim_eeprom2_CM4_gcc.a index 96b608ad839..2915fcaa754 100644 --- a/platform/service/sim_eeprom/sim_eeprom2/lib/libsim_eeprom2_CM4_gcc.a +++ b/platform/service/sim_eeprom/sim_eeprom2/lib/libsim_eeprom2_CM4_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27f206d650224c651c36233120bb11e44567876db81b6b7e040d7df1c898922f +oid sha256:a7de13d5db3c195f2906a90cadafbc51850a4d0d5ac06335bfb61f1c2f34b4f7 size 54856 diff --git a/platform/service/sim_eeprom/sim_eeprom2/lib/libsim_eeprom2_CM4_iar.a b/platform/service/sim_eeprom/sim_eeprom2/lib/libsim_eeprom2_CM4_iar.a index bb6024b18b7..e684a42030b 100644 --- a/platform/service/sim_eeprom/sim_eeprom2/lib/libsim_eeprom2_CM4_iar.a +++ b/platform/service/sim_eeprom/sim_eeprom2/lib/libsim_eeprom2_CM4_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f401086cfbbbb543744a85b6094e9aa95e911a56a0b0cb376a18f6a79df5c39b +oid sha256:5f3f85534dca4003b5166a5dd1af820ebe447f8d1707be825565bf0d32d56965 size 49082 diff --git a/platform/service/sim_eeprom/sim_eeprom2_to_nvm3_upgrade/lib/libsim_eeprom2_to_nvm3_upgrade_CM4_gcc.a b/platform/service/sim_eeprom/sim_eeprom2_to_nvm3_upgrade/lib/libsim_eeprom2_to_nvm3_upgrade_CM4_gcc.a index 056d65d7077..756c3cf4c4c 100644 --- a/platform/service/sim_eeprom/sim_eeprom2_to_nvm3_upgrade/lib/libsim_eeprom2_to_nvm3_upgrade_CM4_gcc.a +++ b/platform/service/sim_eeprom/sim_eeprom2_to_nvm3_upgrade/lib/libsim_eeprom2_to_nvm3_upgrade_CM4_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7638f539ae0b05060afa25a77c0133a1a66ca9a22488bbb3fbfd44b2d80d2417 +oid sha256:2e83a78c4cd5de1b094c35a6f1315e155bf3a0d27280225cc965f892675d0603 size 21194 diff --git a/platform/service/sim_eeprom/sim_eeprom2_to_nvm3_upgrade/lib/libsim_eeprom2_to_nvm3_upgrade_CM4_iar.a b/platform/service/sim_eeprom/sim_eeprom2_to_nvm3_upgrade/lib/libsim_eeprom2_to_nvm3_upgrade_CM4_iar.a index c390024d1cd..558d4b1e9ec 100644 --- a/platform/service/sim_eeprom/sim_eeprom2_to_nvm3_upgrade/lib/libsim_eeprom2_to_nvm3_upgrade_CM4_iar.a +++ b/platform/service/sim_eeprom/sim_eeprom2_to_nvm3_upgrade/lib/libsim_eeprom2_to_nvm3_upgrade_CM4_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d80f4e7a3c55648f9917283894d14f05f88ec6f1210eefb408ec1fef2942ed35 +oid sha256:3e3739fc40aef7b1ff54051cf1589459239fa15a9ba173fcbb3eb29e249592d2 size 11724 diff --git a/protocol/bluetooth/api/sl_bt.xapi b/protocol/bluetooth/api/sl_bt.xapi index 3a062d5caa7..e11149282a4 100644 --- a/protocol/bluetooth/api/sl_bt.xapi +++ b/protocol/bluetooth/api/sl_bt.xapi @@ -1,5 +1,5 @@ - + diff --git a/protocol/bluetooth/api/sl_btmesh.xapi b/protocol/bluetooth/api/sl_btmesh.xapi new file mode 100644 index 00000000000..6d47e5c89cf --- /dev/null +++ b/protocol/bluetooth/api/sl_btmesh.xapi @@ -0,0 +1,7406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg12_gcc_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg12_gcc_release.a index b90bf8bceb6..272b28a4f86 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg12_gcc_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg12_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77e68c1ba5966ee2479d892df213da20aa107a0fbbc814ae2e32f898257e91b7 +oid sha256:694d8ab4b437937d4051d3b329fe6d840df92551a83b7f716f7d4ffb55d42ae4 size 260896 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg12_iar_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg12_iar_release.a index 9663be27262..eb7441c2c1b 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg12_iar_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg12_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4c1c8d99a2f02b944adc71c0bb88d0db8915aa0a4fef3a09498601c978bd6d4 +oid sha256:681530fef0dbdbd16b69a66b74f16732bea63e02e93df54513da6495726d8adb size 500202 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg13_gcc_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg13_gcc_release.a index de99bfb1100..3c9cdd38419 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg13_gcc_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg13_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:40cbc1db4df5fa16f540cbc4e31f83ceaf1fd95678a198d5c283ca9753576010 +oid sha256:e7e0cb5f603f9ff8b4556d6333bb9394112f86fa0b4f27c3ec03074d64cba245 size 260896 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg13_iar_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg13_iar_release.a index 43125bdc96b..55f74571280 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg13_iar_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg13_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38c5a4a252b542bb65a93477157f9127f4a086fe395cdca0eb9bc6e393cc3d76 +oid sha256:83aa9c88d159f09c768f96e7c6eba1fe4fc2342725127afd1732e53e1373d120 size 500202 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg14_gcc_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg14_gcc_release.a index 37eb48becf5..905febecd31 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg14_gcc_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg14_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:787a35761683c8040de337c16cb81d880a645402ac1975dcd2abea894fc599f9 +oid sha256:26bbc47ea2b0438065549ac57333b6ed49a4a2898ad4aebe746b174c0c800fff size 260896 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg14_iar_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg14_iar_release.a index 244e7b6538c..45cbbc94b06 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg14_iar_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg14_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f863932458a7823936e6efdae195fa932080997f356eeb9f675e2c56127bb4b2 +oid sha256:5884399d38339b739b101f7dc88d8c1584f7c00cfef680c35b708ebd023b8166 size 500202 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg1_gcc_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg1_gcc_release.a index 990a07d7973..5742b667ac7 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg1_gcc_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg1_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ee72a35ed95ea1406d4f2b2f58388c8d2ad2442494f7de2e055e9d19f9be72e +oid sha256:f69a3287023ff0f2ddc18b12ed1788d2a1e110ce3d5cc355eb48e09848653555 size 260888 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg1_iar_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg1_iar_release.a index 8fbafb28994..bb5e331c3cb 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg1_iar_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg1_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fadabfe81630f65abd3937e36b6fb09b2da73d52f85e5cfda3f85947c6a43078 +oid sha256:5997360c9b0d6482e2c08bf525368962c5f48b723d1513a5077cfef978d6db6e size 500134 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg21_gcc_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg21_gcc_release.a index 4524cbefeac..48e2106edf0 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg21_gcc_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg21_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13898e9685aa64d3a670f78972208f76a60cce076c85dc1a5b3583301be0e61d +oid sha256:4e0b1a846c0b3bf44953f7139014cf2b0876f1d3fcb90860a37b85b9fd16d83a size 257492 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg21_iar_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg21_iar_release.a index ec611c7feb8..f755f1089fe 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg21_iar_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg21_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d4cc4826b2a6ccb796b95e9be25ba846faf3eb4dbcbc650cc56e14dde08198f +oid sha256:7437547b55b7266218509cd0aad032fc8a2ad5672a4cb2a2063054fcc5c50375 size 516302 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg22_gcc_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg22_gcc_release.a index eacaf30a77d..c1c9c18750f 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg22_gcc_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg22_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:969227163fb3226fa429a5b20b54f8f5a9abd19821e0e826c209ab4c609a57ab +oid sha256:4d11e3b685d6c21f057932d8dc82222540f6a1643b0c070c4aa5d4f6cdc7f033 size 257492 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg22_iar_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg22_iar_release.a index 1936fe22baf..e1dc591364f 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg22_iar_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg22_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c29bcf55c37dbe725ea43b000852a41cbfb255a1d1d050202bf8dd419e111e52 +oid sha256:6c266ef7b418c2b59b8789021ef9582a65d524176ab444a89c74680888a0a786 size 517598 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg24_gcc_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg24_gcc_release.a index ffcf5de99f1..3e5e6febbb8 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg24_gcc_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg24_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24ea4d4cf747acea6e70095e63e32d8b19257073a0b721b2ff301904a0c0e94e +oid sha256:f30447409d35482b99dcf129098feaa29802f67c21a9fc863b242126944d69df size 257492 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg24_iar_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg24_iar_release.a index 902697d42ca..275767e5293 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg24_iar_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg24_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77bb5573bf5b3d4dcc9238258765783a4fc1033dfaa245c23a9ff148499de927 +oid sha256:baa18d5f0fa1777f7cc5300a298708d8f9401f65401968b395d2033dc1ba8c52 size 519040 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg27_gcc_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg27_gcc_release.a index 1cec7865486..9ba743af294 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg27_gcc_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg27_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:192e32bed5a6cf5da0528ee16f72c8c9da67bc48f00bdbcd7246492ac6744050 +oid sha256:68b4ad89ffbcbfedee27ed36dc390a9a3513df43f5fb9acf607965e235b11028 size 257492 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg27_iar_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg27_iar_release.a index 1bd82be511b..c3534de2121 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg27_iar_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg27_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:156fa72552fa4b399ade78cef36937c5f8b782abb2dab889ab057f05d95cc150 +oid sha256:62600604165d47e9d0f71c1802379512d7f4ad7b1adc1483f3fe30209a2c56b5 size 518650 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg28_gcc_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg28_gcc_release.a index 5303f706124..6328dc16110 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg28_gcc_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg28_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba35b5b123a9303ffde5223dba146be4d147ed9aa5ad30fad71fbc22c1bd6357 +oid sha256:d0a562cc35b98a696cd7138701cf353a02cc7fa0ca88dc536982c700d9b997c1 size 257492 diff --git a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg28_iar_release.a b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg28_iar_release.a index 90bdf923bbb..ff7a7ca1f26 100644 --- a/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg28_iar_release.a +++ b/protocol/bluetooth/bgcommon/lib/libbgcommon_efr32xg28_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e995f85e7182023fa6397a432979404cbece76ea5d09254c1c541da8cbb0085 +oid sha256:90fb70fd7759f7f0ad8f073300cf318946034297f3913d1d6b74541de7e39b42 size 520456 diff --git a/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_3wire.slcc b/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_3wire.slcc index 747af64f25e..adcbc06d140 100644 --- a/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_3wire.slcc +++ b/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_3wire.slcc @@ -19,6 +19,7 @@ include: - path: inc file_list: - path: sl_btctrl_hci_packet.h + - path: sl_btctrl_hci_transport.h - path: uart/inc file_list: - path: sl_btctrl_hci_uart_rtos.h diff --git a/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_cpc.slcc b/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_cpc.slcc index 7a5ee872991..91895b532f1 100644 --- a/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_cpc.slcc +++ b/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_cpc.slcc @@ -16,6 +16,7 @@ include: - path: inc file_list: - path: sl_btctrl_hci_packet.h + - path: sl_btctrl_hci_transport.h - path: cpc/inc file_list: - path: sl_btctrl_hci_cpc_rtos.h diff --git a/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_sleep.slcc b/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_sleep.slcc index 2136455fcbc..1026f7ce555 100644 --- a/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_sleep.slcc +++ b/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_sleep.slcc @@ -15,8 +15,9 @@ include: provides: - name: bluetooth_hci_sleep requires: + - name: gpiointerrupt - name: power_manager - - name: bluetooth_hci_uart + - name: bluetooth_hci_transport template_contribution: - name: event_handler value: diff --git a/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_uart.slcc b/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_uart.slcc index 1c908b9abab..bec81b6e5ac 100644 --- a/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_uart.slcc +++ b/protocol/bluetooth/bgstack/ll/component/bluetooth_hci_uart.slcc @@ -17,6 +17,7 @@ include: - path: inc file_list: - path: sl_btctrl_hci_packet.h + - path: sl_btctrl_hci_transport.h - path: uart/inc file_list: - path: sl_btctrl_hci_uart_rtos.h diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg12_gcc_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg12_gcc_release.a index 5d4bc8dca14..6f2d9c5cd7e 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg12_gcc_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg12_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35b1b85b3c39ac0da9e584e4caba9a0d323b2ecb009bf90f3babefc418e71bd6 -size 6831676 +oid sha256:3989a7253fb0369fe140ea2af4d635cc00687ccf217b705c7a18f009988586b1 +size 6836098 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg12_iar_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg12_iar_release.a index f89da2f1ca8..62b30ee413b 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg12_iar_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg12_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c90a7b8e6250421ddc4948ea523cbdbb8dc77f46690ef39ec4aab0f17e1fc57 -size 16771872 +oid sha256:f322d56de6c07badee6a7628da450ecfdacd4e4421ee96829d7de262300a80d5 +size 16771594 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg13_gcc_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg13_gcc_release.a index f714a072df5..37fa61b98a8 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg13_gcc_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg13_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e55c97c0aed925959c74a38cb75226c89a645b914b81067e0fc44cc1a9a7d68d -size 6830804 +oid sha256:f2fc22d04c421d492e5ec5e2dbbb06e9c18f990175a0237226ea5a0a9a75ed57 +size 6835226 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg13_iar_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg13_iar_release.a index 87dfdafccba..1b93fe9c461 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg13_iar_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg13_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b012a685b3f7611c72b60ca6b9e4017dde99e3aad96a8014d299a6a6630af61 -size 16771450 +oid sha256:2aca2b4a21381406a9818c0c702f5a3a4f60ae9725274aeb8f933d09e6665f46 +size 16771172 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg14_gcc_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg14_gcc_release.a index 1d2f0f8ab3f..e6450dc01b3 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg14_gcc_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg14_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:021ff2dd69102947baa2f1ec49432f1d663a73ae4523f7bc0405bd4c6ea44ed3 -size 6829912 +oid sha256:63659fb111e9f9b54ec6aaa60b918396ab64701978480409760a648241952610 +size 6834334 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg14_iar_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg14_iar_release.a index aeb1c896de5..7f8d80c90e4 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg14_iar_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg14_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a816656d76ed7e6cc1aecbec40b532c51336912396ce546473773938158edef2 -size 16771020 +oid sha256:5940653d0c5d246043fae2ca8377bf2be5f31186f7b4c66ffecbd1d58913d4b2 +size 16770742 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg1_gcc_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg1_gcc_release.a index 2f3fb3bc015..55c75e7bf3c 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg1_gcc_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg1_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea90519d740b23de1b6ecdaaaa48b21ef5fa88125a452c5159376dbd1f804cd9 -size 6827420 +oid sha256:94f40df5b0e7d2db34252eeaeebb05b038b69552c09e891043379293d6bf2b09 +size 6831902 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg1_iar_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg1_iar_release.a index b231bce3085..24a49503e73 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg1_iar_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg1_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5fd5655d487223bde993e818a170075da820e09ba360d2c814f3ac1c2c661eb7 -size 16769250 +oid sha256:d4886906e131cf1579e62a548db71255d99322466c8a47222eab59bc493dffd4 +size 16768978 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg21_gcc_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg21_gcc_release.a index da6b2b64e5f..dd0ae04a017 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg21_gcc_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg21_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea59a959b619b4a044bde81009ea7916b5c7c7d38367d0ade67acbccd26dfb4e -size 6876996 +oid sha256:389f88b20370757ed573782eb38546f229a813b65de7aa72d1892014107054c2 +size 6881466 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg21_iar_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg21_iar_release.a index 87e516a6609..a062be5cb8e 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg21_iar_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg21_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0bd355a75cc294e4989c88d1a21ddb8fc46049b519509797eaf602303d9d9f7f -size 16947592 +oid sha256:294788c0a423527d68726536609175e0ebeb86d64271893a8ee57a318ab9bf06 +size 16947308 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg22_gcc_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg22_gcc_release.a index eddee6b7bcc..3f76a59d63d 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg22_gcc_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg22_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31027b52abff099c6a65c7a1204af52be7b345da7e621d8c24384c794eca7d46 -size 6881520 +oid sha256:1bc0c1a4c979bb0b2ffa29884e2980c9882f56b626ce7a1ff95c90b04fab2351 +size 6885990 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg22_iar_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg22_iar_release.a index bea308c9faa..23fcdb0b786 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg22_iar_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg22_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b603996b469a048f217f95f04965414cb5b380e083c30ae8ce6b1887d09b0db9 -size 16965732 +oid sha256:28457045f4ce7c4275f4b0a7ce84b0f30c80967f09bdac708dd49f262fe61a3e +size 16965462 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg24_gcc_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg24_gcc_release.a index e0b41c87e8a..0a3a7195831 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg24_gcc_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg24_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2cf4b9ce9f030bb99106812dc584182b411f7d50c923ccfc95750e76a4b25456 -size 6891180 +oid sha256:4f47fe2509ea61302865e29fc75e6fe3b74159563bdfb763bcc5947cf3cc9602 +size 6895618 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg24_iar_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg24_iar_release.a index 7a25f9576a4..00869243b34 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg24_iar_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg24_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5fa0fe3a453e2c15f5364bb642cded2a23654663818f0e86d9a68f72e05ac44 -size 16979388 +oid sha256:9bc24b2e0cf12eb7ddb48b4c23e8fcc571c0c1619392d8526c2ac94bb567b19d +size 16979106 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg27_gcc_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg27_gcc_release.a index 874c53effc0..d8f5364d6f8 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg27_gcc_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg27_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc01813475d969f0634e5510bc5469463c13534075f3fbbb8b06d2906c74bfab -size 6882500 +oid sha256:1f5320ef70f373f3f6a5f91ae7fbcf37d6271c4d4e923eb11bbaac48d3ffab97 +size 6886938 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg27_iar_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg27_iar_release.a index 10400c7bd05..cebb524e539 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg27_iar_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg27_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c8a27384540c0d09ebaf88828ab4c9ee704ae83e9c02e9ae532f249ad7b3ab8 -size 16974728 +oid sha256:150040433388717ebb3f0444c539054719d09befcf70b4101017c1e9c8205507 +size 16974446 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg28_gcc_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg28_gcc_release.a index df144d35fb0..08370fa62af 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg28_gcc_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg28_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:65b5990515f2c13f353a11d927c0f74cdf0490f36c6cd06b71b8ad202d9cba9c -size 6893436 +oid sha256:5c4a07767854d0db573bbf0e76d6f664d0f5964a46053fd0e1432fb694d9c449 +size 6897874 diff --git a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg28_iar_release.a b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg28_iar_release.a index c7ec581b331..2bf6166b956 100644 --- a/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg28_iar_release.a +++ b/protocol/bluetooth/bgstack/ll/lib/libbluetooth_controller_efr32xg28_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ffc8a786b5dedb77b2b46245dbe8148b6f2addd82f6e2d6826dab57aed049ced -size 16992312 +oid sha256:3ea5ec67458b3b006943736345c1021b6a983e07e866d1fab1c4a99a598e3673 +size 16992030 diff --git a/protocol/bluetooth/bgstack/ll/src/sl_bluetooth_controller.c.jinja b/protocol/bluetooth/bgstack/ll/src/sl_bluetooth_controller.c.jinja index 6f24dfe09e3..c90a20ad91d 100644 --- a/protocol/bluetooth/bgstack/ll/src/sl_bluetooth_controller.c.jinja +++ b/protocol/bluetooth/bgstack/ll/src/sl_bluetooth_controller.c.jinja @@ -2,6 +2,7 @@ #include #include +#include "sl_rail_util_pa_config.h" #include "sl_btctrl_linklayer.h" #include "sl_btctrl_config.h" #include "sl_btctrl_acceptance_list_config.h" diff --git a/protocol/bluetooth/bgstack/ll/utils/hci_packet/inc/sl_btctrl_hci_transport.h b/protocol/bluetooth/bgstack/ll/utils/hci_packet/inc/sl_btctrl_hci_transport.h new file mode 100644 index 00000000000..f76ed04f4ee --- /dev/null +++ b/protocol/bluetooth/bgstack/ll/utils/hci_packet/inc/sl_btctrl_hci_transport.h @@ -0,0 +1,6 @@ +#ifndef SL_BTCTRL_HCI_TRANSPORT_H +#define SL_BTCTRL_HCI_TRANSPORT_H + +void sl_btctrl_hci_transport_get_port_pin(uint8_t *port, uint8_t *pin); + +#endif // SL_BTCTRL_HCI_TRANSPORT_H diff --git a/protocol/bluetooth/bgstack/ll/utils/hci_packet/uart/src/sl_hci_uart.c b/protocol/bluetooth/bgstack/ll/utils/hci_packet/uart/src/sl_hci_uart.c index 035aab9e019..dff5940ce81 100644 --- a/protocol/bluetooth/bgstack/ll/utils/hci_packet/uart/src/sl_hci_uart.c +++ b/protocol/bluetooth/bgstack/ll/utils/hci_packet/uart/src/sl_hci_uart.c @@ -212,7 +212,7 @@ Ecode_t sl_hci_uart_write(uint8_t *data, uint16_t len, void (*callback)(uint32_t return status; } -void sl_hci_uart_get_port_pin(uint8_t *port, uint8_t *pin) +void sl_btctrl_hci_transport_get_port_pin(uint8_t *port, uint8_t *pin) { *port = SL_UARTDRV_USART_VCOM_RX_PORT; *pin = SL_UARTDRV_USART_VCOM_RX_PIN; diff --git a/protocol/bluetooth/bgstack/ll/utils/hci_packet/uart/src/sl_hci_uart.h b/protocol/bluetooth/bgstack/ll/utils/hci_packet/uart/src/sl_hci_uart.h index 4e404321130..6d6deb04d85 100644 --- a/protocol/bluetooth/bgstack/ll/utils/hci_packet/uart/src/sl_hci_uart.h +++ b/protocol/bluetooth/bgstack/ll/utils/hci_packet/uart/src/sl_hci_uart.h @@ -9,7 +9,6 @@ void sl_hci_uart_init(void); int sl_hci_uart_read(uint8_t *data, uint16_t len); Ecode_t sl_hci_uart_write(uint8_t *data, uint16_t len, void (*callback)(uint32_t)); int sl_hci_uart_rx_buffered_length(); -void sl_hci_uart_get_port_pin(uint8_t *port, uint8_t *pin); void sl_hci_disable_sleep(bool set_sleep_disabled); #endif // SL_HCI_UART_H diff --git a/protocol/bluetooth/bgstack/ll/utils/sleep/src/sl_hci_sleep.c b/protocol/bluetooth/bgstack/ll/utils/sleep/src/sl_hci_sleep.c index 78739ed3369..d3a8d56129f 100644 --- a/protocol/bluetooth/bgstack/ll/utils/sleep/src/sl_hci_sleep.c +++ b/protocol/bluetooth/bgstack/ll/utils/sleep/src/sl_hci_sleep.c @@ -11,13 +11,15 @@ #define SL_BTCTRL_HCI_SLEEP_EXCLUDE_WEAKS #include "sl_btctrl_hci_sleep.h" -#include "sl_hci_uart.h" +#include "sl_btctrl_hci_transport.h" static bool sleep_requested; static bool em1_required = false; static bool send_sleep_command_complete = false; +#if (!defined(SL_CATALOG_CPC_SECONDARY_PRESENT)) static uint8_t pin; static uint8_t port; +#endif // (!defined(SL_CATALOG_CPC_SECONDARY_PRESENT)) static void sl_btctrl_hci_clear_sleep_request(void) { @@ -26,6 +28,11 @@ static void sl_btctrl_hci_clear_sleep_request(void) bool sl_btctrl_hci_sleep_request() { +// Vendor specific sleep command not supported for CPC +#if defined(SL_CATALOG_CPC_SECONDARY_PRESENT) + return false; +#endif + if (sleep_requested) { return false; } @@ -34,10 +41,11 @@ bool sl_btctrl_hci_sleep_request() CORE_ENTER_ATOMIC(); sleep_requested = true; - +#if (!defined(SL_CATALOG_CPC_SECONDARY_PRESENT)) uint32_t mask = 1 << pin; GPIO_IntClear(mask); GPIO_IntEnable(mask); +#endif // (!defined(SL_CATALOG_CPC_SECONDARY_PRESENT)) sli_power_manager_update_em_requirement(SL_POWER_MANAGER_EM1, false); @@ -62,6 +70,7 @@ void sl_btctrl_hci_sleep_require_em1(bool req) CORE_EXIT_ATOMIC(); } +#if (!defined(SL_CATALOG_CPC_SECONDARY_PRESENT)) static void wakeup_interrupt(uint8_t intNo) { uint32_t mask = 1 << pin; @@ -73,6 +82,7 @@ static void wakeup_interrupt(uint8_t intNo) sli_power_manager_update_em_requirement(SL_POWER_MANAGER_EM1, true); } } +#endif // (!defined(SL_CATALOG_CPC_SECONDARY_PRESENT)) void sl_btctrl_hci_sleep_sleep(void) { @@ -86,9 +96,11 @@ void sl_btctrl_hci_sleep_sleep(void) void sl_btctrl_hci_sleep_init(void) { GPIOINT_Init(); - sl_hci_uart_get_port_pin(&port, &pin); +#if (!defined(SL_CATALOG_CPC_SECONDARY_PRESENT)) + sl_btctrl_hci_transport_get_port_pin(&port, &pin); GPIO_ExtIntConfig(port, pin, pin, true, false, false); GPIOINT_CallbackRegister(pin, wakeup_interrupt); +#endif // (!defined(SL_CATALOG_CPC_SECONDARY_PRESENT)) sl_btctrl_hci_clear_sleep_request(); sli_power_manager_update_em_requirement(SL_POWER_MANAGER_EM1, true); sli_power_manager_update_em_requirement(SL_POWER_MANAGER_EM2, true); diff --git a/protocol/bluetooth/component/apploader_lib.slcc b/protocol/bluetooth/component/apploader_lib.slcc index cb55a966138..d82f5f4ad2f 100644 --- a/protocol/bluetooth/component/apploader_lib.slcc +++ b/protocol/bluetooth/component/apploader_lib.slcc @@ -77,11 +77,11 @@ library: condition: ["toolchain_gcc", "device_family_efr32mg24"] - path: "lib/EFR32MG24/IAR/libapploader.a" condition: ["toolchain_iar", "device_family_efr32mg24"] -#EFR32xG24 +#EFR32BG24 - path: "lib/EFR32BG24/GCC/libapploader.a" - condition: ["toolchain_gcc", "device_family_efr32xg24"] + condition: ["toolchain_gcc", "device_family_efr32bg24"] - path: "lib/EFR32BG24/IAR/libapploader.a" - condition: ["toolchain_iar", "device_family_efr32xg24"] + condition: ["toolchain_iar", "device_family_efr32bg24"] #MGM24 - path: "lib/EFR32MG24/GCC/libapploader.a" condition: ["toolchain_gcc", "device_family_mgm24"] diff --git a/protocol/bluetooth/component/btmesh_stack.slcc b/protocol/bluetooth/component/btmesh_stack.slcc new file mode 100644 index 00000000000..2d20b0ba652 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack.slcc @@ -0,0 +1,311 @@ +id: "btmesh_stack" +label: "Bluetooth Mesh Stack" +package: "Btmesh" +description: "Provides Bluetooth Mesh Stack library." +category: "Bluetooth Mesh|Stack" +quality: "production" +root_path: "protocol/bluetooth" +config_file: + - path: "config/sl_btmesh_config.h" + - path: component/gatt_service_mesh_default.xml + directory: btconf +source: + - path: "src/sl_btmesh_lib.c" + condition: + - "btmesh_generic_model" + - path: "src/sl_btmesh_serdeser.c" + condition: + - "btmesh_generic_model" + - path: "src/sl_btmesh_sensor.c" + condition: + - "btmesh_sensor_model" + - path: "src/sl_btmesh_sensor.c" + condition: + - "btmesh_stack_lc_server" + unless: + - "btmesh_sensor_model" +include: + - path: "inc" + file_list: + - path: "sl_btmesh_stack_init.h" + - path: "sl_btmesh_api.h" + - path: "sl_btmesh_bgapi.h" + - path: "sl_btmesh_compatibility_macros.h" + - path: "sl_btmesh_capi_types.h" + - path: "sl_btmesh_memory_config.h" + - path: "sl_btmesh_model_specification_defs.h" + - path: "sl_btmesh_generic_model_capi_types.h" + condition: + - "btmesh_generic_model" + - path: "sl_btmesh_lib.h" + condition: + - "btmesh_generic_model" + - path: "sl_btmesh_serdeser.h" + condition: + - "btmesh_generic_model" + - path: "sl_btmesh_lighting_model_capi_types.h" + condition: + - "btmesh_generic_model" + - path: "sl_btmesh_device_properties.h" + condition: + - "btmesh_sensor_model" + - path: "sl_btmesh_device_properties.h" + condition: + - "btmesh_stack_lc_server" + unless: + - "btmesh_sensor_model" + - path: "sl_btmesh_sensor_model_capi_types.h" + condition: + - "btmesh_sensor_model" + - path: "sl_btmesh_sensor_model_capi_types.h" + condition: + - "btmesh_stack_lc_server" + unless: + - "btmesh_sensor_model" + - path: "sl_btmesh_sensor.h" + condition: + - "btmesh_sensor_model" + - path: "sl_btmesh_sensor.h" + condition: + - "btmesh_stack_lc_server" + unless: + - "btmesh_sensor_model" + - path: "sl_btmesh_provisioning_records.h" +template_file: + - path: "src/sl_btmesh.c.jinja" + - path: "inc/sl_btmesh.h.jinja" +other_file: + - path: "api/sl_btmesh.xapi" +library: +#EFR32BG12P + - path: "lib/EFR32BG12P/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg12p" + - path: "lib/EFR32BG12P/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg12p" +#EFR32MG12P + - path: "lib/EFR32MG12P/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg12p" + - path: "lib/EFR32MG12P/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg12p" +#MGM12 + - path: "lib/EFR32MG12P/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_mgm12" + - path: "lib/EFR32MG12P/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_mgm12" +#EFR32BG13P + - path: "lib/EFR32BG13P/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg13p" + - path: "lib/EFR32BG13P/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg13p" +#BGM13 + - path: "lib/EFR32BG13P/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_bgm13" + - path: "lib/EFR32BG13P/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_bgm13" +#EFR32MG13P + - path: "lib/EFR32MG13P/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg13p" + - path: "lib/EFR32MG13P/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg13p" +#MGM13 + - path: "lib/EFR32MG13P/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_mgm13" + - path: "lib/EFR32MG13P/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_mgm13" +#EFR32BG21 + - path: "lib/EFR32BG21/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg21" + - path: "lib/EFR32BG21/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg21" +#BGM21 + - path: "lib/EFR32BG21/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_bgm21" + - path: "lib/EFR32BG21/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_bgm21" +#EFR32MG21 + - path: "lib/EFR32MG21/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg21" + - path: "lib/EFR32MG21/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg21" +#MGM21 + - path: "lib/EFR32MG21/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_mgm21" + - path: "lib/EFR32MG21/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_mgm21" +#EFR32BG22 + - path: "lib/EFR32BG22/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg22" + - path: "lib/EFR32BG22/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg22" +#BGM22 + - path: "lib/EFR32BG22/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_bgm22" + - path: "lib/EFR32BG22/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_bgm22" +#EFR32MG22 + - path: "lib/EFR32MG22/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg22" + - path: "lib/EFR32MG22/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg22" +#MGM22 + - path: "lib/EFR32MG22/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_mgm22" + - path: "lib/EFR32MG22/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_mgm22" +#EFR32MG24 + - path: "lib/EFR32MG24/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg24" + - path: "lib/EFR32MG24/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg24" +#EFR32BG24 + - path: "lib/EFR32BG24/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg24" + - path: "lib/EFR32BG24/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg24" +#MGM24 + - path: "lib/EFR32MG24/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_mgm24" + - path: "lib/EFR32MG24/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_mgm24" +#BGM24 + - path: "lib/EFR32BG24/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_bgm24" + - path: "lib/EFR32BG24/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_bgm24" +#EFR32MG27 + - path: "lib/EFR32MG27/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg27" + - path: "lib/EFR32MG27/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg27" +#EFR32BG27 + - path: "lib/EFR32BG27/GCC/libbluetooth_mesh.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg27" + - path: "lib/EFR32BG27/IAR/libbluetooth_mesh.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg27" +template_contribution: + - name: component_catalog + value: btmesh + - name: event_handler + value: + event: stack_init + include: "sl_btmesh.h" + handler: "sl_btmesh_init" + priority: 1 + unless: + - "kernel" + - name: event_handler + value: + event: stack_process_action + include: "sl_btmesh.h" + handler: "sl_btmesh_step" + priority: 10 + - name: btmesh_stack + value: 1 + - name: bluetooth_on_event + value: + function: sl_btmesh_bgapi_listener +requires: + - name: "sl_system" + - name: "device_init" + - name: "device_init_hfxo" + - name: "bluetooth_stack" + - name: "bluetooth_feature_system" + - name: "bluetooth_feature_gap" + - name: "bluetooth_feature_scanner" + - name: "btmesh_advertiser" + - name: "emlib" + - name: "sleeptimer" + - name: "nvm3_lib" + - name: "nvm3_default" + - name: "btmesh_stack_crypto" + - name: "device_supports_bluetooth" + - name: "btmesh_stack_health_server" + - name: "dcd_configuration" +recommends: + - id: btmesh_stack_advertiser_deprecated +provides: + - name: "btmesh_stack" diff --git a/protocol/bluetooth/component/btmesh_stack_advertiser_deprecated.slcc b/protocol/bluetooth/component/btmesh_stack_advertiser_deprecated.slcc new file mode 100644 index 00000000000..1eceb48b28c --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_advertiser_deprecated.slcc @@ -0,0 +1,217 @@ +id: "btmesh_stack_advertiser_deprecated" +label: "Deprecated Advertiser" +package: "Btmesh" +description: > + This component implements an "old-fashioned" way of advertising, where both types of advertisings + (legacy and extended) are mixed up. It uses deprecated Bluetooth advertiser API. + This component is provided for backward compatibility. It will be deprecated soon. + It is recommended to use either or . + +category: "Bluetooth Mesh|Advertiser Types" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "bluetooth_feature_advertiser" +provides: + - name: "btmesh_stack_advertiser_deprecated" + - name: "btmesh_advertiser" +template_contribution: + - name: btmesh_advertisers + value: + name: mesh_data + count: 1 + - name: btmesh_advertisers + value: + name: provisioning_advertisers + count: 2 +library: +#EFR32BG12P + - path: "lib/EFR32BG12P/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg12p" + - path: "lib/EFR32BG12P/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg12p" +#EFR32MG12P + - path: "lib/EFR32MG12P/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg12p" + - path: "lib/EFR32MG12P/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg12p" +#MGM12 + - path: "lib/EFR32MG12P/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_mgm12" + - path: "lib/EFR32MG12P/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_mgm12" +#EFR32BG13P + - path: "lib/EFR32BG13P/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg13p" + - path: "lib/EFR32BG13P/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg13p" +#BGM13 + - path: "lib/EFR32BG13P/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_bgm13" + - path: "lib/EFR32BG13P/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_bgm13" +#EFR32MG13P + - path: "lib/EFR32MG13P/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg13p" + - path: "lib/EFR32MG13P/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg13p" +#MGM13 + - path: "lib/EFR32MG13P/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_mgm13" + - path: "lib/EFR32MG13P/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_mgm13" +#EFR32BG21 + - path: "lib/EFR32BG21/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg21" + - path: "lib/EFR32BG21/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg21" +#BGM21 + - path: "lib/EFR32BG21/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_bgm21" + - path: "lib/EFR32BG21/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_bgm21" +#EFR32MG21 + - path: "lib/EFR32MG21/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg21" + - path: "lib/EFR32MG21/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg21" +#MGM21 + - path: "lib/EFR32MG21/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_mgm21" + - path: "lib/EFR32MG21/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_mgm21" +#EFR32BG22 + - path: "lib/EFR32BG22/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg22" + - path: "lib/EFR32BG22/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg22" +#BGM22 + - path: "lib/EFR32BG22/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_bgm22" + - path: "lib/EFR32BG22/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_bgm22" +#EFR32MG22 + - path: "lib/EFR32MG22/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg22" + - path: "lib/EFR32MG22/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg22" +#MGM22 + - path: "lib/EFR32MG22/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_mgm22" + - path: "lib/EFR32MG22/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_mgm22" +#EFR32MG24 + - path: "lib/EFR32MG24/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg24" + - path: "lib/EFR32MG24/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg24" +#EFR32BG24 + - path: "lib/EFR32BG24/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg24" + - path: "lib/EFR32BG24/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg24" +#MGM24 + - path: "lib/EFR32MG24/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_mgm24" + - path: "lib/EFR32MG24/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_mgm24" +#BGM24 + - path: "lib/EFR32BG24/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_bgm24" + - path: "lib/EFR32BG24/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_bgm24" +#EFR32MG27 + - path: "lib/EFR32MG27/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg27" + - path: "lib/EFR32MG27/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg27" +#EFR32BG27 + - path: "lib/EFR32BG27/GCC/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg27" + - path: "lib/EFR32BG27/IAR/libbtmesh_advertiser_deprecated.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg27" \ No newline at end of file diff --git a/protocol/bluetooth/component/btmesh_stack_advertiser_extended.slcc b/protocol/bluetooth/component/btmesh_stack_advertiser_extended.slcc new file mode 100644 index 00000000000..22d292395ea --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_advertiser_extended.slcc @@ -0,0 +1,220 @@ +id: "btmesh_stack_advertiser_extended" +label: "Proprietary Extended Advertiser" +package: "Btmesh" +description: > + This component provides an implementation of advertising capabilities that use extended and legacy advertising PDUs. + It uses Bluetooth legacy advertiser API for beaconing and provisioning services. + It can use Bluetooth extended or legacy advertiser APIs for sending data, depending on the data length. + It is recommended to use this component, if extended advertising capabilities are needed. + Please be aware that BT Mesh 1.1 specification does not allow extended advertising, + so the selection of this component can result in a non compliant code to the BT Mesh spec. + +category: "Bluetooth Mesh|Advertiser Types" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "bluetooth_feature_legacy_advertiser" + - name: "bluetooth_feature_extended_advertiser" +provides: + - name: "btmesh_stack_advertiser_extended" + - name: "btmesh_advertiser" +template_contribution: + - name: btmesh_advertisers + value: + name: mesh_data + count: 1 + - name: btmesh_advertisers + value: + name: provisioning_advertisers + count: 2 +library: +#EFR32BG12P + - path: "lib/EFR32BG12P/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg12p" + - path: "lib/EFR32BG12P/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg12p" +#EFR32MG12P + - path: "lib/EFR32MG12P/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg12p" + - path: "lib/EFR32MG12P/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg12p" +#MGM12 + - path: "lib/EFR32MG12P/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_mgm12" + - path: "lib/EFR32MG12P/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_mgm12" +#EFR32BG13P + - path: "lib/EFR32BG13P/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg13p" + - path: "lib/EFR32BG13P/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg13p" +#BGM13 + - path: "lib/EFR32BG13P/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_bgm13" + - path: "lib/EFR32BG13P/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_bgm13" +#EFR32MG13P + - path: "lib/EFR32MG13P/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg13p" + - path: "lib/EFR32MG13P/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg13p" +#MGM13 + - path: "lib/EFR32MG13P/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_mgm13" + - path: "lib/EFR32MG13P/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_mgm13" +#EFR32BG21 + - path: "lib/EFR32BG21/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg21" + - path: "lib/EFR32BG21/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg21" +#BGM21 + - path: "lib/EFR32BG21/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_bgm21" + - path: "lib/EFR32BG21/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_bgm21" +#EFR32MG21 + - path: "lib/EFR32MG21/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg21" + - path: "lib/EFR32MG21/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg21" +#MGM21 + - path: "lib/EFR32MG21/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_mgm21" + - path: "lib/EFR32MG21/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_mgm21" +#EFR32BG22 + - path: "lib/EFR32BG22/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg22" + - path: "lib/EFR32BG22/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg22" +#BGM22 + - path: "lib/EFR32BG22/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_bgm22" + - path: "lib/EFR32BG22/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_bgm22" +#EFR32MG22 + - path: "lib/EFR32MG22/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg22" + - path: "lib/EFR32MG22/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg22" +#MGM22 + - path: "lib/EFR32MG22/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_mgm22" + - path: "lib/EFR32MG22/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_mgm22" +#EFR32MG24 + - path: "lib/EFR32MG24/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg24" + - path: "lib/EFR32MG24/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg24" +#EFR32BG24 + - path: "lib/EFR32BG24/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg24" + - path: "lib/EFR32BG24/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg24" +#MGM24 + - path: "lib/EFR32MG24/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_mgm24" + - path: "lib/EFR32MG24/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_mgm24" +#BGM24 + - path: "lib/EFR32BG24/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_bgm24" + - path: "lib/EFR32BG24/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_bgm24" +#EFR32MG27 + - path: "lib/EFR32MG27/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg27" + - path: "lib/EFR32MG27/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg27" +#EFR32BG27 + - path: "lib/EFR32BG27/GCC/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg27" + - path: "lib/EFR32BG27/IAR/libbtmesh_advertiser_extended.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg27" \ No newline at end of file diff --git a/protocol/bluetooth/component/btmesh_stack_advertiser_legacy.slcc b/protocol/bluetooth/component/btmesh_stack_advertiser_legacy.slcc new file mode 100644 index 00000000000..636c9adf916 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_advertiser_legacy.slcc @@ -0,0 +1,216 @@ +id: "btmesh_stack_advertiser_legacy" +label: "Standard Legacy Advertiser" +package: "Btmesh" +description: > + This component provides an implementation of advertising capabilities that use standard advertising PDUs. + It uses Bluetooth legacy advertiser API. It is recommended to use this component, + if extended advertising (proprietary) capabilities are not needed. + +category: "Bluetooth Mesh|Advertiser Types" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "bluetooth_feature_legacy_advertiser" +provides: + - name: "btmesh_stack_advertiser_legacy" + - name: "btmesh_advertiser" +template_contribution: + - name: btmesh_advertisers + value: + name: mesh_data + count: 1 + - name: btmesh_advertisers + value: + name: provisioning_advertisers + count: 2 +library: +#EFR32BG12P + - path: "lib/EFR32BG12P/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg12p" + - path: "lib/EFR32BG12P/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg12p" +#EFR32MG12P + - path: "lib/EFR32MG12P/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg12p" + - path: "lib/EFR32MG12P/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg12p" +#MGM12 + - path: "lib/EFR32MG12P/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_mgm12" + - path: "lib/EFR32MG12P/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_mgm12" +#EFR32BG13P + - path: "lib/EFR32BG13P/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg13p" + - path: "lib/EFR32BG13P/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg13p" +#BGM13 + - path: "lib/EFR32BG13P/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_bgm13" + - path: "lib/EFR32BG13P/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_bgm13" +#EFR32MG13P + - path: "lib/EFR32MG13P/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg13p" + - path: "lib/EFR32MG13P/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg13p" +#MGM13 + - path: "lib/EFR32MG13P/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_mgm13" + - path: "lib/EFR32MG13P/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_mgm13" +#EFR32BG21 + - path: "lib/EFR32BG21/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg21" + - path: "lib/EFR32BG21/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg21" +#BGM21 + - path: "lib/EFR32BG21/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_bgm21" + - path: "lib/EFR32BG21/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_bgm21" +#EFR32MG21 + - path: "lib/EFR32MG21/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg21" + - path: "lib/EFR32MG21/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg21" +#MGM21 + - path: "lib/EFR32MG21/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_mgm21" + - path: "lib/EFR32MG21/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_mgm21" +#EFR32BG22 + - path: "lib/EFR32BG22/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg22" + - path: "lib/EFR32BG22/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg22" +#BGM22 + - path: "lib/EFR32BG22/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_bgm22" + - path: "lib/EFR32BG22/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_bgm22" +#EFR32MG22 + - path: "lib/EFR32MG22/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg22" + - path: "lib/EFR32MG22/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg22" +#MGM22 + - path: "lib/EFR32MG22/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_mgm22" + - path: "lib/EFR32MG22/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_mgm22" +#EFR32MG24 + - path: "lib/EFR32MG24/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg24" + - path: "lib/EFR32MG24/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg24" +#EFR32BG24 + - path: "lib/EFR32BG24/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg24" + - path: "lib/EFR32BG24/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg24" +#MGM24 + - path: "lib/EFR32MG24/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_mgm24" + - path: "lib/EFR32MG24/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_mgm24" +#BGM24 + - path: "lib/EFR32BG24/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_bgm24" + - path: "lib/EFR32BG24/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_bgm24" +#EFR32MG27 + - path: "lib/EFR32MG27/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg27" + - path: "lib/EFR32MG27/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg27" +#EFR32BG27 + - path: "lib/EFR32BG27/GCC/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg27" + - path: "lib/EFR32BG27/IAR/libbtmesh_advertiser_legacy.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg27" \ No newline at end of file diff --git a/protocol/bluetooth/component/btmesh_stack_config_client.slcc b/protocol/bluetooth/component/btmesh_stack_config_client.slcc new file mode 100644 index 00000000000..bfb934a33a3 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_config_client.slcc @@ -0,0 +1,18 @@ +id: "btmesh_stack_config_client" +label: "Configuration Client" +package: "Btmesh" +description: "Provides Bluetooth mesh Configuration Client model. This model is used by a Configuration Manager node to configure the publication and subscription settings of nodes, set up relay nodes and manage other settings on the nodes of the network." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_provisioner" +provides: + - name: "btmesh_stack_config_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "config_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_crypto.slcc b/protocol/bluetooth/component/btmesh_stack_crypto.slcc new file mode 100644 index 00000000000..6ec92f3104d --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_crypto.slcc @@ -0,0 +1,108 @@ +id: "btmesh_stack_crypto" +label: "Bluetooth Mesh Stack Crypto" +package: "Btmesh" +description: "This component selects and configures the cryptographic components needed by the Bluetooth mesh stack, according to the device family's capabilities." +category: "Bluetooth Mesh|Stack" +quality: "production" +template_contribution: +# All Series 2 except Lynx based devices + - name: psa_key_slots + value: + name: psa_key_slots_btmesh_stack + count: "(4 + 4 * (SL_BTMESH_CONFIG_MAX_NETKEYS + SL_BTMESH_CONFIG_MAX_FRIENDSHIPS) + 2 * SL_BTMESH_CONFIG_MAX_PROV_SESSIONS + SL_BTMESH_CONFIG_ITS_KEY_CACHE_SIZE)" + condition: + - psa_crypto + - "device_series_2" + unless: + - "device_sdid_205" +# Lynx based devices + - name: psa_key_slots + value: + name: psa_key_slots_btmesh_stack + count: "(4 + 2 * SL_BTMESH_CONFIG_MAX_PROV_SESSIONS + SL_BTMESH_CONFIG_ITS_KEY_CACHE_SIZE)" + condition: + - psa_crypto + - "device_series_2" + - "device_sdid_205" +# Regular node + - name: psa_its_files + value: + name: psa_its_files_btmesh_stack + count: "0x40" + condition: + - psa_crypto + - "device_series_2" + unless: + - "btmesh_stack_provisioner" +# Provisioner node + - name: psa_its_files + value: + name: psa_its_files_btmesh_stack + count: "0x240" + condition: + - psa_crypto + - "device_series_2" + - "btmesh_stack_provisioner" +requires: + - name: "mbedtls_cmac" + condition: + - "device_series_1" + - name: "mbedtls_ccm" + condition: + - "device_series_1" + - name: "mbedtls_ecdh" + condition: + - "device_series_1" + - name: "mbedtls_ecc" + condition: + - "device_series_1" + - name: "mbedtls_ecc_secp256r1" + condition: + - "device_series_1" + - name: "mbedtls_random" + condition: + - "device_series_1" + - name: "psa_crypto" + condition: + - "device_series_2" + - name: "psa_crypto_cmac" + condition: + - "device_series_2" + - name: "psa_crypto_ccm" + condition: + - "device_series_2" + - name: "psa_crypto_cipher_ecb" + condition: + - "device_series_2" + - name: "psa_crypto_ecdh" + condition: + - "device_series_2" + - name: "psa_crypto_ecc_secp256r1" + condition: + - "device_series_2" + - name: "psa_its" + condition: + - "device_series_2" + - name: "psa_crypto_hmac" + condition: + - "device_series_2" + - name: "psa_crypto_sha256" + condition: + - "device_series_2" + - name: "psa_crypto_sha1" + condition: + - "device_series_2" + - name: "mbedtls_hash" + condition: + - "device_series_1" + - name: "mbedtls_sha1" + condition: + - "device_series_1" + - name: "btmesh_stack_crypto_key_cache" + condition: + - "device_series_2" +provides: + - name: "btmesh_stack_crypto" + +ui_hints: + visibility: never diff --git a/protocol/bluetooth/component/btmesh_stack_crypto_key_cache.slcc b/protocol/bluetooth/component/btmesh_stack_crypto_key_cache.slcc new file mode 100644 index 00000000000..a7579cb587a --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_crypto_key_cache.slcc @@ -0,0 +1,335 @@ +id: "btmesh_stack_crypto_key_cache" +label: "RAM cache for cryptographic keys" +package: "Btmesh" +description: "Provides an internal RAM cache to speed up cryptographic key access for application keys and device keys on Series 2 devices. The key cache cannot be used in TrustZone applications." +category: "Bluetooth Mesh|Stack" +quality: "production" +root_path: "protocol/bluetooth" +library: +#EFR32BG21 + - path: "lib/EFR32BG21/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg21" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG21/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg21" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG21/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg21" + - "trustzone_nonsecure" + - path: "lib/EFR32BG21/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg21" + - "trustzone_nonsecure" +#BGM21 + - path: "lib/EFR32BG21/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_bgm21" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG21/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_bgm21" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG21/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_bgm21" + - "trustzone_nonsecure" + - path: "lib/EFR32BG21/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_bgm21" + - "trustzone_nonsecure" +#EFR32MG21 + - path: "lib/EFR32MG21/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg21" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG21/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg21" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG21/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg21" + - "trustzone_nonsecure" + - path: "lib/EFR32MG21/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg21" + - "trustzone_nonsecure" +#MGM21 + - path: "lib/EFR32MG21/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_mgm21" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG21/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_mgm21" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG21/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_mgm21" + - "trustzone_nonsecure" + - path: "lib/EFR32MG21/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_mgm21" + - "trustzone_nonsecure" +#EFR32BG22 + - path: "lib/EFR32BG22/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg22" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG22/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg22" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG22/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg22" + - "trustzone_nonsecure" + - path: "lib/EFR32BG22/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg22" + - "trustzone_nonsecure" +#BGM22 + - path: "lib/EFR32BG22/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_bgm22" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG22/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_bgm22" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG22/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_bgm22" + - "trustzone_nonsecure" + - path: "lib/EFR32BG22/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_bgm22" + - "trustzone_nonsecure" +#EFR32MG22 + - path: "lib/EFR32MG22/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg22" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG22/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg22" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG22/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg22" + - "trustzone_nonsecure" + - path: "lib/EFR32MG22/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg22" + - "trustzone_nonsecure" +#MGM22 + - path: "lib/EFR32MG22/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_mgm22" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG22/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_mgm22" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG22/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_mgm22" + - "trustzone_nonsecure" + - path: "lib/EFR32MG22/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_mgm22" + - "trustzone_nonsecure" +#MGM24 + - path: "lib/EFR32MG24/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_mgm24" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG24/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_mgm24" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG24/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_mgm24" + - "trustzone_nonsecure" + - path: "lib/EFR32MG24/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_mgm24" + - "trustzone_nonsecure" +#BGM24 + - path: "lib/EFR32BG24/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_bgm24" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG24/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_bgm24" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG24/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_bgm24" + - "trustzone_nonsecure" + - path: "lib/EFR32BG24/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_bgm24" + - "trustzone_nonsecure" +#EFR32BG24 + - path: "lib/EFR32BG24/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg24" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG24/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg24" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG24/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg24" + - "trustzone_nonsecure" + - path: "lib/EFR32BG24/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg24" + - "trustzone_nonsecure" +#EFR32MG24 + - path: "lib/EFR32MG24/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg24" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG24/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg24" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG24/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg24" + - "trustzone_nonsecure" + - path: "lib/EFR32MG24/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg24" + - "trustzone_nonsecure" +#EFR32MG27 + - path: "lib/EFR32MG27/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg27" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG27/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg27" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32MG27/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg27" + - "trustzone_nonsecure" + - path: "lib/EFR32MG27/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg27" + - "trustzone_nonsecure" +#EFR32BG27 + - path: "lib/EFR32BG27/GCC/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg27" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG27/IAR/libbtmesh_crypto_key_cache.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg27" + unless: + - "trustzone_nonsecure" + - path: "lib/EFR32BG27/GCC/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg27" + - "trustzone_nonsecure" + - path: "lib/EFR32BG27/IAR/libbtmesh_crypto_key_cache_dummy.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg27" + - "trustzone_nonsecure" +provides: + - name: "btmesh_stack_crypto_key_cache" + +ui_hints: + visibility: never diff --git a/protocol/bluetooth/component/btmesh_stack_dfu_model.slcc b/protocol/bluetooth/component/btmesh_stack_dfu_model.slcc new file mode 100644 index 00000000000..f71cef3e825 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_dfu_model.slcc @@ -0,0 +1,225 @@ +id: "btmesh_stack_dfu_model" +label: "Bluetooth Mesh DFU Model Library" +package: "Btmesh" +description: "This component provides the Bluetooth mesh Device Firmware Upgrade model library. The library is structured so that only the relevant parts will be included in the application binary, depending on which of the models are used by the application." +category: "Bluetooth Mesh|Stack|DFU" +quality: "evaluation" +root_path: "protocol/bluetooth" +include: + - path: "inc" + file_list: + - path: "sl_btmesh_dfu_platform_capi.h" + - path: "sl_btmesh_model_specification_v1_1_defs.h" + +library: +#EFR32BG12P + - path: "lib/EFR32BG12P/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg12p" + - path: "lib/EFR32BG12P/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg12p" +#EFR32MG12P + - path: "lib/EFR32MG12P/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg12p" + - path: "lib/EFR32MG12P/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg12p" +#MGM12 + - path: "lib/EFR32MG12P/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_mgm12" + - path: "lib/EFR32MG12P/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_mgm12" +#EFR32BG13P + - path: "lib/EFR32BG13P/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg13p" + - path: "lib/EFR32BG13P/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg13p" +#BGM13 + - path: "lib/EFR32BG13P/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_bgm13" + - path: "lib/EFR32BG13P/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_bgm13" +#EFR32MG13P + - path: "lib/EFR32MG13P/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg13p" + - path: "lib/EFR32MG13P/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg13p" +#MGM13 + - path: "lib/EFR32MG13P/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_mgm13" + - path: "lib/EFR32MG13P/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_mgm13" +#EFR32BG21 + - path: "lib/EFR32BG21/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg21" + - path: "lib/EFR32BG21/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg21" +#BGM21 + - path: "lib/EFR32BG21/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_bgm21" + - path: "lib/EFR32BG21/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_bgm21" +#EFR32MG21 + - path: "lib/EFR32MG21/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg21" + - path: "lib/EFR32MG21/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg21" +#MGM21 + - path: "lib/EFR32MG21/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_mgm21" + - path: "lib/EFR32MG21/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_mgm21" +#EFR32BG22 + - path: "lib/EFR32BG22/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg22" + - path: "lib/EFR32BG22/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg22" +#BGM22 + - path: "lib/EFR32BG22/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_bgm22" + - path: "lib/EFR32BG22/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_bgm22" +#EFR32MG22 + - path: "lib/EFR32MG22/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg22" + - path: "lib/EFR32MG22/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg22" +#EFR32MG22 + - path: "lib/EFR32MG22/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_mgm22" + - path: "lib/EFR32MG22/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_mgm22" +#MGM22 + - path: "lib/EFR32MG22/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_mgm22" + - path: "lib/EFR32MG22/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_mgm22" +#EFR32MG24 + - path: "lib/EFR32MG24/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg24" + - path: "lib/EFR32MG24/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg24" +#EFR32BG24 + - path: "lib/EFR32BG24/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg24" + - path: "lib/EFR32BG24/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg24" +#MGM24 + - path: "lib/EFR32MG24/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_mgm24" + - path: "lib/EFR32MG24/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_mgm24" +#BGM24 + - path: "lib/EFR32BG24/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_bgm24" + - path: "lib/EFR32BG24/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_bgm24" +#EFR32MG27 + - path: "lib/EFR32MG27/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg27" + - path: "lib/EFR32MG27/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg27" +#EFR32BG27 + - path: "lib/EFR32BG27/GCC/libbtmesh_model_dfu.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg27" + - path: "lib/EFR32BG27/IAR/libbtmesh_model_dfu.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg27" +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: "btmesh_stack_mbt_model" +provides: + - name: "btmesh_stack_dfu_model" + +template_contribution: + - name: component_catalog + value: btmesh_stack_dfu_model + +ui_hints: + visibility: never diff --git a/protocol/bluetooth/component/btmesh_stack_friend.slcc b/protocol/bluetooth/component/btmesh_stack_friend.slcc new file mode 100644 index 00000000000..3a15701acbf --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_friend.slcc @@ -0,0 +1,24 @@ +id: "btmesh_stack_friend" +label: "Friend" +package: "Btmesh" +description: "Provides Bluetooth mesh Friend functionality. A Friend node caches messages and network security updates for a Low Power Node." +category: "Bluetooth Mesh|Stack|Features" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: component_catalog +provides: + - name: "btmesh_stack_friend" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "friend" + priority: 1 + - name: btmesh_feature_bitmask + value: + count: 4 + - name: component_catalog + value: btmesh_stack_friend diff --git a/protocol/bluetooth/component/btmesh_stack_fw_distribution_client.slcc b/protocol/bluetooth/component/btmesh_stack_fw_distribution_client.slcc new file mode 100644 index 00000000000..7a58113c1c3 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_fw_distribution_client.slcc @@ -0,0 +1,22 @@ +id: "btmesh_stack_fw_distribution_client" +label: "Firmware Distribution Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Firmware Distribution Client model. It is required for the Initiator role. The model is used to manage firmware images and firmware distributions on a Distributor node. This model uses the BLOB Transfer Client model to upload firmware images to a Distributor node." +category: "Bluetooth Mesh|Stack|Models|DFU" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: "btmesh_stack_mbt_client" + - name: "btmesh_stack_dfu_model" +provides: + - name: "btmesh_stack_fw_distribution_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "fw_dist_client" + priority: 1 + - name: component_catalog + value: btmesh_stack_fw_distribution_client diff --git a/protocol/bluetooth/component/btmesh_stack_fw_distribution_server.slcc b/protocol/bluetooth/component/btmesh_stack_fw_distribution_server.slcc new file mode 100644 index 00000000000..c746a8dd7dd --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_fw_distribution_server.slcc @@ -0,0 +1,24 @@ +id: "btmesh_stack_fw_distribution_server" +label: "Firmware Distribution Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Firmware Distribution Server model. It is required for the Distributor role. The model receives and stores firmware images as instructed by a Firmware Distribution Client. When instructed by the Client, the Firmware Distribution Server will distribute a firmware image to a set of nodes chosen by the Client. This model uses the BLOB Transfer Server model to receive firmware images; the Firmware Update Client model to manage updating the nodes; and the BLOB Transfer Client model to send the firmware image data to the nodes." +category: "Bluetooth Mesh|Stack|Models|DFU" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: "btmesh_stack_dfu_model" + - name: "btmesh_stack_mbt_client" + - name: "btmesh_stack_mbt_server" + - name: "btmesh_stack_fw_update_client" +provides: + - name: "btmesh_stack_fw_distribution_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "fw_dist_server" + priority: 1 + - name: component_catalog + value: btmesh_stack_fw_distribution_server diff --git a/protocol/bluetooth/component/btmesh_stack_fw_list_cache.slcc b/protocol/bluetooth/component/btmesh_stack_fw_list_cache.slcc new file mode 100644 index 00000000000..a54999c3f2c --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_fw_list_cache.slcc @@ -0,0 +1,226 @@ +id: "btmesh_stack_fw_list_cache" +label: "Firmware List Cache for Distribution Server Model" +package: "Btmesh" +description: "This component provides a simplistic implementation of the Firmware Distribution Server's Firmware List -related platform APIs. The cache stores the Firmware ID's and metadata of received images, but does not actually store any image data, and is not persistent across resets. This component should be used for testing purposes only. The Distributor example provides a proper reference implementation of the Firmware List." +category: "Bluetooth Mesh|Stack|Models|DFU" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack_fw_distribution_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "ncp_fw_list" + priority: 1 + - name: component_catalog + value: btmesh_stack_fw_list_cache + +library: +#EFR32BG12P + - path: "lib/EFR32BG12P/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg12p" + - path: "lib/EFR32BG12P/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg12p" +#EFR32MG12P + - path: "lib/EFR32MG12P/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg12p" + - path: "lib/EFR32MG12P/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg12p" +#MGM12 + - path: "lib/EFR32MG12P/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_mgm12" + - path: "lib/EFR32MG12P/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_mgm12" +#EFR32BG13P + - path: "lib/EFR32BG13P/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg13p" + - path: "lib/EFR32BG13P/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg13p" +#BGM13 + - path: "lib/EFR32BG13P/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_bgm13" + - path: "lib/EFR32BG13P/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_bgm13" +#EFR32MG13P + - path: "lib/EFR32MG13P/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg13p" + - path: "lib/EFR32MG13P/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg13p" +#MGM13 + - path: "lib/EFR32MG13P/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_mgm13" + - path: "lib/EFR32MG13P/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_mgm13" +#EFR32BG21 + - path: "lib/EFR32BG21/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg21" + - path: "lib/EFR32BG21/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg21" +#BGM21 + - path: "lib/EFR32BG21/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_bgm21" + - path: "lib/EFR32BG21/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_bgm21" +#EFR32MG21 + - path: "lib/EFR32MG21/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg21" + - path: "lib/EFR32MG21/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg21" +#MGM21 + - path: "lib/EFR32MG21/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_mgm21" + - path: "lib/EFR32MG21/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_mgm21" +#EFR32BG22 + - path: "lib/EFR32BG22/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg22" + - path: "lib/EFR32BG22/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg22" +#BGM22 + - path: "lib/EFR32BG22/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_bgm22" + - path: "lib/EFR32BG22/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_bgm22" +#EFR32MG22 + - path: "lib/EFR32MG22/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg22" + - path: "lib/EFR32MG22/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg22" +#EFR32MG22 + - path: "lib/EFR32MG22/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_mgm22" + - path: "lib/EFR32MG22/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_mgm22" +#MGM24 + - path: "lib/EFR32MG24/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_mgm24" + - path: "lib/EFR32MG24/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_mgm24" +#BGM24 + - path: "lib/EFR32BG24/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_bgm24" + - path: "lib/EFR32BG24/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_bgm24" +#EFR32BG24 + - path: "lib/EFR32BG24/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg24" + - path: "lib/EFR32BG24/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg24" +#EFR32MG24 + - path: "lib/EFR32MG24/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg24" + - path: "lib/EFR32MG24/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg24" +#MGM27 + - path: "lib/EFR32MG27/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_mgm27" + - path: "lib/EFR32MG27/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_mgm27" +#BGM27 + - path: "lib/EFR32BG27/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_bgm27" + - path: "lib/EFR32BG27/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_bgm27" +#EFR32MG27 + - path: "lib/EFR32MG27/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg27" + - path: "lib/EFR32MG27/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg27" +#EFR32BG27 + - path: "lib/EFR32BG27/GCC/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg27" + - path: "lib/EFR32BG27/IAR/libbtmesh_dfu_ncp_fw_list.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg27" diff --git a/protocol/bluetooth/component/btmesh_stack_fw_standalone_updater.slcc b/protocol/bluetooth/component/btmesh_stack_fw_standalone_updater.slcc new file mode 100644 index 00000000000..575ee04b9e1 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_fw_standalone_updater.slcc @@ -0,0 +1,23 @@ +id: "btmesh_stack_fw_standalone_updater" +label: "Firmware Standalone Updater" +package: "Btmesh" +description: "This component provides the Bluetooth mesh Device Firmware Upgrade Standalone Updater functionality. The Standalone Updater role combines the responsibilities of the Initiator and Distributor into one node. The Standalone Updater chooses which nodes to update, and which firmware images to use by itself. It uses the Firmware Update Client model to manage the updates and the BLOB Transfer Client to send the firmware image data to the nodes." +category: "Bluetooth Mesh|Stack|Models|DFU" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: "btmesh_stack_dfu_model" + - name: "btmesh_stack_mbt_client" + - name: "btmesh_stack_fw_update_client" +provides: + - name: "btmesh_stack_fw_standalone_updater" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "fw_standalone_updater" + priority: 1 + - name: component_catalog + value: btmesh_stack_fw_standalone_updater diff --git a/protocol/bluetooth/component/btmesh_stack_fw_update_client.slcc b/protocol/bluetooth/component/btmesh_stack_fw_update_client.slcc new file mode 100644 index 00000000000..9d98fecab61 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_fw_update_client.slcc @@ -0,0 +1,22 @@ +id: "btmesh_stack_fw_update_client" +label: "Firmware Update Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Firmware Update Client model. It is used by the Initiator, Distributor and Standalone Updater roles to check the current firmware and manage updates on a node. When used by a Distributor or Standalone Updater, the model uses the BLOB Transfer Client model to send firmware image data to a set of nodes." +category: "Bluetooth Mesh|Stack|Models|DFU" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: "btmesh_stack_dfu_model" + - name: "btmesh_stack_mbt_client" +provides: + - name: "btmesh_stack_fw_update_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "fw_update_client" + priority: 1 + - name: component_catalog + value: btmesh_stack_fw_update_client diff --git a/protocol/bluetooth/component/btmesh_stack_fw_update_server.slcc b/protocol/bluetooth/component/btmesh_stack_fw_update_server.slcc new file mode 100644 index 00000000000..35253cfab7c --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_fw_update_server.slcc @@ -0,0 +1,22 @@ +id: "btmesh_stack_fw_update_server" +label: "Firmware Update Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Firmware Update Server model. It is used by the Updating Node role to provide information about the current firmware on the node and where to find firmware updates; it also provides an interface for a Distributor or Standalone Updater to manage updating the node. The BLOB Transfer Server model is used to receive firmware image data." +category: "Bluetooth Mesh|Stack|Models|DFU" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: "btmesh_stack_dfu_model" + - name: "btmesh_stack_mbt_server" +provides: + - name: "btmesh_stack_fw_update_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "fw_update_server" + priority: 1 + - name: component_catalog + value: btmesh_stack_fw_update_server diff --git a/protocol/bluetooth/component/btmesh_stack_gatt_prov_bearer.slcc b/protocol/bluetooth/component/btmesh_stack_gatt_prov_bearer.slcc new file mode 100644 index 00000000000..fe3549ef666 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_gatt_prov_bearer.slcc @@ -0,0 +1,25 @@ +id: "btmesh_stack_gatt_prov_bearer" +label: "GATT Provisioning Bearer" +package: "Btmesh" +description: "Enables the Bluetooth Mesh PB-GATT Provisioning Bearer for the Node." +category: "Bluetooth Mesh|Stack" +quality: "production" +root_path: "protocol/bluetooth/component" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_node" + - name: bluetooth_feature_gatt_server + - name: gatt_configuration + - name: bluetooth_feature_dynamic_gattdb + +provides: + - name: "btmesh_stack_gatt_prov_bearer" + +config_file: + - path: gatt_service_mesh_prov.xml + directory: btconf + +template_contribution: + - name: btmesh_stack_gatt_prov_bearer + value: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_generic_client.slcc b/protocol/bluetooth/component/btmesh_stack_generic_client.slcc new file mode 100644 index 00000000000..52608c830c4 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_generic_client.slcc @@ -0,0 +1,20 @@ +id: "btmesh_stack_generic_client" +label: "Generic Client Models" +package: "Btmesh" +description: "Provides the Bluetooth mesh Generic Client models. The libraries are structured so that only the specific categories of models that are enabled with their respective BGAPI init calls are included in the application binary. For example, an application that wishes to use Generic On/Off and Generic Level must call sl_btmesh_cmd_generic_client_init_on_off() and sl_btmesh_cmd_generic_client_init_level()." +category: "Bluetooth Mesh|Stack|Models" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_generic_client" + - name: "btmesh_generic_model" + allow_multiple: true +template_contribution: + - name: btmesh_bgapi_class + value: + class: "generic_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_generic_server.slcc b/protocol/bluetooth/component/btmesh_stack_generic_server.slcc new file mode 100644 index 00000000000..744488e2e5b --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_generic_server.slcc @@ -0,0 +1,20 @@ +id: "btmesh_stack_generic_server" +label: "Generic Server Models" +package: "Btmesh" +description: "Provides the Bluetooth mesh Generic Server models. The libraries are structured so that only the specific categories of models that are enabled with their respective BGAPI init calls are included in the application binary. For example, an application that wishes to use Generic On/Off and Generic Level must call sl_btmesh_cmd_generic_server_init_on_off() and sl_btmesh_cmd_generic_server_init_level()." +category: "Bluetooth Mesh|Stack|Models" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_generic_server" + - name: "btmesh_generic_model" + allow_multiple: true +template_contribution: + - name: btmesh_bgapi_class + value: + class: "generic_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_health_client.slcc b/protocol/bluetooth/component/btmesh_stack_health_client.slcc new file mode 100644 index 00000000000..0f00bdcf2d6 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_health_client.slcc @@ -0,0 +1,18 @@ +id: "btmesh_stack_health_client" +label: "Health Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Health Client model. The model is used to retrieve fault states from other nodes, and adjust how often they publish their fault states. The fault states can be used to indicate a low battery or other operational problem. The model is also used to enable or disable the Attention Timer on a node, which can be used to provide a visual or audio cue about the node's location to the user." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_health_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "health_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_health_server.slcc b/protocol/bluetooth/component/btmesh_stack_health_server.slcc new file mode 100644 index 00000000000..ee08d605880 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_health_server.slcc @@ -0,0 +1,18 @@ +id: "btmesh_stack_health_server" +label: "Health Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Health Server model. The model is used to indicate fault states, such as a low battery or other operational problem. The model also provides an interface to its Attention Timer, which can be used to provide a visual or audio cue about the node's location to the user. It is mandatory to have a Health Server on each element of the node." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_node" +provides: + - name: "btmesh_stack_health_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "health_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_lc_client.slcc b/protocol/bluetooth/component/btmesh_stack_lc_client.slcc new file mode 100644 index 00000000000..55ca6b33333 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_lc_client.slcc @@ -0,0 +1,20 @@ +id: "btmesh_stack_lc_client" +label: "Light Control Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh LC Client model. This model is used to manage the settings of lighting controller nodes. It is used to configure whether a node should use an occupancy sensor to automatically adjust lighting, or only work via a manual switch. The feedback loop coefficients of the controller, timings between state transitions, and ambient light threshold levels can also be adjusted via this model." +category: "Bluetooth Mesh|Stack|Models" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_lc_client" + - name: "btmesh_lighting_model" + allow_multiple: true +template_contribution: + - name: btmesh_bgapi_class + value: + class: "lc_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_lc_server.slcc b/protocol/bluetooth/component/btmesh_stack_lc_server.slcc new file mode 100644 index 00000000000..03a7348b929 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_lc_server.slcc @@ -0,0 +1,22 @@ +id: "btmesh_stack_lc_server" +label: "Light Control Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh LC Server model. This model provides automatic lighting control, either via occupancy and ambient light sensors, or manual switches, or a combination of both. Turning the lights on and off, and whether to use automatic light control and occupancy sensor can be configured via this model. The control loop parameters and state transition times used by the LC Server are managed by an LC Client via the LC Setup Server's interface." +category: "Bluetooth Mesh|Stack|Models" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_lc_setup_server" + - name: "btmesh_stack_generic_server" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_lc_server" + - name: "btmesh_lighting_model" + allow_multiple: true +template_contribution: + - name: btmesh_bgapi_class + value: + class: "lc_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_lc_setup_server.slcc b/protocol/bluetooth/component/btmesh_stack_lc_setup_server.slcc new file mode 100644 index 00000000000..d91affab6bd --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_lc_setup_server.slcc @@ -0,0 +1,19 @@ +id: "btmesh_stack_lc_setup_server" +label: "Light Control Setup Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh LC Setup Server model. This model works as the configuration interface for an LC Server located in the same element. It allows an LC Client to adjust the feedback loop coefficients, state transition times, and ambient light threshold levels. The LC Setup Server is separate from the LC Server to provide the possibility for application key domain separation. For example, an LC Client could have the permission to turn the lights on and off by knowing the application key the LC Server uses, but it would not have the permission to change the light controller configuration if it doesn't have the key the LC Setup Server uses." +category: "Bluetooth Mesh|Stack|Models" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_lc_server" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_lc_setup_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "lc_setup_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_lcd_client.slcc b/protocol/bluetooth/component/btmesh_stack_lcd_client.slcc new file mode 100644 index 00000000000..938b9d4eb12 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_lcd_client.slcc @@ -0,0 +1,18 @@ +id: "btmesh_stack_lcd_client" +label: "Large Composition Data Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Large Composition Data Client model. This model enables retrieving a remote node's Device Composition Data chunk by chunk, when the data is too large to retrieve in a single mesh message. It also enables querying a remote node's Metadata pages, which provide additional information about the models present on the remote node, such as the supported list of Sensor Property IDs for a Sensor Server or the supported temperature range for a Light CTL Temperature Server." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_lcd_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "lcd_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_lcd_server.slcc b/protocol/bluetooth/component/btmesh_stack_lcd_server.slcc new file mode 100644 index 00000000000..300ab68859f --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_lcd_server.slcc @@ -0,0 +1,18 @@ +id: "btmesh_stack_lcd_server" +label: "Large Composition Data Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Large Composition Data Server model. This model provides the node an interface for a remote node to query Device Composition Data that is larger than what could fit in a single mesh message. It also provides the interface for a remote node to query the Metadata pages of the node, which provide additional information about the models present on the node, such as the supported list of Sensor Property IDs for a Sensor Server or the supported temperature range for a Light CTL Temperature Server." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_lcd_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "lcd_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_lpn.slcc b/protocol/bluetooth/component/btmesh_stack_lpn.slcc new file mode 100644 index 00000000000..bbf796dadfa --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_lpn.slcc @@ -0,0 +1,24 @@ +id: "btmesh_stack_lpn" +label: "LPN" +package: "Btmesh" +description: "Provides Bluetooth mesh Low Power Node feature. When the LPN feature is initialized by the node, it will stop scanning for messages in the background. To receive messages from the network, the application will need to establish a Friendship, where a Friend node will cache mesh messages and beacons on the LPN's behalf. The application should then periodically poll its Friend to retrieve any messages the Friend may have cached for the LPN." +category: "Bluetooth Mesh|Stack|Features" +quality: "production" +root_path: "protocol/bluetooth/component" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_node" + - name: component_catalog +provides: + - name: "btmesh_stack_lpn" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "lpn" + priority: 1 + - name: btmesh_feature_bitmask + value: + count: 8 + - name: component_catalog + value: btmesh_stack_lpn \ No newline at end of file diff --git a/protocol/bluetooth/component/btmesh_stack_mbt_client.slcc b/protocol/bluetooth/component/btmesh_stack_mbt_client.slcc new file mode 100644 index 00000000000..f8c03ac86d0 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_mbt_client.slcc @@ -0,0 +1,21 @@ +id: "btmesh_stack_mbt_client" +label: "BLOB Transfer Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh BLOB Transfer Client model. It is used to transfer large binary objects to other nodes in the network, either in a unicast or multicast fashion." +category: "Bluetooth Mesh|Stack|Models|DFU" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: "btmesh_stack_mbt_model" +provides: + - name: "btmesh_stack_mbt_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "mbt_client" + priority: 1 + - name: component_catalog + value: btmesh_stack_mbt_client diff --git a/protocol/bluetooth/component/btmesh_stack_mbt_model.slcc b/protocol/bluetooth/component/btmesh_stack_mbt_model.slcc new file mode 100644 index 00000000000..7be88c58691 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_mbt_model.slcc @@ -0,0 +1,219 @@ +id: "btmesh_stack_mbt_model" +label: "Bluetooth Mesh BLOB Transfer Model Library" +package: "Btmesh" +description: "Provides Bluetooth Mesh Binary Large Object (BLOB) Transfer Model Library. Contains BLOB Transfer Client and Server models." +category: "Bluetooth Mesh|Stack|DFU" +quality: "evaluation" +root_path: "protocol/bluetooth" +include: + - path: "inc" + file_list: + - path: "sl_btmesh_model_specification_v1_1_defs.h" + +library: +#EFR32BG12P + - path: "lib/EFR32BG12P/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg12p" + - path: "lib/EFR32BG12P/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg12p" +#EFR32MG12P + - path: "lib/EFR32MG12P/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg12p" + - path: "lib/EFR32MG12P/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg12p" +#MGM12 + - path: "lib/EFR32MG12P/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_mgm12" + - path: "lib/EFR32MG12P/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_mgm12" +#EFR32BG13P + - path: "lib/EFR32BG13P/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg13p" + - path: "lib/EFR32BG13P/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg13p" +#BGM13 + - path: "lib/EFR32BG13P/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_bgm13" + - path: "lib/EFR32BG13P/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_bgm13" +#EFR32MG13P + - path: "lib/EFR32MG13P/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg13p" + - path: "lib/EFR32MG13P/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg13p" +#MGM13 + - path: "lib/EFR32MG13P/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_mgm13" + - path: "lib/EFR32MG13P/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_mgm13" +#EFR32BG21 + - path: "lib/EFR32BG21/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg21" + - path: "lib/EFR32BG21/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg21" +#BGM21 + - path: "lib/EFR32BG21/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_bgm21" + - path: "lib/EFR32BG21/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_bgm21" +#EFR32MG21 + - path: "lib/EFR32MG21/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg21" + - path: "lib/EFR32MG21/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg21" +#MGM21 + - path: "lib/EFR32MG21/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_mgm21" + - path: "lib/EFR32MG21/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_mgm21" +#EFR32BG22 + - path: "lib/EFR32BG22/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg22" + - path: "lib/EFR32BG22/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg22" +#BGM22 + - path: "lib/EFR32BG22/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_bgm22" + - path: "lib/EFR32BG22/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_bgm22" +#EFR32MG22 + - path: "lib/EFR32MG22/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg22" + - path: "lib/EFR32MG22/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg22" +#EFR32MG22 + - path: "lib/EFR32MG22/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_mgm22" + - path: "lib/EFR32MG22/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_mgm22" +#MGM22 + - path: "lib/EFR32MG22/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_mgm22" + - path: "lib/EFR32MG22/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_mgm22" +#EFR32MG24 + - path: "lib/EFR32MG24/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg24" + - path: "lib/EFR32MG24/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg24" +#EFR32BG24 + - path: "lib/EFR32BG24/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg24" + - path: "lib/EFR32BG24/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg24" +#MGM24 + - path: "lib/EFR32MG24/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_mgm24" + - path: "lib/EFR32MG24/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_mgm24" +#BGM24 + - path: "lib/EFR32BG24/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_bgm24" + - path: "lib/EFR32BG24/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_bgm24" +#EFR32MG27 + - path: "lib/EFR32MG27/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32mg27" + - path: "lib/EFR32MG27/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32mg27" +#EFR32BG27 + - path: "lib/EFR32BG27/GCC/libbtmesh_model_mbt.a" + condition: + - "toolchain_gcc" + - "device_family_efr32bg27" + - path: "lib/EFR32BG27/IAR/libbtmesh_model_mbt.a" + condition: + - "toolchain_iar" + - "device_family_efr32bg27" +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_mbt_model" + +ui_hints: + visibility: never diff --git a/protocol/bluetooth/component/btmesh_stack_mbt_server.slcc b/protocol/bluetooth/component/btmesh_stack_mbt_server.slcc new file mode 100644 index 00000000000..08ba497938f --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_mbt_server.slcc @@ -0,0 +1,21 @@ +id: "btmesh_stack_mbt_server" +label: "BLOB Transfer Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh BLOB Transfer Server model. It is used to receive large binary objects from other nodes in the network." +category: "Bluetooth Mesh|Stack|Models|DFU" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: "btmesh_stack_mbt_model" +provides: + - name: "btmesh_stack_mbt_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "mbt_server" + priority: 1 + - name: component_catalog + value: btmesh_stack_mbt_server diff --git a/protocol/bluetooth/component/btmesh_stack_migration.slcc b/protocol/bluetooth/component/btmesh_stack_migration.slcc new file mode 100644 index 00000000000..32fb6beb18d --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_migration.slcc @@ -0,0 +1,17 @@ +id: "btmesh_stack_migration" +label: "Migration" +package: "Btmesh" +description: "Provides Bluetooth mesh stack persistent storage migration code for applications that were built with releases older than v3.2. The migration commands need to be executed once, before the node is initialized. This migration code does not need to be included in subsequent application versions, as long as the persistent storage has been migrated once." +category: "Bluetooth Mesh|Stack" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" +provides: + - name: "btmesh_stack_migration" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "migration" + priority: 3 \ No newline at end of file diff --git a/protocol/bluetooth/component/btmesh_stack_node.slcc b/protocol/bluetooth/component/btmesh_stack_node.slcc new file mode 100644 index 00000000000..8654b09112d --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_node.slcc @@ -0,0 +1,19 @@ +id: "btmesh_stack_node" +label: "Node" +package: "Btmesh" +description: "Provides the Bluetooth Mesh stack API for unprovisioned devices and provisioned nodes. Provisioning is the process of adding a new, unprovisioned device to a Bluetooth mesh network. This API is the bedrock for building Bluetooth mesh applications." +category: "Bluetooth Mesh|Stack" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" +provides: + - name: "btmesh_stack_node" + - name: "btmesh_core" + allow_multiple: true +template_contribution: + - name: btmesh_bgapi_class + value: + class: "node" + priority: 3 diff --git a/protocol/bluetooth/component/btmesh_stack_on_demand_private_proxy_client.slcc b/protocol/bluetooth/component/btmesh_stack_on_demand_private_proxy_client.slcc new file mode 100644 index 00000000000..2377dcf4e32 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_on_demand_private_proxy_client.slcc @@ -0,0 +1,18 @@ +id: "btmesh_stack_on_demand_private_proxy_client" +label: "On-Demand Private Proxy Client Model" +package: "Btmesh" +description: "Provides the Bluetooth mesh On-Demand Private Proxy Client model. It is used to support the functionality of a node that can configure the advertising with Private Network Identity type functionality of another node." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_on_demand_private_proxy_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "on_demand_private_proxy_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_on_demand_private_proxy_server.slcc b/protocol/bluetooth/component/btmesh_stack_on_demand_private_proxy_server.slcc new file mode 100644 index 00000000000..608edcb18f5 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_on_demand_private_proxy_server.slcc @@ -0,0 +1,18 @@ +id: "btmesh_stack_on_demand_private_proxy_server" +label: "On-Demand Private Proxy Server Model" +package: "Btmesh" +description: "Provides the Bluetooth mesh On-Demand Private Proxy Server model. It is used to support the configuration of the advertising with Private Network Identity type functionality of a node." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_on_demand_private_proxy_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "on_demand_private_proxy_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_private_beacon_client.slcc b/protocol/bluetooth/component/btmesh_stack_private_beacon_client.slcc new file mode 100644 index 00000000000..0dec86e41be --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_private_beacon_client.slcc @@ -0,0 +1,17 @@ +id: "btmesh_stack_private_beacon_client" +label: "Private Beacon Client Model" +package: "Btmesh" +description: "Provides the Bluetooth mesh Private Beacon Client model. It is used to support the functionality of a node that can configure the Mesh Private beacons functionality of another node." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack_provisioner" +provides: + - name: "btmesh_stack_private_beacon_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "private_beacon_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_private_beacon_server.slcc b/protocol/bluetooth/component/btmesh_stack_private_beacon_server.slcc new file mode 100644 index 00000000000..84c2f9acb1e --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_private_beacon_server.slcc @@ -0,0 +1,17 @@ +id: "btmesh_stack_private_beacon_server" +label: "Private Beacon Server Model" +package: "Btmesh" +description: "Provides the Bluetooth mesh Private Beacon Server model. It is used to support the configuration of the Mesh Private beacons functionality of a node." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack_node" +provides: + - name: "btmesh_stack_private_beacon_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "private_beacon_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_provisioner.slcc b/protocol/bluetooth/component/btmesh_stack_provisioner.slcc new file mode 100644 index 00000000000..d07afc4e327 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_provisioner.slcc @@ -0,0 +1,19 @@ +id: "btmesh_stack_provisioner" +label: "Provisioner" +package: "Btmesh" +description: "Provides Bluetooth mesh Provisioner functionality. Provisioning is the process of adding a new, unprovisioned device to a Bluetooth mesh network, such as a light bulb. The process is managed by a provisioner." +category: "Bluetooth Mesh|Stack" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" +provides: + - name: "btmesh_stack_provisioner" + - name: "btmesh_core" + allow_multiple: true +template_contribution: + - name: btmesh_bgapi_class + value: + class: "prov" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_proxy.slcc b/protocol/bluetooth/component/btmesh_stack_proxy.slcc new file mode 100644 index 00000000000..3d46b073b78 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_proxy.slcc @@ -0,0 +1,28 @@ +id: "btmesh_stack_proxy" +label: "Proxy" +package: "Btmesh" +description: "Provides Bluetooth mesh GATT Proxy functionality. It is mainly used by devices such as mobile phones to communicate with the rest of the Bluetooth mesh network through a proxy device. The proxy protocol is designed to enable nodes to send and receive the Bluetooth Mesh network packets over a connection-oriented bearer." +category: "Bluetooth Mesh|Stack|Features" +quality: "production" +root_path: "protocol/bluetooth/component" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: component_catalog +provides: + - name: "btmesh_stack_proxy" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "proxy" + priority: 1 + - name: btmesh_feature_bitmask + value: + count: 2 + - name: btmesh_stack_proxy + value: 1 + - name: component_catalog + value: btmesh_stack_proxy +validation_helper: + - path: proxy_validation.lua diff --git a/protocol/bluetooth/component/btmesh_stack_proxy_client.slcc b/protocol/bluetooth/component/btmesh_stack_proxy_client.slcc new file mode 100644 index 00000000000..5a3cd2b9ded --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_proxy_client.slcc @@ -0,0 +1,22 @@ +id: "btmesh_stack_proxy_client" +label: "Proxy Client" +package: "Btmesh" +description: "Provides Bluetooth mesh GATT Proxy client-side functionality. The Proxy Client supports a mesh bearer using the Proxy protocol. For example, the Proxy Client can use the GATT bearer to send mesh messages to a node that supports the advertising bearer." +category: "Bluetooth Mesh|Stack" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_proxy" + - name: "btmesh_core" + - name: "bluetooth_feature_gatt" + +provides: + - name: "btmesh_stack_proxy_client" + +template_contribution: + - name: btmesh_bgapi_class + value: + class: "proxy_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_proxy_server.slcc b/protocol/bluetooth/component/btmesh_stack_proxy_server.slcc new file mode 100644 index 00000000000..55ad34cc1ce --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_proxy_server.slcc @@ -0,0 +1,30 @@ +id: "btmesh_stack_proxy_server" +label: "Proxy Server" +package: "Btmesh" +description: "Provides Bluetooth mesh GATT Proxy server-side functionality. The Proxy Server is a node that supports a mesh bearer using the Proxy protocol and at least one other mesh bearer. For example, the Proxy Server can forward mesh messages between the advertising bearer and the GATT bearer." +category: "Bluetooth Mesh|Stack" +quality: "production" +root_path: "protocol/bluetooth/component" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_proxy" + - name: "btmesh_core" + - name: "bluetooth_feature_gatt_server" + - name: "bluetooth_feature_dynamic_gattdb" + - name: gatt_configuration + +provides: + - name: "btmesh_stack_proxy_server" + +config_file: + - path: gatt_service_mesh_proxy.xml + directory: btconf + +template_contribution: + - name: btmesh_bgapi_class + value: + class: "proxy_server" + priority: 1 + - name: btmesh_stack_proxy_server + value: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_relay.slcc b/protocol/bluetooth/component/btmesh_stack_relay.slcc new file mode 100644 index 00000000000..a4f9ce5d17a --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_relay.slcc @@ -0,0 +1,20 @@ +id: "btmesh_stack_relay" +label: "Relay" +package: "Btmesh" +description: Provides Bluetooth mesh relay functionality. + Relay nodes retransmit messages that they receive from other devices. In doing this, they are able to communicate with devices that are not in radio range of the device which originated the message. + Relay functionality can be enabled or disabled during runtime via node configuration. +category: "Bluetooth Mesh|Features" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: component_catalog +provides: + - name: "btmesh_stack_relay" +template_contribution: + - name: btmesh_feature_bitmask + value: + count: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_remote_provisioning_client.slcc b/protocol/bluetooth/component/btmesh_stack_remote_provisioning_client.slcc new file mode 100644 index 00000000000..708cd5d3c4b --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_remote_provisioning_client.slcc @@ -0,0 +1,30 @@ +id: "btmesh_stack_remote_provisioning_client" +label: "Remote Provisioning Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Remote Provisioning Client model. + Remote provisioning allows a provisioner to provision devices located outside of the provisioner's radio range. + This model is used to manage provisioning devices into a mesh network by interacting with a mesh node that supports the Remote Provisioning Server model." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "evaluation" +root_path: "protocol/bluetooth" +include: + - path: "inc" + file_list: + - path: "sl_btmesh_model_specification_v1_1_defs.h" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: "btmesh_stack_node" + +provides: + - name: "btmesh_stack_remote_provisioning_client" + +template_contribution: + - name: btmesh_bgapi_class + value: + class: "remote_provisioning_client" + priority: 1 + - name: component_catalog + value: btmesh_stack_rpr_client + diff --git a/protocol/bluetooth/component/btmesh_stack_remote_provisioning_server.slcc b/protocol/bluetooth/component/btmesh_stack_remote_provisioning_server.slcc new file mode 100644 index 00000000000..9b9eb503afe --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_remote_provisioning_server.slcc @@ -0,0 +1,30 @@ +id: "btmesh_stack_remote_provisioning_server" +label: "Remote Provisioning Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Remote Provisioning Server model. + Remote provisioning allows a provisioner to provision devices located outside of the provisioner's radio range. + This model provides the functionality of provisioning a remote device over the mesh network and to perform the Node Provisioning Protocol Interface procedures." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "evaluation" +root_path: "protocol/bluetooth" +include: + - path: "inc" + file_list: + - path: "sl_btmesh_model_specification_v1_1_defs.h" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: "btmesh_stack_node" + +provides: + - name: "btmesh_stack_remote_provisioning_server" + +template_contribution: + - name: btmesh_bgapi_class + value: + class: "remote_provisioning_server" + priority: 1 + - name: component_catalog + value: btmesh_stack_rpr_server + diff --git a/protocol/bluetooth/component/btmesh_stack_sar_config_client.slcc b/protocol/bluetooth/component/btmesh_stack_sar_config_client.slcc new file mode 100644 index 00000000000..38b15e123e6 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_sar_config_client.slcc @@ -0,0 +1,19 @@ +id: "btmesh_stack_sar_config_client" +label: "SAR Configuration Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh SAR Configuration Client model. + This model is used to support the functionality of configuring the behavior of the lower transport layer of a node that supports the SAR Configuration Server model" +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_sar_config_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "sar_config_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_sar_config_server.slcc b/protocol/bluetooth/component/btmesh_stack_sar_config_server.slcc new file mode 100644 index 00000000000..8f576a7527b --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_sar_config_server.slcc @@ -0,0 +1,19 @@ +id: "btmesh_stack_sar_config_server" +label: "SAR Configuration Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh SAR Configuration Server Model. + This model provides the functionality of configuration of the segmentation and reassembly behavior of a node." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_sar_config_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "sar_config_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_scene_client.slcc b/protocol/bluetooth/component/btmesh_stack_scene_client.slcc new file mode 100644 index 00000000000..b91dfa967f7 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_scene_client.slcc @@ -0,0 +1,20 @@ +id: "btmesh_stack_scene_client" +label: "Scene Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Scene Client model. + This model is used to to send and receive messages to/from the Scene Server and Scene Setup Server models. + It is used to support the functionality of a node that can configure scenes on a network and trigger a state transition to a scene on another node." +category: "Bluetooth Mesh|Stack|Models|Time and Scenes" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_scene_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "scene_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_scene_server.slcc b/protocol/bluetooth/component/btmesh_stack_scene_server.slcc new file mode 100644 index 00000000000..fe744c7d851 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_scene_server.slcc @@ -0,0 +1,21 @@ +id: "btmesh_stack_scene_server" +label: "Scene Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Scene Server model. + This model holds a list of scenes, and exposes the functionality for storing and recalling the state of these scenes. + It is used to support the control and reporting functionality of a node that can participate in a scene." +category: "Bluetooth Mesh|Stack|Models|Time and Scenes" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_scene_setup_server" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_scene_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "scene_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_scene_setup_server.slcc b/protocol/bluetooth/component/btmesh_stack_scene_setup_server.slcc new file mode 100644 index 00000000000..6cd85bdade4 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_scene_setup_server.slcc @@ -0,0 +1,21 @@ +id: "btmesh_stack_scene_setup_server" +label: "Scene Setup Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Scene Setup Server model. +It is used to support the configuration functionality of a node that can participate in a scene. +It extends and corresponds with the Scene Server model and extends the Generic Default Transition Time Server model." +category: "Bluetooth Mesh|Stack|Models|Time and Scenes" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_scene_server" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_scene_setup_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "scene_setup_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_scheduler_client.slcc b/protocol/bluetooth/component/btmesh_stack_scheduler_client.slcc new file mode 100644 index 00000000000..aeb99d29570 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_scheduler_client.slcc @@ -0,0 +1,20 @@ +id: "btmesh_stack_scheduler_client" +label: "Scheduler Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Scheduler Client model. + It is used to support the functionality of a node that can configure the schedule on another node. + Schedule being the occurrence of an event and the type of event to be triggered." +category: "Bluetooth Mesh|Stack|Models|Time and Scenes" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_scheduler_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "scheduler_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_scheduler_server.slcc b/protocol/bluetooth/component/btmesh_stack_scheduler_server.slcc new file mode 100644 index 00000000000..2cac11cd44e --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_scheduler_server.slcc @@ -0,0 +1,20 @@ +id: "btmesh_stack_scheduler_server" +label: "Scheduler Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Scheduler Server model. + It is used to support the control and reporting functionality of a node that can store a schedule." +category: "Bluetooth Mesh|Stack|Models|Time and Scenes" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" + - name: "btmesh_stack_time_server" +provides: + - name: "btmesh_stack_scheduler_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "scheduler_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_sensor_client.slcc b/protocol/bluetooth/component/btmesh_stack_sensor_client.slcc new file mode 100644 index 00000000000..2d1c25f933d --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_sensor_client.slcc @@ -0,0 +1,21 @@ +id: "btmesh_stack_sensor_client" +label: "Sensor Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Sensor Client model. + It is used to support the functionality of a node that can monitor sensor data and configure a set of sensors on another node." +category: "Bluetooth Mesh|Stack|Models|Sensors" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_sensor_client" + - name: "btmesh_sensor_model" + allow_multiple: true +template_contribution: + - name: btmesh_bgapi_class + value: + class: "sensor_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_sensor_server.slcc b/protocol/bluetooth/component/btmesh_stack_sensor_server.slcc new file mode 100644 index 00000000000..263dd3151b7 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_sensor_server.slcc @@ -0,0 +1,22 @@ +id: "btmesh_stack_sensor_server" +label: "Sensor Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Sensor Server model. + It is used to support the reporting functionality of a node with a set of sensors whose data is available on the network." +category: "Bluetooth Mesh|Stack|Models|Sensors" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_sensor_setup_server" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_sensor_server" + - name: "btmesh_sensor_model" + allow_multiple: true +template_contribution: + - name: btmesh_bgapi_class + value: + class: "sensor_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_sensor_setup_server.slcc b/protocol/bluetooth/component/btmesh_stack_sensor_setup_server.slcc new file mode 100644 index 00000000000..2dada86e960 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_sensor_setup_server.slcc @@ -0,0 +1,20 @@ +id: "btmesh_stack_sensor_setup_server" +label: "Sensor Setup Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Sensor Setup Server model. + It is used to support the configuration functionality of a node with a set of sensors whose data is available on the network." +category: "Bluetooth Mesh|Stack|Models|Sensors" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_stack_sensor_server" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_sensor_setup_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "sensor_setup_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_silabs_config_client.slcc b/protocol/bluetooth/component/btmesh_stack_silabs_config_client.slcc new file mode 100644 index 00000000000..bbf1a09e68c --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_silabs_config_client.slcc @@ -0,0 +1,19 @@ +id: "btmesh_stack_silabs_config_client" +label: "Silicon Labs Configuration Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Silicon Labs Configuration Client vendor model. + It is used to configure global and per-model specific settings of nodes such as Tx-PHY for long packets, usage of advertising extensions on per-model basis." +category: "Bluetooth Mesh|Stack|Models|Proprietary" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_silabs_config_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "silabs_config_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_silabs_config_server.slcc b/protocol/bluetooth/component/btmesh_stack_silabs_config_server.slcc new file mode 100644 index 00000000000..c7514a7815e --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_silabs_config_server.slcc @@ -0,0 +1,21 @@ +id: "btmesh_stack_silabs_config_server" +label: "Silicon Labs Configuration Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Silicon Labs Configuration Server model. + It provides the functionality of configuration of global and per-model specific settings of a node." +category: "Bluetooth Mesh|Stack|Models|Proprietary" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_silabs_config_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "silabs_config_server" + priority: 1 + - name: component_catalog + value: btmesh_stack_silabs_config_server \ No newline at end of file diff --git a/protocol/bluetooth/component/btmesh_stack_solicitation_config_client.slcc b/protocol/bluetooth/component/btmesh_stack_solicitation_config_client.slcc new file mode 100644 index 00000000000..6042562ae62 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_solicitation_config_client.slcc @@ -0,0 +1,19 @@ +id: "btmesh_stack_solicitation_config_client" +label: "Solicitation PDU RPL Configuration Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Solicitation PDU RPL Configuration Client model. + It is used to support the functionality of removing addresses from the solicitation replay protection list of a node that supports the Solicitation PDU RPL Configuration Server model." +category: "Bluetooth Mesh|Stack|Models|Core" +quality: "evaluation" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_solicitation_config_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "solicitation_config_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_test.slcc b/protocol/bluetooth/component/btmesh_stack_test.slcc new file mode 100644 index 00000000000..1e6faaa821b --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_test.slcc @@ -0,0 +1,17 @@ +id: "btmesh_stack_test" +label: "Test" +package: "Btmesh" +description: "Provides Bluetooth mesh Test Utilities (Only for development, do not use them in production)." +category: "Bluetooth Mesh|Stack" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" +provides: + - name: "btmesh_stack_test" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "test" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_time_client.slcc b/protocol/bluetooth/component/btmesh_stack_time_client.slcc new file mode 100644 index 00000000000..2c6164a220a --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_time_client.slcc @@ -0,0 +1,18 @@ +id: "btmesh_stack_time_client" +label: "Time Client Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Time Client model. It is used to support the functionality of a node that can configure the timekeeping of another node." +category: "Bluetooth Mesh|Stack|Models|Time and Scenes" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_time_client" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "time_client" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_time_server.slcc b/protocol/bluetooth/component/btmesh_stack_time_server.slcc new file mode 100644 index 00000000000..833bba0a90e --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_time_server.slcc @@ -0,0 +1,18 @@ +id: "btmesh_stack_time_server" +label: "Time Server Model" +package: "Btmesh" +description: "Provides Bluetooth mesh Time Server model. It is is used to support the control and reporting functionality of a node that tracks time." +category: "Bluetooth Mesh|Stack|Models|Time and Scenes" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_time_server" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "time_server" + priority: 1 diff --git a/protocol/bluetooth/component/btmesh_stack_vendor_model.slcc b/protocol/bluetooth/component/btmesh_stack_vendor_model.slcc new file mode 100644 index 00000000000..49ab7c13c68 --- /dev/null +++ b/protocol/bluetooth/component/btmesh_stack_vendor_model.slcc @@ -0,0 +1,18 @@ +id: "btmesh_stack_vendor_model" +label: "Vendor Model" +package: "Btmesh" +description: "Provides functionality to send and receive vendor-specific messages." +category: "Bluetooth Mesh|Stack|Models" +quality: "production" +root_path: "protocol/bluetooth" + +requires: + - name: "btmesh_stack" + - name: "btmesh_core" +provides: + - name: "btmesh_stack_vendor_model" +template_contribution: + - name: btmesh_bgapi_class + value: + class: "vendor_model" + priority: 1 diff --git a/protocol/bluetooth/component/gatt_service_mesh_default.xml b/protocol/bluetooth/component/gatt_service_mesh_default.xml new file mode 100644 index 00000000000..70bcb035b27 --- /dev/null +++ b/protocol/bluetooth/component/gatt_service_mesh_default.xml @@ -0,0 +1,5 @@ + + + mesh_default + + \ No newline at end of file diff --git a/protocol/bluetooth/component/gatt_service_mesh_prov.xml b/protocol/bluetooth/component/gatt_service_mesh_prov.xml new file mode 100644 index 00000000000..1aec9dae377 --- /dev/null +++ b/protocol/bluetooth/component/gatt_service_mesh_prov.xml @@ -0,0 +1,21 @@ + + + + Abstract: The Mesh Provisioning Service allows a Provisioning Client to provision a Provisioning Server to allow it to participate in the mesh network. + + + + Abstract: The Mesh Provisioning Data In characteristic can be written to send a Proxy PDU message containing Provisioning PDU to the Provisioning Server. + + + + + + + Abstract: The Mesh Provisioning Data Out characteristic can be notified to send a Proxy PDU message containing Provisioning PDU from a Provisioning Server to a Provisioning Client. + + + + + + \ No newline at end of file diff --git a/protocol/bluetooth/component/gatt_service_mesh_proxy.xml b/protocol/bluetooth/component/gatt_service_mesh_proxy.xml new file mode 100644 index 00000000000..b6baf5e0803 --- /dev/null +++ b/protocol/bluetooth/component/gatt_service_mesh_proxy.xml @@ -0,0 +1,20 @@ + + + + Abstract: The Mesh Proxy Service is used to enable a server to send and receive Proxy PDUs with a client. + + + + Abstract: The Mesh Proxy Data In characteristic is used by the client to send Proxy PDUs to the server + + + + + + + Abstract: The Mesh Proxy Data Out characteristic is used by the server to send Proxy PDUs to the client. + + + + + \ No newline at end of file diff --git a/protocol/bluetooth/component/proxy_validation.lua b/protocol/bluetooth/component/proxy_validation.lua new file mode 100644 index 00000000000..0cd5b5bdaab --- /dev/null +++ b/protocol/bluetooth/component/proxy_validation.lua @@ -0,0 +1,13 @@ +-- Proxy validation script + +local proxy_server_present = slc.is_selected('btmesh_stack_proxy_client') +local proxy_client_present = slc.is_selected('btmesh_stack_proxy_server') +local proxy_present = slc.is_selected('btmesh_stack_proxy') + +if proxy_present and not ( proxy_client_present or proxy_server_present) then + validation.warning( + 'If you add proxy component then either proxy server or proxy client will also be needed', + validation.target_for_project(), + 'Add either proxy_server or proxy_client component)' + ) +end diff --git a/protocol/bluetooth/config/sl_btmesh_config.h b/protocol/bluetooth/config/sl_btmesh_config.h new file mode 100644 index 00000000000..5816f6eaf10 --- /dev/null +++ b/protocol/bluetooth/config/sl_btmesh_config.h @@ -0,0 +1,164 @@ +#ifndef SL_BTMESH_CONFIG_H +#define SL_BTMESH_CONFIG_H + +// <<< Use Configuration Wizard in Context Menu >>> + +// Bluetooth Mesh Stack Configuration + +// Maximum number of application bindings allowed <0-4> +// Default: 4 +// Define the number of application bindings allowed. +#define SL_BTMESH_CONFIG_MAX_APP_BINDS (4) + +// Maximum number of subscriptions allowed <0-255> +// Default: 4 +// Define the number of subscriptions allowed. +#define SL_BTMESH_CONFIG_MAX_SUBSCRIPTIONS (4) + +// Maximum number of Network Keys allowed <0-4> +// Default: 4 +// Define the number of Network Keys the application needs. +#define SL_BTMESH_CONFIG_MAX_NETKEYS (4) + +// Maximum number of Application Keys allowed <0-4> +// Default: 4 +// Define the number of Application Keys the application needs. +#define SL_BTMESH_CONFIG_MAX_APPKEYS (4) + +// Network Cache size +// Default: 16 +// Define the Network Cache size. +#define SL_BTMESH_CONFIG_NET_CACHE_SIZE (16) + +// Replay Protection List size +// Default: 32 +// Define the Replay Protection List size. Must be dividable by 16. +#define SL_BTMESH_CONFIG_RPL_SIZE (32) + +// Maximum number of simultaneous segmented transmissions +// Default: 4 +// Define the maximum number simultaneous segmented transmissions allowed. Set to a low number if not much segmentation is used. +#define SL_BTMESH_CONFIG_MAX_SEND_SEGS (4) + +// Maximum number of simultaneous segmented receptions +// Default: 4 +// Define the maximum number of simultaneous segmented receptions. Set to a low number if not much segmentation is used. +#define SL_BTMESH_CONFIG_MAX_RECV_SEGS (4) + +// Maximum number of virtual addresses +// Default: 4 +// Define the maximum number of virtual addresses the application needs. Set to 0 if virtual address not used +#define SL_BTMESH_CONFIG_MAX_VAS (4) + +// Maximum number of provisioning sessions allowed +// Default: 2 +// Define the number of provisioning sessions the application needs. +// For a node the value is 1 or 2 (depending on whether Unprovisioned Device Beaconing is initiated by 1 or 2 Bearers). +// For a provisioner the value may be over 2. +#define SL_BTMESH_CONFIG_MAX_PROV_SESSIONS (2) + +// Maximum number of provisioning bearers allowed +// Default: 2 +// Define the number of provisioning bearers the application needs. +// The value is 1,2 or 3. +#if defined(SL_CATALOG_BTMESH_STACK_RPR_SERVER_PRESENT) || defined(SL_CATALOG_BTMESH_STACK_RPR_CLIENT_PRESENT) +#define SL_BTMESH_CONFIG_MAX_PROV_BEARERS (3) +#else +#define SL_BTMESH_CONFIG_MAX_PROV_BEARERS (2) +#endif + +// Number of connections to reserve for GATT Proxies <1-2> +// Default: 2 +// Set to the number of simultaneous GATT Proxy connections the application should support. +// Note that the total number of Bluetooth connections (SL_BT_CONFIG_MAX_CONNECTIONS) must include these! +#define SL_BTMESH_CONFIG_MAX_GATT_CONNECTIONS (2) + +// GATT TX Queue size +// Default: 4 +// Define the GATT TX Queue size. The value decides the number of PDUs that may be pending transmit on the GATT bearer. +#define SL_BTMESH_CONFIG_GATT_TXQ_SIZE (4) + +// Maximum number of provisioned devices allowed +// Default: 0 +// Define the number of provisioned devices the application needs. Only applicable for provisioner. Please note that provisiner reserves one entry for its own data +#define SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICES (0) + +// Maximum number of Application Keys allowed for each Provisioned Device +// Default: 0 +// Define the maximum number of Application Keys allowed for each Provisioned Device. Only applicable for provisioner +#define SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICE_APPKEYS (0) + +// Maximum number of Network Keys allowed for each Provisioned Device +// Default: 0 +// Define the maximum number of Network Keys allowed for each Provisioned Device. Only applicable for provisioner +#define SL_BTMESH_CONFIG_MAX_PROVISIONED_DEVICE_NETKEYS (0) + +// Maximum number of Client Commands for the Foundation Model +// Default: 0 +// Define the maximum number of Client Commands for the Foundation Model. Only applicable for Provisioner. +#define SL_BTMESH_CONFIG_MAX_FOUNDATION_CLIENT_CMDS (0) + +// Maximum number of Friendships allowed +// Default: 1 +// Define the number of Friendships the application needs. Only applicable for friend node. +#define SL_BTMESH_CONFIG_MAX_FRIENDSHIPS (1) + +// Maximum size of Friendship Subscription List. +// Default: 5 +// Define the maximum size of Friendship Subscription List the application needs. Only applicable for friend node. +#define SL_BTMESH_CONFIG_FRIEND_MAX_SUBS_LIST (5) + +// Maximum size of Total Friend Cache +// Default: 4 +// Define the Maximum size of Total Friend Cache. Only applicable for friend node. +#define SL_BTMESH_CONFIG_FRIEND_MAX_TOTAL_CACHE (16) + +// Maximum size of Cache for a single Friendship +// Default: 4 +// Define the Maximum size of Cache for a single Friendship. Only applicable for friend node. +#define SL_BTMESH_CONFIG_FRIEND_MAX_SINGLE_CACHE (16) + +// Access Layer TX Queue Size +// Default: 5 +// Define the Access Layer TX Queue size. +#define SL_BTMESH_CONFIG_APP_TXQ_SIZE (5) + +// Element sequence number write interval exponent <0-23> +// Default: 16 +// Each network PDU originating from a device must be sent with an increasing sequence number. +// To achieve this also when the device is reset or powered off, the latest sequence numbers are stored +// on flash from time to time as defined by this setting. The setting defines the sequence number writing +// interval as a power of two exponent. E.g., a value of 10 would mean 1024 (2 to the 10th power). +// To avoid excessive flash wear, the interval should be relatively high on a device that generates +// a lot of traffic, and it can be set relatively low on a device that generates little traffic. +#define SL_BTMESH_CONFIG_SEQNUM_WRITE_INTERVAL_EXP (16) + +// Size of RAM cache for persistent keys stored within PSA ITS <0-544> +// Default: 16 +// When PSA ITS (internal trusted storage) is used to store the +// Mesh encryption keys a RAM cache should be set up to increase +// runtime performance. The size of the cache should be set according +// to the expected use of application and device keys. For a node, it +// can be set to the number of application keys times two (to +// accommodate both key variants during a key refresh) ; for a +// Provisioner, it should be set to the number of application keys +// times two (to accommodate both key variants during a key refresh) +// plus a fraction of the expected number of device keys that will be +// stored. For devices that do not use PSA ITS the setting is ignored. + +#define SL_BTMESH_CONFIG_ITS_KEY_CACHE_SIZE (4) + +// Maximum number of proxy access control list entries +// Default: 8 +// Define the number of proxy access control list entries. +#define SL_BTMESH_CONFIG_MAX_PROXY_ACCESS_CONTROL_LIST_ENTRIES (8) + +// Maximum number of Key Refresh requests pending for the Provisioner. Uses sizeof(pointer) per +// request statically, each pending request is dynamically allocated. +// Default: 16 +// Define the maximum number of concurrent config client requests to nodes during Key Refresh +#define SL_BTMESH_CONFIG_LIMIT_PROV_CONCURRENT_KR (16) + +// End Mesh Bluetooth Stack Configuration + +#endif // SL_BTMESH_CONFIG_H diff --git a/protocol/bluetooth/inc/sl_bt_version.h b/protocol/bluetooth/inc/sl_bt_version.h index 8d8a2d59ff1..ff5f211848b 100644 --- a/protocol/bluetooth/inc/sl_bt_version.h +++ b/protocol/bluetooth/inc/sl_bt_version.h @@ -42,17 +42,17 @@ * * An increment indicates backwards compatible bug fixes. */ -#define SL_BT_VERSION_PATCH 0 +#define SL_BT_VERSION_PATCH 1 /** * @brief The build number which the Bluetooth SDK was created from */ -#define SL_BT_VERSION_BUILD 144 +#define SL_BT_VERSION_BUILD 190 /** * @brief The hash value of the build the Bluetooth SDK was created from */ -#define SL_BT_VERSION_HASH {0xe1,0x34,0x20,0xb5,0xf7,0xe8,0xd6,0x32,0x39,0x03,0x7e,0x97,0x8f,0x16,0x35,0x47,0x90,0x9f,0x1a,0xe2} +#define SL_BT_VERSION_HASH {0x12,0x9d,0xd1,0x22,0x5a,0x94,0x8a,0x21,0x5d,0xc4,0x93,0xa0,0x7d,0xfe,0x74,0x57,0x8b,0x81,0x79,0x6d} /** * Deprecated and replaced by SL_BT_VERSION_MAJOR diff --git a/protocol/bluetooth/inc/sl_btmesh.h.jinja b/protocol/bluetooth/inc/sl_btmesh.h.jinja new file mode 100644 index 00000000000..28bb9d12dac --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh.h.jinja @@ -0,0 +1,44 @@ +#ifndef SL_BTMESH_H +#define SL_BTMESH_H + +#include +{%- if bluetooth_api_ncp_host is not defined %} +#include "sl_power_manager.h" +#include "sl_btmesh_config.h" +{%- endif %} +#include "sl_btmesh_api.h" +#include "sl_btmesh_stack_init.h" +#include "sl_bt_api.h" +#include "sl_btmesh_bgapi.h" + +{%- if bluetooth_api_ncp_host is not defined %} +{%- if btmesh_stack_proxy_server is defined %} + +#define SL_BTMESH_COMPONENT_ADVERTISERS ({{ btmesh_advertisers | sum(attribute='count')}} + SL_BTMESH_CONFIG_MAX_NETKEYS) +{%- else %} + +#define SL_BTMESH_COMPONENT_ADVERTISERS {{ btmesh_advertisers | sum(attribute='count')}} +{%- endif %} +{%- endif %} + +#define SL_BTMESH_FEATURE_BITMASK {{ btmesh_feature_bitmask | sum(attribute='count')}} + +// Initialize Bluetooth core functionality +void sl_btmesh_init(void); + +// Polls bluetooth stack for an event and processes it +void sl_btmesh_step(void); + +// Processes a single bluetooth mesh event +void sl_btmesh_process_event(sl_btmesh_msg_t *evt); + +bool sl_btmesh_can_process_event(uint32_t len); + +void sl_btmesh_on_event(sl_btmesh_msg_t* evt); +{% if bluetooth_api_ncp_host is not defined %} +// Power Manager related functions +bool sli_btmesh_is_ok_to_sleep(void); +sl_power_manager_on_isr_exit_t sli_btmesh_sleep_on_isr_exit(void); +{%- endif %} + +#endif // SL_BTMESH_H diff --git a/protocol/bluetooth/inc/sl_btmesh_api.h b/protocol/bluetooth/inc/sl_btmesh_api.h new file mode 100644 index 00000000000..ae85f6c83f8 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_api.h @@ -0,0 +1,22549 @@ +/***************************************************************************//** + * @brief SL_BTMESH_API command declarations + ******************************************************************************* + * # 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 SL_BTMESH_API_H +#define SL_BTMESH_API_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include "sl_status.h" +#include "sl_bgapi.h" + + + + + +/** + * @addtogroup sl_btmesh_node Mesh Node + * @{ + * + * @brief Mesh Node + * + * Bluetooth mesh stack API for unprovisioned devices and provisioned nodes. + * + * Initialization: + * - @ref sl_btmesh_node_init : Initialize node + * - @ref sl_btmesh_node_init_oob : Initialize node with out-of-band + * authentication + * - @ref sl_btmesh_evt_node_initialized : Node initialized + * + * Provisioning a node: + * - @ref sl_btmesh_node_get_uuid : Get device UUID + * - @ref sl_btmesh_node_start_unprov_beaconing : Start unprovisioned device + * beaconing + * - @ref sl_btmesh_node_stop_unprov_beaconing : Stop unprovisioned device + * beaconing + * - @ref sl_btmesh_evt_node_provisioning_started : Provisioning process has + * started + * - @ref sl_btmesh_evt_node_input_oob_request : Request to input out-of-band + * authentication data + * - @ref sl_btmesh_node_send_input_oob_request_response : Respond to input + * out-of-band authentication request + * - @ref sl_btmesh_evt_node_display_output_oob : Request to display output + * out-of-band authentication data + * - @ref sl_btmesh_evt_node_static_oob_request : Request for static + * out-of-band authentication data + * - @ref sl_btmesh_node_send_static_oob_request_response : Respond to static + * out-of-band authentication request + * - @ref sl_btmesh_evt_node_provisioned : Node has been provisioned + * - @ref sl_btmesh_evt_node_provisioning_failed : Provisioning process has + * failed + * - @ref sl_btmesh_node_set_provisioning_data : Pre-provision a device + * + * Node Configuration: + * - @ref sl_btmesh_evt_node_key_added : A cryptographic key has been added to + * the node + * - @ref sl_btmesh_evt_node_config_get : Node-wide configuration has been + * queried + * - @ref sl_btmesh_evt_node_config_set : Node-wide configuration has been + * modified + * - @ref sl_btmesh_evt_node_model_config_changed : Model configuration has + * been modified + * - @ref sl_btmesh_node_reset : Factory reset mesh node + * + * Note on Bluetooth mesh addresses + * + * Bluetooth mesh address space is divided into sections containing ranges of + * addresses of various types. Different address types are used in different + * contexts. Some requests accept only certain address types. + * + * The address types are as follows: + * - 0x0000 Unassigned address: represents an address that has not been + * set + * - 0x0001..0x7fff Unicast addresses are allocated by the Provisioner + * to provisioned nodes. Each element of a node has its own unicast address. + * - 0x8000..0xbfff Virtual addresses are 16-bit shorthand for 128-bit + * label UUIDs which are pre-allocated to specific purposes in relevant + * Bluetooth SIG specifications. Virtual addresses can typically be used in + * the same context as group addresses. Some commands require specifying the + * full label UUID instead of the virtual address shorthand. + * - 0xc000..0xffef Group addresses are allocated by the Provisioner + * for multicast communication. + * - 0xfff0..0xffff Fixed group addresses are allocated in the Mesh + * specification for multicast communication in a particular context. They + * can be used in the same context as regular group addresses. The following + * addresses are currently defined: + * - 0xfffc All-proxies broadcast address + * - 0xfffd All-friends broadcast address + * - 0xfffe All-relays broadcast address + * - 0xffff All-nodes broadcast address + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_node_init_id 0x00140028 +#define sl_btmesh_cmd_node_set_exportable_keys_id 0x24140028 +#define sl_btmesh_cmd_node_start_unprov_beaconing_id 0x01140028 +#define sl_btmesh_cmd_node_stop_unprov_beaconing_id 0x16140028 +#define sl_btmesh_cmd_node_get_rssi_id 0x17140028 +#define sl_btmesh_cmd_node_send_input_oob_request_response_id 0x02140028 +#define sl_btmesh_cmd_node_get_uuid_id 0x03140028 +#define sl_btmesh_cmd_node_set_provisioning_data_id 0x04140028 +#define sl_btmesh_cmd_node_init_oob_id 0x05140028 +#define sl_btmesh_cmd_node_set_ivrecovery_mode_id 0x06140028 +#define sl_btmesh_cmd_node_get_ivrecovery_mode_id 0x07140028 +#define sl_btmesh_cmd_node_get_statistics_id 0x09140028 +#define sl_btmesh_cmd_node_clear_statistics_id 0x0a140028 +#define sl_btmesh_cmd_node_set_net_relay_delay_id 0x0b140028 +#define sl_btmesh_cmd_node_get_net_relay_delay_id 0x0c140028 +#define sl_btmesh_cmd_node_get_ivupdate_state_id 0x0d140028 +#define sl_btmesh_cmd_node_request_ivupdate_id 0x0e140028 +#define sl_btmesh_cmd_node_get_seq_remaining_id 0x0f140028 +#define sl_btmesh_cmd_node_save_replay_protection_list_id 0x10140028 +#define sl_btmesh_cmd_node_set_uuid_id 0x11140028 +#define sl_btmesh_cmd_node_get_replay_protection_list_status_id 0x14140028 +#define sl_btmesh_cmd_node_get_element_address_id 0x12140028 +#define sl_btmesh_cmd_node_send_static_oob_request_response_id 0x13140028 +#define sl_btmesh_cmd_node_reset_id 0x15140028 +#define sl_btmesh_cmd_node_set_beacon_reporting_id 0x18140028 +#define sl_btmesh_cmd_node_set_iv_update_age_id 0x19140028 +#define sl_btmesh_cmd_node_get_key_count_id 0x1a140028 +#define sl_btmesh_cmd_node_get_key_id 0x1b140028 +#define sl_btmesh_cmd_node_get_networks_id 0x1c140028 +#define sl_btmesh_cmd_node_get_element_seqnum_id 0x1d140028 +#define sl_btmesh_cmd_node_set_model_option_id 0x1e140028 +#define sl_btmesh_cmd_node_get_local_dcd_id 0x1f140028 +#define sl_btmesh_cmd_node_power_off_id 0x21140028 +#define sl_btmesh_cmd_node_set_adv_phy_id 0x22140028 +#define sl_btmesh_cmd_node_get_adv_phy_id 0x23140028 +#define sl_btmesh_cmd_node_set_provisioning_algorithms_id 0x25140028 +#define sl_btmesh_cmd_node_init_provisioning_records_id 0x26140028 +#define sl_btmesh_cmd_node_set_unprov_beaconing_adv_interval_id 0x28140028 +#define sl_btmesh_cmd_node_set_proxy_service_adv_interval_id 0x29140028 +#define sl_btmesh_cmd_node_set_provisioning_service_adv_interval_id 0x30140028 +#define sl_btmesh_cmd_node_get_local_model_metadata_page_id 0x20140028 +#define sl_btmesh_cmd_node_save_proxy_solicitation_rpl_id 0x31140028 +#define sl_btmesh_cmd_node_get_proxy_solicitation_rpl_status_id 0x32140028 +#define sl_btmesh_cmd_node_set_oob_uri_id 0x33140028 +#define sl_btmesh_cmd_node_get_oob_uri_id 0x34140028 +#define sl_btmesh_rsp_node_init_id 0x00140028 +#define sl_btmesh_rsp_node_set_exportable_keys_id 0x24140028 +#define sl_btmesh_rsp_node_start_unprov_beaconing_id 0x01140028 +#define sl_btmesh_rsp_node_stop_unprov_beaconing_id 0x16140028 +#define sl_btmesh_rsp_node_get_rssi_id 0x17140028 +#define sl_btmesh_rsp_node_send_input_oob_request_response_id 0x02140028 +#define sl_btmesh_rsp_node_get_uuid_id 0x03140028 +#define sl_btmesh_rsp_node_set_provisioning_data_id 0x04140028 +#define sl_btmesh_rsp_node_init_oob_id 0x05140028 +#define sl_btmesh_rsp_node_set_ivrecovery_mode_id 0x06140028 +#define sl_btmesh_rsp_node_get_ivrecovery_mode_id 0x07140028 +#define sl_btmesh_rsp_node_get_statistics_id 0x09140028 +#define sl_btmesh_rsp_node_clear_statistics_id 0x0a140028 +#define sl_btmesh_rsp_node_set_net_relay_delay_id 0x0b140028 +#define sl_btmesh_rsp_node_get_net_relay_delay_id 0x0c140028 +#define sl_btmesh_rsp_node_get_ivupdate_state_id 0x0d140028 +#define sl_btmesh_rsp_node_request_ivupdate_id 0x0e140028 +#define sl_btmesh_rsp_node_get_seq_remaining_id 0x0f140028 +#define sl_btmesh_rsp_node_save_replay_protection_list_id 0x10140028 +#define sl_btmesh_rsp_node_set_uuid_id 0x11140028 +#define sl_btmesh_rsp_node_get_replay_protection_list_status_id 0x14140028 +#define sl_btmesh_rsp_node_get_element_address_id 0x12140028 +#define sl_btmesh_rsp_node_send_static_oob_request_response_id 0x13140028 +#define sl_btmesh_rsp_node_reset_id 0x15140028 +#define sl_btmesh_rsp_node_set_beacon_reporting_id 0x18140028 +#define sl_btmesh_rsp_node_set_iv_update_age_id 0x19140028 +#define sl_btmesh_rsp_node_get_key_count_id 0x1a140028 +#define sl_btmesh_rsp_node_get_key_id 0x1b140028 +#define sl_btmesh_rsp_node_get_networks_id 0x1c140028 +#define sl_btmesh_rsp_node_get_element_seqnum_id 0x1d140028 +#define sl_btmesh_rsp_node_set_model_option_id 0x1e140028 +#define sl_btmesh_rsp_node_get_local_dcd_id 0x1f140028 +#define sl_btmesh_rsp_node_power_off_id 0x21140028 +#define sl_btmesh_rsp_node_set_adv_phy_id 0x22140028 +#define sl_btmesh_rsp_node_get_adv_phy_id 0x23140028 +#define sl_btmesh_rsp_node_set_provisioning_algorithms_id 0x25140028 +#define sl_btmesh_rsp_node_init_provisioning_records_id 0x26140028 +#define sl_btmesh_rsp_node_set_unprov_beaconing_adv_interval_id 0x28140028 +#define sl_btmesh_rsp_node_set_proxy_service_adv_interval_id 0x29140028 +#define sl_btmesh_rsp_node_set_provisioning_service_adv_interval_id 0x30140028 +#define sl_btmesh_rsp_node_get_local_model_metadata_page_id 0x20140028 +#define sl_btmesh_rsp_node_save_proxy_solicitation_rpl_id 0x31140028 +#define sl_btmesh_rsp_node_get_proxy_solicitation_rpl_status_id 0x32140028 +#define sl_btmesh_rsp_node_set_oob_uri_id 0x33140028 +#define sl_btmesh_rsp_node_get_oob_uri_id 0x34140028 + +/** + * @brief Flags for allowed provisioning algorithms during provisioning, which + * use a bitmap so that multiple algorithms can be supported. + */ +typedef enum +{ + sl_btmesh_node_algorithm_flag_ecdh_p256_cmac_aes128_aes_ccm = 0x1, /**< (0x1) + ECDH + based + provisioning, + authenticated + using + AES-CMAC, + and + protected + with + AES-CCM */ + sl_btmesh_node_algorithm_flag_ecdh_p256_hmac_sha256_aes_ccm = 0x2 /**< (0x2) + ECDH + based + provisioning, + authenticated + using + HMAC-SHA-256, + and + protected + with + AES-CCM */ +} sl_btmesh_node_algorithm_flag_t; + +/** + * @brief Flags for supported OOB authentication methods during provisioning, + * which use a bitmap so that multiple methods can be supported. + */ +typedef enum +{ + sl_btmesh_node_auth_method_flag_none = 0x1, /**< (0x1) Authentication + without OOB is supported */ + sl_btmesh_node_auth_method_flag_static = 0x2, /**< (0x2) Static OOB data + authentication is supported */ + sl_btmesh_node_auth_method_flag_input = 0x4, /**< (0x4) Input OOB + authentication is supported */ + sl_btmesh_node_auth_method_flag_output = 0x8 /**< (0x8) Output OOB + authentication is supported */ +} sl_btmesh_node_auth_method_flag_t; + +/** + * @brief Flags for supported input OOB actions during provisioning, which use a + * bitmap so that multiple actions can be supported. + */ +typedef enum +{ + sl_btmesh_node_oob_input_action_flag_push = 0x1, /**< (0x1) Push a button + on the device. */ + sl_btmesh_node_oob_input_action_flag_twist = 0x2, /**< (0x2) Twist a dial on + the device. */ + sl_btmesh_node_oob_input_action_flag_numeric = 0x4, /**< (0x4) Input a numeric + authentication code. */ + sl_btmesh_node_oob_input_action_flag_alpha = 0x8 /**< (0x8) Input an + alphanumeric + authentication code. */ +} sl_btmesh_node_oob_input_action_flag_t; + +/** + * @brief Indicate the input OOB action selected by the Provisioner during + * provisioning of the device. + */ +typedef enum +{ + sl_btmesh_node_oob_input_action_push = 0x0, /**< (0x0) Push a button on the + device. */ + sl_btmesh_node_oob_input_action_twist = 0x1, /**< (0x1) Twist a dial on the + device. */ + sl_btmesh_node_oob_input_action_numeric = 0x2, /**< (0x2) Input a numeric + authentication code. */ + sl_btmesh_node_oob_input_action_alpha = 0x3 /**< (0x3) Input an + alphanumeric + authentication code. */ +} sl_btmesh_node_oob_input_action_t; + +/** + * @brief Flags for supported output OOB actions during provisioning, which use + * a bitmap so that multiple actions can be supported. + */ +typedef enum +{ + sl_btmesh_node_oob_output_action_flag_blink = 0x1, /**< (0x1) Blink a + light. */ + sl_btmesh_node_oob_output_action_flag_beep = 0x2, /**< (0x2) Emit a sound. */ + sl_btmesh_node_oob_output_action_flag_vibrate = 0x4, /**< (0x4) Vibrate the + device. */ + sl_btmesh_node_oob_output_action_flag_numeric = 0x8, /**< (0x8) Output a + numeric + authentication + code. */ + sl_btmesh_node_oob_output_action_flag_alpha = 0x10 /**< (0x10) Output an + alphanumeric + authentication + code. */ +} sl_btmesh_node_oob_output_action_flag_t; + +/** + * @brief Indicate the output OOB action selected by the Provisioner during + * provisioning of the device. + */ +typedef enum +{ + sl_btmesh_node_oob_output_action_blink = 0x0, /**< (0x0) Blink a light. */ + sl_btmesh_node_oob_output_action_beep = 0x1, /**< (0x1) Emit a sound. */ + sl_btmesh_node_oob_output_action_vibrate = 0x2, /**< (0x2) Vibrate the device. */ + sl_btmesh_node_oob_output_action_numeric = 0x3, /**< (0x3) Output a numeric + authentication code. */ + sl_btmesh_node_oob_output_action_alpha = 0x4 /**< (0x4) Output an + alphanumeric + authentication code. */ +} sl_btmesh_node_oob_output_action_t; + +/** + * @brief Specify the type of a key in key manipulation commands. + */ +typedef enum +{ + sl_btmesh_node_key_type_net = 0x0, /**< (0x0) Network key */ + sl_btmesh_node_key_type_app = 0x1 /**< (0x1) Application key */ +} sl_btmesh_node_key_type_t; + +/** + * @brief Specify the state to which a Configuration Client/Server command/event + * applies. + */ +typedef enum +{ + sl_btmesh_node_dcd = 0x8008, /**< (0x8008) Device Composition Data */ + sl_btmesh_node_beacon = 0x8009, /**< (0x8009) Status of broadcasting + Secure Network Beacons */ + sl_btmesh_node_default_ttl = 0x800c, /**< (0x800c) Default Time-To-Live for + messages */ + sl_btmesh_node_friendship = 0x800f, /**< (0x800f) Friend status */ + sl_btmesh_node_gatt_proxy = 0x8012, /**< (0x8012) GATT proxy status */ + sl_btmesh_node_key_refresh = 0x8015, /**< (0x8015) Key refresh status */ + sl_btmesh_node_relay = 0x8023, /**< (0x8023) Relay status */ + sl_btmesh_node_identity = 0x8042, /**< (0x8042) Identity status */ + sl_btmesh_node_nettx = 0x8024 /**< (0x8024) Network transmit status */ +} sl_btmesh_node_config_state_t; + +/** + * @addtogroup sl_btmesh_node_message_flags Message Flags + * @{ + * + + */ + +/** Message does not have flags */ +#define SL_BTMESH_NODE_MESSAGE_FLAG_NONE 0x0 + +/** Message is an access layer reply to a unicast request */ +#define SL_BTMESH_NODE_MESSAGE_FLAG_REPLY 0x1 + +/** Message is an access layer reply to a multicast request */ +#define SL_BTMESH_NODE_MESSAGE_FLAG_MULTICAST_REPLY 0x2 + +/** Message is either received with TTL=0 or is a response to such a message and + * should be sent out with TTL=0 */ +#define SL_BTMESH_NODE_MESSAGE_FLAG_TTL0 0x4 + +/** Message is segmented in transport layer, can be used to force the use of + * transport layer segmentation */ +#define SL_BTMESH_NODE_MESSAGE_FLAG_SEGTRANS 0x10 + +/** Use friendship credentials instead of normal credentials when sending data; + * used when publishing with friendship credential flag on in model publish + * settings */ +#define SL_BTMESH_NODE_MESSAGE_FLAG_FRIENDCRED 0x20 + +/** Use extended packet size instead of standard */ +#define SL_BTMESH_NODE_MESSAGE_FLAG_EXTENDED 0x40 + +/** long delay needed in sending two messages in reply that need to be sent in + * order */ +#define SL_BTMESH_NODE_MESSAGE_FLAG_LONG_DELAY 0x80 + +/** @} */ // end Message Flags + +/** + * @addtogroup sl_btmesh_evt_node_initialized sl_btmesh_evt_node_initialized + * @{ + * @brief Node is initialized and operational. + */ + +/** @brief Identifier of the initialized event */ +#define sl_btmesh_evt_node_initialized_id 0x001400a8 + +/***************************************************************************//** + * @brief Data structure of the initialized event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_initialized_s +{ + uint8_t provisioned; /**< 1 if node is provisioned into a network, 0 if + unprovisioned. */ + uint16_t address; /**< Unicast address of the primary element of the node. + Ignored if unprovisioned. Secondary elements have + been assigned sequential unicast addresses + following the primary element address. */ + uint32_t iv_index; /**< IV index for the first network of the node, ignore + if unprovisioned. */ +}); + +typedef struct sl_btmesh_evt_node_initialized_s sl_btmesh_evt_node_initialized_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_initialized + +/** + * @addtogroup sl_btmesh_evt_node_provisioned sl_btmesh_evt_node_provisioned + * @{ + * @brief The node has received provisioning data (address allocation and a + * network key) from the Provisioner + * + * A @ref sl_btmesh_evt_node_key_added event will follow for the network key. + * + * The node is now ready for further configuration by the Provisioner but is not + * yet ready for communication with other nodes in the network (it does not have + * any application keys and its models have not been set up). + */ + +/** @brief Identifier of the provisioned event */ +#define sl_btmesh_evt_node_provisioned_id 0x011400a8 + +/***************************************************************************//** + * @brief Data structure of the provisioned event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_provisioned_s +{ + uint16_t address; /**< The unicast address that the Provisioner allocated for + the primary element of the node. Secondary elements + have been assigned sequentially following unicast + addresses. */ + uint32_t iv_index; /**< Current IV index of the provisioned network */ +}); + +typedef struct sl_btmesh_evt_node_provisioned_s sl_btmesh_evt_node_provisioned_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_provisioned + +/** + * @addtogroup sl_btmesh_evt_node_config_get sl_btmesh_evt_node_config_get + * @{ + * @brief Informative; Configuration Client requested the current value of a + * State in the Configuration Server Model. + */ + +/** @brief Identifier of the config_get event */ +#define sl_btmesh_evt_node_config_get_id 0x021400a8 + +/***************************************************************************//** + * @brief Data structure of the config_get event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_config_get_s +{ + uint16_t netkey_index; /**< The network key index of the network to which the + command applies. 0xffff for node-wide states. */ + uint16_t id; /**< Enum @ref sl_btmesh_node_config_state_t. Specifies + to which State the command applies */ +}); + +typedef struct sl_btmesh_evt_node_config_get_s sl_btmesh_evt_node_config_get_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_config_get + +/** + * @addtogroup sl_btmesh_evt_node_config_set sl_btmesh_evt_node_config_set + * @{ + * @brief Informative; Configuration Client changes the State in the + * Configuration Server Model. + */ + +/** @brief Identifier of the config_set event */ +#define sl_btmesh_evt_node_config_set_id 0x031400a8 + +/***************************************************************************//** + * @brief Data structure of the config_set event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_config_set_s +{ + uint16_t netkey_index; /**< The network key index of the network to which + the command applies. 0xffff for node-wide + states. */ + uint16_t id; /**< Enum @ref sl_btmesh_node_config_state_t. + Specifies to which state the command applies */ + uint8array value; /**< The new value */ +}); + +typedef struct sl_btmesh_evt_node_config_set_s sl_btmesh_evt_node_config_set_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_config_set + +/** + * @addtogroup sl_btmesh_evt_node_display_output_oob sl_btmesh_evt_node_display_output_oob + * @{ + * @brief Display output OOB data so Provisioner can input it. + */ + +/** @brief Identifier of the display_output_oob event */ +#define sl_btmesh_evt_node_display_output_oob_id 0x041400a8 + +/***************************************************************************//** + * @brief Data structure of the display_output_oob event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_display_output_oob_s +{ + uint8_t output_action; /**< Enum @ref sl_btmesh_node_oob_output_action_t. + Selected output action */ + uint8_t output_size; /**< Size of data to output in characters. */ + uint8array data; /**< Raw 16-byte array containing the output data + value. */ +}); + +typedef struct sl_btmesh_evt_node_display_output_oob_s sl_btmesh_evt_node_display_output_oob_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_display_output_oob + +/** + * @addtogroup sl_btmesh_evt_node_input_oob_request sl_btmesh_evt_node_input_oob_request + * @{ + * @brief The Provisioner is displaying an out of band authentication value + * + * The application on the node should provide the value to the Bluetooth mesh + * stack using the @ref sl_btmesh_node_send_input_oob_request_response command. + */ + +/** @brief Identifier of the input_oob_request event */ +#define sl_btmesh_evt_node_input_oob_request_id 0x051400a8 + +/***************************************************************************//** + * @brief Data structure of the input_oob_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_input_oob_request_s +{ + uint8_t input_action; /**< Enum @ref sl_btmesh_node_oob_input_action_t. + Selected input action */ + uint8_t input_size; /**< Size of data in the input in characters. */ +}); + +typedef struct sl_btmesh_evt_node_input_oob_request_s sl_btmesh_evt_node_input_oob_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_input_oob_request + +/** + * @addtogroup sl_btmesh_evt_node_provisioning_started sl_btmesh_evt_node_provisioning_started + * @{ + * @brief Provisioner has started provisioning this node. + */ + +/** @brief Identifier of the provisioning_started event */ +#define sl_btmesh_evt_node_provisioning_started_id 0x061400a8 + +/***************************************************************************//** + * @brief Data structure of the provisioning_started event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_provisioning_started_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ +}); + +typedef struct sl_btmesh_evt_node_provisioning_started_s sl_btmesh_evt_node_provisioning_started_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_provisioning_started + +/** + * @addtogroup sl_btmesh_evt_node_provisioning_failed sl_btmesh_evt_node_provisioning_failed + * @{ + * @brief Provisioning the node has failed. + */ + +/** @brief Identifier of the provisioning_failed event */ +#define sl_btmesh_evt_node_provisioning_failed_id 0x071400a8 + +/***************************************************************************//** + * @brief Data structure of the provisioning_failed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_provisioning_failed_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ +}); + +typedef struct sl_btmesh_evt_node_provisioning_failed_s sl_btmesh_evt_node_provisioning_failed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_provisioning_failed + +/** + * @addtogroup sl_btmesh_evt_node_key_added sl_btmesh_evt_node_key_added + * @{ + * @brief Received when a Configuration Client has deployed a new network or + * application key to the node. + */ + +/** @brief Identifier of the key_added event */ +#define sl_btmesh_evt_node_key_added_id 0x081400a8 + +/***************************************************************************//** + * @brief Data structure of the key_added event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_key_added_s +{ + uint8_t type; /**< Type of the new key. Values are as follows: + - 0x00: Network key + - 0x01: Application key */ + uint16_t index; /**< Key index of the new key */ + uint16_t netkey_index; /**< Network key index to which the application key is + bound, which is ignored for network keys */ +}); + +typedef struct sl_btmesh_evt_node_key_added_s sl_btmesh_evt_node_key_added_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_key_added + +/** + * @addtogroup sl_btmesh_evt_node_model_config_changed sl_btmesh_evt_node_model_config_changed + * @{ + * @brief Informative + * + * This event notifies that a remote Configuration Client has changed the + * configuration of a local model. + */ + +/** @brief Identifier of the model_config_changed event */ +#define sl_btmesh_evt_node_model_config_changed_id 0x091400a8 + +/***************************************************************************//** + * @brief Data structure of the model_config_changed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_model_config_changed_s +{ + uint8_t node_config_state; /**< The configuration state which has changed. + Values are as follows: + - 0x00: Model application key + bindings + - 0x01: Model publication parameters + - 0x02: Model subscription list */ + uint16_t element_address; /**< Address of the element which contains the + model */ + uint16_t vendor_id; /**< Vendor ID of the model; value 0xffff is used + for Bluetooth SIG models. */ + uint16_t model_id; /**< Model ID of the model */ +}); + +typedef struct sl_btmesh_evt_node_model_config_changed_s sl_btmesh_evt_node_model_config_changed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_model_config_changed + +/** + * @addtogroup sl_btmesh_evt_node_reset sl_btmesh_evt_node_reset + * @{ + * @brief Provisioner has instructed the node to reset + * + * This event is generated when the Provisioner has ordered the node to be + * reset. Stack data has already been reset. This event is generated to inform + * the application that it should do its own cleanup duties and reset the + * hardware. + */ + +/** @brief Identifier of the reset event */ +#define sl_btmesh_evt_node_reset_id 0x0a1400a8 + +/** @} */ // end addtogroup sl_btmesh_evt_node_reset + +/** + * @addtogroup sl_btmesh_evt_node_ivrecovery_needed sl_btmesh_evt_node_ivrecovery_needed + * @{ + * @brief Network IV index recovery needed + * + * This event is generated when the node detects the network IV index is too far + * in the future to be automatically updated. See @ref + * sl_btmesh_node_set_ivrecovery_mode command. + */ + +/** @brief Identifier of the ivrecovery_needed event */ +#define sl_btmesh_evt_node_ivrecovery_needed_id 0x0b1400a8 + +/***************************************************************************//** + * @brief Data structure of the ivrecovery_needed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_ivrecovery_needed_s +{ + uint32_t node_iv_index; /**< Current IV index of the node */ + uint32_t network_iv_index; /**< Received network IV index */ +}); + +typedef struct sl_btmesh_evt_node_ivrecovery_needed_s sl_btmesh_evt_node_ivrecovery_needed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_ivrecovery_needed + +/** + * @addtogroup sl_btmesh_evt_node_changed_ivupdate_state sl_btmesh_evt_node_changed_ivupdate_state + * @{ + * @brief Network IV index update state has changed. + */ + +/** @brief Identifier of the changed_ivupdate_state event */ +#define sl_btmesh_evt_node_changed_ivupdate_state_id 0x0c1400a8 + +/***************************************************************************//** + * @brief Data structure of the changed_ivupdate_state event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_changed_ivupdate_state_s +{ + uint32_t iv_index; /**< Current IV index */ + uint8_t state; /**< Indicates whether the IV index update is ongoing (1) + or not (0). */ +}); + +typedef struct sl_btmesh_evt_node_changed_ivupdate_state_s sl_btmesh_evt_node_changed_ivupdate_state_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_changed_ivupdate_state + +/** + * @addtogroup sl_btmesh_evt_node_static_oob_request sl_btmesh_evt_node_static_oob_request + * @{ + * @brief Static out of band authentication data is needed in the provisioning + * + * The application on the node should provide the value to the Bluetooth mesh + * stack using the @ref sl_btmesh_node_send_static_oob_request_response command. + */ + +/** @brief Identifier of the static_oob_request event */ +#define sl_btmesh_evt_node_static_oob_request_id 0x0d1400a8 + +/** @} */ // end addtogroup sl_btmesh_evt_node_static_oob_request + +/** + * @addtogroup sl_btmesh_evt_node_key_removed sl_btmesh_evt_node_key_removed + * @{ + * @brief Received when a Configuration Client removes a network or application + * key from the node. + */ + +/** @brief Identifier of the key_removed event */ +#define sl_btmesh_evt_node_key_removed_id 0x0e1400a8 + +/***************************************************************************//** + * @brief Data structure of the key_removed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_key_removed_s +{ + uint8_t type; /**< Type of the removed key. Values are as follows: + - 0x00: Network key + - 0x01: Application key */ + uint16_t index; /**< Key index of the removed key */ + uint16_t netkey_index; /**< Network key index to which the application key is + bound, which is ignored for network keys */ +}); + +typedef struct sl_btmesh_evt_node_key_removed_s sl_btmesh_evt_node_key_removed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_key_removed + +/** + * @addtogroup sl_btmesh_evt_node_key_updated sl_btmesh_evt_node_key_updated + * @{ + * @brief Received when a Configuration Client updates a network or application + * key of the node. + */ + +/** @brief Identifier of the key_updated event */ +#define sl_btmesh_evt_node_key_updated_id 0x0f1400a8 + +/***************************************************************************//** + * @brief Data structure of the key_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_key_updated_s +{ + uint8_t type; /**< Type of the updated key. Values are as follows: + - 0x00: Network key + - 0x01: Application key */ + uint16_t index; /**< Key index of the updated key */ + uint16_t netkey_index; /**< Network key index to which the application key is + bound. Ignore this value if the event is for + network key updates. */ +}); + +typedef struct sl_btmesh_evt_node_key_updated_s sl_btmesh_evt_node_key_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_key_updated + +/** + * @addtogroup sl_btmesh_evt_node_heartbeat sl_btmesh_evt_node_heartbeat + * @{ + * @brief Indicates reception of heartbeat message + */ + +/** @brief Identifier of the heartbeat event */ +#define sl_btmesh_evt_node_heartbeat_id 0x101400a8 + +/***************************************************************************//** + * @brief Data structure of the heartbeat event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_heartbeat_s +{ + uint16_t src_addr; /**< Source address for the heartbeat message */ + uint16_t dst_addr; /**< Destination address for the heartbeat message */ + uint8_t hops; /**< Hops traveled by the heartbeat message */ +}); + +typedef struct sl_btmesh_evt_node_heartbeat_s sl_btmesh_evt_node_heartbeat_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_heartbeat + +/** + * @addtogroup sl_btmesh_evt_node_heartbeat_start sl_btmesh_evt_node_heartbeat_start + * @{ + * @brief Indicates start of heartbeat reception + */ + +/** @brief Identifier of the heartbeat_start event */ +#define sl_btmesh_evt_node_heartbeat_start_id 0x111400a8 + +/***************************************************************************//** + * @brief Data structure of the heartbeat_start event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_heartbeat_start_s +{ + uint16_t src_addr; /**< Source address for the heartbeat message */ + uint16_t dst_addr; /**< Destination address for the heartbeat message */ + uint32_t period_sec; /**< Heartbeat subscription period in seconds. */ +}); + +typedef struct sl_btmesh_evt_node_heartbeat_start_s sl_btmesh_evt_node_heartbeat_start_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_heartbeat_start + +/** + * @addtogroup sl_btmesh_evt_node_heartbeat_stop sl_btmesh_evt_node_heartbeat_stop + * @{ + * @brief Indicates end of heartbeat reception + */ + +/** @brief Identifier of the heartbeat_stop event */ +#define sl_btmesh_evt_node_heartbeat_stop_id 0x121400a8 + +/***************************************************************************//** + * @brief Data structure of the heartbeat_stop event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_heartbeat_stop_s +{ + uint16_t src_addr; /**< Source address for the heartbeat message */ + uint16_t dst_addr; /**< Destination address for the heartbeat message */ +}); + +typedef struct sl_btmesh_evt_node_heartbeat_stop_s sl_btmesh_evt_node_heartbeat_stop_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_heartbeat_stop + +/** + * @addtogroup sl_btmesh_evt_node_beacon_received sl_btmesh_evt_node_beacon_received + * @{ + * @brief Indicates reception of the secure network beacon + */ + +/** @brief Identifier of the beacon_received event */ +#define sl_btmesh_evt_node_beacon_received_id 0x131400a8 + +/***************************************************************************//** + * @brief Data structure of the beacon_received event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_beacon_received_s +{ + uint16_t netkey_index; /**< Index of the network key used to encrypt the + beacon */ + uint8_t key_refresh; /**< Indicates whether there is an ongoing key refresh. */ + uint8_t iv_update; /**< Indicates whether there is an ongoing IV update. */ + uint32_t iv_index; /**< IV index contained in the beacon. */ +}); + +typedef struct sl_btmesh_evt_node_beacon_received_s sl_btmesh_evt_node_beacon_received_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_beacon_received + +/** + * @addtogroup sl_btmesh_evt_node_local_dcd_data sl_btmesh_evt_node_local_dcd_data + * @{ + * @brief Event reporting queried composition data page contents + * + * The contents are requested using the @ref sl_btmesh_node_get_local_dcd + * command. More than one event may be generated. Page contents are terminated + * by a @ref sl_btmesh_evt_node_local_dcd_data_end event. Note that the + * interpretation of the received data is page-specific. Page 0 contains the + * element and model layout of the node. + */ + +/** @brief Identifier of the local_dcd_data event */ +#define sl_btmesh_evt_node_local_dcd_data_id 0x141400a8 + +/***************************************************************************//** + * @brief Data structure of the local_dcd_data event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_local_dcd_data_s +{ + uint8_t page; /**< Composition data page containing data */ + uint8array data; /**< Composition data page contents */ +}); + +typedef struct sl_btmesh_evt_node_local_dcd_data_s sl_btmesh_evt_node_local_dcd_data_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_local_dcd_data + +/** + * @addtogroup sl_btmesh_evt_node_local_dcd_data_end sl_btmesh_evt_node_local_dcd_data_end + * @{ + * @brief Terminating event for node composition data + */ + +/** @brief Identifier of the local_dcd_data_end event */ +#define sl_btmesh_evt_node_local_dcd_data_end_id 0x151400a8 + +/***************************************************************************//** + * @brief Data structure of the local_dcd_data_end event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_local_dcd_data_end_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ +}); + +typedef struct sl_btmesh_evt_node_local_dcd_data_end_s sl_btmesh_evt_node_local_dcd_data_end_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_local_dcd_data_end + +/** + * @addtogroup sl_btmesh_evt_node_local_model_metadata_page sl_btmesh_evt_node_local_model_metadata_page + * @{ + * @brief Event reporting queried model metadata page contents + * + * The contents are requested using the @ref + * sl_btmesh_node_get_local_model_metadata_page command. More than one event may + * be generated. Page contents are terminated by a @ref + * sl_btmesh_evt_node_local_model_metadata_page_end event. Note that the + * interpretation of the received data is page-specific. Page 0 contains the + * optional model metadata for mesh models, if applicable. + */ + +/** @brief Identifier of the local_model_metadata_page event */ +#define sl_btmesh_evt_node_local_model_metadata_page_id 0x191400a8 + +/***************************************************************************//** + * @brief Data structure of the local_model_metadata_page event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_local_model_metadata_page_s +{ + uint8_t page; /**< Model metadata page number */ + uint8array data; /**< Model metadata page contents */ +}); + +typedef struct sl_btmesh_evt_node_local_model_metadata_page_s sl_btmesh_evt_node_local_model_metadata_page_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_local_model_metadata_page + +/** + * @addtogroup sl_btmesh_evt_node_local_model_metadata_page_end sl_btmesh_evt_node_local_model_metadata_page_end + * @{ + * @brief Terminating event for Mesh Model Metadata page + */ + +/** @brief Identifier of the local_model_metadata_page_end event */ +#define sl_btmesh_evt_node_local_model_metadata_page_end_id 0x1a1400a8 + +/***************************************************************************//** + * @brief Data structure of the local_model_metadata_page_end event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_local_model_metadata_page_end_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ +}); + +typedef struct sl_btmesh_evt_node_local_model_metadata_page_end_s sl_btmesh_evt_node_local_model_metadata_page_end_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_local_model_metadata_page_end + +/** + * @addtogroup sl_btmesh_evt_node_start_received sl_btmesh_evt_node_start_received + * @{ + * @brief Provisioning Start PDU received + * + * This diagnostic event shows the algorithm, public key, and authentication + * choices Provisioner made and communicated to the unprovisioned device. + */ + +/** @brief Identifier of the start_received event */ +#define sl_btmesh_evt_node_start_received_id 0x161400a8 + +/***************************************************************************//** + * @brief Data structure of the start_received event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_start_received_s +{ + uint8_t algorithm; /**< Selected provisioning algorithm */ + uint8_t public_key; /**< Selected OOB public key */ + uint8_t authentication_method; /**< Selected authentication method */ + uint8_t authentication_action; /**< Selected authentication action */ + uint8_t authentication_size; /**< Selected authentication size */ +}); + +typedef struct sl_btmesh_evt_node_start_received_s sl_btmesh_evt_node_start_received_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_start_received + +/** + * @addtogroup sl_btmesh_evt_node_address_updated sl_btmesh_evt_node_address_updated + * @{ + * @brief Address of the device has changed due to a NPPI procedure. + */ + +/** @brief Identifier of the address_updated event */ +#define sl_btmesh_evt_node_address_updated_id 0x171400a8 + +/***************************************************************************//** + * @brief Data structure of the address_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_node_address_updated_s +{ + uint16_t new_address; /**< New address taken into use. */ +}); + +typedef struct sl_btmesh_evt_node_address_updated_s sl_btmesh_evt_node_address_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_node_address_updated + +/** + * @addtogroup sl_btmesh_evt_node_dcd_updated sl_btmesh_evt_node_dcd_updated + * @{ + * @brief DCD page 128 has been taken in use as Page 0 due to a NPPI procedure + * + * Node needs to be restarted. + */ + +/** @brief Identifier of the dcd_updated event */ +#define sl_btmesh_evt_node_dcd_updated_id 0x181400a8 + +/** @} */ // end addtogroup sl_btmesh_evt_node_dcd_updated + +/***************************************************************************//** + * + * Initialize the Bluetooth mesh stack in Node role. When initialization is + * complete, a @ref sl_btmesh_evt_node_initialized event will be generated. + * + * This command must be issued before any other Bluetooth Mesh commands, except + * for @ref sl_btmesh_node_set_uuid command. + * + * Note that you may initialize a device either in the Provisioner or the Node + * role, but not both. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_node_initialized + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_init(); + +/***************************************************************************//** + * + * Set the node in mode that allows exporting encryption keys. By default on + * devices with PSA/ITS support the keys on normal node cannot be exported. This + * command must called before either @ref sl_btmesh_node_init or @ref + * sl_btmesh_node_init_oob. On everey boot device boots to node role unless + * this command is issued before node initialization + * + * This command is to be used if device is originally in a node role and at + * later stage switches to a provisioner role. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_exportable_keys(); + +/***************************************************************************//** + * + * Start sending Unprovisioned Device Beacons. + * + * This command makes an unprovisioned device available for provisioning. The + * device will start sending periodic unprovisioned device beacons containing + * device UUID. It will also start listening for incoming Provisioner connection + * attempts on the specified bearers (PB-ADV, PB-GATT, or both). For PB-GATT, + * the device will also begin advertising its provisioning GATT service. + * + * At the beginning of a provisioning process, a @ref + * sl_btmesh_evt_node_provisioning_started event will be generated. When the + * device receives provisioning data from the Provisioner, a @ref + * sl_btmesh_evt_node_provisioned event will be generated. If provisioning fails + * with an error, a @ref sl_btmesh_evt_node_provisioning_failed event will be + * generated. + * + * After it is provisioned, addresses are allocated for the node elements and a + * network key is deployed to the node, making the node ready for further + * configuration by the Provisioner. Note that, at this point, the node is not + * yet fully ready to communicate with other nodes on the network. + * + * @param[in] bearer @parblock + * Bit mask for which bearer to use. Values are as follows: + * - 1 (bit 0): PB-ADV + * - 2 (bit 1): PB-GATT + * + * Other bits are reserved and must not be used. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_node_provisioning_started + * - @ref sl_btmesh_evt_node_provisioned + * - @ref sl_btmesh_evt_node_provisioning_failed + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_start_unprov_beaconing(uint8_t bearer); + +/***************************************************************************//** + * + * Stop sending Unprovisioned Device Beacons. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_stop_unprov_beaconing(); + +/***************************************************************************//** + * + * Get the latest RSSI value of a provisioned Bluetooth device. + * + * The value indicates the best signal strength received from any node within + * the network. The value is cleared after calling this function meaning the + * next call will fail if no new RSSI value is received. + * + * @param[out] rssi Latest RSSI value. Units: dBm. Ignore this parameter if the + * command fails. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_rssi(int8_t *rssi); + +/***************************************************************************//** + * + * Provide the stack with the input out-of-band authentication data which the + * Provisioner is displaying. + * + * @param[in] data_len Length of data in @p data + * @param[in] data Raw 16-byte array containing the authentication data. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_send_input_oob_request_response(size_t data_len, + const uint8_t* data); + +/***************************************************************************//** + * + * Get the device UUID. + * + * Every mesh device has a 128-bit UUID identifying the device. It is used + * primarily during provisioning, because it is broadcast in Unprovisioned + * Device Beacons to indicate that the device is ready to be provisioned. + * + * This command is used for debugging purposes. During provisioning, the stack + * automatically uses the UUID of the device, which does not need to be + * explicitly specified when @ref sl_btmesh_node_start_unprov_beaconing is + * started. + * + * If get uuid is used before @ref sl_btmesh_node_init, the uuid will be read + * from the nvme if it was manually set by @ref sl_btmesh_node_set_uuid. If get + * uuid is used without a prior @ref sl_btmesh_node_init or @ref + * sl_btmesh_node_set_uuid, SL_STATUS_BT_MESH_DOES_NOT_EXIST will be returned. + * + * @param[out] uuid The 16-byte UUID of the device + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_uuid(uuid_128 *uuid); + +/***************************************************************************//** + * + * Provision devices completely out-of-band. Populate the Provisioner's device + * database with the corresponding values to make the device reachable and + * configurable in the Provisioner's network. + * + * See also the Provisioner command for @ref sl_btmesh_prov_add_ddb_entry to + * Provisioner's device database. + * + * NOTE : The device must be reset after this command has been issued. + * + * @param[in] device_key Device Key for this Device, shared by the Provisioner + * @param[in] network_key Network key that the Provisioner has selected for this + * device + * @param[in] netkey_index Index of the Network Key the Provisioner has selected + * for this device + * @param[in] iv_index Current IV Index used in the network + * @param[in] address Address the Provisioner has allocated for this device's + * primary element + * @param[in] kr_in_progress Set to 1 if key refresh is currently in progress, + * otherwise 0. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_provisioning_data(aes_key_128 device_key, + aes_key_128 network_key, + uint16_t netkey_index, + uint32_t iv_index, + uint16_t address, + uint8_t kr_in_progress); + +/***************************************************************************//** + * + * Initialize the Bluetooth mesh stack in the Node role. When initialization is + * complete, a @ref sl_btmesh_evt_node_initialized event is generated. + * + * This command is the same as the @ref sl_btmesh_node_init command except for + * parameters defining whether OOB authentication data stored on the device can + * be used during provisioning. + * + * This command must be issued before any other Bluetooth mesh commands, except + * for @ref sl_btmesh_node_set_uuid command. + * + * Note that you may initialize a device either in the Provisioner or the Node + * role, but not both. + * + * @param[in] public_key If non-zero, use the ECC key stored in the persistent + * store during provisioning instead of an ephemeral key. + * @param[in] auth_methods Enum @ref sl_btmesh_node_auth_method_flag_t. Allowed + * OOB authentication methods. The value is a bitmap so that multiple methods + * can be supported. + * @param[in] output_actions Enum @ref sl_btmesh_node_oob_output_action_flag_t. + * Allowed OOB Output Action types + * @param[in] output_size Maximum Output OOB size Valid values range from 0 + * (feature not supported) to 8. + * @param[in] input_actions Enum @ref sl_btmesh_node_oob_input_action_flag_t. + * Allowed OOB Input Action types + * @param[in] input_size Maximum Input OOB size. Valid values range from 0 + * (feature not supported) to 8. + * @param[in] oob_location Defines the OOB data location bitmask. See @ref + * sl_btmesh_prov_oob_capabilities. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_node_initialized + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_init_oob(uint8_t public_key, + uint8_t auth_methods, + uint16_t output_actions, + uint8_t output_size, + uint16_t input_actions, + uint8_t input_size, + uint16_t oob_location); + +/***************************************************************************//** + * + * Enable/disable the IV index recovery mode. + * + * If the node has not been in communication with the network for a long time + * (e.g., because it was turned off), it may have missed IV index updates and + * isn't able to communicate with other nodes. In this case, enable the IV index + * recovery mode. + * + * @param[in] mode Zero to disable; non-zero to enable + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_ivrecovery_mode(uint8_t mode); + +/***************************************************************************//** + * + * Get the current IV index recovery mode state. See @ref + * sl_btmesh_node_set_ivrecovery_mode for details. + * + * @param[out] mode If non-zero, IV recovery is enabled. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_ivrecovery_mode(uint8_t *mode); + +/***************************************************************************//** + * + + * + * @param[in] max_statistics_size Size of output buffer passed in @p statistics + * @param[out] statistics_len On return, set to the length of output data + * written to @p statistics + * @param[out] statistics Raw statistics data + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_statistics(size_t max_statistics_size, + size_t *statistics_len, + uint8_t *statistics); + +/***************************************************************************//** + * + + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_clear_statistics(); + +/***************************************************************************//** + * + * Set the network relay delay interval. + * + * This parameter determines the time a relay waits until it relays a network + * PDU. The value used is a random number within the specified interval. + * + * Note that this value affects the first instance of the relayed network PDU. + * If relay retransmissions are enabled, the interval between retransmissions is + * defined by the relay state, set by the Provisioner of the network or by @ref + * sl_btmesh_test_set_relay test command. + * + * @param[in] min_ms Minimum interval, in milliseconds + * @param[in] max_ms Maximum interval, in milliseconds, which must be equal to + * or greater than the minimum. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_net_relay_delay(uint8_t min_ms, uint8_t max_ms); + +/***************************************************************************//** + * + * Get network relay delay interval. See @ref sl_btmesh_node_set_net_relay_delay + * command for details. + * + * @param[out] min_ms Minimum interval, in milliseconds + * @param[out] max_ms Maximum interval, in milliseconds + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_net_relay_delay(uint8_t *min_ms, + uint8_t *max_ms); + +/***************************************************************************//** + * + * Get the current IV index update state in the network. + * + * @param[out] iv_index Current IV index + * @param[out] state Indicates whether the IV index update is ongoing (1) or not + * (0). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_ivupdate_state(uint32_t *iv_index, + uint8_t *state); + +/***************************************************************************//** + * + * Attempt to request an IV index update in the network. + * + * Each network layer PDU that a node sends has a 24-bit sequence number + * attached to it. Each node element keeps a sequence number counter, which is + * incremented for every PDU sent out to the network. Repeating sequence numbers + * for a given IV index value is not allowed. As a result, if a node determines + * it is about to exhaust the available sequence numbers in one of its elements, + * it needs to request an IV index update by issuing this command. + * + * Determining when a node may run out of sequence numbers has to be done at the + * application level because the stack can't determine how often the application + * plans to transmit to the network, i.e., how long the remaining sequence + * numbers might last. + * + * See also the @ref sl_btmesh_node_get_seq_remaining command. + * + * Note that the call may fail for various reasons, for example if an IV index + * update is already ongoing, or if not enough time has passed since the + * previous IV index update. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_request_ivupdate(); + +/***************************************************************************//** + * + * Get the number of sequence numbers remaining on an element (before sequence + * numbers are exhausted). Note that every node element keeps a separate + * sequence number counter. + * + * @param[in] elem_index The index of queried element + * @param[out] count Remaining sequence number count + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_seq_remaining(uint16_t elem_index, + uint32_t *count); + +/***************************************************************************//** + * + * Save the current replay protection list to the persistent store. + * + * The replay protection list keeps track of the packet sequence numbers from + * different sources received by the node. The node will not process messages + * associated with already used sequence numbers and is therefore protected from + * replay attacks using previously recorded messages. + * + * The replay protection list is kept in RAM during runtime. It needs to be + * saved to the persistent store periodically and always before the device + * powers off. Because the stack is not aware when this will happen, the + * application has to call this method while the node is getting ready to power + * down but is still running. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_save_replay_protection_list(); + +/***************************************************************************//** + * + * Write device UUID into the persistent store. This command must be called + * before initializing the Bluetooth mesh stack (before @ref sl_btmesh_node_init + * or @ref sl_btmesh_node_init_oob), otherwise the change will not take effect + * before a reboot. + * + * Ensure that the UUID conforms to the format defined in RFC 4122 + * + * Note that UUID must not be changed when the device is provisioned to a + * network. + * + * Furthermore, ensure that the UUID remains constant if a device has received a + * firmware update, which requires reprovisioning of the device after the update + * has been applied (e.g., new elements are added by the update). + * + * @param[in] uuid UUID to set + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_uuid(uuid_128 uuid); + +/***************************************************************************//** + * + * Get the status of the replay protection list. + * + * @param[out] total_entries Total number of entries in use + * @param[out] unsaved_entries Number of unsaved entries + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_replay_protection_list_status(uint16_t *total_entries, + uint16_t *unsaved_entries); + +/***************************************************************************//** + * + * Get the unicast address configured to an element. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[out] address The address of the element. Returns 0x0000 if the address + * is not configured or if an error occurs. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_element_address(uint16_t elem_index, + uint16_t *address); + +/***************************************************************************//** + * + * Provide the stack with static out-of-band authentication data, which the + * stack requested. + * + * @param[in] data_len Length of data in @p data + * @param[in] data Raw 16-byte array containing the authentication data + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_send_static_oob_request_response(size_t data_len, + const uint8_t* data); + +/***************************************************************************//** + * + * Factory reset of the mesh node. + * + * To complete procedure, the application should do its own cleanup duties and + * reset the hardware. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_reset(); + +/***************************************************************************//** + * + * Set secure network beaconing on or off. When on, every received secure + * network beacon will generate a @ref sl_btmesh_evt_node_beacon_received event. + * + * @param[in] report Turn reporting on (nonzero) or off (zero). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_beacon_reporting(uint8_t report); + +/***************************************************************************//** + * + * Set the time since the last IV update. After the reboot, the node doesn't + * know the time since the last IV update and assumes that it happened at the + * time of the reboot. + * + * @param[in] age_sec Seconds since last IV update. Values from 0 to 345600 + * (96h) + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_iv_update_age(uint32_t age_sec); + +/***************************************************************************//** + * + * Get the total number of keys in node. + * + * @param[in] type Enum @ref sl_btmesh_node_key_type_t. 0 for network key, 1 for + * application key + * @param[out] count Number of keys of the given type on the device + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_key_count(uint8_t type, uint32_t *count); + +/***************************************************************************//** + * + * Get a key by position. Only current key data exits in normal mode. Old key + * data can be queried only during the key refresh. + * + * @param[in] type Enum @ref sl_btmesh_node_key_type_t. 0 for network key, 1 for + * application key + * @param[in] index Key position, ranging from zero to key count minus one + * @param[in] current 1: Current key, 0: Old key + * @param[out] id Mesh key index of the key + * @param[out] netkey_index For application keys, the network key index of the + * network key this key is bound to. Ignore for other key types. + * @param[out] key Key data, 16 bytes + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_key(uint8_t type, + uint32_t index, + uint8_t current, + uint16_t *id, + uint16_t *netkey_index, + aes_key_128 *key); + +/***************************************************************************//** + * + * Get a list of networks supported by the node. + * + * @param[in] max_networks_size Size of output buffer passed in @p networks + * @param[out] networks_len On return, set to the length of output data written + * to @p networks + * @param[out] networks List of network IDs. Each ID is two bytes in + * little-endian format + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_networks(size_t max_networks_size, + size_t *networks_len, + uint8_t *networks); + +/***************************************************************************//** + * + * Get the current sequence number of an element. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[out] seqnum Current sequence number of the element Ignore the value if + * the result code indicates an error (for example, when the element index is + * out of bounds). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_element_seqnum(uint16_t elem_index, + uint32_t *seqnum); + +/***************************************************************************//** + * + * Set a model-specific option. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID + * @param[in] option Option to set. The following options are defined: + * - 0x80 Generic level delta behavior. Used only with generic level + * models. + * - 0xa0 Light models range status behavior. Used only with + * Lightness, Ctl and Hsl models. Note that state codes are different for + * states with status + * @param[in] value @parblock + * Value for the option. + * + * The following values are defined for generic level delta behavior option: + * - 0x0 Generic level delta behavior: pass raw delta request data to + * application + * - 0x1 Generic level delta behavior: pass processed delta request + * data to application (default) + * + * The following values are defined for for Lightness, Ctl and Hsl range + * status message behavior option: + * - 0x0 Range Status behavior: pass status messages without status + * field(default) + * - 0x1 Range Status behavior: pass status messagages with status + * field + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_model_option(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t option, + uint32_t value); + +/***************************************************************************//** + * + * Get the local Device Composition Data. + * + * @param[in] page Composition data page to query + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_node_local_dcd_data + * - @ref sl_btmesh_evt_node_local_dcd_data_end + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_local_dcd(uint8_t page); + +/***************************************************************************//** + * + * Power off the mesh node. To be called prior power off to allow the device to + * save its own state. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_power_off(); + +/***************************************************************************//** + * @cond RESTRICTED + * + * Restricted/experimental API. Contact Silicon Labs sales for more information. + * + * Set PHY used for ADV traffic + * + * @param[in] phy - 1: Primary and secondary channels are set to 1M + * - 2: Primary channels are 1M, secondary channels are 2M + * - 4: Primary and secondary channels are set to 125K Coded Phy (S=8) + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @endcond + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_adv_phy(uint8_t phy); + +/***************************************************************************//** + * @cond RESTRICTED + * + * Restricted/experimental API. Contact Silicon Labs sales for more information. + * + * Get PHY used for ADV traffic + * + * @param[out] phy - 1: Primary and secondary channels are set to 1M + * - 2: Primary channels are 1M, secondary channels are 2M + * - 4: Primary and secondary channels are set to 125K Coded Phy (S=8) + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @endcond + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_adv_phy(uint8_t *phy); + +/***************************************************************************//** + * + * Set the set of allowed provisioning algorithms. The application can use this + * command to limit the algorithms used in provisioning, even if the stack would + * contain support for multiple algorithms. This command has to be issued before + * initializing the stack with @ref sl_btmesh_node_init or @ref + * sl_btmesh_node_init_oob. + * + * @param[in] algorithms Enum @ref sl_btmesh_node_algorithm_flag_t. Allowed + * provisioning algorithms bitmask; zero represents a special value to allow + * any available algorithm. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_provisioning_algorithms(uint16_t algorithms); + +/***************************************************************************//** + * + * Initialize provisioning record retrieval functionality on the device. This + * must be called before device is provisioned, if provisioning records are to + * be used. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_init_provisioning_records(); + +/***************************************************************************//** + * + * Set Unprovisioned Device Beaconing advertisement interval timing parameters + * both with and without URI. + * + * This command sets the timing parameters of Unprovisioned Device Beaconing + * advertisement interval with and without URI. This setting will take effect + * next time the Unprovisioned Device Beaconing advertisement is started. + * + * @param[in] adv_interval_min Minimum advertisement interval. Value is in units + * of 0.625 ms. Range: 0x20 to 0xFFFF. Time range: 20 ms to 40.96 s + * @param[in] adv_interval_max Maximum advertisement interval. Value is in units + * of 0.625 ms. Must be equal to or greater than the minimum interval. Range: + * 0x20 to 0xFFFF. Time range: 20 ms to 40.96 s + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_unprov_beaconing_adv_interval(uint16_t adv_interval_min, + uint16_t adv_interval_max); + +/***************************************************************************//** + * + * Set Mesh Proxy Service advertisement interval timing parameters. + * + * This command sets the timing parameters of Mesh Proxy Service advertisement + * interval. This setting will take effect next time the Mesh Proxy Service + * advertisement is started. + * + * @param[in] adv_interval_min Minimum advertisement interval. Value is in units + * of 0.625 ms. Range: 0x20 to 0xFFFF. Time range: 20 ms to 40.96 s + * @param[in] adv_interval_max Maximum advertisement interval. Value is in units + * of 0.625 ms. Must be equal to or greater than the minimum interval. Range: + * 0x20 to 0xFFFF. Time range: 20 ms to 40.96 s + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_proxy_service_adv_interval(uint16_t adv_interval_min, + uint16_t adv_interval_max); + +/***************************************************************************//** + * + * Set Mesh Provisioning Service advertisement interval timing parameters. + * + * This command sets the timing parameters of Mesh Provisioning Service + * advertisement interval. This setting will take effect next time the Mesh + * Provisioning Service advertisement is started. + * + * @param[in] adv_interval_min Minimum advertisement interval. Value is in units + * of 0.625 ms. Range: 0x20 to 0xFFFF. Time range: 20 ms to 40.96 s + * @param[in] adv_interval_max Maximum advertisement interval. Value is in units + * of 0.625 ms. Must be equal to or greater than the minimum interval. Range: + * 0x20 to 0xFFFF. Time range: 20 ms to 40.96 s + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_provisioning_service_adv_interval(uint16_t adv_interval_min, + uint16_t adv_interval_max); + +/***************************************************************************//** + * + * Get the local Mesh Model Metadata. + * + * @param[in] page Model metadata page to query + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_node_local_model_metadata_page + * - @ref sl_btmesh_evt_node_local_model_metadata_page_end + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_local_model_metadata_page(uint8_t page); + +/***************************************************************************//** + * + * Save the current Private GATT Proxy Solicitation Replay Protection List to + * persistent storage. + * + * Solicitation PDU RPL is in use only if the node supports On Demand Private + * Proxy Server. + * + * The replay protection list keeps track of the Solicitation PDU sequence + * numbers from different sources received by the node. The node will not + * process messages associtated with already used sequence numbers and is + * therefore protected from replay attacks using previously recorded messages. + * + * The replay protection list is kept is RAM during runtime. It needs to be + * saved to persistent storage periodally and always before the device powers + * off. Because the stack is not aware when this will happen, the application + * has to call this method while the node is getting ready to power down but is + * still running. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_save_proxy_solicitation_rpl(); + +/***************************************************************************//** + * + * Get the status of the Solicitation Replay Protection List. + * + * @param[out] total_entries Total number of entries in use + * @param[out] unsaved_entries Number of unsaved entries + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_proxy_solicitation_rpl_status(uint16_t *total_entries, + uint16_t *unsaved_entries); + +/***************************************************************************//** + * + * Set OOB URI. + * + * @param[in] uri_len Length of data in @p uri + * @param[in] uri Base URI for OOB public key retrieval + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_set_oob_uri(size_t uri_len, const uint8_t* uri); + +/***************************************************************************//** + * + * Get the OOB URI. + * + * @param[in] max_uri_size Size of output buffer passed in @p uri + * @param[out] uri_len On return, set to the length of output data written to @p + * uri + * @param[out] uri Base URI for OOB public key retrieval + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_node_get_oob_uri(size_t max_uri_size, + size_t *uri_len, + uint8_t *uri); + +/** @} */ // end addtogroup sl_btmesh_node + +/** + * @addtogroup sl_btmesh_prov Bluetooth Mesh Stack Provisioner + * @{ + * + * @brief Bluetooth Mesh Stack Provisioner + * + * Bluetooth mesh stack API for the embedded Provisioner + * + * Commands in this class provision nodes in the mesh network and generate + * security keys for the network. + * + * Initialization: + * - @ref sl_btmesh_prov_init + * - @ref sl_btmesh_evt_prov_initialized + * - @ref sl_btmesh_evt_prov_initialization_failed + * + * Provisioning a node: + * - @ref sl_btmesh_prov_scan_unprov_beacons : Scan for unprovisioned device + * beacons + * - @ref sl_btmesh_prov_stop_scan_unprov_beacons : Stop scanning for + * unprovisioned device beacons + * - @ref sl_btmesh_evt_prov_unprov_beacon : Unprovisioned device beacon seen + * - @ref sl_btmesh_evt_prov_uri : URI advertisement seen + * - @ref sl_btmesh_prov_create_provisioning_session : Create provisioning + * session + * - @ref sl_btmesh_prov_provision_adv_device : Provision a device over PB-ADV + * - @ref sl_btmesh_prov_provision_gatt_device : Provision a device over + * PB-GATT + * - @ref sl_btmesh_evt_prov_oob_display_input : Request to display input + * out-of-band data to the user to input on the node + * - @ref sl_btmesh_evt_prov_oob_pkey_request : Request for out-of-band public + * key of a node + * - @ref sl_btmesh_prov_send_oob_pkey_response : Provide stack with + * out-of-band public key of a node + * - @ref sl_btmesh_evt_prov_oob_auth_request : Request for out-of-band + * authentication data of a node + * - @ref sl_btmesh_prov_send_oob_auth_response : Provide stack with + * out-of-band authentication data of a node + * - @ref sl_btmesh_evt_prov_device_provisioned : Device Provisioned + * - @ref sl_btmesh_evt_prov_provisioning_failed : Provisioning a device + * failed + * + * Key Management + * - @ref sl_btmesh_prov_create_network : Create a new network key on the + * Provisioner + * - @ref sl_btmesh_prov_create_appkey : Create a new application key on the + * Provisioner + * - @ref sl_btmesh_prov_start_key_refresh : Start a key refresh procedure + * - @ref sl_btmesh_prov_suspend_key_refresh : Suspend an ongoing key refresh + * procedure + * - @ref sl_btmesh_prov_resume_key_refresh : Resume a suspended key refresh + * procedure + * - @ref sl_btmesh_prov_get_key_refresh_exclusion : Get node key refresh + * exclusion status + * - @ref sl_btmesh_prov_set_key_refresh_exclusion : Set node key refresh + * exclusion status + * - @ref sl_btmesh_prov_get_key_refresh_phase : Get node key refresh phase + * - @ref sl_btmesh_prov_start_key_refresh_from_phase : Start a key refresh + * procedure from the given phase + * + * Device Database + * - @ref sl_btmesh_prov_add_ddb_entry : Add a node to the device database + * - @ref sl_btmesh_prov_delete_ddb_entry : Remove a node from the device + * database + * - @ref sl_btmesh_prov_get_ddb_entry : Fetch node data from the device + * database + * - @ref sl_btmesh_prov_list_ddb_entries : Request a list of nodes in the + * device database + * - @ref sl_btmesh_evt_prov_ddb_list : Device database list result + * - @ref sl_btmesh_prov_update_device_netkey_index : Update default network + * key index for a device database entry + * + * These commands are available only if the Provisioner functionality is + * compiled in the device. Otherwise, a "feature not implemented" error code + * will be returned for all functions in this class. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_prov_init_id 0x00150028 +#define sl_btmesh_cmd_prov_scan_unprov_beacons_id 0x01150028 +#define sl_btmesh_cmd_prov_create_provisioning_session_id 0x41150028 +#define sl_btmesh_cmd_prov_set_provisioning_suspend_event_id 0x42150028 +#define sl_btmesh_cmd_prov_provision_adv_device_id 0x43150028 +#define sl_btmesh_cmd_prov_provision_gatt_device_id 0x44150028 +#define sl_btmesh_cmd_prov_provision_remote_device_id 0x7f150028 +#define sl_btmesh_cmd_prov_continue_provisioning_id 0x45150028 +#define sl_btmesh_cmd_prov_abort_provisioning_id 0x47150028 +#define sl_btmesh_cmd_prov_set_device_address_id 0x46150028 +#define sl_btmesh_cmd_prov_create_network_id 0x03150028 +#define sl_btmesh_cmd_prov_create_appkey_id 0x07150028 +#define sl_btmesh_cmd_prov_send_oob_pkey_response_id 0x08150028 +#define sl_btmesh_cmd_prov_send_oob_auth_response_id 0x09150028 +#define sl_btmesh_cmd_prov_set_oob_requirements_id 0x0a150028 +#define sl_btmesh_cmd_prov_start_key_refresh_id 0x0b150028 +#define sl_btmesh_cmd_prov_get_key_refresh_exclusion_id 0x0c150028 +#define sl_btmesh_cmd_prov_set_key_refresh_exclusion_id 0x0d150028 +#define sl_btmesh_cmd_prov_set_key_refresh_failure_id 0x12150028 +#define sl_btmesh_cmd_prov_phase_timeout_get_id 0x10150028 +#define sl_btmesh_cmd_prov_phase_timeout_set_id 0x11150028 +#define sl_btmesh_cmd_prov_get_ddb_entry_id 0x16150028 +#define sl_btmesh_cmd_prov_delete_ddb_entry_id 0x17150028 +#define sl_btmesh_cmd_prov_add_ddb_entry_id 0x18150028 +#define sl_btmesh_cmd_prov_list_ddb_entries_id 0x19150028 +#define sl_btmesh_cmd_prov_initialize_network_id 0x37150028 +#define sl_btmesh_cmd_prov_get_key_refresh_appkey_exclusion_id 0x38150028 +#define sl_btmesh_cmd_prov_set_key_refresh_appkey_exclusion_id 0x39150028 +#define sl_btmesh_cmd_prov_stop_scan_unprov_beacons_id 0x3a150028 +#define sl_btmesh_cmd_prov_update_device_netkey_index_id 0x3b150028 +#define sl_btmesh_cmd_prov_suspend_key_refresh_id 0x3c150028 +#define sl_btmesh_cmd_prov_resume_key_refresh_id 0x3d150028 +#define sl_btmesh_cmd_prov_get_key_refresh_phase_id 0x3e150028 +#define sl_btmesh_cmd_prov_start_key_refresh_from_phase_id 0x3f150028 +#define sl_btmesh_cmd_prov_flush_key_refresh_state_id 0x40150028 +#define sl_btmesh_cmd_prov_test_identity_id 0x48150028 +#define sl_btmesh_cmd_prov_get_provisioning_records_list_id 0x1c150028 +#define sl_btmesh_cmd_prov_get_provisioning_record_data_id 0x1d150028 +#define sl_btmesh_cmd_prov_init_provisioning_records_id 0x1e150028 +#define sl_btmesh_rsp_prov_init_id 0x00150028 +#define sl_btmesh_rsp_prov_scan_unprov_beacons_id 0x01150028 +#define sl_btmesh_rsp_prov_create_provisioning_session_id 0x41150028 +#define sl_btmesh_rsp_prov_set_provisioning_suspend_event_id 0x42150028 +#define sl_btmesh_rsp_prov_provision_adv_device_id 0x43150028 +#define sl_btmesh_rsp_prov_provision_gatt_device_id 0x44150028 +#define sl_btmesh_rsp_prov_provision_remote_device_id 0x7f150028 +#define sl_btmesh_rsp_prov_continue_provisioning_id 0x45150028 +#define sl_btmesh_rsp_prov_abort_provisioning_id 0x47150028 +#define sl_btmesh_rsp_prov_set_device_address_id 0x46150028 +#define sl_btmesh_rsp_prov_create_network_id 0x03150028 +#define sl_btmesh_rsp_prov_create_appkey_id 0x07150028 +#define sl_btmesh_rsp_prov_send_oob_pkey_response_id 0x08150028 +#define sl_btmesh_rsp_prov_send_oob_auth_response_id 0x09150028 +#define sl_btmesh_rsp_prov_set_oob_requirements_id 0x0a150028 +#define sl_btmesh_rsp_prov_start_key_refresh_id 0x0b150028 +#define sl_btmesh_rsp_prov_get_key_refresh_exclusion_id 0x0c150028 +#define sl_btmesh_rsp_prov_set_key_refresh_exclusion_id 0x0d150028 +#define sl_btmesh_rsp_prov_set_key_refresh_failure_id 0x12150028 +#define sl_btmesh_rsp_prov_phase_timeout_get_id 0x10150028 +#define sl_btmesh_rsp_prov_phase_timeout_set_id 0x11150028 +#define sl_btmesh_rsp_prov_get_ddb_entry_id 0x16150028 +#define sl_btmesh_rsp_prov_delete_ddb_entry_id 0x17150028 +#define sl_btmesh_rsp_prov_add_ddb_entry_id 0x18150028 +#define sl_btmesh_rsp_prov_list_ddb_entries_id 0x19150028 +#define sl_btmesh_rsp_prov_initialize_network_id 0x37150028 +#define sl_btmesh_rsp_prov_get_key_refresh_appkey_exclusion_id 0x38150028 +#define sl_btmesh_rsp_prov_set_key_refresh_appkey_exclusion_id 0x39150028 +#define sl_btmesh_rsp_prov_stop_scan_unprov_beacons_id 0x3a150028 +#define sl_btmesh_rsp_prov_update_device_netkey_index_id 0x3b150028 +#define sl_btmesh_rsp_prov_suspend_key_refresh_id 0x3c150028 +#define sl_btmesh_rsp_prov_resume_key_refresh_id 0x3d150028 +#define sl_btmesh_rsp_prov_get_key_refresh_phase_id 0x3e150028 +#define sl_btmesh_rsp_prov_start_key_refresh_from_phase_id 0x3f150028 +#define sl_btmesh_rsp_prov_flush_key_refresh_state_id 0x40150028 +#define sl_btmesh_rsp_prov_test_identity_id 0x48150028 +#define sl_btmesh_rsp_prov_get_provisioning_records_list_id 0x1c150028 +#define sl_btmesh_rsp_prov_get_provisioning_record_data_id 0x1d150028 +#define sl_btmesh_rsp_prov_init_provisioning_records_id 0x1e150028 + +/** + * @addtogroup sl_btmesh_prov_oob_capabilities OOB Capabilities + * @{ + * + * OOB capability bitmask constants + */ + +/** Uncategorized */ +#define SL_BTMESH_PROV_OOB_OTHER 0x1 + +/** URI or other electronic */ +#define SL_BTMESH_PROV_OOB_URI 0x2 + +/** 2D machine-readable code */ +#define SL_BTMESH_PROV_OOB_2D_MR_CODE 0x4 + +/** Barcode */ +#define SL_BTMESH_PROV_OOB_BAR_CODE 0x8 + +/** NFC */ +#define SL_BTMESH_PROV_OOB_NFC 0x10 + +/** Number */ +#define SL_BTMESH_PROV_OOB_NUMBER 0x20 + +/** String */ +#define SL_BTMESH_PROV_OOB_STRING 0x40 + +/** Reserved */ +#define SL_BTMESH_PROV_OOB_RFU_7 0x80 + +/** Reserved */ +#define SL_BTMESH_PROV_OOB_RFU_8 0x100 + +/** Reserved */ +#define SL_BTMESH_PROV_OOB_RFU_9 0x200 + +/** Reserved */ +#define SL_BTMESH_PROV_OOB_RFU_A 0x400 + +/** On the box */ +#define SL_BTMESH_PROV_OOB_LOC_ON_BOX 0x800 + +/** Inside the box */ +#define SL_BTMESH_PROV_OOB_LOC_IN_BOX 0x1000 + +/** On a piece of paper */ +#define SL_BTMESH_PROV_OOB_LOC_PAPER 0x2000 + +/** In the device manual */ +#define SL_BTMESH_PROV_OOB_LOC_MANUAL 0x4000 + +/** On the device */ +#define SL_BTMESH_PROV_OOB_LOC_DEVICE 0x8000 + +/** Mask of reserved bits */ +#define SL_BTMESH_PROV_OOB_RFU_MASK 0x780 + +/** @} */ // end OOB Capabilities + +/** + * @addtogroup sl_btmesh_evt_prov_initialized sl_btmesh_evt_prov_initialized + * @{ + * @brief Provisioner is initialized and operational + */ + +/** @brief Identifier of the initialized event */ +#define sl_btmesh_evt_prov_initialized_id 0x001500a8 + +/***************************************************************************//** + * @brief Data structure of the initialized event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_initialized_s +{ + uint8_t networks; /**< Number of network keys that the Provisioner has */ + uint16_t address; /**< Unicast address of the primary element of the + Provisioner */ + uint32_t iv_index; /**< IVI for network primary network (index 0) */ +}); + +typedef struct sl_btmesh_evt_prov_initialized_s sl_btmesh_evt_prov_initialized_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_initialized + +/** + * @addtogroup sl_btmesh_evt_prov_provisioning_suspended sl_btmesh_evt_prov_provisioning_suspended + * @{ + * @brief Provisioning suspended. + */ + +/** @brief Identifier of the provisioning_suspended event */ +#define sl_btmesh_evt_prov_provisioning_suspended_id 0x181500a8 + +/***************************************************************************//** + * @brief Data structure of the provisioning_suspended event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_provisioning_suspended_s +{ + uuid_128 uuid; /**< UUID of the device */ + uint8_t reason; /**< Reason for suspension. Values are as follows: + - 0: Capabilities Event received + - 1: Provisioning link opened */ +}); + +typedef struct sl_btmesh_evt_prov_provisioning_suspended_s sl_btmesh_evt_prov_provisioning_suspended_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_provisioning_suspended + +/** + * @addtogroup sl_btmesh_evt_prov_capabilities sl_btmesh_evt_prov_capabilities + * @{ + * @brief Provisioning capabilities message + */ + +/** @brief Identifier of the capabilities event */ +#define sl_btmesh_evt_prov_capabilities_id 0x171500a8 + +/***************************************************************************//** + * @brief Data structure of the capabilities event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_capabilities_s +{ + uuid_128 uuid; /**< UUID of the device being provisioned */ + uint8_t elements; /**< Number of elements supported by the device */ + uint16_t algorithms; /**< Supported algorithms and other capabilities. */ + uint8_t pkey_type; /**< Supported public key types */ + uint8_t static_oob_type; /**< Supported static OOB Types */ + uint8_t ouput_oob_size; /**< Maximum size of Output OOB supported */ + uint16_t output_oob_action; /**< Supported Output OOB Actions */ + uint8_t input_oob_size; /**< Maximum size of input OOB supported */ + uint16_t intput_oob_action; /**< Supported input OOB Actions */ +}); + +typedef struct sl_btmesh_evt_prov_capabilities_s sl_btmesh_evt_prov_capabilities_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_capabilities + +/** + * @addtogroup sl_btmesh_evt_prov_provisioning_failed sl_btmesh_evt_prov_provisioning_failed + * @{ + * @brief Provisioning a device failed. + */ + +/** @brief Identifier of the provisioning_failed event */ +#define sl_btmesh_evt_prov_provisioning_failed_id 0x011500a8 + +/***************************************************************************//** + * @brief Data structure of the provisioning_failed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_provisioning_failed_s +{ + uint8_t reason; /**< Reason for failure. Values are as follows: + - 0: Link closed + - 1: Invalid PDU + - 2: Invalid PDU format + - 3: Unexpected PDU + - 4: Confirmation failed + - 5: Out of resources + - 6: Decryption failed + - 7: Unexpected error + - 8: Unable to assign address */ + uuid_128 uuid; /**< UUID of the device */ +}); + +typedef struct sl_btmesh_evt_prov_provisioning_failed_s sl_btmesh_evt_prov_provisioning_failed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_provisioning_failed + +/** + * @addtogroup sl_btmesh_evt_prov_device_provisioned sl_btmesh_evt_prov_device_provisioned + * @{ + * @brief Device provisioned successfully. + */ + +/** @brief Identifier of the device_provisioned event */ +#define sl_btmesh_evt_prov_device_provisioned_id 0x021500a8 + +/***************************************************************************//** + * @brief Data structure of the device_provisioned event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_device_provisioned_s +{ + uint16_t address; /**< Address assigned to the node's primary element. If the + node has multiple elements, they have been assigned an + address in a consecutive sequence following the primary + element address. */ + uuid_128 uuid; /**< UUID of the device */ +}); + +typedef struct sl_btmesh_evt_prov_device_provisioned_s sl_btmesh_evt_prov_device_provisioned_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_device_provisioned + +/** + * @addtogroup sl_btmesh_evt_prov_unprov_beacon sl_btmesh_evt_prov_unprov_beacon + * @{ + * @brief Unprovisioned beacon seen. + */ + +/** @brief Identifier of the unprov_beacon event */ +#define sl_btmesh_evt_prov_unprov_beacon_id 0x031500a8 + +/***************************************************************************//** + * @brief Data structure of the unprov_beacon event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_unprov_beacon_s +{ + uint16_t oob_capabilities; /**< OOB capabilities bitfield, which indicates the + means by which out-of-band provisioning data + may be retrieved. See @ref + sl_btmesh_prov_oob_capabilities. */ + uint32_t uri_hash; /**< Hash of the out-of-band URI, which is received + in @ref sl_btmesh_evt_prov_uri. If the URI bit + (bit 1) is not set in the OOB capabilities + bitfield, this field is ignored. */ + uint8_t bearer; /**< Bearer on which the beacon was seen. Values + are as follows: + - 0: PB-ADV + - 1: PB-GATT */ + bd_addr address; /**< Address of the device beaconing */ + uint8_t address_type; /**< Beaconing device address type. Values: + - 0: Public address + - 1: Random address */ + uuid_128 uuid; /**< 16-byte UUID of the beaconing device. */ + int8_t rssi; /**< RSSI value of the beacon seen. Units: dBm. */ +}); + +typedef struct sl_btmesh_evt_prov_unprov_beacon_s sl_btmesh_evt_prov_unprov_beacon_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_unprov_beacon + +/** + * @addtogroup sl_btmesh_evt_prov_oob_pkey_request sl_btmesh_evt_prov_oob_pkey_request + * @{ + * @brief The Provisioner needs the OOB public key of the Device with given UUID + * + * Input the key using prov_oob_pkey_rsp. + */ + +/** @brief Identifier of the oob_pkey_request event */ +#define sl_btmesh_evt_prov_oob_pkey_request_id 0x061500a8 + +/***************************************************************************//** + * @brief Data structure of the oob_pkey_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_oob_pkey_request_s +{ + uuid_128 uuid; /**< UUID of the Device */ +}); + +typedef struct sl_btmesh_evt_prov_oob_pkey_request_s sl_btmesh_evt_prov_oob_pkey_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_oob_pkey_request + +/** + * @addtogroup sl_btmesh_evt_prov_oob_auth_request sl_btmesh_evt_prov_oob_auth_request + * @{ + * @brief Provide the Provisioner with the device's output or static data using + * prov_oob_auth_rsp. + */ + +/** @brief Identifier of the oob_auth_request event */ +#define sl_btmesh_evt_prov_oob_auth_request_id 0x071500a8 + +/***************************************************************************//** + * @brief Data structure of the oob_auth_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_oob_auth_request_s +{ + uint8_t output; /**< Zero for static data, non-zero for output */ + uint8_t output_action; /**< Enum @ref sl_btmesh_node_oob_output_action_t. + Output action type. Ignored for Static. */ + uint8_t output_size; /**< Size of output data. Ignored for Static. */ + uuid_128 uuid; /**< UUID of the device */ +}); + +typedef struct sl_btmesh_evt_prov_oob_auth_request_s sl_btmesh_evt_prov_oob_auth_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_oob_auth_request + +/** + * @addtogroup sl_btmesh_evt_prov_oob_display_input sl_btmesh_evt_prov_oob_display_input + * @{ + * @brief Random OOB input data was generated and should be displayed to and + * input with the device. + */ + +/** @brief Identifier of the oob_display_input event */ +#define sl_btmesh_evt_prov_oob_display_input_id 0x081500a8 + +/***************************************************************************//** + * @brief Data structure of the oob_display_input event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_oob_display_input_s +{ + uuid_128 uuid; /**< UUID of the device */ + uint8_t input_action; /**< Enum @ref sl_btmesh_node_oob_input_action_t. + Input action type */ + uint8_t input_size; /**< Number of digits or characters */ + uint8array data; /**< Raw 16-byte array */ +}); + +typedef struct sl_btmesh_evt_prov_oob_display_input_s sl_btmesh_evt_prov_oob_display_input_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_oob_display_input + +/** + * @addtogroup sl_btmesh_evt_prov_ddb_list sl_btmesh_evt_prov_ddb_list + * @{ + * @brief Provisioner's device database list entry + */ + +/** @brief Identifier of the ddb_list event */ +#define sl_btmesh_evt_prov_ddb_list_id 0x091500a8 + +/***************************************************************************//** + * @brief Data structure of the ddb_list event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_ddb_list_s +{ + uuid_128 uuid; /**< UUID of the Device */ + uint16_t address; /**< Unicast address of the primary element of the node */ + uint8_t elements; /**< Number of elements the device has */ +}); + +typedef struct sl_btmesh_evt_prov_ddb_list_s sl_btmesh_evt_prov_ddb_list_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_ddb_list + +/** + * @addtogroup sl_btmesh_evt_prov_uri sl_btmesh_evt_prov_uri + * @{ + * @brief URI advertisement received from a nearby device + */ + +/** @brief Identifier of the uri event */ +#define sl_btmesh_evt_prov_uri_id 0x0d1500a8 + +/***************************************************************************//** + * @brief Data structure of the uri event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_uri_s +{ + uint32_t hash; /**< URI hash. If a Provisioner is provisioning a device + which supports out-of-band provisioning and has supplied + a URI hash value in its Unprovisioned Device beacon, the + Provisioner should check whether the hash matches this + value. */ + uint8array data; /**< Raw URI data, formatted as specified in Bluetooth Core + System Supplement v6. */ +}); + +typedef struct sl_btmesh_evt_prov_uri_s sl_btmesh_evt_prov_uri_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_uri + +/** + * @addtogroup sl_btmesh_evt_prov_key_refresh_phase_update sl_btmesh_evt_prov_key_refresh_phase_update + * @{ + * @brief Key refresh phase change for a network key has occurred + * + * This event is generated when all nodes participating in a key refresh + * procedure have been moved to a new state (or have timed out, dropping them + * from the key refresh procedure). + */ + +/** @brief Identifier of the key_refresh_phase_update event */ +#define sl_btmesh_evt_prov_key_refresh_phase_update_id 0x141500a8 + +/***************************************************************************//** + * @brief Data structure of the key_refresh_phase_update event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_key_refresh_phase_update_s +{ + uint16_t key; /**< Network key index */ + uint8_t phase; /**< Phase moved into */ +}); + +typedef struct sl_btmesh_evt_prov_key_refresh_phase_update_s sl_btmesh_evt_prov_key_refresh_phase_update_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_key_refresh_phase_update + +/** + * @addtogroup sl_btmesh_evt_prov_key_refresh_node_update sl_btmesh_evt_prov_key_refresh_node_update + * @{ + * @brief Key refresh phase change for a node has occurred + * + * This event is generated when a particular node has moved to a new key refresh + * phase. + */ + +/** @brief Identifier of the key_refresh_node_update event */ +#define sl_btmesh_evt_prov_key_refresh_node_update_id 0x151500a8 + +/***************************************************************************//** + * @brief Data structure of the key_refresh_node_update event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_key_refresh_node_update_s +{ + uint16_t key; /**< Network key index */ + uint8_t phase; /**< Phase moved into */ + uuid_128 uuid; /**< 16-byte UUID of the node. */ + uint8_t failure; /**< Shows if the node failed the key refresh phase */ +}); + +typedef struct sl_btmesh_evt_prov_key_refresh_node_update_s sl_btmesh_evt_prov_key_refresh_node_update_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_key_refresh_node_update + +/** + * @addtogroup sl_btmesh_evt_prov_key_refresh_complete sl_btmesh_evt_prov_key_refresh_complete + * @{ + * @brief Key refresh for a network key has completed + */ + +/** @brief Identifier of the key_refresh_complete event */ +#define sl_btmesh_evt_prov_key_refresh_complete_id 0x161500a8 + +/***************************************************************************//** + * @brief Data structure of the key_refresh_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_key_refresh_complete_s +{ + uint16_t key; /**< Network key index */ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ +}); + +typedef struct sl_btmesh_evt_prov_key_refresh_complete_s sl_btmesh_evt_prov_key_refresh_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_key_refresh_complete + +/** + * @addtogroup sl_btmesh_evt_prov_add_ddb_entry_complete sl_btmesh_evt_prov_add_ddb_entry_complete + * @{ + * @brief Adding a DDB entry has been completed + * + * See the result code for operation status. + */ + +/** @brief Identifier of the add_ddb_entry_complete event */ +#define sl_btmesh_evt_prov_add_ddb_entry_complete_id 0x191500a8 + +/***************************************************************************//** + * @brief Data structure of the add_ddb_entry_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_add_ddb_entry_complete_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uuid_128 uuid; /**< UUID of the Device */ +}); + +typedef struct sl_btmesh_evt_prov_add_ddb_entry_complete_s sl_btmesh_evt_prov_add_ddb_entry_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_add_ddb_entry_complete + +/** + * @addtogroup sl_btmesh_evt_prov_delete_ddb_entry_complete sl_btmesh_evt_prov_delete_ddb_entry_complete + * @{ + * @brief Deleting a DDB entry has been completed + * + * See the result code for operation status. + */ + +/** @brief Identifier of the delete_ddb_entry_complete event */ +#define sl_btmesh_evt_prov_delete_ddb_entry_complete_id 0x1a1500a8 + +/***************************************************************************//** + * @brief Data structure of the delete_ddb_entry_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_delete_ddb_entry_complete_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uuid_128 uuid; /**< UUID of the Device */ +}); + +typedef struct sl_btmesh_evt_prov_delete_ddb_entry_complete_s sl_btmesh_evt_prov_delete_ddb_entry_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_delete_ddb_entry_complete + +/** + * @addtogroup sl_btmesh_evt_prov_initialization_failed sl_btmesh_evt_prov_initialization_failed + * @{ + * @brief Provisioner has not been initialized successfully and is not + * operational + * + * It is not possible to use the device as a Provisioner. See the result code + * for details. + */ + +/** @brief Identifier of the initialization_failed event */ +#define sl_btmesh_evt_prov_initialization_failed_id 0x1b1500a8 + +/***************************************************************************//** + * @brief Data structure of the initialization_failed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_initialization_failed_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ +}); + +typedef struct sl_btmesh_evt_prov_initialization_failed_s sl_btmesh_evt_prov_initialization_failed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_initialization_failed + +/** + * @addtogroup sl_btmesh_evt_prov_provisioning_records_list sl_btmesh_evt_prov_provisioning_records_list + * @{ + * @brief Provisioning records list received, or retrieval failed. + */ + +/** @brief Identifier of the provisioning_records_list event */ +#define sl_btmesh_evt_prov_provisioning_records_list_id 0x1c1500a8 + +/***************************************************************************//** + * @brief Data structure of the provisioning_records_list event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_provisioning_records_list_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uuid_128 uuid; /**< UUID of the device */ + uint8array list; /**< Array of 16-bit provisioning record IDs */ +}); + +typedef struct sl_btmesh_evt_prov_provisioning_records_list_s sl_btmesh_evt_prov_provisioning_records_list_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_provisioning_records_list + +/** + * @addtogroup sl_btmesh_evt_prov_provisioning_record_data sl_btmesh_evt_prov_provisioning_record_data + * @{ + * @brief Provisioning record data received, or retrieval failed + * + * If successful, record data may be delivered fragmented to several events. The + * events will be delivered in order. + */ + +/** @brief Identifier of the provisioning_record_data event */ +#define sl_btmesh_evt_prov_provisioning_record_data_id 0x1d1500a8 + +/***************************************************************************//** + * @brief Data structure of the provisioning_record_data event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_provisioning_record_data_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uuid_128 uuid; /**< UUID of the device */ + uint16_t record; /**< Provisioning record ID */ + uint8_t final; /**< Indicates the end of record data; if zero, more events + will follow; if nonzero, this is the final data + fragment */ + uint8array data; /**< Raw provisioning record data or fragment thereof */ +}); + +typedef struct sl_btmesh_evt_prov_provisioning_record_data_s sl_btmesh_evt_prov_provisioning_record_data_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_provisioning_record_data + +/** + * @addtogroup sl_btmesh_evt_prov_start_sent sl_btmesh_evt_prov_start_sent + * @{ + * @brief Provisioning Start PDU sent + * + * This diagnostic event shows the algorithm, public key, and authentication + * choices Provisioner made and communicated to the unprovisioned device. + */ + +/** @brief Identifier of the start_sent event */ +#define sl_btmesh_evt_prov_start_sent_id 0x1e1500a8 + +/***************************************************************************//** + * @brief Data structure of the start_sent event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_prov_start_sent_s +{ + uuid_128 uuid; /**< UUID of the device */ + uint8_t algorithm; /**< Selected provisioning algorithm */ + uint8_t public_key; /**< Selected OOB public key */ + uint8_t authentication_method; /**< Selected authentication method */ + uint8_t authentication_action; /**< Selected authentication action */ + uint8_t authentication_size; /**< Selected authentication size */ +}); + +typedef struct sl_btmesh_evt_prov_start_sent_s sl_btmesh_evt_prov_start_sent_t; + +/** @} */ // end addtogroup sl_btmesh_evt_prov_start_sent + +/***************************************************************************//** + * + * Initialize the Bluetooth mesh stack in the Provisioner role. Note that the + * result code of this command only indicates that the request to initialize has + * been accepted for processing. When initialization is completed successfully, + * a @ref sl_btmesh_evt_prov_initialized will be generated. On failed + * initialization a @ref sl_btmesh_evt_prov_initialization_failed event will be + * generated. Note that the application must wait for an event to be generated + * before executing further BGAPI commands. + * + * This command must be issued before any other Bluetooth mesh stack commands. + * Note that the Bluetooth mesh stack can be initialized either in the + * Provisioner or the Node role, but not both. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_initialized + * - @ref sl_btmesh_evt_prov_initialization_failed + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_init(); + +/***************************************************************************//** + * + * Start scanning for unprovisioned device beacons. + * + * Unprovisioned devices send out beacons containing their UUID. An @ref + * sl_btmesh_evt_prov_unprov_beacon will be generated for each beacon seen. Once + * the UUID of a device is known, the Provisioner may start provisioning the + * device with the @ref sl_btmesh_prov_create_provisioning_session command. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_unprov_beacon + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_scan_unprov_beacons(); + +/***************************************************************************//** + * + * Initialize the provisioning session. After this command, it is possible to + * set the provisioning parameter with the following command: + * + * - @ref sl_btmesh_prov_set_provisioning_suspend_event + * + * After all optional parameters have been set, the provisioning process is + * triggered by one of the following commands: + * + * - @ref sl_btmesh_prov_provision_adv_device + * - @ref sl_btmesh_prov_provision_gatt_device + * + * @param[in] netkey_index Index of the initial network key, which is sent to + * the device during provisioning + * @param[in] uuid UUID of the device + * @param[in] attention_timer_sec Attention timer value, in seconds, which + * indicates the time that the provisioned device should attract human + * attention + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_create_provisioning_session(uint16_t netkey_index, + uuid_128 uuid, + uint8_t attention_timer_sec); + +/***************************************************************************//** + * + * Set whether the provisioning can be suspended at a specified point while it + * is occurring. Currently, this can happen after reception on provisioning + * capabilities message or when the provisioning link is opened. + * + * @param[in] status @parblock + * Controls when provisioning is suspended and @ref + * sl_btmesh_evt_prov_provisioning_suspended event is created. The value is a + * bitmap so multiple possibilities can be set. + * + * - Bit 0 set provisioning will be suspended when Capabilities PDU + * is received from the unprovisioned device + * - Bit 1 set provisioning will be suspended when the provisioning + * session is opened + * + * If no bits are set (value is zero) provisioning will not be suspended. This + * is the default. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_provisioning_suspended + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_set_provisioning_suspend_event(uint8_t status); + +/***************************************************************************//** + * + * Provision device over PB-ADV + * + * @param[in] uuid UUID of the device + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_device_provisioned + * - @ref sl_btmesh_evt_prov_provisioning_failed + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_provision_adv_device(uuid_128 uuid); + +/***************************************************************************//** + * + * Provision device over PB-GATT + * + * @param[in] uuid UUID of the device + * @param[in] connection Connection handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_device_provisioned + * - @ref sl_btmesh_evt_prov_provisioning_failed + * - @ref sl_btmesh_evt_prov_capabilities + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_provision_gatt_device(uuid_128 uuid, + uint8_t connection); + +/***************************************************************************//** + * + * Provision device over remote provisioning server connection + * + * @param[in] uuid UUID of the device + * @param[in] server Address of the remote provisioning server + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_device_provisioned + * - @ref sl_btmesh_evt_prov_provisioning_failed + * - @ref sl_btmesh_evt_prov_capabilities + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_provision_remote_device(uuid_128 uuid, + uint16_t server); + +/***************************************************************************//** + * + * Continue provisioning after the suspension indicated by @ref + * sl_btmesh_evt_prov_provisioning_suspended. + * + * @param[in] uuid UUID of the device being provisioned + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_continue_provisioning(uuid_128 uuid); + +/***************************************************************************//** + * + * Abort provisioning. This command is typically used after the suspension + * indicated by @ref sl_btmesh_evt_prov_provisioning_suspended. + * + * @param[in] uuid UUID of the device being provisioned + * @param[in] reason Reason for aborting. Values are as follows: + * - 1: Invalid PDU + * - 2: Invalid PDU format + * - 3: Unexpected PDU + * - 4: Confirmation failed + * - 5: Out of resources + * - 6: Decryption failed + * - 7: Unexpected error + * - 8: Unable to assign address + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_abort_provisioning(uuid_128 uuid, uint8_t reason); + +/***************************************************************************//** + * + * Set the address for the device after the provisioning has been suspended, as + * indicated by @ref sl_btmesh_evt_prov_provisioning_suspended event. + * + * @param[in] uuid UUID of the device being provisioned + * @param[in] address Unicast address to be assigned for the primary element of + * the node. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_set_device_address(uuid_128 uuid, uint16_t address); + +/***************************************************************************//** + * + * Create a new network key on the Provisioner. + * + * The created key can be deployed on a node using the @ref + * sl_btmesh_config_client_add_netkey command. + * + * @param[in] netkey_index Index to use for network key. Allowed values are from + * 0x000 to 0xfff. + * @param[in] key_len Length of data in @p key + * @param[in] key Key value to use. Set to zero-length array to generate a + * random key. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_create_network(uint16_t netkey_index, + size_t key_len, + const uint8_t* key); + +/***************************************************************************//** + * + * Create a new application key on the Provisioner. + * + * An application key is always bound to a network key. In other words, the + * application key is only valid in the context of a particular network key. The + * selected network key must exist on the Provisioner (see @ref + * sl_btmesh_prov_create_network command). + * + * The created application key can be deployed on a node using the @ref + * sl_btmesh_config_client_add_appkey command. + * + * @param[in] netkey_index Index of the network key to which the application key + * will be bound + * @param[in] appkey_index Index to use for application key. Allowed values are + * from 0x000 to 0xfff. + * @param[in] key_len Length of data in @p key + * @param[in] key Key value to use; set to zero-length array to generate random + * key. + * @param[in] max_application_key_size Size of output buffer passed in @p + * application_key + * @param[out] application_key_len On return, set to the length of output data + * written to @p application_key + * @param[out] application_key New application key. Ignore it if the result was + * non-zero. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_create_appkey(uint16_t netkey_index, + uint16_t appkey_index, + size_t key_len, + const uint8_t* key, + size_t max_application_key_size, + size_t *application_key_len, + uint8_t *application_key); + +/***************************************************************************//** + * + * Respond to the prov_oob_pkey_request. + * + * @param[in] uuid UUID of the Device + * @param[in] pkey_len Length of data in @p pkey + * @param[in] pkey Public Key read out-of-band + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_send_oob_pkey_response(uuid_128 uuid, + size_t pkey_len, + const uint8_t* pkey); + +/***************************************************************************//** + * + * Respond to the prov_oob_auth_request. + * + * @param[in] uuid UUID of the Device + * @param[in] data_len Length of data in @p data + * @param[in] data Output or static OOB data + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_send_oob_auth_response(uuid_128 uuid, + size_t data_len, + const uint8_t* data); + +/***************************************************************************//** + * + * Set the OOB requirements for a device being provisioned. This command can be + * issued after @ref sl_btmesh_prov_create_provisioning_session. + * + * @param[in] uuid UUID of the Device being provisioned + * @param[in] public_key The public key. Set to zero if the provisioning does + * not use OOB public Key. + * @param[in] auth_methods Enum @ref sl_btmesh_node_auth_method_flag_t. Allowed + * OOB authentication methods The value is a bitmap so that multiple methods + * can be supported. + * @param[in] output_actions Enum @ref sl_btmesh_node_oob_output_action_flag_t. + * Allowed OOB Output Action types + * @param[in] input_actions Enum @ref sl_btmesh_node_oob_input_action_flag_t. + * Allowed OOB Input Action types + * @param[in] min_size Minimum input/output OOB size. Values range from 0 + * (input/output OOB not used) to 8. + * @param[in] max_size Maximum input/output OOB size. Must be smaller than or + * equal to the minimum size. Values range from 0 (input/output OOB not used) + * to 8. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_set_oob_requirements(uuid_128 uuid, + uint8_t public_key, + uint8_t auth_methods, + uint16_t output_actions, + uint16_t input_actions, + uint8_t min_size, + uint8_t max_size); + +/***************************************************************************//** + * + * Start a key refresh procedure in the network. + * + * A key refresh procedure updates a network key and, optionally, application + * keys associated with it in all nodes of the network except for excluded + * nodes. After the refresh procedure is complete, the old keys will be + * discarded. Therefore, the excluded nodes, which did not receive new keys will + * be shut out of the network at the completion of the procedure. + * + * @param[in] netkey_index Index of the network key to update + * @param[in] num_appkeys Number of application keys to update; may be zero. + * @param[in] appkey_indices_len Length of data in @p appkey_indices + * @param[in] appkey_indices Indices of the application keys to update, + * represented as little endian two byte sequences. The array must contain + * num_appkeys indices and therefore 2*num_appkeys bytes total. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_key_refresh_node_update + * - @ref sl_btmesh_evt_prov_key_refresh_phase_update + * - @ref sl_btmesh_evt_prov_key_refresh_complete + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_start_key_refresh(uint16_t netkey_index, + uint8_t num_appkeys, + size_t appkey_indices_len, + const uint8_t* appkey_indices); + +/***************************************************************************//** + * + * Check the key refresh exclusion status of a node. Excluded nodes do not + * participate in the key refresh procedure and can therefore be shut out of the + * network. + * + * @param[in] key Network key index + * @param[in] uuid UUID of the Device + * @param[out] status Non-zero for excluded node + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_get_key_refresh_exclusion(uint16_t key, + uuid_128 uuid, + uint8_t *status); + +/***************************************************************************//** + * + * Set the key refresh exclusion status of a node. Excluded nodes do not + * participate in the key refresh procedure and can therefore be shut out of the + * network. + * + * @param[in] key Network key index + * @param[in] status Non-zero for excluded node + * @param[in] uuid UUID of the Device + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_set_key_refresh_exclusion(uint16_t key, + uint8_t status, + uuid_128 uuid); + +/***************************************************************************//** + * + * Mark the node as failed for the keyrefresh. This function should be called if + * the provisioner knows that the node has become unresponsive for some external + * reason (such as factory reset performed by the end user), and will not + * respond to key refresh messages even after a long delay. Note that if a node + * drops out of the key refresh procedure, it will not be possible to + * communicate with the node using the key that was refreshed during the key + * refresh procedure. + * + * @param[in] key Network key index + * @param[in] uuid UUID of the Device + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_set_key_refresh_failure(uint16_t key, uuid_128 uuid); + +/***************************************************************************//** + * + * Get the phase_timeout_s parameter that will be used for the start key refresh + * command. A node fails the key refresh procedure phase, if it doesnt reply to + * the provisioner during the timeout. + * + * @param[out] phase_timeout_s Value to get in seconds + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_phase_timeout_get(uint32_t *phase_timeout_s); + +/***************************************************************************//** + * + * Set the phase_timeout_s parameter that will be used for the start key refresh + * command. A node fails the key refresh procedure phase, if it doesnt reply to + * the provisioner during the timeout. Maximum allowed value is 345600 sec + * (4days). + * + * @param[in] phase_timeout_s Value to be set in seconds + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_phase_timeout_set(uint32_t phase_timeout_s); + +/***************************************************************************//** + * + * Get a Provisioner device database entry with a matching UUID. + * + * @param[in] uuid UUID of the Device to retrieve + * @param[out] device_key Device Key + * @param[out] netkey_index Index of the network key with which the node was + * initially provisioned. Used for network-level encryption of Configuration + * Client messages. + * @param[out] address Unicast address of the primary element of the node + * @param[out] elements Number of elements in the node + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_get_ddb_entry(uuid_128 uuid, + aes_key_128 *device_key, + uint16_t *netkey_index, + uint16_t *address, + uint8_t *elements); + +/***************************************************************************//** + * + * Delete the node information from the Provisioner database. Note that a + * successful result from this command only means the command has been accepted + * for processing. The status of the actual operation will be returned in the + * following event; application should not make new BGAPI requests until the + * event is received. Note also that this should be followed by a @ref + * sl_btmesh_prov_start_key_refresh updating the keys of the remaining nodes to + * make sure the deleted node is shut off from the network. + * + * @param[in] uuid UUID of the node to delete + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_delete_ddb_entry_complete + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_delete_ddb_entry(uuid_128 uuid); + +/***************************************************************************//** + * + * Add a new node entry to the Provisioner's device database. Note that a + * successful result from this command only means the command has been accepted + * for processing. The status of the actual operation will be returned in the + * following event; application should not make new BGAPI requests until the + * event is received. Note also that the device key, primary element address, + * and network key need to be deployed to the node being added to ensure it's + * configurable. See @ref sl_btmesh_node_set_provisioning_data command. + * + * @param[in] uuid UUID of the node to add + * @param[in] device_key Device key value for the node + * @param[in] netkey_index Index of the network key the node will be used for + * configuration + * @param[in] address Unicast address to allocate for the node's primary element + * @param[in] elements Number of elements the device has + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_add_ddb_entry_complete + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_add_ddb_entry(uuid_128 uuid, + aes_key_128 device_key, + uint16_t netkey_index, + uint16_t address, + uint8_t elements); + +/***************************************************************************//** + * + * List nodes known by this Provisioner. A number of @ref + * sl_btmesh_evt_prov_ddb_list events will be generated. + * + * @param[out] count Number of events that will follow + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_ddb_list + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_list_ddb_entries(uint16_t *count); + +/***************************************************************************//** + * + * Initialize the mesh network and assign the provisioner address and IV index + * for the network. If this command is not invoked prior to invoking @ref + * sl_btmesh_prov_create_network, the network will be initialized with default + * address and IV index. + * + * @param[in] address Address to assign for provisioner. + * @param[in] ivi IV index of the network. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_initialize_network(uint16_t address, uint32_t ivi); + +/***************************************************************************//** + * + * Check the application key refresh exclusion status of a node. Nodes which are + * excluded for a given application key do not receive updates for that + * particular application key, but do participate in the key refresh procedure + * as a whole. This enables the Provisioner to set up and update restricted sets + * of application keys across nodes. + * + * @param[in] netkey_index Network key index + * @param[in] appkey_index Application key index + * @param[in] uuid UUID of the Device + * @param[out] status Non-zero for excluded node + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_get_key_refresh_appkey_exclusion(uint16_t netkey_index, + uint16_t appkey_index, + uuid_128 uuid, + uint8_t *status); + +/***************************************************************************//** + * + * Set the application key refresh exclusion status of a node. Nodes which are + * excluded for a given application key do not receive updates for that + * particular application key, but do participate in the key refresh procedure + * as a whole. This enables the Provisioner to set up and update restricted sets + * of application keys across nodes. + * + * @param[in] netkey_index Network key index + * @param[in] appkey_index Application key index + * @param[in] status Non-zero for excluded node + * @param[in] uuid UUID of the device + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_set_key_refresh_appkey_exclusion(uint16_t netkey_index, + uint16_t appkey_index, + uint8_t status, + uuid_128 uuid); + +/***************************************************************************//** + * + * Stop scanning for unprovisioned device beacons. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_stop_scan_unprov_beacons(); + +/***************************************************************************//** + * + * Update a node's entry in the Provisioner's device database by setting a new + * value to the netkey_index field. The netkey_index field is used to determine + * the network key to use when encrypting and decrypting configuration model + * messages to and from the node. + * + * @param[in] uuid UUID of the node + * @param[in] netkey_index Index of the network key used in configuring the + * node. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_update_device_netkey_index(uuid_128 uuid, + uint16_t netkey_index); + +/***************************************************************************//** + * + * Suspend an ongoing key refresh procedure. + * + * Suspending a key refresh procedure means no further requests for updating + * keys or setting key refresh phase will be sent to the network by the + * Provisioner until the key refresh procedure is resumed. + * + * @param[in] netkey_index Index of the network key identifying an ongoing key + * refresh procedure + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_suspend_key_refresh(uint16_t netkey_index); + +/***************************************************************************//** + * + * Resume a suspended key refresh procedure. + * + * By resuming a suspended key refresh procedure, the Provisioner will again + * start to send requests for updating keys or setting key refresh phase to the + * network. + * + * @param[in] netkey_index Index of the network key identifying a suspended key + * refresh procedure + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_resume_key_refresh(uint16_t netkey_index); + +/***************************************************************************//** + * + * Get the key refresh phase of an ongoing key refresh procedure. + * + * @param[in] netkey_index Index of the network key identifying an ongoing key + * refresh procedure + * @param[out] phase The current key refresh phase. Values are as follows: + * - 0: Normal operation (no ongoing key refresh) + * - 1: First phase of key refresh procedure (key deployment) + * - 2: Second phase of key refresh procedure (new key activation) + * - 3: Third phase of key refresh procedure (old key deletion) + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_get_key_refresh_phase(uint16_t netkey_index, + uint8_t *phase); + +/***************************************************************************//** + * + * Start a key refresh procedure from a non-default phase. Before calling this + * function, keys to be used in the key refresh procedure should have been + * specified by calling @ref sl_btmesh_test_prov_prepare_key_refresh command. + * + * Note that this command should not normally be used. It is intended only for + * resuming an interrupted key refresh procedure on a backup Provisioner when + * the original Provisioner, that started the key refresh procedure, is no + * longer available to complete the procedure. + * + * @param[in] phase Current key refresh phase + * @param[in] netkey_index Index of the network key identifying a key refresh + * procedure + * @param[in] num_appkeys Number of application keys to update; may be zero. + * @param[in] appkey_indices_len Length of data in @p appkey_indices + * @param[in] appkey_indices Indices of the application keys to update, + * represented as little endian two byte sequences. The array must contain + * num_appkeys indices and therefore 2*num_appkeys bytes total. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_key_refresh_node_update + * - @ref sl_btmesh_evt_prov_key_refresh_phase_update + * - @ref sl_btmesh_evt_prov_key_refresh_complete + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_start_key_refresh_from_phase(uint8_t phase, + uint16_t netkey_index, + uint8_t num_appkeys, + size_t appkey_indices_len, + const uint8_t* appkey_indices); + +/***************************************************************************//** + * + * Clear the key refresh state stored in persistent storage. + * + * Note that this command should not normally be used. It is intended only for + * clearing stored key refresh state when a key refresh procedure has been + * suspended and will not be resumed, either because the network key has been + * deleted from all nodes or the responsibility for completing the key refresh + * has been moved to another Provisioner. + * + * @param[in] netkey_index Index of the network key identifying a key refresh + * procedure + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_flush_key_refresh_state(uint16_t netkey_index); + +/***************************************************************************//** + * + * Test if data in the identity beacon matches the mesh device and network. + * + * @param[in] address Mesh address of the node + * @param[in] netkey_index Network key index of the node. + * @param[in] data_len Length of data in @p data + * @param[in] data Contents of the identity beacon. + * @param[out] match - 0: Identity record did not match + * - 1: Identity record match + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_test_identity(uint16_t address, + uint16_t netkey_index, + size_t data_len, + const uint8_t* data, + uint8_t *match); + +/***************************************************************************//** + * + * Get the list of provisioning records on the device. This command can be + * issued when provisioning is suspended after the provisioning session has been + * opened, but no earlier or later. The list of provisioning records on the + * device will be delivered with the @ref + * sl_btmesh_evt_prov_provisioning_records_list event. + * + * @param[in] uuid UUID of the Device being provisioned + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_provisioning_records_list + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_get_provisioning_records_list(uuid_128 uuid); + +/***************************************************************************//** + * + * Get provisioning record data from the device. This command can be issued when + * provisioning is suspended after the provisioning session has been opened, but + * no earlier or later. The provisioning record data will be delivered with the + * @ref sl_btmesh_evt_prov_provisioning_record_data event. + * + * @param[in] uuid UUID of the Device being provisioned + * @param[in] record Provisioning record ID + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_prov_provisioning_record_data + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_get_provisioning_record_data(uuid_128 uuid, + uint16_t record); + +/***************************************************************************//** + * + * Initialize provisioning record retrieval functionality on the Provisioner. + * This must be called before trying to retrieve provisioning records list or + * individual record data. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_prov_init_provisioning_records(); + +/** @} */ // end addtogroup sl_btmesh_prov + +/** + * @addtogroup sl_btmesh_proxy Bluetooth Mesh Proxy Connections + * @{ + * + * @brief Bluetooth Mesh Proxy Connections + * + * Bluetooth mesh stack functions for GATT proxy connections + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_proxy_connect_id 0x00180028 +#define sl_btmesh_cmd_proxy_disconnect_id 0x01180028 +#define sl_btmesh_cmd_proxy_set_filter_type_id 0x02180028 +#define sl_btmesh_cmd_proxy_allow_id 0x03180028 +#define sl_btmesh_cmd_proxy_deny_id 0x04180028 +#define sl_btmesh_cmd_proxy_optimisation_toggle_id 0x05180028 +#define sl_btmesh_cmd_proxy_send_solicitation_id 0x06180028 +#define sl_btmesh_rsp_proxy_connect_id 0x00180028 +#define sl_btmesh_rsp_proxy_disconnect_id 0x01180028 +#define sl_btmesh_rsp_proxy_set_filter_type_id 0x02180028 +#define sl_btmesh_rsp_proxy_allow_id 0x03180028 +#define sl_btmesh_rsp_proxy_deny_id 0x04180028 +#define sl_btmesh_rsp_proxy_optimisation_toggle_id 0x05180028 +#define sl_btmesh_rsp_proxy_send_solicitation_id 0x06180028 + +/** + * @addtogroup sl_btmesh_evt_proxy_connected sl_btmesh_evt_proxy_connected + * @{ + * @brief Indication that a connection has been successfully formed, received as + * a response to the @ref sl_btmesh_proxy_connect command. + */ + +/** @brief Identifier of the connected event */ +#define sl_btmesh_evt_proxy_connected_id 0x001800a8 + +/***************************************************************************//** + * @brief Data structure of the connected event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_proxy_connected_s +{ + uint32_t handle; /**< Proxy handle */ +}); + +typedef struct sl_btmesh_evt_proxy_connected_s sl_btmesh_evt_proxy_connected_t; + +/** @} */ // end addtogroup sl_btmesh_evt_proxy_connected + +/** + * @addtogroup sl_btmesh_evt_proxy_disconnected sl_btmesh_evt_proxy_disconnected + * @{ + * @brief Indication that a connection has been disconnected or a connection + * attempt failed, received as a response to @ref sl_btmesh_proxy_connect or + * @ref sl_btmesh_proxy_disconnect command. + */ + +/** @brief Identifier of the disconnected event */ +#define sl_btmesh_evt_proxy_disconnected_id 0x011800a8 + +/***************************************************************************//** + * @brief Data structure of the disconnected event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_proxy_disconnected_s +{ + uint32_t handle; /**< Proxy handle */ + uint16_t reason; /**< Reason for disconnection */ +}); + +typedef struct sl_btmesh_evt_proxy_disconnected_s sl_btmesh_evt_proxy_disconnected_t; + +/** @} */ // end addtogroup sl_btmesh_evt_proxy_disconnected + +/** + * @addtogroup sl_btmesh_evt_proxy_filter_status sl_btmesh_evt_proxy_filter_status + * @{ + * @brief Proxy status report event + */ + +/** @brief Identifier of the filter_status event */ +#define sl_btmesh_evt_proxy_filter_status_id 0x021800a8 + +/***************************************************************************//** + * @brief Data structure of the filter_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_proxy_filter_status_s +{ + uint32_t handle; /**< Proxy handle */ + uint8_t type; /**< Filter type: 0x00 to allow traffic from the given + address, 0x01 to block traffic from the given address */ + uint16_t count; /**< Current filter list length */ +}); + +typedef struct sl_btmesh_evt_proxy_filter_status_s sl_btmesh_evt_proxy_filter_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_proxy_filter_status + +/***************************************************************************//** + * + * Start connecting a proxy client to a proxy server. After the connection is + * complete, a @ref sl_btmesh_evt_proxy_connected event will be generated. + * LE-connection must be opened prior to opening the proxy connection. + * + * @param[in] connection Connection handle + * @param[out] handle If a connection attempt is successfully initiated, a valid + * proxy handle will be returned. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_proxy_connected + * - @ref sl_btmesh_evt_proxy_disconnected + * + ******************************************************************************/ +sl_status_t sl_btmesh_proxy_connect(uint8_t connection, uint32_t *handle); + +/***************************************************************************//** + * + * Disconnect. This call can be used also for a connection, which is not yet + * fully formed. + * + * @param[in] handle Proxy handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_proxy_disconnected + * + ******************************************************************************/ +sl_status_t sl_btmesh_proxy_disconnect(uint32_t handle); + +/***************************************************************************//** + * + * Set up the proxy filtering type. At the proxy server side, this is a local + * configuration, while on the proxy client a proxy configuration PDU will be + * sent to the proxy server. + * + * @param[in] handle Proxy handle + * @param[in] netkey_index Network key index used in encrypting the request to + * the proxy server + * @param[in] type Filter type: 0x00 to allow traffic from the given address, + * 0x01 to block traffic from the given address + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_proxy_set_filter_type(uint32_t handle, + uint16_t netkey_index, + uint8_t type); + +/***************************************************************************//** + * + * Allow messages meant for the given address to be forwarded over the proxy + * connection to the proxy client. At the proxy server side, this is a local + * configuration, while on the proxy client a proxy configuration PDU will be + * sent to the proxy server. + * + * @param[in] handle Proxy handle + * @param[in] netkey_index Network key index used in encrypting the request to + * the proxy server + * @param[in] address Destination address to allow. The address may be either a + * unicast address, a group address, or a virtual address. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_proxy_allow(uint32_t handle, + uint16_t netkey_index, + uint16_t address); + +/***************************************************************************//** + * + * Block messages meant for the given address from being forwarded over the + * proxy connection to the proxy client. At the proxy server side, this is a + * local configuration, while on the proxy client a proxy configuration PDU will + * be sent to the proxy server. + * + * @param[in] handle Proxy handle + * @param[in] netkey_index Network key index used in encrypting the request to + * the proxy server + * @param[in] address Destination address to block. The address may be either a + * unicast address, a group address, or a virtual address. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_proxy_deny(uint32_t handle, + uint16_t netkey_index, + uint16_t address); + +/***************************************************************************//** + * + * In case of unicast address, if proxy identified the destination, the message + * will be forwarded only to that node, otherwise to all. This functionality + * could be enabled or disabled with this function. + * + * @param[in] enable Non zero - enable, otherwise disable + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_proxy_optimisation_toggle(uint8_t enable); + +/***************************************************************************//** + * + * Send Solicitation PDU to activate a Private Proxy on a node that support + * On-Demand Private Proxy. + * + * @param[in] enc_netkey_index Network key index used to encrypt the message + * @param[in] elem_index Solicitation source element index. Proxy client may use + * the primary address of any of the secondary addresses as a solicitation + * source + * @param[in] dst Solicitation destination address. Solicitation does not have a + * subscribe mechanism, the address can be the primary or any of the secondary + * addresses. In addition, 0xFFFC (All Proxies) is permitted + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_proxy_send_solicitation(uint8_t enc_netkey_index, + uint16_t elem_index, + uint16_t dst); + +/** @} */ // end addtogroup sl_btmesh_proxy + +/** + * @addtogroup sl_btmesh_silabs_config_client Bluetooth Mesh Silabs Configuration Client Vendor Model + * @{ + * + * @brief Bluetooth Mesh Silabs Configuration Client Vendor Model + * + * Silicon Labs Configuration Client vendor model. It is used to configure + * global and per-model specific settings of nodes such as Tx-PHY for long + * packets, usage of advertising extensions (AE) on per-model basis. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_silabs_config_client_init_id 0x00010028 +#define sl_btmesh_cmd_silabs_config_client_set_tx_id 0x01010028 +#define sl_btmesh_cmd_silabs_config_client_get_tx_id 0x02010028 +#define sl_btmesh_cmd_silabs_config_client_set_model_enable_id 0x03010028 +#define sl_btmesh_cmd_silabs_config_client_get_model_enable_id 0x04010028 +#define sl_btmesh_cmd_silabs_config_client_set_network_pdu_id 0x05010028 +#define sl_btmesh_cmd_silabs_config_client_get_network_pdu_id 0x06010028 +#define sl_btmesh_cmd_silabs_config_client_deinit_id 0x07010028 +#define sl_btmesh_rsp_silabs_config_client_init_id 0x00010028 +#define sl_btmesh_rsp_silabs_config_client_set_tx_id 0x01010028 +#define sl_btmesh_rsp_silabs_config_client_get_tx_id 0x02010028 +#define sl_btmesh_rsp_silabs_config_client_set_model_enable_id 0x03010028 +#define sl_btmesh_rsp_silabs_config_client_get_model_enable_id 0x04010028 +#define sl_btmesh_rsp_silabs_config_client_set_network_pdu_id 0x05010028 +#define sl_btmesh_rsp_silabs_config_client_get_network_pdu_id 0x06010028 +#define sl_btmesh_rsp_silabs_config_client_deinit_id 0x07010028 + +/** + * @brief The Silabs Configuration Client Status codes. + */ +typedef enum +{ + sl_btmesh_silabs_config_client_status_success = 0x0, /**< (0x0) The + Client + message + was + successfully + processed + by the + Server. */ + sl_btmesh_silabs_config_client_status_unknown_cmd = 0x1, /**< (0x1) The + command + was not + understood + by the + Server. */ + sl_btmesh_silabs_config_client_status_invalid_parameter = 0x2, /**< (0x2) A + parameter + in the + Client + message is + outside of + its valid + range. */ + sl_btmesh_silabs_config_client_status_does_not_exist = 0x3 /**< (0x3) + Resource + specifed + by the + Client + message + does not + exist. */ +} sl_btmesh_silabs_config_client_status_t; + +/** + * @addtogroup sl_btmesh_evt_silabs_config_client_tx_status sl_btmesh_evt_silabs_config_client_tx_status + * @{ + * @brief Node specific TX configuration state + * + * Received as a response to the @ref sl_btmesh_silabs_config_client_set_tx and + * @ref sl_btmesh_silabs_config_client_get_tx command. + */ + +/** @brief Identifier of the tx_status event */ +#define sl_btmesh_evt_silabs_config_client_tx_status_id 0x010100a8 + +/***************************************************************************//** + * @brief Data structure of the tx_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_silabs_config_client_tx_status_s +{ + uint16_t server; /**< Server address. */ + uint8_t status; /**< Enum @ref + sl_btmesh_silabs_config_client_status_t. + Status code from the Server. */ + uint8_t tx_phy; /**< TX PHY for long packets (packets that would + be segmented). + - 1: LE 1M PHY + - 2: LE 2M PHY */ + uint32_t tx_options_bitmap; /**< TX options. NOTE: Currently not used: + reserved for future use. */ +}); + +typedef struct sl_btmesh_evt_silabs_config_client_tx_status_s sl_btmesh_evt_silabs_config_client_tx_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_silabs_config_client_tx_status + +/** + * @addtogroup sl_btmesh_evt_silabs_config_client_model_status sl_btmesh_evt_silabs_config_client_model_status + * @{ + * @brief TX over AE on per-model basis enable/disable state + * + * Received as a response to the @ref + * sl_btmesh_silabs_config_client_set_model_enable and @ref + * sl_btmesh_silabs_config_client_get_model_enable command. + */ + +/** @brief Identifier of the model_status event */ +#define sl_btmesh_evt_silabs_config_client_model_status_id 0x020100a8 + +/***************************************************************************//** + * @brief Data structure of the model_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_silabs_config_client_model_status_s +{ + uint16_t server; /**< Server address. */ + uint8_t status; /**< Enum @ref sl_btmesh_silabs_config_client_status_t. + Status code from the Server. */ + uint8_t elem_index; /**< Element index of model to configure. */ + uint16_t vendor_id; /**< Vendor ID of model to configure. */ + uint16_t model_id; /**< Model ID of model to configure. */ + uint16_t value; /**< Extended packet size to set, currently 1 to use + extended 0 to not */ +}); + +typedef struct sl_btmesh_evt_silabs_config_client_model_status_s sl_btmesh_evt_silabs_config_client_model_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_silabs_config_client_model_status + +/** + * @addtogroup sl_btmesh_evt_silabs_config_client_network_pdu_status sl_btmesh_evt_silabs_config_client_network_pdu_status + * @{ + * @brief Node specific Network PDU configuration state + * + * Received as a response to the @ref + * sl_btmesh_silabs_config_client_set_network_pdu and @ref + * sl_btmesh_silabs_config_client_get_network_pdu command. + */ + +/** @brief Identifier of the network_pdu_status event */ +#define sl_btmesh_evt_silabs_config_client_network_pdu_status_id 0x030100a8 + +/***************************************************************************//** + * @brief Data structure of the network_pdu_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_silabs_config_client_network_pdu_status_s +{ + uint16_t server; /**< Server address. */ + uint8_t status; /**< Enum @ref sl_btmesh_silabs_config_client_status_t. + Status code from the Server. */ + uint16_t pdu_max_size; /**< Network PDU max size */ +}); + +typedef struct sl_btmesh_evt_silabs_config_client_network_pdu_status_s sl_btmesh_evt_silabs_config_client_network_pdu_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_silabs_config_client_network_pdu_status + +/***************************************************************************//** + * + * Initialize Silabs Configuration client model. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_client_init(); + +/***************************************************************************//** + * + * Set node specific TX configuration. + * + * @param[in] server_address Destination address of the message. It can be a + * unicast address, a group address, or a virtual address. + * @param[in] appkey_index The application key index used + * @param[in] tx_phy TX PHY for long packets (packets that would be segmented). + * - 1: LE 1M PHY + * - 2: LE 2M PHY + * @param[in] tx_options_bitmap TX options. NOTE: Currently not used: reserved + * for future use, set as 0. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_silabs_config_client_tx_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_client_set_tx(uint16_t server_address, + uint16_t appkey_index, + uint8_t tx_phy, + uint32_t tx_options_bitmap); + +/***************************************************************************//** + * + * Get node specific TX configuration. + * + * @param[in] server_address Destination address of the message. It can be a + * unicast address, a group address, or a virtual address. + * @param[in] appkey_index The application key index used + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_silabs_config_client_tx_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_client_get_tx(uint16_t server_address, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Set TX over AE on per-model basis enable/disable state. + * + * @param[in] server_address Destination address of the message. It can be a + * unicast address, a group address, or a virtual address. + * @param[in] appkey_index The application key index used + * @param[in] elem_index The index of the server target element, 0 is the + * primary element. + * @param[in] vendor_id Vendor ID of the model to configure. + * @param[in] model_id Model ID of the server target. + * @param[in] enable Non zero - enable, otherwise disable + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_silabs_config_client_model_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_client_set_model_enable(uint16_t server_address, + uint16_t appkey_index, + uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t enable); + +/***************************************************************************//** + * + * Get TX over AE on per-model basis enable/disable state. + * + * @param[in] server_address Destination address of the message. It can be a + * unicast address, a group address, or a virtual address. + * @param[in] appkey_index The application key index used + * @param[in] elem_index The index of the server target element, 0 is the + * primary element. + * @param[in] vendor_id Vendor ID of the model to configure. + * @param[in] model_id Model ID of the server target. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_silabs_config_client_model_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_client_get_model_enable(uint16_t server_address, + uint16_t appkey_index, + uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id); + +/***************************************************************************//** + * + * Set network PDU state. + * + * @param[in] server_address Destination address of the message. It can be a + * unicast address, a group address, or a virtual address. + * @param[in] appkey_index The application key index used + * @param[in] pdu_max_size Network PDU max size. Valid range: 29 - 398. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_silabs_config_client_network_pdu_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_client_set_network_pdu(uint16_t server_address, + uint16_t appkey_index, + uint16_t pdu_max_size); + +/***************************************************************************//** + * + * Get network PDU state. + * + * @param[in] server_address Destination address of the message. It can be a + * unicast address, a group address, or a virtual address. + * @param[in] appkey_index The application key index used + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_silabs_config_client_network_pdu_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_client_get_network_pdu(uint16_t server_address, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Deinitialize Silabs Configuration Client model. After this call, the model + * cannot be used until it is initialized again. See @ref + * sl_btmesh_silabs_config_client_init. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_client_deinit(); + +/** @} */ // end addtogroup sl_btmesh_silabs_config_client + +/** + * @addtogroup sl_btmesh_vendor_model Bluetooth Mesh Vendor Model + * @{ + * + * @brief Bluetooth Mesh Vendor Model + * + * Vendor model API provides functionality to send and receive vendor-specific + * messages. + * + * Throughout the API, the manipulated model is identified by its element + * address, vendor ID, and model ID. + * + * The API has functions for sending, receiving, and publishing messages. The + * application has to implement additional complex functionality (state machines + * or other model-specific logic). + * + * The stack will handle Mesh transaction layer segmentation and reassembly + * automatically if the messages sent are long enough to require it. + * + * Note that as the application layer overhead for vendor messages is three + * bytes (vendor ID and opcode) and the access layer MIC is at least four bytes, + * the longest vendor application payload which can be sent using an unsegmented + * transport layer PDU is eight bytes. On the other hand, the longest vendor + * application payload which can be sent using transport layer segmentation is + * 377 bytes (fragmented into 32 segments). + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_vendor_model_send_id 0x00190028 +#define sl_btmesh_cmd_vendor_model_set_publication_id 0x01190028 +#define sl_btmesh_cmd_vendor_model_clear_publication_id 0x02190028 +#define sl_btmesh_cmd_vendor_model_publish_id 0x03190028 +#define sl_btmesh_cmd_vendor_model_init_id 0x04190028 +#define sl_btmesh_cmd_vendor_model_deinit_id 0x05190028 +#define sl_btmesh_cmd_vendor_model_send_tracked_id 0x06190028 +#define sl_btmesh_cmd_vendor_model_set_publication_tracked_id 0x07190028 +#define sl_btmesh_rsp_vendor_model_send_id 0x00190028 +#define sl_btmesh_rsp_vendor_model_set_publication_id 0x01190028 +#define sl_btmesh_rsp_vendor_model_clear_publication_id 0x02190028 +#define sl_btmesh_rsp_vendor_model_publish_id 0x03190028 +#define sl_btmesh_rsp_vendor_model_init_id 0x04190028 +#define sl_btmesh_rsp_vendor_model_deinit_id 0x05190028 +#define sl_btmesh_rsp_vendor_model_send_tracked_id 0x06190028 +#define sl_btmesh_rsp_vendor_model_set_publication_tracked_id 0x07190028 + +/** + * @addtogroup sl_btmesh_evt_vendor_model_receive sl_btmesh_evt_vendor_model_receive + * @{ + * @brief Vendor model message reception event + * + * Stack generates this event when a vendor message with a valid opcode is + * received. + * + * Note that because of the bgapi event length restrictions, the message may be + * fragmented into several events. If this is the case, the events will be + * generated by the stack in the correct order and the last event will be marked + * with the final flag set to a non-zero value. The application has to + * concatenate the messages into a single buffer if necessary. + */ + +/** @brief Identifier of the receive event */ +#define sl_btmesh_evt_vendor_model_receive_id 0x001900a8 + +/***************************************************************************//** + * @brief Data structure of the receive event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_vendor_model_receive_s +{ + uint16_t destination_address; /**< Address the message was sent to. It can + be either the model element's unicast + address or a subscription address of the + model */ + uint16_t elem_index; /**< Receiving model element index */ + uint16_t vendor_id; /**< Vendor ID of the receiving model */ + uint16_t model_id; /**< Model ID of the receiving model */ + uint16_t source_address; /**< Unicast address of the model which sent + the message */ + int8_t va_index; /**< Index of the destination Label UUID + (valid only is the destination address is + a virtual addres) */ + uint16_t appkey_index; /**< The application key index used */ + uint8_t nonrelayed; /**< If non-zero, indicates that the received + message was not relayed (TTL was zero), + which means that the devices are within + direct radio range of each other. */ + uint8_t message_flags; /**< Unsigned 8-bit integer */ + uint8_t opcode; /**< Message opcode */ + uint8_t final; /**< Indicates whether this payload chunk is + the final one of the message or whether + more will follow */ + uint8array payload; /**< Payload data (either complete or partial; + see final parameter) */ +}); + +typedef struct sl_btmesh_evt_vendor_model_receive_s sl_btmesh_evt_vendor_model_receive_t; + +/** @} */ // end addtogroup sl_btmesh_evt_vendor_model_receive + +/** + * @addtogroup sl_btmesh_evt_vendor_model_send_complete sl_btmesh_evt_vendor_model_send_complete + * @{ + * @brief Vendor model message send complete event + * + * Stack generates this event when a vendor message has been sent or published, + * either successfully or unsuccessfully. + * + * The time this event is generated depends on the message being sent or + * published. For an unsegmented message the event is generated immediately + * after the network PDU is sent out, while for a segmented message the event is + * generated once the segmented message transmission state machine completes. + */ + +/** @brief Identifier of the send_complete event */ +#define sl_btmesh_evt_vendor_model_send_complete_id 0x011900a8 + +/***************************************************************************//** + * @brief Data structure of the send_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_vendor_model_send_complete_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint16_t handle; /**< Tracking handle for the message sending attempt + as reported by @ref + sl_btmesh_vendor_model_send_tracked or @ref + sl_btmesh_vendor_model_set_publication_tracked + command responses. */ + uint8_t message_flags; /**< Unsigned 8-bit integer */ +}); + +typedef struct sl_btmesh_evt_vendor_model_send_complete_s sl_btmesh_evt_vendor_model_send_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_vendor_model_send_complete + +/***************************************************************************//** + * + * Send vendor-specific data. + * + * Note that, because of the bgapi event length restrictions, the message sent + * may need to be fragmented into several commands. If this is the case, the + * application must issue the commands in the correct order and mark the command + * carrying the last message fragment with the final flag set to a non-zero + * value. The stack will not start sending the message until the complete + * message is provided by the application. Fragments from multiple messages must + * not be interleaved. + * + * @param[in] destination_address Destination address of the message. It can be + * a unicast address, a group address, or a virtual address. + * @param[in] va_index Index of the destination Label UUID (used only is the + * destination address is a virtual address) + * @param[in] appkey_index The application key index used + * @param[in] elem_index Sending model element index + * @param[in] vendor_id Vendor ID of the sending model + * @param[in] model_id Model ID of the sending model + * @param[in] nonrelayed If the message is a response to a received message, set + * this parameter according to what was received in the receive event. + * Otherwise, set to non-zero if the message affects only devices in the + * immediate radio neighborhood. + * @param[in] opcode Message opcode + * @param[in] final Indicates whether this payload chunk is the final one of the + * message or whether more will follow. + * @param[in] payload_len Length of data in @p payload + * @param[in] payload Payload data (either complete or partial; see final + * parameter). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_vendor_model_send(uint16_t destination_address, + int8_t va_index, + uint16_t appkey_index, + uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t nonrelayed, + uint8_t opcode, + uint8_t final, + size_t payload_len, + const uint8_t* payload); + +/***************************************************************************//** + * + * Set the vendor model publication message. + * + * The model publication message will be sent out when the model publication + * occurs either periodically (if the model is configured for periodic + * publishing) or explicitly (see @ref sl_btmesh_vendor_model_publish. + * + * Note that, because of bgapi length requirements, the message may need to be + * fragmented over multiple commands. If this is the case, the application must + * issue the commands in the correct order and mark the command carrying the + * last message fragment with the final flag set to a non-zero value. The stack + * will not assign the message to the model until the complete message is + * provided by the application. + * + * To disable publication, the publication message may be erased using the @ref + * sl_btmesh_vendor_model_clear_publication command. + * + * @param[in] elem_index Publishing model element index + * @param[in] vendor_id Vendor ID of the model + * @param[in] model_id Model ID of the model + * @param[in] opcode Message opcode + * @param[in] final Indicates whether this payload chunk is the final one of the + * message or whether more will follow. + * @param[in] payload_len Length of data in @p payload + * @param[in] payload Payload data (either complete or partial; see final + * parameter). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_vendor_model_set_publication(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t opcode, + uint8_t final, + size_t payload_len, + const uint8_t* payload); + +/***************************************************************************//** + * + * Clear the vendor model publication message. + * + * Clearing the model publication message disables model publishing, which can + * be re-enabled by defining the publication message using the @ref + * sl_btmesh_vendor_model_set_publication command. + * + * @param[in] elem_index Publishing model element index + * @param[in] vendor_id Vendor ID of the model + * @param[in] model_id Model ID of the model + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_vendor_model_clear_publication(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id); + +/***************************************************************************//** + * + * Publish the vendor model publication message. + * + * Sends the stored publication message to the network using the application key + * and destination address stored in the model publication parameters. + * + * @param[in] elem_index Publishing model element index + * @param[in] vendor_id Vendor ID of the model + * @param[in] model_id Model ID of the model + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_vendor_model_publish(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id); + +/***************************************************************************//** + * + * Initialize the vendor model. This function has to be called before the model + * can be used. Note that the model can be deinitialized if it is no longer + * needed. See @ref sl_btmesh_vendor_model_deinit. + * + * Opcodes that the model is able to receive at initialization must be defined. + * This enables the stack to pass only valid messages up to the model during + * runtime. Per Mesh specification there are up to 64 opcodes per vendor, + * ranging from 0 to 63. Specifying opcodes outside of that range will result in + * an error response. Duplicate opcodes in the array do not result in an error, + * but will of course be recorded only once. + * + * @param[in] elem_index Model element index + * @param[in] vendor_id Vendor ID of the model + * @param[in] model_id Model ID of the model + * @param[in] publish Indicates if the model is a publish model (non-zero) or + * not (zero). + * @param[in] opcodes_len Length of data in @p opcodes + * @param[in] opcodes Array of opcodes the model can handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_vendor_model_init(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t publish, + size_t opcodes_len, + const uint8_t* opcodes); + +/***************************************************************************//** + * + * Deinitialize the model. After this call, the model cannot be used until it is + * initialized again. See @ref sl_btmesh_vendor_model_init. + * + * @param[in] elem_index Model element index + * @param[in] vendor_id Vendor ID of the model + * @param[in] model_id Model ID of the model + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_vendor_model_deinit(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id); + +/***************************************************************************//** + * + * Send vendor-specific data with a delivery report. + * + * This command works otherwise as @ref sl_btmesh_vendor_model_send but also + * provides a tracking handle if there is no immediate local error. Once the + * message sending completes a @ref sl_btmesh_evt_vendor_model_send_complete + * event is generated, and the handle received here can be used to correlate the + * event to the sent message. + * + * @param[in] destination_address Destination address of the message. It can be + * a unicast address, a group address, or a virtual address. + * @param[in] va_index Index of the destination Label UUID (used only is the + * destination address is a virtual address) + * @param[in] appkey_index The application key index used + * @param[in] elem_index Sending model element index + * @param[in] vendor_id Vendor ID of the sending model + * @param[in] model_id Model ID of the sending model + * @param[in] nonrelayed If the message is a response to a received message, set + * this parameter according to what was received in the receive event. + * Otherwise, set to non-zero if the message affects only devices in the + * immediate radio neighborhood. + * @param[in] segment If nonzero, instruct the stack to use transport layer + * segmentation, even if the data would be short enough to send as an + * unsegmented message. If zero, stack selects automatically based on data + * length whether to use segmentation or not. + * @param[in] opcode Message opcode + * @param[in] final Indicates whether this payload chunk is the final one of the + * message or whether more will follow. + * @param[in] payload_len Length of data in @p payload + * @param[in] payload Payload data (either complete or partial; see final + * parameter). + * @param[out] handle Tracking handle for the message sending. Note that a valid + * handle is returned only when the final payload fragment is received by the + * stack (as indicated by the final parameter of this message) and the message + * is accepted for delivery (as indicated by the result code). Otherwise the + * value of this parameter should be ignored. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_vendor_model_send_tracked(uint16_t destination_address, + int8_t va_index, + uint16_t appkey_index, + uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t nonrelayed, + uint8_t segment, + uint8_t opcode, + uint8_t final, + size_t payload_len, + const uint8_t* payload, + uint16_t *handle); + +/***************************************************************************//** + * + * Set the vendor model publication message with a delivery report. + * + * This command works otherwise as @ref sl_btmesh_vendor_model_set_publication + * but also sets up a tracking handle for monitoring message delivery. When the + * message publishing completes a @ref sl_btmesh_evt_vendor_model_send_complete + * event is generated, and the handle received here can be used to correlate the + * event to the sent message. + * + * Note that the same tracking handle will be reported multiple times in case of + * periodic publication or publication retransmissions. + * + * @param[in] elem_index Publishing model element index + * @param[in] vendor_id Vendor ID of the model + * @param[in] model_id Model ID of the model + * @param[in] segment If nonzero, instruct the stack to use transport layer + * segmentation, even if the data would be short enough to publish as an + * unsegmented message. If zero, stack selects automatically based on data + * length whether to use segmentation or not. + * @param[in] opcode Message opcode + * @param[in] final Indicates whether this payload chunk is the final one of the + * message or whether more will follow. + * @param[in] payload_len Length of data in @p payload + * @param[in] payload Payload data (either complete or partial; see final + * parameter). + * @param[out] handle Tracking handle for the message publishing. Note that a + * valid handle is returned only when the final payload fragment is received + * by the stack (as indicated by the final parameter of this message) and the + * message is accepted for publication (as indicated by the result code). + * Otherwise the value of this parameter should be ignored. attempt + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_vendor_model_set_publication_tracked(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t segment, + uint8_t opcode, + uint8_t final, + size_t payload_len, + const uint8_t* payload, + uint16_t *handle); + +/** @} */ // end addtogroup sl_btmesh_vendor_model + +/** + * @addtogroup sl_btmesh_health_client Bluetooth Mesh Health Client Model + * @{ + * + * @brief Bluetooth Mesh Health Client Model + * + * This class provides the commands and messages to interface with the Health + * Client model. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_health_client_init_id 0x071a0028 +#define sl_btmesh_cmd_health_client_deinit_id 0x081a0028 +#define sl_btmesh_cmd_health_client_get_id 0x001a0028 +#define sl_btmesh_cmd_health_client_clear_id 0x011a0028 +#define sl_btmesh_cmd_health_client_test_id 0x021a0028 +#define sl_btmesh_cmd_health_client_get_period_id 0x031a0028 +#define sl_btmesh_cmd_health_client_set_period_id 0x041a0028 +#define sl_btmesh_cmd_health_client_get_attention_id 0x051a0028 +#define sl_btmesh_cmd_health_client_set_attention_id 0x061a0028 +#define sl_btmesh_rsp_health_client_init_id 0x071a0028 +#define sl_btmesh_rsp_health_client_deinit_id 0x081a0028 +#define sl_btmesh_rsp_health_client_get_id 0x001a0028 +#define sl_btmesh_rsp_health_client_clear_id 0x011a0028 +#define sl_btmesh_rsp_health_client_test_id 0x021a0028 +#define sl_btmesh_rsp_health_client_get_period_id 0x031a0028 +#define sl_btmesh_rsp_health_client_set_period_id 0x041a0028 +#define sl_btmesh_rsp_health_client_get_attention_id 0x051a0028 +#define sl_btmesh_rsp_health_client_set_attention_id 0x061a0028 + +/** + * @addtogroup sl_btmesh_evt_health_client_server_status sl_btmesh_evt_health_client_server_status + * @{ + * @brief Receiving a Health Server fault status message generates this event + * + * The Client model may receive a status message because: + * - it made a @ref sl_btmesh_health_client_get to which a Server model + * responded + * - it made a @ref sl_btmesh_health_client_clear to which a Server model + * responded + * - it made a @ref sl_btmesh_health_client_test to which a Server model + * responded + */ + +/** @brief Identifier of the server_status event */ +#define sl_btmesh_evt_health_client_server_status_id 0x001a00a8 + +/***************************************************************************//** + * @brief Data structure of the server_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_health_client_server_status_s +{ + uint16_t client_address; /**< Destination address the message was sent to */ + uint16_t elem_index; /**< Client model element index. Identifies the + client model which received the status + message. */ + uint16_t server_address; /**< Address of the Server model which sent the + message */ + uint16_t result; /**< Response status. If an error occurs (e.g., + request timeout), the parameters other than + element index, client address, and server + address are to be ignored. */ + uint8_t current; /**< Whether the event lists current fault array or + registered fault array */ + uint8_t test_id; /**< Test ID */ + uint16_t vendor_id; /**< Bluetooth vendor ID used in the request */ + uint8array faults; /**< Fault array. See the Bluetooth Mesh Profile + specification for a list of defined fault IDs. */ +}); + +typedef struct sl_btmesh_evt_health_client_server_status_s sl_btmesh_evt_health_client_server_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_health_client_server_status + +/** + * @addtogroup sl_btmesh_evt_health_client_server_status_period sl_btmesh_evt_health_client_server_status_period + * @{ + * @brief Receiving a Health Server period status message generates this event + * + * The Client model may receive a status message because: + * - it made a @ref sl_btmesh_health_client_get_period to which a Server model + * responded + * - it made a @ref sl_btmesh_health_client_set_period to which a Server model + * responded + */ + +/** @brief Identifier of the server_status_period event */ +#define sl_btmesh_evt_health_client_server_status_period_id 0x011a00a8 + +/***************************************************************************//** + * @brief Data structure of the server_status_period event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_health_client_server_status_period_s +{ + uint16_t client_address; /**< Destination address the message was sent to */ + uint16_t elem_index; /**< Client model element index. Identifies the + client model, which received the status message. */ + uint16_t server_address; /**< Address of the Server model which sent the + message */ + uint16_t result; /**< Response status. If an error occurs (e.g., + request timeout), ignore the parameters other + than element index, client address, and server + address. */ + uint8_t period; /**< Health period divisor value */ +}); + +typedef struct sl_btmesh_evt_health_client_server_status_period_s sl_btmesh_evt_health_client_server_status_period_t; + +/** @} */ // end addtogroup sl_btmesh_evt_health_client_server_status_period + +/** + * @addtogroup sl_btmesh_evt_health_client_server_status_attention sl_btmesh_evt_health_client_server_status_attention + * @{ + * @brief Receiving a Health Server attention status message generates this + * event + * + * The Client model may receive a status message because: + * - it made a @ref sl_btmesh_health_client_get_attention to which a Server + * model responded + * - it made a @ref sl_btmesh_health_client_set_attention to which a Server + * model responded + */ + +/** @brief Identifier of the server_status_attention event */ +#define sl_btmesh_evt_health_client_server_status_attention_id 0x021a00a8 + +/***************************************************************************//** + * @brief Data structure of the server_status_attention event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_health_client_server_status_attention_s +{ + uint16_t client_address; /**< Destination address the message was sent to */ + uint16_t elem_index; /**< Client model element index. Identifies the + client model which received the status message. */ + uint16_t server_address; /**< Address of the Server model which sent the + message */ + uint16_t result; /**< Response status. If an error occurs (e.g., + request timeout), ignore the parameters other + than element index, client address, and server + address. */ + uint8_t attention_sec; /**< Current attention timer value in seconds */ +}); + +typedef struct sl_btmesh_evt_health_client_server_status_attention_s sl_btmesh_evt_health_client_server_status_attention_t; + +/** @} */ // end addtogroup sl_btmesh_evt_health_client_server_status_attention + +/***************************************************************************//** + * + * Initialize health client. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_client_init(); + +/***************************************************************************//** + * + * Deinitialize health client. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_client_deinit(); + +/***************************************************************************//** + * + * Get the registered fault status of a Health Server model or models in the + * network. + * + * Besides the immediate result code, the response or responses (if the + * destination server address is a group address) from the network will generate + * @ref sl_btmesh_evt_health_client_server_status. + * + * @param[in] server_address Destination server model address. May be a unicast + * address or a group address. + * @param[in] elem_index Client model element index. Identifies the client model + * used for sending the request. + * @param[in] appkey_index The application key index to use in encrypting the + * request + * @param[in] vendor_id Bluetooth vendor ID used in the request + * + * @return If an error occurs locally, (for instance, because of invalid + * parameters) an errorcode parameter is returned immediately. + * + * @b Events + * - @ref sl_btmesh_evt_health_client_server_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_client_get(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id); + +/***************************************************************************//** + * + * Clear the fault status of a Health Server model or models in the network. + * + * Besides the immediate result code, the response or responses (if the + * destination server address is a group address) from the network will generate + * @ref sl_btmesh_evt_health_client_server_status. + * + * @param[in] server_address Destination server model address. May be a unicast + * address or a group address. + * @param[in] elem_index Client model element index. Identifies the client model + * used for sending the request. + * @param[in] appkey_index The application key index to use in encrypting the + * request + * @param[in] vendor_id Bluetooth vendor ID used in the request + * @param[in] reliable If non-zero, a reliable model message is used. + * + * @return If an error occurs locally (for instance, because of invalid + * parameters), an errorcode parameter is returned immediately. + * + * @b Events + * - @ref sl_btmesh_evt_health_client_server_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_client_clear(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id, + uint8_t reliable); + +/***************************************************************************//** + * + * Execute a self test on a server model or models in the network. + * + * @param[in] server_address Destination server model address. May be a unicast + * address or a group address. + * @param[in] elem_index Client model element index. Identifies the client model + * used for sending the request. + * @param[in] appkey_index The application key index to use in encrypting the + * request + * @param[in] test_id Test ID used in the request + * @param[in] vendor_id Bluetooth vendor ID used in the request + * @param[in] reliable If non-zero, a reliable model message is used. + * + * @return If an error occurs locally (for instance, because of invalid + * parameters) an errorcode parameter is returned immediately. + * + * @b Events + * - @ref sl_btmesh_evt_health_client_server_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_client_test(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t test_id, + uint16_t vendor_id, + uint8_t reliable); + +/***************************************************************************//** + * + * Get the health period log of a Health Server model or models in the network. + * + * Except for the immediate result code, the response or responses (if the + * destination server address is a group address) from the network will generate + * @ref sl_btmesh_evt_health_client_server_status_period. + * + * @param[in] server_address Destination server model address, which may be a + * unicast address or a group address + * @param[in] elem_index Client model element index. Identifies the client model + * used for sending the request. + * @param[in] appkey_index The application key index to use in encrypting the + * request + * + * @return If an error occurs locally, (for instance, because of invalid + * parameters) an errorcode parameter is returned immediately. + * + * @b Events + * - @ref sl_btmesh_evt_health_client_server_status_period + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_client_get_period(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Set the health period divisor of a Health Server model or models in the + * network. + * + * Except for the immediate result code, the response or responses (if the + * destination server address is a group address) from the network will generate + * @ref sl_btmesh_evt_health_client_server_status_period. + * + * @param[in] server_address Destination server model address. May be a unicast + * address or a group address. + * @param[in] elem_index Client model element index, which identifies the client + * model used for sending the request. + * @param[in] appkey_index The application key index to use in encrypting the + * request + * @param[in] period Health period divisor value. Valid range: 0 - 16. + * @param[in] reliable If non-zero, a reliable model message is used. + * + * @return If an error occurs locally (for instance, because of invalid + * parameters), an errorcode parameter is returned immediately. + * + * @b Events + * - @ref sl_btmesh_evt_health_client_server_status_period + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_client_set_period(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t period, + uint8_t reliable); + +/***************************************************************************//** + * + * Get the attention timer value of a Health Server model or models in the + * network. + * + * Besides the immediate result code, the response or responses (if the + * destination server address is a group address) from the network will generate + * @ref sl_btmesh_evt_health_client_server_status_attention. + * + * @param[in] server_address Destination server model address. May be a unicast + * address or a group address. + * @param[in] elem_index Client model element index. Identifies the client model + * used for sending the request. + * @param[in] appkey_index The application key index to use in encrypting the + * request + * + * @return If an error occurs locally (for instance, because of invalid + * parameters), an errorcode parameter is returned immediately. + * + * @b Events + * - @ref sl_btmesh_evt_health_client_server_status_attention + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_client_get_attention(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Set the attention timer value of a Health Server model or models in the + * network. + * + * Except for the immediate result code, the response or responses (if the + * destination server address is a group address) from the network will generate + * @ref sl_btmesh_evt_health_client_server_status_attention. + * + * @param[in] server_address Destination server model address. May be a unicast + * address or a group address. + * @param[in] elem_index Client model element index. Identifies the client model + * used for sending the request. + * @param[in] appkey_index The application key index to use in encrypting the + * request + * @param[in] attention_sec Attention timer period in seconds + * @param[in] reliable If non-zero, a reliable model message is used. + * + * @return If an error occurs locally (for instance, because of invalid + * parameters), an errorcode parameter is returned immediately. + * + * @b Events + * - @ref sl_btmesh_evt_health_client_server_status_attention + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_client_set_attention(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t attention_sec, + uint8_t reliable); + +/** @} */ // end addtogroup sl_btmesh_health_client + +/** + * @addtogroup sl_btmesh_health_server Bluetooth Mesh Health Server Model + * @{ + * + * @brief Bluetooth Mesh Health Server Model + * + * This class provides the commands and messages to interface with the Health + * Server model + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_health_server_set_fault_id 0x001b0028 +#define sl_btmesh_cmd_health_server_clear_fault_id 0x011b0028 +#define sl_btmesh_cmd_health_server_send_test_response_id 0x021b0028 +#define sl_btmesh_rsp_health_server_set_fault_id 0x001b0028 +#define sl_btmesh_rsp_health_server_clear_fault_id 0x011b0028 +#define sl_btmesh_rsp_health_server_send_test_response_id 0x021b0028 + +/** + * @addtogroup sl_btmesh_evt_health_server_attention sl_btmesh_evt_health_server_attention + * @{ + * @brief + * + * The attention timer on an element is set to a given value. This may happen, + * for instance, during provisioning. The application should use suitable means + * to get the user's attention, e.g., by vibrating or blinking an LED. + */ + +/** @brief Identifier of the attention event */ +#define sl_btmesh_evt_health_server_attention_id 0x001b00a8 + +/***************************************************************************//** + * @brief Data structure of the attention event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_health_server_attention_s +{ + uint16_t elem_index; /**< Index of the element for which attention timer was + set */ + uint8_t timer_sec; /**< Timer value in seconds. If zero, user attention is + no longer required. */ +}); + +typedef struct sl_btmesh_evt_health_server_attention_s sl_btmesh_evt_health_server_attention_t; + +/** @} */ // end addtogroup sl_btmesh_evt_health_server_attention + +/** + * @addtogroup sl_btmesh_evt_health_server_test_request sl_btmesh_evt_health_server_test_request + * @{ + * @brief + * + * Health client request for a self test generates this event. After the test + * has been executed, test results may need to be reported. + */ + +/** @brief Identifier of the test_request event */ +#define sl_btmesh_evt_health_server_test_request_id 0x011b00a8 + +/***************************************************************************//** + * @brief Data structure of the test_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_health_server_test_request_s +{ + uint16_t server_address; /**< Destination address the message was sent to. + It can be either the Server model element's + unicast address, or a subscription address of + the Server model. */ + uint16_t elem_index; /**< Server model element index. Identifies the + Server model that received the request as + well as the element on which the test is to + be performed. */ + uint16_t client_address; /**< Address of the client model which sent the + message */ + uint16_t appkey_index; /**< The application key index to use in + encrypting the request. Any response sent + must be encrypted using the same key. */ + uint8_t test_id; /**< Test ID */ + uint16_t vendor_id; /**< Bluetooth vendor ID used in the request */ + uint8_t response_required; /**< Non-zero if client expects a response. The + application should issue a @ref + sl_btmesh_health_server_send_test_response + once it has processed the request. */ +}); + +typedef struct sl_btmesh_evt_health_server_test_request_s sl_btmesh_evt_health_server_test_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_health_server_test_request + +/***************************************************************************//** + * + * Set the fault condition on an element. + * + * @param[in] elem_index Index of the element on which the fault is occurring + * @param[in] id Fault ID. See the Mesh Profile specification for IDs defined by + * the Bluetooth SIG. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_server_set_fault(uint16_t elem_index, uint8_t id); + +/***************************************************************************//** + * + * Clear the fault condition on an element. + * + * @param[in] elem_index Index of the element on which the fault is no longer + * occurring. + * @param[in] id Fault ID. See the Mesh Profile specification for IDs defined by + * the Bluetooth SIG. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_server_clear_fault(uint16_t elem_index, + uint8_t id); + +/***************************************************************************//** + * + * Indicate to the stack that a test request has been completed and that the + * status may be communicated to the Health Client, which made the test request. + * + * @param[in] client_address Address of the client model which sent the message + * @param[in] elem_index Server model element index. Identifies the Server model + * that received the request as well as the element on which the test is to be + * performed. + * @param[in] appkey_index The application key index to use in encrypting the + * request. + * @param[in] vendor_id Bluetooth vendor ID used in the request + * + * @return If an error occurs locally (for instance, because of invalid + * parameters), an errorcode parameter is returned immediately. + * + ******************************************************************************/ +sl_status_t sl_btmesh_health_server_send_test_response(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id); + +/** @} */ // end addtogroup sl_btmesh_health_server + +/** + * @addtogroup sl_btmesh_generic_client Bluetooth Mesh Generic Client Model + * @{ + * + * @brief Bluetooth Mesh Generic Client Model + * + * Generic client model API provides a functionality to send and receive + * messages using Bluetooth SIG client models, including generic client models + * and lighting client models. + * + * In the API, the client model that is used is identified by its element + * address and model ID, while the server model responding to client model + * requests is identified by its element address and model ID. + * + * The API has functions for querying server model states, requesting server + * model state changes, and publishing messages. The application has to + * implement more complex functionality (state machines or other model-specific + * logic). + * + * Data for state change requests and server responses is passed as serialized + * byte arrays through BGAPI. There are functions to convert byte arrays to and + * from model state structures in the Bluetooth mesh SDK. + * + * The stack will handle Mesh transaction layer segmentation and reassembly + * automatically if the messages sent are long enough to require it. + * + * Note on time resolution + * + * Because of message formatting, transition time and remaining time resolution + * units depend on the requested or reported value. For example, until 6.2 + * seconds it is 100 ms; until 62 seconds it is 1 s; until 620 seconds it is 10 + * s; and until 620 minutes it is 10 minutes. The value cannot be longer than + * 620 minutes. Therefore, it is not possible to request a delay of exactly 7500 + * ms. The resolution unit is 1 s between 6.2 and 62 seconds, so the value would + * be rounded down to 7 s. + * + * Delay resolution is 5 ms and values will be rounded down to the closest 5 ms. + * The value can't be longer than 1275 ms. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_generic_client_get_id 0x001e0028 +#define sl_btmesh_cmd_generic_client_set_id 0x011e0028 +#define sl_btmesh_cmd_generic_client_publish_id 0x021e0028 +#define sl_btmesh_cmd_generic_client_get_params_id 0x031e0028 +#define sl_btmesh_cmd_generic_client_init_id 0x041e0028 +#define sl_btmesh_cmd_generic_client_init_common_id 0x051e0028 +#define sl_btmesh_cmd_generic_client_init_on_off_id 0x061e0028 +#define sl_btmesh_cmd_generic_client_init_level_id 0x071e0028 +#define sl_btmesh_cmd_generic_client_init_default_transition_time_id 0x081e0028 +#define sl_btmesh_cmd_generic_client_init_power_on_off_id 0x091e0028 +#define sl_btmesh_cmd_generic_client_init_power_level_id 0x0a1e0028 +#define sl_btmesh_cmd_generic_client_init_battery_id 0x0b1e0028 +#define sl_btmesh_cmd_generic_client_init_location_id 0x0c1e0028 +#define sl_btmesh_cmd_generic_client_init_property_id 0x0d1e0028 +#define sl_btmesh_cmd_generic_client_init_lightness_id 0x0e1e0028 +#define sl_btmesh_cmd_generic_client_init_ctl_id 0x0f1e0028 +#define sl_btmesh_cmd_generic_client_init_hsl_id 0x101e0028 +#define sl_btmesh_rsp_generic_client_get_id 0x001e0028 +#define sl_btmesh_rsp_generic_client_set_id 0x011e0028 +#define sl_btmesh_rsp_generic_client_publish_id 0x021e0028 +#define sl_btmesh_rsp_generic_client_get_params_id 0x031e0028 +#define sl_btmesh_rsp_generic_client_init_id 0x041e0028 +#define sl_btmesh_rsp_generic_client_init_common_id 0x051e0028 +#define sl_btmesh_rsp_generic_client_init_on_off_id 0x061e0028 +#define sl_btmesh_rsp_generic_client_init_level_id 0x071e0028 +#define sl_btmesh_rsp_generic_client_init_default_transition_time_id 0x081e0028 +#define sl_btmesh_rsp_generic_client_init_power_on_off_id 0x091e0028 +#define sl_btmesh_rsp_generic_client_init_power_level_id 0x0a1e0028 +#define sl_btmesh_rsp_generic_client_init_battery_id 0x0b1e0028 +#define sl_btmesh_rsp_generic_client_init_location_id 0x0c1e0028 +#define sl_btmesh_rsp_generic_client_init_property_id 0x0d1e0028 +#define sl_btmesh_rsp_generic_client_init_lightness_id 0x0e1e0028 +#define sl_btmesh_rsp_generic_client_init_ctl_id 0x0f1e0028 +#define sl_btmesh_rsp_generic_client_init_hsl_id 0x101e0028 + +/** + * @addtogroup sl_btmesh_generic_client_get_state_type Generic Client Get State Types + * @{ + * + * Generic client get state type identifies the state which the client retrieves + * from the remote server model. + */ + +/** Generic on/off get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_ON_OFF 0x0 + +/** Generic on power up get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_ON_POWER_UP 0x1 + +/** Generic level get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_LEVEL 0x2 + +/** Generic power level get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_POWER_LEVEL 0x3 + +/** Generic power level last get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_POWER_LEVEL_LAST 0x4 + +/** Generic power level default get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_POWER_LEVEL_DEFAULT 0x5 + +/** Generic power level range get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_POWER_LEVEL_RANGE 0x6 + +/** Generic transition time get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_TRANSITION_TIME 0x6 + +/** Generic battery get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_BATTERY 0x8 + +/** Generic global location get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_LOCATION_GLOBAL 0x9 + +/** Generic local location get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_LOCATION_LOCAL 0xa + +/** Generic user property get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_PROPERTY_USER 0xb + +/** Generic admin property get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_PROPERTY_ADMIN 0xc + +/** Generic manufacturer property get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_PROPERTY_MANUF 0xd + +/** Generic user property list get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_PROPERTY_LIST_USER 0xe + +/** Generic admin property list get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_PROPERTY_LIST_ADMIN 0xf + +/** Generic manufacturer property list get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_PROPERTY_LIST_MANUF 0x10 + +/** Generic client property list get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_PROPERTY_LIST_CLIENT 0x11 + +/** Light actual lightness get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_LIGHTNESS_ACTUAL 0x80 + +/** Light linear lightness get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_LIGHTNESS_LINEAR 0x81 + +/** Light last lightness get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_LIGHTNESS_LAST 0x82 + +/** Light default lightness get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_LIGHTNESS_DEFAULT 0x83 + +/** Light lightness range get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_LIGHTNESS_RANGE 0x84 + +/** Light lightness, color temperature, and delta UV server state identifier. + * Not to be used by client get requests. */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_CTL 0x85 + +/** Light color temperature and delta UV get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_CTL_TEMPERATURE 0x86 + +/** Light lightness, color temperature, and delta UV default get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_CTL_DEFAULT 0x87 + +/** Light color temperature range get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_CTL_RANGE 0x88 + +/** Light lightness and color temperature get request. */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_CTL_LIGHTNESS_TEMPERATURE 0x89 + +/** Light lightness, color hue, and color saturation current value get request. + * */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_HSL 0x8a + +/** Light color hue get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_HSL_HUE 0x8b + +/** Light color saturation get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_HSL_SATURATION 0x8c + +/** Light lightness, color hue, and color saturation default get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_HSL_DEFAULT 0x8d + +/** Light color hue and saturation range get request */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_HSL_RANGE 0x8e + +/** Light lightness, color hue, and color saturation target value get request. + * */ +#define SL_BTMESH_GENERIC_CLIENT_STATE_HSL_TARGET 0x8f + +/** @} */ // end Generic Client Get State Types + +/** + * @addtogroup sl_btmesh_generic_client_set_request_type Generic Client Set Request Types + * @{ + * + * Generic client set request type identifies the state which the client + * requests to be set to a new value on the remote server model. + */ + +/** Generic on/off set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_ON_OFF 0x0 + +/** Generic on power up set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_ON_POWER_UP 0x1 + +/** Generic level set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_LEVEL 0x2 + +/** Generic level delta set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_LEVEL_DELTA 0x3 + +/** Generic level move set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_LEVEL_MOVE 0x4 + +/** Generic level halt request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_LEVEL_HALT 0x5 + +/** Generic power level set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_POWER_LEVEL 0x6 + +/** Generic power level default set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_POWER_LEVEL_DEFAULT 0x7 + +/** Generic power level range set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_POWER_LEVEL_RANGE 0x8 + +/** Generic transition time set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_TRANSITION_TIME 0x9 + +/** Generic global location set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_LOCATION_GLOBAL 0xa + +/** Generic local location set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_LOCATION_LOCAL 0xb + +/** Generic user property set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_PROPERTY_USER 0xc + +/** Generic admin property set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_PROPERTY_ADMIN 0xd + +/** Generic manufacturer property set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_PROPERTY_MANUF 0xe + +/** Light actual lightness set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_LIGHTNESS_ACTUAL 0x80 + +/** Light linear lightness set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_LIGHTNESS_LINEAR 0x81 + +/** Light default lightness set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_LIGHTNESS_DEFAULT 0x82 + +/** Light lightness range set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_LIGHTNESS_RANGE 0x83 + +/** Light lightness, color temperature, and delta UV set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_CTL 0x84 + +/** Light color temperature and delta UV set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_CTL_TEMPERATURE 0x85 + +/** Light lightness, color temperature, and delta UV default set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_CTL_DEFAULT 0x86 + +/** Light color temperature range set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_CTL_RANGE 0x87 + +/** Light lightness, color hue, and color saturation set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_HSL 0x88 + +/** Light color hue set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_HSL_HUE 0x89 + +/** Light color saturation set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_HSL_SATURATION 0x8a + +/** Light lightness, color hue, and color saturation default set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_HSL_DEFAULT 0x8b + +/** Light color hue and color saturation range set request */ +#define SL_BTMESH_GENERIC_CLIENT_REQUEST_HSL_RANGE 0x8c + +/** @} */ // end Generic Client Set Request Types + +/** + * @addtogroup sl_btmesh_evt_generic_client_server_status sl_btmesh_evt_generic_client_server_status + * @{ + * @brief Status report sent by a server model + * + * This may be generated either because of a response to a get or set request + * was received by the client model or because the client model received a + * spontaneously generated status indication sent to an address the model was + * subscribed to. + */ + +/** @brief Identifier of the server_status event */ +#define sl_btmesh_evt_generic_client_server_status_id 0x001e00a8 + +/***************************************************************************//** + * @brief Data structure of the server_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_generic_client_server_status_s +{ + uint16_t client_address; /**< Address that the message was sent to, which + can be either the model element's unicast + address or a subscription address of the model */ + uint16_t elem_index; /**< Client model element index */ + uint16_t model_id; /**< Client model ID */ + uint16_t server_address; /**< Address of the server model which sent the + message */ + uint32_t remaining_ms; /**< Time (in milliseconds) remaining before + transition from the current state to target + state is complete. Set to zero if no + transition is taking place or if transition + time does not apply to the message. */ + uint16_t flags; /**< Message flags. It is a bitmask of the + following values: + - Bit 0: Non-relayed. If non-zero, + indicates a response to a non-relayed + request. */ + uint8_t type; /**< Model-specific state type, identifying the + kind of state reported in the status event. + See get state types list for details. */ + uint8array parameters; /**< Message-specific parameters, serialized into a + byte array */ +}); + +typedef struct sl_btmesh_evt_generic_client_server_status_s sl_btmesh_evt_generic_client_server_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_generic_client_server_status + +/***************************************************************************//** + * + * Get the current state of a server model or models in the network. Besides the + * immediate result code, the response or responses from the network will + * generate server state report events for the replies received. + * + * The server model responses will be reported in @ref + * sl_btmesh_evt_generic_client_server_status events. + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] model_id Client model ID + * @param[in] appkey_index The application key index to use + * @param[in] type Model-specific state type, identifying the kind of state to + * retrieve. See @ref sl_btmesh_generic_client_get_state_type list for + * details. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_generic_client_server_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_get(uint16_t server_address, + uint16_t elem_index, + uint16_t model_id, + uint16_t appkey_index, + uint8_t type); + +/***************************************************************************//** + * + * Set the current state of a server model or models in the network. Besides the + * immediate result code, the response or responses from the network will + * generate server state report events for the replies received. + * + * The server model responses will be reported in @ref + * sl_btmesh_evt_generic_client_server_status events. Note that for responses to + * be generated the corresponding flag needs to be set. + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] model_id Client model ID + * @param[in] appkey_index The application key index to use + * @param[in] tid Transaction identifier. This applies to those messages the + * Mesh Model specification defines as transactional and can be left as zero + * for others. + * @param[in] transition_ms @parblock + * Transition time (in milliseconds) for the state change. If both the + * transition time and the delay are zero, the transition is immediate. + * + * This applies to messages the Mesh Model specification defines to have + * transition and delay times and can be left as zero for others. + * @endparblock + * @param[in] delay_ms @parblock + * Delay time (in milliseconds) before starting the state change. If both the + * transition time and the delay are zero, the transition is immediate. + * + * This applies to messages the Mesh Model specification defines to have + * transition and delay times and can be left as zero for others. + * @endparblock + * @param[in] flags Message flags. Bitmask of the following: + * - Bit 0: Response required. If non-zero, the client expects a + * response from the server + * - Bit 1: Default transition timer. If non-zero, the client + * requests that server uses its default transition timer and the supplied + * transition and delay values are ignored. + * @param[in] type Model-specific request type. See set request types list for + * details. + * @param[in] parameters_len Length of data in @p parameters + * @param[in] parameters Message-specific set request parameters serialized into + * a byte array + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_generic_client_server_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_set(uint16_t server_address, + uint16_t elem_index, + uint16_t model_id, + uint16_t appkey_index, + uint8_t tid, + uint32_t transition_ms, + uint16_t delay_ms, + uint16_t flags, + uint8_t type, + size_t parameters_len, + const uint8_t* parameters); + +/***************************************************************************//** + * + * Publish a set request to the network using the publish address and publish + * application key of the model. The message will be received by the server + * models which subscribe to the publish address, and there's no need to + * explicitly specify a destination address or application key. + * + * The server model responses will be reported in @ref + * sl_btmesh_evt_generic_client_server_status events. To generate responses, the + * corresponding flag needs to be set. + * + * @param[in] elem_index Client model element index + * @param[in] model_id Client model ID + * @param[in] tid Transaction identifier + * @param[in] transition_ms @parblock + * Transition time (in milliseconds) for the state change. If both the + * transition time and the delay are zero, the transition is immediate. + * + * This applies to messages the Mesh Model specification defines to have + * transition and delay times and can be left as zero for others. + * @endparblock + * @param[in] delay_ms @parblock + * Delay time (in milliseconds) before starting the state change. If both the + * transition time and the delay are zero, the transition is immediate. + * + * This applies to messages the Mesh Model specification defines to have + * transition and delay times, and can be left as zero for others. + * @endparblock + * @param[in] flags Message flags. Bitmask of the following: + * - Bit 0: Response required. If non-zero, the client expects a + * response from the server + * - Bit 1: Default transition timer. If non-zero client requests + * that server uses its default transition timer and the supplied + * transition and delay values are ignored. + * @param[in] type Model-specific request type. See set request types list for + * details. + * @param[in] parameters_len Length of data in @p parameters + * @param[in] parameters Message-specific set request parameters serialized into + * a byte array + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_generic_client_server_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_publish(uint16_t elem_index, + uint16_t model_id, + uint8_t tid, + uint32_t transition_ms, + uint16_t delay_ms, + uint16_t flags, + uint8_t type, + size_t parameters_len, + const uint8_t* parameters); + +/***************************************************************************//** + * + * Get the current state of a server model or models in the network, with + * additional parameters detailing the request. Besides the immediate result + * code, the response or responses from the network will generate server state + * report events for the replies received. + * + * The server model responses will be reported in @ref + * sl_btmesh_evt_generic_client_server_status events. + * + * This call is used to query properties, for which the property ID is given as + * a parameter. + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] model_id Client model ID + * @param[in] appkey_index The application key index to use. + * @param[in] type Model-specific state type, identifying the kind of state to + * retrieve. See @ref sl_btmesh_generic_client_get_state_type list for + * details. + * @param[in] parameters_len Length of data in @p parameters + * @param[in] parameters Message-specific get request parameters serialized into + * a byte array + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_generic_client_server_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_get_params(uint16_t server_address, + uint16_t elem_index, + uint16_t model_id, + uint16_t appkey_index, + uint8_t type, + size_t parameters_len, + const uint8_t* parameters); + +/***************************************************************************//** + * + * Initialize generic client models. This command initializes all generic client + * models on the device. Alternatively, only the necessary client models can be + * initialized using model-specific initialization commands. Using + * model-specific initialization can result in a smaller firmware image size for + * SoC projects. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init(); + +/***************************************************************************//** + * + * Initialize the generic client model common functionality. This command should + * be called after all model-specific initialization calls are done. It does not + * need to be called if @ref sl_btmesh_generic_client_init is used. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_common(); + +/***************************************************************************//** + * + * Initialize generic on/off client models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_on_off(); + +/***************************************************************************//** + * + * Initialize generic level client models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_level(); + +/***************************************************************************//** + * + * Initialize generic default transition time client models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_default_transition_time(); + +/***************************************************************************//** + * + * Initialize generic power on/off client models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_power_on_off(); + +/***************************************************************************//** + * + * Initialize generic power level client models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_power_level(); + +/***************************************************************************//** + * + * Initialize generic battery client models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_battery(); + +/***************************************************************************//** + * + * Initialize generic location client models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_location(); + +/***************************************************************************//** + * + * Initialize generic property client models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_property(); + +/***************************************************************************//** + * + * Initialize light lightness client models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_lightness(); + +/***************************************************************************//** + * + * Initialize light CTL client models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_ctl(); + +/***************************************************************************//** + * + * Initialize light HSL client models + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_client_init_hsl(); + +/** @} */ // end addtogroup sl_btmesh_generic_client + +/** + * @addtogroup sl_btmesh_generic_server Bluetooth Mesh Generic Server Model + * @{ + * + * @brief Bluetooth Mesh Generic Server Model + * + * Generic server model API provides functionality to send and receive messages + * using Bluetooth SIG server models, including generic server models and + * lighting server models. + * + * Throughout the API the server model being used is identified by its element + * address and model ID, while the client model generating requests to the + * server model is identified by its element address and model ID. + * + * The generic server model API is designed on the premise that the actual state + * the model represents resides in and is owned by the application, not by the + * stack. + * + * The model acts as a cache for client queries. In other words, the stack + * handles state requests from the client automatically. The application does + * not need to handle those. The cached value is also used for periodic + * publication. + * + * The flip side of caching is that when the state represented by the model + * changes in the application, it must update the cached value to the stack by + * issuing a @ref sl_btmesh_generic_server_update command. + * + * When a client model requests a state change, the stack will generate a @ref + * sl_btmesh_evt_generic_server_client_request event which the application must + * process. Then, if the client needs a response the application has to issue a + * @ref sl_btmesh_generic_server_respond command corresponding to the request. + * Otherwise, the application only has to update the state with a @ref + * sl_btmesh_generic_server_update command, which does not result in sending any + * messages to the network. + * + * Note that, because the Mesh Model specification requires that certain states + * are bound together and because the stack enforces that, updating one cached + * state may result in an update of the corresponding bound state, for which the + * stack generates a @ref sl_btmesh_evt_generic_server_state_changed event. For + * example, when a dimmable light is switched off, the lightness level bound to + * the on/off state, is also set to zero because the states are bound. + * + * Data for state change requests and server responses is passed as serialized + * byte arrays through BGAPI. Bluetooth mesh SDK has functions to convert byte + * arrays to and from model state structures. + * + * The stack will handle Mesh transaction layer segmentation and reassembly + * automatically if the messages sent are long enough to require it. + * + * Note on time resolution + * + * Because of message formatting, transition time and remaining time resolution + * units depend on the requested or reported value. For example, until 6.2 + * seconds it is 100 ms; until 62 seconds it is 1 s; until 620 seconds it is 10 + * s; and until 620 minutes it is 10 minutes. The value can't be longer than 620 + * minutes. Therefore, it is not possible to request a delay of exactly 7500 ms. + * The resolution unit is 1 s between 6.2 and 62 seconds, so the value is + * rounded down to 7 s. + * + * Delay resolution is 5 ms and values will be rounded down to the closest 5 ms. + * The value can't be longer than 1275 ms. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_generic_server_respond_id 0x001f0028 +#define sl_btmesh_cmd_generic_server_update_id 0x011f0028 +#define sl_btmesh_cmd_generic_server_publish_id 0x021f0028 +#define sl_btmesh_cmd_generic_server_init_id 0x041f0028 +#define sl_btmesh_cmd_generic_server_init_common_id 0x051f0028 +#define sl_btmesh_cmd_generic_server_init_on_off_id 0x061f0028 +#define sl_btmesh_cmd_generic_server_init_level_id 0x071f0028 +#define sl_btmesh_cmd_generic_server_init_default_transition_time_id 0x081f0028 +#define sl_btmesh_cmd_generic_server_init_power_on_off_id 0x091f0028 +#define sl_btmesh_cmd_generic_server_init_power_level_id 0x0a1f0028 +#define sl_btmesh_cmd_generic_server_init_battery_id 0x0b1f0028 +#define sl_btmesh_cmd_generic_server_init_location_id 0x0c1f0028 +#define sl_btmesh_cmd_generic_server_init_property_id 0x0d1f0028 +#define sl_btmesh_cmd_generic_server_init_lightness_id 0x0e1f0028 +#define sl_btmesh_cmd_generic_server_init_ctl_id 0x0f1f0028 +#define sl_btmesh_cmd_generic_server_init_hsl_id 0x101f0028 +#define sl_btmesh_cmd_generic_server_get_cached_state_id 0x111f0028 +#define sl_btmesh_rsp_generic_server_respond_id 0x001f0028 +#define sl_btmesh_rsp_generic_server_update_id 0x011f0028 +#define sl_btmesh_rsp_generic_server_publish_id 0x021f0028 +#define sl_btmesh_rsp_generic_server_init_id 0x041f0028 +#define sl_btmesh_rsp_generic_server_init_common_id 0x051f0028 +#define sl_btmesh_rsp_generic_server_init_on_off_id 0x061f0028 +#define sl_btmesh_rsp_generic_server_init_level_id 0x071f0028 +#define sl_btmesh_rsp_generic_server_init_default_transition_time_id 0x081f0028 +#define sl_btmesh_rsp_generic_server_init_power_on_off_id 0x091f0028 +#define sl_btmesh_rsp_generic_server_init_power_level_id 0x0a1f0028 +#define sl_btmesh_rsp_generic_server_init_battery_id 0x0b1f0028 +#define sl_btmesh_rsp_generic_server_init_location_id 0x0c1f0028 +#define sl_btmesh_rsp_generic_server_init_property_id 0x0d1f0028 +#define sl_btmesh_rsp_generic_server_init_lightness_id 0x0e1f0028 +#define sl_btmesh_rsp_generic_server_init_ctl_id 0x0f1f0028 +#define sl_btmesh_rsp_generic_server_init_hsl_id 0x101f0028 +#define sl_btmesh_rsp_generic_server_get_cached_state_id 0x111f0028 + +/** + * @addtogroup sl_btmesh_evt_generic_server_client_request sl_btmesh_evt_generic_server_client_request + * @{ + * @brief State change request sent by a client model + * + * This may be generated either because of a request directly to this model, or + * a request sent to an address which is subscribed to by the model. + */ + +/** @brief Identifier of the client_request event */ +#define sl_btmesh_evt_generic_server_client_request_id 0x001f00a8 + +/***************************************************************************//** + * @brief Data structure of the client_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_generic_server_client_request_s +{ + uint16_t server_address; /**< Address the message was sent to, which can be + either the model element's unicast address, or + model's subscription address */ + uint16_t elem_index; /**< Server model element index */ + uint16_t model_id; /**< Server model ID */ + uint16_t client_address; /**< Address of the client model which sent the + message */ + uint16_t appkey_index; /**< The application key index used in encrypting + the request; Responses need to be encrypted + with the same key. */ + uint32_t transition_ms; /**< Requested transition time (in milliseconds) + for the state change. If both the transition + time and the delay are zero, the transition is + immediate. + + This applies to messages, which the Mesh Model + specification defines to have transition and + delay times and will be zero for others. */ + uint16_t delay_ms; /**< Delay time (in milliseconds) before starting + the state change. If both the transition time + and the delay are zero, the transition is + immediate. + + This applies to messages, which the Mesh Model + specification defines to have transition and + delay times and will be zero for others. */ + uint16_t flags; /**< Message flags. Bitmask of the following + values: + - Bit 0: Non-relayed. If non-zero, + indicates that the client message was not + relayed (TTL was zero) and that the server + is within direct radio range of the + client. + - Bit 1: Response required. If + non-zero, the client expects a response + from the server. */ + uint8_t type; /**< Model-specific request type. See set request + types list for details. */ + uint8array parameters; /**< Message-specific parameters serialized into a + byte array */ +}); + +typedef struct sl_btmesh_evt_generic_server_client_request_s sl_btmesh_evt_generic_server_client_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_generic_server_client_request + +/** + * @addtogroup sl_btmesh_evt_generic_server_state_changed sl_btmesh_evt_generic_server_state_changed + * @{ + * @brief Cached model state changed + * + * This may happen either as a direct result of model state update by the + * application, in which case the event can be ignored, or because the update of + * one model state resulted in an update of a bound model state according to the + * Mesh model specification. In this case, the application should update its own + * value accordingly. + */ + +/** @brief Identifier of the state_changed event */ +#define sl_btmesh_evt_generic_server_state_changed_id 0x011f00a8 + +/***************************************************************************//** + * @brief Data structure of the state_changed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_generic_server_state_changed_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t model_id; /**< Server model ID */ + uint32_t remaining_ms; /**< Time (in milliseconds) remaining before + transition from current state to target state is + complete. Ignored if no transition is taking + place. */ + uint8_t type; /**< Model-specific state type, identifying the kind + of state reported in the state change event. See + get state types list for details. */ + uint8array parameters; /**< Message-specific parameters, serialized into a + byte array */ +}); + +typedef struct sl_btmesh_evt_generic_server_state_changed_s sl_btmesh_evt_generic_server_state_changed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_generic_server_state_changed + +/** + * @addtogroup sl_btmesh_evt_generic_server_state_recall sl_btmesh_evt_generic_server_state_recall + * @{ + * @brief Cached model state changed due to scene recall operation + */ + +/** @brief Identifier of the state_recall event */ +#define sl_btmesh_evt_generic_server_state_recall_id 0x021f00a8 + +/***************************************************************************//** + * @brief Data structure of the state_recall event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_generic_server_state_recall_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t model_id; /**< Server model ID */ + uint32_t transition_time_ms; /**< Time (in milliseconds) remaining before + transition from current state to target + state should be complete. Ignored if no + transition is taking place. */ + uint8_t type; /**< Model-specific state type, identifying the + kind of state reported in the state change + event. See get state types list for + details. */ + uint8array parameters; /**< Model state - specific parameters, + serialized into a byte array */ +}); + +typedef struct sl_btmesh_evt_generic_server_state_recall_s sl_btmesh_evt_generic_server_state_recall_t; + +/** @} */ // end addtogroup sl_btmesh_evt_generic_server_state_recall + +/***************************************************************************//** + * + * Server response to a client request. This command must be used when an + * application updates the server model state as a response to a @ref + * sl_btmesh_evt_generic_server_client_request event which required a response. + * + * @param[in] client_address Address of the client model which sent the message + * @param[in] elem_index Server model element index + * @param[in] model_id Server model ID + * @param[in] appkey_index The application key index used + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. Set to zero if no + * transition is taking place or if the transition time does not apply to the + * state change. + * @param[in] flags Message flags. Bitmask of the following: + * - Bit 0: Non-relayed. If non-zero, indicates a response to a + * non-relayed request. + * @param[in] type Model-specific state type, identifying the kind of state to + * be updated. See @ref sl_btmesh_generic_client_get_state_type list for + * details. + * @param[in] parameters_len Length of data in @p parameters + * @param[in] parameters Message-specific parameters serialized into a byte + * array + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_respond(uint16_t client_address, + uint16_t elem_index, + uint16_t model_id, + uint16_t appkey_index, + uint32_t remaining_ms, + uint16_t flags, + uint8_t type, + size_t parameters_len, + const uint8_t* parameters); + +/***************************************************************************//** + * + * Server state update. This command must be used when an application updates + * the server model state as a response to a @ref + * sl_btmesh_evt_generic_server_client_request event which did not require a + * response, but also when the application state changes spontaneously or as a + * result of some external (non-Mesh) event. + * + * @param[in] elem_index Server model element index + * @param[in] model_id Server model ID + * @param[in] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. Set to zero if no + * transition is taking place or if transition time does not apply to the + * state change. + * @param[in] type Model-specific state type, identifying the kind of state to + * be updated. See @ref sl_btmesh_generic_client_get_state_type list for + * details. + * @param[in] parameters_len Length of data in @p parameters + * @param[in] parameters Message-specific parameters, serialized into a byte + * array + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_update(uint16_t elem_index, + uint16_t model_id, + uint32_t remaining_ms, + uint8_t type, + size_t parameters_len, + const uint8_t* parameters); + +/***************************************************************************//** + * + * Publish the server state to the network using the publish parameters + * configured in the model. The message is constructed using the cached state in + * the stack. + * + * @param[in] elem_index Server model element index + * @param[in] model_id Server model ID + * @param[in] type Model-specific state type, identifying the kind of state used + * in the published message. See @ref sl_btmesh_generic_client_get_state_type + * list for details. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_publish(uint16_t elem_index, + uint16_t model_id, + uint8_t type); + +/***************************************************************************//** + * + * Initialize generic server models. This command initializes all generic server + * models on the device. Alternatively, only the necessary server models can be + * initialized using model-specific initialization commands. Using + * model-specific initialization can result in a smaller firmware image size for + * SoC projects. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init(); + +/***************************************************************************//** + * + * Initialize the generic server model common functionality. This should be + * called after all model-specific initialization calls are done, and does not + * need to be called if @ref sl_btmesh_generic_server_init is used. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_common(); + +/***************************************************************************//** + * + * Initialize generic on/off server models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_on_off(); + +/***************************************************************************//** + * + * Initialize generic level server models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_level(); + +/***************************************************************************//** + * + * Initialize generic default transition time server models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_default_transition_time(); + +/***************************************************************************//** + * + * Initialize generic power on/off server models, power on/off setup server + * models, and all models they extend. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_power_on_off(); + +/***************************************************************************//** + * + * Initialize generic power level server models, power level setup server + * models, and all models they extend. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_power_level(); + +/***************************************************************************//** + * + * Initialize generic battery server models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_battery(); + +/***************************************************************************//** + * + * Initialize generic location and generic location setup server models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_location(); + +/***************************************************************************//** + * + * Initialize generic property server models. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_property(); + +/***************************************************************************//** + * + * Initialize light lightness server models, light lightness setup server + * models, and all models they extend. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_lightness(); + +/***************************************************************************//** + * + * Initialize light CTL server models, light CTL temperature server models, + * light CTL setup server models, and all models they extend. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_ctl(); + +/***************************************************************************//** + * + * Initialize light HSL server models, light HSL hue server models, light HSL + * saturation server models, light HSL setup server models, and all models they + * extend + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_init_hsl(); + +/***************************************************************************//** + * + * Get model cached state. This command can be used to get cached model states + * after scene recall when using compacted recall events. This command supports + * only those states that would have been reported by @ref + * sl_btmesh_evt_generic_server_state_recall events. + * + * @param[in] elem_index Server model element index + * @param[in] model_id Server model ID + * @param[in] type Model-specific state type, identifying the kind of state + * reported in the state change event. See @ref + * sl_btmesh_generic_client_get_state_type list for details. + * @param[out] remaining_ms Time (in milliseconds) remaining before transition + * from current state to target state is complete. Ignored if no transition is + * taking place. + * @param[in] max_parameters_size Size of output buffer passed in @p parameters + * @param[out] parameters_len On return, set to the length of output data + * written to @p parameters + * @param[out] parameters Message-specific parameters, serialized into a byte + * array + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_generic_server_get_cached_state(uint16_t elem_index, + uint16_t model_id, + uint8_t type, + uint32_t *remaining_ms, + size_t max_parameters_size, + size_t *parameters_len, + uint8_t *parameters); + +/** @} */ // end addtogroup sl_btmesh_generic_server + +/** + * @addtogroup sl_btmesh_test Bluetooth Mesh Test Utilities + * @{ + * + * @brief Bluetooth Mesh Test Utilities + * + * These commands are meant for development and testing. Do not use in + * production software. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_test_get_nettx_id 0x00220028 +#define sl_btmesh_cmd_test_set_nettx_id 0x01220028 +#define sl_btmesh_cmd_test_get_relay_id 0x02220028 +#define sl_btmesh_cmd_test_set_relay_id 0x03220028 +#define sl_btmesh_cmd_test_set_adv_scan_params_id 0x04220028 +#define sl_btmesh_cmd_test_set_ivupdate_test_mode_id 0x05220028 +#define sl_btmesh_cmd_test_get_ivupdate_test_mode_id 0x06220028 +#define sl_btmesh_cmd_test_set_segment_send_delay_id 0x07220028 +#define sl_btmesh_cmd_test_set_ivupdate_state_id 0x08220028 +#define sl_btmesh_cmd_test_send_beacons_id 0x09220028 +#define sl_btmesh_cmd_test_bind_local_model_app_id 0x0a220028 +#define sl_btmesh_cmd_test_unbind_local_model_app_id 0x0b220028 +#define sl_btmesh_cmd_test_add_local_model_sub_id 0x0c220028 +#define sl_btmesh_cmd_test_remove_local_model_sub_id 0x0d220028 +#define sl_btmesh_cmd_test_add_local_model_sub_va_id 0x0e220028 +#define sl_btmesh_cmd_test_remove_local_model_sub_va_id 0x0f220028 +#define sl_btmesh_cmd_test_get_local_model_sub_id 0x10220028 +#define sl_btmesh_cmd_test_set_local_model_pub_id 0x11220028 +#define sl_btmesh_cmd_test_set_local_model_pub_va_id 0x12220028 +#define sl_btmesh_cmd_test_get_local_model_pub_id 0x13220028 +#define sl_btmesh_cmd_test_set_local_heartbeat_subscription_id 0x14220028 +#define sl_btmesh_cmd_test_get_local_heartbeat_subscription_id 0x15220028 +#define sl_btmesh_cmd_test_get_local_heartbeat_publication_id 0x16220028 +#define sl_btmesh_cmd_test_set_local_heartbeat_publication_id 0x17220028 +#define sl_btmesh_cmd_test_set_local_config_id 0x18220028 +#define sl_btmesh_cmd_test_get_local_config_id 0x19220028 +#define sl_btmesh_cmd_test_add_local_key_id 0x1a220028 +#define sl_btmesh_cmd_test_remove_local_key_id 0x1b220028 +#define sl_btmesh_cmd_test_update_local_key_id 0x1c220028 +#define sl_btmesh_cmd_test_set_sar_config_id 0x1d220028 +#define sl_btmesh_cmd_test_set_adv_bearer_state_id 0x1f220028 +#define sl_btmesh_cmd_test_prov_get_device_key_id 0x23220028 +#define sl_btmesh_cmd_test_prov_prepare_key_refresh_id 0x24220028 +#define sl_btmesh_cmd_test_cancel_segmented_tx_id 0x25220028 +#define sl_btmesh_cmd_test_set_iv_index_id 0x26220028 +#define sl_btmesh_cmd_test_set_element_seqnum_id 0x27220028 +#define sl_btmesh_cmd_test_set_model_option_id 0x28220028 +#define sl_btmesh_cmd_test_get_local_model_app_bindings_id 0x29220028 +#define sl_btmesh_cmd_test_get_replay_protection_list_entry_id 0x2a220028 +#define sl_btmesh_cmd_test_clear_replay_protection_list_entry_id 0x2b220028 +#define sl_btmesh_cmd_test_set_replay_protection_list_diagnostics_id 0x2c220028 +#define sl_btmesh_cmd_test_get_model_option_id 0x2d220028 +#define sl_btmesh_cmd_test_get_default_ttl_id 0x2e220028 +#define sl_btmesh_cmd_test_set_default_ttl_id 0x2f220028 +#define sl_btmesh_cmd_test_get_gatt_proxy_id 0x30220028 +#define sl_btmesh_cmd_test_set_gatt_proxy_id 0x31220028 +#define sl_btmesh_cmd_test_get_identity_id 0x32220028 +#define sl_btmesh_cmd_test_set_identity_id 0x33220028 +#define sl_btmesh_cmd_test_get_friend_id 0x34220028 +#define sl_btmesh_cmd_test_set_friend_id 0x35220028 +#define sl_btmesh_cmd_test_get_beacon_id 0x36220028 +#define sl_btmesh_cmd_test_set_beacon_id 0x37220028 +#define sl_btmesh_cmd_test_get_private_identity_id 0x38220028 +#define sl_btmesh_cmd_test_set_private_identity_id 0x39220028 +#define sl_btmesh_cmd_test_set_adv_provisioning_bearer_timing_id 0x3a220028 +#define sl_btmesh_cmd_test_update_keyrefresh_phase_id 0x3b220028 +#define sl_btmesh_cmd_test_send_private_beacons_id 0x3c220028 +#define sl_btmesh_cmd_test_set_adv_params_id 0x3d220028 +#define sl_btmesh_cmd_test_set_scan_params_id 0x3e220028 +#define sl_btmesh_cmd_test_adv_use_random_address_id 0x3f220028 +#define sl_btmesh_rsp_test_get_nettx_id 0x00220028 +#define sl_btmesh_rsp_test_set_nettx_id 0x01220028 +#define sl_btmesh_rsp_test_get_relay_id 0x02220028 +#define sl_btmesh_rsp_test_set_relay_id 0x03220028 +#define sl_btmesh_rsp_test_set_adv_scan_params_id 0x04220028 +#define sl_btmesh_rsp_test_set_ivupdate_test_mode_id 0x05220028 +#define sl_btmesh_rsp_test_get_ivupdate_test_mode_id 0x06220028 +#define sl_btmesh_rsp_test_set_segment_send_delay_id 0x07220028 +#define sl_btmesh_rsp_test_set_ivupdate_state_id 0x08220028 +#define sl_btmesh_rsp_test_send_beacons_id 0x09220028 +#define sl_btmesh_rsp_test_bind_local_model_app_id 0x0a220028 +#define sl_btmesh_rsp_test_unbind_local_model_app_id 0x0b220028 +#define sl_btmesh_rsp_test_add_local_model_sub_id 0x0c220028 +#define sl_btmesh_rsp_test_remove_local_model_sub_id 0x0d220028 +#define sl_btmesh_rsp_test_add_local_model_sub_va_id 0x0e220028 +#define sl_btmesh_rsp_test_remove_local_model_sub_va_id 0x0f220028 +#define sl_btmesh_rsp_test_get_local_model_sub_id 0x10220028 +#define sl_btmesh_rsp_test_set_local_model_pub_id 0x11220028 +#define sl_btmesh_rsp_test_set_local_model_pub_va_id 0x12220028 +#define sl_btmesh_rsp_test_get_local_model_pub_id 0x13220028 +#define sl_btmesh_rsp_test_set_local_heartbeat_subscription_id 0x14220028 +#define sl_btmesh_rsp_test_get_local_heartbeat_subscription_id 0x15220028 +#define sl_btmesh_rsp_test_get_local_heartbeat_publication_id 0x16220028 +#define sl_btmesh_rsp_test_set_local_heartbeat_publication_id 0x17220028 +#define sl_btmesh_rsp_test_set_local_config_id 0x18220028 +#define sl_btmesh_rsp_test_get_local_config_id 0x19220028 +#define sl_btmesh_rsp_test_add_local_key_id 0x1a220028 +#define sl_btmesh_rsp_test_remove_local_key_id 0x1b220028 +#define sl_btmesh_rsp_test_update_local_key_id 0x1c220028 +#define sl_btmesh_rsp_test_set_sar_config_id 0x1d220028 +#define sl_btmesh_rsp_test_set_adv_bearer_state_id 0x1f220028 +#define sl_btmesh_rsp_test_prov_get_device_key_id 0x23220028 +#define sl_btmesh_rsp_test_prov_prepare_key_refresh_id 0x24220028 +#define sl_btmesh_rsp_test_cancel_segmented_tx_id 0x25220028 +#define sl_btmesh_rsp_test_set_iv_index_id 0x26220028 +#define sl_btmesh_rsp_test_set_element_seqnum_id 0x27220028 +#define sl_btmesh_rsp_test_set_model_option_id 0x28220028 +#define sl_btmesh_rsp_test_get_local_model_app_bindings_id 0x29220028 +#define sl_btmesh_rsp_test_get_replay_protection_list_entry_id 0x2a220028 +#define sl_btmesh_rsp_test_clear_replay_protection_list_entry_id 0x2b220028 +#define sl_btmesh_rsp_test_set_replay_protection_list_diagnostics_id 0x2c220028 +#define sl_btmesh_rsp_test_get_model_option_id 0x2d220028 +#define sl_btmesh_rsp_test_get_default_ttl_id 0x2e220028 +#define sl_btmesh_rsp_test_set_default_ttl_id 0x2f220028 +#define sl_btmesh_rsp_test_get_gatt_proxy_id 0x30220028 +#define sl_btmesh_rsp_test_set_gatt_proxy_id 0x31220028 +#define sl_btmesh_rsp_test_get_identity_id 0x32220028 +#define sl_btmesh_rsp_test_set_identity_id 0x33220028 +#define sl_btmesh_rsp_test_get_friend_id 0x34220028 +#define sl_btmesh_rsp_test_set_friend_id 0x35220028 +#define sl_btmesh_rsp_test_get_beacon_id 0x36220028 +#define sl_btmesh_rsp_test_set_beacon_id 0x37220028 +#define sl_btmesh_rsp_test_get_private_identity_id 0x38220028 +#define sl_btmesh_rsp_test_set_private_identity_id 0x39220028 +#define sl_btmesh_rsp_test_set_adv_provisioning_bearer_timing_id 0x3a220028 +#define sl_btmesh_rsp_test_update_keyrefresh_phase_id 0x3b220028 +#define sl_btmesh_rsp_test_send_private_beacons_id 0x3c220028 +#define sl_btmesh_rsp_test_set_adv_params_id 0x3d220028 +#define sl_btmesh_rsp_test_set_scan_params_id 0x3e220028 +#define sl_btmesh_rsp_test_adv_use_random_address_id 0x3f220028 + +/** + * @brief Specify the type of a key in key manipulation commands. + */ +typedef enum +{ + sl_btmesh_test_key_type_net = 0x0, /**< (0x0) Network key */ + sl_btmesh_test_key_type_app = 0x1 /**< (0x1) Application key */ +} sl_btmesh_test_key_type_t; + +/** + * @addtogroup sl_btmesh_evt_test_local_heartbeat_subscription_complete sl_btmesh_evt_test_local_heartbeat_subscription_complete + * @{ + * @brief Indicate that the heartbeat subscription period is over. + */ + +/** @brief Identifier of the local_heartbeat_subscription_complete event */ +#define sl_btmesh_evt_test_local_heartbeat_subscription_complete_id 0x002200a8 + +/***************************************************************************//** + * @brief Data structure of the local_heartbeat_subscription_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_test_local_heartbeat_subscription_complete_s +{ + uint16_t count; /**< Number of received heartbeat messages */ + uint8_t hop_min; /**< Minimum observed hop count in heartbeat messages */ + uint8_t hop_max; /**< Maximum observed hop count in heartbeat messages */ +}); + +typedef struct sl_btmesh_evt_test_local_heartbeat_subscription_complete_s sl_btmesh_evt_test_local_heartbeat_subscription_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_test_local_heartbeat_subscription_complete + +/** + * @addtogroup sl_btmesh_evt_test_replay_protection_list_entry_set sl_btmesh_evt_test_replay_protection_list_entry_set + * @{ + * @brief Indication that a replay protection list entry has been set + */ + +/** @brief Identifier of the replay_protection_list_entry_set event */ +#define sl_btmesh_evt_test_replay_protection_list_entry_set_id 0x012200a8 + +/***************************************************************************//** + * @brief Data structure of the replay_protection_list_entry_set event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_test_replay_protection_list_entry_set_s +{ + uint16_t address; /**< Source address for the replay protection list entry */ + uint8_t cancel; /**< Nonzero when replay protection list update relates to a + cancelled segmented reception */ +}); + +typedef struct sl_btmesh_evt_test_replay_protection_list_entry_set_s sl_btmesh_evt_test_replay_protection_list_entry_set_t; + +/** @} */ // end addtogroup sl_btmesh_evt_test_replay_protection_list_entry_set + +/** + * @addtogroup sl_btmesh_evt_test_replay_protection_list_entry_cleared sl_btmesh_evt_test_replay_protection_list_entry_cleared + * @{ + * @brief Indication that a replay protection list entry has been cleared + */ + +/** @brief Identifier of the replay_protection_list_entry_cleared event */ +#define sl_btmesh_evt_test_replay_protection_list_entry_cleared_id 0x022200a8 + +/***************************************************************************//** + * @brief Data structure of the replay_protection_list_entry_cleared event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_test_replay_protection_list_entry_cleared_s +{ + uint16_t address; /**< Source address for the replay protection list entry */ +}); + +typedef struct sl_btmesh_evt_test_replay_protection_list_entry_cleared_s sl_btmesh_evt_test_replay_protection_list_entry_cleared_t; + +/** @} */ // end addtogroup sl_btmesh_evt_test_replay_protection_list_entry_cleared + +/** + * @addtogroup sl_btmesh_evt_test_replay_protection_list_saved sl_btmesh_evt_test_replay_protection_list_saved + * @{ + * @brief Indication that replay protection list has been saved + */ + +/** @brief Identifier of the replay_protection_list_saved event */ +#define sl_btmesh_evt_test_replay_protection_list_saved_id 0x032200a8 + +/***************************************************************************//** + * @brief Data structure of the replay_protection_list_saved event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_test_replay_protection_list_saved_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint16_t saved_count; /**< Number of entries saved successfully */ + uint16_t total_count; /**< Number of entries in the list in total */ +}); + +typedef struct sl_btmesh_evt_test_replay_protection_list_saved_s sl_btmesh_evt_test_replay_protection_list_saved_t; + +/** @} */ // end addtogroup sl_btmesh_evt_test_replay_protection_list_saved + +/** + * @addtogroup sl_btmesh_evt_test_replay_protection_list_full sl_btmesh_evt_test_replay_protection_list_full + * @{ + * @brief Indication that replay protection list is full when trying to process + * a message + */ + +/** @brief Identifier of the replay_protection_list_full event */ +#define sl_btmesh_evt_test_replay_protection_list_full_id 0x042200a8 + +/** @} */ // end addtogroup sl_btmesh_evt_test_replay_protection_list_full + +/***************************************************************************//** + * + * Get the network transmit state of a node. + * + * @param[out] count Number of network layer transmissions beyond the initial + * one. Range: 0-7. + * @param[out] interval Transmit interval steps. The interval between + * transmissions is a random value between 10*(1+steps) and 10*(2+steps) + * milliseconds. For example, for a value of 2, the interval is between 30 and + * 40 milliseconds. Range: 0-31. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_nettx(uint8_t *count, uint8_t *interval); + +/***************************************************************************//** + * + * Set the network transmit state of a node locally. Normally, the network + * transmit state is controlled by the Provisioner. This command overrides any + * setting done by the Provisioner. + * + * @param[in] count Number of network layer transmissions beyond the initial + * one. Range: 0-7. + * @param[in] interval Transmit interval steps. The interval between + * transmissions is a random value between 10*(1+steps) and 10*(2+steps) + * milliseconds. For example, for a value of 2 the interval would be between + * 30 and 40 milliseconds. Range: 0-31. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_nettx(uint8_t count, uint8_t interval); + +/***************************************************************************//** + * + + * + * @param[out] enabled State value indicating whether the relay functionality is + * not enabled on the node (0), is enabled on the node (1), or is not + * available (2). + * @param[out] count Number of relay transmissions beyond the initial one. + * Range: 0-7. + * @param[out] interval Relay retransmit interval steps. The interval between + * transmissions is 10*(1+steps) milliseconds. Range: 0-31. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_relay(uint8_t *enabled, + uint8_t *count, + uint8_t *interval); + +/***************************************************************************//** + * + * Set the relay state and the relay retransmit state of a node locally. + * Normally, these states are controlled by the Provisioner. This command + * overrides any settings done by the Provisioner. + * + * @param[in] enabled Indicates whether the relay functionality is enabled on + * the node (1) or not (0); value indicating disabled (2) can't be set. + * @param[in] count Number of relay transmissions beyond the initial one. Range: + * 0-7. + * @param[in] interval Relay retransmit interval steps. The interval between + * transmissions is 10*(1+steps) milliseconds. Range: 0-31. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_relay(uint8_t enabled, + uint8_t count, + uint8_t interval); + +/***************************************************************************//** + * + * Set the non-default advertisement and scanning parameters used in mesh + * communications. Call this command before @ref sl_btmesh_node_init or @ref + * sl_btmesh_prov_init for the settings to take effect. This is a deprecated + * function. Please use @ref sl_btmesh_test_set_adv_params and @ref + * sl_btmesh_test_set_scan_params + * + * @param[in] adv_interval_min Minimum advertisement interval. Value is in units + * of 0.625 ms. Default value is 32 (20 ms). Must be equal to or greater than + * 32. + * @param[in] adv_interval_max Maximum advertisement interval. Value is in units + * of 0.625 ms. Must be equal to or greater than the minimum interval. Default + * value is 32 (20 ms). Must be equal to or less than 16384 (0x4000), which is + * 10.24s. + * @param[in] adv_repeat_packets Number of times to repeat each packet on all + * selected advertisement channels. Range: 1-5. Default value is 1. + * @param[in] adv_use_random_address Bluetooth address type. Range: 0: use + * public address, 1: use random address. Default value: 1 (random address). + * @param[in] adv_channel_map Advertisement channel selection bitmask. Range: + * 0x1-0x7. Default value: 7 (all channels) + * @param[in] scan_interval Scan interval. Value is in units of 0.625 ms. Range: + * 0x0004 to 0x4000 (time range of 2.5 ms to 10.24 s). Default value is 160 + * (100 ms). + * @param[in] scan_window Scan window. Value is in units of 0.625 ms. Must be + * equal to or less than the scan interval. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +SL_BGAPI_DEPRECATED sl_status_t sl_btmesh_test_set_adv_scan_params(uint16_t adv_interval_min, + uint16_t adv_interval_max, + uint8_t adv_repeat_packets, + uint8_t adv_use_random_address, + uint8_t adv_channel_map, + uint16_t scan_interval, + uint16_t scan_window); + +/***************************************************************************//** + * + * By default, IV index update is limited in how often the update procedure can + * be performed. This test command can be called to set IV update test mode + * where any time limits are ignored. + * + * @param[in] mode Whether test mode is enabled (1) or disabled (0). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_ivupdate_test_mode(uint8_t mode); + +/***************************************************************************//** + * + * Get the current IV update test mode. See @ref + * sl_btmesh_test_set_ivupdate_test_mode for details. + * + * @param[out] mode Indicates whether test mode is enabled (1) or disabled (0). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_ivupdate_test_mode(uint8_t *mode); + +/***************************************************************************//** + * + * Set the delay in milliseconds between sending consecutive segments of a + * segmented message. The default value is 0. Note that this command needs to be + * called before @ref sl_btmesh_node_init or @ref sl_btmesh_prov_init for the + * settings to take effect. + * + * @param[in] delay Number of milliseconds to delay each segment after the + * first. Must be equal to or less than 160. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_segment_send_delay(uint8_t delay); + +/***************************************************************************//** + * + * Forcefully change the IV update state on the device. Normally, the state + * changes as a result of an IV index update procedure progressing from one + * state to the next. + * + * @param[in] state Indicates whether IV update state should be entered (1) or + * exited (0). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_ivupdate_state(uint8_t state); + +/***************************************************************************//** + * + * Send secure network beacons for every network key on the device, regardless + * of beacon configuration state or how many beacons sent by other devices have + * been observed. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_send_beacons(); + +/***************************************************************************//** + * + * Bind a Model to an Appkey locally. + * + * @param[in] elem_index The index of the target Element, 0 is primary element + * @param[in] appkey_index The Appkey to use for binding + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for SIG + * models. + * @param[in] model_id Model ID + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_bind_local_model_app(uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id, + uint16_t model_id); + +/***************************************************************************//** + * + * Remove a binding between a model and an application key locally. + * + * @param[in] elem_index The index of the target element, 0 is primary element + * @param[in] appkey_index The Appkey to use for binding + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for SIG + * models. + * @param[in] model_id Model ID + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_unbind_local_model_app(uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id, + uint16_t model_id); + +/***************************************************************************//** + * + * Add an address to a local model's subscription list. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID + * @param[in] sub_address The address to add to the subscription list + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_add_local_model_sub(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address); + +/***************************************************************************//** + * + * Remove an address from a local model's subscription list. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID + * @param[in] sub_address The address to remove from the subscription list + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_remove_local_model_sub(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address); + +/***************************************************************************//** + * + * Add a virtual address to a local model's subscription list. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID + * @param[in] sub_address_len Length of data in @p sub_address + * @param[in] sub_address The Label UUID to add to the subscription list. The + * array must be exactly 16 bytes long. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_add_local_model_sub_va(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + size_t sub_address_len, + const uint8_t* sub_address); + +/***************************************************************************//** + * + * Remove a virtual address from a local model's subscription list. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID + * @param[in] sub_address_len Length of data in @p sub_address + * @param[in] sub_address The Label UUID to remove from the subscription list. + * The array must be exactly 16 bytes long. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_remove_local_model_sub_va(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + size_t sub_address_len, + const uint8_t* sub_address); + +/***************************************************************************//** + * + * Get all entries in a local model's subscription list. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID + * @param[in] max_addresses_size Size of output buffer passed in @p addresses + * @param[out] addresses_len On return, set to the length of output data written + * to @p addresses + * @param[out] addresses List of 16-bit Mesh addresses; empty if not subscribed + * to any address. Ignore if the result code is non-zero. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_local_model_sub(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + size_t max_addresses_size, + size_t *addresses_len, + uint8_t *addresses); + +/***************************************************************************//** + * + * Set a local model's publication address, key, and parameters. + * + * @param[in] elem_index The index of the target element, where 0 is the primary + * element + * @param[in] appkey_index The application key index to use for the application + * messages published + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID + * @param[in] pub_address The address to publish to + * @param[in] ttl Time-to-Live value for published messages. Valid values: + * range[0 - 127] and 255. + * @param[in] period Publication period encoded as step count and step + * resolution. The encoding is as follows: + * - Bits 0..5: Step count + * - Bits 6..7: Step resolution: + * - 00: 100 milliseconds + * - 01: 1 second + * - 10: 10 seconds + * - 11: 10 minutes + * @param[in] retrans @parblock + * Retransmission count and interval, which controls number of times that the + * model re-publishes the same message after the initial publish transmission + * and the cadence of retransmissions. + * + * Retransmission count is encoded in the three low bits of the value, ranging + * from 0 to 7. Default value is 0 (no retransmissions). + * + * Retransmission interval is encoded in the five high bits of the value, + * ranging from 0 to 31, in 50-millisecond units. Value of 0 corresponds to 50 + * ms, while value of 31 corresponds to 1600 ms. + * @endparblock + * @param[in] credentials Friendship credentials flag + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_local_model_pub(uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t pub_address, + uint8_t ttl, + uint8_t period, + uint8_t retrans, + uint8_t credentials); + +/***************************************************************************//** + * + * Set a model's publication virtual address, key, and parameters. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] appkey_index The application key index to use for the published + * messages + * @param[in] vendor_id Vendor ID of the configured model. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID of the configured model + * @param[in] ttl Publication time-to-live value. Valid values: range[0 - 127] + * and 255. + * @param[in] period Publication period encoded as step count and step + * resolution. The encoding is as follows: + * - Bits 0..5: Step count + * - Bits 6..7: Step resolution: + * - 00: 100 milliseconds + * - 01: 1 second + * - 10: 10 seconds + * - 11: 10 minutes + * @param[in] retrans See documentation of @ref + * sl_btmesh_test_set_local_model_pub for details. + * @param[in] credentials Friendship credentials flag + * @param[in] pub_address_len Length of data in @p pub_address + * @param[in] pub_address The Label UUID to publish to. The byte array must be + * exactly 16 bytes long. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_local_model_pub_va(uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t ttl, + uint8_t period, + uint8_t retrans, + uint8_t credentials, + size_t pub_address_len, + const uint8_t* pub_address); + +/***************************************************************************//** + * + * Get a local model's publication address, key, and parameters. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID + * @param[out] appkey_index The application key index used for the application + * messages published + * @param[out] pub_address The address published to + * @param[out] ttl Time-to-Live value for published messages + * @param[out] period Publication period encoded as step count and step + * resolution. The encoding is as follows: + * - Bits 0..5: Step count + * - Bits 6..7: Step resolution: + * - 00: 100 milliseconds + * - 01: 1 second + * - 10: 10 seconds + * - 11: 10 minutes + * @param[out] retrans See documentation of @ref + * sl_btmesh_test_set_local_model_pub for details. + * @param[out] credentials Friendship credentials flag + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_local_model_pub(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t *appkey_index, + uint16_t *pub_address, + uint8_t *ttl, + uint8_t *period, + uint8_t *retrans, + uint8_t *credentials); + +/***************************************************************************//** + * + * Set local node heartbeat subscription parameters. Normally heartbeat + * subscription is controlled by the Provisioner. + * + * @param[in] subscription_source Source address for heartbeat messages. Must be + * either a unicast address or the unassigned address, in which case heartbeat + * messages are not processed. + * @param[in] subscription_destination Destination address for heartbeat + * messages. The address must be either the unicast address of the primary + * element of the node, a group address, or the unassigned address. If it is + * the unassigned address, heartbeat messages are not processed. + * @param[in] period_log Heartbeat subscription period setting. Valid values are + * as follows: + * - 0x00: Heartbeat messages are not received + * - 0x01 .. 0x11: Node will receive heartbeat messages for 2^(n-1) + * seconds + * - 0x12 .. 0xff: Prohibited + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_local_heartbeat_subscription(uint16_t subscription_source, + uint16_t subscription_destination, + uint8_t period_log); + +/***************************************************************************//** + * + * Get the local node heartbeat subscription state. + * + * @param[out] count Number of received heartbeat messages + * @param[out] hop_min Minimum observed hop count in heartbeat messages + * @param[out] hop_max Maximum observed hop count in heartbeat messages + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_local_heartbeat_subscription(uint16_t *count, + uint8_t *hop_min, + uint8_t *hop_max); + +/***************************************************************************//** + * + * Get the heartbeat publication state of a local node. + * + * @param[out] publication_address Heartbeat publication address + * @param[out] count Heartbeat publication remaining count + * @param[out] period_log Heartbeat publication period setting. Valid values are + * as follows: + * - 0x00: Heartbeat messages are not sent + * - 0x01 .. 0x11: Node will send a heartbeat message every 2^(n-1) + * seconds + * - 0x12 .. 0xff: Prohibited + * @param[out] ttl Time-to-live parameter for heartbeat messages + * @param[out] features Heartbeat trigger setting + * @param[out] publication_netkey_index Index of the network key used to encrypt + * heartbeat messages + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_local_heartbeat_publication(uint16_t *publication_address, + uint8_t *count, + uint8_t *period_log, + uint8_t *ttl, + uint16_t *features, + uint16_t *publication_netkey_index); + +/***************************************************************************//** + * + * Set the heartbeat publication state of a local node. + * + * @param[in] publication_address Heartbeat publication address. The address + * can't be a virtual address. Note that it can be the unassigned address, in + * which case the heartbeat publishing is disabled. + * @param[in] count_log Heartbeat publication count setting. Valid values are as + * follows: + * - 0x00: Heartbeat messages are not sent + * - 0x01 .. 0x11: Node will send 2^(n-1) heartbeat messages + * - 0x12 .. 0xfe: Prohibited + * - 0xff: Hearbeat messages are sent indefinitely + * @param[in] period_log Heartbeat publication period setting. Valid values are + * as follows: + * - 0x00: Heartbeat messages are not sent + * - 0x01 .. 0x11: Node will send a heartbeat message every 2^(n-1) + * seconds + * - 0x12 .. 0xff: Prohibited + * @param[in] ttl Time-to-live parameter for heartbeat messages. Valid values: + * range[0 - 127]. + * @param[in] features @parblock + * Heartbeat trigger setting. For bits set in the bitmask, reconfiguration of + * the node feature associated with the bit will result in the node emitting a + * heartbeat message. Valid values are as follows: + * - Bit 0: Relay feature + * - Bit 1: Proxy feature + * - Bit 2: Friend feature + * - Bit 3: Low power feature + * + * Remaining bits are reserved for future use. + * @endparblock + * @param[in] publication_netkey_index Index of the network key used to encrypt + * heartbeat messages + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_local_heartbeat_publication(uint16_t publication_address, + uint8_t count_log, + uint8_t period_log, + uint8_t ttl, + uint16_t features, + uint16_t publication_netkey_index); + +/***************************************************************************//** + * + * Deprecated . Use the following commands instead: + * - @ref sl_btmesh_test_set_beacon for setting secure network beacon state + * - @ref sl_btmesh_test_set_default_ttl for setting default TTL state + * - @ref sl_btmesh_test_set_friend for setting friend state + * - @ref sl_btmesh_test_set_gatt_proxy for setting GATT proxy state + * - @ref sl_btmesh_test_set_identity for setting node identity state + * - @ref sl_btmesh_test_set_nettx for setting network transmit state + * - @ref sl_btmesh_test_set_relay for setting relay and relay retransmit + * state + * + * Set a state to a value in the local Configuration Server model. Use for + * testing and debugging purposes only. + * + * @param[in] id Enum @ref sl_btmesh_node_config_state_t. The State to modify + * @param[in] netkey_index Network key index; ignored for node-wide states + * @param[in] value_len Length of data in @p value + * @param[in] value The new value + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +SL_BGAPI_DEPRECATED sl_status_t sl_btmesh_test_set_local_config(uint16_t id, + uint16_t netkey_index, + size_t value_len, + const uint8_t* value); + +/***************************************************************************//** + * + * Deprecated . Use the following commands instead: + * - @ref sl_btmesh_test_get_beacon for setting secure network beacon state + * - @ref sl_btmesh_test_get_default_ttl for setting default TTL state + * - @ref sl_btmesh_test_get_friend for setting friend state + * - @ref sl_btmesh_test_get_gatt_proxy for setting GATT proxy state + * - @ref sl_btmesh_test_get_identity for setting node identity state + * - @ref sl_btmesh_test_get_nettx for setting network transmit state + * - @ref sl_btmesh_test_get_relay for setting relay and relay retransmit + * state + * + * Get the value of a state in the Configuration Server model. Use this for + * testing and debugging purposes only. + * + * @param[in] id Enum @ref sl_btmesh_node_config_state_t. The state to read + * @param[in] netkey_index Network key index; ignored for node-wide states + * @param[in] max_data_size Size of output buffer passed in @p data + * @param[out] data_len On return, set to the length of output data written to + * @p data + * @param[out] data Raw binary value + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +SL_BGAPI_DEPRECATED sl_status_t sl_btmesh_test_get_local_config(uint16_t id, + uint16_t netkey_index, + size_t max_data_size, + size_t *data_len, + uint8_t *data); + +/***************************************************************************//** + * + * Add a network or application key locally. + * + * @param[in] key_type Enum @ref sl_btmesh_test_key_type_t. 0 for network key, 1 + * for application key + * @param[in] key Key data + * @param[in] key_index Index for the added key (must be unused) + * @param[in] netkey_index Network key index to which the application key is + * bound; ignored for network keys + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_add_local_key(uint8_t key_type, + aes_key_128 key, + uint16_t key_index, + uint16_t netkey_index); + +/***************************************************************************//** + * + * Delete a network or application key locally. + * + * @param[in] key_type Enum @ref sl_btmesh_test_key_type_t. 0 for network key, 1 + * for application key + * @param[in] key_index Index of the key to delete + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_remove_local_key(uint8_t key_type, + uint16_t key_index); + +/***************************************************************************//** + * + * Update the network or application key value locally. + * + * Copies the existing network key value to the old value and replaces the + * current value with the given key data. + * + * Note that the standard way to update keys on the Provisioner as well as on + * nodes is to run the key refresh procedure. This command is for debugging + * only. + * + * @param[in] key_type Enum @ref sl_btmesh_test_key_type_t. 0 for network key, 1 + * for application key + * @param[in] key Key data + * @param[in] key_index Index for the key to update + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_update_local_key(uint8_t key_type, + aes_key_128 key, + uint16_t key_index); + +/***************************************************************************//** + * + * Change the transport layer segmentation and reassembly configuration values. + * This command must be issued before initializing the Mesh stack or the changes + * will not take effect. + * + * @param[in] incomplete_timer_ms Maximum timeout before a transaction expires, + * regardless of other parameters. Value is in milliseconds. Default = 10000 + * (10 seconds). + * @param[in] pending_ack_base_ms Base time to wait at the receiver before + * sending a transport layer acknowledgment. Value is in milliseconds. Default + * = 150. + * @param[in] pending_ack_mul_ms The time-to-live multiplier to add to the base + * acknowledgment timer. Value is in milliseconds. Default = 50. + * @param[in] wait_for_ack_base_ms Base time to wait for an acknowledgment at + * the sender before retransmission. Value is in milliseconds. Default = 200. + * @param[in] wait_for_ack_mul_ms The time-to-live multiplier to add to the base + * retransmission timer. Value is in milliseconds. Default = 50. + * @param[in] max_send_rounds Number of attempts to send fragments of a + * segmented message, including the initial TX. Default = 3. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_sar_config(uint32_t incomplete_timer_ms, + uint32_t pending_ack_base_ms, + uint32_t pending_ack_mul_ms, + uint32_t wait_for_ack_base_ms, + uint32_t wait_for_ack_mul_ms, + uint8_t max_send_rounds); + +/***************************************************************************//** + * + * Disable or enable advertisement bearer for sending. + * + * @param[in] state 0: disable advertisement, 1: enable advertisement. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_adv_bearer_state(uint8_t state); + +/***************************************************************************//** + * + * Get the device key with the address of the node's primary element. + * + * @param[in] address Address of the node + * @param[out] device_key Device key, 16-bytes + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_prov_get_device_key(uint16_t address, + aes_key_128 *device_key); + +/***************************************************************************//** + * + * Prepare the key refresh by feeding the new network key and all needed + * application keys. The function can be called multiple times to include more + * application keys. The network key must be the same in all calls. If the + * network key is changed, the network key from the 1st command is used. + * Sending application key data with length zero results in all initialization + * data being forgotten unless this is done in the first prepare command i.e., + * trying to update only the network key. Also starting the key refresh + * procedure results in all the preparation data being forgotten. + * + * @param[in] net_key New net key + * @param[in] app_keys_len Length of data in @p app_keys + * @param[in] app_keys list of new application keys, 16-bytes each + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_prov_prepare_key_refresh(aes_key_128 net_key, + size_t app_keys_len, + const uint8_t* app_keys); + +/***************************************************************************//** + * + * Cancel sending a segmented message. + * + * @param[in] src_addr Source address for the segmented message + * @param[in] dst_addr Destination address for the segmented message + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_cancel_segmented_tx(uint16_t src_addr, + uint16_t dst_addr); + +/***************************************************************************//** + * + * Set the IV index value of the node. + * + * @param[in] iv_index IV Index value to use + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_iv_index(uint32_t iv_index); + +/***************************************************************************//** + * + * Set the current sequence number of an element. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] seqnum Sequence number to set on the target element + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_element_seqnum(uint16_t elem_index, + uint32_t seqnum); + +/***************************************************************************//** + * @cond RESTRICTED + * + * Restricted/experimental API. Contact Silicon Labs sales for more information. + * + * Set the model-specific option. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID + * @param[in] option Option to set + * @param[in] value Value for the option + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @endcond + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_model_option(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t option, + uint32_t value); + +/***************************************************************************//** + * + * Get the application key bindings of a model. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID + * @param[in] max_appkeys_size Size of output buffer passed in @p appkeys + * @param[out] appkeys_len On return, set to the length of output data written + * to @p appkeys + * @param[out] appkeys List of 16-bit application key indices; empty if model + * has not been bound to any application key. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_local_model_app_bindings(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + size_t max_appkeys_size, + size_t *appkeys_len, + uint8_t *appkeys); + +/***************************************************************************//** + * + * Get the replay protection list entry for an address. + * + * @param[in] address Source address to check + * @param[out] seq Stored sequence number for the address; not a valid value if + * the result is not bg_err_success. + * @param[out] seq_ivindex IV index in use at the time the sequence number was + * stored in the replay protection list; not a valid value if result is not + * bg_err_success. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_replay_protection_list_entry(uint16_t address, + uint32_t *seq, + uint32_t *seq_ivindex); + +/***************************************************************************//** + * + * Clear the replay protection list entry for an address. Use this command + * carefully because it may expose the node to replay attacks when misused. + * + * @param[in] address Source address to use in finding the entry + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_clear_replay_protection_list_entry(uint16_t address); + +/***************************************************************************//** + * + * Enable or disable replay protection list diagnostic events. When enabled, + * events related to the replay protection list changes are generated. + * + * @param[in] enable Enable (nonzero) or disable (zero) diagnostic events for + * replay protection list + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_replay_protection_list_diagnostics(uint8_t enable); + +/***************************************************************************//** + * @cond RESTRICTED + * + * Restricted/experimental API. Contact Silicon Labs sales for more information. + * + * Get a model-specific option. + * + * @param[in] elem_index The index of the target element, 0 is the primary + * element + * @param[in] vendor_id Vendor ID for vendor-specific models. Use 0xffff for + * Bluetooth SIG models. + * @param[in] model_id Model ID + * @param[in] option Option to get. + * @param[out] value Value for the option. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @endcond + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_model_option(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t option, + uint32_t *value); + +/***************************************************************************//** + * + * Get node default TTL state. + * + * @param[out] value Default time-to-live value. Valid value range is from 2 to + * 127 for relayed PDUs, and 0 to indicate non-relayed PDUs + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_default_ttl(uint8_t *value); + +/***************************************************************************//** + * + * Set node default TTL state. + * + * @param[in] set_value Default time-to-live value. See @ref + * sl_btmesh_test_get_default_ttl for details. + * @param[out] value Default time-to-live value. See @ref + * sl_btmesh_test_get_default_ttl for details. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_default_ttl(uint8_t set_value, uint8_t *value); + +/***************************************************************************//** + * + * Get node GATT proxy state. + * + * @param[out] value GATT proxy value of the node. Valid values are: + * - 0: GATT proxy feature is disabled + * - 1: GATT proxy feature is enabled + * - 2: GATT proxy feature is not supported + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_gatt_proxy(uint8_t *value); + +/***************************************************************************//** + * + * Set node GATT proxy state. + * + * @param[in] set_value GATT proxy value to set. Valid values are: + * - 0: Proxy feature is disabled + * - 1: Proxy feature is enabled + * @param[out] value GATT proxy state value. See @ref + * sl_btmesh_test_get_gatt_proxy for details. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_gatt_proxy_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_gatt_proxy(uint8_t set_value, uint8_t *value); + +/***************************************************************************//** + * + * Get node identity state. + * + * @param[in] get_netkey_index Network key index for which the state is queried + * @param[out] netkey_index Network key index for which the state is queried + * @param[out] value Identity state of the node for the used network index. + * Valid values are as follows: + * - 0: Node identity advertising is disabled + * - 1: Node identity advertising is enabled + * - 2: Node identity advertising is not supported + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_identity(uint16_t get_netkey_index, + uint16_t *netkey_index, + uint8_t *value); + +/***************************************************************************//** + * + * Set node identity state. + * + * @param[in] set_netkey_index Network key index for which the state is + * configured + * @param[in] set_value Identity value to set. Valid values are: + * - 0: Node identity advertising is disabled + * - 1: Node identity advertising is enabled + * @param[out] netkey_index Network key index for which the state is set + * @param[out] value Identity state of the node for the used network index. See + * @ref sl_btmesh_test_get_identity for details + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_identity(uint16_t set_netkey_index, + uint8_t set_value, + uint16_t *netkey_index, + uint8_t *value); + +/***************************************************************************//** + * + * Get node friend state. + * + * @param[out] value Friend state value. Valid values are: + * - 0: Friend feature is not enabled + * - 1: Friend feature is enabled + * - 2: Friend feature is not supported + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_friend(uint8_t *value); + +/***************************************************************************//** + * + * Set node friend state. + * + * @param[in] set_value Friend value to set. Valid values are: + * - 0: Friend feature is not enabled + * - 1: Friend feature is enabled + * @param[out] value Friend state value. See @ref sl_btmesh_test_get_friend for + * detais. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_friend(uint8_t set_value, uint8_t *value); + +/***************************************************************************//** + * + * Get node secure network beacon state. + * + * @param[out] value Secure network beacon value. Valid values are: + * - 0: Node is not broadcasting secure network beacons + * - 1: Node is broadcasting secure network beacons + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_beacon(uint8_t *value); + +/***************************************************************************//** + * + * Set node secure network beacon state. + * + * @param[in] set_value Secure network beacon value to set. Valid values are: + * - 0: Node is not broadcasting secure network beacons + * - 1: Node is broadcasting secure network beacons + * @param[out] value Secure network beacon value of the node. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_beacon(uint8_t set_value, uint8_t *value); + +/***************************************************************************//** + * + * Get node private identity state. + * + * @param[in] get_netkey_index Network key index for which the state is queried + * @param[out] netkey_index Network key index for which the state is queried + * @param[out] value Private identity state of the node for the used network + * index. Valid values are as follows: + * - 0: Node private identity advertising is disabled + * - 1: Node private identity advertising is enabled + * - 2: Node private identity advertising is not supported + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_get_private_identity(uint16_t get_netkey_index, + uint16_t *netkey_index, + uint8_t *value); + +/***************************************************************************//** + * + * Set node private identity state. + * + * @param[in] set_netkey_index Network key index for which the state is + * configured + * @param[in] set_value Identity value to set. Valid values are: + * - 0: Node private identity advertising is disabled + * - 1: Node private identity advertising is enabled + * @param[out] netkey_index Network key index for which the state is set + * @param[out] value Identity state of the node for the used network index. See + * @ref sl_btmesh_test_get_private_identity for details + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_private_identity(uint16_t set_netkey_index, + uint8_t set_value, + uint16_t *netkey_index, + uint8_t *value); + +/***************************************************************************//** + * + * Set PB-ADV provisioning bearer timing. This controls how PB-ADV provisioning + * PDUs are transmitted by the device; each transmission is preceded by a delay + * that is computed by adding together a minimum interval with a random + * variation. + * + * If this setting is not applied, a default interval of 20 ms and a default + * variation of 30 ms is used, meaning that a single advertisement is sent with + * a delay ranging from 20 to 50 ms. + * + * Note that using a non-default setting is against the Mesh specification and + * should only used for troubleshooting. + * + * @param[in] pbadv_interval_ms PB-ADV Tx interval. Value is in milliseconds. + * Range: 10 to 1000. + * @param[in] pbadv_variation_ms PB-ADV Tx interval variation. A random delay + * between 0 and this value is added to the PB-ADV Tx interval when + * transmitting a PB-ADV PDU. Value is in milliseconds. Range: 10 to 1000. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_adv_provisioning_bearer_timing(uint16_t pbadv_interval_ms, + uint16_t pbadv_variation_ms); + +/***************************************************************************//** + * + * Change keyrefresh phase of of a network id. + * + * Update is done with following logic depending on current keyrefresh phase: + * - Phase 0 : return an errorcode for wrong phase + * - Phase 1 : set phase to 2 + * - Phase 2 : set phase to 3 + * - Phase 3 : Leave phase 3 as is + * + * This command is for debugging only + * + * @param[in] network_key_index Index for the key to put into next phase + * @param[out] phase Key refresh phase state of the node for the given network + * key. Valid values are: + * - 0: Normal operation + * - 1: First phase of key refresh procedure + * - 2: Second phase of key refresh procedure + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_update_keyrefresh_phase(uint16_t network_key_index, + uint8_t *phase); + +/***************************************************************************//** + * + * Send private network beacons for every network key on the device, regardless + * of beacon configuration state or how many beacons sent by other devices have + * been observed. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_send_private_beacons(); + +/***************************************************************************//** + * + * Set the non-default advertisement parameters used in mesh communications. + * Call this command before @ref sl_btmesh_node_init or @ref sl_btmesh_prov_init + * for the settings to take effect. + * + * @param[in] adv_interval_min Minimum advertisement interval. Value is in units + * of 0.625 ms. Default value is 32 (20 ms). Must be equal to or greater than + * 32. + * @param[in] adv_interval_max Maximum advertisement interval. Value is in units + * of 0.625 ms. Must be equal to or greater than the minimum interval. Default + * value is 32 (20 ms). Must be equal to or less than 16384. + * @param[in] adv_repeat_packets Number of times to repeat each packet on all + * selected advertisement channels. Range: 1-5. Default value is 1. + * @param[in] adv_channel_map Advertisement channel selection bitmask. Range: + * 0x1-0x7. Default value: 7 (all channels) + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_adv_params(uint16_t adv_interval_min, + uint16_t adv_interval_max, + uint8_t adv_repeat_packets, + uint8_t adv_channel_map); + +/***************************************************************************//** + * + * Set the non-default scanning parameters used in mesh communications. Call + * this command before @ref sl_btmesh_node_init or @ref sl_btmesh_prov_init for + * the settings to take effect. + * + * @param[in] scan_interval Scan interval. Value is in units of 0.625 ms. Range: + * 0x0004 to 0x4000 (time range of 2.5 ms to 10.24 s). Default value is 160 + * (100 ms). + * @param[in] scan_window Scan window. Value is in units of 0.625 ms. Must be + * equal to or less than the scan interval. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_set_scan_params(uint16_t scan_interval, + uint16_t scan_window); + +/***************************************************************************//** + * + * Set advertiser to use ramdom or public address. New setting will take effect + * with the next advertisement. + * + * @param[in] address_type Address type: + * - 0: Reset random address usage. Public address will used for + * advertisements. + * - 1: Set random address usage. New random address will be + * generated and taken into use. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_test_adv_use_random_address(uint8_t address_type); + +/** @} */ // end addtogroup sl_btmesh_test + +/** + * @addtogroup sl_btmesh_lpn Bluetooth Mesh Low Power Node API + * @{ + * + * @brief Bluetooth Mesh Low Power Node API + * + * These commands and events are for low-power operation, available in nodes + * which have the LPN feature. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_lpn_init_id 0x00230028 +#define sl_btmesh_cmd_lpn_deinit_id 0x01230028 +#define sl_btmesh_cmd_lpn_establish_friendship_id 0x03230028 +#define sl_btmesh_cmd_lpn_poll_id 0x04230028 +#define sl_btmesh_cmd_lpn_terminate_friendship_id 0x05230028 +#define sl_btmesh_cmd_lpn_config_id 0x06230028 +#define sl_btmesh_rsp_lpn_init_id 0x00230028 +#define sl_btmesh_rsp_lpn_deinit_id 0x01230028 +#define sl_btmesh_rsp_lpn_establish_friendship_id 0x03230028 +#define sl_btmesh_rsp_lpn_poll_id 0x04230028 +#define sl_btmesh_rsp_lpn_terminate_friendship_id 0x05230028 +#define sl_btmesh_rsp_lpn_config_id 0x06230028 + +/** + * @brief Key values to identify LPN configurations + */ +typedef enum +{ + sl_btmesh_lpn_queue_length = 0x0, /**< (0x0) Minimum queue length that the + friend must support. Choose an + appropriate length based on the + expected message frequency and LPN + sleep period because messages that + do not fit into the friend queue are + dropped. Note that the given value + is rounded up to the nearest power + of 2. Range: 2..128 */ + sl_btmesh_lpn_poll_timeout = 0x1, /**< (0x1) Poll timeout in milliseconds, + which is the longest time that LPN + sleeps in between querying its + friend for queued messages. Long + poll timeout allows the LPN to sleep + for longer periods, at the expense + of increased latency for receiving + messages. Note that the given value + is rounded up to the nearest 100 ms + Range: 1 s to 95 h 59 min 59 s 900 + ms */ + sl_btmesh_lpn_receive_delay = 0x2, /**< (0x2) Receive delay in milliseconds. + Receive delay is the time between + the LPN sending a request and + listening for a response. Receive + delay allows the friend node time to + prepare the message and LPN to + sleep. Range: 10 ms to 255 ms The + default receive delay in 10 ms. */ + sl_btmesh_lpn_request_retries = 0x3, /**< (0x3) Request retry is the number of + retry attempts to repeat e.g., the + friend poll message if the friend + update was not received by the LPN. + Range is from 0 to 10, default is 3 */ + sl_btmesh_lpn_retry_interval = 0x4, /**< (0x4) Time interval between retry + attempts in milliseconds. Range is 0 + to 100 ms. */ + sl_btmesh_lpn_clock_accuracy = 0x5 /**< (0x5) Clock accuracy in ppm, which + will be taken into account when + opening and closing the receive + window, and determining the poll + timeout. Should be used with care, + because inaccurate clock can + increase the receive window lenght + to up to 2,5 times in some cases. + Default value is 0. */ +} sl_btmesh_lpn_settings_t; + +/** + * @addtogroup sl_btmesh_evt_lpn_friendship_established sl_btmesh_evt_lpn_friendship_established + * @{ + * @brief Indicate that a friendship has been established, received as a + * response to the @ref sl_btmesh_lpn_establish_friendship command. + */ + +/** @brief Identifier of the friendship_established event */ +#define sl_btmesh_evt_lpn_friendship_established_id 0x002300a8 + +/***************************************************************************//** + * @brief Data structure of the friendship_established event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lpn_friendship_established_s +{ + uint16_t netkey_index; /**< Network key index */ + uint16_t friend_address; /**< Friend node address */ +}); + +typedef struct sl_btmesh_evt_lpn_friendship_established_s sl_btmesh_evt_lpn_friendship_established_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lpn_friendship_established + +/** + * @addtogroup sl_btmesh_evt_lpn_friendship_failed sl_btmesh_evt_lpn_friendship_failed + * @{ + * @brief Indicate that the friendship establishment has failed, received as a + * response to the @ref sl_btmesh_lpn_establish_friendship command. + */ + +/** @brief Identifier of the friendship_failed event */ +#define sl_btmesh_evt_lpn_friendship_failed_id 0x012300a8 + +/***************************************************************************//** + * @brief Data structure of the friendship_failed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lpn_friendship_failed_s +{ + uint16_t netkey_index; /**< Network key index */ + uint16_t reason; /**< Reason for friendship establishment failure */ +}); + +typedef struct sl_btmesh_evt_lpn_friendship_failed_s sl_btmesh_evt_lpn_friendship_failed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lpn_friendship_failed + +/** + * @addtogroup sl_btmesh_evt_lpn_friendship_terminated sl_btmesh_evt_lpn_friendship_terminated + * @{ + * @brief Indicate that a friendship that was successfully established has been + * terminated, received as a response to the @ref + * sl_btmesh_lpn_terminate_friendship command or when friend not answering to a + * POLL send by @ref sl_btmesh_lpn_poll command + */ + +/** @brief Identifier of the friendship_terminated event */ +#define sl_btmesh_evt_lpn_friendship_terminated_id 0x022300a8 + +/***************************************************************************//** + * @brief Data structure of the friendship_terminated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lpn_friendship_terminated_s +{ + uint16_t netkey_index; /**< Network key index */ + uint16_t reason; /**< Reason for friendship termination */ +}); + +typedef struct sl_btmesh_evt_lpn_friendship_terminated_s sl_btmesh_evt_lpn_friendship_terminated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lpn_friendship_terminated + +/***************************************************************************//** + * + * Initialize the Low Power node (LPN) mode. The node needs to be provisioned + * before calling this command. After the LPN mode is initialized, the node + * can't operate in the network without a Friend node. To establish a friendship + * with a nearby Friend node, use the @ref sl_btmesh_lpn_establish_friendship + * command. Make this call before calling the other commands in this class. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lpn_init(); + +/***************************************************************************//** + * + * Deinitialize the LPN functionality. After calling this command, a possible + * friendship with a Friend node is terminated and the node can operate in the + * network independently. After calling this command, do not call any other + * command in this class before the Low Power mode is @ref sl_btmesh_lpn_init + * again. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lpn_deinit(); + +/***************************************************************************//** + * + * Establish a friendship. After a friendship has been established, the node can + * start saving power. + * + * @param[in] netkey_index Network key index used in friendship request + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lpn_friendship_established + * - @ref sl_btmesh_evt_lpn_friendship_failed + * + ******************************************************************************/ +sl_status_t sl_btmesh_lpn_establish_friendship(uint16_t netkey_index); + +/***************************************************************************//** + * + * Poll the Friend node for stored messages and security updates. This command + * may be used if the application is expecting to receive messages at a specific + * time. However, it is not required for correct operation, because the + * procedure will be performed autonomously before the poll timeout expires. + * + * @param[in] netkey_index Network key index used in poll + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lpn_poll(uint16_t netkey_index); + +/***************************************************************************//** + * + * Terminate an already established friendship. @ref + * sl_btmesh_evt_lpn_friendship_terminated event will be emitted when the + * friendship termination has been completed. + * + * @param[in] netkey_index Network key index used in friendship request + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lpn_friendship_terminated + * + ******************************************************************************/ +sl_status_t sl_btmesh_lpn_terminate_friendship(uint16_t netkey_index); + +/***************************************************************************//** + * + * Configure the parameters for friendship establishment and LPN behavior. + * + * @param[in] setting_id Enum @ref sl_btmesh_lpn_settings_t. Identifies the LPN + * setting to be updated. + * @param[in] value New value for the given setting + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lpn_config(uint8_t setting_id, uint32_t value); + +/** @} */ // end addtogroup sl_btmesh_lpn + +/** + * @addtogroup sl_btmesh_friend Bluetooth Mesh Friend Node API + * @{ + * + * @brief Bluetooth Mesh Friend Node API + * + * These commands and events are for the Friend operation, available in nodes + * which have the Friend feature. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_friend_init_id 0x00240028 +#define sl_btmesh_cmd_friend_deinit_id 0x01240028 +#define sl_btmesh_rsp_friend_init_id 0x00240028 +#define sl_btmesh_rsp_friend_deinit_id 0x01240028 + +/** + * @addtogroup sl_btmesh_evt_friend_friendship_established sl_btmesh_evt_friend_friendship_established + * @{ + * @brief Indicate that a friendship has been established. + */ + +/** @brief Identifier of the friendship_established event */ +#define sl_btmesh_evt_friend_friendship_established_id 0x002400a8 + +/***************************************************************************//** + * @brief Data structure of the friendship_established event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_friend_friendship_established_s +{ + uint16_t netkey_index; /**< Index of the network key used in friendship */ + uint16_t lpn_address; /**< LPN node address */ +}); + +typedef struct sl_btmesh_evt_friend_friendship_established_s sl_btmesh_evt_friend_friendship_established_t; + +/** @} */ // end addtogroup sl_btmesh_evt_friend_friendship_established + +/** + * @addtogroup sl_btmesh_evt_friend_friendship_terminated sl_btmesh_evt_friend_friendship_terminated + * @{ + * @brief Indicate that a friendship that was successfully established has been + * terminated. + */ + +/** @brief Identifier of the friendship_terminated event */ +#define sl_btmesh_evt_friend_friendship_terminated_id 0x012400a8 + +/***************************************************************************//** + * @brief Data structure of the friendship_terminated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_friend_friendship_terminated_s +{ + uint16_t netkey_index; /**< Index of the network key used in friendship */ + uint16_t lpn_address; /**< LPN node address */ + uint16_t reason; /**< Reason for friendship termination */ +}); + +typedef struct sl_btmesh_evt_friend_friendship_terminated_s sl_btmesh_evt_friend_friendship_terminated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_friend_friendship_terminated + +/***************************************************************************//** + * + * Initialize the Friend mode. The node needs to be provisioned before calling + * this command. After the Friend mode is initialized, it is ready to accept + * friend requests from low-power nodes. This call has to be made before calling + * the other commands in this class. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_friend_init(); + +/***************************************************************************//** + * + * Deinitialize the Friend functionality. After calling this command, a possible + * friendship with a Low Power node is terminated and all friendships are + * terminated. After calling this command, don't call other commands in this + * class before the Friend mode is @ref sl_btmesh_friend_init again. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_friend_deinit(); + +/** @} */ // end addtogroup sl_btmesh_friend + +/** + * @addtogroup sl_btmesh_proxy_client Bluetooth Mesh GATT Proxy Client + * @{ + * + * @brief Bluetooth Mesh GATT Proxy Client + * + * Initialize the GATT Proxy client-side functionality. Mesh proxy commands are + * in the mesh_proxy class. This class allows the linker to drop the GATT Proxy + * client code if it is not needed. It is enough to initialize this BGAPI class. + * It contains no commands or events. + */ + +/* Command and Response IDs */ + +/** @} */ // end addtogroup sl_btmesh_proxy_client + +/** + * @addtogroup sl_btmesh_proxy_server Bluetooth Mesh GATT Proxy Server + * @{ + * + * @brief Bluetooth Mesh GATT Proxy Server + * + * Initialize the GATT Proxy server-side functionality. This class allows the + * linker to drop the GATT Proxy server code if it is not needed. It is enough + * to initialize this BGAPI class. It contains no commands or events. + */ + +/* Command and Response IDs */ + +/** @} */ // end addtogroup sl_btmesh_proxy_server + +/** + * @addtogroup sl_btmesh_config_client Bluetooth Mesh Configuration Client Model + * @{ + * + * @brief Bluetooth Mesh Configuration Client Model + * + * Bluetooth mesh stack API for the Mesh Configuration Client + * + * Commands in this class configure nodes in the Mesh network, which includes + * key management, publish and subscribe settings manipulation, and node feature + * configuration. + * + * Requests to nodes are asynchronous. A handle is assigned to each request that + * is pending a reply from a node in the network. The handle can be used to + * query the request status, and to identify the response event from the node. + * Multiple requests can be made in parallel (as long as they are destined to + * different nodes; only one pending request per node is allowed). + * + * Request Management + * - @ref sl_btmesh_config_client_cancel_request : Cancel a request + * - @ref sl_btmesh_config_client_get_request_status : Query current status of + * a request + * - @ref sl_btmesh_config_client_get_default_timeout : Get default request + * timeout + * - @ref sl_btmesh_config_client_set_default_timeout : Set default request + * timeout + * + * Key and Mesh Network Management + * - @ref sl_btmesh_config_client_add_netkey : Deploy a network key to a node + * - @ref sl_btmesh_config_client_remove_netkey : Remove a network key from a + * node + * - @ref sl_btmesh_config_client_list_netkeys : List network keys on a node + * - @ref sl_btmesh_config_client_add_appkey : Deploy an application key to a + * node + * - @ref sl_btmesh_config_client_remove_appkey : Remove an application key + * from a node + * - @ref sl_btmesh_config_client_list_appkeys : List application keys bound + * to a network key on a node + * + * Node Configuration + * - @ref sl_btmesh_config_client_get_dcd : Get device composition data of a + * node + * - @ref sl_btmesh_config_client_reset_node : Reset a node + * - @ref sl_btmesh_config_client_get_default_ttl : Get node default TTL state + * value + * - @ref sl_btmesh_config_client_set_default_ttl : Set node default TTL state + * value + * - @ref sl_btmesh_config_client_get_beacon : Get node secure network beacon + * state value + * - @ref sl_btmesh_config_client_set_beacon : Set node secure network beacon + * state value + * - @ref sl_btmesh_config_client_get_identity : Get node identity advertising + * state value + * - @ref sl_btmesh_config_client_set_identity : Set node identity advertising + * state value + * - @ref sl_btmesh_config_client_get_friend : Get node friend state value + * - @ref sl_btmesh_config_client_set_friend : Set node friend state value + * - @ref sl_btmesh_config_client_get_lpn_polltimeout : Get node LPN poll + * timeout state value + * - @ref sl_btmesh_config_client_get_gatt_proxy : Get node GATT proxy state + * value + * - @ref sl_btmesh_config_client_set_gatt_proxy : Set node GATT proxy state + * value + * - @ref sl_btmesh_config_client_get_relay : Get node relay state value + * - @ref sl_btmesh_config_client_set_relay : Set node relay state value + * - @ref sl_btmesh_config_client_get_network_transmit : Get node network + * transmit state value + * - @ref sl_btmesh_config_client_set_network_transmit : Set node network + * transmit state value + * + * Model Configuration + * - @ref sl_btmesh_config_client_bind_model : Bind a model to an application + * key + * - @ref sl_btmesh_config_client_unbind_model : Remove a model to application + * key binding + * - @ref sl_btmesh_config_client_list_bindings : List model to application + * key bindings on a node + * - @ref sl_btmesh_config_client_add_model_sub : Add a subscription address + * to a model + * - @ref sl_btmesh_config_client_add_model_sub_va : Add a virtual + * subscription address to a model + * - @ref sl_btmesh_config_client_remove_model_sub : Remove a subscription + * address from a model + * - @ref sl_btmesh_config_client_remove_model_sub_va : Remove a virtual + * subscription address from a model + * - @ref sl_btmesh_config_client_set_model_sub : Overwrite the subscription + * list of a model with an address + * - @ref sl_btmesh_config_client_set_model_sub_va : Overwrite the + * subscription list of a model with a virtual address + * - @ref sl_btmesh_config_client_clear_model_sub : Clear the subscription + * list of a model + * - @ref sl_btmesh_config_client_list_subs : Get the subscription list of a + * model + * - @ref sl_btmesh_config_client_get_model_pub : Get a model's publication + * parameters + * - @ref sl_btmesh_config_client_set_model_pub : Set a model's publication + * parameters + * + * Heartbeat + * - @ref sl_btmesh_config_client_get_heartbeat_pub : Get node heartbeat + * publication settings + * - @ref sl_btmesh_config_client_set_heartbeat_pub : Set node heartbeat + * publication settings + * - @ref sl_btmesh_config_client_get_heartbeat_sub : Get node heartbeat + * subscription settings + * - @ref sl_btmesh_config_client_set_heartbeat_sub : Set node heartbeat + * subscription settings + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_config_client_cancel_request_id 0x00270028 +#define sl_btmesh_cmd_config_client_get_request_status_id 0x01270028 +#define sl_btmesh_cmd_config_client_get_default_timeout_id 0x2e270028 +#define sl_btmesh_cmd_config_client_set_default_timeout_id 0x2f270028 +#define sl_btmesh_cmd_config_client_add_netkey_id 0x02270028 +#define sl_btmesh_cmd_config_client_remove_netkey_id 0x03270028 +#define sl_btmesh_cmd_config_client_list_netkeys_id 0x04270028 +#define sl_btmesh_cmd_config_client_add_appkey_id 0x05270028 +#define sl_btmesh_cmd_config_client_remove_appkey_id 0x06270028 +#define sl_btmesh_cmd_config_client_list_appkeys_id 0x07270028 +#define sl_btmesh_cmd_config_client_bind_model_id 0x08270028 +#define sl_btmesh_cmd_config_client_unbind_model_id 0x09270028 +#define sl_btmesh_cmd_config_client_list_bindings_id 0x0a270028 +#define sl_btmesh_cmd_config_client_get_model_pub_id 0x0b270028 +#define sl_btmesh_cmd_config_client_set_model_pub_id 0x0c270028 +#define sl_btmesh_cmd_config_client_set_model_pub_va_id 0x0d270028 +#define sl_btmesh_cmd_config_client_add_model_sub_id 0x0e270028 +#define sl_btmesh_cmd_config_client_add_model_sub_va_id 0x0f270028 +#define sl_btmesh_cmd_config_client_remove_model_sub_id 0x10270028 +#define sl_btmesh_cmd_config_client_remove_model_sub_va_id 0x11270028 +#define sl_btmesh_cmd_config_client_set_model_sub_id 0x12270028 +#define sl_btmesh_cmd_config_client_set_model_sub_va_id 0x13270028 +#define sl_btmesh_cmd_config_client_clear_model_sub_id 0x14270028 +#define sl_btmesh_cmd_config_client_list_subs_id 0x15270028 +#define sl_btmesh_cmd_config_client_get_heartbeat_pub_id 0x16270028 +#define sl_btmesh_cmd_config_client_set_heartbeat_pub_id 0x17270028 +#define sl_btmesh_cmd_config_client_get_heartbeat_sub_id 0x19270028 +#define sl_btmesh_cmd_config_client_set_heartbeat_sub_id 0x1a270028 +#define sl_btmesh_cmd_config_client_get_beacon_id 0x1b270028 +#define sl_btmesh_cmd_config_client_set_beacon_id 0x1c270028 +#define sl_btmesh_cmd_config_client_get_default_ttl_id 0x1d270028 +#define sl_btmesh_cmd_config_client_set_default_ttl_id 0x1e270028 +#define sl_btmesh_cmd_config_client_get_gatt_proxy_id 0x1f270028 +#define sl_btmesh_cmd_config_client_set_gatt_proxy_id 0x20270028 +#define sl_btmesh_cmd_config_client_get_relay_id 0x21270028 +#define sl_btmesh_cmd_config_client_set_relay_id 0x22270028 +#define sl_btmesh_cmd_config_client_get_network_transmit_id 0x23270028 +#define sl_btmesh_cmd_config_client_set_network_transmit_id 0x24270028 +#define sl_btmesh_cmd_config_client_get_identity_id 0x25270028 +#define sl_btmesh_cmd_config_client_set_identity_id 0x26270028 +#define sl_btmesh_cmd_config_client_get_friend_id 0x27270028 +#define sl_btmesh_cmd_config_client_set_friend_id 0x28270028 +#define sl_btmesh_cmd_config_client_get_key_refresh_phase_id 0x29270028 +#define sl_btmesh_cmd_config_client_get_lpn_polltimeout_id 0x2b270028 +#define sl_btmesh_cmd_config_client_get_dcd_id 0x2c270028 +#define sl_btmesh_cmd_config_client_reset_node_id 0x2d270028 +#define sl_btmesh_cmd_config_client_set_request_timeout_for_node_id 0x30270028 +#define sl_btmesh_rsp_config_client_cancel_request_id 0x00270028 +#define sl_btmesh_rsp_config_client_get_request_status_id 0x01270028 +#define sl_btmesh_rsp_config_client_get_default_timeout_id 0x2e270028 +#define sl_btmesh_rsp_config_client_set_default_timeout_id 0x2f270028 +#define sl_btmesh_rsp_config_client_add_netkey_id 0x02270028 +#define sl_btmesh_rsp_config_client_remove_netkey_id 0x03270028 +#define sl_btmesh_rsp_config_client_list_netkeys_id 0x04270028 +#define sl_btmesh_rsp_config_client_add_appkey_id 0x05270028 +#define sl_btmesh_rsp_config_client_remove_appkey_id 0x06270028 +#define sl_btmesh_rsp_config_client_list_appkeys_id 0x07270028 +#define sl_btmesh_rsp_config_client_bind_model_id 0x08270028 +#define sl_btmesh_rsp_config_client_unbind_model_id 0x09270028 +#define sl_btmesh_rsp_config_client_list_bindings_id 0x0a270028 +#define sl_btmesh_rsp_config_client_get_model_pub_id 0x0b270028 +#define sl_btmesh_rsp_config_client_set_model_pub_id 0x0c270028 +#define sl_btmesh_rsp_config_client_set_model_pub_va_id 0x0d270028 +#define sl_btmesh_rsp_config_client_add_model_sub_id 0x0e270028 +#define sl_btmesh_rsp_config_client_add_model_sub_va_id 0x0f270028 +#define sl_btmesh_rsp_config_client_remove_model_sub_id 0x10270028 +#define sl_btmesh_rsp_config_client_remove_model_sub_va_id 0x11270028 +#define sl_btmesh_rsp_config_client_set_model_sub_id 0x12270028 +#define sl_btmesh_rsp_config_client_set_model_sub_va_id 0x13270028 +#define sl_btmesh_rsp_config_client_clear_model_sub_id 0x14270028 +#define sl_btmesh_rsp_config_client_list_subs_id 0x15270028 +#define sl_btmesh_rsp_config_client_get_heartbeat_pub_id 0x16270028 +#define sl_btmesh_rsp_config_client_set_heartbeat_pub_id 0x17270028 +#define sl_btmesh_rsp_config_client_get_heartbeat_sub_id 0x19270028 +#define sl_btmesh_rsp_config_client_set_heartbeat_sub_id 0x1a270028 +#define sl_btmesh_rsp_config_client_get_beacon_id 0x1b270028 +#define sl_btmesh_rsp_config_client_set_beacon_id 0x1c270028 +#define sl_btmesh_rsp_config_client_get_default_ttl_id 0x1d270028 +#define sl_btmesh_rsp_config_client_set_default_ttl_id 0x1e270028 +#define sl_btmesh_rsp_config_client_get_gatt_proxy_id 0x1f270028 +#define sl_btmesh_rsp_config_client_set_gatt_proxy_id 0x20270028 +#define sl_btmesh_rsp_config_client_get_relay_id 0x21270028 +#define sl_btmesh_rsp_config_client_set_relay_id 0x22270028 +#define sl_btmesh_rsp_config_client_get_network_transmit_id 0x23270028 +#define sl_btmesh_rsp_config_client_set_network_transmit_id 0x24270028 +#define sl_btmesh_rsp_config_client_get_identity_id 0x25270028 +#define sl_btmesh_rsp_config_client_set_identity_id 0x26270028 +#define sl_btmesh_rsp_config_client_get_friend_id 0x27270028 +#define sl_btmesh_rsp_config_client_set_friend_id 0x28270028 +#define sl_btmesh_rsp_config_client_get_key_refresh_phase_id 0x29270028 +#define sl_btmesh_rsp_config_client_get_lpn_polltimeout_id 0x2b270028 +#define sl_btmesh_rsp_config_client_get_dcd_id 0x2c270028 +#define sl_btmesh_rsp_config_client_reset_node_id 0x2d270028 +#define sl_btmesh_rsp_config_client_set_request_timeout_for_node_id 0x30270028 + +/** + * @addtogroup sl_btmesh_evt_config_client_request_modified sl_btmesh_evt_config_client_request_modified + * @{ + * @brief Pending request parameters have been updated + * + * The application may call @ref sl_btmesh_config_client_get_request_status to + * retrieve the current status of the request. This event is generated when the + * timeout of a request is extended because the request is acknowledged by a + * Friend node on behalf of the LPN, which is the destination of the request. + */ + +/** @brief Identifier of the request_modified event */ +#define sl_btmesh_evt_config_client_request_modified_id 0x002700a8 + +/***************************************************************************//** + * @brief Data structure of the request_modified event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_request_modified_s +{ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_config_client_request_modified_s sl_btmesh_evt_config_client_request_modified_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_request_modified + +/** + * @addtogroup sl_btmesh_evt_config_client_netkey_status sl_btmesh_evt_config_client_netkey_status + * @{ + * @brief This event is created when a response for an @ref + * sl_btmesh_config_client_add_netkey or a @ref + * sl_btmesh_config_client_remove_netkey request is received, or the request + * times out. + */ + +/** @brief Identifier of the netkey_status event */ +#define sl_btmesh_evt_config_client_netkey_status_id 0x012700a8 + +/***************************************************************************//** + * @brief Data structure of the netkey_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_netkey_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_config_client_netkey_status_s sl_btmesh_evt_config_client_netkey_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_netkey_status + +/** + * @addtogroup sl_btmesh_evt_config_client_netkey_list sl_btmesh_evt_config_client_netkey_list + * @{ + * @brief This event contains a list of key indices for network keys that are + * present on a node + * + * The list is requested using the @ref sl_btmesh_config_client_list_netkeys + * command. More than one event may be generated. List contents are terminated + * by a @ref sl_btmesh_evt_config_client_netkey_list_end event. + */ + +/** @brief Identifier of the netkey_list event */ +#define sl_btmesh_evt_config_client_netkey_list_id 0x022700a8 + +/***************************************************************************//** + * @brief Data structure of the netkey_list event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_netkey_list_s +{ + uint32_t handle; /**< Request handle */ + uint8array netkey_indices; /**< List of network key indices, two bytes per + entry */ +}); + +typedef struct sl_btmesh_evt_config_client_netkey_list_s sl_btmesh_evt_config_client_netkey_list_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_netkey_list + +/** + * @addtogroup sl_btmesh_evt_config_client_netkey_list_end sl_btmesh_evt_config_client_netkey_list_end + * @{ + * @brief Terminating event for network key index list + */ + +/** @brief Identifier of the netkey_list_end event */ +#define sl_btmesh_evt_config_client_netkey_list_end_id 0x032700a8 + +/***************************************************************************//** + * @brief Data structure of the netkey_list_end event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_netkey_list_end_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_config_client_netkey_list_end_s sl_btmesh_evt_config_client_netkey_list_end_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_netkey_list_end + +/** + * @addtogroup sl_btmesh_evt_config_client_appkey_status sl_btmesh_evt_config_client_appkey_status + * @{ + * @brief This event is created when a response for an @ref + * sl_btmesh_config_client_add_appkey or a @ref + * sl_btmesh_config_client_remove_appkey request is received or the request + * times out. + */ + +/** @brief Identifier of the appkey_status event */ +#define sl_btmesh_evt_config_client_appkey_status_id 0x042700a8 + +/***************************************************************************//** + * @brief Data structure of the appkey_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_appkey_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_config_client_appkey_status_s sl_btmesh_evt_config_client_appkey_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_appkey_status + +/** + * @addtogroup sl_btmesh_evt_config_client_appkey_list sl_btmesh_evt_config_client_appkey_list + * @{ + * @brief This event contains a list of key indices for application keys that + * are present on a node and are bound to the network key specified in the + * request + * + * The list is requested using the @ref sl_btmesh_config_client_list_appkeys + * command. More than one event may be generated. List contents are terminated + * by a @ref sl_btmesh_evt_config_client_appkey_list_end event. + */ + +/** @brief Identifier of the appkey_list event */ +#define sl_btmesh_evt_config_client_appkey_list_id 0x052700a8 + +/***************************************************************************//** + * @brief Data structure of the appkey_list event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_appkey_list_s +{ + uint32_t handle; /**< Request handle */ + uint8array appkey_indices; /**< List of application key indices, two bytes per + entry */ +}); + +typedef struct sl_btmesh_evt_config_client_appkey_list_s sl_btmesh_evt_config_client_appkey_list_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_appkey_list + +/** + * @addtogroup sl_btmesh_evt_config_client_appkey_list_end sl_btmesh_evt_config_client_appkey_list_end + * @{ + * @brief Terminating event for application key index list + */ + +/** @brief Identifier of the appkey_list_end event */ +#define sl_btmesh_evt_config_client_appkey_list_end_id 0x062700a8 + +/***************************************************************************//** + * @brief Data structure of the appkey_list_end event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_appkey_list_end_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_config_client_appkey_list_end_s sl_btmesh_evt_config_client_appkey_list_end_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_appkey_list_end + +/** + * @addtogroup sl_btmesh_evt_config_client_binding_status sl_btmesh_evt_config_client_binding_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_bind_model and @ref + * sl_btmesh_config_client_unbind_model application keys and models. + */ + +/** @brief Identifier of the binding_status event */ +#define sl_btmesh_evt_config_client_binding_status_id 0x072700a8 + +/***************************************************************************//** + * @brief Data structure of the binding_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_binding_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_config_client_binding_status_s sl_btmesh_evt_config_client_binding_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_binding_status + +/** + * @addtogroup sl_btmesh_evt_config_client_bindings_list sl_btmesh_evt_config_client_bindings_list + * @{ + * @brief This event contains a list of key indices for the application keys + * which are bound to a model + * + * The list is requested using the @ref sl_btmesh_config_client_list_bindings + * command. More than one such event may be generated; the list contents are + * terminated by a @ref sl_btmesh_evt_config_client_bindings_list_end event. + */ + +/** @brief Identifier of the bindings_list event */ +#define sl_btmesh_evt_config_client_bindings_list_id 0x082700a8 + +/***************************************************************************//** + * @brief Data structure of the bindings_list event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_bindings_list_s +{ + uint32_t handle; /**< Request handle */ + uint8array appkey_indices; /**< List of application key indices, two bytes per + entry */ +}); + +typedef struct sl_btmesh_evt_config_client_bindings_list_s sl_btmesh_evt_config_client_bindings_list_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_bindings_list + +/** + * @addtogroup sl_btmesh_evt_config_client_bindings_list_end sl_btmesh_evt_config_client_bindings_list_end + * @{ + * @brief Terminating event for model-application key bindings list + */ + +/** @brief Identifier of the bindings_list_end event */ +#define sl_btmesh_evt_config_client_bindings_list_end_id 0x092700a8 + +/***************************************************************************//** + * @brief Data structure of the bindings_list_end event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_bindings_list_end_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_config_client_bindings_list_end_s sl_btmesh_evt_config_client_bindings_list_end_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_bindings_list_end + +/** + * @addtogroup sl_btmesh_evt_config_client_model_pub_status sl_btmesh_evt_config_client_model_pub_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_model_pub, @ref + * sl_btmesh_config_client_set_model_pub, @ref + * sl_btmesh_config_client_set_model_pub_va commands + */ + +/** @brief Identifier of the model_pub_status event */ +#define sl_btmesh_evt_config_client_model_pub_status_id 0x0a2700a8 + +/***************************************************************************//** + * @brief Data structure of the model_pub_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_model_pub_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code + otherwise. */ + uint32_t handle; /**< Request handle */ + uint16_t address; /**< The address to publish to. If this + address is the unassigned address, the + model is prevented from publishing. Note + that, if state contains a Label UUID + (full virtual address), the + corresponding virtual address hash is + returned in this parameter. */ + uint16_t appkey_index; /**< The application key index used for the + published messages */ + uint8_t credentials; /**< Friendship credentials flag */ + uint8_t ttl; /**< Publication time-to-live value */ + uint32_t period_ms; /**< Publication period in milliseconds */ + uint8_t retransmit_count; /**< Publication retransmission count */ + uint16_t retransmit_interval_ms; /**< Publication retransmission interval in + milliseconds */ +}); + +typedef struct sl_btmesh_evt_config_client_model_pub_status_s sl_btmesh_evt_config_client_model_pub_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_model_pub_status + +/** + * @addtogroup sl_btmesh_evt_config_client_model_sub_status sl_btmesh_evt_config_client_model_sub_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_add_model_sub : add + * subscription address, @ref sl_btmesh_config_client_add_model_sub_va : add + * subscription virtual address, @ref sl_btmesh_config_client_remove_model_sub : + * remove subscription address, @ref sl_btmesh_config_client_remove_model_sub_va + * : remove subscription virtual address, @ref + * sl_btmesh_config_client_set_model_sub : set subscription address, @ref + * sl_btmesh_config_client_set_model_sub_va : set subscription virtual address, + * and @ref sl_btmesh_config_client_clear_model_sub : clear subscription address + * list commands + */ + +/** @brief Identifier of the model_sub_status event */ +#define sl_btmesh_evt_config_client_model_sub_status_id 0x0b2700a8 + +/***************************************************************************//** + * @brief Data structure of the model_sub_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_model_sub_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_config_client_model_sub_status_s sl_btmesh_evt_config_client_model_sub_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_model_sub_status + +/** + * @addtogroup sl_btmesh_evt_config_client_subs_list sl_btmesh_evt_config_client_subs_list + * @{ + * @brief This event contains a list of addresses that the queried model + * subscribes to + * + * The list is requested using the @ref sl_btmesh_config_client_list_subs + * command. More than one event may be generated. List contents are terminated + * by a @ref sl_btmesh_evt_config_client_subs_list_end event. Note that, if the + * subscription address list entry is a Label UUID (full virtual address), the + * corresponding virtual address hash is returned in this event. + */ + +/** @brief Identifier of the subs_list event */ +#define sl_btmesh_evt_config_client_subs_list_id 0x0c2700a8 + +/***************************************************************************//** + * @brief Data structure of the subs_list event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_subs_list_s +{ + uint32_t handle; /**< Request handle */ + uint8array addresses; /**< List of subscription addresses, two bytes per entry */ +}); + +typedef struct sl_btmesh_evt_config_client_subs_list_s sl_btmesh_evt_config_client_subs_list_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_subs_list + +/** + * @addtogroup sl_btmesh_evt_config_client_subs_list_end sl_btmesh_evt_config_client_subs_list_end + * @{ + * @brief Terminating event for model subscription list + */ + +/** @brief Identifier of the subs_list_end event */ +#define sl_btmesh_evt_config_client_subs_list_end_id 0x0d2700a8 + +/***************************************************************************//** + * @brief Data structure of the subs_list_end event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_subs_list_end_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_config_client_subs_list_end_s sl_btmesh_evt_config_client_subs_list_end_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_subs_list_end + +/** + * @addtogroup sl_btmesh_evt_config_client_heartbeat_pub_status sl_btmesh_evt_config_client_heartbeat_pub_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_heartbeat_pub and + * @ref sl_btmesh_config_client_set_heartbeat_pub commands + */ + +/** @brief Identifier of the heartbeat_pub_status event */ +#define sl_btmesh_evt_config_client_heartbeat_pub_status_id 0x0e2700a8 + +/***************************************************************************//** + * @brief Data structure of the heartbeat_pub_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_heartbeat_pub_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code + otherwise. */ + uint32_t handle; /**< Request handle */ + uint16_t destination_address; /**< Heartbeat publication destination address. */ + uint16_t netkey_index; /**< Index of the network key used to encrypt + heartbeat messages */ + uint8_t count_log; /**< Heartbeat publication count logarithm-of-2 + setting */ + uint8_t period_log; /**< Heartbeat publication period logarithm-of-2 + setting */ + uint8_t ttl; /**< Time-to-live value for heartbeat messages */ + uint16_t features; /**< Heartbeat trigger setting */ +}); + +typedef struct sl_btmesh_evt_config_client_heartbeat_pub_status_s sl_btmesh_evt_config_client_heartbeat_pub_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_heartbeat_pub_status + +/** + * @addtogroup sl_btmesh_evt_config_client_heartbeat_sub_status sl_btmesh_evt_config_client_heartbeat_sub_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_heartbeat_sub and + * @ref sl_btmesh_config_client_set_heartbeat_sub commands + */ + +/** @brief Identifier of the heartbeat_sub_status event */ +#define sl_btmesh_evt_config_client_heartbeat_sub_status_id 0x0f2700a8 + +/***************************************************************************//** + * @brief Data structure of the heartbeat_sub_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_heartbeat_sub_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code + otherwise. */ + uint32_t handle; /**< Request handle */ + uint16_t source_address; /**< Source address for heartbeat messages */ + uint16_t destination_address; /**< Destination address for heartbeat messages */ + uint8_t period_log; /**< Heartbeat subscription remaining period + logarithm-of-2 value */ + uint8_t count_log; /**< Received heartbeat message count + logarithm-of-2 value */ + uint8_t min_hops; /**< Minimum hop value seen in received + heartbeat messages */ + uint8_t max_hops; /**< Minimum hop value seen in received + heartbeat messages */ +}); + +typedef struct sl_btmesh_evt_config_client_heartbeat_sub_status_s sl_btmesh_evt_config_client_heartbeat_sub_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_heartbeat_sub_status + +/** + * @addtogroup sl_btmesh_evt_config_client_beacon_status sl_btmesh_evt_config_client_beacon_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_beacon and @ref + * sl_btmesh_config_client_set_beacon commands. + */ + +/** @brief Identifier of the beacon_status event */ +#define sl_btmesh_evt_config_client_beacon_status_id 0x102700a8 + +/***************************************************************************//** + * @brief Data structure of the beacon_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_beacon_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t value; /**< Secure network beacon state of the node. Valid values + are: + - 0: Node is not broadcasting secure network beacons + - 1: Node is broadcasting secure network beacons */ +}); + +typedef struct sl_btmesh_evt_config_client_beacon_status_s sl_btmesh_evt_config_client_beacon_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_beacon_status + +/** + * @addtogroup sl_btmesh_evt_config_client_default_ttl_status sl_btmesh_evt_config_client_default_ttl_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_default_ttl and @ref + * sl_btmesh_config_client_set_default_ttl commands. + */ + +/** @brief Identifier of the default_ttl_status event */ +#define sl_btmesh_evt_config_client_default_ttl_status_id 0x112700a8 + +/***************************************************************************//** + * @brief Data structure of the default_ttl_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_default_ttl_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t value; /**< Default TTL value. Valid value range is from 2 to 127 + for relayed PDUs, and 0 to indicate non-relayed PDUs. */ +}); + +typedef struct sl_btmesh_evt_config_client_default_ttl_status_s sl_btmesh_evt_config_client_default_ttl_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_default_ttl_status + +/** + * @addtogroup sl_btmesh_evt_config_client_gatt_proxy_status sl_btmesh_evt_config_client_gatt_proxy_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_gatt_proxy and @ref + * sl_btmesh_config_client_set_gatt_proxy commands + */ + +/** @brief Identifier of the gatt_proxy_status event */ +#define sl_btmesh_evt_config_client_gatt_proxy_status_id 0x122700a8 + +/***************************************************************************//** + * @brief Data structure of the gatt_proxy_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_gatt_proxy_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t value; /**< GATT proxy value of the node. Valid values are: + - 0: GATT proxy feature is disabled + - 1: GATT proxy feature is enabled + - 2: GATT proxy feature is not supported */ +}); + +typedef struct sl_btmesh_evt_config_client_gatt_proxy_status_s sl_btmesh_evt_config_client_gatt_proxy_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_gatt_proxy_status + +/** + * @addtogroup sl_btmesh_evt_config_client_relay_status sl_btmesh_evt_config_client_relay_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_relay and @ref + * sl_btmesh_config_client_set_relay commands + */ + +/** @brief Identifier of the relay_status event */ +#define sl_btmesh_evt_config_client_relay_status_id 0x132700a8 + +/***************************************************************************//** + * @brief Data structure of the relay_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_relay_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code + otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t relay; /**< Relay state of the node. Valid values + are as follows: + - 0: Relaying disabled + - 1: Relaying enabled + - 2: Relaying not supported */ + uint8_t retransmit_count; /**< Relay retransmit count. Valid values + range from 0 to 7; default value is 0 + (no retransmissions). */ + uint16_t retransmit_interval_ms; /**< Relay retransmit interval in + milliseconds. Valid values range from 10 + ms to 320 ms, with a resolution of 10 + ms. The value will be zero if the + retransmission count is zero. */ +}); + +typedef struct sl_btmesh_evt_config_client_relay_status_s sl_btmesh_evt_config_client_relay_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_relay_status + +/** + * @addtogroup sl_btmesh_evt_config_client_network_transmit_status sl_btmesh_evt_config_client_network_transmit_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_network_transmit and + * @ref sl_btmesh_config_client_set_network_transmit commands + */ + +/** @brief Identifier of the network_transmit_status event */ +#define sl_btmesh_evt_config_client_network_transmit_status_id 0x142700a8 + +/***************************************************************************//** + * @brief Data structure of the network_transmit_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_network_transmit_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code + otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t transmit_count; /**< Network transmit count. Valid values range + from 1 to 8; default value is 1 (single + transmission; no retransmissions). */ + uint16_t transmit_interval_ms; /**< Network transmit interval in milliseconds. + Valid values range from 10 ms to 320 ms, + with a resolution of 10 ms. The value will + be zero if the transmission count is set + to one. */ +}); + +typedef struct sl_btmesh_evt_config_client_network_transmit_status_s sl_btmesh_evt_config_client_network_transmit_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_network_transmit_status + +/** + * @addtogroup sl_btmesh_evt_config_client_identity_status sl_btmesh_evt_config_client_identity_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_identity and @ref + * sl_btmesh_config_client_set_identity commands. + */ + +/** @brief Identifier of the identity_status event */ +#define sl_btmesh_evt_config_client_identity_status_id 0x152700a8 + +/***************************************************************************//** + * @brief Data structure of the identity_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_identity_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t value; /**< Identity state of the node for the used network index. + Valid values are as follows: + - 0: Node identity advertising is disabled + - 1: Node identity advertising is enabled + - 2: Node identity advertising is not supported */ +}); + +typedef struct sl_btmesh_evt_config_client_identity_status_s sl_btmesh_evt_config_client_identity_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_identity_status + +/** + * @addtogroup sl_btmesh_evt_config_client_friend_status sl_btmesh_evt_config_client_friend_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_friend and @ref + * sl_btmesh_config_client_set_friend commands. + */ + +/** @brief Identifier of the friend_status event */ +#define sl_btmesh_evt_config_client_friend_status_id 0x162700a8 + +/***************************************************************************//** + * @brief Data structure of the friend_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_friend_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t value; /**< Friend value to set. Valid values are: + - 0: Friend feature is not enabled + - 1: Friend feature is enabled + - 2: Friend feature is not supported */ +}); + +typedef struct sl_btmesh_evt_config_client_friend_status_s sl_btmesh_evt_config_client_friend_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_friend_status + +/** + * @addtogroup sl_btmesh_evt_config_client_key_refresh_phase_status sl_btmesh_evt_config_client_key_refresh_phase_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_key_refresh_phase + * command. + */ + +/** @brief Identifier of the key_refresh_phase_status event */ +#define sl_btmesh_evt_config_client_key_refresh_phase_status_id 0x172700a8 + +/***************************************************************************//** + * @brief Data structure of the key_refresh_phase_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_key_refresh_phase_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ + uint16_t netkey_index; /**< Network key index for which the state applies */ + uint8_t value; /**< Key refresh phase state of the node for the given + network key. Valid values are: + - 0: Normal operation + - 1: First phase of key refresh procedure + - 2: Second phase of key refresh procedure */ +}); + +typedef struct sl_btmesh_evt_config_client_key_refresh_phase_status_s sl_btmesh_evt_config_client_key_refresh_phase_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_key_refresh_phase_status + +/** + * @addtogroup sl_btmesh_evt_config_client_lpn_polltimeout_status sl_btmesh_evt_config_client_lpn_polltimeout_status + * @{ + * @brief Status event for @ref sl_btmesh_config_client_get_lpn_polltimeout + * command. + */ + +/** @brief Identifier of the lpn_polltimeout_status event */ +#define sl_btmesh_evt_config_client_lpn_polltimeout_status_id 0x182700a8 + +/***************************************************************************//** + * @brief Data structure of the lpn_polltimeout_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_lpn_polltimeout_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code + otherwise. */ + uint32_t handle; /**< Request handle */ + uint32_t poll_timeout_ms; /**< Poll timeout value, in milliseconds, for the + specified LPN. The value reported is zero if + the queried Friend does not have an ongoing + friendship with the specified LPN. */ +}); + +typedef struct sl_btmesh_evt_config_client_lpn_polltimeout_status_s sl_btmesh_evt_config_client_lpn_polltimeout_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_lpn_polltimeout_status + +/** + * @addtogroup sl_btmesh_evt_config_client_dcd_data sl_btmesh_evt_config_client_dcd_data + * @{ + * @brief Event reporting queried composition data page contents + * + * The contents are requested using the @ref sl_btmesh_config_client_get_dcd + * command. More than one event may be generated. Page contents are terminated + * by a @ref sl_btmesh_evt_config_client_dcd_data_end event. Note that the + * interpretation of the received data is page-specific. Page 0 contains the + * element and model layout of the node. + */ + +/** @brief Identifier of the dcd_data event */ +#define sl_btmesh_evt_config_client_dcd_data_id 0x192700a8 + +/***************************************************************************//** + * @brief Data structure of the dcd_data event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_dcd_data_s +{ + uint32_t handle; /**< Request handle */ + uint8_t page; /**< Composition data page containing data */ + uint8array data; /**< Composition data page contents */ +}); + +typedef struct sl_btmesh_evt_config_client_dcd_data_s sl_btmesh_evt_config_client_dcd_data_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_dcd_data + +/** + * @addtogroup sl_btmesh_evt_config_client_dcd_data_end sl_btmesh_evt_config_client_dcd_data_end + * @{ + * @brief Terminating event for node composition data + */ + +/** @brief Identifier of the dcd_data_end event */ +#define sl_btmesh_evt_config_client_dcd_data_end_id 0x1a2700a8 + +/***************************************************************************//** + * @brief Data structure of the dcd_data_end event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_dcd_data_end_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_config_client_dcd_data_end_s sl_btmesh_evt_config_client_dcd_data_end_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_dcd_data_end + +/** + * @addtogroup sl_btmesh_evt_config_client_reset_status sl_btmesh_evt_config_client_reset_status + * @{ + * @brief Indicate a node has received a @ref + * sl_btmesh_config_client_reset_node. + */ + +/** @brief Identifier of the reset_status event */ +#define sl_btmesh_evt_config_client_reset_status_id 0x1b2700a8 + +/***************************************************************************//** + * @brief Data structure of the reset_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_reset_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_config_client_reset_status_s sl_btmesh_evt_config_client_reset_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_reset_status + +/** + * @addtogroup sl_btmesh_evt_config_client_obo_ack_received sl_btmesh_evt_config_client_obo_ack_received + * @{ + * @brief Node received a transport layer Ack from a friend node , indicating + * that the message has been placed in the Friend Queue. + */ + +/** @brief Identifier of the obo_ack_received event */ +#define sl_btmesh_evt_config_client_obo_ack_received_id 0x1c2700a8 + +/***************************************************************************//** + * @brief Data structure of the obo_ack_received event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_config_client_obo_ack_received_s +{ + uint16_t lpn_addr; /**< Address of Friend node. */ + uint16_t friend_addr; /**< Address of Friend node. */ +}); + +typedef struct sl_btmesh_evt_config_client_obo_ack_received_s sl_btmesh_evt_config_client_obo_ack_received_t; + +/** @} */ // end addtogroup sl_btmesh_evt_config_client_obo_ack_received + +/***************************************************************************//** + * + * Cancel an ongoing request releasing resources allocated at the Configuration + * Client. Note that this call does no undo any setting a node may have made if + * it had received the request already. + * + * @param[in] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_cancel_request(uint32_t handle); + +/***************************************************************************//** + * + * Get the status of a pending request. + * + * @param[in] handle Request handle + * @param[out] server_address Address of the Configuration Server + * @param[out] opcode Message opcode used in the request. Opcodes are defined in + * the Bluetooth mesh stack 1.0 specification. + * @param[out] age_ms Time in milliseconds that the request has been pending + * @param[out] remaining_ms Time in milliseconds before the request times out. + * Note that timeout may be adjusted if it's determined that the request is + * destined to an LPN, which may respond very slowly. + * @param[out] friend_acked If non-zero, response has been acknowledged by a + * Friend node, so it is destined to an LPN and may take a long time to + * complete. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_request_status(uint32_t handle, + uint16_t *server_address, + uint16_t *opcode, + uint32_t *age_ms, + uint32_t *remaining_ms, + uint8_t *friend_acked); + +/***************************************************************************//** + * + * Get the default timeout for the configuration client requests. If there is no + * response when the timeout expires, a configuration request is considered to + * have failed and an event with an error result will be generated. Note that, + * if the Bluetooth mesh stack notices the request is destined to an LPN by + * receiving an on-behalf-of acknowledgment from a Friend node, the timeout in + * use will be changed to the LPN default timeout. + * + * @param[out] timeout_ms Timeout in milliseconds. Default timeout is 5 s (5000 + * ms). + * @param[out] lpn_timeout_ms Timeout in milliseconds when communicating with an + * LPN node. Default LPN timeout is 120 s (120000 ms). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_default_timeout(uint32_t *timeout_ms, + uint32_t *lpn_timeout_ms); + +/***************************************************************************//** + * + * Set the default timeout for the configuration client requests. + * + * @param[in] timeout_ms Timeout in milliseconds. Default timeout is 5 s (5000 + * ms). + * @param[in] lpn_timeout_ms Timeout in milliseconds when communicating with an + * LPN node. Default LPN timeout is 120 s (120000 ms). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_default_timeout(uint32_t timeout_ms, + uint32_t lpn_timeout_ms); + +/***************************************************************************//** + * + * Add a network key to a node. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] netkey_index Index of the network key to add + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_netkey_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_add_netkey(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle); + +/***************************************************************************//** + * + * Remove a network key from a node. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] netkey_index Index of the network key to remove + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_netkey_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_remove_netkey(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle); + +/***************************************************************************//** + * + * List the network keys on a node. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_netkey_list + * - @ref sl_btmesh_evt_config_client_netkey_list_end + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_list_netkeys(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Add an application key to a node. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] appkey_index Index of the application key to add + * @param[in] netkey_index Index of the network key to bind the application key + * to on the node. Note that this may be different from the binding on other + * nodes or on the Configuration Client if desired. + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_appkey_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_add_appkey(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t appkey_index, + uint16_t netkey_index, + uint32_t *handle); + +/***************************************************************************//** + * + * Remove an application key from a node. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] appkey_index Index of the application key to remove + * @param[in] netkey_index Index of the network key bound to the application key + * to on the node. Note that this may be different from the binding on other + * nodes or on the Configuration Client. + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_appkey_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_remove_appkey(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t appkey_index, + uint16_t netkey_index, + uint32_t *handle); + +/***************************************************************************//** + * + * List the application keys on a node. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] netkey_index Network key index for the key used as the query + * parameter. The result contains the indices of the application keys bound to + * this network key on the node. + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_appkey_list + * - @ref sl_btmesh_evt_config_client_appkey_list_end + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_list_appkeys(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle); + +/***************************************************************************//** + * + * Bind an application key to a model. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model to be configured + * resides on the node + * @param[in] vendor_id Vendor ID for the model to configure. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to configure + * @param[in] appkey_index Index of the application key to bind to the model + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_binding_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_bind_model(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t appkey_index, + uint32_t *handle); + +/***************************************************************************//** + * + * Unbind an application key from a model + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model to be configured + * resides on the node + * @param[in] vendor_id Vendor ID for the model to configure. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to configure + * @param[in] appkey_index Index of the application key to unbind from the model + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_binding_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_unbind_model(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t appkey_index, + uint32_t *handle); + +/***************************************************************************//** + * + * List application key bindings of a model. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model to be queried + * resides on the node + * @param[in] vendor_id Vendor ID for the model to query. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to query + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_bindings_list + * - @ref sl_btmesh_evt_config_client_bindings_list_end + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_list_bindings(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint32_t *handle); + +/***************************************************************************//** + * + * Get the model publication state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model to be queried + * resides on the node + * @param[in] vendor_id Vendor ID for the model to query. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to query + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_model_pub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_model_pub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint32_t *handle); + +/***************************************************************************//** + * + * Set the model publication state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model to be configured + * resides on the node + * @param[in] vendor_id Vendor ID for the model to configure. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to configure + * @param[in] address The address to publish to. It can be a unicast address, a + * virtual address, or a group address. It can also be the unassigned address + * to stop the model from publishing. + * @param[in] appkey_index The application key index to use for the published + * messages. + * @param[in] credentials Friendship credential flag. If zero, publication is + * done using normal credentials. If one, it is done with friendship + * credentials, meaning only the friend can decrypt the published message and + * relay it forward using the normal credentials. The default value is 0. + * @param[in] ttl Publication time-to-live value. Valid values: range[0 - 127] + * and 255. + * @param[in] period_ms Publication period in milliseconds. Note that the + * resolution of the publication period is limited by the specification to 100 + * ms up to a period of 6.3 s, 1 s up to a period of 63 s, 10 s up to a period + * of 630 s, and 10 minutes above that. Maximum period allowed is 630 minutes. + * @param[in] retransmit_count Publication retransmission count. Valid values + * range from 0 to 7. + * @param[in] retransmit_interval_ms Publication retransmission interval in + * millisecond units. The range of value is 50 to 1600 ms, and the resolution + * of the value is 50 milliseconds. + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_model_pub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_model_pub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t address, + uint16_t appkey_index, + uint8_t credentials, + uint8_t ttl, + uint32_t period_ms, + uint8_t retransmit_count, + uint16_t retransmit_interval_ms, + uint32_t *handle); + +/***************************************************************************//** + * + * Set the model publication state with a full virtual publication address. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model to be configured + * resides on the node + * @param[in] vendor_id Vendor ID for the model to configure. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to configure + * @param[in] address The Label UUID (full virtual address) to publish to + * @param[in] appkey_index The application key index to use for the published + * messages + * @param[in] credentials Friendship credential flag. If zero, publication is + * done using normal credentials. If one, it is done with friendship + * credentials, meaning only the friend can decrypt the published message and + * relay it forward using the normal credentials. The default value is 0. + * @param[in] ttl Publication time-to-live value. Valid values: range[0 - 127] + * and 255. + * @param[in] period_ms Publication period in milliseconds. Note that the + * resolution of the publication period is limited by the specification to 100 + * ms up to a period of 6.3 s, 1 s up to a period of 63 s, 10 s up to a period + * of 630 s, and 10 minutes above that. Maximum period allowed is 630 minutes. + * @param[in] retransmit_count Publication retransmission count. Valid values + * range from 0 to 7. + * @param[in] retransmit_interval_ms Publication retransmission interval in + * millisecond units. The range of value is 50 to 1600 ms. The resolution of + * the value is 50 milliseconds. + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_model_pub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_model_pub_va(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uuid_128 address, + uint16_t appkey_index, + uint8_t credentials, + uint8_t ttl, + uint32_t period_ms, + uint8_t retransmit_count, + uint16_t retransmit_interval_ms, + uint32_t *handle); + +/***************************************************************************//** + * + * Add an address to the model subscription list. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model, which is about to + * be configured resides on the node + * @param[in] vendor_id Vendor ID for the model to configure. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to configure + * @param[in] sub_address The address to add to the subscription list. Note that + * the address has to be a group address. + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_model_sub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_add_model_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Add a Label UUID (full virtual address) to the model subscription list. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model, which is about to + * be configured resides on the node + * @param[in] vendor_id Vendor ID for the model to configure. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to configure + * @param[in] sub_address The full virtual address to add to the subscription + * list + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_model_sub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_add_model_sub_va(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uuid_128 sub_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Remove an address from the model subscription list. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model, which is about to + * be configured resides on the node + * @param[in] vendor_id Vendor ID for the model to configure. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to configure + * @param[in] sub_address The address to remove from the subscription list + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_model_sub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_remove_model_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Remove a Label UUID (full virtual address) from the model subscription list. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model to be configured + * resides on the node + * @param[in] vendor_id Vendor ID for the model to configure. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to configure + * @param[in] sub_address The full virtual address to remove from the + * subscription list + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_model_sub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_remove_model_sub_va(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uuid_128 sub_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set (overwrite) model subscription address list to a single address. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model, which is about to + * be configured resides on the node + * @param[in] vendor_id Vendor ID for the model to configure. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to configure + * @param[in] sub_address The address to set as the subscription list + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_model_sub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_model_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set (overwrite) model subscription address list to a single virtual address. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model, which is about to + * be configured resides on the node + * @param[in] vendor_id Vendor ID for the model to configure. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to configure + * @param[in] sub_address The full virtual address to set as the subscription + * list + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_model_sub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_model_sub_va(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uuid_128 sub_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Clear (empty) the model subscription address list. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model, which is about to + * be configured resides on the node + * @param[in] vendor_id Vendor ID for the model to configure. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to configure + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_model_sub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_clear_model_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint32_t *handle); + +/***************************************************************************//** + * + * Get the subscription address list of a model. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] elem_index Index of the element where the model, which is about to + * be queried resides on the node + * @param[in] vendor_id Vendor ID for the model to query. Use 0xFFFF for + * Bluetooth SIG models. + * @param[in] model_id Model ID for the model to query + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_subs_list + * - @ref sl_btmesh_evt_config_client_subs_list_end + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_list_subs(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint32_t *handle); + +/***************************************************************************//** + * + * Get the heartbeat publication state of a node. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_heartbeat_pub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_heartbeat_pub(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set the heartbeat publication state of a node. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] destination_address Heartbeat publication destination address. The + * address can't be a virtual address. Note that it can be the unassigned + * address, in which case the heartbeat publishing is disabled. + * @param[in] netkey_index Index of the network key used to encrypt heartbeat + * messages + * @param[in] count_log Heartbeat publication count logarithm-of-2 setting. + * Valid values are as follows: + * - 0x00: Heartbeat messages are not sent + * - 0x01 .. 0x11: Node will send 2^(n-1) heartbeat messages + * - 0x12 .. 0xfe: Prohibited + * - 0xff: Hearbeat messages are sent indefinitely + * @param[in] period_log Heartbeat publication period logarithm-of-2 setting. + * Valid values are as follows: + * - 0x00: Heartbeat messages are not sent + * - 0x01 .. 0x11: Node will send a heartbeat message every 2^(n-1) + * seconds + * - 0x12 .. 0xff: Prohibited + * @param[in] ttl Time-to-live value for heartbeat messages + * @param[in] features @parblock + * Heartbeat trigger setting. For bits set in the bitmask, reconfiguration of + * the node feature associated with the bit will result in the node emitting a + * heartbeat message. Valid values are as follows: + * - Bit 0: Relay feature + * - Bit 1: Proxy feature + * - Bit 2: Friend feature + * - Bit 3: Low power feature + * + * Remaining bits are reserved for future use. + * @endparblock + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_heartbeat_pub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_heartbeat_pub(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t destination_address, + uint16_t netkey_index, + uint8_t count_log, + uint8_t period_log, + uint8_t ttl, + uint16_t features, + uint32_t *handle); + +/***************************************************************************//** + * + * Get the heartbeat subscription state of a node. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_heartbeat_sub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_heartbeat_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set the heartbeat subscription state of a node. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] source_address Source address for heartbeat messages, which must + * be either a unicast address or the unassigned address, in which case + * heartbeat messages are not processed. + * @param[in] destination_address Destination address for heartbeat messages. + * The address must be either the unicast address of the primary element of + * the node, a group address, or the unassigned address. If it is the + * unassigned address, heartbeat messages are not processed. + * @param[in] period_log Heartbeat subscription period logarithm-of-2 setting. + * Valid values are as follows: + * - 0x00: Heartbeat messages are not received + * - 0x01 .. 0x11: Node will receive heartbeat messages for 2^(n-1) + * seconds + * - 0x12 .. 0xff: Prohibited + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_heartbeat_sub_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_heartbeat_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t source_address, + uint16_t destination_address, + uint8_t period_log, + uint32_t *handle); + +/***************************************************************************//** + * + * Get node secure network beacon state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_beacon_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_beacon(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set node secure network beacon state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] value Secure network beacon value to set. Valid values are: + * - 0: Node is not broadcasting secure network beacons + * - 1: Node is broadcasting secure network beacons + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_beacon_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_beacon(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint32_t *handle); + +/***************************************************************************//** + * + * Get node default TTL state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_default_ttl_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_default_ttl(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set node default TTL state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] value Default TTL value. Valid value range is from 2 to 127 for + * relayed PDUs, and 0 to indicate non-relayed PDUs + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_default_ttl_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_default_ttl(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint32_t *handle); + +/***************************************************************************//** + * + * Get node GATT proxy state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_gatt_proxy_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set node GATT proxy state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] value GATT proxy value to set. Valid values are: + * - 0: Proxy feature is disabled + * - 1: Proxy feature is enabled + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_gatt_proxy_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint32_t *handle); + +/***************************************************************************//** + * + * Get node relay state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_relay_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_relay(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set node relay state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] value Relay value to set. Valid values are: + * - 0: Relay feature is disabled + * - 1: Relay feature is enabled + * @param[in] retransmit_count Relay retransmit count. Valid values range from 0 + * to 7; default value is 0 (no retransmissions). + * @param[in] retransmit_interval_ms Relay retransmit interval in milliseconds. + * Valid values range from 10 ms to 320 ms, with a resolution of 10 ms. The + * value is ignored if the retransmission count is set to zero. + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_relay_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_relay(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint8_t retransmit_count, + uint16_t retransmit_interval_ms, + uint32_t *handle); + +/***************************************************************************//** + * + * Get node network transmit state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_network_transmit_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_network_transmit(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set node network transmit state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] transmit_count Network transmit count. Valid values range from 1 + * to 8; default value is 1 (single transmission; no retransmissions). + * @param[in] transmit_interval_ms Network transmit interval in milliseconds. + * Valid values range from 10 ms to 320 ms, with a resolution of 10 ms. The + * value is ignored if the transmission count is set to one. + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_network_transmit_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_network_transmit(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t transmit_count, + uint16_t transmit_interval_ms, + uint32_t *handle); + +/***************************************************************************//** + * + * Get node identity state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] netkey_index Network key index for which the state is queried + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_identity_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_identity(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle); + +/***************************************************************************//** + * + * Set node identity state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] netkey_index Network key index for which the state is configured + * @param[in] value Identity value to set. Valid values are: + * - 0: Node identity advertising is disabled + * - 1: Node identity advertising is enabled + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_identity_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_identity(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint8_t value, + uint32_t *handle); + +/***************************************************************************//** + * + * Get node friend state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_friend_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_friend(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set node friend state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] value Friend value to set. Valid values are: + * - 0: Friend feature is not enabled + * - 1: Friend feature is enabled + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_friend_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_friend(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint32_t *handle); + +/***************************************************************************//** + * + * Get node key refresh phase state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] netkey_index Network key index for which the state is queried + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_key_refresh_phase_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_key_refresh_phase(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle); + +/***************************************************************************//** + * + * Get the LPN poll timeout from a Friend node. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] lpn_address LPN address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_lpn_polltimeout_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_lpn_polltimeout(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t lpn_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Get composition data of a device. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] page Composition data page to query + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_dcd_data + * - @ref sl_btmesh_evt_config_client_dcd_data_end + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_get_dcd(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t page, + uint32_t *handle); + +/***************************************************************************//** + * + * Request a node to unprovision itself. Use this function when a node is + * removed from the network. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_config_client_reset_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_reset_node(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set request timeout for a specific node. Typically low power nodes have + * longer latencies and default timeout may not be sufficient. + * + * Typically this command is issued after receiving a @ref + * sl_btmesh_evt_config_client_obo_ack_received event indicating that a message + * has been placed in the Friend Queue. To get an estimate for the needed + * timeout, sending a @ref sl_btmesh_config_client_get_lpn_polltimeout request + * to the Friend is recommended. + * + * @param[in] lpn_address Destination LPN node primary element address for which + * the timeout is to be set. + * @param[in] timeout_ms Timeout in milliseconds. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * + * + ******************************************************************************/ +sl_status_t sl_btmesh_config_client_set_request_timeout_for_node(uint16_t lpn_address, + uint16_t timeout_ms); + +/** @} */ // end addtogroup sl_btmesh_config_client + +/** + * @addtogroup sl_btmesh_mbt_client Bluetooth Mesh BLOB Transfer Client Model + * @{ + * + * @brief Bluetooth Mesh BLOB Transfer Client Model + * + * The Bluetooth Mesh BLOB Transfer (MBT) Client model is used to transfer + * binary large objects (BLOBs) over a Bluetooth Mesh network. An MBT Client can + * transfer a BLOB to one or more MBT Servers, either unicasting or multicasting + * depending on the situation. + * + * There are two different modes in which the transfer may be performed: Push + * BLOB Transfer mode and Pull BLOB Transfer mode. The MBT Client selects the + * transfer mode based on the capabilities supported by the servers. The Pull + * BLOB Transfer mode is typically used only if some of the MBT Servers are Low + * Power Nodes. The MBT Client API usage flow is identical in both transfer + * modes. + * + * The MBT Client model is normally used as a transport in a higher-layer model, + * e.g., the Firmware Update models. Please refer to the documentation of such a + * model for more information on how to interact with the MBT Client API in that + * context. + * + * MBT Client command, which generates and sends a message to MBT Server, could + * fail with SL_STATUS_BUSY or SL_STATUS_NO_MORE_RESOURCE return value. + * SL_STATUS_BUSY return value implies underlying Tx-processing pipeline is full + * and can't currently accept new Tx-messages. SL_STATUS_NO_MORE_RESOURCE + * implies memory resources required for generating the required message are not + * currently available. In both of the above cases application should reissue + * the command at later time. Depending of the exact case @ref + * sl_btmesh_evt_mbt_client_tx_complete could be used for timing the command + * retry. + * + * If the command failed, then no @ref sl_btmesh_evt_mbt_client_tx_complete is + * going to be emitted and the app's retry timer could be started immediately + * after receiving the error. In a successful case, the retry timer should never + * be started before receiving this event as the application might retry before + * the previous message is sent out to all recipients. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_mbt_client_init_id 0x09280028 +#define sl_btmesh_cmd_mbt_client_setup_id 0x00280028 +#define sl_btmesh_cmd_mbt_client_query_information_id 0x01280028 +#define sl_btmesh_cmd_mbt_client_get_server_status_id 0x0d280028 +#define sl_btmesh_cmd_mbt_client_add_server_id 0x0e280028 +#define sl_btmesh_cmd_mbt_client_start_transfer_id 0x02280028 +#define sl_btmesh_cmd_mbt_client_start_block_id 0x03280028 +#define sl_btmesh_cmd_mbt_client_send_chunk_request_rsp_id 0x04280028 +#define sl_btmesh_cmd_mbt_client_query_block_status_id 0x05280028 +#define sl_btmesh_cmd_mbt_client_get_status_id 0x06280028 +#define sl_btmesh_cmd_mbt_client_get_transfer_status_id 0x0a280028 +#define sl_btmesh_cmd_mbt_client_cancel_transfer_id 0x0b280028 +#define sl_btmesh_cmd_mbt_client_abort_id 0x0c280028 +#define sl_btmesh_rsp_mbt_client_init_id 0x09280028 +#define sl_btmesh_rsp_mbt_client_setup_id 0x00280028 +#define sl_btmesh_rsp_mbt_client_query_information_id 0x01280028 +#define sl_btmesh_rsp_mbt_client_get_server_status_id 0x0d280028 +#define sl_btmesh_rsp_mbt_client_add_server_id 0x0e280028 +#define sl_btmesh_rsp_mbt_client_start_transfer_id 0x02280028 +#define sl_btmesh_rsp_mbt_client_start_block_id 0x03280028 +#define sl_btmesh_rsp_mbt_client_send_chunk_request_rsp_id 0x04280028 +#define sl_btmesh_rsp_mbt_client_query_block_status_id 0x05280028 +#define sl_btmesh_rsp_mbt_client_get_status_id 0x06280028 +#define sl_btmesh_rsp_mbt_client_get_transfer_status_id 0x0a280028 +#define sl_btmesh_rsp_mbt_client_cancel_transfer_id 0x0b280028 +#define sl_btmesh_rsp_mbt_client_abort_id 0x0c280028 + +/** + * @brief The MBT Server Status. + */ +typedef enum +{ + sl_btmesh_mbt_client_server_status_done = 0x0, /**< (0x0) + Current + procedure + is done. */ + sl_btmesh_mbt_client_server_status_in_progress = 0x1, /**< (0x1) + Current + procedure + is in + progress. */ + sl_btmesh_mbt_client_server_status_error = 0x2, /**< (0x2) MBT + Server + has + failed, + and is no + longer + part of + the + transfer. */ + sl_btmesh_mbt_client_server_status_successfully_complete = 0x3 /**< (0x3) + Transfer + successfully + complete, + server + has + reported + to have + received + all the + blocks of + the BLOB + successfully. */ +} sl_btmesh_mbt_client_server_status_t; + +/** + * @brief The MBT Transfer modes. + */ +typedef enum +{ + sl_btmesh_mbt_client_mbt_transfer_mode_none = 0x0, /**< (0x0) No BLOB Transfer + mode. */ + sl_btmesh_mbt_client_mbt_transfer_mode_push = 0x1, /**< (0x1) Push BLOB + Transfer mode + (client-driven). */ + sl_btmesh_mbt_client_mbt_transfer_mode_pull = 0x2, /**< (0x2) Pull BLOB + Transfer mode + (server-driven). */ + sl_btmesh_mbt_client_mbt_transfer_mode_both = 0x3 /**< (0x3) Push and Pull + BLOB Transfer modes. */ +} sl_btmesh_mbt_client_transfer_mode_t; + +/** + * @addtogroup sl_btmesh_evt_mbt_client_server_information_status sl_btmesh_evt_mbt_client_server_information_status + * @{ + * @brief MBT Server information + * + * MBT Server information received as a response to the @ref + * sl_btmesh_mbt_client_query_information command. + */ + +/** @brief Identifier of the server_information_status event */ +#define sl_btmesh_evt_mbt_client_server_information_status_id 0x002800a8 + +/***************************************************************************//** + * @brief Data structure of the server_information_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_server_information_status_s +{ + uint16_t elem_index; /**< The client model element index. */ + uint16_t server_address; /**< The MBT Server address. */ + uint8_t min_block_size_log; /**< The minimum supported block size as an + exponent n in 2^n. */ + uint8_t max_block_size_log; /**< The maximum supported block size as an + exponent n in 2^n. */ + uint16_t max_chunks; /**< The maximum number of chunks supported. */ + uint16_t max_chunk_size; /**< The maximum supported chunk size. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_server_information_status_s sl_btmesh_evt_mbt_client_server_information_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_server_information_status + +/** + * @addtogroup sl_btmesh_evt_mbt_client_query_information_complete sl_btmesh_evt_mbt_client_query_information_complete + * @{ + * @brief Query MBT Server information is complete + * + * All active servers have responded to the information query. The common values + * supported by all servers are contained in this event for convenience. + * + * Note that if no common block size values are supported by all servers, the @p + * block_size_log_min will be larger than the @p block_size_log_max. In such + * case, the application should select a block size that is supported by as many + * servers as possible based on the @ref + * sl_btmesh_evt_mbt_client_server_information_status events received for each + * server. Another option is to select either @p block_size_log_min or @p + * block_size_log_max as is, which are both guaranteed to be supported by at + * least one server. + * + * The BLOB transfer should be initiated next with @ref + * sl_btmesh_mbt_client_start_transfer. + */ + +/** @brief Identifier of the query_information_complete event */ +#define sl_btmesh_evt_mbt_client_query_information_complete_id 0x042800a8 + +/***************************************************************************//** + * @brief Data structure of the query_information_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_query_information_complete_s +{ + uint16_t elem_index; /**< The client model element index. */ + uint8_t block_size_log_min; /**< The minimum block size supported by + all servers as an exponent n in 2^n. */ + uint8_t block_size_log_max; /**< The maximum block size supported by + all servers as an exponent n in 2^n. */ + uint16_t max_chunk_size_min; /**< The maximum chunk size supported by + all servers. */ + uint16_t max_chunks_min; /**< The maximum number of chunks supported + by all servers. */ + uint8_t supported_transfer_modes; /**< Enum @ref + sl_btmesh_mbt_client_transfer_mode_t. + Transfer modes supported by at least + one server and the client. */ + uint8_t common_transfer_modes; /**< Enum @ref + sl_btmesh_mbt_client_transfer_mode_t. + Transfer modes supported by all + servers and the client. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_query_information_complete_s sl_btmesh_evt_mbt_client_query_information_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_query_information_complete + +/** + * @addtogroup sl_btmesh_evt_mbt_client_server_transfer_status sl_btmesh_evt_mbt_client_server_transfer_status + * @{ + * @brief The MBT Server's current transfer status + * + * This event contains the current transfer status received from a MBT Server. + * The status is received as a response to @ref + * sl_btmesh_mbt_client_start_transfer or @ref + * sl_btmesh_mbt_client_get_transfer_status commands. + */ + +/** @brief Identifier of the server_transfer_status event */ +#define sl_btmesh_evt_mbt_client_server_transfer_status_id 0x012800a8 + +/***************************************************************************//** + * @brief Data structure of the server_transfer_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_server_transfer_status_s +{ + uint16_t elem_index; /**< The client model element index. */ + uint16_t server_address; /**< The MBT Server address. */ + uint8_t status; /**< The status code for the last + operation. */ + uint8_t phase; /**< The MBT Server phase. */ + sl_bt_uuid_64_t blob_id; /**< The ID of the BLOB. */ + uint32_t blob_size; /**< The size of the BLOB. */ + uint8_t block_size_log; /**< The block size as an exponent n in + 2^n. */ + uint8array blocks_not_received; /**< A bitfield indicating blocks which + are not yet received. The least + significant bit of the first byte in + the array belongs to block zero. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_server_transfer_status_s sl_btmesh_evt_mbt_client_server_transfer_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_server_transfer_status + +/** + * @addtogroup sl_btmesh_evt_mbt_client_start_transfer_complete sl_btmesh_evt_mbt_client_start_transfer_complete + * @{ + * @brief Transfer start is complete + * + * All active servers have responded to the transfer start command. The first + * block start should be initiated with @ref sl_btmesh_mbt_client_start_block. + */ + +/** @brief Identifier of the start_transfer_complete event */ +#define sl_btmesh_evt_mbt_client_start_transfer_complete_id 0x052800a8 + +/***************************************************************************//** + * @brief Data structure of the start_transfer_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_start_transfer_complete_s +{ + uint16_t elem_index; /**< The client model element index. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_start_transfer_complete_s sl_btmesh_evt_mbt_client_start_transfer_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_start_transfer_complete + +/** + * @addtogroup sl_btmesh_evt_mbt_client_server_block_status sl_btmesh_evt_mbt_client_server_block_status + * @{ + * @brief The MBT Server's current block status + * + * This event contains the current block status received from a MBT Server. The + * status is received as a response to @ref sl_btmesh_mbt_client_start_block or + * @ref sl_btmesh_mbt_client_query_block_status commands. + */ + +/** @brief Identifier of the server_block_status event */ +#define sl_btmesh_evt_mbt_client_server_block_status_id 0x032800a8 + +/***************************************************************************//** + * @brief Data structure of the server_block_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_server_block_status_s +{ + uint16_t elem_index; /**< The client model element index. */ + uint16_t server_address; /**< The MBT Server address. */ + uint8_t status; /**< The status code for the last operation. */ + uint8array missing_chunks; /**< A bitfield indicating missing chunks. The + least significant bit of the first byte in the + array belongs to chunk zero. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_server_block_status_s sl_btmesh_evt_mbt_client_server_block_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_server_block_status + +/** + * @addtogroup sl_btmesh_evt_mbt_client_start_block_complete sl_btmesh_evt_mbt_client_start_block_complete + * @{ + * @brief Block start is complete + * + * All active servers have responded to the block start command. + */ + +/** @brief Identifier of the start_block_complete event */ +#define sl_btmesh_evt_mbt_client_start_block_complete_id 0x062800a8 + +/***************************************************************************//** + * @brief Data structure of the start_block_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_start_block_complete_s +{ + uint16_t elem_index; /**< The client model element index. */ + uint16_t block_number; /**< The index number of the block. */ + uint32_t block_size; /**< The size of the block. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_start_block_complete_s sl_btmesh_evt_mbt_client_start_block_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_start_block_complete + +/** + * @addtogroup sl_btmesh_evt_mbt_client_send_chunk_request sl_btmesh_evt_mbt_client_send_chunk_request + * @{ + * @brief Request for chunk data + * + * The data for the next chunk to be sent is requested from the application. The + * requested data should be provided with the @ref + * sl_btmesh_mbt_client_send_chunk_request_rsp command. + */ + +/** @brief Identifier of the send_chunk_request event */ +#define sl_btmesh_evt_mbt_client_send_chunk_request_id 0x072800a8 + +/***************************************************************************//** + * @brief Data structure of the send_chunk_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_send_chunk_request_s +{ + uint16_t elem_index; /**< The client model element index. */ + uint32_t offset; /**< The chunk offset from the beginning of the BLOB. */ + uint16_t length; /**< The number of bytes requested. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_send_chunk_request_s sl_btmesh_evt_mbt_client_send_chunk_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_send_chunk_request + +/** + * @addtogroup sl_btmesh_evt_mbt_client_server_partial_block_report sl_btmesh_evt_mbt_client_server_partial_block_report + * @{ + * @brief The MBT Server's partial block report + * + * When the BLOB is transferred using the Pull BLOB Transfer mode, the MBT + * Server requests chunks from the MBT Client by sending Partial Block Report + * messages. The @p missing_chunks field indicates which chunks were requested. + * If no bits are set in @p missing_chunks, then the MBT Server has received all + * chunks of the current block. + * + * The MBT Client starts sending the requested chunks to the server. The chunk + * data is requested from the application via the @ref + * sl_btmesh_evt_mbt_client_send_chunk_request events. + */ + +/** @brief Identifier of the server_partial_block_report event */ +#define sl_btmesh_evt_mbt_client_server_partial_block_report_id 0x0c2800a8 + +/***************************************************************************//** + * @brief Data structure of the server_partial_block_report event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_server_partial_block_report_s +{ + uint16_t elem_index; /**< The client model element index. */ + uint16_t server_address; /**< The MBT Server address. */ + uint8array missing_chunks; /**< A bitfield indicating missing chunks. The + least significant bit of the first byte in the + array belongs to chunk zero. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_server_partial_block_report_s sl_btmesh_evt_mbt_client_server_partial_block_report_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_server_partial_block_report + +/** + * @addtogroup sl_btmesh_evt_mbt_client_send_chunks_complete sl_btmesh_evt_mbt_client_send_chunks_complete + * @{ + * @brief All chunks in the current block have been sent + * + * Each block is transferred in chunks, sending the chunks to the servers which + * have them missing. This event indicates that a single round of sending those + * chunks is complete. + * + * After receiving this event, the block status should be queried from the + * servers with the @ref sl_btmesh_mbt_client_query_block_status command. + */ + +/** @brief Identifier of the send_chunks_complete event */ +#define sl_btmesh_evt_mbt_client_send_chunks_complete_id 0x082800a8 + +/***************************************************************************//** + * @brief Data structure of the send_chunks_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_send_chunks_complete_s +{ + uint16_t elem_index; /**< The client model element index. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_send_chunks_complete_s sl_btmesh_evt_mbt_client_send_chunks_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_send_chunks_complete + +/** + * @addtogroup sl_btmesh_evt_mbt_client_query_block_status_complete sl_btmesh_evt_mbt_client_query_block_status_complete + * @{ + * @brief Querying the current block status is complete + * + * All active servers have responded to the block status query. If the @p + * transfer_complete is non-zero, all blocks of the BLOB have been successfully + * transmitted and the transfer is complete. The MBT Client state is cleaned up + * and a new transfer may be started. + * + * If the transfer is not complete, but the @p block_complete is non-zero, the + * current block is successfully transmitted and the next block should be + * started with @ref sl_btmesh_mbt_client_start_block command. If the @p + * block_complete is zero, some servers still have chunks missing in the current + * block. The MBT client starts resending those automatically, requesting the + * data to send again from the application via @ref + * sl_btmesh_evt_mbt_client_send_chunk_request events. + */ + +/** @brief Identifier of the query_block_status_complete event */ +#define sl_btmesh_evt_mbt_client_query_block_status_complete_id 0x092800a8 + +/***************************************************************************//** + * @brief Data structure of the query_block_status_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_query_block_status_complete_s +{ + uint16_t elem_index; /**< The client model element index. */ + uint8_t block_complete; /**< Non-zero if the block is complete. */ + uint8_t transfer_complete; /**< Non-zero if the transfer is complete. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_query_block_status_complete_s sl_btmesh_evt_mbt_client_query_block_status_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_query_block_status_complete + +/** + * @addtogroup sl_btmesh_evt_mbt_client_tx_complete sl_btmesh_evt_mbt_client_tx_complete + * @{ + * @brief Previous command has been transmitted to all recipients + * + * When the previous command has been transmitted to all MBT Servers, either + * multicasting or unicasting to each server one by one, this event indicates + * that the whole transmission is completed. It may be used for timing retries, + * in case all servers do not respond within an expected time after this event. + */ + +/** @brief Identifier of the tx_complete event */ +#define sl_btmesh_evt_mbt_client_tx_complete_id 0x0a2800a8 + +/***************************************************************************//** + * @brief Data structure of the tx_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_tx_complete_s +{ + uint16_t elem_index; /**< The client model element index. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_tx_complete_s sl_btmesh_evt_mbt_client_tx_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_tx_complete + +/** + * @addtogroup sl_btmesh_evt_mbt_client_server_failed sl_btmesh_evt_mbt_client_server_failed + * @{ + * @brief A server failed and was removed from the transfer + * + * This event indicates that a server timed out or reported an irrecoverable + * error. A failed server is removed from the transfer. + */ + +/** @brief Identifier of the server_failed event */ +#define sl_btmesh_evt_mbt_client_server_failed_id 0x0b2800a8 + +/***************************************************************************//** + * @brief Data structure of the server_failed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_server_failed_s +{ + uint16_t elem_index; /**< The client model element index. */ + uint16_t server_address; /**< The MBT Server address. */ + uint8_t timeout; /**< Non-zero if a timeout occurred. */ + uint8_t error; /**< Non-zero if an error occurred. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_server_failed_s sl_btmesh_evt_mbt_client_server_failed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_server_failed + +/** + * @addtogroup sl_btmesh_evt_mbt_client_transfer_complete sl_btmesh_evt_mbt_client_transfer_complete + * @{ + * @brief The transfer is complete + * + * This event indicates that the transfer is complete, either successfully or + * unsuccessfully. Servers which have failed before the transfer is complete, + * indicated by @ref sl_btmesh_evt_mbt_client_server_failed event, have failed + * to receive the full object. All other servers have received the full object + * successfully. The @ref sl_btmesh_mbt_client_get_status command may be used to + * get the current status of each server to determine if the transfer to a + * specific server succeeded or not. Servers which successfully completed the + * transfer are marked with status done. + */ + +/** @brief Identifier of the transfer_complete event */ +#define sl_btmesh_evt_mbt_client_transfer_complete_id 0x0d2800a8 + +/***************************************************************************//** + * @brief Data structure of the transfer_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_client_transfer_complete_s +{ + uint16_t elem_index; /**< The client model element index. */ +}); + +typedef struct sl_btmesh_evt_mbt_client_transfer_complete_s sl_btmesh_evt_mbt_client_transfer_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_client_transfer_complete + +/***************************************************************************//** + * + * Initialize the MBT Client. + * + * @param[in] elem_index The client model element index. + * @param[in] max_servers The maximum number of servers supported + * simultaneously. Maximum supported value is 1008. + * @param[in] max_blocks The maximum number of blocks into which a BLOB can be + * broken down. Maximum supported value is 1888. + * @param[in] max_chunks_per_block The maximum number of chunks into which a + * block can be broken down. Maximum supported value is 2000. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_init(uint16_t elem_index, + uint16_t max_servers, + uint16_t max_blocks, + uint16_t max_chunks_per_block); + +/***************************************************************************//** + * + * Set up a new BLOB transfer. + * + * This is the first step in starting a transfer. Basic information of the BLOB + * and the transfer are defined with this command. + * + * After setting up a transfer, the information of the servers should be queried + * with @ref sl_btmesh_mbt_client_query_information. + * + * @param[in] elem_index The client model element index. + * @param[in] blob_id The ID of the BLOB. + * @param[in] blob_size The size of the BLOB. + * @param[in] appkey_index Application key index to use for communicating with + * the servers. + * @param[in] ttl The time-to-live value to use when communicating with the + * servers. Valid values: 0, range:[2-127] and 255. + * @param[in] timeout_base If a Server does not respond within time frame of: + * (10000 * (timeout_base + 2)) + (100 * ttl) in units of ms, it will be + * marked as inactive. + * @param[in] supported_transfer_modes A bitfield of supported transfer modes. + * At least one must be supported. If multiple transfer modes are supported by + * both the client and servers, Push mode will be preferred. + * - Bit 0: Push BLOB Transfer mode + * - Bit 1: Pull BLOB Transfer mode + * @param[in] group_address The group address to use if the multicast_threshold + * is exceeded. Zero to only use unicast. + * @param[in] virtual_address If the group address is a VA hash, this needs to + * contain the full virtual address label UUID. Otherwise, the value of this + * field will be ignored. + * @param[in] multicast_threshold If the number of servers for any step exceeds + * or is equal to this number, the group address will be used. Otherwise, + * servers will be looped through one by one. Value of 0 disables the feature. + * @param[in] servers_len Length of data in @p servers + * @param[in] servers List of MBT Server addresses, represented as little endian + * two byte sequences. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_setup(uint16_t elem_index, + sl_bt_uuid_64_t blob_id, + uint32_t blob_size, + uint16_t appkey_index, + uint8_t ttl, + uint16_t timeout_base, + uint8_t supported_transfer_modes, + uint16_t group_address, + uuid_128 virtual_address, + uint16_t multicast_threshold, + size_t servers_len, + const uint8_t* servers); + +/***************************************************************************//** + * + * Query MBT Server information. + * + * After setting up a new BLOB transfer with @ref sl_btmesh_mbt_client_setup, + * the server information needs to be queried with this command. The received + * query result for each server is carried in a separate @ref + * sl_btmesh_evt_mbt_client_server_information_status event. This information + * should be used by the application to determine the size of blocks in which + * the BLOB is divided when transmitting, and the size of chunks in which each + * block is divided. + * + * The @ref sl_btmesh_evt_mbt_client_query_information_complete event indicates + * that all servers have responded to the query. If this is not received in a + * timely manner, the query may be resent by calling this command again. + * + * After the information query is successfully completed, the BLOB transfer + * should be initiated with @ref sl_btmesh_mbt_client_start_transfer. + * + * @param[in] elem_index The client model element index. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_mbt_client_server_information_status + * - @ref sl_btmesh_evt_mbt_client_query_information_complete + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_query_information(uint16_t elem_index); + +/***************************************************************************//** + * + * Check the status of a MBT Server participating in the transfer, as recorded + * in the Client's internal bookkeeping. + * + * @param[in] elem_index The client model element index. + * @param[in] server_index The index of the MBT Server which status to check. + * @param[out] server_address The MBT Server address to identify which server + * the information belongs to. + * @param[out] current_procedure_status Enum @ref + * sl_btmesh_mbt_client_server_status_t. The MBT Server Status. + * @param[out] rx_blocks BLOB Transfer blocks delivered and confirmed. + * @param[out] rx_chunks @parblock + * BLOB Transfer current block chunks delivered and confirmed. + * + * Note : parameter is only valid in the push transfer mode. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_get_server_status(uint16_t elem_index, + uint16_t server_index, + uint16_t *server_address, + uint8_t *current_procedure_status, + uint16_t *rx_blocks, + uint16_t *rx_chunks); + +/***************************************************************************//** + * + * Add MBT Server. Server can be added after calling @ref + * sl_btmesh_mbt_client_setup and before calling @ref + * sl_btmesh_mbt_client_query_information. + * + * @param[in] elem_index The client model element index. + * @param[in] server_address The address of the MBT Server to add. + * + * @return SL_STATUS_OK if successful. SL_STATUS_BT_MESH_LIMIT_REACHED if the + * configured maximun storage has been reached. SL_STATUS_INVALID_STATE if + * invalid state, as proper call time for this API specified within the + * description of the API. SL_STATUS_BT_MESH_DOES_NOT_EXIST if the MBT Client + * model does not exist within the element specifed by the input parameter. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_add_server(uint16_t elem_index, + uint16_t server_address); + +/***************************************************************************//** + * + * Initiate the BLOB transfer. + * + * After receiving @ref sl_btmesh_evt_mbt_client_query_information_complete + * event, the BLOB transfer should be initiated by this command. Each server's + * response is carried in a separate @ref + * sl_btmesh_evt_mbt_client_server_transfer_status event. + * + * The @ref sl_btmesh_evt_mbt_client_start_transfer_complete event indicates + * that all servers have responded to this command. If this is not received in a + * timely manner, the initiation request may be resent by calling this command + * again. + * + * After the transfer start is successfully completed, the first block should be + * started with @ref sl_btmesh_mbt_client_start_block. + * + * When the transfer is eventually complete, the @ref + * sl_btmesh_evt_mbt_client_transfer_complete event is emitted. + * + * @param[in] elem_index The client model element index. + * @param[in] block_size_log The block size as an exponent n in 2^n. Range: 6 - + * 32. + * @param[in] transfer_mode Enum @ref sl_btmesh_mbt_client_transfer_mode_t. The + * transfer mode to use for the transfer. Must select exactly one mode from + * sl_btmesh_evt_mbt_client_query_information_complete_s.supported_transfer_modes. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_mbt_client_server_transfer_status + * - @ref sl_btmesh_evt_mbt_client_start_transfer_complete + * - @ref sl_btmesh_evt_mbt_client_transfer_complete + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_start_transfer(uint16_t elem_index, + uint8_t block_size_log, + uint8_t transfer_mode); + +/***************************************************************************//** + * + * Initiate block start. + * + * After receiving @ref sl_btmesh_evt_mbt_client_start_transfer_complete event + * in the beginning of the transfer, or @ref + * sl_btmesh_evt_mbt_client_query_block_status_complete event indicating the + * previous block is complete, the next incomplete block should be started by + * this command. Each server's response is carried in in a separate @ref + * sl_btmesh_evt_mbt_client_server_block_status event. + * + * The @ref sl_btmesh_evt_mbt_client_start_block_complete event indicates that + * all servers have responded to this command. If this is not received in a + * timely manner, the initiation request may be resent by calling this command + * again. + * + * After the block start is successfully completed, the MBT Client starts + * sending chunks to the servers. The data to send is requested from the + * application via @ref sl_btmesh_evt_mbt_client_send_chunk_request events. + * + * @param[in] elem_index The client model element index. + * @param[in] chunk_size The block is divided into chunks of this size. The + * chunk size has to be large enough so that the number of chunks in which a + * block gets divided doesn't exceed any server's maximum, see @ref + * sl_btmesh_evt_mbt_client_query_information_complete_s.max_chunks_min. + * Range: 1 - 241. + * @param[out] block_number The index number of the block. + * @param[out] block_size The size of the block. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_mbt_client_server_block_status + * - @ref sl_btmesh_evt_mbt_client_start_block_complete + * - @ref sl_btmesh_evt_mbt_client_send_chunk_request + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_start_block(uint16_t elem_index, + uint16_t chunk_size, + uint16_t *block_number, + uint32_t *block_size); + +/***************************************************************************//** + * + * Provide requested chunk data. + * + * This command is used to provide the chunk data requested by the MBT Client in + * a @ref sl_btmesh_evt_mbt_client_send_chunk_request event. + * + * @param[in] elem_index The client model element index. + * @param[in] data_len Length of data in @p data + * @param[in] data The chunk data. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_send_chunk_request_rsp(uint16_t elem_index, + size_t data_len, + const uint8_t* data); + +/***************************************************************************//** + * + * Query the current block status. + * + * After receiving @ref sl_btmesh_evt_mbt_client_send_chunks_complete, the block + * statuses of the MBT Servers should be queried to determine if any chunks are + * still missing. Each server's response is carried in a separate @ref + * sl_btmesh_evt_mbt_client_server_block_status event. + * + * The @ref sl_btmesh_evt_mbt_client_query_block_status_complete event indicates + * that all servers have responded to this command. If this is not received in a + * timely manner, the block status query may be resent by calling this command + * again. + * + * After the block status query is successfully completed, but some servers + * still have chunks missing, the MBT Client starts resending those + * automatically. See @ref sl_btmesh_evt_mbt_client_query_block_status_complete + * for more information. + * + * @param[in] elem_index The client model element index. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_mbt_client_server_block_status + * - @ref sl_btmesh_evt_mbt_client_query_block_status_complete + * - @ref sl_btmesh_evt_mbt_client_send_chunk_request + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_query_block_status(uint16_t elem_index); + +/***************************************************************************//** + * + * Get the status of the current transfer. + * + * This command returns the MBT Client's current state and the status of each + * server in the current transfer. + * + * @param[in] elem_index The client model element index. + * @param[out] state The current client state + * - 0 = inactive + * - 1 = transfer set up, ready to start + * - 2 = collecting server info + * - 3 = sending transfer start to servers + * - 4 = sending block start to servers + * - 5 = sending chunks to servers + * - 6 = querying received chunk statuses from servers + * - 7 = transfer complete (successfully, unsuccessfully, or partially + * successfully) + * @param[out] total_blocks Total number of BLOB Transfer blocks. + * @param[out] total_chunks Total number of BLOB Transfer chunks within the + * current block, 0 if there's no active Block. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_get_status(uint16_t elem_index, + uint8_t *state, + uint16_t *total_blocks, + uint16_t *total_chunks); + +/***************************************************************************//** + * + * Get the transfer status of an MBT Server. + * + * This command can be used to check whether an MBT Server (or several, if a + * group address is used) is already taking part in a transfer. This command + * does not need to be used when executing a transfer. + * + * The @ref sl_btmesh_evt_mbt_client_server_transfer_status event contains the + * status response received from the server. + * + * @param[in] elem_index The client model element index. + * @param[in] server_address The MBT Server address. May also be a group or + * virtual address. + * @param[in] virtual_address If the server address is a VA hash, this needs to + * contain the full virtual address label UUID. Otherwise, the value of this + * field will be ignored. + * @param[in] appkey_index Application key index to use for encrypting the + * message. + * @param[in] ttl The time-to-live value to use. Valid values: 0, range:[2-127] + * and 255. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_mbt_client_server_transfer_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_get_transfer_status(uint16_t elem_index, + uint16_t server_address, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl); + +/***************************************************************************//** + * + * Cancel a transfer. + * + * This command may be used to cancel a transfer at any point after it has been + * set up with the @ref sl_btmesh_mbt_client_setup command. Each server's + * response is carried in a separate @ref + * sl_btmesh_evt_mbt_client_server_transfer_status event. + * + * The @ref sl_btmesh_evt_mbt_client_transfer_complete event indicates that all + * servers have responded to the cancellation. If this is not received in a + * timely manner, the cancellation may be retried by calling this command again. + * + * After the transfer is successfully canceled, a new transfer may be set up + * with the @ref sl_btmesh_mbt_client_setup command. + * + * It's also possible to use this for canceling a previous transfer on a list of + * MBT Servers in order to start a new one. In this case, the cancel would be + * issued right after setting up the transfer with the ID of the BLOB to be + * canceled. + * + * @param[in] elem_index The client model element index. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_mbt_client_server_transfer_status + * - @ref sl_btmesh_evt_mbt_client_transfer_complete + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_cancel_transfer(uint16_t elem_index); + +/***************************************************************************//** + * + * Abort a previously set up BLOB transfer. + * + * Abort a transfer and clear the Client's state. Note that this function does + * not inform the Servers that the Client has aborted the transfer. + * + * @param[in] elem_index The client model element index. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_client_abort(uint16_t elem_index); + +/** @} */ // end addtogroup sl_btmesh_mbt_client + +/** + * @addtogroup sl_btmesh_mbt_server Bluetooth Mesh BLOB Transfer Server Model + * @{ + * + * @brief Bluetooth Mesh BLOB Transfer Server Model + * + * The Bluetooth Mesh BLOB Transfer (MBT) Server model is used to receive binary + * large objects (BLOBs) over a Bluetooth Mesh network from a MBT Client. + * + * There are two different modes in which the transfer may be performed: Push + * BLOB Transfer mode and Pull BLOB Transfer mode. The MBT Server may support + * both, or only one of these modes. The MBT Server API usage flow is identical + * in both transfer modes. + * + * A Low Power Node (LPN) typically only supports the Pull BLOB Transfer mode, + * as that mode makes it possible for the MBT Server to throttle the transfer + * speed. This is necessary for ensuring that no more chunks than the Friend + * node can store in its Friend Queue are transmitted at once. While an LPN is + * receiving a transfer, the application needs to make sure that messages are + * polled from the Friend node at least every 30 seconds. If the LPN's Poll + * Timeout is larger than this, the application may call @ref sl_btmesh_lpn_poll + * to satisfy this requirement. + * + * The MBT Server model is normally used as a transport in a higher-layer model, + * e.g., the Firmware Update models. Please refer to the documentation of such a + * model for more information on how to interact with the MBT Server API in that + * context. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_mbt_server_init_id 0x02290028 +#define sl_btmesh_cmd_mbt_server_start_id 0x00290028 +#define sl_btmesh_cmd_mbt_server_get_transfer_status_id 0x01290028 +#define sl_btmesh_cmd_mbt_server_transfer_complete_id 0x03290028 +#define sl_btmesh_cmd_mbt_server_abort_id 0x04290028 +#define sl_btmesh_cmd_mbt_server_set_pull_mode_parameters_id 0x05290028 +#define sl_btmesh_cmd_mbt_server_transfer_start_rsp_id 0x06290028 +#define sl_btmesh_rsp_mbt_server_init_id 0x02290028 +#define sl_btmesh_rsp_mbt_server_start_id 0x00290028 +#define sl_btmesh_rsp_mbt_server_get_transfer_status_id 0x01290028 +#define sl_btmesh_rsp_mbt_server_transfer_complete_id 0x03290028 +#define sl_btmesh_rsp_mbt_server_abort_id 0x04290028 +#define sl_btmesh_rsp_mbt_server_set_pull_mode_parameters_id 0x05290028 +#define sl_btmesh_rsp_mbt_server_transfer_start_rsp_id 0x06290028 + +/** + * @brief The MBT Status codes. + */ +typedef enum +{ + sl_btmesh_mbt_server_status_success = 0x0, /**< (0x0) The + Client + message was + successfully + received by + the Server. */ + sl_btmesh_mbt_server_status_invalid_block_number = 0x1, /**< (0x1) The + Block + number is + higher than + the total + number of + blocks + indicates. */ + sl_btmesh_mbt_server_status_wrong_block_size = 0x2, /**< (0x2) The + Block Size + is outside + of the + boundaries + specified + by the + Server's + Min and Max + Block Size + Log + capabilities. */ + sl_btmesh_mbt_server_status_wrong_chunk_size = 0x3, /**< (0x3) The + Chunk Size + is too + large for + the Server + to accept, + or so small + that the + Block's + total + chunks + number + would + exceed the + Server's + Max Chunks + capability. */ + sl_btmesh_mbt_server_status_invalid_state = 0x4, /**< (0x4) The + Server is + in a state + where it + cannot + process the + message. */ + sl_btmesh_mbt_server_status_invalid_parameter = 0x5, /**< (0x5) A + parameter + in the + message is + outside of + its valid + range. */ + sl_btmesh_mbt_server_status_wrong_object_id = 0x6, /**< (0x6) The + Server is + not + expecting + to receive + this BLOB + ID. */ + sl_btmesh_mbt_server_status_storage_limit = 0x7, /**< (0x7) Not + enough + space to + store the + BLOB. */ + sl_btmesh_mbt_server_status_unsupported_transfer_mode = 0x8, /**< (0x8) + Transfer + Mode not + supported. */ + sl_btmesh_mbt_server_status_internal_error = 0x9, /**< (0x9) + Internal + error + occurred. */ + sl_btmesh_mbt_server_status_information_unavailable = 0xa, /**< (0xa) The + requested + information + is not + available. + A Block Get + was sent, + but no + Block is + active. */ + sl_btmesh_mbt_server_status_malformed_message = 0xfe, /**< (0xfe) A + malformed + message was + received. */ + sl_btmesh_mbt_server_status_timeout = 0xff /**< (0xff) + Timeout + occurred. */ +} sl_btmesh_mbt_server_status_t; + +/** + * @brief The MBT Server Phase. + */ +typedef enum +{ + sl_btmesh_mbt_server_phase_inactive = 0x0, /**< (0x0) The Server has + not been given a + BLOB ID to expect. */ + sl_btmesh_mbt_server_phase_idle = 0x1, /**< (0x1) The Server has + a BLOB ID to expect, + but is not (yet) + receiving the BLOB. */ + sl_btmesh_mbt_server_phase_waiting_for_block = 0x2, /**< (0x2) The Server is + waiting for the next + Block Start message. */ + sl_btmesh_mbt_server_phase_waiting_for_chunks = 0x3, /**< (0x3) The Server is + waiting for Chunk + messages. */ + sl_btmesh_mbt_server_phase_complete = 0x4, /**< (0x4) The Server has + received the full + BLOB. */ + sl_btmesh_mbt_server_phase_suspended = 0x5 /**< (0x5) The Server has + timed out and gone + to Suspended phase. */ +} sl_btmesh_mbt_server_phase_t; + +/** + * @addtogroup sl_btmesh_evt_mbt_server_state_changed sl_btmesh_evt_mbt_server_state_changed + * @{ + * @brief The state of the MBT Server has changed + * + * This event may be used by the application to determine the current state and + * progress of the transfer. + */ + +/** @brief Identifier of the state_changed event */ +#define sl_btmesh_evt_mbt_server_state_changed_id 0x062900a8 + +/***************************************************************************//** + * @brief Data structure of the state_changed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_server_state_changed_s +{ + uint16_t elem_index; /**< The server model element index. */ + uint8_t new_state; /**< The new state + - 0: Inactive, not expecting any transfer + - 1: Waiting for the BLOB transfer to + start + - 2: Waiting for a new block to start + - 3: Waiting for chunks of the current + block + - 4: The BLOB has been transferred + successfully + - 5: Timeout occurred and the transfer is + suspended */ + sl_bt_uuid_64_t blob_id; /**< The ID of the BLOB. */ + uint32_t blob_size; /**< The size of the BLOB. */ + uint16_t block_number; /**< The index number of the current block. */ + uint32_t block_size; /**< The size of the block. */ + uint16_t chunk_size; /**< The current block is divided into chunks of + this size. */ +}); + +typedef struct sl_btmesh_evt_mbt_server_state_changed_s sl_btmesh_evt_mbt_server_state_changed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_server_state_changed + +/** + * @addtogroup sl_btmesh_evt_mbt_server_transfer_start_req sl_btmesh_evt_mbt_server_transfer_start_req + * @{ + * @brief The MBT Client has requested the transfer start + * + * The command @ref sl_btmesh_mbt_server_transfer_start_rsp must be called to + * accept or reject the transfer start request. + * + * After the transfer has been started, the start of the first block is + * indicated by the @ref sl_btmesh_evt_mbt_server_block_start event. + */ + +/** @brief Identifier of the transfer_start_req event */ +#define sl_btmesh_evt_mbt_server_transfer_start_req_id 0x002900a8 + +/***************************************************************************//** + * @brief Data structure of the transfer_start_req event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_server_transfer_start_req_s +{ + uint16_t elem_index; /**< The server model element index. */ + uint16_t client_address; /**< The address of the MBT Client. */ + sl_bt_uuid_64_t blob_id; /**< The ID of the BLOB. */ + uint32_t blob_size; /**< The size of the BLOB. */ + uint8_t block_size_log; /**< The block size as an exponent n in 2^n. */ + uint8_t transfer_mode; /**< Transfer mode: 1 = Push Mode + (client-driven), 2 = Pull Mode + (server-driven). */ +}); + +typedef struct sl_btmesh_evt_mbt_server_transfer_start_req_s sl_btmesh_evt_mbt_server_transfer_start_req_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_server_transfer_start_req + +/** + * @addtogroup sl_btmesh_evt_mbt_server_block_start sl_btmesh_evt_mbt_server_block_start + * @{ + * @brief The transfer of a new block has started + * + * After the new block has been started, the MBT Client starts sending the + * chunks of the block. The chunk data is carried in @ref + * sl_btmesh_evt_mbt_server_chunk events. When all chunks of the block have been + * successfully received, a @ref sl_btmesh_evt_mbt_server_block_complete event + * is emitted. + */ + +/** @brief Identifier of the block_start event */ +#define sl_btmesh_evt_mbt_server_block_start_id 0x012900a8 + +/***************************************************************************//** + * @brief Data structure of the block_start event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_server_block_start_s +{ + uint16_t elem_index; /**< The server model element index. */ + uint16_t client_address; /**< The address of the MBT Client. */ + sl_bt_uuid_64_t blob_id; /**< The ID of the BLOB. */ + uint16_t block_number; /**< The index number of the new block. */ + uint16_t chunk_size; /**< The new block is divided into chunks of + this size. */ + uint16_t block_size; /**< The size of the new block. */ +}); + +typedef struct sl_btmesh_evt_mbt_server_block_start_s sl_btmesh_evt_mbt_server_block_start_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_server_block_start + +/** + * @addtogroup sl_btmesh_evt_mbt_server_chunk sl_btmesh_evt_mbt_server_chunk + * @{ + * @brief Received a new chunk of BLOB data + * + * Each chunk is delivered to the application with this event only once when it + * is first received. The offset of the chunk `data` relative to the whole BLOB + * is in `total_offset`, and relative to the current block in `block_offset`. + */ + +/** @brief Identifier of the chunk event */ +#define sl_btmesh_evt_mbt_server_chunk_id 0x032900a8 + +/***************************************************************************//** + * @brief Data structure of the chunk event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_server_chunk_s +{ + uint16_t elem_index; /**< The server model element index. */ + uint16_t client_address; /**< The address of the MBT Client. */ + uint16_t block_number; /**< The index number of the current block. */ + uint32_t total_offset; /**< The offset of the chunk in the BLOB. */ + uint32_t block_offset; /**< The offset of the chunk in the current block. */ + uint8array data; /**< The chunk data. */ +}); + +typedef struct sl_btmesh_evt_mbt_server_chunk_s sl_btmesh_evt_mbt_server_chunk_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_server_chunk + +/** + * @addtogroup sl_btmesh_evt_mbt_server_block_complete sl_btmesh_evt_mbt_server_block_complete + * @{ + * @brief The transfer of the current block is complete + * + * If there are more blocks to transfer, a new block will be started by the MBT + * Client, indicated by the @ref sl_btmesh_evt_mbt_server_block_start event. + * Otherwise, the transfer completed successfully, and a @ref + * sl_btmesh_evt_mbt_server_state_changed event with the proper `new_state` is + * emitted. + */ + +/** @brief Identifier of the block_complete event */ +#define sl_btmesh_evt_mbt_server_block_complete_id 0x042900a8 + +/***************************************************************************//** + * @brief Data structure of the block_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_server_block_complete_s +{ + uint16_t elem_index; /**< The server model element index. */ + uint16_t client_address; /**< The address of the MBT Client. */ + sl_bt_uuid_64_t blob_id; /**< The ID of the BLOB. */ + uint16_t block_number; /**< The index number of the completed block. */ + uint16_t block_size; /**< The size of the completed block. */ +}); + +typedef struct sl_btmesh_evt_mbt_server_block_complete_s sl_btmesh_evt_mbt_server_block_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_server_block_complete + +/** + * @addtogroup sl_btmesh_evt_mbt_server_transfer_cancel sl_btmesh_evt_mbt_server_transfer_cancel + * @{ + * @brief The MBT Client has canceled the transfer + */ + +/** @brief Identifier of the transfer_cancel event */ +#define sl_btmesh_evt_mbt_server_transfer_cancel_id 0x072900a8 + +/***************************************************************************//** + * @brief Data structure of the transfer_cancel event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_server_transfer_cancel_s +{ + uint16_t elem_index; /**< The server model element index. */ + uint16_t client_address; /**< The address of the MBT Client. */ + sl_bt_uuid_64_t blob_id; /**< The ID of the BLOB. */ +}); + +typedef struct sl_btmesh_evt_mbt_server_transfer_cancel_s sl_btmesh_evt_mbt_server_transfer_cancel_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_server_transfer_cancel + +/** + * @addtogroup sl_btmesh_evt_mbt_server_partial_block_report_tx_complete sl_btmesh_evt_mbt_server_partial_block_report_tx_complete + * @{ + * @brief The MBT Server has sent partial block report + */ + +/** @brief Identifier of the partial_block_report_tx_complete event */ +#define sl_btmesh_evt_mbt_server_partial_block_report_tx_complete_id 0x082900a8 + +/***************************************************************************//** + * @brief Data structure of the partial_block_report_tx_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_mbt_server_partial_block_report_tx_complete_s +{ + uint16_t elem_index; /**< The server model element index. */ + uint16_t num_requested_chunks; /**< Number of requested chunks. */ + uint8array requested_chunks; /**< The array of requested chunks in + little-endian uint16 format. */ +}); + +typedef struct sl_btmesh_evt_mbt_server_partial_block_report_tx_complete_s sl_btmesh_evt_mbt_server_partial_block_report_tx_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_mbt_server_partial_block_report_tx_complete + +/***************************************************************************//** + * + * Initialize the MBT Server. + * + * Note that the configuration parameters `min_block_size_log`, + * `max_chunks_per_block` and `max_blob_size` have memory usage implications. + * The server needs to store 1 bit of information per chunk, so every additional + * 8 chunks supported add 1 byte of RAM usage. Each potential block needs 1 bit + * of information, so the server must allocate 1 byte of RAM for every 8 + * potential blocks. Supporting small blocks and large objects, or large blocks + * and small chunks, will use more memory. The values should be chosen to + * conservatively satisfy the use cases of the node if RAM usage is of concern. + * + * @param[in] elem_index The server model element index. + * @param[in] min_block_size_log The minimum supported block size as an exponent + * n in 2^n. Range: 6 - 32. + * @param[in] max_block_size_log @parblock + * The maximum supported block size as an exponent n in 2^n. Must be less than + * or equal to `max_chunks_per_block * max_chunk_size`. Range: 6 - 32. + * @endparblock + * @param[in] max_chunks_per_block The maximum number of chunks into which a + * block can be broken down. + * @param[in] max_chunk_size The maximum supported chunk size. Range: 8 - 241. + * @param[in] max_blob_size The maximum supported BLOB size. + * @param[in] supported_transfer_modes A bitfield of supported transfer modes. + * At least one must be supported. + * - Bit 0: Push BLOB Transfer mode + * - Bit 1: Pull BLOB Transfer mode + * @param[in] pull_mode_chunks_to_request In Pull BLOB Transfer mode, how many + * chunks to request at a time. Can be set to zero if this transfer mode is + * not supported. + * @param[in] pull_mode_retry_interval_ms In Pull BLOB Transfer mode, retry + * requesting chunks with this interval in milliseconds. Can be set to zero if + * this transfer mode is not supported. + * @param[in] pull_mode_retry_count In Pull BLOB Transfer mode, retry requesting + * chunks this many times before giving up. Note that if the timeout set by + * @ref sl_btmesh_mbt_server_start occurs before the retry attempts are + * exhausted, no more retries will be attempted. Can be set to zero if this + * transfer mode is not supported. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_server_init(uint16_t elem_index, + uint8_t min_block_size_log, + uint8_t max_block_size_log, + uint16_t max_chunks_per_block, + uint16_t max_chunk_size, + uint32_t max_blob_size, + uint8_t supported_transfer_modes, + uint16_t pull_mode_chunks_to_request, + uint16_t pull_mode_retry_interval_ms, + uint16_t pull_mode_retry_count); + +/***************************************************************************//** + * + * Start receiving a BLOB. + * + * This is used to declare a BLOB to the MBT Server for receiving. The `blob_id` + * identifies the expected BLOB. The MBT Server will wait for the MBT Client to + * start the transfer, which is indicated by @ref + * sl_btmesh_evt_mbt_server_transfer_start_req. + * + * @param[in] elem_index The server model element index. + * @param[in] blob_id The ID of the BLOB. + * @param[in] timeout_10s If no messages are received from the MBT Client within + * this time frame, the transfer will be suspended. + * @param[in] ttl The time-to-live value to use when communicating with the MBT + * Client. Valid values: 0, range:[2-127] and 255. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_mbt_server_transfer_start_req + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_server_start(uint16_t elem_index, + sl_bt_uuid_64_t blob_id, + uint16_t timeout_10s, + uint8_t ttl); + +/***************************************************************************//** + * + * Get the status of the transfer. + * + * @param[in] elem_index The server model element index. + * @param[out] state The current state + * - 0: Inactive, not expecting any transfer + * - 1: Waiting for the BLOB transfer to start + * - 2: Waiting for a new block to start + * - 3: Waiting for chunks of the current block + * - 4: The BLOB has been transferred successfully + * - 5: Timeout occurred and the transfer is suspended + * @param[out] blob_id The ID of the BLOB. + * @param[out] blob_size The size of the BLOB. + * @param[out] block_number The index number of the current block. + * @param[in] max_blocks_missing_mask_size Size of output buffer passed in @p + * blocks_missing_mask + * @param[out] blocks_missing_mask_len On return, set to the length of output + * data written to @p blocks_missing_mask + * @param[out] blocks_missing_mask A bitfield indicating missing blocks. The + * least significant bit of the first byte in the array belongs to block zero. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_server_get_transfer_status(uint16_t elem_index, + uint8_t *state, + sl_bt_uuid_64_t *blob_id, + uint32_t *blob_size, + uint16_t *block_number, + size_t max_blocks_missing_mask_size, + size_t *blocks_missing_mask_len, + uint8_t *blocks_missing_mask); + +/***************************************************************************//** + * + * To be called when the transfer is completed. This is only needed when + * implementing your vendor model that uses MBT Server. The DFU models use this + * API internally. + * + * @param[in] elem_index The server model element index. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_server_transfer_complete(uint16_t elem_index); + +/***************************************************************************//** + * + * Abort the ongoing transfer, if any. + * + * Abort a transfer and clear the Server's state. Note that this function does + * not inform the Client that the Server has aborted the transfer. + * + * @param[in] elem_index The server model element index. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_server_abort(uint16_t elem_index); + +/***************************************************************************//** + * + * Set the retry interval and the retry count parameters in the Pull BLOB + * Transfer Mode. The new values will take effect at the next transfer start. + * The command does not modify parameters of the ongoing transfer. + * + * @param[in] elem_index The server model element index. + * @param[in] pull_mode_retry_interval_ms The retry interval in milliseconds + * (ms). + * @param[in] pull_mode_retry_count The retry count. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_server_set_pull_mode_parameters(uint16_t elem_index, + uint16_t pull_mode_retry_interval_ms, + uint16_t pull_mode_retry_count); + +/***************************************************************************//** + * + * Response to the @ref sl_btmesh_evt_mbt_server_transfer_start_req event. + * + * @param[in] elem_index The server model element index. + * @param[in] status mesh_mbt_status_success to accept, + * mesh_mbt_status_internal_error and mesh_mbt_status_storage_limit to reject. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_mbt_server_transfer_start_rsp(uint16_t elem_index, + uint8_t status); + +/** @} */ // end addtogroup sl_btmesh_mbt_server + +/** + * @addtogroup sl_btmesh_sensor_server Bluetooth Mesh Sensor Server Model + * @{ + * + * @brief Bluetooth Mesh Sensor Server Model + * + * This class provides the commands and messages to interface with the Sensor + * Server model. + * + * A Sensor State consists of four states: + * - Sensor Descriptor + * - Sensor Setting + * - Sensor Cadence + * - Measurement value + * + * A multisensor setup is possible by having multiple sensor states within the + * same model, provided that each sensor has a unique Sensor Property ID. + * + * Sensor Descriptor states are constant. Therefore, the stack can cache them + * and enumerate the present sensors to clients when requested. + * + * Currently, the Sensor Server model does not cache the measurement data, + * sensor settings, or cadence. When a client is querying sensor data, the + * requests will be propagated to the application. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_sensor_server_init_id 0x00470028 +#define sl_btmesh_cmd_sensor_server_deinit_id 0x01470028 +#define sl_btmesh_cmd_sensor_server_send_descriptor_status_id 0x02470028 +#define sl_btmesh_cmd_sensor_server_send_status_id 0x03470028 +#define sl_btmesh_cmd_sensor_server_send_column_status_id 0x04470028 +#define sl_btmesh_cmd_sensor_server_send_series_status_id 0x05470028 +#define sl_btmesh_rsp_sensor_server_init_id 0x00470028 +#define sl_btmesh_rsp_sensor_server_deinit_id 0x01470028 +#define sl_btmesh_rsp_sensor_server_send_descriptor_status_id 0x02470028 +#define sl_btmesh_rsp_sensor_server_send_status_id 0x03470028 +#define sl_btmesh_rsp_sensor_server_send_column_status_id 0x04470028 +#define sl_btmesh_rsp_sensor_server_send_series_status_id 0x05470028 + +/** + * @addtogroup sl_btmesh_evt_sensor_server_get_request sl_btmesh_evt_sensor_server_get_request + * @{ + * @brief Indicate an incoming Sensor Get request to get the Sensor Data + * state(s) + * + * This event must be replied to by sending the Sensor Status message. + */ + +/** @brief Identifier of the get_request event */ +#define sl_btmesh_evt_sensor_server_get_request_id 0x014700a8 + +/***************************************************************************//** + * @brief Data structure of the get_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_server_get_request_s +{ + uint16_t server_address; /**< Destination server address */ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Source client address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< No flags defined currently */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, or + 0x0000 to get the values of all sensors. */ +}); + +typedef struct sl_btmesh_evt_sensor_server_get_request_s sl_btmesh_evt_sensor_server_get_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_server_get_request + +/** + * @addtogroup sl_btmesh_evt_sensor_server_get_column_request sl_btmesh_evt_sensor_server_get_column_request + * @{ + * @brief Indicate an incoming Sensor Column Get message to get Sensor Series + * Column state + * + * The event must be replied to by sending a Sensor Column Status message. + */ + +/** @brief Identifier of the get_column_request event */ +#define sl_btmesh_evt_sensor_server_get_column_request_id 0x024700a8 + +/***************************************************************************//** + * @brief Data structure of the get_column_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_server_get_column_request_s +{ + uint16_t server_address; /**< Destination server address */ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Source client model address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< No flags defined currently */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ + uint8array column_ids; /**< Raw value identifying a column */ +}); + +typedef struct sl_btmesh_evt_sensor_server_get_column_request_s sl_btmesh_evt_sensor_server_get_column_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_server_get_column_request + +/** + * @addtogroup sl_btmesh_evt_sensor_server_get_series_request sl_btmesh_evt_sensor_server_get_series_request + * @{ + * @brief Indicate an incoming Sensor Series Get message to get the Sensor + * Series Column states + * + * This event must be replied to by sending a Sensor Series Status message. + */ + +/** @brief Identifier of the get_series_request event */ +#define sl_btmesh_evt_sensor_server_get_series_request_id 0x034700a8 + +/***************************************************************************//** + * @brief Data structure of the get_series_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_server_get_series_request_s +{ + uint16_t server_address; /**< Destination server address */ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Source client address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< No flags defined currently */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ + uint8array column_ids; /**< Optional raw values identifying starting and + ending columns */ +}); + +typedef struct sl_btmesh_evt_sensor_server_get_series_request_s sl_btmesh_evt_sensor_server_get_series_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_server_get_series_request + +/** + * @addtogroup sl_btmesh_evt_sensor_server_publish sl_btmesh_evt_sensor_server_publish + * @{ + * @brief Indicate that the publishing period timer elapsed and the app should + * publish its state. + */ + +/** @brief Identifier of the publish event */ +#define sl_btmesh_evt_sensor_server_publish_id 0x044700a8 + +/***************************************************************************//** + * @brief Data structure of the publish event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_server_publish_s +{ + uint16_t elem_index; /**< Client model element index */ + uint32_t period_ms; /**< The current publishing period that can be used to + estimate the next tick, e.g., when the state should + be reported at higher frequency. */ +}); + +typedef struct sl_btmesh_evt_sensor_server_publish_s sl_btmesh_evt_sensor_server_publish_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_server_publish + +/***************************************************************************//** + * + * Initialize the Sensor Server model with Sensor Descriptors present at the + * element. The descriptors are cached and Descriptor Get queries are served + * without propagating it to the application. All incoming client queries are + * checked against the cached data. However, only valid requests related to + * existing sensors are propagated to the the application. + * + * @param[in] elem_index Server model element index + * @param[in] descriptors_len Length of data in @p descriptors + * @param[in] descriptors @parblock + * Sensor Descriptor State structures submitted as a byte array + * + * A sensor descriptor represents the attributes describing the sensor data. + * It does not change throughout the lifetime of the element. + * + * The following fields are required: + * - Sensor Property ID: 16 bits + * - Sensor Positive Tolerance: 12 bits + * - Sensor Negative Tolerance: 12 bits + * - Sensor Sampling Function: 8 bits + * - Sensor Measurement Period: 8 bits + * - Sensor Update Interval: 8 bits + * + * Sensor Property ID is a 2-octet value referencing a device property that + * describes the meaning and the format of data reported by the sensor. The + * value 0x0000 is prohibited. Valid range is 0x0001 to 0xFFFF. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_server_init(uint16_t elem_index, + size_t descriptors_len, + const uint8_t* descriptors); + +/***************************************************************************//** + * + * Deinitialize the Sensor Server functionality. + * Note that the heap reserved space cannot be freed or reallocated. + * Reinitializing with greater number of sensors than before will eventually + * return an out of memory error until the device is reset. + * + * @param[in] elem_index Server model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_server_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Send a Descriptor Status message either as a reply to a Get Descriptor client + * request. + * + * @param[in] client_address Destination client address. The address 0x0000 can + * be used to publish the message according to model configuration + * @param[in] elem_index Server model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags No flags defined currently + * @param[in] descriptors_len Length of data in @p descriptors + * @param[in] descriptors Serialized Sensor Descriptor states for all sensors + * within the element consisting one or more 8 bytes structures as follows: + * - Sensor Property ID: 16 bits + * - Sensor Positive Tolerance: 12 bits + * - Sensor Negative Tolerance: 12 bits + * - Sensor Sampling Function: 8 bits + * - Sensor Measurement Period: 8 bits + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_server_send_descriptor_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + size_t descriptors_len, + const uint8_t* descriptors); + +/***************************************************************************//** + * + * Send Sensor Status message as a reply to a Get client request or as an + * unsolicited message. + * + * @param[in] client_address Destination client address. The address 0x0000 can + * be used to publish the message according to model configuration + * @param[in] elem_index Setup Server model element index + * @param[in] appkey_index The application key index to use + * @param[in] flags No flags defined currently + * @param[in] sensor_data_len Length of data in @p sensor_data + * @param[in] sensor_data @parblock + * Serialized Sensor Data consisting of one or more Sensor state for each + * sensor within the element. To simplify processing, the byte array is in TLV + * format: + * - 1st Property ID: 16 bits + * - Value Length: 8 bits + * - Value: variable + * - 2nd Property ID: 16 bits + * - Value Length: 8 bits + * - Value: variable + * - ... + * + * If sensor data was requested for a Property ID that does not exist within + * the element, the reply must contain the given Property ID with zero length. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_server_send_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + size_t sensor_data_len, + const uint8_t* sensor_data); + +/***************************************************************************//** + * + * Send Column Status message as a response to a Column Get client request or as + * an unsolicited message + * + * @param[in] client_address Destination client address. The address 0x0000 can + * be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags No flags defined currently + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] sensor_data_len Length of data in @p sensor_data + * @param[in] sensor_data @parblock + * Byte array containing the serialized Sensor Series Column state in the + * following format: + * - Sensor Raw Value X, variable length raw value representing the left + * corner of a column + * - Sensor Column Width, variable length raw value representing the width + * of the column + * - Sensor Raw Value Y, variable length raw value representing the height + * of the column + * + * If the Property ID or the column ID (Raw value X) does not exist, the reply + * must contain only these two fields, omitting the optional Column Width and + * Raw Value Y fields. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_server_send_column_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t sensor_data_len, + const uint8_t* sensor_data); + +/***************************************************************************//** + * + * Send Series Status message as a response to a Series Get client request or as + * an unsolicited message. + * + * @param[in] client_address Destination client address. The address 0x0000 can + * be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags No flags defined currently + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] sensor_data_len Length of data in @p sensor_data + * @param[in] sensor_data @parblock + * Byte array containing the serialized sequence of Sensor Series Column + * states in the following format: + * - 1st Sensor Raw Value X, variable length raw value representing the left + * corner of a column + * - 1st Sensor Column Width, variable length raw value representing the + * width of the column + * - 1st Sensor Raw Value Y, variable length raw value representing the + * height of the column + * - ... + * - Nth Sensor Raw Value X, variable length raw value representing the left + * corner of a column + * - Nth Sensor Column Width, variable length raw value representing the + * width of the column + * - Nth Sensor Raw Value Y, variable length raw value representing the + * height of the column + * + * If Property ID does not exist in the element, the reply must contain only + * the given Property ID, omitting the other optional fields to column + * identifiers and column values. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_server_send_series_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t sensor_data_len, + const uint8_t* sensor_data); + +/** @} */ // end addtogroup sl_btmesh_sensor_server + +/** + * @addtogroup sl_btmesh_sensor_setup_server Bluetooth Mesh Sensor Setup Server Model + * @{ + * + * @brief Bluetooth Mesh Sensor Setup Server Model + * + * This class provides the commands and messages to interface with the Sensor + * Setup Server model. Elements containing sensor model must have a setup server + * model attached. Therefore, it is initialized/deinitialized internally + * together with the server model. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_sensor_setup_server_send_cadence_status_id 0x00480028 +#define sl_btmesh_cmd_sensor_setup_server_send_settings_status_id 0x01480028 +#define sl_btmesh_cmd_sensor_setup_server_send_setting_status_id 0x02480028 +#define sl_btmesh_rsp_sensor_setup_server_send_cadence_status_id 0x00480028 +#define sl_btmesh_rsp_sensor_setup_server_send_settings_status_id 0x01480028 +#define sl_btmesh_rsp_sensor_setup_server_send_setting_status_id 0x02480028 + +/** + * @addtogroup sl_btmesh_evt_sensor_setup_server_get_cadence_request sl_btmesh_evt_sensor_setup_server_get_cadence_request + * @{ + * @brief Indicate an incoming Sensor Cadence Get request + * + * This event must be replied to by sending a Sensor Cadence Status message. + */ + +/** @brief Identifier of the get_cadence_request event */ +#define sl_btmesh_evt_sensor_setup_server_get_cadence_request_id 0x004800a8 + +/***************************************************************************//** + * @brief Data structure of the get_cadence_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_setup_server_get_cadence_request_s +{ + uint16_t server_address; /**< Address the request was directed to, either the + server's unicast address or a group address the + server subscribes to */ + uint16_t elem_index; /**< Setup Server model element index */ + uint16_t client_address; /**< Requesting client model's address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< No flags defined currently */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ +}); + +typedef struct sl_btmesh_evt_sensor_setup_server_get_cadence_request_s sl_btmesh_evt_sensor_setup_server_get_cadence_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_setup_server_get_cadence_request + +/** + * @addtogroup sl_btmesh_evt_sensor_setup_server_set_cadence_request sl_btmesh_evt_sensor_setup_server_set_cadence_request + * @{ + * @brief Indicate an incoming Sensor Cadence Set request, which can be replied + * to by sending a Sensor Cadence Status message + * + * Only Sensor Cadence Set (acknowledged) request results in a direct reply. In + * addition, configuration changes must be reported by publishing the updated + * cadence state according to model configuration. + */ + +/** @brief Identifier of the set_cadence_request event */ +#define sl_btmesh_evt_sensor_setup_server_set_cadence_request_id 0x014800a8 + +/***************************************************************************//** + * @brief Data structure of the set_cadence_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_setup_server_set_cadence_request_s +{ + uint16_t server_address; /**< Address the request was directed to, either + the server's unicast address or a group + address the server subscribes to */ + uint16_t elem_index; /**< Setup Server model element index */ + uint16_t client_address; /**< Requesting client model's address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< Bit 1 (0x02) defines whether response is + required. If set to 1, the client sent the + message with SET CADENCE opcode and expects a + CADENCE STATUS message in return. */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ + uint8_t period_divisor; /**< Fast Cadence Period Divisor, 7 bits defining + the divisor for the Publish Period */ + uint8_t trigger_type; /**< Status Trigger Type, 1 bit: 0 = discrete + value, 1 = delta percentage */ + uint8array params; /**< Optional byte array containing serialized + fields of Sensor Cadence state, excluding the + property ID, period divisor, and trigger type + - Fast Cadence Period Divisor, 7 bits + - Status Trigger type, 1 bit (0 = discrete + value, 1 = percentage) + - Status Trigger Delta Down, variable length + - Status Trigger Delta Up, variable length + - Status Min Interval, 8 bits, representing + a power of 2 milliseconds. Valid range is + 0-26 + - Fast Cadence Low, variable length, lower + bound for the fast cadence range + - Low Cadence Low, variable length, higher + bound for the fast cadence range */ +}); + +typedef struct sl_btmesh_evt_sensor_setup_server_set_cadence_request_s sl_btmesh_evt_sensor_setup_server_set_cadence_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_setup_server_set_cadence_request + +/** + * @addtogroup sl_btmesh_evt_sensor_setup_server_get_settings_request sl_btmesh_evt_sensor_setup_server_get_settings_request + * @{ + * @brief Indicate an incoming Sensor Settings Get message to fetch the Sensor + * Setting Property IDs configured for the given Sensor + * + * This event must be replied to by sending a Sensor Settings Status message. + */ + +/** @brief Identifier of the get_settings_request event */ +#define sl_btmesh_evt_sensor_setup_server_get_settings_request_id 0x024800a8 + +/***************************************************************************//** + * @brief Data structure of the get_settings_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_setup_server_get_settings_request_s +{ + uint16_t server_address; /**< Address the request was directed to, either the + server's unicast address or a group address the + server subscribes to */ + uint16_t elem_index; /**< Setup Server model element index */ + uint16_t client_address; /**< Requesting client model's address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< No flags defined currently */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ +}); + +typedef struct sl_btmesh_evt_sensor_setup_server_get_settings_request_s sl_btmesh_evt_sensor_setup_server_get_settings_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_setup_server_get_settings_request + +/** + * @addtogroup sl_btmesh_evt_sensor_setup_server_get_setting_request sl_btmesh_evt_sensor_setup_server_get_setting_request + * @{ + * @brief Indicate an incoming Sensor Get Setting request to fetch the value of + * a setting to a given sensor of a setting given by its ID + * + * This event must be replied to by sending a Sensor Setting Status message. + */ + +/** @brief Identifier of the get_setting_request event */ +#define sl_btmesh_evt_sensor_setup_server_get_setting_request_id 0x034800a8 + +/***************************************************************************//** + * @brief Data structure of the get_setting_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_setup_server_get_setting_request_s +{ + uint16_t server_address; /**< Address the request was directed to, either the + server's unicast address, or a group address the + server subscribes to */ + uint16_t elem_index; /**< Setup Server model element index */ + uint16_t client_address; /**< Requesting client model's address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< No flags defined currently */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ + uint16_t setting_id; /**< Sensor Setting Property ID field identifying the + device property of a setting. Range: 0x0001 - + 0xffff, 0x0000 is prohibited. */ +}); + +typedef struct sl_btmesh_evt_sensor_setup_server_get_setting_request_s sl_btmesh_evt_sensor_setup_server_get_setting_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_setup_server_get_setting_request + +/** + * @addtogroup sl_btmesh_evt_sensor_setup_server_set_setting_request sl_btmesh_evt_sensor_setup_server_set_setting_request + * @{ + * @brief Indicate an incoming Sensor Set Setting request, which can be replied + * to by sending a Sensor Setting Status message + * + * Only Setting Set (acknowledged) request is replied directly to the client. In + * addition, configuration changes must be reported by publishing the new state + * according to model publishing configuration. + */ + +/** @brief Identifier of the set_setting_request event */ +#define sl_btmesh_evt_sensor_setup_server_set_setting_request_id 0x044800a8 + +/***************************************************************************//** + * @brief Data structure of the set_setting_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_setup_server_set_setting_request_s +{ + uint16_t server_address; /**< Address the request was directed to, either + the server's unicast address, or a group + address the server subscribes to. */ + uint16_t elem_index; /**< Setup Server model element index */ + uint16_t client_address; /**< Requesting client address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< Bit 1 (0x02) defines whether response is + required. If set to 1, the client sent the + message with SET SETTING opcode and expects a + SETTING STATUS message in return. */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ + uint16_t setting_id; /**< Sensor Setting Property ID field identifying + the device property of a setting. Range: + 0x0001 - 0xffff, 0x0000 is prohibited. */ + uint8array raw_value; /**< Sensor Setting raw value. Size and + representation depends on the type defined by + the Sensor Setting Property ID. */ +}); + +typedef struct sl_btmesh_evt_sensor_setup_server_set_setting_request_s sl_btmesh_evt_sensor_setup_server_set_setting_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_setup_server_set_setting_request + +/** + * @addtogroup sl_btmesh_evt_sensor_setup_server_publish sl_btmesh_evt_sensor_setup_server_publish + * @{ + * @brief Indicate that the publishing period timer elapsed and the app + * should/can publish its state. + */ + +/** @brief Identifier of the publish event */ +#define sl_btmesh_evt_sensor_setup_server_publish_id 0x054800a8 + +/***************************************************************************//** + * @brief Data structure of the publish event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_setup_server_publish_s +{ + uint16_t elem_index; /**< Client model element index */ + uint32_t period_ms; /**< The current publishing period that can be used to + estimate the next tick, e.g., when the state should + be reported at higher frequency. */ +}); + +typedef struct sl_btmesh_evt_sensor_setup_server_publish_s sl_btmesh_evt_sensor_setup_server_publish_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_setup_server_publish + +/***************************************************************************//** + * + * Reply to a Get/Set Cadence client request with a Cadence Status message. Only + * Cadence Set (acknowledged) must be answered by sending the status message to + * the client. In addition, configuration changes must be published according to + * model publishing configuration. + * + * @param[in] client_address Destination client address The address 0x0000 can + * be used to publish the message according model configuration instead of a + * direct reply. + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use + * @param[in] flags No flags defined currently + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] params_len Length of data in @p params + * @param[in] params Optional byte array containing the serialized Sensor + * Cadence state, excluding the property ID. If not empty, the state consists + * of the following fields: + * - Fast Cadence Period Divisor, 7 bits + * - Status Trigger type, 1 bits (0 = discrete value, 1 = percentage) + * - Status Trigger Delta Down, variable length + * - Status Trigger Delta Up, variable length + * - Status Min Interval, 8 bits, representing a power of 2 milliseconds. + * Valid range is 0-26 + * - Fast Cadence Low, variable length, lower bound for the fast cadence + * range + * - Low Cadence Low, variable length, higher bound for the fast cadence + * range + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_setup_server_send_cadence_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t params_len, + const uint8_t* params); + +/***************************************************************************//** + * + * Reply to a Get Settings client request with a Settings Status message. + * + * @param[in] client_address Destination client model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use + * @param[in] flags No flags defined currently + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] setting_ids_len Length of data in @p setting_ids + * @param[in] setting_ids Array of 16-bit Setting Property IDs of the settings + * the given sensor has + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_setup_server_send_settings_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t setting_ids_len, + const uint8_t* setting_ids); + +/***************************************************************************//** + * + * Reply to a Get/Set Setting client request with a Setting Status message. Only + * Set Setting (acknowledged) request must be answered by sending a reply to the + * unicast address of the sender. In addition, configuration changes must be + * published if model publishing is set up. + * + * @param[in] client_address Destination client model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use + * @param[in] flags No flags defined currently + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] setting_id Sensor Setting Property ID field identifying the device + * property of a setting. Range: 0x0001 - 0xffff, 0x0000 is prohibited. + * @param[in] raw_value_len Length of data in @p raw_value + * @param[in] raw_value Sensor Setting raw value. Size and representation + * depends on the type defined by the Sensor Setting Property ID. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_setup_server_send_setting_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + uint16_t setting_id, + size_t raw_value_len, + const uint8_t* raw_value); + +/** @} */ // end addtogroup sl_btmesh_sensor_setup_server + +/** + * @addtogroup sl_btmesh_sensor_client Bluetooth Mesh Sensor Client Model + * @{ + * + * @brief Bluetooth Mesh Sensor Client Model + * + * This class provides the commands and messages to interface with the Sensor + * Client model. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_sensor_client_init_id 0x00490028 +#define sl_btmesh_cmd_sensor_client_deinit_id 0x01490028 +#define sl_btmesh_cmd_sensor_client_get_descriptor_id 0x02490028 +#define sl_btmesh_cmd_sensor_client_get_id 0x03490028 +#define sl_btmesh_cmd_sensor_client_get_column_id 0x04490028 +#define sl_btmesh_cmd_sensor_client_get_series_id 0x05490028 +#define sl_btmesh_cmd_sensor_client_get_cadence_id 0x06490028 +#define sl_btmesh_cmd_sensor_client_set_cadence_id 0x07490028 +#define sl_btmesh_cmd_sensor_client_get_settings_id 0x08490028 +#define sl_btmesh_cmd_sensor_client_get_setting_id 0x09490028 +#define sl_btmesh_cmd_sensor_client_set_setting_id 0x0a490028 +#define sl_btmesh_rsp_sensor_client_init_id 0x00490028 +#define sl_btmesh_rsp_sensor_client_deinit_id 0x01490028 +#define sl_btmesh_rsp_sensor_client_get_descriptor_id 0x02490028 +#define sl_btmesh_rsp_sensor_client_get_id 0x03490028 +#define sl_btmesh_rsp_sensor_client_get_column_id 0x04490028 +#define sl_btmesh_rsp_sensor_client_get_series_id 0x05490028 +#define sl_btmesh_rsp_sensor_client_get_cadence_id 0x06490028 +#define sl_btmesh_rsp_sensor_client_set_cadence_id 0x07490028 +#define sl_btmesh_rsp_sensor_client_get_settings_id 0x08490028 +#define sl_btmesh_rsp_sensor_client_get_setting_id 0x09490028 +#define sl_btmesh_rsp_sensor_client_set_setting_id 0x0a490028 + +/** + * @addtogroup sl_btmesh_evt_sensor_client_descriptor_status sl_btmesh_evt_sensor_client_descriptor_status + * @{ + * @brief Indicate an incoming Sensor Descriptor Status message, received as a + * response to the @ref sl_btmesh_sensor_client_get_descriptor command + */ + +/** @brief Identifier of the descriptor_status event */ +#define sl_btmesh_evt_sensor_client_descriptor_status_id 0x004900a8 + +/***************************************************************************//** + * @brief Data structure of the descriptor_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_client_descriptor_status_s +{ + uint16_t client_address; /**< Destination client model address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Source server model address */ + uint16_t appkey_index; /**< The application key index to use. */ + uint8_t flags; /**< No flags defined currently */ + uint8array descriptors; /**< One or more Sensor Descriptor states (N times + 8 bytes) As a reply to a Get message + referencing a sensor that does not exist, the + array contains only the requested Property ID. + Format of the Descriptor state is as follows: + - Property ID, 16 bits + - Sensor Positive Tolerance, 12 bits + - Sensor Negative Tolerance, 12 bits + - Sensor Sampling Function, 8 bits + - Sensor Measurement Period, 8 bits + - Sensor Update Interval, 8 bits + {/ul> */ +}); + +typedef struct sl_btmesh_evt_sensor_client_descriptor_status_s sl_btmesh_evt_sensor_client_descriptor_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_client_descriptor_status + +/** + * @addtogroup sl_btmesh_evt_sensor_client_cadence_status sl_btmesh_evt_sensor_client_cadence_status + * @{ + * @brief Indicate an incoming Sensor Cadence Status message, received as a + * response to the @ref sl_btmesh_sensor_client_get_cadence or @ref + * sl_btmesh_sensor_client_set_cadence command + */ + +/** @brief Identifier of the cadence_status event */ +#define sl_btmesh_evt_sensor_client_cadence_status_id 0x014900a8 + +/***************************************************************************//** + * @brief Data structure of the cadence_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_client_cadence_status_s +{ + uint16_t client_address; /**< Destination client model address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Source server model address */ + uint16_t appkey_index; /**< The application key index to use. */ + uint8_t flags; /**< No flags defined currently */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ + uint8array params; /**< Optional byte array containing serialized + fields of Sensor Cadence state, excluding the + property ID + - Fast Cadence Period Divisor, 7 bits + - Status Trigger type, 1 bit (0 = discrete + value, 1 = percentage) + - Status Trigger Delta Down, variable length + - Status Trigger Delta Up, variable length + - Status Min Interval, 8 bits, representing + a power of 2 milliseconds. Valid range is + 0-26 + - Fast Cadence Low, variable length, lower + bound for the fast cadence range + - Low Cadence Low, variable length, higher + bound for the fast cadence range */ +}); + +typedef struct sl_btmesh_evt_sensor_client_cadence_status_s sl_btmesh_evt_sensor_client_cadence_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_client_cadence_status + +/** + * @addtogroup sl_btmesh_evt_sensor_client_settings_status sl_btmesh_evt_sensor_client_settings_status + * @{ + * @brief Indicate an incoming Sensor Settings Status message, received as a + * response to the @ref sl_btmesh_sensor_client_get_settings command or + * unsolicited message + */ + +/** @brief Identifier of the settings_status event */ +#define sl_btmesh_evt_sensor_client_settings_status_id 0x024900a8 + +/***************************************************************************//** + * @brief Data structure of the settings_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_client_settings_status_s +{ + uint16_t client_address; /**< Destination client model address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Source server model address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< No flags defined currently */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ + uint8array setting_ids; /**< Array of 16-bit Setting Property IDs of the + settings the given sensor has */ +}); + +typedef struct sl_btmesh_evt_sensor_client_settings_status_s sl_btmesh_evt_sensor_client_settings_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_client_settings_status + +/** + * @addtogroup sl_btmesh_evt_sensor_client_setting_status sl_btmesh_evt_sensor_client_setting_status + * @{ + * @brief Indicate an incoming Sensor Setting Status message, received as a + * response to the @ref sl_btmesh_sensor_client_get_setting or @ref + * sl_btmesh_sensor_client_set_setting command or unsolicited message + */ + +/** @brief Identifier of the setting_status event */ +#define sl_btmesh_evt_sensor_client_setting_status_id 0x034900a8 + +/***************************************************************************//** + * @brief Data structure of the setting_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_client_setting_status_s +{ + uint16_t client_address; /**< Destination client model address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Source server model address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< No flags defined currently */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ + uint16_t setting_id; /**< Sensor Setting Property ID field identifying + the device property of a setting. Range: + 0x0001 - 0xffff, 0x0000 is prohibited. */ + uint8array raw_value; /**< Sensor Setting raw value. Size and + representation depends on the type defined by + the Sensor Setting Property ID. */ +}); + +typedef struct sl_btmesh_evt_sensor_client_setting_status_s sl_btmesh_evt_sensor_client_setting_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_client_setting_status + +/** + * @addtogroup sl_btmesh_evt_sensor_client_status sl_btmesh_evt_sensor_client_status + * @{ + * @brief Indicate an incoming Sensor Status event as a published data state + * from the sensor server or as a reply to the @ref sl_btmesh_sensor_client_get + * command + */ + +/** @brief Identifier of the status event */ +#define sl_btmesh_evt_sensor_client_status_id 0x044900a8 + +/***************************************************************************//** + * @brief Data structure of the status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_client_status_s +{ + uint16_t client_address; /**< Destination client model address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Source server model address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< No flags defined currently */ + uint8array sensor_data; /**< Serialized Sensor Data consisting of one or + more Sensor state for each sensor within the + element. To simplify processing, the byte + array is in TLV format: + - 1st Property ID: 16 bits + - Value Length: 8 bits + - Value: variable + - 2nd Property ID: 16 bits + - Value Length: 8 bits + - Value: variable + - ... + + If the requested Property ID does not exist at + the server element, the reply contains only + the given Property ID and zero length. */ +}); + +typedef struct sl_btmesh_evt_sensor_client_status_s sl_btmesh_evt_sensor_client_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_client_status + +/** + * @addtogroup sl_btmesh_evt_sensor_client_column_status sl_btmesh_evt_sensor_client_column_status + * @{ + * @brief Indicate an incoming Sensor Column Status event, received as a + * response to the @ref sl_btmesh_sensor_client_get_column command or + * unsolicited message + */ + +/** @brief Identifier of the column_status event */ +#define sl_btmesh_evt_sensor_client_column_status_id 0x054900a8 + +/***************************************************************************//** + * @brief Data structure of the column_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_client_column_status_s +{ + uint16_t client_address; /**< Destination client model address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Source server model address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< No flags defined currently */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ + uint8array sensor_data; /**< Byte array containing the serialized Sensor + Series Column state in the following format: + - Sensor Raw Value X, variable length raw + value representing the left corner of a + column + - Sensor Column Width, variable length raw + value representing the width of the column + - Sensor Raw Value Y, variable length raw + value representing the height of the + column + + If the requested Property ID or column ID does + not exist at the server elements, the reply + status message contains only these two fields, + omitting column width and height values. */ +}); + +typedef struct sl_btmesh_evt_sensor_client_column_status_s sl_btmesh_evt_sensor_client_column_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_client_column_status + +/** + * @addtogroup sl_btmesh_evt_sensor_client_series_status sl_btmesh_evt_sensor_client_series_status + * @{ + * @brief Indicate an incoming Sensor Series Status message, received as a + * response to the @ref sl_btmesh_sensor_client_get_series command or + * unsolicited message + */ + +/** @brief Identifier of the series_status event */ +#define sl_btmesh_evt_sensor_client_series_status_id 0x064900a8 + +/***************************************************************************//** + * @brief Data structure of the series_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_client_series_status_s +{ + uint16_t client_address; /**< Destination client model address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Source server model address */ + uint16_t appkey_index; /**< The application key index to use */ + uint8_t flags; /**< No flags defined currently */ + uint16_t property_id; /**< Property ID for the sensor. Range: 0x0001 - + 0x0ffff for a specific device property, the + value 0x0000 is prohibited. */ + uint8array sensor_data; /**< Byte array containing the serialized sequence + of Sensor Serier Column states in the + following format: + - 1st Sensor Raw Value X, variable length + raw value representing the left corner of + a column + - 1st Sensor Column Width, variable length + raw value representing the width of the + column + - 1st Sensor Raw Value Y, variable length + raw value representing the height of the + column + - ... + - Nth Sensor Raw Value X, variable length + raw value representing the left corner of + a column + - Nth Sensor Column Width, variable length + raw value representing the width of the + column + - Nth Sensor Raw Value Y, variable length + raw value representing the height of the + column + + If a Property ID or column requested does not + exist at the server element, the reply Series + Status message contains only the given + Property ID. */ +}); + +typedef struct sl_btmesh_evt_sensor_client_series_status_s sl_btmesh_evt_sensor_client_series_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_client_series_status + +/** + * @addtogroup sl_btmesh_evt_sensor_client_publish sl_btmesh_evt_sensor_client_publish + * @{ + * @brief Indicate that the publishing period timer elapsed and the app + * should/can publish its state or any request. + */ + +/** @brief Identifier of the publish event */ +#define sl_btmesh_evt_sensor_client_publish_id 0x074900a8 + +/***************************************************************************//** + * @brief Data structure of the publish event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sensor_client_publish_s +{ + uint16_t elem_index; /**< Client model element index */ + uint32_t period_ms; /**< The current publishing period that can be used to + estimate the next tick, e.g., when the state should + be reported at higher frequency. */ +}); + +typedef struct sl_btmesh_evt_sensor_client_publish_s sl_btmesh_evt_sensor_client_publish_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sensor_client_publish + +/***************************************************************************//** + * + * Initialize the Sensor Client model. Sensor Client does not have any internal + * configuration, it only activates the model in the Bluetooth mesh stack. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_init(); + +/***************************************************************************//** + * + * Deinitialize the Sensor Client model. There are no sensor-specific + * configurations to reset. Normally, models are initialized at boot and never + * deinitialized. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_deinit(); + +/***************************************************************************//** + * + * Get the Sensor Descriptor state of one specific sensor or all sensors within + * a model. Results in a Sensor Descriptor Status event + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags No flags defined currently + * @param[in] property_id ProperyID for the sensor (optional). Range: 0x0001 - + * 0xffff for a specific device property ID or 0x0000 to get all (the value + * 0x0000 is prohibited as a real ID). + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sensor_client_descriptor_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_get_descriptor(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id); + +/***************************************************************************//** + * + * Send a Sensor Get message to fetch the Sensor Data state of one specific + * sensor given by its Property ID, results in a Sensor Status event. The + * Property ID 0x0000 can be used to fetch all sensor values present at a server + * element. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags No flags defined currently + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, or 0x0000 when not used to get values for + * all sensors present in the element. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sensor_client_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_get(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id); + +/***************************************************************************//** + * + * Get a Sensor Series Column state, results in a Sensor Column Status event. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags No flags defined currently + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] column_id_len Length of data in @p column_id + * @param[in] column_id Raw value identifying a column + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sensor_client_column_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_get_column(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t column_id_len, + const uint8_t* column_id); + +/***************************************************************************//** + * + * Get a Sensor Series Column state, which results in a Sensor Series Status + * event. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags No flags defined currently + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] column_ids_len Length of data in @p column_ids + * @param[in] column_ids Raw values identifying starting and ending columns + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sensor_client_series_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_get_series(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t column_ids_len, + const uint8_t* column_ids); + +/***************************************************************************//** + * + * Send a Sensor Get Cadence message to get the Sensor Cadence state, which + * results in a Sensor Cadence Status message. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use + * @param[in] flags No flags defined currently + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sensor_client_cadence_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_get_cadence(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id); + +/***************************************************************************//** + * + * Send a Sensor Cadence Set message, either acknowledged or unacknowledged, + * depending on the message flags. Acknowledged message results in a Cadence + * Status reply message and event. The server must publish its new state in any + * case. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use + * @param[in] flags Bit 1 (0x02) defines whether response is required. + * If set to 1, SET CADENCE message will be sent, zero will send SET CADENCE + * UNACKNOWLEDGED + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] params_len Length of data in @p params + * @param[in] params Byte array containing serialized fields of Sensor Cadence + * state, excluding the property ID + * - Fast Cadence Period Divisor, 7 bits + * - Status Trigger type, 1 bit (0 = discrete value, 1 = percentage) + * - Status Trigger Delta Down, variable length + * - Status Trigger Delta Up, variable length + * - Status Min Interval, 8 bits, representing a power of 2 milliseconds. + * Valid range is 0-26 + * - Fast Cadence Low, variable length, lower bound for the fast cadence + * range + * - Low Cadence Low, variable length, higher bound for the fast cadence + * range + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sensor_client_cadence_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_set_cadence(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t params_len, + const uint8_t* params); + +/***************************************************************************//** + * + * Send a Sensor Settings Get message to fetch the Sensor Property IDs present + * for the given sensor, which results in a Sensor Settings Status event. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use + * @param[in] flags No flags defined currently + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sensor_client_settings_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_get_settings(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id); + +/***************************************************************************//** + * + * Send a Sensor Get Setting message to get the value of a specific setting for + * the given sensor, which results in a Sensor Setting Status event. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags No flags defined currently + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] setting_id Sensor Setting Property ID field identifying the device + * property of a setting. Range: 0x0001 - 0xffff, 0x0000 is prohibited. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sensor_client_setting_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_get_setting(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + uint16_t setting_id); + +/***************************************************************************//** + * + * Send Sensor Setting Set message to update the value of a specific setting for + * the given sensor, either acknowledged or unacknowledged depending on the + * message flags. Only acknowledged requests will have a direct Sensor Setting + * Status reply. The server must publish its new state in any case. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use + * @param[in] flags Bit 1 (0x02) defines whether response is required. + * If set to 1, SET SETTING message is sent, zero will use SET SETTING + * UNACKNOWLEDGED. + * @param[in] property_id Property ID for the sensor. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] setting_id Sensor Setting Property ID field identifying the device + * property of a setting. Range: 0x0001 - 0xffff, 0x0000 is prohibited. + * @param[in] raw_value_len Length of data in @p raw_value + * @param[in] raw_value Sensor Setting raw value. Size and representation + * depends on the type defined by the Sensor Setting Property ID. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sensor_client_setting_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sensor_client_set_setting(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + uint16_t setting_id, + size_t raw_value_len, + const uint8_t* raw_value); + +/** @} */ // end addtogroup sl_btmesh_sensor_client + +/** + * @addtogroup sl_btmesh_fw_update_client Bluetooth Mesh Firmware Update Client Model + * @{ + * + * @brief Bluetooth Mesh Firmware Update Client Model + * + * This class provides the commands and messages to interface with the Firmware + * Update Client model. + * + * If Firmware Distribution Server is used only the @ref + * sl_btmesh_fw_update_client_init function shall be called as all of the other + * functions are called by the Distribution Server inside the BT Mesh stack + * automatically. + * + * The MBT Client must be initialized before the Update Client. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_fw_update_client_init_id 0x004a0028 +#define sl_btmesh_cmd_fw_update_client_deinit_id 0x014a0028 +#define sl_btmesh_cmd_fw_update_client_get_info_id 0x084a0028 +#define sl_btmesh_cmd_fw_update_client_get_update_id 0x094a0028 +#define sl_btmesh_cmd_fw_update_client_start_update_id 0x0a4a0028 +#define sl_btmesh_cmd_fw_update_client_cancel_update_id 0x0b4a0028 +#define sl_btmesh_cmd_fw_update_client_apply_update_id 0x0c4a0028 +#define sl_btmesh_cmd_fw_update_client_check_metadata_id 0x0d4a0028 +#define sl_btmesh_rsp_fw_update_client_init_id 0x004a0028 +#define sl_btmesh_rsp_fw_update_client_deinit_id 0x014a0028 +#define sl_btmesh_rsp_fw_update_client_get_info_id 0x084a0028 +#define sl_btmesh_rsp_fw_update_client_get_update_id 0x094a0028 +#define sl_btmesh_rsp_fw_update_client_start_update_id 0x0a4a0028 +#define sl_btmesh_rsp_fw_update_client_cancel_update_id 0x0b4a0028 +#define sl_btmesh_rsp_fw_update_client_apply_update_id 0x0c4a0028 +#define sl_btmesh_rsp_fw_update_client_check_metadata_id 0x0d4a0028 + +/** + * @brief The Additional Information value for the firmware update candidate. + * This value is reported in the Update Server's Metadata Status message, and in + * the Update Status message if an update is active. This value indicates what + * will happen to the Updating Node after the new firmware is applied + * successfully and the node is rebooted. + */ +typedef enum +{ + sl_btmesh_fw_update_client_additional_info_none = 0x0, /**< + (0x0) + No + changes + to + Device + Composition + Data. */ + sl_btmesh_fw_update_client_additional_info_dcd_change_no_rp = 0x1, /**< + (0x1) + Device + Composition + Data + will + change, + but + Remote + Provisioning, + and + thus + Composition + Data + Refresh + is + not + supported. + The + node + will + need + to + be + re-provisioned + to + take + its + new + models + into + use. */ + sl_btmesh_fw_update_client_additional_info_dcd_change_rp_supported = 0x2, /**< + (0x2) + Device + Composition + Data + will + change, + and + can + be + refreshed. */ + sl_btmesh_fw_update_client_additional_info_unprovisioned_after_update = 0x3 /**< + (0x3) + The + node + will + be + unprovisioned + after + the + update. */ +} sl_btmesh_fw_update_client_additional_info_t; + +/** + * @addtogroup sl_btmesh_evt_fw_update_client_info_status_current_fwid sl_btmesh_evt_fw_update_client_info_status_current_fwid + * @{ + * @brief Report information about firmware images installed on a node, FWID + * part of the Information Status message + * + * Sent as a response to @ref sl_btmesh_fw_update_client_get_info + */ + +/** @brief Identifier of the info_status_current_fwid event */ +#define sl_btmesh_evt_fw_update_client_info_status_current_fwid_id 0x004a00a8 + +/***************************************************************************//** + * @brief Data structure of the info_status_current_fwid event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_update_client_info_status_current_fwid_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint8_t index; /**< Index of this FWID in the Firmware Information + List */ + uint8_t count; /**< Total number of entries in the Firmware + Information List */ + uint8array current_fwid; /**< Current Firmware ID */ +}); + +typedef struct sl_btmesh_evt_fw_update_client_info_status_current_fwid_s sl_btmesh_evt_fw_update_client_info_status_current_fwid_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_update_client_info_status_current_fwid + +/** + * @addtogroup sl_btmesh_evt_fw_update_client_info_status_update_uri sl_btmesh_evt_fw_update_client_info_status_update_uri + * @{ + * @brief Report information about firmware images installed on a node, Update + * URI part of the Information Status message + * + * Send as a response to @ref sl_btmesh_fw_update_client_get_info + */ + +/** @brief Identifier of the info_status_update_uri event */ +#define sl_btmesh_evt_fw_update_client_info_status_update_uri_id 0x014a00a8 + +/***************************************************************************//** + * @brief Data structure of the info_status_update_uri event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_update_client_info_status_update_uri_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint8_t index; /**< Index of this URI in the Firmware Information + List */ + uint8_t count; /**< Total number of entries in the Firmware + Information List */ + uint8array update_uri; /**< Update URI */ +}); + +typedef struct sl_btmesh_evt_fw_update_client_info_status_update_uri_s sl_btmesh_evt_fw_update_client_info_status_update_uri_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_update_client_info_status_update_uri + +/** + * @addtogroup sl_btmesh_evt_fw_update_client_update_status sl_btmesh_evt_fw_update_client_update_status + * @{ + * @brief Report the status of a firmware update + * + * Sent in response to a @ref sl_btmesh_fw_update_client_get_update @ref + * sl_btmesh_fw_update_client_start_update @ref + * sl_btmesh_fw_update_client_cancel_update @ref + * sl_btmesh_fw_update_client_apply_update messages. + */ + +/** @brief Identifier of the update_status event */ +#define sl_btmesh_evt_fw_update_client_update_status_id 0x024a00a8 + +/***************************************************************************//** + * @brief Data structure of the update_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_update_client_update_status_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint8_t status; /**< Enum @ref + sl_btmesh_fw_update_server_update_status_t. + Status code returned */ + uint8_t phase; /**< Enum @ref + sl_btmesh_fw_update_server_update_phase_t. + Phase of the Update Server */ + uint8_t additional_information; /**< Enum @ref + sl_btmesh_fw_update_client_additional_info_t. + Additional information about what + will happen to the node after the + update is applied. 0 = no changes + to DCD; 1 = DCD will change but + Composition Data Refresh is not + supported; 2 = DCD change and + Composition Data Refresh is + supported; 3 = node will become + unprovisioned. */ + uint16_t update_timeout_base; /**< Base value for BLOB Transfer + Timeout */ + uint8_t distributor_ttl; /**< TTL used by the Distributor. + Ignore if no update is active. */ + sl_bt_uuid_64_t blob_id; /**< BLOB ID of the firmware being + transferred. Ignore if no update + is active. */ + uint8_t fw_index; /**< Index of the firmware being + updated on the node. */ +}); + +typedef struct sl_btmesh_evt_fw_update_client_update_status_s sl_btmesh_evt_fw_update_client_update_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_update_client_update_status + +/** + * @addtogroup sl_btmesh_evt_fw_update_client_metadata_status sl_btmesh_evt_fw_update_client_metadata_status + * @{ + * @brief Report whether a server can accept a firmware update + * + * Sent in response to a @ref sl_btmesh_fw_update_client_check_metadata + */ + +/** @brief Identifier of the metadata_status event */ +#define sl_btmesh_evt_fw_update_client_metadata_status_id 0x0a4a00a8 + +/***************************************************************************//** + * @brief Data structure of the metadata_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_update_client_metadata_status_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint8_t status; /**< Enum @ref + sl_btmesh_fw_update_server_update_status_t. + Status code returned */ + uint8_t additional_information; /**< Enum @ref + sl_btmesh_fw_update_client_additional_info_t. + Additional information about what will + happen to the node after the update is + applied. 0 = no changes to DCD; 1 = DCD + will change but Composition Data Refresh + is not supported; 2 = DCD change and + Composition Data Refresh is supported; 3 + = node will become unprovisioned. */ + uint8_t fw_index; /**< Index of the firmware that was checked + against the metadata. */ +}); + +typedef struct sl_btmesh_evt_fw_update_client_metadata_status_s sl_btmesh_evt_fw_update_client_metadata_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_update_client_metadata_status + +/***************************************************************************//** + * + * Initialize the Firmware Update Client model. + * + * @param[in] elem_index Client model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_client_init(uint16_t elem_index); + +/***************************************************************************//** + * + * Deinitialize the Firmware Update Client model. + * + * @param[in] elem_index Client model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_client_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Query information about the firmware images installed on a node. The received + * query result is carried in @ref + * sl_btmesh_evt_fw_update_client_info_status_current_fwid and @ref + * sl_btmesh_evt_fw_update_client_info_status_update_uri events. + * + * @param[in] elem_index Client model element index + * @param[in] dst Destination address + * @param[in] virtual_address If the destination address is a VA hash, this + * needs to contain the full virtual address label UUID. Otherwise, the value + * of this field will be ignored. + * @param[in] appkey_index Application key index to use for encrypting the + * message. + * @param[in] ttl The time-to-live value to use. Valid values: 0, range:[2-127] + * and 255. + * @param[in] first_index Index of the first requested entry + * @param[in] max_entries Maximum number of entries + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_update_client_info_status_current_fwid + * - @ref sl_btmesh_evt_fw_update_client_info_status_update_uri + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_client_get_info(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl, + uint8_t first_index, + uint8_t max_entries); + +/***************************************************************************//** + * + * Get the current status of the server. @ref + * sl_btmesh_evt_fw_update_client_update_status is sent as a response. + * + * @param[in] elem_index Client model element index + * @param[in] dst Destination address + * @param[in] virtual_address If the destination address is a VA hash, this + * needs to contain the full virtual address label UUID. Otherwise, the value + * of this field will be ignored. + * @param[in] appkey_index Application key index to use for encrypting the + * message. + * @param[in] ttl The time-to-live value to use. Valid values: 0, range:[2-127] + * and 255. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_update_client_update_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_client_get_update(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl); + +/***************************************************************************//** + * + * Start a firmware update on a server. @ref + * sl_btmesh_evt_fw_update_client_update_status is sent as a response. + * + * @param[in] elem_index Client model element index + * @param[in] dst Destination address + * @param[in] virtual_address If the destination address is a VA hash, this + * needs to contain the full virtual address label UUID. Otherwise, the value + * of this field will be ignored. + * @param[in] appkey_index Application key index to use for encrypting the + * message. + * @param[in] ttl The time-to-live value to use for sending this message. Valid + * values: 0, range:[2-127] and 255. + * @param[in] update_ttl The time-to-live value the node should use when sending + * its status responses in the firmware image transfer. Valid values: 0, + * range:[2-127] and 255. + * @param[in] update_timeout_base Update Timeout Base value to inform to the + * node. + * @param[in] blob_id The BLOB ID of the firmware image that is going to be + * transferred. + * @param[in] fw_index Index of the firmware on the node to be updated. + * @param[in] metadata_len Length of data in @p metadata + * @param[in] metadata Metadata associated with the firmware image to be + * transferred. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_update_client_update_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_client_start_update(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl, + uint8_t update_ttl, + uint16_t update_timeout_base, + sl_bt_uuid_64_t blob_id, + uint8_t fw_index, + size_t metadata_len, + const uint8_t* metadata); + +/***************************************************************************//** + * + * Cancel a firmware update and delete any stored information about the update + * on a server. @ref sl_btmesh_evt_fw_update_client_update_status is sent as a + * response. + * + * @param[in] elem_index Client model element index + * @param[in] dst Destination address + * @param[in] virtual_address If the destination address is a VA hash, this + * needs to contain the full virtual address label UUID. Otherwise, the value + * of this field will be ignored. + * @param[in] appkey_index Application key index to use for encrypting the + * message. + * @param[in] ttl The time-to-live value to use. Valid values: 0, range:[2-127] + * and 255. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_update_client_update_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_client_cancel_update(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl); + +/***************************************************************************//** + * + * Apply a firmware image that has been transferred to a server. @ref + * sl_btmesh_evt_fw_update_client_update_status is sent as a response. + * + * @param[in] elem_index Client model element index + * @param[in] dst Destination address + * @param[in] virtual_address If the destination address is a VA hash, this + * needs to contain the full virtual address label UUID. Otherwise, the value + * of this field will be ignored. + * @param[in] appkey_index Application key index to use for encrypting the + * message. + * @param[in] ttl The time-to-live value to use. Valid values: 0, range:[2-127] + * and 255. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_update_client_update_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_client_apply_update(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl); + +/***************************************************************************//** + * + * Check whether the node can accept a firmware based on the firmware's + * metadata. @ref sl_btmesh_evt_fw_update_client_metadata_status is sent as a + * response. + * + * @param[in] elem_index Client model element index + * @param[in] dst Destination address + * @param[in] virtual_address If the destination address is a VA hash, this + * needs to contain the full virtual address label UUID. Otherwise, the value + * of this field will be ignored. + * @param[in] appkey_index Application key index to use for encrypting the + * message. + * @param[in] ttl The time-to-live value to use. Valid values: 0, range:[2-127] + * and 255. + * @param[in] fw_index Index of the firmware on the node to check the metadata + * against. + * @param[in] metadata_len Length of data in @p metadata + * @param[in] metadata Metadata to check. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_update_client_metadata_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_client_check_metadata(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl, + uint8_t fw_index, + size_t metadata_len, + const uint8_t* metadata); + +/** @} */ // end addtogroup sl_btmesh_fw_update_client + +/** + * @addtogroup sl_btmesh_lc_client Bluetooth Mesh Light Control Client Model + * @{ + * + * @brief Bluetooth Mesh Light Control Client Model + * + * Bluetooth Mesh LC Client model API provides functionality to send and receive + * messages to/from the LC Server and LC Setup Server models. + * + * Throughout the API, the client model that's used is identified by its element + * address and model ID, while the server model responding to the client model + * requests is identified by its element address and model ID. + * + * The API has functions for querying server model states and requesting server + * model state changes + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_lc_client_init_id 0x004c0028 +#define sl_btmesh_cmd_lc_client_get_mode_id 0x014c0028 +#define sl_btmesh_cmd_lc_client_set_mode_id 0x024c0028 +#define sl_btmesh_cmd_lc_client_get_om_id 0x044c0028 +#define sl_btmesh_cmd_lc_client_set_om_id 0x054c0028 +#define sl_btmesh_cmd_lc_client_get_light_onoff_id 0x074c0028 +#define sl_btmesh_cmd_lc_client_set_light_onoff_id 0x084c0028 +#define sl_btmesh_cmd_lc_client_get_property_id 0x094c0028 +#define sl_btmesh_cmd_lc_client_set_property_id 0x0a4c0028 +#define sl_btmesh_rsp_lc_client_init_id 0x004c0028 +#define sl_btmesh_rsp_lc_client_get_mode_id 0x014c0028 +#define sl_btmesh_rsp_lc_client_set_mode_id 0x024c0028 +#define sl_btmesh_rsp_lc_client_get_om_id 0x044c0028 +#define sl_btmesh_rsp_lc_client_set_om_id 0x054c0028 +#define sl_btmesh_rsp_lc_client_get_light_onoff_id 0x074c0028 +#define sl_btmesh_rsp_lc_client_set_light_onoff_id 0x084c0028 +#define sl_btmesh_rsp_lc_client_get_property_id 0x094c0028 +#define sl_btmesh_rsp_lc_client_set_property_id 0x0a4c0028 + +/** + * @addtogroup sl_btmesh_evt_lc_client_mode_status sl_btmesh_evt_lc_client_mode_status + * @{ + * @brief Indicate an incoming LC Mode Status message, received as a response to + * @ref sl_btmesh_lc_client_get_mode or @ref sl_btmesh_lc_client_set_mode + */ + +/** @brief Identifier of the mode_status event */ +#define sl_btmesh_evt_lc_client_mode_status_id 0x004c00a8 + +/***************************************************************************//** + * @brief Data structure of the mode_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_client_mode_status_s +{ + uint16_t destination_address; /**< Address of the client or the group address + to which it was published. */ + uint16_t elem_index; /**< Index of the element for which received the + status. */ + uint16_t server_address; /**< Device which sent the status. */ + uint16_t appkey_index; /**< Appkey used by server_address. */ + uint8_t mode_status_value; /**< Value reported by server. */ +}); + +typedef struct sl_btmesh_evt_lc_client_mode_status_s sl_btmesh_evt_lc_client_mode_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_client_mode_status + +/** + * @addtogroup sl_btmesh_evt_lc_client_om_status sl_btmesh_evt_lc_client_om_status + * @{ + * @brief Indicate an incoming LC Occupancy Mode Status message, received as a + * response to @ref sl_btmesh_lc_client_get_om or @ref + * sl_btmesh_lc_client_set_om + */ + +/** @brief Identifier of the om_status event */ +#define sl_btmesh_evt_lc_client_om_status_id 0x014c00a8 + +/***************************************************************************//** + * @brief Data structure of the om_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_client_om_status_s +{ + uint16_t destination_address; /**< Address of the client or the group address + to which it was published. */ + uint16_t elem_index; /**< Index of the element for which received the + status. */ + uint16_t server_address; /**< Device which sent the status. */ + uint16_t appkey_index; /**< Appkey used by server_address. */ + uint8_t om_status_value; /**< Value reported by server. */ +}); + +typedef struct sl_btmesh_evt_lc_client_om_status_s sl_btmesh_evt_lc_client_om_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_client_om_status + +/** + * @addtogroup sl_btmesh_evt_lc_client_light_onoff_status sl_btmesh_evt_lc_client_light_onoff_status + * @{ + * @brief Indicate an incoming LC Light OnOff Status message, received as a + * response to @ref sl_btmesh_lc_client_get_light_onoff or @ref + * sl_btmesh_lc_client_set_light_onoff + */ + +/** @brief Identifier of the light_onoff_status event */ +#define sl_btmesh_evt_lc_client_light_onoff_status_id 0x024c00a8 + +/***************************************************************************//** + * @brief Data structure of the light_onoff_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_client_light_onoff_status_s +{ + uint16_t destination_address; /**< Address of the client or the group address + to which it was published. */ + uint16_t elem_index; /**< Index of the element for which received the + status. */ + uint16_t server_address; /**< Device which sent the status. */ + uint16_t appkey_index; /**< Appkey used by server_address. */ + uint8_t present_light_onoff; /**< Present value of the Light OnOff state */ + uint8_t target_light_onoff; /**< Target value of the Light OnOff state */ + uint32_t remaining_time_ms; /**< Time (in milliseconds) remaining in + transition */ +}); + +typedef struct sl_btmesh_evt_lc_client_light_onoff_status_s sl_btmesh_evt_lc_client_light_onoff_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_client_light_onoff_status + +/** + * @addtogroup sl_btmesh_evt_lc_client_property_status sl_btmesh_evt_lc_client_property_status + * @{ + * @brief Indicate an incoming LC Property Status message, received as a + * response to @ref sl_btmesh_lc_client_get_property or @ref + * sl_btmesh_lc_client_set_property + */ + +/** @brief Identifier of the property_status event */ +#define sl_btmesh_evt_lc_client_property_status_id 0x034c00a8 + +/***************************************************************************//** + * @brief Data structure of the property_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_client_property_status_s +{ + uint16_t destination_address; /**< Address of the client or the group + address to which it was published. */ + uint16_t elem_index; /**< Index of the element for which received + the status. */ + uint16_t server_address; /**< Device which sent the status. */ + uint16_t appkey_index; /**< Appkey used by server_address. */ + uint16_t property_id; /**< Property ID */ + uint8array property_value; /**< Property value */ +}); + +typedef struct sl_btmesh_evt_lc_client_property_status_s sl_btmesh_evt_lc_client_property_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_client_property_status + +/***************************************************************************//** + * + * Initialize the LC Client model. LC Client does not have any internal + * configuration. It only activates the model in the mesh stack. + * + * @param[in] elem_index Index of the client element. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_client_init(uint16_t elem_index); + +/***************************************************************************//** + * + * Get the mode status. + * + * @param[in] server_address Device to be queried. The address 0x0000 can be + * used to publish the message according to the model configuration. + * @param[in] elem_index Index of the client element. + * @param[in] appkey_index Appkey used by server_address. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lc_client_mode_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_client_get_mode(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Set mode + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to the model + * configuration. + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags Bit 1 (0x02) defines whether a response is required. + * If set to 1, SET PROPERTY message will be sent. Zero will send SET PROPERTY + * UNACKNOWLEDGED. + * @param[in] mode Mode value to set + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lc_client_mode_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_client_set_mode(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint8_t mode); + +/***************************************************************************//** + * + * Get the OM status. + * + * @param[in] server_address Device to be queried. The address 0x0000 can be + * used to publish the message according to the model configuration. + * @param[in] elem_index Index of the client element. + * @param[in] appkey_index Appkey used by server_address. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lc_client_om_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_client_get_om(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Set occupancy mode. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to the model + * configuration. + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags Bit 1 (0x02) defines whether response is required. + * If set to 1, SET PROPERTY message will be sent. Zero will send SET PROPERTY + * UNACKNOWLEDGED. + * @param[in] mode Mode value to set + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lc_client_om_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_client_set_om(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint8_t mode); + +/***************************************************************************//** + * + * Get the Light OnOff status. + * + * @param[in] server_address Device to be queried. The address 0x0000 can be + * used to publish the message according to the model configuration. + * @param[in] elem_index Index of the client element. + * @param[in] appkey_index Appkey used by server_address. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lc_client_light_onoff_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_client_get_light_onoff(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Set the Light OnOff. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to the model + * configuration. + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags Bit 1 (0x02) defines whether response is required. + * If set to 1, SET PROPERTY message will be sent. Zero will send SET PROPERTY + * UNACKNOWLEDGED. + * @param[in] target_state The target value of the Light LC Light OnOff state + * @param[in] tid Transaction identifier + * @param[in] transition_time_ms Transition time in milliseconds. Value of + * 0xFFFFFFFF will cause this parameter as well as the "delay" parameter to be + * omitted. + * @param[in] message_delay_ms Message execution delay in milliseconds. If the + * "transition_time" is 0xFFFFFFFF, this parameter is ignored. If both the + * transition time and the delay are zero, the transition is immediate. Valid + * range: 0-1275. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lc_client_light_onoff_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_client_set_light_onoff(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint8_t target_state, + uint8_t tid, + uint32_t transition_time_ms, + uint16_t message_delay_ms); + +/***************************************************************************//** + * + * Get the Property status. + * + * @param[in] server_address Device to be queried. The address 0x0000 can be + * used to publish the message according to the model configuration. + * @param[in] elem_index Index of the client element. + * @param[in] appkey_index Appkey used by server_address. + * @param[in] property_id The property ID to query. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lc_client_property_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_client_get_property(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint16_t property_id); + +/***************************************************************************//** + * + * Set a particular property. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to the model + * configuration. + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags Bit 1 (0x02) defines whether response is required. + * If set to 1, SET PROPERTY message will be sent. Zero will send SET PROPERTY + * UNACKNOWLEDGED. + * @param[in] property_id Property ID for the LC Server. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] params_len Length of data in @p params + * @param[in] params Byte array containing serialized fields of LC Property, + * excluding the property ID + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lc_client_property_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_client_set_property(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t params_len, + const uint8_t* params); + +/** @} */ // end addtogroup sl_btmesh_lc_client + +/** + * @addtogroup sl_btmesh_lc_server Bluetooth Mesh Light Control Server Model + * @{ + * + * @brief Bluetooth Mesh Light Control Server Model + * + * Bluetooth Mesh Light Control Server model functionality. + * + * All LC Server state resides in and is own by the Model (stack). The state + * update notification events to the application are informational: the + * application is not required to react to them. The application may choose to + * save the LC Server state in persistent storage and set the states in the LC + * Server following a restart. To do this the application can utilize the + * notification events and update command. + * + * Each LC Server instance requires that a Lightness Server is initialized in + * the element preceding the LC Server element: LC Server controls the Lightness + * Server residing in the preceding element. Each LC Server instance requires + * that a generic OnOff Server is initialized in the same element as the LC + * Server. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_lc_server_init_id 0x004d0028 +#define sl_btmesh_cmd_lc_server_deinit_id 0x014d0028 +#define sl_btmesh_cmd_lc_server_update_mode_id 0x024d0028 +#define sl_btmesh_cmd_lc_server_update_om_id 0x034d0028 +#define sl_btmesh_cmd_lc_server_update_light_onoff_id 0x044d0028 +#define sl_btmesh_cmd_lc_server_init_all_properties_id 0x054d0028 +#define sl_btmesh_cmd_lc_server_set_publish_mask_id 0x064d0028 +#define sl_btmesh_cmd_lc_server_set_regulator_interval_id 0x074d0028 +#define sl_btmesh_cmd_lc_server_set_event_mask_id 0x084d0028 +#define sl_btmesh_cmd_lc_server_get_lc_state_id 0x094d0028 +#define sl_btmesh_rsp_lc_server_init_id 0x004d0028 +#define sl_btmesh_rsp_lc_server_deinit_id 0x014d0028 +#define sl_btmesh_rsp_lc_server_update_mode_id 0x024d0028 +#define sl_btmesh_rsp_lc_server_update_om_id 0x034d0028 +#define sl_btmesh_rsp_lc_server_update_light_onoff_id 0x044d0028 +#define sl_btmesh_rsp_lc_server_init_all_properties_id 0x054d0028 +#define sl_btmesh_rsp_lc_server_set_publish_mask_id 0x064d0028 +#define sl_btmesh_rsp_lc_server_set_regulator_interval_id 0x074d0028 +#define sl_btmesh_rsp_lc_server_set_event_mask_id 0x084d0028 +#define sl_btmesh_rsp_lc_server_get_lc_state_id 0x094d0028 + +/** + * @brief These values define the possible states of Light Controller. + */ +typedef enum +{ + sl_btmesh_lc_server_lc_state_off = 0x0, /**< (0x0) The + controller is + turned off and + does not control + lighting. */ + sl_btmesh_lc_server_lc_state_standby = 0x1, /**< (0x1) The + controller is + turned on and + awaits an event + from an occupancy + sensor or a + manual switch. */ + sl_btmesh_lc_server_lc_state_fade_on = 0x2, /**< (0x2) The + controller has + been triggered + and gradually + transitions to + the Run phase, + gradually dimming + the lights up.> */ + sl_btmesh_lc_server_lc_state_run = 0x3, /**< (0x3) The lights + are on and the + timer counts down + (but may be + re-triggered by a + sensor or a + switch event). */ + sl_btmesh_lc_server_lc_state_fade = 0x4, /**< (0x4) The Run + timer has expired + and the + controller + gradually + transitions to + the Prolong + state. */ + sl_btmesh_lc_server_lc_state_prolong = 0x5, /**< (0x5) The lights + are at a lower + level and the + timer counts down + (but may be + re-triggered by a + sensor or a + switch event). */ + sl_btmesh_lc_server_lc_state_fade_standby_auto = 0x6, /**< (0x6) The + controller + gradually returns + to the Standby + state */ + sl_btmesh_lc_server_lc_state_fade_standby_manual = 0x7 /**< (0x7) The + controller + gradually returns + to the Standby + state after + external event. */ +} sl_btmesh_lc_server_lc_state_t; + +/** + * @brief These values identify optional diagnostic events that provide more + * information to the application about LC behavior. + */ +typedef enum +{ + sl_btmesh_lc_server_lc_event_state_updated = 0x1, /**< (0x1) Event + reporting LC + Server state + machine state + changes along + with the + remaining state + timer. */ + sl_btmesh_lc_server_lc_event_regulator_debug_info = 0x2 /**< (0x2) Event + reporting LC + Server PI + regulator + integral term + and regulator + output. */ +} sl_btmesh_lc_server_lc_debug_events_t; + +/** + * @addtogroup sl_btmesh_evt_lc_server_mode_updated sl_btmesh_evt_lc_server_mode_updated + * @{ + * @brief LC Mode state has been updated + * + * The update could be triggered by a reception of a client message or by an LC + * Server State Machine action. + */ + +/** @brief Identifier of the mode_updated event */ +#define sl_btmesh_evt_lc_server_mode_updated_id 0x004d00a8 + +/***************************************************************************//** + * @brief Data structure of the mode_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_server_mode_updated_s +{ + uint16_t destination_address; /**< Message destination address if triggered by + a message, 0 otherwise. */ + uint16_t elem_index; /**< Index of the element where the update + happened */ + uint16_t client_address; /**< Message source address if triggered by a + message, 0 otherwise. */ + uint16_t appkey_index; /**< Message appkey index if triggered by a + message, 0xFFFF otherwise. */ + uint8_t mode_value; /**< The value the LC Mode state is being set + to. */ + uint8_t manual_override; /**< Light Control Mode state can be set to zero + by a binding from Light Lightness Linear + when it is modified by an action from the + application or a Light Lightness Client + command. In this case, the parameter is set + to 0x01. In all other cases, this parameter + is zero. For example, when LC Mode is + modified by the application or by a LC + Client command, this parameter will be set + to 0. */ +}); + +typedef struct sl_btmesh_evt_lc_server_mode_updated_s sl_btmesh_evt_lc_server_mode_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_server_mode_updated + +/** + * @addtogroup sl_btmesh_evt_lc_server_om_updated sl_btmesh_evt_lc_server_om_updated + * @{ + * @brief LC Occupancy Mode state has been updated + * + * The update could be triggered by a reception of a client message or by an LC + * Server State Machine action. + */ + +/** @brief Identifier of the om_updated event */ +#define sl_btmesh_evt_lc_server_om_updated_id 0x014d00a8 + +/***************************************************************************//** + * @brief Data structure of the om_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_server_om_updated_s +{ + uint16_t destination_address; /**< Message destination address if triggered by + a message, 0 otherwise. */ + uint16_t elem_index; /**< Index of the element where the update + happened */ + uint16_t client_address; /**< Message source address if triggered by a + message, 0 otherwise. */ + uint16_t appkey_index; /**< Message appkey index if triggered by a + message, 0xFFFF otherwise. */ + uint8_t om_value; /**< The value the LC Occupancy Mode state is + being set to. */ +}); + +typedef struct sl_btmesh_evt_lc_server_om_updated_s sl_btmesh_evt_lc_server_om_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_server_om_updated + +/** + * @addtogroup sl_btmesh_evt_lc_server_light_onoff_updated sl_btmesh_evt_lc_server_light_onoff_updated + * @{ + * @brief LC Light OnOff state has been updated + * + * The update could be triggered by a reception of a client message or by an LC + * Server State Machine action. + */ + +/** @brief Identifier of the light_onoff_updated event */ +#define sl_btmesh_evt_lc_server_light_onoff_updated_id 0x024d00a8 + +/***************************************************************************//** + * @brief Data structure of the light_onoff_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_server_light_onoff_updated_s +{ + uint16_t destination_address; /**< Message destination address if triggered by + a message, 0 otherwise. */ + uint16_t elem_index; /**< Index of the element where the update + happened */ + uint16_t source_address; /**< Message source address if triggered by a + message, 0 otherwise. */ + uint16_t appkey_index; /**< Message appkey index if triggered by a + message, 0xFFFF otherwise. */ + uint8_t onoff_state; /**< The target value of the Light LC Light + OnOff state. */ + uint32_t onoff_trans_time_ms; /**< Amount of time (in milliseconds) the + element will take to transition to the + target state from the present state. */ +}); + +typedef struct sl_btmesh_evt_lc_server_light_onoff_updated_s sl_btmesh_evt_lc_server_light_onoff_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_server_light_onoff_updated + +/** + * @addtogroup sl_btmesh_evt_lc_server_occupancy_updated sl_btmesh_evt_lc_server_occupancy_updated + * @{ + * @brief LC Occupancy state has been updated + * + * The update could be triggered by a reception of a sensor message or by an LC + * Server State Machine action. + */ + +/** @brief Identifier of the occupancy_updated event */ +#define sl_btmesh_evt_lc_server_occupancy_updated_id 0x034d00a8 + +/***************************************************************************//** + * @brief Data structure of the occupancy_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_server_occupancy_updated_s +{ + uint16_t destination_address; /**< Message destination address if triggered by + a message, 0 otherwise. */ + uint16_t elem_index; /**< Index of the element where the update + happened */ + uint16_t source_address; /**< Message source address if triggered by a + message, 0 otherwise. */ + uint16_t appkey_index; /**< Message appkey index if triggered by a + message, 0xFFFF otherwise. */ + uint8_t occupancy_value; /**< The updated value of the LC Occupancy state */ +}); + +typedef struct sl_btmesh_evt_lc_server_occupancy_updated_s sl_btmesh_evt_lc_server_occupancy_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_server_occupancy_updated + +/** + * @addtogroup sl_btmesh_evt_lc_server_ambient_lux_level_updated sl_btmesh_evt_lc_server_ambient_lux_level_updated + * @{ + * @brief LC Ambient LuxLevel state has been updated + * + * The update is triggered by a reception of a sensor message. + */ + +/** @brief Identifier of the ambient_lux_level_updated event */ +#define sl_btmesh_evt_lc_server_ambient_lux_level_updated_id 0x044d00a8 + +/***************************************************************************//** + * @brief Data structure of the ambient_lux_level_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_server_ambient_lux_level_updated_s +{ + uint16_t destination_address; /**< Message destination address */ + uint16_t elem_index; /**< Index of the element where the update + happened */ + uint16_t source_address; /**< Message source address */ + uint16_t appkey_index; /**< Message appkey index */ + uint32_t ambient_lux_level_value; /**< The updated value of the LC Ambient + LuxLevel state */ +}); + +typedef struct sl_btmesh_evt_lc_server_ambient_lux_level_updated_s sl_btmesh_evt_lc_server_ambient_lux_level_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_server_ambient_lux_level_updated + +/** + * @addtogroup sl_btmesh_evt_lc_server_linear_output_updated sl_btmesh_evt_lc_server_linear_output_updated + * @{ + * @brief LC Linear Output state has been updated + * + * The update is triggered by an LC Server State Machine action. + */ + +/** @brief Identifier of the linear_output_updated event */ +#define sl_btmesh_evt_lc_server_linear_output_updated_id 0x054d00a8 + +/***************************************************************************//** + * @brief Data structure of the linear_output_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_server_linear_output_updated_s +{ + uint16_t elem_index; /**< Index of the element where the update + happened */ + uint16_t linear_output_value; /**< The updated value of the LC Linear Output + state */ +}); + +typedef struct sl_btmesh_evt_lc_server_linear_output_updated_s sl_btmesh_evt_lc_server_linear_output_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_server_linear_output_updated + +/** + * @addtogroup sl_btmesh_evt_lc_server_state_updated sl_btmesh_evt_lc_server_state_updated + * @{ + * @brief LC state machine state has been updated + * + * The update is triggered by LC mode switching on or off and transitions + * between phases. + */ + +/** @brief Identifier of the state_updated event */ +#define sl_btmesh_evt_lc_server_state_updated_id 0x064d00a8 + +/***************************************************************************//** + * @brief Data structure of the state_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_server_state_updated_s +{ + uint16_t elem_index; /**< Index of the element where the update happened */ + uint8_t state; /**< The updated value of the LC state */ + uint32_t transition_time; /**< Transition time defined for the current LC + state. */ +}); + +typedef struct sl_btmesh_evt_lc_server_state_updated_s sl_btmesh_evt_lc_server_state_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_server_state_updated + +/** + * @addtogroup sl_btmesh_evt_lc_server_regulator_debug_info sl_btmesh_evt_lc_server_regulator_debug_info + * @{ + * @brief LC regulator calculation details + */ + +/** @brief Identifier of the regulator_debug_info event */ +#define sl_btmesh_evt_lc_server_regulator_debug_info_id 0x074d00a8 + +/***************************************************************************//** + * @brief Data structure of the regulator_debug_info event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_server_regulator_debug_info_s +{ + uint16_t elem_index; /**< Index of the element where LC server is located */ + uint16_t i; /**< Integral term */ + uint16_t l; /**< Regulator output */ +}); + +typedef struct sl_btmesh_evt_lc_server_regulator_debug_info_s sl_btmesh_evt_lc_server_regulator_debug_info_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_server_regulator_debug_info + +/***************************************************************************//** + * + * Initialize the LC Server model. The server does not have any internal + * configuration. The command only activates the model in the mesh stack. + * + * Each LC Server instance requires that a Lightness Server is initialized in + * the element preceding the LC Server element: LC Server controls the Lightness + * Server residing in the preceding element. Each LC Server instance requires + * that a generic OnOff Server is initialized in the same element as the LC + * Server. + * + * LC properties are initialized as follows: + * + * PropertyID: PropertyValue 0x002B: 0x111111, 0x002C: 0x011111, 0x002D: + * 0x001111, 0x002E: 0xf000, 0x002F: 0x0f00, 0x0030: 0x00f0, 0x031: 50, 0x032: + * 25.0, 0x0033: 250.0, 0x0034: 80.0, 0x0035: 80.0, 0x0036: 3000, 0x0037: 3000, + * 0x0038: 3000, 0x0039: 3000, 0x003A: 0, 0x003B: 3000, 0x003C: 3000 + * + * PI Regulator interval (T) is initialized to 50ms + * + * The rest of the state values are initialized to zero + * + * @param[in] elem_index Index of the element. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_server_init(uint16_t elem_index); + +/***************************************************************************//** + * + * De-initializes the LC Server model. + * + * @param[in] elem_index Index of the element. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_server_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Update the LC Server model Mode state in the stack. Application may choose to + * directly set the model state in the stack, this function will pass the state + * value to the LC Server model. + * + * @param[in] elem_index Index of the element. + * @param[in] mode Mode value. Valid range: 0-1. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_server_update_mode(uint16_t elem_index, uint8_t mode); + +/***************************************************************************//** + * + * Update the LC Server model Occupancy Mode state in the stack. The application + * may choose to directly set the model state in the stack. This function will + * pass the state value to the LC Server model. + * + * @param[in] elem_index Index of the element. + * @param[in] om Occupancy Mode value. Valid range: 0-1. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_server_update_om(uint16_t elem_index, uint8_t om); + +/***************************************************************************//** + * + * Update the LC Server model Light OnOff state in the stack. The application + * may choose to directly set the model state in the stack. This function will + * pass the state value to the LC Server model. + * + * @param[in] elem_index Index of the element. + * @param[in] light_onoff Light OnOff value. Valid range: 0-1. + * @param[in] transition_time_ms Amount of time (in milliseconds) that the + * element will take to transition to the target state from the present state. + * If set to 0, the transition will be immediate. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_server_update_light_onoff(uint16_t elem_index, + uint8_t light_onoff, + uint32_t transition_time_ms); + +/***************************************************************************//** + * + * Initialize all LC properties in one attempt. The following values are used: + * + * PropertyID: PropertyValue 0x002B: 0x111111, 0x002C: 0x011111, 0x002D: + * 0x001111, 0x002E: 0xf000, 0x002F: 0x0f00, 0x0030: 0x00f0, 0x031: 50, 0x032: + * 25.0, 0x0033: 250.0, 0x0034: 80.0, 0x0035: 80.0, 0x0036: 3000, 0x0037: 3000, + * 0x0038: 3000, 0x0039: 3000, 0x003A: 0, 0x003B: 3000, 0x003C: 3000 + * + * @param[in] elem_index Index of the element. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_server_init_all_properties(uint16_t elem_index); + +/***************************************************************************//** + * + * Update the bitmask that controls which messages are sent when the LC Server + * publishes. By default, the bitmask will be enabled to publish all three + * status messages. + * + * @param[in] elem_index Index of the element. + * @param[in] status_type @parblock + * The type of status message to turn on/off. Options for this are: + * + * LC Mode Status 0x8294 LC Occupancy Mode Status 0x8298 LC Light On Off + * Status 0x829C + * @endparblock + * @param[in] value Turn on or off the status message. Non zero - enable, + * otherwise disable. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_server_set_publish_mask(uint16_t elem_index, + uint16_t status_type, + uint8_t value); + +/***************************************************************************//** + * + * Update the summation interval (T) at which the PI regulator is run. Only + * valid when the regulator is disabled (Light LC Mode is 0). + * + * @param[in] elem_index Index of the element. + * @param[in] value Valid values are 1 ms-100 ms. (Default: 50 ms) + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_server_set_regulator_interval(uint16_t elem_index, + uint8_t value); + +/***************************************************************************//** + * + * Enable or disable additional diagnostics events. See lc_debug_events. + * + * @param[in] elem_index Index of the element. + * @param[in] event_type @parblock + * The type of event to enable/disable. Options are: + * + * lc_event_state_updated = 0x01, state_updated event report state changes + * lc_event_regulator_debug_info = 0x02, regulator_debug_info Regulator + * calculation details + * @endparblock + * @param[in] value Valid values are 0 and 1 to disable or enable the event + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_server_set_event_mask(uint16_t elem_index, + uint16_t event_type, + uint8_t value); + +/***************************************************************************//** + * + * Fetch the current LC state. States can be as Off, Standby, Fade On, Run, + * Fade, Prolong, Fade Standby Auto, Fade Standby Manual + * + * @param[in] elem_index Index of the element. + * @param[out] state The current state of LC state machine + * @param[out] transition_time Transition time left for the current LC state. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_server_get_lc_state(uint16_t elem_index, + uint8_t *state, + uint32_t *transition_time); + +/** @} */ // end addtogroup sl_btmesh_lc_server + +/** + * @addtogroup sl_btmesh_lc_setup_server Bluetooth Mesh Light Control Setup Server Model + * @{ + * + * @brief Bluetooth Mesh Light Control Setup Server Model + * + * Bluetooth Mesh Light Control model Setup Server functionality. + * + * This class provides the API that the LC Setup server uses to inform the + * application of its received events. The API is informational: application is + * not required to react to these events. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_lc_setup_server_update_property_id 0x004e0028 +#define sl_btmesh_rsp_lc_setup_server_update_property_id 0x004e0028 + +/** + * @addtogroup sl_btmesh_evt_lc_setup_server_set_property sl_btmesh_evt_lc_setup_server_set_property + * @{ + * @brief LC Property Set from the Client + */ + +/** @brief Identifier of the set_property event */ +#define sl_btmesh_evt_lc_setup_server_set_property_id 0x004e00a8 + +/***************************************************************************//** + * @brief Data structure of the set_property event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lc_setup_server_set_property_s +{ + uint16_t destination_address; /**< Address of the server or the group + address to which it was published. */ + uint16_t elem_index; /**< Index of the element which received the + command. */ + uint16_t client_address; /**< Device which sent the request. */ + uint16_t appkey_index; /**< Appkey used by client_address. */ + uint16_t property_id; /**< Property ID */ + uint8array property_value; /**< Property value */ +}); + +typedef struct sl_btmesh_evt_lc_setup_server_set_property_s sl_btmesh_evt_lc_setup_server_set_property_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lc_setup_server_set_property + +/***************************************************************************//** + * + * Update the LC Server property. The application may choose to directly set + * model properties in the stack. This function will pass the property value to + * the LC Setup Server and on to the LC Server model. + * + * @param[in] elem_index Client model element index + * @param[in] property_id Property ID for the LC Server. Range: 0x0001 - 0x0ffff + * for a specific device property, the value 0x0000 is prohibited. + * @param[in] params_len Length of data in @p params + * @param[in] params Byte array containing serialized fields of LC Property, + * excluding the property ID + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lc_setup_server_update_property(uint16_t elem_index, + uint16_t property_id, + size_t params_len, + const uint8_t* params); + +/** @} */ // end addtogroup sl_btmesh_lc_setup_server + +/** + * @addtogroup sl_btmesh_scene_client Bluetooth Mesh Scene Client Model + * @{ + * + * @brief Bluetooth Mesh Scene Client Model + * + * Bluetooth Mesh Scene Client model functionality to send and receive messages + * to/from the Scene Server and Scene Setup Server models. + * + * Throughout the API, the client model that is used is identified by its + * element address and model ID, while the server model responding to the client + * model requests is identified by its element address and model ID. + * + * The API has functions for querying server model states and requesting server + * model state changes. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_scene_client_init_id 0x004f0028 +#define sl_btmesh_cmd_scene_client_get_id 0x014f0028 +#define sl_btmesh_cmd_scene_client_get_register_id 0x024f0028 +#define sl_btmesh_cmd_scene_client_recall_id 0x034f0028 +#define sl_btmesh_cmd_scene_client_store_id 0x044f0028 +#define sl_btmesh_cmd_scene_client_delete_id 0x054f0028 +#define sl_btmesh_rsp_scene_client_init_id 0x004f0028 +#define sl_btmesh_rsp_scene_client_get_id 0x014f0028 +#define sl_btmesh_rsp_scene_client_get_register_id 0x024f0028 +#define sl_btmesh_rsp_scene_client_recall_id 0x034f0028 +#define sl_btmesh_rsp_scene_client_store_id 0x044f0028 +#define sl_btmesh_rsp_scene_client_delete_id 0x054f0028 + +/** + * @addtogroup sl_btmesh_evt_scene_client_status sl_btmesh_evt_scene_client_status + * @{ + * @brief Event indicating an incoming Scene Status message, response to @ref + * sl_btmesh_scene_client_get or @ref sl_btmesh_scene_client_recall command or + * unsolicited message + */ + +/** @brief Identifier of the status event */ +#define sl_btmesh_evt_scene_client_status_id 0x004f00a8 + +/***************************************************************************//** + * @brief Data structure of the status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scene_client_status_s +{ + uint16_t destination_address; /**< Address of the client or the group address + to which it was published. */ + uint16_t elem_index; /**< Index of the element which received the + status. */ + uint16_t server_address; /**< Device which sent the status. */ + uint16_t appkey_index; /**< Appkey used by client_address. */ + uint8_t status; /**< Status of the request. */ + uint16_t current_scene; /**< Currently selected scene. */ + uint16_t target_scene; /**< Scene to be transitioning to. */ + uint32_t remaining_time_ms; /**< Time (in milliseconds) remaining in + transition. */ +}); + +typedef struct sl_btmesh_evt_scene_client_status_s sl_btmesh_evt_scene_client_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scene_client_status + +/** + * @addtogroup sl_btmesh_evt_scene_client_register_status sl_btmesh_evt_scene_client_register_status + * @{ + * @brief Event indicating an incoming Scene Register Status message, response + * to @ref sl_btmesh_scene_client_get_register or @ref + * sl_btmesh_scene_client_store or @ref sl_btmesh_scene_client_delete command + */ + +/** @brief Identifier of the register_status event */ +#define sl_btmesh_evt_scene_client_register_status_id 0x014f00a8 + +/***************************************************************************//** + * @brief Data structure of the register_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scene_client_register_status_s +{ + uint16_t destination_address; /**< Address of the client or the group + address to which it was published. */ + uint16_t elem_index; /**< Index of the element for which received + the status. */ + uint16_t server_address; /**< Device which sent the status. */ + uint16_t appkey_index; /**< Appkey used by client_address. */ + uint8_t status; /**< Status of the request. */ + uint16_t current_scene; /**< Currently selected scene. */ + uint8array scenes; /**< List of stored scenes on the server + derived from the Scene Register. It + contains a variable length array of + 16-bit values representing Scene Numbers + in little endian format. */ +}); + +typedef struct sl_btmesh_evt_scene_client_register_status_s sl_btmesh_evt_scene_client_register_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scene_client_register_status + +/***************************************************************************//** + * + * Initialize the Scene Client model. The Scene Client does not have any + * internal configuration. It only activates the model in the mesh stack. + * + * @param[in] elem_index Index of the client element. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scene_client_init(uint16_t elem_index); + +/***************************************************************************//** + * + * Scene Get command. + * + * @param[in] server_address Device to be queried. The address 0x0000 can be + * used to publish the message according to model configuration + * @param[in] elem_index Index of the client element. + * @param[in] appkey_index Appkey used by server_address. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_scene_client_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_scene_client_get(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Scene Register Get command + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to model configuration + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_scene_client_register_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_scene_client_get_register(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Recall a scene. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to model configuration + * @param[in] elem_index Index of the client element. + * @param[in] selected_scene Scene of interest + * @param[in] appkey_index Appkey used by server_address. + * @param[in] flags Bit 1 (0x02) defines whether response is required. + * If set to 1, SET PROPERTY message will be sent, zero will send SET PROPERTY + * UNACKNOWLEDGED + * @param[in] tid Transaction ID + * @param[in] transition_time_ms Amount of time (in milliseconds) allotted for + * the transition to take place. Value of 0xFFFFFFFF will cause this parameter + * as well as the "delay" parameter to be omitted. The transition will be + * immediate if both the transition time and the delay are zero. + * @param[in] delay_ms Message execution delay in milliseconds. If the + * "transition_time" is 0xFFFFFFFF, this parameter is ignored. If both the + * transition time and the delay are zero, the transition is immediate. Valid + * range: 0-1275. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_scene_client_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_scene_client_recall(uint16_t server_address, + uint16_t elem_index, + uint16_t selected_scene, + uint16_t appkey_index, + uint8_t flags, + uint8_t tid, + uint32_t transition_time_ms, + uint16_t delay_ms); + +/***************************************************************************//** + * + * Store a scene. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to the model + * configuration. + * @param[in] elem_index Client model element index + * @param[in] selected_scene Scene of interest + * @param[in] appkey_index The application key index to use. + * @param[in] flags Bit 1 (0x02) defines whether response is required. + * If set to 1, SET PROPERTY message will be sent. Zero will send SET PROPERTY + * UNACKNOWLEDGED. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_scene_client_register_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_scene_client_store(uint16_t server_address, + uint16_t elem_index, + uint16_t selected_scene, + uint16_t appkey_index, + uint8_t flags); + +/***************************************************************************//** + * + * Delete a scene. + * + * @param[in] server_address Destination server model address. The address + * 0x0000 can be used to publish the message according to the model + * configuration. + * @param[in] elem_index Client model element index + * @param[in] selected_scene Scene of interest + * @param[in] appkey_index The application key index to use. + * @param[in] flags Bit 1 (0x02) defines whether response is required. + * If set to 1, SET PROPERTY message will be sent. Zero will send SET PROPERTY + * UNACKNOWLEDGED. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_scene_client_register_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_scene_client_delete(uint16_t server_address, + uint16_t elem_index, + uint16_t selected_scene, + uint16_t appkey_index, + uint8_t flags); + +/** @} */ // end addtogroup sl_btmesh_scene_client + +/** + * @addtogroup sl_btmesh_scene_server Bluetooth Mesh Scene Server Model + * @{ + * + * @brief Bluetooth Mesh Scene Server Model + * + * Bluetooth Mesh Scene model Server functionality. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_scene_server_init_id 0x00500028 +#define sl_btmesh_cmd_scene_server_deinit_id 0x01500028 +#define sl_btmesh_cmd_scene_server_reset_register_id 0x02500028 +#define sl_btmesh_cmd_scene_server_enable_compact_recall_events_id 0x03500028 +#define sl_btmesh_rsp_scene_server_init_id 0x00500028 +#define sl_btmesh_rsp_scene_server_deinit_id 0x01500028 +#define sl_btmesh_rsp_scene_server_reset_register_id 0x02500028 +#define sl_btmesh_rsp_scene_server_enable_compact_recall_events_id 0x03500028 + +/** + * @addtogroup sl_btmesh_evt_scene_server_get sl_btmesh_evt_scene_server_get + * @{ + * @brief Get the status. + */ + +/** @brief Identifier of the get event */ +#define sl_btmesh_evt_scene_server_get_id 0x015000a8 + +/***************************************************************************//** + * @brief Data structure of the get event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scene_server_get_s +{ + uint16_t destination_address; /**< Address of the server or the group address + to which it was published. */ + uint16_t elem_index; /**< Index of the element which received the + command. */ + uint16_t client_address; /**< Device which sent the request. */ + uint16_t appkey_index; /**< Appkey used by client_address. */ +}); + +typedef struct sl_btmesh_evt_scene_server_get_s sl_btmesh_evt_scene_server_get_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scene_server_get + +/** + * @addtogroup sl_btmesh_evt_scene_server_register_get sl_btmesh_evt_scene_server_register_get + * @{ + * @brief Get the status of a register. + */ + +/** @brief Identifier of the register_get event */ +#define sl_btmesh_evt_scene_server_register_get_id 0x025000a8 + +/***************************************************************************//** + * @brief Data structure of the register_get event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scene_server_register_get_s +{ + uint16_t destination_address; /**< Address of the server or the group address + to which it was published. */ + uint16_t elem_index; /**< Index of the element which received the + command. */ + uint16_t client_address; /**< Device which sent the request. */ + uint16_t appkey_index; /**< Appkey used by client_address. */ +}); + +typedef struct sl_btmesh_evt_scene_server_register_get_s sl_btmesh_evt_scene_server_register_get_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scene_server_register_get + +/** + * @addtogroup sl_btmesh_evt_scene_server_recall sl_btmesh_evt_scene_server_recall + * @{ + * @brief Recall a scene. + */ + +/** @brief Identifier of the recall event */ +#define sl_btmesh_evt_scene_server_recall_id 0x035000a8 + +/***************************************************************************//** + * @brief Data structure of the recall event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scene_server_recall_s +{ + uint16_t destination_address; /**< Address of the server or the group address + to which it was published. */ + uint16_t elem_index; /**< Index of the element which received the + command. */ + uint16_t selected_scene; /**< Scene of interest */ + uint16_t client_address; /**< Device which sent the request. */ + uint16_t appkey_index; /**< Appkey used by client_address. */ + uint32_t transition_time_ms; /**< Time (in milliseconds) allotted for the + transition to take place */ +}); + +typedef struct sl_btmesh_evt_scene_server_recall_s sl_btmesh_evt_scene_server_recall_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scene_server_recall + +/** + * @addtogroup sl_btmesh_evt_scene_server_publish sl_btmesh_evt_scene_server_publish + * @{ + * @brief Indicate that the publishing period timer elapsed and the app + * should/can publish its state or any request. + */ + +/** @brief Identifier of the publish event */ +#define sl_btmesh_evt_scene_server_publish_id 0x045000a8 + +/***************************************************************************//** + * @brief Data structure of the publish event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scene_server_publish_s +{ + uint16_t elem_index; /**< Client model element index */ + uint32_t period_ms; /**< The current publishing period that can be used to + estimate the next tick, e.g., when the state should + be reported at higher frequency. */ +}); + +typedef struct sl_btmesh_evt_scene_server_publish_s sl_btmesh_evt_scene_server_publish_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scene_server_publish + +/** + * @addtogroup sl_btmesh_evt_scene_server_compact_recall sl_btmesh_evt_scene_server_compact_recall + * @{ + * @brief Recall a scene. + */ + +/** @brief Identifier of the compact_recall event */ +#define sl_btmesh_evt_scene_server_compact_recall_id 0x055000a8 + +/***************************************************************************//** + * @brief Data structure of the compact_recall event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scene_server_compact_recall_s +{ + uint8array states; /**< Byte array containind recalled states. Array consist + of 5 byte chunks as follows: + + - Element id as 16bit unsigned integer in little + endian format + - Model id as 16bit unsigned integer in little + endian format + - Model-specific state type, identifying the kind of + state recalled See get state types list for + details. + + after this event application can request recalled + states with @ref + sl_btmesh_generic_server_get_cached_state command */ +}); + +typedef struct sl_btmesh_evt_scene_server_compact_recall_s sl_btmesh_evt_scene_server_compact_recall_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scene_server_compact_recall + +/***************************************************************************//** + * + * Initialize the Scene Server model. Server does not have any internal + * configurations. The command only activates the model in the mesh stack. + * + * @param[in] elem_index Index of the element. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scene_server_init(uint16_t elem_index); + +/***************************************************************************//** + * + * De-initializes the Scene Server model. + * + * @param[in] elem_index Index of the element. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scene_server_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Reset register value. This command should be invoked if state of a model has + * been modified in such a manner that it can't be in the scene, which is + * indicated by the scene register. + * + * @param[in] elem_index Index of the element. This can be either element of the + * updated model or the element of the scene model responsible for controlling + * the scene of the updated model. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scene_server_reset_register(uint16_t elem_index); + +/***************************************************************************//** + * + * Switch to compact reporting for recalled states. Compact state reduces amount + * buffering memory needed by the scene recall and is recommended for devices + * with big amount of models or for devices in environment with lots of + * bluetooth advertisement traffic. + * + * When compact mode is active @ref sl_btmesh_evt_scene_server_compact_recall is + * generated instead of several @ref sl_btmesh_evt_generic_server_state_recall + * events. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scene_server_enable_compact_recall_events(); + +/** @} */ // end addtogroup sl_btmesh_scene_server + +/** + * @addtogroup sl_btmesh_scene_setup_server Bluetooth Mesh Scene Setup Server Model + * @{ + * + * @brief Bluetooth Mesh Scene Setup Server Model + * + * Bluetooth Mesh Scene model Setup Server functionality. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_scene_setup_server_init_id 0x00510028 +#define sl_btmesh_rsp_scene_setup_server_init_id 0x00510028 + +/** + * @addtogroup sl_btmesh_evt_scene_setup_server_store sl_btmesh_evt_scene_setup_server_store + * @{ + * @brief Scene Store from the Client + */ + +/** @brief Identifier of the store event */ +#define sl_btmesh_evt_scene_setup_server_store_id 0x005100a8 + +/***************************************************************************//** + * @brief Data structure of the store event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scene_setup_server_store_s +{ + uint16_t destination_address; /**< Address of the server or the group address + to which it was published. */ + uint16_t elem_index; /**< Index of the element which received the + command. */ + uint16_t scene_id; /**< Scene ID */ + uint16_t client_address; /**< Device which sent the request. */ + uint16_t appkey_index; /**< Appkey used by client_address. */ +}); + +typedef struct sl_btmesh_evt_scene_setup_server_store_s sl_btmesh_evt_scene_setup_server_store_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scene_setup_server_store + +/** + * @addtogroup sl_btmesh_evt_scene_setup_server_delete sl_btmesh_evt_scene_setup_server_delete + * @{ + * @brief Scene Delete from the Client + */ + +/** @brief Identifier of the delete event */ +#define sl_btmesh_evt_scene_setup_server_delete_id 0x015100a8 + +/***************************************************************************//** + * @brief Data structure of the delete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scene_setup_server_delete_s +{ + uint16_t destination_address; /**< Address of the server or the group address + to which it was published. */ + uint16_t elem_index; /**< Index of the element which received the + command. */ + uint16_t scene_id; /**< Scene ID */ + uint16_t client_address; /**< Device which sent the request. */ + uint16_t appkey_index; /**< Appkey used by client_address. */ +}); + +typedef struct sl_btmesh_evt_scene_setup_server_delete_s sl_btmesh_evt_scene_setup_server_delete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scene_setup_server_delete + +/** + * @addtogroup sl_btmesh_evt_scene_setup_server_publish sl_btmesh_evt_scene_setup_server_publish + * @{ + * @brief Indicate that the publishing period timer elapsed and the app + * should/can publish its state or any request. + */ + +/** @brief Identifier of the publish event */ +#define sl_btmesh_evt_scene_setup_server_publish_id 0x025100a8 + +/***************************************************************************//** + * @brief Data structure of the publish event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scene_setup_server_publish_s +{ + uint16_t elem_index; /**< Client model element index */ + uint32_t period_ms; /**< The current publishing period that can be used to + estimate the next tick, e.g., when the state should + be reported at higher frequency. */ +}); + +typedef struct sl_btmesh_evt_scene_setup_server_publish_s sl_btmesh_evt_scene_setup_server_publish_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scene_setup_server_publish + +/***************************************************************************//** + * + * Initialize the Scene Setup Server model. Server does not have any internal + * configurations. The command only activates the model in the mesh stack. + * + * @param[in] elem_index Index of the element. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scene_setup_server_init(uint16_t elem_index); + +/** @} */ // end addtogroup sl_btmesh_scene_setup_server + +/** + * @addtogroup sl_btmesh_scheduler_client Bluetooth Mesh Scheduler Client Model + * @{ + * + * @brief Bluetooth Mesh Scheduler Client Model + * + * This class provides commands and messages to interface with the Scheduler + * Client model. Scheduler models uses multiple fields to define the occurrence + * of an event and the type of event to be triggered. + * + * For the description of these fields, please see Scheduler Server + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_scheduler_client_init_id 0x00540028 +#define sl_btmesh_cmd_scheduler_client_deinit_id 0x01540028 +#define sl_btmesh_cmd_scheduler_client_get_id 0x02540028 +#define sl_btmesh_cmd_scheduler_client_get_action_id 0x03540028 +#define sl_btmesh_cmd_scheduler_client_set_action_id 0x04540028 +#define sl_btmesh_rsp_scheduler_client_init_id 0x00540028 +#define sl_btmesh_rsp_scheduler_client_deinit_id 0x01540028 +#define sl_btmesh_rsp_scheduler_client_get_id 0x02540028 +#define sl_btmesh_rsp_scheduler_client_get_action_id 0x03540028 +#define sl_btmesh_rsp_scheduler_client_set_action_id 0x04540028 + +/** + * @addtogroup sl_btmesh_evt_scheduler_client_status sl_btmesh_evt_scheduler_client_status + * @{ + * @brief Scheduler Status event, received as a response to the @ref + * sl_btmesh_scheduler_client_get command. + */ + +/** @brief Identifier of the status event */ +#define sl_btmesh_evt_scheduler_client_status_id 0x005400a8 + +/***************************************************************************//** + * @brief Data structure of the status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scheduler_client_status_s +{ + uint16_t client_address; /**< Destination client model address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Source server model address */ + uint16_t appkey_index; /**< The application key index to use. */ + uint16_t scheduler; /**< Bit field indicating defined Actions in the + Schedule Register */ +}); + +typedef struct sl_btmesh_evt_scheduler_client_status_s sl_btmesh_evt_scheduler_client_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scheduler_client_status + +/** + * @addtogroup sl_btmesh_evt_scheduler_client_action_status sl_btmesh_evt_scheduler_client_action_status + * @{ + * @brief Scheduler Action Status event, received as a response to the @ref + * sl_btmesh_scheduler_client_set_action or @ref + * sl_btmesh_scheduler_client_get_action command + * + * For the description of these fields, see Scheduler Server + */ + +/** @brief Identifier of the action_status event */ +#define sl_btmesh_evt_scheduler_client_action_status_id 0x015400a8 + +/***************************************************************************//** + * @brief Data structure of the action_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scheduler_client_action_status_s +{ + uint16_t client_address; /**< Destination client model address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Source server model address */ + uint16_t appkey_index; /**< The application key index to use. */ + uint8_t index; /**< Index of the Scheduler Register */ + uint8_t year; /**< Scheduled year for the action */ + uint16_t month; /**< Scheduled month for the action */ + uint8_t day; /**< Scheduled day of the month for the action */ + uint8_t hour; /**< Scheduled hour for the action */ + uint8_t minute; /**< Scheduled minute for the action */ + uint8_t second; /**< Scheduled second for the action */ + uint8_t day_of_week; /**< Scheduled days of the week for the action */ + uint8_t action; /**< Action to be performed at the scheduled time */ + uint32_t transition_time_ms; /**< Transition time for this action */ + uint16_t scene_number; /**< Scene number to be used for some actions */ +}); + +typedef struct sl_btmesh_evt_scheduler_client_action_status_s sl_btmesh_evt_scheduler_client_action_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scheduler_client_action_status + +/***************************************************************************//** + * + * Initializes the Scheduler Client model + * + * @param[in] elem_index Client model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scheduler_client_init(uint16_t elem_index); + +/***************************************************************************//** + * + * Deinitialize the Scheduler Client model + * + * @param[in] elem_index Client model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scheduler_client_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Send a Scheduler Get message to get the Scheduler Register status of a + * Scheduler Server. + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_scheduler_client_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_scheduler_client_get(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Send a Scheduler Action Get message to get action defined by a Schedule + * Register state entry. + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] index Index of the Scheduler Register entry to get + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_scheduler_client_action_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_scheduler_client_get_action(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t index); + +/***************************************************************************//** + * + * Send a Scheduler Action Set message to set the given entry of the Scheduler + * Register state. + * + * For the description of these fields, see Scheduler Server + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] flags Bit 1 (0x02) defines whether response is required, othewise + * the unacknowledged message is used. + * @param[in] index Index of the Scheduler Register entry to set + * @param[in] year Scheduled year for the action + * @param[in] month Scheduled month for the action + * @param[in] day Scheduled day of the month for the action + * @param[in] hour Scheduled hour for the action + * @param[in] minute Scheduled minute for the action + * @param[in] second Scheduled second for the action + * @param[in] day_of_week Scheduled days of the week for the action + * @param[in] action Action to be performed at the scheduled time + * @param[in] transition_time_ms Transition time for this action + * @param[in] scene_number Scene number to be used for some actions + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_scheduler_client_action_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_scheduler_client_set_action(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint8_t index, + uint8_t year, + uint16_t month, + uint8_t day, + uint8_t hour, + uint8_t minute, + uint8_t second, + uint8_t day_of_week, + uint8_t action, + uint32_t transition_time_ms, + uint16_t scene_number); + +/** @} */ // end addtogroup sl_btmesh_scheduler_client + +/** + * @addtogroup sl_btmesh_scheduler_server Bluetooth Mesh Scheduler Server Model + * @{ + * + * @brief Bluetooth Mesh Scheduler Server Model + * + * This class provides commands and messages to interface with the Scheduler + * Server model + * + * The scheduler server uses multiple fields to define the occurrence of an + * event and the type of event to be triggered. The field definitions are as + * follows. + * + * Year + * + * The year field represents 2 last significant digits of the year of the + * occurrence of the scheduled event. + * - 0x00-0x63: 2 least significant digits of the year (0-99) + * - 0x64: Any year + * - All other values are prohibited + * + * Month + * + * The month field represents the months of the occurrences of the scheduled + * event, using a bitfield with one bit for each month. + * + * - Bit 0: Scheduled in January + * - Bit 1: February + * - Bit 2: March + * - Bit 3: April + * - Bit 4: May + * - Bit 5: June + * - Bit 6: July + * - Bit 7: August + * - Bit 8: September + * - Bit 9: October + * - Bit 10: November + * - Bit 11: December + * + * Day + * + * The Day field represents the day of the month of the occurrence of the + * scheduled event. If the day of the month has a number that is larger than the + * number of days in the month, the event occurs in the last day of the month. + * For example, in February if the day field holds the value 29, the action is + * triggered on February 28th in a non-leap year or February 29th in a leap + * year. + * + * - 0x00: Any day + * - 0x01-0x1F: Day of the month (1-31) + * - All other values are prohibited + * + * Hour + * + * The Hour field represents the hour of the occurrence of the scheduled event. + * + * - 0x00-0x17: Hour of the day (0-23) + * - 0x18: Any hour of the day + * - 0x19: Once a day (at a random hour) + * - All other values are prohibited + * + * Minute + * + * The Minute field represents the minute of the occurrence of the scheduled + * event. + * + * - 0x00-0x3B: Minute of the hour (0-59) + * - 0x3C: Any minute of the hour + * - 0x3D: Every 15 minutes (0, 15, 30, 45) + * - 0x3E: Every 20 minutes (0, 20, 40) + * - 0x3F: Once an hour (at a random minute) + * - All other values are prohibited + * + * Second + * + * The Second field represents the second of the occurrence of the scheduled + * event. + * + * - 0x00-0x3B: Seconds of the minute (0-59) + * - 0x3C: Any second of the minute + * - 0x3D: Every 15 seconds (0, 15, 30, 45) + * - 0x3E: Every 20 seconds (0, 20, 40) + * - 0x3F: Once a minute (at a random second) + * - All other values are prohibited + * + * Day of Week + * + * The DayOfWeek field represents the days of the week when the scheduled event + * will trigger. The week days are represented by a bitfield, by one bit for + * each day. + * + * - Bit 0: Scheduled on Mondays + * - Bit 1: Scheduled on Tuesdays + * - Bit 2: Scheduled on Wednesdays + * - Bit 3: Scheduled on Thursdays + * - Bit 4: Scheduled on Fridays + * - Bit 5: Scheduled on Saturdays + * - Bit 6: Scheduled on Sundays + * + * Action + * + * The action field represents an action to be executed for a scheduled event + * + * - 0x00: Turn Off + * - 0x01: Turn On + * - 0x02: Scene Recall + * - 0x0F: No action + * - All other values are prohibited + * + * Transition time + * + * This is a 1-octet value that consists of two fields: a 2-bit bit field + * representing the step resolution and a 6-bit bit field representing the + * number of transition steps. + * + * Bit 0-1: Transition Step Resolution + * - 0b00: The Default Transition Step Resolution is 100 milliseconds + * - 0b01: 1 second resolution + * - 0b10: 10 seconds resolution + * - 0b11: 10 minutes resolution + * + * Bit 2-7: Transition Number of Steps + * - 0x00: The Transition Time is immediate + * - 0x01-0x3E: The number of steps + * - 0x3F: The value is unknown. The state cannot be set to this value, but an + * element may report an unknown value if a transition is higher than 0x3E + * or not determined + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_scheduler_server_init_id 0x00550028 +#define sl_btmesh_cmd_scheduler_server_deinit_id 0x01550028 +#define sl_btmesh_cmd_scheduler_server_get_id 0x02550028 +#define sl_btmesh_cmd_scheduler_server_get_action_id 0x03550028 +#define sl_btmesh_cmd_scheduler_server_set_action_id 0x04550028 +#define sl_btmesh_rsp_scheduler_server_init_id 0x00550028 +#define sl_btmesh_rsp_scheduler_server_deinit_id 0x01550028 +#define sl_btmesh_rsp_scheduler_server_get_id 0x02550028 +#define sl_btmesh_rsp_scheduler_server_get_action_id 0x03550028 +#define sl_btmesh_rsp_scheduler_server_set_action_id 0x04550028 + +/** + * @addtogroup sl_btmesh_evt_scheduler_server_action_changed sl_btmesh_evt_scheduler_server_action_changed + * @{ + * @brief Notification of a Scheduler Action change as the result of a Scheduler + * Set message + * + * For the description of these fields, see Scheduler Server. + */ + +/** @brief Identifier of the action_changed event */ +#define sl_btmesh_evt_scheduler_server_action_changed_id 0x015500a8 + +/***************************************************************************//** + * @brief Data structure of the action_changed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scheduler_server_action_changed_s +{ + uint16_t elem_index; /**< Scheduler server model element index */ + uint8_t index; /**< Index of the Scheduler Register */ + uint8_t year; /**< Scheduled year for the action */ + uint16_t month; /**< Scheduled month for the action */ + uint8_t day; /**< Scheduled day of the month for the action */ + uint8_t hour; /**< Scheduled hour for the action */ + uint8_t minute; /**< Scheduled minute for the action */ + uint8_t second; /**< Scheduled second for the action */ + uint8_t day_of_week; /**< Scheduled days of the week for the action */ + uint8_t action; /**< Action to be performed at the scheduled time */ + uint32_t transition_time_ms; /**< Transition time for this action */ + uint16_t scene_number; /**< Scene number to be used for some actions */ +}); + +typedef struct sl_btmesh_evt_scheduler_server_action_changed_s sl_btmesh_evt_scheduler_server_action_changed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scheduler_server_action_changed + +/** + * @addtogroup sl_btmesh_evt_scheduler_server_scene_changed sl_btmesh_evt_scheduler_server_scene_changed + * @{ + * @brief Notification that scheduled scene change took place + */ + +/** @brief Identifier of the scene_changed event */ +#define sl_btmesh_evt_scheduler_server_scene_changed_id 0x025500a8 + +/***************************************************************************//** + * @brief Data structure of the scene_changed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scheduler_server_scene_changed_s +{ + uint16_t elem_index; /**< Scheduler server model element index */ + uint32_t transition_time_ms; /**< Transition time for this action */ + uint16_t scene_number; /**< Scene number being activated */ +}); + +typedef struct sl_btmesh_evt_scheduler_server_scene_changed_s sl_btmesh_evt_scheduler_server_scene_changed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scheduler_server_scene_changed + +/** + * @addtogroup sl_btmesh_evt_scheduler_server_action_triggered sl_btmesh_evt_scheduler_server_action_triggered + * @{ + * @brief Notification about a Scheduler Action that had its deadline expired + */ + +/** @brief Identifier of the action_triggered event */ +#define sl_btmesh_evt_scheduler_server_action_triggered_id 0x035500a8 + +/***************************************************************************//** + * @brief Data structure of the action_triggered event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_scheduler_server_action_triggered_s +{ + uint16_t elem_index; /**< Scheduler server model element index */ + uint8_t index; /**< Index of the Scheduler Register */ + uint8_t action; /**< Action to be performed at the scheduled time */ + uint32_t transition_time_ms; /**< Transition time for this action */ + uint16_t scene_number; /**< Scene number to be used for some actions */ +}); + +typedef struct sl_btmesh_evt_scheduler_server_action_triggered_s sl_btmesh_evt_scheduler_server_action_triggered_t; + +/** @} */ // end addtogroup sl_btmesh_evt_scheduler_server_action_triggered + +/***************************************************************************//** + * + * Initialize the Scheduler Server model + * + * @param[in] elem_index Scheduler server model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scheduler_server_init(uint16_t elem_index); + +/***************************************************************************//** + * + * Deinitialize the Scheduler Server model + * + * @param[in] elem_index Scheduler server model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scheduler_server_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Get Scheduler Register status of Scheduler Server. + * + * @param[in] elem_index Scheduler server model element index + * @param[out] status Scheduler Server Scheduler Register status + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scheduler_server_get(uint16_t elem_index, + uint16_t *status); + +/***************************************************************************//** + * + * Get the Scheduler Action defined by a Schedule Register state entry. + * + * For the description of returned fields, see Scheduler Server + * + * @param[in] elem_index Scheduler server model element index + * @param[in] index Index of the Scheduler Register entry to get + * @param[out] index_ Index of the Scheduler Register entry to set + * @param[out] year Scheduled year for the action + * @param[out] month Scheduled month for the action + * @param[out] day Scheduled day of the month for the action + * @param[out] hour Scheduled hour for the action + * @param[out] minute Scheduled minute for the action + * @param[out] second Scheduled second for the action + * @param[out] day_of_week Scheduled days of the week for the action + * @param[out] action Action to be performed at the scheduled time + * @param[out] transition_time_ms Transition time for this action + * @param[out] scene_number Scene number to be used for some actions + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scheduler_server_get_action(uint16_t elem_index, + uint8_t index, + uint8_t *index_, + uint8_t *year, + uint16_t *month, + uint8_t *day, + uint8_t *hour, + uint8_t *minute, + uint8_t *second, + uint8_t *day_of_week, + uint8_t *action, + uint32_t *transition_time_ms, + uint16_t *scene_number); + +/***************************************************************************//** + * + * Set the given Scheduler Action entry of the Scheduler Register state. + * + * For the description of these fields, see Scheduler Server + * + * @param[in] elem_index Scheduler server model element index + * @param[in] index Index of the Scheduler Register entry to set + * @param[in] year Scheduled year for the action + * @param[in] month Scheduled month for the action + * @param[in] day Scheduled day of the month for the action + * @param[in] hour Scheduled hour for the action + * @param[in] minute Scheduled minute for the action + * @param[in] second Scheduled second for the action + * @param[in] day_of_week Scheduled days of the week for the action + * @param[in] action Action to be performed at the scheduled time + * @param[in] transition_time_ms Transition time for this action + * @param[in] scene_number Scene number to be used for some actions + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_scheduler_server_set_action(uint16_t elem_index, + uint8_t index, + uint8_t year, + uint16_t month, + uint8_t day, + uint8_t hour, + uint8_t minute, + uint8_t second, + uint8_t day_of_week, + uint8_t action, + uint32_t transition_time_ms, + uint16_t scene_number); + +/** @} */ // end addtogroup sl_btmesh_scheduler_server + +/** + * @addtogroup sl_btmesh_fw_update_server Bluetooth Mesh Firmware Update Server Model + * @{ + * + * @brief Bluetooth Mesh Firmware Update Server Model + * + * This class provides the commands and messages to interface with the Firmware + * Update Server model. + * + * The MBT Server must be initialized before the Update Server. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_fw_update_server_init_id 0x00570028 +#define sl_btmesh_cmd_fw_update_server_deinit_id 0x01570028 +#define sl_btmesh_cmd_fw_update_server_check_fw_metadata_rsp_id 0x02570028 +#define sl_btmesh_cmd_fw_update_server_update_start_rsp_id 0x03570028 +#define sl_btmesh_cmd_fw_update_server_verify_fw_rsp_id 0x04570028 +#define sl_btmesh_cmd_fw_update_server_distributor_self_update_rsp_id 0x05570028 +#define sl_btmesh_rsp_fw_update_server_init_id 0x00570028 +#define sl_btmesh_rsp_fw_update_server_deinit_id 0x01570028 +#define sl_btmesh_rsp_fw_update_server_check_fw_metadata_rsp_id 0x02570028 +#define sl_btmesh_rsp_fw_update_server_update_start_rsp_id 0x03570028 +#define sl_btmesh_rsp_fw_update_server_verify_fw_rsp_id 0x04570028 +#define sl_btmesh_rsp_fw_update_server_distributor_self_update_rsp_id 0x05570028 + +/** + * @brief The Update Phase of the Firmware Update Server. + */ +typedef enum +{ + sl_btmesh_fw_update_server_update_phase_idle = 0x0, /**< + (0x0) + No + firmware + transfer + is in + progress. */ + sl_btmesh_fw_update_server_update_phase_transfer_error = 0x1, /**< + (0x1) + Error + occurred + during + firmware + image + BLOB + transfer. */ + sl_btmesh_fw_update_server_update_phase_transfer_in_progress = 0x2, /**< + (0x2) + Firmware + image + BLOB + transfer + is in + progress. */ + sl_btmesh_fw_update_server_update_phase_verifying_update = 0x3, /**< + (0x3) + Firmware + image + transfer + completed, + and + the + node + is + verifying + the + image. */ + sl_btmesh_fw_update_server_update_phase_verification_success = 0x4, /**< + (0x4) + Firmware + image + verification + succeeded. */ + sl_btmesh_fw_update_server_update_phase_verification_failed = 0x5, /**< + (0x5) + Firmware + image + verification + failed. */ + sl_btmesh_fw_update_server_update_phase_apply_in_progress = 0x6 /**< + (0x6) + The + node + is + applying + the + firmware + image. */ +} sl_btmesh_fw_update_server_update_phase_t; + +/** + * @brief Status codes reported by the Firmware Update Server. + */ +typedef enum +{ + sl_btmesh_fw_update_server_update_status_success = 0x0, /**< + (0x0) + The + message + was + processed + successfully. */ + sl_btmesh_fw_update_server_update_status_out_of_resources = 0x1, /**< + (0x1) + Insufficient + resources + on + the + node. */ + sl_btmesh_fw_update_server_update_status_wrong_phase = 0x2, /**< + (0x2) + The + operation + cannot + be + performed + while + the + server + is + in + the + current + phase. */ + sl_btmesh_fw_update_server_update_status_internal_error = 0x3, /**< + (0x3) + An + internal + error + occurred + on + the + node. */ + sl_btmesh_fw_update_server_update_status_wrong_fw_index = 0x4, /**< + (0x4) + The + message + contained + a + firmware + index + value + that + is + not + expected. */ + sl_btmesh_fw_update_server_update_status_metadata_check_failed = 0x5, /**< + (0x5) + The + firmware + metadata + check + failed. */ + sl_btmesh_fw_update_server_update_status_temporarily_unable = 0x6, /**< + (0x6) + The + server + cannot + start + a + firmware + update + right + now. */ + sl_btmesh_fw_update_server_update_status_blob_transfer_busy = 0x7 /**< + (0x7) + The + local + MBT + Server + model + is + busy + with + another + BLOB + transfer. */ +} sl_btmesh_fw_update_server_update_status_t; + +/** + * @brief Used by the implementation to accept or reject the image and select + * the status code reported by the Firmware Update Server. + */ +typedef enum +{ + sl_btmesh_fw_update_server_update_start_response_type_accept = 0x0, /**< + (0x0) + Accept; + the + MBT + Server + will + start + receiving + the + image. */ + sl_btmesh_fw_update_server_update_start_response_type_fw_already_exists = 0x1, /**< + (0x1) + Accept; + the + MBT + Server + will + not + start + receiving + the + image, + as + the + image + has + already + been + received. */ + sl_btmesh_fw_update_server_update_start_response_type_reject_out_of_resources = 0x2, /**< + (0x2) + Reject; + insufficient + resources + on + the + node. */ + sl_btmesh_fw_update_server_update_start_response_type_reject_internal_error = 0x3, /**< + (0x3) + Reject; + An + internal + error + occurred + on + the + node. */ + sl_btmesh_fw_update_server_update_start_response_type_reject_metadata_check_failed = 0x4, /**< + (0x4) + Reject; + the + firmware + metadata + indicated + that + the + image + is + not + suitable + for + this + node. */ + sl_btmesh_fw_update_server_update_start_response_type_reject_temporarily_unable = 0x5 /**< + (0x5) + Reject; + The + server + cannot + start + a + firmware + update + right + now. */ +} sl_btmesh_fw_update_server_update_start_response_type_t; + +/** + * @addtogroup sl_btmesh_evt_fw_update_server_check_fw_metadata_req sl_btmesh_evt_fw_update_server_check_fw_metadata_req + * @{ + * @brief The command @ref sl_btmesh_fw_update_server_check_fw_metadata_rsp must + * be issued to inform the client whether metadata looks suitable or not. + */ + +/** @brief Identifier of the check_fw_metadata_req event */ +#define sl_btmesh_evt_fw_update_server_check_fw_metadata_req_id 0x005700a8 + +/***************************************************************************//** + * @brief Data structure of the check_fw_metadata_req event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_update_server_check_fw_metadata_req_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Update Client */ + uint8_t fw_index; /**< Index of the currently installed firmware to + check for updating. */ + uint8array metadata; /**< Metadata for the incoming firmware. May be + zero-length. */ +}); + +typedef struct sl_btmesh_evt_fw_update_server_check_fw_metadata_req_s sl_btmesh_evt_fw_update_server_check_fw_metadata_req_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_update_server_check_fw_metadata_req + +/** + * @addtogroup sl_btmesh_evt_fw_update_server_update_start_req sl_btmesh_evt_fw_update_server_update_start_req + * @{ + * @brief The firmware update is being started + * + * The command @ref sl_btmesh_fw_update_server_update_start_rsp should be issued + * as a response. + */ + +/** @brief Identifier of the update_start_req event */ +#define sl_btmesh_evt_fw_update_server_update_start_req_id 0x035700a8 + +/***************************************************************************//** + * @brief Data structure of the update_start_req event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_update_server_update_start_req_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Update Client */ + sl_bt_uuid_64_t blob_id; /**< BLOB ID of the firmware being + transferred. */ + uint8_t fw_index; /**< Index of the firmware to update */ + uint8array metadata; /**< Metadata for the FWID in the following + update_start_req event. May be + zero-length. */ +}); + +typedef struct sl_btmesh_evt_fw_update_server_update_start_req_s sl_btmesh_evt_fw_update_server_update_start_req_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_update_server_update_start_req + +/** + * @addtogroup sl_btmesh_evt_fw_update_server_verify_fw_req sl_btmesh_evt_fw_update_server_verify_fw_req + * @{ + * @brief The firmware has been downloaded completely, and needs to be verified + * + * The application should respond with the command @ref + * sl_btmesh_fw_update_server_verify_fw_rsp to indicate whether the image passed + * the application-specific checks. + */ + +/** @brief Identifier of the verify_fw_req event */ +#define sl_btmesh_evt_fw_update_server_verify_fw_req_id 0x045700a8 + +/***************************************************************************//** + * @brief Data structure of the verify_fw_req event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_update_server_verify_fw_req_s +{ + uint16_t elem_index; /**< Server model element index */ +}); + +typedef struct sl_btmesh_evt_fw_update_server_verify_fw_req_s sl_btmesh_evt_fw_update_server_verify_fw_req_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_update_server_verify_fw_req + +/** + * @addtogroup sl_btmesh_evt_fw_update_server_apply sl_btmesh_evt_fw_update_server_apply + * @{ + * @brief Apply a firmware image that has been transferred to a server. + */ + +/** @brief Identifier of the apply event */ +#define sl_btmesh_evt_fw_update_server_apply_id 0x055700a8 + +/***************************************************************************//** + * @brief Data structure of the apply event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_update_server_apply_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Update Client */ +}); + +typedef struct sl_btmesh_evt_fw_update_server_apply_s sl_btmesh_evt_fw_update_server_apply_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_update_server_apply + +/** + * @addtogroup sl_btmesh_evt_fw_update_server_update_cancelled sl_btmesh_evt_fw_update_server_update_cancelled + * @{ + * @brief Cancel a firmware update and delete any stored information about the + * update on the server. + */ + +/** @brief Identifier of the update_cancelled event */ +#define sl_btmesh_evt_fw_update_server_update_cancelled_id 0x065700a8 + +/***************************************************************************//** + * @brief Data structure of the update_cancelled event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_update_server_update_cancelled_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Update Client */ +}); + +typedef struct sl_btmesh_evt_fw_update_server_update_cancelled_s sl_btmesh_evt_fw_update_server_update_cancelled_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_update_server_update_cancelled + +/** + * @addtogroup sl_btmesh_evt_fw_update_server_distributor_self_update_req sl_btmesh_evt_fw_update_server_distributor_self_update_req + * @{ + * @brief This event can only be generated if both Distribution Server and + * Update Server functionality are used on the same node + * + * This event signals that the Initiator has added this node to the list of + * nodes to be updated; that is, the node is asked to update itself using an + * image already present in the Distribution Server's Firmware List. The command + * @ref sl_btmesh_fw_update_server_distributor_self_update_rsp must be called to + * accept or reject the self-update request. + */ + +/** @brief Identifier of the distributor_self_update_req event */ +#define sl_btmesh_evt_fw_update_server_distributor_self_update_req_id 0x075700a8 + +/***************************************************************************//** + * @brief Data structure of the distributor_self_update_req event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_update_server_distributor_self_update_req_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Update Client; in this case it is + the address of the local element on which the + Distribution Server and Update Client reside. It + can be the same element as the Update Server's + element, or a different one. */ + uint8_t fw_index; /**< Index of the firmware on the Update Server to + update */ + uint16_t fw_list_index; /**< Index of the firmware image in the Distribution + Server's Firmware List. As the Distribution + Server may have multiple images in its Firmware + List, this field indicates which one to use for + updating. */ +}); + +typedef struct sl_btmesh_evt_fw_update_server_distributor_self_update_req_s sl_btmesh_evt_fw_update_server_distributor_self_update_req_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_update_server_distributor_self_update_req + +/***************************************************************************//** + * + * Initializes the Firmware Update Server model. + * + * @param[in] elem_index Server model element index + * @param[in] num_installed_fw Number of installed FWs + * @param[in] max_metadata_len Maximum length of metadata supported. Any request + * with a larger metadata value will be rejected automatically. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_server_init(uint16_t elem_index, + uint8_t num_installed_fw, + uint8_t max_metadata_len); + +/***************************************************************************//** + * + * Deinitializes the Firmware Update Server model. + * + * @param[in] elem_index Server model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_server_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Response for the @ref sl_btmesh_evt_fw_update_server_check_fw_metadata_req + * event. Report whether a server can accept a firmware update. + * + * @param[in] elem_index Server model element index + * @param[in] response_type Enum @ref + * sl_btmesh_fw_update_server_update_start_response_type_t. The status code to + * indicate to the client. + * @param[in] additional_information Enum @ref + * sl_btmesh_fw_update_client_additional_info_t. Additional information about + * what will happen to the node after the update is applied. 0 = no changes to + * DCD; 1 = DCD will change but Composition Data Refresh is not supported; 2 = + * DCD change and Composition Data Refresh is supported; 3 = node will become + * unprovisioned. + * @param[in] fw_index Index of the firmware to be updated. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_server_check_fw_metadata_rsp(uint16_t elem_index, + uint8_t response_type, + uint8_t additional_information, + uint8_t fw_index); + +/***************************************************************************//** + * + * Response for the @ref sl_btmesh_evt_fw_update_server_update_start_req event. + * After the firmware BLOB Transfer reception is complete, the event @ref + * sl_btmesh_evt_fw_update_server_verify_fw_req will be generated. + * + * @param[in] elem_index Server model element index + * @param[in] response_type Enum @ref + * sl_btmesh_fw_update_server_update_start_response_type_t. Accept or reject + * the image. + * @param[in] additional_information Enum @ref + * sl_btmesh_fw_update_client_additional_info_t. Additional information about + * what will happen to the node after the update is applied. 0 = no changes to + * DCD; 1 = DCD will change but Composition Data Refresh is not supported; 2 = + * DCD change and Composition Data Refresh is supported; 3 = node will become + * unprovisioned. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_update_server_verify_fw_req + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_server_update_start_rsp(uint16_t elem_index, + uint8_t response_type, + uint8_t additional_information); + +/***************************************************************************//** + * + * Response for the @ref sl_btmesh_evt_fw_update_server_verify_fw_req event. If + * the image was accepted, the event @ref sl_btmesh_evt_fw_update_server_apply + * will be generated when the Update Client asks the node to apply the new + * firmware and reboot. + * + * @param[in] elem_index Server model element index + * @param[in] accept 0 to reject the firmware image, nonzero to accept. If + * rejected, the server will indicate verification failure to the client when + * queried. If accepted, the server will wait for an apply command from the + * client. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_update_server_apply + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_server_verify_fw_rsp(uint16_t elem_index, + uint8_t accept); + +/***************************************************************************//** + * + * Response for the @ref + * sl_btmesh_evt_fw_update_server_distributor_self_update_req event. This + * command can only be used if both Distribution Server and Update Server + * functionality are used on the same node. If the self-update is accepted, the + * event @ref sl_btmesh_evt_fw_update_server_verify_fw_req will be generated to + * confirm that the firmware image passed the application-specific checks, just + * like in a regular update. + * + * @param[in] elem_index Server model element index + * @param[in] response_type Enum @ref + * sl_btmesh_fw_update_server_update_start_response_type_t. Accept or reject + * the image. + * @param[in] additional_information Enum @ref + * sl_btmesh_fw_update_client_additional_info_t. Additional information about + * what will happen to the node after the update is applied. 0 = no changes to + * DCD; 1 = DCD will change but Composition Data Refresh is not supported; 2 = + * DCD change and Composition Data Refresh is supported; 3 = node will become + * unprovisioned. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_update_server_verify_fw_req + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_update_server_distributor_self_update_rsp(uint16_t elem_index, + uint8_t response_type, + uint8_t additional_information); + +/** @} */ // end addtogroup sl_btmesh_fw_update_server + +/** + * @addtogroup sl_btmesh_time_server Bluetooth Mesh Time Server Model + * @{ + * + * @brief Bluetooth Mesh Time Server Model + * + * This class provides the commands and messages to interface with the Time + * Server model + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_time_server_init_id 0x00520028 +#define sl_btmesh_cmd_time_server_deinit_id 0x01520028 +#define sl_btmesh_cmd_time_server_get_time_id 0x02520028 +#define sl_btmesh_cmd_time_server_set_time_id 0x03520028 +#define sl_btmesh_cmd_time_server_get_time_zone_offset_new_id 0x04520028 +#define sl_btmesh_cmd_time_server_set_time_zone_offset_new_id 0x05520028 +#define sl_btmesh_cmd_time_server_get_tai_utc_delta_new_id 0x06520028 +#define sl_btmesh_cmd_time_server_set_tai_utc_delta_new_id 0x07520028 +#define sl_btmesh_cmd_time_server_get_time_role_id 0x08520028 +#define sl_btmesh_cmd_time_server_set_time_role_id 0x09520028 +#define sl_btmesh_cmd_time_server_get_datetime_id 0x0a520028 +#define sl_btmesh_cmd_time_server_publish_id 0x0b520028 +#define sl_btmesh_cmd_time_server_status_id 0x0c520028 +#define sl_btmesh_rsp_time_server_init_id 0x00520028 +#define sl_btmesh_rsp_time_server_deinit_id 0x01520028 +#define sl_btmesh_rsp_time_server_get_time_id 0x02520028 +#define sl_btmesh_rsp_time_server_set_time_id 0x03520028 +#define sl_btmesh_rsp_time_server_get_time_zone_offset_new_id 0x04520028 +#define sl_btmesh_rsp_time_server_set_time_zone_offset_new_id 0x05520028 +#define sl_btmesh_rsp_time_server_get_tai_utc_delta_new_id 0x06520028 +#define sl_btmesh_rsp_time_server_set_tai_utc_delta_new_id 0x07520028 +#define sl_btmesh_rsp_time_server_get_time_role_id 0x08520028 +#define sl_btmesh_rsp_time_server_set_time_role_id 0x09520028 +#define sl_btmesh_rsp_time_server_get_datetime_id 0x0a520028 +#define sl_btmesh_rsp_time_server_publish_id 0x0b520028 +#define sl_btmesh_rsp_time_server_status_id 0x0c520028 + +/** + * @addtogroup sl_btmesh_evt_time_server_time_updated sl_btmesh_evt_time_server_time_updated + * @{ + * @brief Indicate that Time State has been updated by external source, either + * Time Set message from a Time Client, or a Time Status message + */ + +/** @brief Identifier of the time_updated event */ +#define sl_btmesh_evt_time_server_time_updated_id 0x005200a8 + +/***************************************************************************//** + * @brief Data structure of the time_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_time_server_time_updated_s +{ + uint16_t elem_index; /**< Server model element index */ + uint64_t tai_seconds; /**< The current TAI time in seconds since the + epoch, 40-bit value */ + uint8_t subsecond; /**< The sub-second in units of 1/256th second. + Range is 0-255. */ + uint8_t uncertainty; /**< The estimated uncertainty in 10-milliseconds + steps. Range is 0-255, representing up 2.55 + seconds. */ + uint8_t time_authority; /**< 0: No Time Authority, the element does not + have a trusted source of time such as GPS or + NTP. 1: Time Authority, the element has a + trusted source of time or a battery-backed + properly initialized RTC. Other values are + prohibited. */ + int32_t tai_utc_delta; /**< Current difference between TAI and UTC in + seconds. Range is -255 to 32512. */ + int16_t time_zone_offset; /**< The local time zone offset in 15-minute + increments. Range is -64 to 191, representing + \-16 to 47.75 hours. */ +}); + +typedef struct sl_btmesh_evt_time_server_time_updated_s sl_btmesh_evt_time_server_time_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_time_server_time_updated + +/** + * @addtogroup sl_btmesh_evt_time_server_time_zone_offset_updated sl_btmesh_evt_time_server_time_zone_offset_updated + * @{ + * @brief Indicate that upcoming time zone offset change has been updated by + * external source + */ + +/** @brief Identifier of the time_zone_offset_updated event */ +#define sl_btmesh_evt_time_server_time_zone_offset_updated_id 0x015200a8 + +/***************************************************************************//** + * @brief Data structure of the time_zone_offset_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_time_server_time_zone_offset_updated_s +{ + uint16_t elem_index; /**< Server model element index */ + int16_t time_zone_offset_current; /**< Current local time zone offset. Range + is -64 to 191, representing -16 to + 47.75 hours. */ + int16_t time_zone_offset_new; /**< Upcoming local time zone offset. Range + is -64 to 191, representing -16 to + 47.75 hours. */ + uint64_t tai_of_zone_change; /**< Absolute TAI time when the Time Zone + Offset will change from Current to New */ +}); + +typedef struct sl_btmesh_evt_time_server_time_zone_offset_updated_s sl_btmesh_evt_time_server_time_zone_offset_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_time_server_time_zone_offset_updated + +/** + * @addtogroup sl_btmesh_evt_time_server_tai_utc_delta_updated sl_btmesh_evt_time_server_tai_utc_delta_updated + * @{ + * @brief Indicate that the upcoming TAI-UTC Delta has been updated by external + * source + */ + +/** @brief Identifier of the tai_utc_delta_updated event */ +#define sl_btmesh_evt_time_server_tai_utc_delta_updated_id 0x025200a8 + +/***************************************************************************//** + * @brief Data structure of the tai_utc_delta_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_time_server_tai_utc_delta_updated_s +{ + uint16_t elem_index; /**< Server model element index */ + int32_t tai_utc_delta_current; /**< Current difference between TAI and UTC is + seconds. Range is -255 to 32512. */ + int32_t tai_utc_delta_new; /**< Upcoming difference between TAI and UTC + is seconds. Range is -255 to 32512. */ + uint64_t tai_of_delta_change; /**< TAI Seconds time of the upcoming TAI-UTC + Delta change */ +}); + +typedef struct sl_btmesh_evt_time_server_tai_utc_delta_updated_s sl_btmesh_evt_time_server_tai_utc_delta_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_time_server_tai_utc_delta_updated + +/** + * @addtogroup sl_btmesh_evt_time_server_time_role_updated sl_btmesh_evt_time_server_time_role_updated + * @{ + * @brief Indicate that Time Role has been updated by external source by Time + * Role Set message from a Time Client. + */ + +/** @brief Identifier of the time_role_updated event */ +#define sl_btmesh_evt_time_server_time_role_updated_id 0x035200a8 + +/***************************************************************************//** + * @brief Data structure of the time_role_updated event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_time_server_time_role_updated_s +{ + uint16_t elem_index; /**< Server model element index */ + uint8_t time_role; /**< Time Role */ +}); + +typedef struct sl_btmesh_evt_time_server_time_role_updated_s sl_btmesh_evt_time_server_time_role_updated_t; + +/** @} */ // end addtogroup sl_btmesh_evt_time_server_time_role_updated + +/***************************************************************************//** + * + * Initializes the Time Server model + * + * @param[in] elem_index Server model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_init(uint16_t elem_index); + +/***************************************************************************//** + * + * Deinitialize the Time Server model + * + * @param[in] elem_index Server model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Get the current time from Time Server + * + * @param[in] elem_index Server model element index + * @param[out] tai_seconds The current TAI time in seconds + * @param[out] subsecond The sub-second time in units of 1/256th second + * @param[out] uncertainty The estimated uncertainty in 10 millisecond steps + * @param[out] time_authority 0 = No Time Authority, 1 = Time Authority + * @param[out] time_zone_offset Current local time zone offset. Range is -64 to + * 191, representing -16 to 47.75 hours. + * @param[out] tai_utc_delta Current difference between TAI and UTC in seconds. + * Range is -255 to 32512. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_get_time(uint16_t elem_index, + uint64_t *tai_seconds, + uint8_t *subsecond, + uint8_t *uncertainty, + uint8_t *time_authority, + int16_t *time_zone_offset, + int32_t *tai_utc_delta); + +/***************************************************************************//** + * + * Set the current time for the element. + * + * @param[in] elem_index Server model element index + * @param[in] tai_seconds The current TAI time in seconds + * @param[in] subsecond The sub-second time in units of 1/256th second + * @param[in] uncertainty The estimated uncertainty in 10 millisecond steps + * @param[in] time_authority 0 = No Time Authority, 1 = Time Authority + * @param[in] time_zone_offset Current local time zone offset. Range is -64 to + * 191, representing -16 to 47.75 hours. + * @param[in] tai_utc_delta Current difference between TAI and UTC in seconds. + * Range is -255 to 32512. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_set_time(uint16_t elem_index, + uint64_t tai_seconds, + uint8_t subsecond, + uint8_t uncertainty, + uint8_t time_authority, + int16_t time_zone_offset, + int32_t tai_utc_delta); + +/***************************************************************************//** + * + * Get the upcoming time zone offset from Time Server + * + * @param[in] elem_index Server model element index + * @param[out] new_offset Upcoming local time zone offset. Range is -64 to 191, + * representing -16 to 47.75 hours. + * @param[out] tai_of_zone_change Absolute TAI time when the Time Zone Offset + * will change from Current to New + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_get_time_zone_offset_new(uint16_t elem_index, + int16_t *new_offset, + uint64_t *tai_of_zone_change); + +/***************************************************************************//** + * + * Set the upcoming time zone offset for the element + * + * @param[in] elem_index Server model element index + * @param[in] new_offset Upcoming local time zone offset. Range is -64 to 191, + * representing -16 to 47.75 hours. + * @param[in] tai_of_zone_change Absolute TAI time when the Time Zone Offset + * will change from Current to New + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_set_time_zone_offset_new(uint16_t elem_index, + int16_t new_offset, + uint64_t tai_of_zone_change); + +/***************************************************************************//** + * + * Get the upcoming TAI-UTC delta for the element + * + * @param[in] elem_index Server model element index + * @param[out] new_delta Upcoming difference between TAI and UTC in seconds + * @param[out] tai_of_delta_change Absolute TAI time when the TAI-UTC Delta will + * change from Current to New + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_get_tai_utc_delta_new(uint16_t elem_index, + int32_t *new_delta, + uint64_t *tai_of_delta_change); + +/***************************************************************************//** + * + * Set the upcoming TAI-UTC delta for the element + * + * @param[in] elem_index Server model element index + * @param[in] new_delta Upcoming difference between TAI and UTC in seconds. + * Range is -255 to 32512. + * @param[in] tai_of_delta_change Absolute TAI time when the TAI-UTC Delta will + * change from Current to New + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_set_tai_utc_delta_new(uint16_t elem_index, + int32_t new_delta, + uint64_t tai_of_delta_change); + +/***************************************************************************//** + * + * Get Time Role for the element + * + * @param[in] elem_index Server model element index + * @param[out] time_role Time Role of the element + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_get_time_role(uint16_t elem_index, + uint8_t *time_role); + +/***************************************************************************//** + * + * Set Time Role for the element + * + * @param[in] elem_index Server model element index + * @param[in] time_role Time Role of the element. Range is 0 to 3. + * - 0 = Time Role None, The element does not participate in propagation of + * time information. + * - 1 = Time Role Authority, The element publishes Time Status messages but + * does not process received Time Status messages. + * - 2 = Time Role Relay, The element processes received and publishes Time + * Status messages. + * - 3 = Time Role Client, The element does not publish but processes + * received Time Status messages. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_set_time_role(uint16_t elem_index, + uint8_t time_role); + +/***************************************************************************//** + * + * Return the date and time from the Time Server + * + * @param[in] elem_index Server model element index + * @param[out] year Year + * @param[out] month Month + * @param[out] day Day + * @param[out] hour Hour + * @param[out] min Minutes + * @param[out] sec Seconds + * @param[out] ms Milliseconds + * @param[out] timezone Local time zone offset. Range is -64 to 191, + * representing -16 to 47.75 hours. + * @param[out] day_of_week Day of week, 0..6 represents Monday to Sunday + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_get_datetime(uint16_t elem_index, + uint16_t *year, + uint8_t *month, + uint8_t *day, + uint8_t *hour, + uint8_t *min, + uint8_t *sec, + uint16_t *ms, + int16_t *timezone, + uint8_t *day_of_week); + +/***************************************************************************//** + * + * Publish Time Status containing the current time. Permitted only for Time + * Server having the role of Time Authority. + * + * @param[in] elem_index Element index of the Time Server + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_publish(uint16_t elem_index); + +/***************************************************************************//** + * + * Send a Time Status message containing the current time as an unsolicited + * message. Permitted only for Time Server having the role of Time Authority. + * + * @param[in] destination_address Destination address + * @param[in] elem_index Element index of the Time Server + * @param[in] appkey_index The application key index to use + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_server_status(uint16_t destination_address, + uint16_t elem_index, + uint16_t appkey_index); + +/** @} */ // end addtogroup sl_btmesh_time_server + +/** + * @addtogroup sl_btmesh_time_client Bluetooth Mesh Time Client Model + * @{ + * + * @brief Bluetooth Mesh Time Client Model + * + * This class provides the commands and messages to interface with the Time + * Client model + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_time_client_init_id 0x00530028 +#define sl_btmesh_cmd_time_client_deinit_id 0x01530028 +#define sl_btmesh_cmd_time_client_get_time_id 0x02530028 +#define sl_btmesh_cmd_time_client_set_time_id 0x03530028 +#define sl_btmesh_cmd_time_client_get_time_zone_id 0x04530028 +#define sl_btmesh_cmd_time_client_set_time_zone_id 0x05530028 +#define sl_btmesh_cmd_time_client_get_tai_utc_delta_id 0x06530028 +#define sl_btmesh_cmd_time_client_set_tai_utc_delta_id 0x07530028 +#define sl_btmesh_cmd_time_client_get_time_role_id 0x08530028 +#define sl_btmesh_cmd_time_client_set_time_role_id 0x09530028 +#define sl_btmesh_rsp_time_client_init_id 0x00530028 +#define sl_btmesh_rsp_time_client_deinit_id 0x01530028 +#define sl_btmesh_rsp_time_client_get_time_id 0x02530028 +#define sl_btmesh_rsp_time_client_set_time_id 0x03530028 +#define sl_btmesh_rsp_time_client_get_time_zone_id 0x04530028 +#define sl_btmesh_rsp_time_client_set_time_zone_id 0x05530028 +#define sl_btmesh_rsp_time_client_get_tai_utc_delta_id 0x06530028 +#define sl_btmesh_rsp_time_client_set_tai_utc_delta_id 0x07530028 +#define sl_btmesh_rsp_time_client_get_time_role_id 0x08530028 +#define sl_btmesh_rsp_time_client_set_time_role_id 0x09530028 + +/** + * @brief These values define the Time Role types used by the stack. + */ +typedef enum +{ + sl_btmesh_time_client_time_role_none = 0x0, /**< (0x0) The element does + not participate in + propagation of time + information. */ + sl_btmesh_time_client_time_role_authority = 0x1, /**< (0x1) The element + publishes Time Status + messages but does not + process received Time + Status messages. */ + sl_btmesh_time_client_time_role_relay = 0x2, /**< (0x2) The element + processes received and + publishes Time Status + messages. */ + sl_btmesh_time_client_time_role_client = 0x3 /**< (0x3) The element does + not publish but + processes received Time + Status messages. */ +} sl_btmesh_time_client_time_roles_t; + +/** + * @addtogroup sl_btmesh_evt_time_client_time_status sl_btmesh_evt_time_client_time_status + * @{ + * @brief Time Status event, response to @ref sl_btmesh_time_client_set_time or + * @ref sl_btmesh_time_client_get_time command or unsolicited message. + */ + +/** @brief Identifier of the time_status event */ +#define sl_btmesh_evt_time_client_time_status_id 0x005300a8 + +/***************************************************************************//** + * @brief Data structure of the time_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_time_client_time_status_s +{ + uint16_t client_address; /**< Client address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint16_t appkey_index; /**< App key index. */ + uint64_t tai_seconds; /**< The current TAI time in seconds */ + uint8_t subsecond; /**< The sub-second time in units of 1/256th second */ + uint8_t uncertainty; /**< The estimated uncertainty in 10-millisecond + steps */ + uint8_t time_authority; /**< 0 = No Time Authority, 1 = Time Authority */ + int32_t tai_utc_delta; /**< Current difference between TAI and UTC in + seconds. Range is -255 to 32512. */ + int16_t time_zone_offset; /**< The local time zone offset in 15-minute + increments. Range is -64 to 191, representing + \-16 to 47.75 hours. */ +}); + +typedef struct sl_btmesh_evt_time_client_time_status_s sl_btmesh_evt_time_client_time_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_time_client_time_status + +/** + * @addtogroup sl_btmesh_evt_time_client_time_zone_status sl_btmesh_evt_time_client_time_zone_status + * @{ + * @brief Time Zone Status event, response to @ref + * sl_btmesh_time_client_set_time_zone or @ref + * sl_btmesh_time_client_get_time_zone command or unsolicited message. + */ + +/** @brief Identifier of the time_zone_status event */ +#define sl_btmesh_evt_time_client_time_zone_status_id 0x015300a8 + +/***************************************************************************//** + * @brief Data structure of the time_zone_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_time_client_time_zone_status_s +{ + uint16_t client_address; /**< Client address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint16_t appkey_index; /**< App key index. */ + int16_t time_zone_offset_current; /**< Current local time zone offset. Range + is -64 to 191, representing -16 to + 47.75 hours. */ + int16_t time_zone_offset_new; /**< Upcoming local time zone offset */ + uint64_t tai_of_zone_change; /**< TAI seconds time of the upcoming Time + Zone offset change */ +}); + +typedef struct sl_btmesh_evt_time_client_time_zone_status_s sl_btmesh_evt_time_client_time_zone_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_time_client_time_zone_status + +/** + * @addtogroup sl_btmesh_evt_time_client_tai_utc_delta_status sl_btmesh_evt_time_client_tai_utc_delta_status + * @{ + * @brief TAI-UTC Delta Status event, response to @ref + * sl_btmesh_time_client_set_tai_utc_delta or @ref + * sl_btmesh_time_client_get_tai_utc_delta command or unsolicited message. + */ + +/** @brief Identifier of the tai_utc_delta_status event */ +#define sl_btmesh_evt_time_client_tai_utc_delta_status_id 0x025300a8 + +/***************************************************************************//** + * @brief Data structure of the tai_utc_delta_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_time_client_tai_utc_delta_status_s +{ + uint16_t client_address; /**< Client address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint16_t appkey_index; /**< App key index. */ + int32_t tai_utc_delta_current; /**< Current difference between TAI and UTC. + Range is -255 to 32512. */ + int32_t tai_utc_delta_new; /**< Upcoming difference between TAI and UTC + in seconds. Range is -255 to 32512. */ + uint64_t tai_of_delta_change; /**< TAI seconds time of the upcoming TAI-UTC + delta change */ +}); + +typedef struct sl_btmesh_evt_time_client_tai_utc_delta_status_s sl_btmesh_evt_time_client_tai_utc_delta_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_time_client_tai_utc_delta_status + +/** + * @addtogroup sl_btmesh_evt_time_client_time_role_status sl_btmesh_evt_time_client_time_role_status + * @{ + * @brief Time Role Status event, response to @ref + * sl_btmesh_time_client_set_time_role or @ref + * sl_btmesh_time_client_get_time_role command or unsolicited message. + */ + +/** @brief Identifier of the time_role_status event */ +#define sl_btmesh_evt_time_client_time_role_status_id 0x035300a8 + +/***************************************************************************//** + * @brief Data structure of the time_role_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_time_client_time_role_status_s +{ + uint16_t client_address; /**< Client address */ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint16_t appkey_index; /**< App key index. */ + uint8_t time_role; /**< The Time Role for the element */ +}); + +typedef struct sl_btmesh_evt_time_client_time_role_status_s sl_btmesh_evt_time_client_time_role_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_time_client_time_role_status + +/***************************************************************************//** + * + * Initialize the Time Client model + * + * @param[in] elem_index Client model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_client_init(uint16_t elem_index); + +/***************************************************************************//** + * + * Deinitialize the Time Client model + * + * @param[in] elem_index Client model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_client_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Send a Time Get message to Time Server + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_time_client_time_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_client_get_time(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Send a Time Set message to Time Server + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] tai_seconds The current TAI time in seconds since the epoch, + * 40-bit value + * @param[in] subsecond The sub-second in units of 1/256th second. Range is + * 0-255. + * @param[in] uncertainty The estimated uncertainty in 10-milliseconds steps. + * Range is 0-255, representing up to 2.55 seconds. + * @param[in] time_authority 0: No Time Authority, the element does not have a + * trusted source of time such as GPS or NTP. 1: Time Authority, the element + * has a trusted source of time or a battery-backed properly initialized RTC. + * Other values are prohibited. + * @param[in] tai_utc_delta Current difference between TAI and UTC in seconds. + * Range is -255 to 32512. + * @param[in] time_zone_offset The local time zone offset in 15-minute + * increments. Range is -64 to 191, representing -16 to 47.75 hours. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_time_client_time_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_client_set_time(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint64_t tai_seconds, + uint8_t subsecond, + uint8_t uncertainty, + uint8_t time_authority, + int32_t tai_utc_delta, + int16_t time_zone_offset); + +/***************************************************************************//** + * + * Send a Time Zone Get message to Time Server + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_time_client_time_zone_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_client_get_time_zone(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Send a Time Zone Set message to Time Server to set the Time Zone New state + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] time_zone_offset_new Upcoming local time zone offset. Range is -64 + * to 191, representing -16 to 47.75 hours. + * @param[in] tai_of_zone_change TAI Seconds time of upcoming Time Zone offset + * change + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_time_client_time_zone_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_client_set_time_zone(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + int16_t time_zone_offset_new, + uint64_t tai_of_zone_change); + +/***************************************************************************//** + * + * Send a TAI-UTC Delta Get message to Time Server + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_time_client_tai_utc_delta_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_client_get_tai_utc_delta(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Send a TAI-UTC Delta Set message to Time Server, which responds with a + * TAI-UTC Delta Status message. + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] tai_utc_delta_new Upcoming difference between TAI and UTC is + * seconds. Range is -255 to 32512. + * @param[in] tai_of_delta_change TAI Seconds time of the upcoming TAI-UTC Delta + * change + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_time_client_tai_utc_delta_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_client_set_tai_utc_delta(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + int32_t tai_utc_delta_new, + uint64_t tai_of_delta_change); + +/***************************************************************************//** + * + * Send a Time Role Get message to Time Server, which responds with a Time Role + * Status message. + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_time_client_time_role_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_client_get_time_role(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index); + +/***************************************************************************//** + * + * Send Time Role Get message to Time Server, which responds with a Time Role + * Status message. + * + * @param[in] server_address Destination server model address + * @param[in] elem_index Client model element index + * @param[in] appkey_index The application key index to use. + * @param[in] time_role The Time Role for the element. Range is 0 to 3. + * - 0 = Time Role None, The element does not participate in propagation of + * time information. + * - 1 = Time Role Authority, The element publishes Time Status messages but + * does not process received Time Status messages. + * - 2 = Time Role Relay, The element processes received and publishes Time + * Status messages. + * - 3 = Time Role Client, The element does not publish but processes + * received Time Status messages. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_time_client_time_role_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_time_client_set_time_role(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t time_role); + +/** @} */ // end addtogroup sl_btmesh_time_client + +/** + * @addtogroup sl_btmesh_fw_dist_server Bluetooth Mesh Firmware Distribution Server Model + * @{ + * + * @brief Bluetooth Mesh Firmware Distribution Server Model + * + * The Bluetooth Mesh Firmware Distribution Server Model is used to receive new + * firmware images from the Firmware Distribution Client model and distribute + * them to Updating Nodes. As a transport layer Bluetooth Mesh BLOB Transfer + * (MBT) models are in use. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_fw_dist_server_init_id 0x00580028 +#define sl_btmesh_cmd_fw_dist_server_deinit_id 0x01580028 +#define sl_btmesh_cmd_fw_dist_server_upload_start_rsp_id 0x02580028 +#define sl_btmesh_cmd_fw_dist_server_execute_distribution_step_id 0x03580028 +#define sl_btmesh_cmd_fw_dist_server_upload_oob_start_rsp_id 0x08580028 +#define sl_btmesh_cmd_fw_dist_server_set_upload_oob_metadata_id 0x09580028 +#define sl_btmesh_cmd_fw_dist_server_set_upload_oob_image_size_id 0x0a580028 +#define sl_btmesh_cmd_fw_dist_server_set_upload_oob_progress_id 0x0b580028 +#define sl_btmesh_cmd_fw_dist_server_get_node_status_by_index_id 0x0c580028 +#define sl_btmesh_cmd_fw_dist_server_get_node_status_by_address_id 0x0d580028 +#define sl_btmesh_cmd_fw_dist_server_delete_rsp_id 0x0e580028 +#define sl_btmesh_cmd_fw_dist_server_dist_start_rsp_id 0x13580028 +#define sl_btmesh_cmd_fw_dist_server_set_multicast_threshold_id 0x14580028 +#define sl_btmesh_cmd_fw_dist_server_delete_all_rsp_id 0x0f580028 +#define sl_btmesh_cmd_fw_dist_server_resume_rsp_id 0x10580028 +#define sl_btmesh_rsp_fw_dist_server_init_id 0x00580028 +#define sl_btmesh_rsp_fw_dist_server_deinit_id 0x01580028 +#define sl_btmesh_rsp_fw_dist_server_upload_start_rsp_id 0x02580028 +#define sl_btmesh_rsp_fw_dist_server_execute_distribution_step_id 0x03580028 +#define sl_btmesh_rsp_fw_dist_server_upload_oob_start_rsp_id 0x08580028 +#define sl_btmesh_rsp_fw_dist_server_set_upload_oob_metadata_id 0x09580028 +#define sl_btmesh_rsp_fw_dist_server_set_upload_oob_image_size_id 0x0a580028 +#define sl_btmesh_rsp_fw_dist_server_set_upload_oob_progress_id 0x0b580028 +#define sl_btmesh_rsp_fw_dist_server_get_node_status_by_index_id 0x0c580028 +#define sl_btmesh_rsp_fw_dist_server_get_node_status_by_address_id 0x0d580028 +#define sl_btmesh_rsp_fw_dist_server_delete_rsp_id 0x0e580028 +#define sl_btmesh_rsp_fw_dist_server_dist_start_rsp_id 0x13580028 +#define sl_btmesh_rsp_fw_dist_server_set_multicast_threshold_id 0x14580028 +#define sl_btmesh_rsp_fw_dist_server_delete_all_rsp_id 0x0f580028 +#define sl_btmesh_rsp_fw_dist_server_resume_rsp_id 0x10580028 + +/** + * @brief The state machine states of the Distribution Server's distribution + * procedure. + */ +typedef enum +{ + sl_btmesh_fw_dist_server_dist_step_idle = 0x0, /**< (0x0) No + distribution + is + active. */ + sl_btmesh_fw_dist_server_dist_step_starting_update = 0x1, /**< (0x1) + Sending + Update + Start + messages. */ + sl_btmesh_fw_dist_server_dist_step_transferring_image = 0x2, /**< (0x2) + Firmware + image + BLOB + transfer + is in + progress. */ + sl_btmesh_fw_dist_server_dist_step_checking_verification = 0x3, /**< (0x3) + Sending + Update + Get + messages + to check + verification + status. */ + sl_btmesh_fw_dist_server_dist_step_waiting_for_apply = 0x4, /**< (0x4) + Park + state if + Update + Policy + is + Verify + Only: + wait for + Distribution + Apply. + If the + policy + is + Verify + and + Apply, + this + state is + skipped. */ + sl_btmesh_fw_dist_server_dist_step_applying_update = 0x5, /**< (0x5) + Sending + Update + Apply + messages. */ + sl_btmesh_fw_dist_server_dist_step_checking_update_result = 0x6, /**< (0x6) + Sending + Information + Get + messages + to + determine + if new + firmware + was + applied. */ + sl_btmesh_fw_dist_server_dist_step_completed = 0x7, /**< (0x7) + Completed + successfully + for at + least + one + Updating + Node. */ + sl_btmesh_fw_dist_server_dist_step_failed = 0x8, /**< (0x8) + Distribution + failed + for all + Updating + Nodes. */ + sl_btmesh_fw_dist_server_dist_step_cancelling = 0x9, /**< (0x9) + Cancelling + an + ongoing + distribution. */ + sl_btmesh_fw_dist_server_dist_step_suspended = 0xa /**< (0xa) + Firmware + image + BLOB + transfer + is + temporarily + suspended. */ +} sl_btmesh_fw_dist_server_dist_step_t; + +/** + * @brief The Update Policy determines whether the Distribution Server will send + * Update Apply messages to the Updating Nodes immediately, or wait for the + * Distribution Client to send it the Distribution Apply message. + */ +typedef enum +{ + sl_btmesh_fw_dist_server_dfu_policy_verify_only = 0x0, /**< (0x0) The + Distribution + Server will + wait for the + Distribution + Apply + message, and + then send the + Update Apply + messages. */ + sl_btmesh_fw_dist_server_dfu_policy_verify_and_apply = 0x1 /**< (0x1) The + Distribution + Server will + send the + Update Apply + messages + immediately, + after the + firmware + image + verification + is complete. */ +} sl_btmesh_fw_dist_server_dfu_policy_t; + +/** + * @brief The phase of the Updating Node as determined by the Distribution + * Server. + */ +typedef enum +{ + sl_btmesh_fw_dist_server_dist_node_phase_idle = 0x0, /**< + (0x0) + No + firmware + transfer + is + in + progress. */ + sl_btmesh_fw_dist_server_dist_node_phase_transfer_error = 0x1, /**< + (0x1) + Error + occurred + during + firmware + image + BLOB + transfer. */ + sl_btmesh_fw_dist_server_dist_node_phase_transfer_in_progress = 0x2, /**< + (0x2) + Firmware + image + BLOB + transfer + is + in + progress. */ + sl_btmesh_fw_dist_server_dist_node_phase_verifying_update = 0x3, /**< + (0x3) + Firmware + image + transfer + completed, + and + the + node + is + verifying + the + image. */ + sl_btmesh_fw_dist_server_dist_node_phase_verification_success = 0x4, /**< + (0x4) + Firmware + image + verification + succeeded. */ + sl_btmesh_fw_dist_server_dist_node_phase_verification_failed = 0x5, /**< + (0x5) + Firmware + image + verification + failed. */ + sl_btmesh_fw_dist_server_dist_node_phase_apply_in_progress = 0x6, /**< + (0x6) + The + node + is + applying + the + firmware + update. */ + sl_btmesh_fw_dist_server_dist_node_phase_transfer_cancelled = 0x7, /**< + (0x7) + Firmware + transfer + was + cancelled. */ + sl_btmesh_fw_dist_server_dist_node_phase_apply_success = 0x8, /**< + (0x8) + Firmware + was + applied + successfully. */ + sl_btmesh_fw_dist_server_dist_node_phase_apply_failed = 0x9, /**< + (0x9) + Firmware + applying + failed. */ + sl_btmesh_fw_dist_server_dist_node_phase_unknown = 0xa /**< + (0xa) + The + phase + of + the + node + has + not + been + retrieved + yet. */ +} sl_btmesh_fw_dist_server_dist_node_phase_t; + +/** + * @brief Status codes reported by the Firmware Distribution Server. + */ +typedef enum +{ + sl_btmesh_fw_dist_server_dist_status_success = 0x0, /**< (0x0) + The + message + was + processed + successfully. */ + sl_btmesh_fw_dist_server_dist_status_out_of_resources = 0x1, /**< (0x1) + Insufficient + resources + on the + node. */ + sl_btmesh_fw_dist_server_dist_status_wrong_phase = 0x2, /**< (0x2) + The + operation + cannot + be + performed + while + the + server + is in + the + current + phase. */ + sl_btmesh_fw_dist_server_dist_status_internal_error = 0x3, /**< (0x3) + An + internal + error + occurred + on the + node. */ + sl_btmesh_fw_dist_server_dist_status_fwid_not_found = 0x4, /**< (0x4) + The + requested + firmware + image + is not + stored + on the + server. */ + sl_btmesh_fw_dist_server_dist_status_invalid_appkey_index = 0x5, /**< (0x5) + The + appkey + identified + by the + appkey + index + is not + known. */ + sl_btmesh_fw_dist_server_dist_status_receivers_list_empty = 0x6, /**< (0x6) + There + are no + Updating + Nodes + in the + Distribution + Receivers + List. */ + sl_btmesh_fw_dist_server_dist_status_busy_with_distribution = 0x7, /**< (0x7) + Another + distribution + is + already + in + progress. */ + sl_btmesh_fw_dist_server_dist_status_busy_with_upload = 0x8, /**< (0x8) + Another + upload + is + already + in + progress. */ + sl_btmesh_fw_dist_server_dist_status_uri_not_supported = 0x9, /**< (0x9) + The + URI + scheme + name + indicated + by the + URI is + not + supported. */ + sl_btmesh_fw_dist_server_dist_status_uri_malformed = 0xa, /**< (0xa) + The + format + of the + URI is + invalid. */ + sl_btmesh_fw_dist_server_dist_status_uri_unreachable = 0xb, /**< (0xb) + The + URI is + currently + unreachable. */ + sl_btmesh_fw_dist_server_dist_status_new_fw_not_available = 0xc, /**< (0xc) + No new + firmware + was + available + with + given + the + URI + + Current + FWID. */ + sl_btmesh_fw_dist_server_dist_status_suspend_failed = 0xd /**< (0xd) + Suspending + a + distribution + failed. */ +} sl_btmesh_fw_dist_server_dist_status_t; + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_nodes_added sl_btmesh_evt_fw_dist_server_nodes_added + * @{ + * @brief Event indicating nodes were added to the Distributor Server's Nodes + * List + */ + +/** @brief Identifier of the nodes_added event */ +#define sl_btmesh_evt_fw_dist_server_nodes_added_id 0x005800a8 + +/***************************************************************************//** + * @brief Data structure of the nodes_added event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_nodes_added_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint16_t total_nodes; /**< Total number of nodes now on the list */ + uint16_t num_added_nodes; /**< Number of nodes added */ + uint8array added_nodes; /**< Address - firmware index pairs that were + added */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_nodes_added_s sl_btmesh_evt_fw_dist_server_nodes_added_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_nodes_added + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_nodes_deleted sl_btmesh_evt_fw_dist_server_nodes_deleted + * @{ + * @brief Event indicating the Nodes List was cleared + */ + +/** @brief Identifier of the nodes_deleted event */ +#define sl_btmesh_evt_fw_dist_server_nodes_deleted_id 0x015800a8 + +/***************************************************************************//** + * @brief Data structure of the nodes_deleted event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_nodes_deleted_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_nodes_deleted_s sl_btmesh_evt_fw_dist_server_nodes_deleted_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_nodes_deleted + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_dist_start_req sl_btmesh_evt_fw_dist_server_dist_start_req + * @{ + * @brief None + */ + +/** @brief Identifier of the dist_start_req event */ +#define sl_btmesh_evt_fw_dist_server_dist_start_req_id 0x025800a8 + +/***************************************************************************//** + * @brief Data structure of the dist_start_req event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_dist_start_req_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint16_t group_address; /**< Group address of the distribution */ + uuid_128 virtual_address; /**< If the group address is a VA hash, this + contains the full virtual address label UUID + of the distribution. Otherwise, the value of + this field should be ignored. */ + uint8_t ttl; /**< Distribution TTL */ + uint8_t apply_immediately; /**< Enum @ref + sl_btmesh_fw_dist_server_dfu_policy_t. 1 if + the Update Policy is Verify and Apply, + otherwise 0. */ + uint16_t fw_list_index; /**< Index of the firmware in the Distributor's FW + List */ + uint16_t timeout_base; /**< Timeout base */ + uint8_t transfer_mode; /**< Transfer Mode to use in the distribution */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_dist_start_req_s sl_btmesh_evt_fw_dist_server_dist_start_req_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_dist_start_req + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_dist_cancel sl_btmesh_evt_fw_dist_server_dist_cancel + * @{ + * @brief None + */ + +/** @brief Identifier of the dist_cancel event */ +#define sl_btmesh_evt_fw_dist_server_dist_cancel_id 0x035800a8 + +/***************************************************************************//** + * @brief Data structure of the dist_cancel event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_dist_cancel_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_dist_cancel_s sl_btmesh_evt_fw_dist_server_dist_cancel_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_dist_cancel + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_dist_cancel_complete sl_btmesh_evt_fw_dist_server_dist_cancel_complete + * @{ + * @brief None + */ + +/** @brief Identifier of the dist_cancel_complete event */ +#define sl_btmesh_evt_fw_dist_server_dist_cancel_complete_id 0x045800a8 + +/***************************************************************************//** + * @brief Data structure of the dist_cancel_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_dist_cancel_complete_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_dist_cancel_complete_s sl_btmesh_evt_fw_dist_server_dist_cancel_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_dist_cancel_complete + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_upload_start_metadata sl_btmesh_evt_fw_dist_server_upload_start_metadata + * @{ + * @brief None + */ + +/** @brief Identifier of the upload_start_metadata event */ +#define sl_btmesh_evt_fw_dist_server_upload_start_metadata_id 0x055800a8 + +/***************************************************************************//** + * @brief Data structure of the upload_start_metadata event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_upload_start_metadata_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint8array metadata; /**< Metadata of the FW */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_upload_start_metadata_s sl_btmesh_evt_fw_dist_server_upload_start_metadata_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_upload_start_metadata + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_upload_start_req sl_btmesh_evt_fw_dist_server_upload_start_req + * @{ + * @brief None + */ + +/** @brief Identifier of the upload_start_req event */ +#define sl_btmesh_evt_fw_dist_server_upload_start_req_id 0x065800a8 + +/***************************************************************************//** + * @brief Data structure of the upload_start_req event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_upload_start_req_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint32_t size; /**< Upload size */ + sl_bt_uuid_64_t blob_id; /**< BLOB ID */ + uint8array fwid; /**< FWID of the firmware image */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_upload_start_req_s sl_btmesh_evt_fw_dist_server_upload_start_req_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_upload_start_req + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_upload_cancel sl_btmesh_evt_fw_dist_server_upload_cancel + * @{ + * @brief None + */ + +/** @brief Identifier of the upload_cancel event */ +#define sl_btmesh_evt_fw_dist_server_upload_cancel_id 0x085800a8 + +/***************************************************************************//** + * @brief Data structure of the upload_cancel event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_upload_cancel_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_upload_cancel_s sl_btmesh_evt_fw_dist_server_upload_cancel_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_upload_cancel + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_dist_state_changed sl_btmesh_evt_fw_dist_server_dist_state_changed + * @{ + * @brief None + */ + +/** @brief Identifier of the dist_state_changed event */ +#define sl_btmesh_evt_fw_dist_server_dist_state_changed_id 0x0b5800a8 + +/***************************************************************************//** + * @brief Data structure of the dist_state_changed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_dist_state_changed_s +{ + uint16_t elem_index; /**< Server model element index */ + uint8_t state; /**< Enum @ref + sl_btmesh_fw_dist_server_dist_step_t. Unsigned + 8-bit integer */ + uint16_t num_active_nodes; /**< Unsigned 16-bit integer */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_dist_state_changed_s sl_btmesh_evt_fw_dist_server_dist_state_changed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_dist_state_changed + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_node_failed sl_btmesh_evt_fw_dist_server_node_failed + * @{ + * @brief Indicates that an Updating Node failed, either due to an error or due + * to timeout + */ + +/** @brief Identifier of the node_failed event */ +#define sl_btmesh_evt_fw_dist_server_node_failed_id 0x0c5800a8 + +/***************************************************************************//** + * @brief Data structure of the node_failed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_node_failed_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t address; /**< Address of the Update Server */ + uint8_t update_phase; /**< Enum @ref + sl_btmesh_fw_dist_server_dist_node_phase_t. + Update Phase of the Update Server. 0xa if not + known yet. */ + uint8_t update_status; /**< Enum @ref + sl_btmesh_fw_update_server_update_status_t. Last + Update Status message received from the Update + Server */ + uint8_t mbt_status; /**< Last status code received from the MBT Server. + 0xa if not known yet. */ + uint8_t progress; /**< 0-100, percentage of BLOB Transfer octets + delivered and confirmed */ + uint8_t fw_index; /**< Index of the firmware being updated */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_node_failed_s sl_btmesh_evt_fw_dist_server_node_failed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_node_failed + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_upload_complete_metadata sl_btmesh_evt_fw_dist_server_upload_complete_metadata + * @{ + * @brief None + */ + +/** @brief Identifier of the upload_complete_metadata event */ +#define sl_btmesh_evt_fw_dist_server_upload_complete_metadata_id 0x0d5800a8 + +/***************************************************************************//** + * @brief Data structure of the upload_complete_metadata event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_upload_complete_metadata_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint8array metadata; /**< Metadata of the firmware image */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_upload_complete_metadata_s sl_btmesh_evt_fw_dist_server_upload_complete_metadata_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_upload_complete_metadata + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_upload_complete sl_btmesh_evt_fw_dist_server_upload_complete + * @{ + * @brief None + */ + +/** @brief Identifier of the upload_complete event */ +#define sl_btmesh_evt_fw_dist_server_upload_complete_id 0x0e5800a8 + +/***************************************************************************//** + * @brief Data structure of the upload_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_upload_complete_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint32_t size; /**< Upload size */ + sl_bt_uuid_64_t blob_id; /**< BLOB ID */ + uint8array fwid; /**< FWID of the firmware image */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_upload_complete_s sl_btmesh_evt_fw_dist_server_upload_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_upload_complete + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_upload_failed sl_btmesh_evt_fw_dist_server_upload_failed + * @{ + * @brief None + */ + +/** @brief Identifier of the upload_failed event */ +#define sl_btmesh_evt_fw_dist_server_upload_failed_id 0x0f5800a8 + +/***************************************************************************//** + * @brief Data structure of the upload_failed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_upload_failed_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint32_t size; /**< Upload size */ + sl_bt_uuid_64_t blob_id; /**< BLOB ID */ + uint8array fwid; /**< FWID of the firmware image */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_upload_failed_s sl_btmesh_evt_fw_dist_server_upload_failed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_upload_failed + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_upload_oob_start_uri sl_btmesh_evt_fw_dist_server_upload_oob_start_uri + * @{ + * @brief URI for the Upload OOB Start request event @ref + * sl_btmesh_evt_fw_dist_server_upload_oob_start_req that follows. + */ + +/** @brief Identifier of the upload_oob_start_uri event */ +#define sl_btmesh_evt_fw_dist_server_upload_oob_start_uri_id 0x105800a8 + +/***************************************************************************//** + * @brief Data structure of the upload_oob_start_uri event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_upload_oob_start_uri_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint8array uri; /**< URI to use for retrieving a new firmware image */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_upload_oob_start_uri_s sl_btmesh_evt_fw_dist_server_upload_oob_start_uri_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_upload_oob_start_uri + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_upload_oob_start_req sl_btmesh_evt_fw_dist_server_upload_oob_start_req + * @{ + * @brief Upload OOB Start request + * + * The preceding event @ref sl_btmesh_evt_fw_dist_server_upload_oob_start_uri + * contains the URI to use in combination with the FWID of this event. The + * application should execute the Check Firmware OOB procedure and then respond + * to this event with the command @ref + * sl_btmesh_fw_dist_server_upload_oob_start_rsp according to the information + * received OOB. + */ + +/** @brief Identifier of the upload_oob_start_req event */ +#define sl_btmesh_evt_fw_dist_server_upload_oob_start_req_id 0x115800a8 + +/***************************************************************************//** + * @brief Data structure of the upload_oob_start_req event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_upload_oob_start_req_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint8array fwid; /**< FWID to use for retrieving a new firmware + image */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_upload_oob_start_req_s sl_btmesh_evt_fw_dist_server_upload_oob_start_req_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_upload_oob_start_req + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_fw_delete_req sl_btmesh_evt_fw_dist_server_fw_delete_req + * @{ + * @brief None + */ + +/** @brief Identifier of the fw_delete_req event */ +#define sl_btmesh_evt_fw_dist_server_fw_delete_req_id 0x125800a8 + +/***************************************************************************//** + * @brief Data structure of the fw_delete_req event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_fw_delete_req_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint8array fwid; /**< FWID of the firmware that was deleted */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_fw_delete_req_s sl_btmesh_evt_fw_dist_server_fw_delete_req_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_fw_delete_req + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_fw_delete_all_req sl_btmesh_evt_fw_dist_server_fw_delete_all_req + * @{ + * @brief None + */ + +/** @brief Identifier of the fw_delete_all_req event */ +#define sl_btmesh_evt_fw_dist_server_fw_delete_all_req_id 0x135800a8 + +/***************************************************************************//** + * @brief Data structure of the fw_delete_all_req event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_fw_delete_all_req_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_fw_delete_all_req_s sl_btmesh_evt_fw_dist_server_fw_delete_all_req_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_fw_delete_all_req + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_dist_suspend sl_btmesh_evt_fw_dist_server_dist_suspend + * @{ + * @brief The distribution was suspended temporarily. + */ + +/** @brief Identifier of the dist_suspend event */ +#define sl_btmesh_evt_fw_dist_server_dist_suspend_id 0x155800a8 + +/***************************************************************************//** + * @brief Data structure of the dist_suspend event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_dist_suspend_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_dist_suspend_s sl_btmesh_evt_fw_dist_server_dist_suspend_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_dist_suspend + +/** + * @addtogroup sl_btmesh_evt_fw_dist_server_resume_req sl_btmesh_evt_fw_dist_server_resume_req + * @{ + * @brief The distribution resuming is requested. + */ + +/** @brief Identifier of the resume_req event */ +#define sl_btmesh_evt_fw_dist_server_resume_req_id 0x165800a8 + +/***************************************************************************//** + * @brief Data structure of the resume_req event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_server_resume_req_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint16_t group_address; /**< Group address to use for the distribution */ + uint16_t app_index; /**< Appkey index to use for the distribution */ + uint16_t ttl; /**< TTL to use for the distribution */ + uint16_t update_policy; /**< Update Policy to use for the distribution */ + uint16_t fw_index; /**< Distribution Server's Firmware Image List Index + of the image to transfer */ + uint16_t timeout_base; /**< Timeout Base to use for the distribution */ + uint16_t transfer_mode; /**< BLOB Transfer Mode to use for transferring the + image */ +}); + +typedef struct sl_btmesh_evt_fw_dist_server_resume_req_s sl_btmesh_evt_fw_dist_server_resume_req_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_server_resume_req + +/***************************************************************************//** + * + * Initializes the Firmware Distribution Server model. Before initializing the + * Distribution Server model, the Update Client and MBT Server models on the + * same element must be initialized. + * + * @param[in] elem_index Server model element index + * @param[in] max_node_list_size Maximum number of nodes that can be updated + * simultaneously + * @param[in] max_fw_entries Maximum number of firmware images that can be + * stored + * @param[in] max_fw_size Maximum size of a single firmware image + * @param[in] total_store_size Maximum combined size of all firmware images + * @param[in] multicast_threshold This value will be passed to the MBT Client. + * If the number of servers for any step exceeds or is equal to this number, + * the group address will be used. Otherwise, servers will be looped through + * one by one. Value of 0 disables the feature. + * @param[in] oob_supported_uri_scheme_names_len Length of data in @p + * oob_supported_uri_scheme_names + * @param[in] oob_supported_uri_scheme_names To indicate Upload OOB support, + * list the supported URI Scheme Names UTF-8 code points here (see + * https://www.bluetooth.com/specifications/assigned-numbers/uri-scheme-name-string-mapping/). + * To indicate Upload OOB is not supported, give a zero-length string. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_init(uint16_t elem_index, + uint16_t max_node_list_size, + uint16_t max_fw_entries, + uint32_t max_fw_size, + uint32_t total_store_size, + uint16_t multicast_threshold, + size_t oob_supported_uri_scheme_names_len, + const uint8_t* oob_supported_uri_scheme_names); + +/***************************************************************************//** + * + * Deinitializes the Firmware Distribution Server model. The corresponding + * Update Client and MBT Server models can be deinitialized before or after this + * model. + * + * @param[in] elem_index Server model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Response for the upload_start_req event + * + * @param[in] elem_index Server model element index + * @param[in] status Enum @ref sl_btmesh_fw_dist_server_dist_status_t. Status + * code to the client + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_upload_start_rsp(uint16_t elem_index, + uint8_t status); + +/***************************************************************************//** + * + * Execute the next action for the distribution state machine. + * + * @param[in] elem_index Server model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_execute_distribution_step(uint16_t elem_index); + +/***************************************************************************//** + * + * Response to the @ref sl_btmesh_evt_fw_dist_server_upload_oob_start_req event. + * The application should run the Check Firmware OOB procedure (as detailed in + * the specification) in order to check that the given URI is reachable, and a + * new firmware image is available. + * + * When the size of the image is known, @ref + * sl_btmesh_fw_dist_server_set_upload_oob_image_size must be called to inform + * the stack about the size of the image. + * + * If the image has an associated set of metadata, @ref + * sl_btmesh_fw_dist_server_set_upload_oob_metadata must be called to inform the + * stack about the image metadata. + * + * The command @ref sl_btmesh_fw_dist_server_set_upload_oob_progress must be + * called at minimum when the transfer completes or an error is encountered. It + * can be called earlier to inform the stack about the transfer progress. + * + * @param[in] elem_index Server model element index + * @param[in] status_code @parblock + * Enum @ref sl_btmesh_fw_dist_server_dist_status_t. Status code to use for + * the response. Must be one of the following: + * - 0: success - retrieving the firmware archive was started or will + * start shortly + * - 1: out of resources + * - 3: internal error occurred + * - 9: URI scheme name not supported + * - 10: URI malformed + * - 11: URI was unreachable + * - 12: No new firmware was available + * + * All other status codes are reserved or automatically sent by the stack. + * @endparblock + * @param[in] fwid_len Length of data in @p fwid + * @param[in] fwid Firmware ID of the image that will be retrieved OOB. The + * Firmware ID is retrieved by executing the Check Firmware OOB procedure. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_upload_oob_start_rsp(uint16_t elem_index, + uint8_t status_code, + size_t fwid_len, + const uint8_t* fwid); + +/***************************************************************************//** + * + * Set the metadata of an image retrieved via OOB Upload. This command can be + * used after @ref sl_btmesh_fw_dist_server_upload_oob_start_rsp, and cannot be + * used after the OOB Upload completes. If the uploaded firmware image has no + * associated metadata, this command does not need to be called. + * + * @param[in] elem_index Server model element index + * @param[in] metadata_len Length of data in @p metadata + * @param[in] metadata Metadata of the image. May be zero-length. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_set_upload_oob_metadata(uint16_t elem_index, + size_t metadata_len, + const uint8_t* metadata); + +/***************************************************************************//** + * + * Set the size of the image being retrieved via OOB Upload. This command must + * be used after @ref sl_btmesh_fw_dist_server_upload_oob_start_rsp, as soon as + * the size of the image is known. The upload cannot be completed with @ref + * sl_btmesh_fw_dist_server_set_upload_oob_progress before the size is set. + * + * @param[in] elem_index Server model element index + * @param[in] size Size of the new firmware image + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_set_upload_oob_image_size(uint16_t elem_index, + uint32_t size); + +/***************************************************************************//** + * + * Set the progress of the Upload OOB image retrieval. Used to inform the stack + * about the progress, and to indicate when the process is complete. + * + * @param[in] elem_index Server model element index + * @param[in] error @parblock + * Set to zero if no error occurred. If nonzero, the transfer will be + * considered a failure, and the Upload Phase will be set to Transfer Error. A + * nonzero value cannot be used in conjuction with progress 100. + * + * Note that there is no way in the specification to indicate what kind of + * error occurred during the OOB retrieval. Only the initial start request can + * be rejected with a specific error code; see @ref + * sl_btmesh_fw_dist_server_upload_oob_start_rsp. + * @endparblock + * @param[in] progress Progress of the transfer, in percentage. Range: 0-100. If + * set 100, the upload will be completed, and the fw_list_index return + * parameter is populated with the Firmware List Index that was assigned to + * the new image. + * @param[out] fw_list_index Firmware List Index that was assigned to the image, + * if progress was set to 100. Otherwise will be set to 0xffff, and should be + * ignored. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_set_upload_oob_progress(uint16_t elem_index, + uint8_t error, + uint8_t progress, + uint16_t *fw_list_index); + +/***************************************************************************//** + * + * Retrieve information about the ongoing update on a node + * + * @param[in] elem_index Server model element index + * @param[in] entry_index Node entry index + * @param[out] address Address of the Update Server + * @param[out] retrieved_phase Enum @ref + * sl_btmesh_fw_dist_server_dist_node_phase_t. Phase of the Update Server + * @param[out] update_server_status Enum @ref + * sl_btmesh_fw_update_server_update_status_t. Last Update Status message + * received from the Update Server + * @param[out] mbt_server_status Enum @ref sl_btmesh_mbt_server_status_t. Last + * Transfer Status message received from the BLOB Transfer Server + * @param[out] transfer_progress 0-100, percentage of BLOB Transfer octets + * delivered and confirmed + * @param[out] fw_index Index of the firmware being updated + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_get_node_status_by_index(uint16_t elem_index, + uint16_t entry_index, + uint16_t *address, + uint8_t *retrieved_phase, + uint8_t *update_server_status, + uint8_t *mbt_server_status, + uint8_t *transfer_progress, + uint8_t *fw_index); + +/***************************************************************************//** + * + * Retrieve information about the ongoing update by a node address + * + * @param[in] elem_index Server model element index + * @param[in] node_address Node mesh address + * @param[out] address Address of the Update Server + * @param[out] retrieved_phase Enum @ref + * sl_btmesh_fw_dist_server_dist_node_phase_t. Phase of the Update Server + * @param[out] update_server_status Enum @ref + * sl_btmesh_fw_update_server_update_status_t. Last Update Status message + * received from the Update Server + * @param[out] mbt_server_status Enum @ref sl_btmesh_mbt_server_status_t. Last + * Transfer Status message received from the BLOB Transfer Server + * @param[out] transfer_progress 0-100, percentage of BLOB Transfer octets + * delivered and confirmed + * @param[out] fw_index Index of the firmware being updated + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_get_node_status_by_address(uint16_t elem_index, + uint16_t node_address, + uint16_t *address, + uint8_t *retrieved_phase, + uint8_t *update_server_status, + uint8_t *mbt_server_status, + uint8_t *transfer_progress, + uint8_t *fw_index); + +/***************************************************************************//** + * + * Response to the @ref sl_btmesh_evt_fw_dist_server_fw_delete_req event. The + * application should check that requested firmware image exists and can be + * deleted. The stack will ignore incoming @ref + * sl_btmesh_fw_dist_client_start_distribution, @ref + * sl_btmesh_fw_dist_client_start_upload, @ref sl_btmesh_fw_dist_client_get_fw, + * @ref sl_btmesh_fw_dist_client_get_fw_by_index, @ref + * sl_btmesh_fw_dist_client_delete_all_fw commands until the response is called. + * + * @param[in] elem_index Server model element index + * @param[in] status @parblock + * Enum @ref sl_btmesh_fw_dist_server_dist_status_t. Status code to use for + * the response. Must be one of the following: + * - 0: success - requested firmware entry deleted by the application + * - 1: out of resources + * - 3: internal error occurred + * + * All other status codes are reserved or automatically sent by the stack. + * @endparblock + * @param[in] fwid_len Length of data in @p fwid + * @param[in] fwid Firmware ID of the image that was requested to be deleted. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_delete_rsp(uint16_t elem_index, + uint16_t status, + size_t fwid_len, + const uint8_t* fwid); + +/***************************************************************************//** + * + * Response to the @ref sl_btmesh_evt_fw_dist_server_dist_start_req event. The + * stack will ignore incoming @ref sl_btmesh_fw_dist_client_start_distribution, + * @ref sl_btmesh_fw_dist_client_start_upload, @ref + * sl_btmesh_fw_dist_client_get_fw, @ref + * sl_btmesh_fw_dist_client_get_fw_by_index, @ref + * sl_btmesh_fw_dist_client_delete_all_fw commands until the response is called. + * + * @param[in] elem_index Server model element index + * @param[in] status mesh_dfu_dist_status_success to accept, + * mesh_dfu_dist_status_internal_error to reject + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_dist_start_rsp(uint16_t elem_index, + uint16_t status); + +/***************************************************************************//** + * + * Set the multicast threshold value. + * + * @param[in] elem_index Element index + * @param[in] multicast_threshold This value will be passed to the MBT Client. + * If the number of servers for any step exceeds or is equal to this number, + * the group address will be used. Otherwise, servers will be looped through + * one by one. Value of 0 disables the feature. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_set_multicast_threshold(uint16_t elem_index, + uint16_t multicast_threshold); + +/***************************************************************************//** + * + * Response to the @ref sl_btmesh_evt_fw_dist_server_fw_delete_all_req event. + * The application should check that all firmware images can be deleted. The + * stack will ignore incoming @ref sl_btmesh_fw_dist_client_start_distribution, + * @ref sl_btmesh_fw_dist_client_start_upload, @ref + * sl_btmesh_fw_dist_client_get_fw, @ref + * sl_btmesh_fw_dist_client_get_fw_by_index, @ref + * sl_btmesh_fw_dist_client_delete_all_fw commands until the response is called. + * + * @param[in] elem_index Server model element index + * @param[in] status @parblock + * Enum @ref sl_btmesh_fw_dist_server_dist_status_t. Status code to use for + * the response. Must be one of the following: + * - 0: success - firmware entries deleted by the application + * - 1: out of resources + * - 3: internal error occurred + * + * All other status codes are reserved or automatically sent by the stack. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_delete_all_rsp(uint16_t elem_index, + uint16_t status); + +/***************************************************************************//** + * + * Response to the @ref sl_btmesh_evt_fw_dist_server_resume_req event. + * + * @param[in] elem_index Server model element index + * @param[in] status @parblock + * Enum @ref sl_btmesh_fw_dist_server_dist_status_t. Status code to use for + * the response. Must be one of the following: + * - 0: success - resume distribution + * - 1: out of resources + * - 3: internal error occurred + * + * All other status codes are reserved or automatically sent by the stack. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_server_resume_rsp(uint16_t elem_index, + uint16_t status); + +/** @} */ // end addtogroup sl_btmesh_fw_dist_server + +/** + * @addtogroup sl_btmesh_fw_dist_client Bluetooth Mesh Firmware Distribution Client Model + * @{ + * + * @brief Bluetooth Mesh Firmware Distribution Client Model + * + * The Bluetooth Mesh Firmware Distribution Client Model is used to transfer new + * firmware images to Bluetooth Mesh Firmware Distribution Server Model and + * monitor progress of a firmware update. As a transport layer Bluetooth Mesh + * BLOB Transfer (MBT) models are in use. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_fw_dist_client_init_id 0x00590028 +#define sl_btmesh_cmd_fw_dist_client_deinit_id 0x01590028 +#define sl_btmesh_cmd_fw_dist_client_setup_id 0x02590028 +#define sl_btmesh_cmd_fw_dist_client_setup_upload_id 0x03590028 +#define sl_btmesh_cmd_fw_dist_client_set_upload_metadata_id 0x04590028 +#define sl_btmesh_cmd_fw_dist_client_get_receivers_id 0x0e590028 +#define sl_btmesh_cmd_fw_dist_client_get_id 0x0d590028 +#define sl_btmesh_cmd_fw_dist_client_start_distribution_id 0x0f590028 +#define sl_btmesh_cmd_fw_dist_client_cancel_distribution_id 0x10590028 +#define sl_btmesh_cmd_fw_dist_client_apply_distribution_id 0x11590028 +#define sl_btmesh_cmd_fw_dist_client_suspend_distribution_id 0x12590028 +#define sl_btmesh_cmd_fw_dist_client_add_receivers_id 0x13590028 +#define sl_btmesh_cmd_fw_dist_client_delete_all_receivers_id 0x14590028 +#define sl_btmesh_cmd_fw_dist_client_get_capabilities_id 0x15590028 +#define sl_btmesh_cmd_fw_dist_client_get_upload_id 0x16590028 +#define sl_btmesh_cmd_fw_dist_client_start_upload_id 0x17590028 +#define sl_btmesh_cmd_fw_dist_client_cancel_upload_id 0x19590028 +#define sl_btmesh_cmd_fw_dist_client_get_fw_id 0x1a590028 +#define sl_btmesh_cmd_fw_dist_client_get_fw_by_index_id 0x1b590028 +#define sl_btmesh_cmd_fw_dist_client_delete_fw_id 0x1c590028 +#define sl_btmesh_cmd_fw_dist_client_delete_all_fw_id 0x1d590028 +#define sl_btmesh_cmd_fw_dist_client_prepare_oob_upload_id 0x1e590028 +#define sl_btmesh_cmd_fw_dist_client_start_oob_upload_id 0x1f590028 +#define sl_btmesh_cmd_fw_dist_client_suspend_upload_id 0x20590028 +#define sl_btmesh_cmd_fw_dist_client_resume_upload_id 0x21590028 +#define sl_btmesh_rsp_fw_dist_client_init_id 0x00590028 +#define sl_btmesh_rsp_fw_dist_client_deinit_id 0x01590028 +#define sl_btmesh_rsp_fw_dist_client_setup_id 0x02590028 +#define sl_btmesh_rsp_fw_dist_client_setup_upload_id 0x03590028 +#define sl_btmesh_rsp_fw_dist_client_set_upload_metadata_id 0x04590028 +#define sl_btmesh_rsp_fw_dist_client_get_receivers_id 0x0e590028 +#define sl_btmesh_rsp_fw_dist_client_get_id 0x0d590028 +#define sl_btmesh_rsp_fw_dist_client_start_distribution_id 0x0f590028 +#define sl_btmesh_rsp_fw_dist_client_cancel_distribution_id 0x10590028 +#define sl_btmesh_rsp_fw_dist_client_apply_distribution_id 0x11590028 +#define sl_btmesh_rsp_fw_dist_client_suspend_distribution_id 0x12590028 +#define sl_btmesh_rsp_fw_dist_client_add_receivers_id 0x13590028 +#define sl_btmesh_rsp_fw_dist_client_delete_all_receivers_id 0x14590028 +#define sl_btmesh_rsp_fw_dist_client_get_capabilities_id 0x15590028 +#define sl_btmesh_rsp_fw_dist_client_get_upload_id 0x16590028 +#define sl_btmesh_rsp_fw_dist_client_start_upload_id 0x17590028 +#define sl_btmesh_rsp_fw_dist_client_cancel_upload_id 0x19590028 +#define sl_btmesh_rsp_fw_dist_client_get_fw_id 0x1a590028 +#define sl_btmesh_rsp_fw_dist_client_get_fw_by_index_id 0x1b590028 +#define sl_btmesh_rsp_fw_dist_client_delete_fw_id 0x1c590028 +#define sl_btmesh_rsp_fw_dist_client_delete_all_fw_id 0x1d590028 +#define sl_btmesh_rsp_fw_dist_client_prepare_oob_upload_id 0x1e590028 +#define sl_btmesh_rsp_fw_dist_client_start_oob_upload_id 0x1f590028 +#define sl_btmesh_rsp_fw_dist_client_suspend_upload_id 0x20590028 +#define sl_btmesh_rsp_fw_dist_client_resume_upload_id 0x21590028 + +/** + * @brief The Upload Phase of the Firmware Distribution Server. + */ +typedef enum +{ + sl_btmesh_fw_dist_client_upload_phase_idle = 0x0, /**< (0x0) + No + Upload + in + progress. */ + sl_btmesh_fw_dist_client_upload_phase_transfer_in_progress = 0x1, /**< (0x1) + Upload + in + progress. */ + sl_btmesh_fw_dist_client_upload_phase_transfer_error = 0x2, /**< (0x2) + Upload + or + Upload + OOB + encountered + a + transfer + error. */ + sl_btmesh_fw_dist_client_upload_phase_transfer_completed = 0x3 /**< (0x3) + Upload + or + Upload + OOB + completed + successfully. */ +} sl_btmesh_fw_dist_client_upload_phase_t; + +/** + * @brief The Upload Type of an ongoing or finished upload. + */ +typedef enum +{ + sl_btmesh_fw_dist_client_dist_upload_type_in_band = 0x0, /**< (0x0) + In-band + upload via + BLOB + Transfer. */ + sl_btmesh_fw_dist_client_dist_upload_type_out_of_band = 0x1 /**< (0x1) + Out-of-band + upload. */ +} sl_btmesh_fw_dist_client_dist_upload_type_t; + +/** + * @brief Distribution Server OOB Support capability values. + */ +typedef enum +{ + sl_btmesh_fw_dist_client_dist_oob_not_supported = 0x0, /**< (0x0) Upload OOB + not supported. */ + sl_btmesh_fw_dist_client_dist_oob_supported = 0x1 /**< (0x1) Upload OOB + supported. */ +} sl_btmesh_fw_dist_client_dist_oob_t; + +/** + * @brief The Distribution Phase of the Firmware Distribution Server. + */ +typedef enum +{ + sl_btmesh_fw_dist_client_dist_phase_idle = 0x0, /**< (0x0) No firmware + distribution is in + progress. */ + sl_btmesh_fw_dist_client_dist_phase_active = 0x1, /**< (0x1) Firmware + distribution in + progress; sending + Update Start or + BLOB Transfer + messages. */ + sl_btmesh_fw_dist_client_dist_phase_transferred = 0x2, /**< (0x2) Firmware + distribution in + progress; BLOB + Transfer is + complete, waiting + for verification. + If the Update + Policy is Verify + Only, the + Distribution + Server will park + here until it + receives a + Distribution Apply + message from the + Distribution + Client. */ + sl_btmesh_fw_dist_client_dist_phase_applying = 0x3, /**< (0x3) Firmware + distribution in + progress; sending + Update Apply + messages. */ + sl_btmesh_fw_dist_client_dist_phase_completed = 0x4, /**< (0x4) Firmware + distribution + completed + successfully for + at least one + Updating Node. */ + sl_btmesh_fw_dist_client_dist_phase_failed = 0x5, /**< (0x5) Firmware + distribution + failed for all + Updating Nodes. */ + sl_btmesh_fw_dist_client_dist_phase_cancelling = 0x6, /**< (0x6) Cancelling + firmware + distribution. */ + sl_btmesh_fw_dist_client_dist_phase_suspended = 0x7 /**< (0x7) Firmware + distribution is + temporarily + suspended. */ +} sl_btmesh_fw_dist_client_dist_phase_t; + +/** + * @addtogroup sl_btmesh_evt_fw_dist_client_receivers_status sl_btmesh_evt_fw_dist_client_receivers_status + * @{ + * @brief Firmware Distribution Nodes Status + */ + +/** @brief Identifier of the receivers_status event */ +#define sl_btmesh_evt_fw_dist_client_receivers_status_id 0x035900a8 + +/***************************************************************************//** + * @brief Data structure of the receivers_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_client_receivers_status_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint8_t status; /**< Enum @ref + sl_btmesh_fw_dist_server_dist_status_t. Status + code returned */ + uint16_t nodes_list_size; /**< Number of entries currently in the node list */ +}); + +typedef struct sl_btmesh_evt_fw_dist_client_receivers_status_s sl_btmesh_evt_fw_dist_client_receivers_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_client_receivers_status + +/** + * @addtogroup sl_btmesh_evt_fw_dist_client_receivers_list sl_btmesh_evt_fw_dist_client_receivers_list + * @{ + * @brief Firmware Distribution Node List item + */ + +/** @brief Identifier of the receivers_list event */ +#define sl_btmesh_evt_fw_dist_client_receivers_list_id 0x045900a8 + +/***************************************************************************//** + * @brief Data structure of the receivers_list event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_client_receivers_list_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint16_t index; /**< Index of the entry reported */ + uint16_t nodes_list_size; /**< Number of entries currently in the node list */ + uint16_t address; /**< Address of the Update Server */ + uint8_t phase; /**< Enum @ref + sl_btmesh_fw_dist_server_dist_node_phase_t. + Phase of the Update Server */ + uint8_t update_status; /**< Last Update Status message received from the + Update Server */ + uint8_t transfer_status; /**< Last Transfer Status message received from the + BLOB Transfer Server */ + uint8_t progress; /**< 0-100, percentage of BLOB Transfer octets + delivered and confirmed */ + uint8_t fw_index; /**< Index of the firmware being updated */ +}); + +typedef struct sl_btmesh_evt_fw_dist_client_receivers_list_s sl_btmesh_evt_fw_dist_client_receivers_list_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_client_receivers_list + +/** + * @addtogroup sl_btmesh_evt_fw_dist_client_receivers_list_end sl_btmesh_evt_fw_dist_client_receivers_list_end + * @{ + * @brief Firmware Distribution Node List end + */ + +/** @brief Identifier of the receivers_list_end event */ +#define sl_btmesh_evt_fw_dist_client_receivers_list_end_id 0x055900a8 + +/***************************************************************************//** + * @brief Data structure of the receivers_list_end event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_client_receivers_list_end_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint16_t start_index; /**< Starting index */ + uint16_t num_reported; /**< Number of entries reported */ + uint16_t nodes_list_size; /**< Number of entries currently in the node list */ +}); + +typedef struct sl_btmesh_evt_fw_dist_client_receivers_list_end_s sl_btmesh_evt_fw_dist_client_receivers_list_end_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_client_receivers_list_end + +/** + * @addtogroup sl_btmesh_evt_fw_dist_client_capabilities_status sl_btmesh_evt_fw_dist_client_capabilities_status + * @{ + * @brief Firmware Distribution Capabilities Status + */ + +/** @brief Identifier of the capabilities_status event */ +#define sl_btmesh_evt_fw_dist_client_capabilities_status_id 0x065900a8 + +/***************************************************************************//** + * @brief Data structure of the capabilities_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_client_capabilities_status_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint16_t max_nodes_list_size; /**< Maximum number of entries the node + list can contain */ + uint16_t max_fw_list_size; /**< Maximum number of entries the Firmware + List can contain */ + uint32_t max_fw_size; /**< Maximum size of a single firmware + image */ + uint32_t max_upload_space; /**< Maximum number of bytes for firmware + images */ + uint32_t remaining_upload_space; /**< Remaining number of bytes for firmware + images */ + uint8_t oob_supported; /**< Enum @ref + sl_btmesh_fw_dist_client_dist_oob_t. + OOB firmware retrieval (using the + Update URI received from an Update + Server) supported */ + uint8array uri_scheme_names; /**< Supported URI scheme names. Empty if + OOB is not supported. */ +}); + +typedef struct sl_btmesh_evt_fw_dist_client_capabilities_status_s sl_btmesh_evt_fw_dist_client_capabilities_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_client_capabilities_status + +/** + * @addtogroup sl_btmesh_evt_fw_dist_client_distribution_status sl_btmesh_evt_fw_dist_client_distribution_status + * @{ + * @brief Firmware Distribution Status + */ + +/** @brief Identifier of the distribution_status event */ +#define sl_btmesh_evt_fw_dist_client_distribution_status_id 0x075900a8 + +/***************************************************************************//** + * @brief Data structure of the distribution_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_client_distribution_status_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint8_t status; /**< Enum @ref + sl_btmesh_fw_dist_server_dist_status_t. + Status code returned */ + uint8_t phase; /**< Enum @ref + sl_btmesh_fw_dist_client_dist_phase_t. Phase + of the Distribution Server */ + uint16_t group_address; /**< Distribution group address. Ignore if no + distribution is active. */ + uint16_t appkey_index; /**< Distribution app key index. Ignore if no + distribution is active. */ + uint8_t distributor_ttl; /**< TTL used by the Distributor. Ignore if no + distribution is active. */ + uint16_t timeout_base; /**< Timeout Base value used in BLOB Transfer */ + uint8_t transfer_mode; /**< Transfer Mode used in BLOB Transfer */ + uint8_t apply_immediately; /**< 1 if the Update Policy is Verify and Apply, + otherwise 0. Ignore if no distribution is + active. */ + uint16_t fw_list_index; /**< Index of the firmware in the Distributor's + Firmware List */ +}); + +typedef struct sl_btmesh_evt_fw_dist_client_distribution_status_s sl_btmesh_evt_fw_dist_client_distribution_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_client_distribution_status + +/** + * @addtogroup sl_btmesh_evt_fw_dist_client_upload_status sl_btmesh_evt_fw_dist_client_upload_status + * @{ + * @brief Firmware Distribution Upload Status + */ + +/** @brief Identifier of the upload_status event */ +#define sl_btmesh_evt_fw_dist_client_upload_status_id 0x085900a8 + +/***************************************************************************//** + * @brief Data structure of the upload_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_client_upload_status_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint8_t status; /**< Enum @ref + sl_btmesh_fw_dist_server_dist_status_t. Status + code returned */ + uint8_t phase; /**< Upload Phase of the Distribution Server */ + uint8_t type; /**< Enum @ref + sl_btmesh_fw_dist_client_dist_upload_type_t. + Upload Type of an upload (0:in-band + 1:out-of-band). Ignore if no upload is active. */ + uint8_t progress; /**< 0-100, percentage of BLOB Transfer octets or + out-of-band data delivered and confirmed. + Ignore if no upload is active. */ + uint8array fwid; /**< FWID of the firmware being transferred. Empty + if no upload is active. */ +}); + +typedef struct sl_btmesh_evt_fw_dist_client_upload_status_s sl_btmesh_evt_fw_dist_client_upload_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_client_upload_status + +/** + * @addtogroup sl_btmesh_evt_fw_dist_client_fw_status sl_btmesh_evt_fw_dist_client_fw_status + * @{ + * @brief Firmware Distribution Firmware Status + */ + +/** @brief Identifier of the fw_status event */ +#define sl_btmesh_evt_fw_dist_client_fw_status_id 0x095900a8 + +/***************************************************************************//** + * @brief Data structure of the fw_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_client_fw_status_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint8_t status; /**< Enum @ref + sl_btmesh_fw_dist_server_dist_status_t. Status + code returned */ + uint16_t num_entries; /**< Number of images stored on the Distributor */ + uint16_t index; /**< Index of the queried firmware on the server. + 0xffff if not found. */ + uint8array fwid; /**< FWID of the firmware that was queried. Empty + if get_by_index was used and no such index + exists. */ +}); + +typedef struct sl_btmesh_evt_fw_dist_client_fw_status_s sl_btmesh_evt_fw_dist_client_fw_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_client_fw_status + +/** + * @addtogroup sl_btmesh_evt_fw_dist_client_upload_complete sl_btmesh_evt_fw_dist_client_upload_complete + * @{ + * @brief Firmware Distribution Upload procedure was completed successfully + */ + +/** @brief Identifier of the upload_complete event */ +#define sl_btmesh_evt_fw_dist_client_upload_complete_id 0x0a5900a8 + +/***************************************************************************//** + * @brief Data structure of the upload_complete event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_client_upload_complete_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + sl_bt_uuid_64_t blob_id; /**< The ID of the BLOB. */ + uint32_t blob_size; /**< The size of the BLOB. */ + uint8array fwid; /**< FWID of the firmware that was uploaded. */ +}); + +typedef struct sl_btmesh_evt_fw_dist_client_upload_complete_s sl_btmesh_evt_fw_dist_client_upload_complete_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_client_upload_complete + +/** + * @addtogroup sl_btmesh_evt_fw_dist_client_upload_failed sl_btmesh_evt_fw_dist_client_upload_failed + * @{ + * @brief Firmware Distribution Upload procedure failed + */ + +/** @brief Identifier of the upload_failed event */ +#define sl_btmesh_evt_fw_dist_client_upload_failed_id 0x0b5900a8 + +/***************************************************************************//** + * @brief Data structure of the upload_failed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_dist_client_upload_failed_s +{ + uint16_t elem_index; /**< Client model element index */ + uint16_t server_address; /**< Unicast address of the server */ + uint8_t status_code; /**< Reason for failure: BLOB Transfer + status code, or 0xff for timeout, 0 if + a DFU layer error happened (failure + result in dist_status_code) */ + uint8_t dist_status_code; /**< Reason for failure: Distribution status + code, or 0xff for timeout, 0 if a MBT + layer error happened (failure result in + status_code) */ + uint8_t progress; /**< 0-100, percentage of BLOB Transfer + octets data delivered and confirmed. */ + sl_bt_uuid_64_t blob_id; /**< The ID of the BLOB. */ + uint32_t blob_size; /**< The size of the BLOB. */ + uint8array fwid; /**< FWID of the firmware which uploading + failed. */ +}); + +typedef struct sl_btmesh_evt_fw_dist_client_upload_failed_s sl_btmesh_evt_fw_dist_client_upload_failed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_dist_client_upload_failed + +/***************************************************************************//** + * + * Initialize the Firmware Distribution Client model. An MBT Client on the same + * element must have been initialized prior to making this call. + * + * @param[in] elem_index Client model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_init(uint16_t elem_index); + +/***************************************************************************//** + * + * Deinitialize the Firmware Distribution Client model. The corresponding MBT + * Client instance can be deinitialized before or after the Distribution Client. + * + * @param[in] elem_index Client model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Set up the communication parameters for a Distribution Client instance. + * + * @param[in] elem_index Client model element index + * @param[in] appkey_index Application key index + * @param[in] ttl The time-to-live value to use. Valid values: 0, range:[2-127] + * and 255. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_setup(uint16_t elem_index, + uint16_t appkey_index, + uint8_t ttl); + +/***************************************************************************//** + * + * Set up an in-band Upload of a firmware image. Note that only one upload can + * be executed at a time. This command must be used before setting the upload + * image metadata via @ref sl_btmesh_fw_dist_client_set_upload_metadata. + * + * @param[in] elem_index Client model element index + * @param[in] server_address Address of the target Distributor + * @param[in] ttl The time-to-live value to use for the upload. Valid values: 0, + * range:[2-127] and 255. + * @param[in] timeout_base Timeout Base value for the BLOB Transfer + * @param[in] blob_id BLOB ID to use + * @param[in] size Size of the firmware image + * @param[in] fwid_len Length of data in @p fwid + * @param[in] fwid Firmware ID of the firmware image + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_setup_upload(uint16_t elem_index, + uint16_t server_address, + uint8_t ttl, + uint16_t timeout_base, + sl_bt_uuid_64_t blob_id, + uint32_t size, + size_t fwid_len, + const uint8_t* fwid); + +/***************************************************************************//** + * + * Set the metadata for an in-band Upload of a firmware image. + * + * @param[in] elem_index Client model element index + * @param[in] metadata_len Length of data in @p metadata + * @param[in] metadata Variable length byte array. The first byte defines the + * length of data that follows, 0 - 255 bytes. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_set_upload_metadata(uint16_t elem_index, + size_t metadata_len, + const uint8_t* metadata); + +/***************************************************************************//** + * + * Send a Receivers Get message. This function is used to get a slice of the + * Receivers List on the Distribution Server. The response is a Receivers List + * message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * @param[in] start_index Starting index of node statuses to request + * @param[in] max_entries Maximum number of node statuses to request + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_receivers_list + * - @ref sl_btmesh_evt_fw_dist_client_receivers_list_end + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_get_receivers(uint16_t elem_index, + uint16_t dst, + uint16_t start_index, + uint16_t max_entries); + +/***************************************************************************//** + * + * Send a Distribution Get message. This function is used to determine the + * parameters of an ongoing distribution, if any. The response is a Distribution + * Status message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_distribution_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_get(uint16_t elem_index, uint16_t dst); + +/***************************************************************************//** + * + * Send a Distribution Start message. This function is used to start a new + * distribution process. The Receivers List must have been populated via @ref + * sl_btmesh_fw_dist_client_add_receivers, and the firmware image must have been + * uploaded to the Distribution Server. The response is a Distribution Status + * message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * @param[in] dist_appkey_index Application key to use for the communication + * between the Distributor and Updating Nodes + * @param[in] dist_ttl The time-to-live value for the Distributor to use when + * communicating with the Updating Nodes. Valid values: 0, range:[2-127] and + * 255 + * @param[in] dist_timeout_base The Timeout Base value to use in the firmware + * image BLOB Transfer + * @param[in] transfer_mode 1 = use Push Mode, 2 = use Pull Mode (typically for + * LPNs) + * @param[in] update_policy Enum @ref sl_btmesh_fw_dist_server_dfu_policy_t. 0 = + * Verify Only (Initiator sends Distribution Apply to Distributor to apply the + * update), 1 = Verify and Apply (Distributor applies update automatically) + * @param[in] fw_list_index Index of the firmware image in the Distributor's + * Firmware List + * @param[in] group_address Group address to use. Zero to only use unicast. + * @param[in] virtual_address If the group address is a VA hash, this needs to + * contain the full virtual address label UUID. Otherwise, the value of this + * field will be ignored. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_distribution_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_start_distribution(uint16_t elem_index, + uint16_t dst, + uint8_t dist_appkey_index, + uint8_t dist_ttl, + uint16_t dist_timeout_base, + uint8_t transfer_mode, + uint8_t update_policy, + uint16_t fw_list_index, + uint16_t group_address, + uuid_128 virtual_address); + +/***************************************************************************//** + * + * Send a Distribution Cancel message. This function is used to cancel a + * distribution process. The response is a Distribution Status message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_distribution_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_cancel_distribution(uint16_t elem_index, + uint16_t dst); + +/***************************************************************************//** + * + * Send a Distribution Apply message. This function is used to trigger applying + * the firmware update on the Updating Nodes. This should only be used if the + * Update Policy of the distribution is Verify Only. The response is a + * Distribution Status message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_distribution_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_apply_distribution(uint16_t elem_index, + uint16_t dst); + +/***************************************************************************//** + * + * Send a Distribution Suspend message. This function is used to suspend a + * distribution when the BLOB Transfer is still in progress. It cannot be used + * after the image has already been fully transferred. The response is a + * Distribution Status message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_distribution_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_suspend_distribution(uint16_t elem_index, + uint16_t dst); + +/***************************************************************************//** + * + * Send a Receivers Add message. This function is used to add Updating Nodes to + * the Distribution Server's Receivers List. The response is a Receivers Status + * message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * @param[in] nodes_len Length of data in @p nodes + * @param[in] nodes List of (address [uint16], fw_index [uint8]) pairs. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_receivers_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_add_receivers(uint16_t elem_index, + uint16_t dst, + size_t nodes_len, + const uint8_t* nodes); + +/***************************************************************************//** + * + * Send a Receivers Delete All message. This function is used to clear the + * Receivers List on the Distribution Server. The response is a Receivers Status + * message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_receivers_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_delete_all_receivers(uint16_t elem_index, + uint16_t dst); + +/***************************************************************************//** + * + * Send a Capabilities Get message. This function is used to determine the + * Distribution Capabilities of a Distribution Server. The response is a + * Capabilities Status message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_capabilities_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_get_capabilities(uint16_t elem_index, + uint16_t dst); + +/***************************************************************************//** + * + * Send an Upload Get message. This function is used to check if an upload is + * ongoing, and what its progress is. The response is an Upload Status message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_upload_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_get_upload(uint16_t elem_index, + uint16_t dst); + +/***************************************************************************//** + * + * Start an upload previously set up with @ref + * sl_btmesh_fw_dist_client_setup_upload. Calling this function will send an + * Upload Start message. The response is an Upload Status message. Note that if + * the remote end does not respond, this function may need to be retried. Note + * that upon sending the Upload Start message a response timer is started for a + * time frame of: (10000 * (timeout_base + 2)) + (100 * ttl) in units of ms. + * + * @param[in] elem_index Client model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_upload_status + * - @ref sl_btmesh_evt_fw_dist_client_upload_failed + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_start_upload(uint16_t elem_index); + +/***************************************************************************//** + * + * Cancel an upload previously started with @ref + * sl_btmesh_fw_dist_client_start_upload. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_upload_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_cancel_upload(uint16_t elem_index, + uint16_t dst); + +/***************************************************************************//** + * + * Send a Firmware Get message. This function is used to check if a firmware + * image with the given FWID exists on the Distribution Server, and if it does, + * to retrieve its Firmware List Index. The response is a Firmware Status + * message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * @param[in] fwid_len Length of data in @p fwid + * @param[in] fwid Firmware ID of the firmware image + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_fw_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_get_fw(uint16_t elem_index, + uint16_t dst, + size_t fwid_len, + const uint8_t* fwid); + +/***************************************************************************//** + * + * Send a Firmware Get By Index message. This function is used to check if a + * firmware with a particular index exists on the Distribution Server, and if it + * does, to retrieve its FWID. The response is a Firmware Status message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * @param[in] index Index to check + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_fw_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_get_fw_by_index(uint16_t elem_index, + uint16_t dst, + uint16_t index); + +/***************************************************************************//** + * + * Send a Firmware Delete message. This function is used to delete a particular + * firmware on the Distribution Server. The response is a Firmware Status + * message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * @param[in] fwid_len Length of data in @p fwid + * @param[in] fwid Firmware ID of the firmware image + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_fw_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_delete_fw(uint16_t elem_index, + uint16_t dst, + size_t fwid_len, + const uint8_t* fwid); + +/***************************************************************************//** + * + * Send a Firmware Delete All message. This function is used to delete all + * firmware images on the Distribution Server. The response is a Firmware Status + * message. + * + * @param[in] elem_index Client model element index + * @param[in] dst Address of the Distributor + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_fw_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_delete_all_fw(uint16_t elem_index, + uint16_t dst); + +/***************************************************************************//** + * + * Prepare an OOB Upload. This must be called before calling the @ref + * sl_btmesh_fw_dist_client_start_oob_upload command. Calling this multiple + * times will overwrite the state of the previous OOB Upload. + * + * @param[in] elem_index Client model element index + * @param[in] fwid_len Length of data in @p fwid + * @param[in] fwid FWID used to form the query string for the Distribution + * Server's Check Firmware OOB and Store Firmware OOB procedures. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_prepare_oob_upload(uint16_t elem_index, + size_t fwid_len, + const uint8_t* fwid); + +/***************************************************************************//** + * + * Start an OOB Upload. The response is an @ref + * sl_btmesh_evt_fw_dist_client_upload_status event. This command must be + * repeated by the application if the remote end does not respond. If the + * event's status field is zero, the request was accepted; otherwise it was + * rejected. If the event indicates that the request was accepted, the type + * field will be set to 1 to denote an out-of-band upload. + * + * @ref sl_btmesh_fw_dist_client_prepare_oob_upload must have been called prior + * to using this command. + * + * To poll the status of the OOB Upload, the application can either repeat this + * command, or use the command @ref sl_btmesh_fw_dist_client_get_upload. + * + * When a @ref sl_btmesh_evt_fw_dist_client_upload_status event with type set to + * 1 and progress set to 100 is received, the application can consider the + * upload complete. + * + * @param[in] elem_index Client model element index + * @param[in] dst Destination address + * @param[in] appkey_index Application key index to use for encrypting the + * message. + * @param[in] ttl The time-to-live value to use. Valid values: 0, range:[2-127] + * and 255. + * @param[in] uri_len Length of data in @p uri + * @param[in] uri URI used to form the query string for the Distribution + * Server's Check Firmware OOB and Store Firmware OOB procedures. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_dist_client_upload_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_start_oob_upload(uint16_t elem_index, + uint16_t dst, + uint16_t appkey_index, + uint8_t ttl, + size_t uri_len, + const uint8_t* uri); + +/***************************************************************************//** + * + * Suspend an Upload's BLOB Transfer. An Upload that isn't yet in the BLOB + * Transfer phase, or which has failed, cannot be suspended. The suspension is + * entirely local; there is no message sent over the air. The remote receiver's + * BLOB Transfer Server will go to the suspended phase when the Upload Timeout + * timer expires. When the Upload is resumed, it will continue from where it + * previously left off. + * + * @param[in] elem_index Client model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_suspend_upload(uint16_t elem_index); + +/***************************************************************************//** + * + * Resume a suspended upload. The command @ref + * sl_btmesh_fw_dist_client_start_upload must be used after this command, and it + * may need to be repeated if the remote end does not respond. When the Upload + * is resumed, the BLOB Transfer will continue from where it previously left + * off. + * + * @param[in] elem_index Client model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_dist_client_resume_upload(uint16_t elem_index); + +/** @} */ // end addtogroup sl_btmesh_fw_dist_client + +/** + * @addtogroup sl_btmesh_remote_provisioning_client Bluetooth Mesh Remote Provisioning Client Model + * @{ + * + * @brief Bluetooth Mesh Remote Provisioning Client Model + * + * Remote Provisioning Client model is used to provision devices which are not + * within one hop from the provisioner. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_remote_provisioning_client_init_id 0x00300028 +#define sl_btmesh_cmd_remote_provisioning_client_get_scan_capabilities_id 0x01300028 +#define sl_btmesh_cmd_remote_provisioning_client_start_scan_id 0x02300028 +#define sl_btmesh_cmd_remote_provisioning_client_get_scan_status_id 0x03300028 +#define sl_btmesh_cmd_remote_provisioning_client_stop_scan_id 0x04300028 +#define sl_btmesh_cmd_remote_provisioning_client_start_extended_scan_id 0x05300028 +#define sl_btmesh_cmd_remote_provisioning_client_open_link_id 0x06300028 +#define sl_btmesh_cmd_remote_provisioning_client_get_link_status_id 0x07300028 +#define sl_btmesh_cmd_remote_provisioning_client_close_link_id 0x08300028 +#define sl_btmesh_rsp_remote_provisioning_client_init_id 0x00300028 +#define sl_btmesh_rsp_remote_provisioning_client_get_scan_capabilities_id 0x01300028 +#define sl_btmesh_rsp_remote_provisioning_client_start_scan_id 0x02300028 +#define sl_btmesh_rsp_remote_provisioning_client_get_scan_status_id 0x03300028 +#define sl_btmesh_rsp_remote_provisioning_client_stop_scan_id 0x04300028 +#define sl_btmesh_rsp_remote_provisioning_client_start_extended_scan_id 0x05300028 +#define sl_btmesh_rsp_remote_provisioning_client_open_link_id 0x06300028 +#define sl_btmesh_rsp_remote_provisioning_client_get_link_status_id 0x07300028 +#define sl_btmesh_rsp_remote_provisioning_client_close_link_id 0x08300028 + +/** + * @brief Possible remote provisioning link states. + */ +typedef enum +{ + sl_btmesh_remote_provisioning_client_link_state_idle = 0x0, /**< + (0x0) + Idle + state */ + sl_btmesh_remote_provisioning_client_link_state_opening = 0x1, /**< + (0x1) + Link + Opening */ + sl_btmesh_remote_provisioning_client_link_state_active = 0x2, /**< + (0x2) + Link + active */ + sl_btmesh_remote_provisioning_client_link_state_outbound_packet_transfer = 0x3, /**< + (0x3) + Outbound + packet + transfer */ + sl_btmesh_remote_provisioning_client_link_state_closing = 0x4 /**< + (0x4) + Link + Closing */ +} sl_btmesh_remote_provisioning_client_link_state_t; + +/** + * @addtogroup sl_btmesh_evt_remote_provisioning_client_scan_capabilities sl_btmesh_evt_remote_provisioning_client_scan_capabilities + * @{ + * @brief Scan capabilities of the remote provisioning server. + */ + +/** @brief Identifier of the scan_capabilities event */ +#define sl_btmesh_evt_remote_provisioning_client_scan_capabilities_id 0x003000a8 + +/***************************************************************************//** + * @brief Data structure of the scan_capabilities event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_remote_provisioning_client_scan_capabilities_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint16_t server; /**< Server address. */ + uint8_t max_items; /**< The maximum number of UUIDs that can be reported + during scanning. */ + uint8_t active; /**< Indication if active scan is supported. */ +}); + +typedef struct sl_btmesh_evt_remote_provisioning_client_scan_capabilities_s sl_btmesh_evt_remote_provisioning_client_scan_capabilities_t; + +/** @} */ // end addtogroup sl_btmesh_evt_remote_provisioning_client_scan_capabilities + +/** + * @addtogroup sl_btmesh_evt_remote_provisioning_client_scan_status sl_btmesh_evt_remote_provisioning_client_scan_status + * @{ + * @brief The Remote Provisioning Scan Status. + */ + +/** @brief Identifier of the scan_status event */ +#define sl_btmesh_evt_remote_provisioning_client_scan_status_id 0x013000a8 + +/***************************************************************************//** + * @brief Data structure of the scan_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_remote_provisioning_client_scan_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint16_t server; /**< Server address. */ + uint8_t status; /**< Enum @ref + sl_btmesh_remote_provisioning_server_status_t. + server status. */ + uint8_t state; /**< Enum @ref + sl_btmesh_remote_provisioning_server_scan_state_t. + Scan state. */ + uint8_t max_reports; /**< Maximum number of scanned items to be reported. */ + uint8_t timeout_sec; /**< Maximum available time for time left until the end + of the Remote Provisioning Scan procedure. */ +}); + +typedef struct sl_btmesh_evt_remote_provisioning_client_scan_status_s sl_btmesh_evt_remote_provisioning_client_scan_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_remote_provisioning_client_scan_status + +/** + * @addtogroup sl_btmesh_evt_remote_provisioning_client_scan_report sl_btmesh_evt_remote_provisioning_client_scan_report + * @{ + * @brief The Remote Provisioning Scan Report + */ + +/** @brief Identifier of the scan_report event */ +#define sl_btmesh_evt_remote_provisioning_client_scan_report_id 0x023000a8 + +/***************************************************************************//** + * @brief Data structure of the scan_report event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_remote_provisioning_client_scan_report_s +{ + uint16_t server; /**< Server address. */ + int8_t rssi; /**< measured signal stength in dBm. */ + uuid_128 uuid; /**< UUID of the unprovisioned device found */ + uint16_t oob; /**< OOB information. */ + uint32_t uri; /**< Hash of the out-of-band URI, which is received in a separate event . If the + URI bit (bit 1) is not set in the OOB capabilities + bitfield, this field is ignored. */ +}); + +typedef struct sl_btmesh_evt_remote_provisioning_client_scan_report_s sl_btmesh_evt_remote_provisioning_client_scan_report_t; + +/** @} */ // end addtogroup sl_btmesh_evt_remote_provisioning_client_scan_report + +/** + * @addtogroup sl_btmesh_evt_remote_provisioning_client_extended_scan_report sl_btmesh_evt_remote_provisioning_client_extended_scan_report + * @{ + * @brief Remote Provisioning Server report of the advertising data requested by + * the client. + */ + +/** @brief Identifier of the extended_scan_report event */ +#define sl_btmesh_evt_remote_provisioning_client_extended_scan_report_id 0x033000a8 + +/***************************************************************************//** + * @brief Data structure of the extended_scan_report event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_remote_provisioning_client_extended_scan_report_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code + otherwise. */ + uint16_t server; /**< Server address. */ + uint8_t status; /**< Enum @ref + sl_btmesh_remote_provisioning_server_status_t. + server status. */ + uuid_128 uuid; /**< UUID of the unprovisioned device found */ + uint16_t oob; /**< OOB information. 0 if not present */ + uint8array ad_structures; /**< Concatenated list of AD Structures that match + the AD Types requested by the client. */ +}); + +typedef struct sl_btmesh_evt_remote_provisioning_client_extended_scan_report_s sl_btmesh_evt_remote_provisioning_client_extended_scan_report_t; + +/** @} */ // end addtogroup sl_btmesh_evt_remote_provisioning_client_extended_scan_report + +/** + * @addtogroup sl_btmesh_evt_remote_provisioning_client_link_status sl_btmesh_evt_remote_provisioning_client_link_status + * @{ + * @brief Remote Provisioning link Status. + */ + +/** @brief Identifier of the link_status event */ +#define sl_btmesh_evt_remote_provisioning_client_link_status_id 0x053000a8 + +/***************************************************************************//** + * @brief Data structure of the link_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_remote_provisioning_client_link_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint16_t server; /**< Server address. */ + uint8_t status; /**< Enum @ref sl_btmesh_remote_provisioning_server_status_t. + server status. */ + uint8_t state; /**< Enum @ref + sl_btmesh_remote_provisioning_client_link_state_t. link + state. */ +}); + +typedef struct sl_btmesh_evt_remote_provisioning_client_link_status_s sl_btmesh_evt_remote_provisioning_client_link_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_remote_provisioning_client_link_status + +/** + * @addtogroup sl_btmesh_evt_remote_provisioning_client_link_report sl_btmesh_evt_remote_provisioning_client_link_report + * @{ + * @brief Remote Provisioning link report + * + * Used by the Remote Provisioning Server to report the state change of a + * provisioning bearer link or the Node Provisioning Protocol Interface. + */ + +/** @brief Identifier of the link_report event */ +#define sl_btmesh_evt_remote_provisioning_client_link_report_id 0x063000a8 + +/***************************************************************************//** + * @brief Data structure of the link_report event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_remote_provisioning_client_link_report_s +{ + uint16_t server; /**< Server address. */ + uint8_t status; /**< Enum @ref sl_btmesh_remote_provisioning_server_status_t. + server status. */ + uint8_t state; /**< Enum @ref + sl_btmesh_remote_provisioning_client_link_state_t. link + state. */ + uint8_t reason; /**< 0: success, 1: procedure timeout 2:procedure failed, + 0xff not available. */ +}); + +typedef struct sl_btmesh_evt_remote_provisioning_client_link_report_s sl_btmesh_evt_remote_provisioning_client_link_report_t; + +/** @} */ // end addtogroup sl_btmesh_evt_remote_provisioning_client_link_report + +/***************************************************************************//** + * + * Initialize the remote provisioning client. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_client_init(); + +/***************************************************************************//** + * + * Get the value of the Remote Provisioning Scan Capabilities state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server Server address. + * @param[in] elem_index Client element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_remote_provisioning_client_scan_capabilities + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_client_get_scan_capabilities(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index); + +/***************************************************************************//** + * + * Start scanning for remote unprovisioned devices, within immediate radio range + * of the Remote Provisioning Server. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server Server address + * @param[in] elem_index Client element index + * @param[in] item_limit Maximum number of scanned items to be reported. + * @param[in] timeout_sec Time limit for a scan (in seconds). Valid value range: + * [1 - 255]. + * @param[in] single_scan Whether to perform single UUID scan or multiple target + * scan. + * @param[in] uuid UUID of the device to scan. Valid only for single UUID scan + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_remote_provisioning_client_scan_status + * - @ref sl_btmesh_evt_remote_provisioning_client_scan_report + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_client_start_scan(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index, + uint8_t item_limit, + uint8_t timeout_sec, + uint8_t single_scan, + uuid_128 uuid); + +/***************************************************************************//** + * + * Request scan status. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server Server address. + * @param[in] elem_index Client element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_remote_provisioning_client_scan_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_client_get_scan_status(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index); + +/***************************************************************************//** + * + * Stop Remote Provisioning Scan procedure. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server Server address. + * @param[in] elem_index Client element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_remote_provisioning_client_scan_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_client_stop_scan(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index); + +/***************************************************************************//** + * + * Request additional information about a specific unprovisioned device or about + * the Remote Provisioning Server itself. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server Server address. + * @param[in] elem_index Client element index + * @param[in] timeout_sec Time limit for a scan (in seconds). Used only if + * selected mode is 1 and then valid value range: [1 - 5]. + * @param[in] mode If 1 request additional information about a specific + * unprovisioned device. If 0 request additional information about the Remote + * Provisioning Server itself. + * @param[in] uuid If mode is 1 identifies the Device UUID of the unprovisioned + * device for which additional information is requested. + * @param[in] ad_types_len Length of data in @p ad_types + * @param[in] ad_types list AD_types to be reported. List maximun size being 16. + * See + * https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile/. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_remote_provisioning_client_extended_scan_report + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_client_start_extended_scan(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index, + uint8_t timeout_sec, + uint8_t mode, + uuid_128 uuid, + size_t ad_types_len, + const uint8_t* ad_types); + +/***************************************************************************//** + * + * Establish the provisioning bearer between a node supporting the Remote + * Provisioning Server model and an unprovisioned device, or to open the Node + * Provisioning Protocol Interface. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server Server address. + * @param[in] elem_index Client element index + * @param[in] timeout_sec Time limit for a scan (in seconds). + * @param[in] dkri The Device Key Refresh Interface. + * @param[in] uuid UUID of the device to provision. Valid if dkri is not 0xff + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_remote_provisioning_client_link_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_client_open_link(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index, + uint8_t timeout_sec, + uint8_t dkri, + uuid_128 uuid); + +/***************************************************************************//** + * + * Get the Remote Provisioning Link state of a Remote Provisioning Server model. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server Server address. + * @param[in] elem_index Client element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_remote_provisioning_client_link_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_client_get_link_status(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index); + +/***************************************************************************//** + * + * Close remote provisioning link. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server Server address. + * @param[in] elem_index Client element index + * @param[in] reason 0: success, 2:procedure failed, other not allowed. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_remote_provisioning_client_link_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_client_close_link(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index, + uint8_t reason); + +/** @} */ // end addtogroup sl_btmesh_remote_provisioning_client + +/** + * @addtogroup sl_btmesh_remote_provisioning_server Bluetooth Mesh Remote Provisioning Server Model + * @{ + * + * @brief Bluetooth Mesh Remote Provisioning Server Model + * + * Remote Provisioning Server model provides tunneling of the provisioning + * commands for the provisioning process. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_remote_provisioning_server_init_id 0x00310028 +#define sl_btmesh_cmd_remote_provisioning_server_open_link_id 0x01310028 +#define sl_btmesh_cmd_remote_provisioning_server_set_default_bearer_id 0x02310028 +#define sl_btmesh_rsp_remote_provisioning_server_init_id 0x00310028 +#define sl_btmesh_rsp_remote_provisioning_server_open_link_id 0x01310028 +#define sl_btmesh_rsp_remote_provisioning_server_set_default_bearer_id 0x02310028 + +/** + * @brief Remote provisionin scan states + */ +typedef enum +{ + sl_btmesh_remote_provisioning_server_idle = 0x0, /**< (0x0) Idle state */ + sl_btmesh_remote_provisioning_server_multiple = 0x1, /**< (0x1) Multiple + Devices Scan */ + sl_btmesh_remote_provisioning_server_single = 0x2 /**< (0x2) Single Device + Scan */ +} sl_btmesh_remote_provisioning_server_scan_state_t; + +/** + * @brief Remote provisionnin server status + */ +typedef enum +{ + sl_btmesh_remote_provisioning_server_success = 0x0, /**< + (0x0) + Success */ + sl_btmesh_remote_provisioning_server_scan_cannot_Start = 0x1, /**< + (0x1) + Scanning + Cannot + Start */ + sl_btmesh_remote_provisioning_server_invalid_state = 0x2, /**< + (0x2) + Invalid + State */ + sl_btmesh_remote_provisioning_server_limited_resources = 0x3, /**< + (0x3) + Limited + Resources */ + sl_btmesh_remote_provisioning_server_link_cannot_open = 0x4, /**< + (0x4) + Link + Cannot + Open */ + sl_btmesh_remote_provisioning_server_link_open_failed = 0x5, /**< + (0x5) + Link + open + failed */ + sl_btmesh_remote_provisioning_server_link_closed_by_device = 0x6, /**< + (0x6) + Link + Closed + by + Device */ + sl_btmesh_remote_provisioning_server_link_closed_by_server = 0x7, /**< + (0x7) + Link + closed + by + server */ + sl_btmesh_remote_provisioning_server_link_closed_by_client = 0x8, /**< + (0x8) + Link + closed + by + client */ + sl_btmesh_remote_provisioning_server_link_closed_as_cannot_receive_pdu = 0x9, /**< + (0x9) + Link + closed + as + cannot + receive + PDU */ + sl_btmesh_remote_provisioning_server_link_closed_as_cannot_send_pdu = 0xa, /**< + (0xa) + Link + closed + as + cannot + send + PDU */ + sl_btmesh_remote_provisioning_server_link_closed_as_cannot_deliver_pdu_report = 0xb /**< + (0xb) + Link + closed + as + cannot + deliver + PDU + report */ +} sl_btmesh_remote_provisioning_server_status_t; + +/** + * @addtogroup sl_btmesh_evt_remote_provisioning_server_link_open_request sl_btmesh_evt_remote_provisioning_server_link_open_request + * @{ + * @brief This event indicates that server has received link-open request and + * stack needs an LE-Connection + * + * This should be provided by the @ref + * sl_btmesh_remote_provisioning_server_open_link command. + */ + +/** @brief Identifier of the link_open_request event */ +#define sl_btmesh_evt_remote_provisioning_server_link_open_request_id 0x003100a8 + +/***************************************************************************//** + * @brief Data structure of the link_open_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_remote_provisioning_server_link_open_request_s +{ + bd_addr address; /**< Address of the device to connect to */ + uint8_t address_type; /**< Provisinee device address type. Values: + - 0: Public address + - 1: Random address */ +}); + +typedef struct sl_btmesh_evt_remote_provisioning_server_link_open_request_s sl_btmesh_evt_remote_provisioning_server_link_open_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_remote_provisioning_server_link_open_request + +/** + * @addtogroup sl_btmesh_evt_remote_provisioning_server_link_close_request sl_btmesh_evt_remote_provisioning_server_link_close_request + * @{ + * @brief Request to close LE-Connection + */ + +/** @brief Identifier of the link_close_request event */ +#define sl_btmesh_evt_remote_provisioning_server_link_close_request_id 0x013100a8 + +/***************************************************************************//** + * @brief Data structure of the link_close_request event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_remote_provisioning_server_link_close_request_s +{ + uint8_t connection; /**< Handle that was assigned to the remote provisioning + and can now be closed */ +}); + +typedef struct sl_btmesh_evt_remote_provisioning_server_link_close_request_s sl_btmesh_evt_remote_provisioning_server_link_close_request_t; + +/** @} */ // end addtogroup sl_btmesh_evt_remote_provisioning_server_link_close_request + +/***************************************************************************//** + * + * Initialize the remote provisioning server. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_server_init(); + +/***************************************************************************//** + * + * This command is used to pass connction handle to the remote provisioning + * server after having received @ref + * sl_btmesh_evt_remote_provisioning_server_link_open_request event. + * + * @param[in] connection Handle that was assigned to the connection + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_server_open_link(uint8_t connection); + +/***************************************************************************//** + * + * Set default bearer to be used in remote provisioning. + * + * @param[in] bearer Default bearer for provisioning. + * - 1 PB-ADV + * - 2 PB-GATT + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * + * + ******************************************************************************/ +sl_status_t sl_btmesh_remote_provisioning_server_set_default_bearer(uint8_t bearer); + +/** @} */ // end addtogroup sl_btmesh_remote_provisioning_server + +/** + * @addtogroup sl_btmesh_fw_standalone_updater Bluetooth Mesh Standalone Updater + * @{ + * + * @brief Bluetooth Mesh Standalone Updater + * + * The Standalone Updater combines the functionality of a local Distribution + * Server and an external Distribution Client. It uses an Update Client and MBT + * Client model internally to distribute firmware images to Updating Nodes. + * + * The Standalone Updater is not a model per se. It achieves the same + * functionality as a Distribution Client controlling a Distribution Server via + * the local loopback interface, but without the ovearhead of any message + * handling. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_fw_standalone_updater_init_id 0x005a0028 +#define sl_btmesh_cmd_fw_standalone_updater_deinit_id 0x015a0028 +#define sl_btmesh_cmd_fw_standalone_updater_setup_id 0x025a0028 +#define sl_btmesh_cmd_fw_standalone_updater_set_metadata_id 0x035a0028 +#define sl_btmesh_cmd_fw_standalone_updater_set_multicast_threshold_id 0x045a0028 +#define sl_btmesh_cmd_fw_standalone_updater_add_receiver_id 0x055a0028 +#define sl_btmesh_cmd_fw_standalone_updater_delete_all_receivers_id 0x065a0028 +#define sl_btmesh_cmd_fw_standalone_updater_start_id 0x075a0028 +#define sl_btmesh_cmd_fw_standalone_updater_execute_distribution_step_id 0x085a0028 +#define sl_btmesh_cmd_fw_standalone_updater_apply_id 0x095a0028 +#define sl_btmesh_cmd_fw_standalone_updater_get_state_id 0x0a5a0028 +#define sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_index_id 0x0b5a0028 +#define sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_address_id 0x0c5a0028 +#define sl_btmesh_cmd_fw_standalone_updater_cancel_id 0x0d5a0028 +#define sl_btmesh_rsp_fw_standalone_updater_init_id 0x005a0028 +#define sl_btmesh_rsp_fw_standalone_updater_deinit_id 0x015a0028 +#define sl_btmesh_rsp_fw_standalone_updater_setup_id 0x025a0028 +#define sl_btmesh_rsp_fw_standalone_updater_set_metadata_id 0x035a0028 +#define sl_btmesh_rsp_fw_standalone_updater_set_multicast_threshold_id 0x045a0028 +#define sl_btmesh_rsp_fw_standalone_updater_add_receiver_id 0x055a0028 +#define sl_btmesh_rsp_fw_standalone_updater_delete_all_receivers_id 0x065a0028 +#define sl_btmesh_rsp_fw_standalone_updater_start_id 0x075a0028 +#define sl_btmesh_rsp_fw_standalone_updater_execute_distribution_step_id 0x085a0028 +#define sl_btmesh_rsp_fw_standalone_updater_apply_id 0x095a0028 +#define sl_btmesh_rsp_fw_standalone_updater_get_state_id 0x0a5a0028 +#define sl_btmesh_rsp_fw_standalone_updater_get_node_status_by_index_id 0x0b5a0028 +#define sl_btmesh_rsp_fw_standalone_updater_get_node_status_by_address_id 0x0c5a0028 +#define sl_btmesh_rsp_fw_standalone_updater_cancel_id 0x0d5a0028 + +/** + * @addtogroup sl_btmesh_evt_fw_standalone_updater_dist_state_changed sl_btmesh_evt_fw_standalone_updater_dist_state_changed + * @{ + * @brief Distribution state changed + */ + +/** @brief Identifier of the dist_state_changed event */ +#define sl_btmesh_evt_fw_standalone_updater_dist_state_changed_id 0x005a00a8 + +/***************************************************************************//** + * @brief Data structure of the dist_state_changed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_standalone_updater_dist_state_changed_s +{ + uint16_t elem_index; /**< Element index */ + uint8_t state; /**< Enum @ref + sl_btmesh_fw_dist_server_dist_step_t. New + state of the Distribution */ + uint16_t num_active_nodes; /**< Number of active nodes */ +}); + +typedef struct sl_btmesh_evt_fw_standalone_updater_dist_state_changed_s sl_btmesh_evt_fw_standalone_updater_dist_state_changed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_standalone_updater_dist_state_changed + +/** + * @addtogroup sl_btmesh_evt_fw_standalone_updater_node_failed sl_btmesh_evt_fw_standalone_updater_node_failed + * @{ + * @brief Indicates that an Updating Node failed, either due to an error or due + * to timeout + */ + +/** @brief Identifier of the node_failed event */ +#define sl_btmesh_evt_fw_standalone_updater_node_failed_id 0x015a00a8 + +/***************************************************************************//** + * @brief Data structure of the node_failed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_fw_standalone_updater_node_failed_s +{ + uint16_t elem_index; /**< Element index */ + uint16_t address; /**< Address of the Update Server */ + uint8_t update_phase; /**< Enum @ref + sl_btmesh_fw_dist_server_dist_node_phase_t. + Update Phase of the Update Server. 0xa if not + known yet. */ + uint8_t update_status; /**< Enum @ref + sl_btmesh_fw_update_server_update_status_t. Last + Update Status message received from the Update + Server */ + uint8_t mbt_status; /**< Last status code received from the MBT Server. + 0xa if not known yet. */ + uint8_t progress; /**< 0-100, percentage of BLOB Transfer octets + delivered and confirmed */ + uint8_t fw_index; /**< Index of the firmware being updated */ +}); + +typedef struct sl_btmesh_evt_fw_standalone_updater_node_failed_s sl_btmesh_evt_fw_standalone_updater_node_failed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_fw_standalone_updater_node_failed + +/***************************************************************************//** + * + * Initializes the Standalone Updater. Before initializing the Standalone + * Updater, the Update Client and MBT Client models on the same element must be + * initialized. + * + * The Distribution Server is not supported on the same element at the same + * time. + * + * @param[in] elem_index Standalone Updater element index (that is, the element + * index of the Update Client and MBT Client) + * @param[in] max_node_list_size Maximum number of nodes that can be updated + * simultaneously + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_init(uint16_t elem_index, + uint16_t max_node_list_size); + +/***************************************************************************//** + * + * Deinitializes the Standalone Updater. The corresponding Update Client and MBT + * Client models can be deinitialized before or after this model. + * + * @param[in] elem_index Element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Set up parameters for a firmware distribution + * + * @param[in] elem_index Element index + * @param[in] fw_size Firmware image size + * @param[in] blob_id BLOB ID to use for the image + * @param[in] fwid_len Length of data in @p fwid + * @param[in] fwid Firmware ID of the firmware image + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_setup(uint16_t elem_index, + uint32_t fw_size, + sl_bt_uuid_64_t blob_id, + size_t fwid_len, + const uint8_t* fwid); + +/***************************************************************************//** + * + * Set the metadata of the image to be distributed. Should be called after the + * @ref sl_btmesh_fw_standalone_updater_setup command. Cannot be called after + * the distribution is started. + * + * @param[in] elem_index Element index + * @param[in] metadata_len Length of data in @p metadata + * @param[in] metadata Metadata of the image. May be zero-length. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_set_metadata(uint16_t elem_index, + size_t metadata_len, + const uint8_t* metadata); + +/***************************************************************************//** + * + * Set the multicast threshold value. + * + * @param[in] elem_index Element index + * @param[in] multicast_threshold This value will be passed to the MBT Client. + * If the number of servers for any step exceeds or is equal to this number, + * the group address will be used. Otherwise, servers will be looped through + * one by one. Value of 0 disables the feature. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_set_multicast_threshold(uint16_t elem_index, + uint16_t multicast_threshold); + +/***************************************************************************//** + * + * Add a receiver to the distribution + * + * @param[in] elem_index Element index + * @param[in] address Address of the Updating Node + * @param[in] fw_index Index of the firmware on the Updating Node to update + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_add_receiver(uint16_t elem_index, + uint16_t address, + uint8_t fw_index); + +/***************************************************************************//** + * + * Clears the list of receivers + * + * @param[in] elem_index Element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_delete_all_receivers(uint16_t elem_index); + +/***************************************************************************//** + * + * Start the firmware image distribution. The command @ref + * sl_btmesh_fw_standalone_updater_execute_distribution_step is used to progress + * through the procedures. + * + * The Receivers List must have been populated via the @ref + * sl_btmesh_fw_standalone_updater_add_receiver command. The distribution + * parameters must have been set via the @ref + * sl_btmesh_fw_standalone_updater_setup and @ref + * sl_btmesh_fw_standalone_updater_set_metadata commands. + * + * @param[in] elem_index Element index + * @param[in] dist_appkey_index Application key index to use when communicating + * with the Updating Nodes + * @param[in] dist_ttl The time-to-live value to use when communicating with the + * Updating Nodes. Valid values: 0, range:[2-127] and 255. + * @param[in] dist_timeout_base The Timeout Base value to use in the firmware + * image BLOB Transfer and Update Client operations + * @param[in] transfer_mode 1 = use Push Mode, 2 = use Pull Mode (typically for + * LPNs) + * @param[in] group_address Group address to use. Zero to only use unicast. + * @param[in] virtual_address If the group address is a VA hash, this needs to + * contain the full virtual address label UUID. Otherwise, the value of this + * field will be ignored. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_fw_standalone_updater_dist_state_changed + * - @ref sl_btmesh_evt_fw_standalone_updater_node_failed + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_start(uint16_t elem_index, + uint16_t dist_appkey_index, + uint8_t dist_ttl, + uint16_t dist_timeout_base, + uint8_t transfer_mode, + uint16_t group_address, + uuid_128 virtual_address); + +/***************************************************************************//** + * + * Execute the next action for the distribution state machine. Must be repeated + * by the application if the Updating Nodes do not respond in a timely manner. + * Calling this function sends out the necessary messages to all nodes that have + * not responded. Note that the distribution step dist_step_transferring_image + * is executed via the MBT Client API, and thus the command does not need to be + * called in that state. + * + * @param[in] elem_index Element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_execute_distribution_step(uint16_t elem_index); + +/***************************************************************************//** + * + * Enter the apply step after the distribution is in the "verification complete" + * step. The Standalone Updater can proceed to the apply step immediately after + * the verification is complete. This state transition exists only for keeping + * the API as similar as possible to the Distribution Server. The + * execute_distribution_step command must be called to send out the Update Apply + * messages. + * + * @param[in] elem_index Element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_apply(uint16_t elem_index); + +/***************************************************************************//** + * + * Get the current state of the distribution process. If an error is returned, + * the other return values should be ignored. + * + * @param[in] elem_index Element index + * @param[out] state Current state of the distribution + * @param[out] total_nodes Number of nodes originally in the Receivers List + * @param[out] num_active_nodes Number of active nodes + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_get_state(uint16_t elem_index, + uint8_t *state, + uint16_t *total_nodes, + uint16_t *num_active_nodes); + +/***************************************************************************//** + * + * Retrieve information about the ongoing update on a node + * + * @param[in] elem_index Element index + * @param[in] entry_index Node entry index + * @param[out] address Address of the Update Server + * @param[out] retrieved_phase Enum @ref + * sl_btmesh_fw_dist_server_dist_node_phase_t. Phase of the Update Server + * @param[out] update_server_status Enum @ref + * sl_btmesh_fw_update_server_update_status_t. Last Update Status message + * received from the Update Server + * @param[out] mbt_server_status Enum @ref sl_btmesh_mbt_server_status_t. Last + * Transfer Status message received from the BLOB Transfer Server + * @param[out] transfer_progress 0-100, percentage of BLOB Transfer octets + * delivered and confirmed + * @param[out] fw_index Index of the firmware being updated + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_get_node_status_by_index(uint16_t elem_index, + uint16_t entry_index, + uint16_t *address, + uint8_t *retrieved_phase, + uint8_t *update_server_status, + uint8_t *mbt_server_status, + uint8_t *transfer_progress, + uint8_t *fw_index); + +/***************************************************************************//** + * + * Retrieve information about the ongoing update by a node address + * + * @param[in] elem_index Element index + * @param[in] node_address Node mesh address + * @param[out] address Address of the Update Server + * @param[out] retrieved_phase Enum @ref + * sl_btmesh_fw_dist_server_dist_node_phase_t. Phase of the Update Server + * @param[out] update_server_status Enum @ref + * sl_btmesh_fw_update_server_update_status_t. Last Update Status message + * received from the Update Server + * @param[out] mbt_server_status Enum @ref sl_btmesh_mbt_server_status_t. Last + * Transfer Status message received from the BLOB Transfer Server + * @param[out] transfer_progress 0-100, percentage of BLOB Transfer octets + * delivered and confirmed + * @param[out] fw_index Index of the firmware being updated + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_get_node_status_by_address(uint16_t elem_index, + uint16_t node_address, + uint16_t *address, + uint8_t *retrieved_phase, + uint8_t *update_server_status, + uint8_t *mbt_server_status, + uint8_t *transfer_progress, + uint8_t *fw_index); + +/***************************************************************************//** + * + * Cancel a distribution process and clear any information about receivers. If + * the current distribution was not started, or it is completed or failed, a + * transition to the idle state will be made immediately. If the receivers need + * to be informed about the cancellation, a transition to the cancelling state + * will be made. The @ref + * sl_btmesh_fw_standalone_updater_execute_distribution_step function should be + * called to send out the cancellation messages to the receivers. + * + * @param[in] elem_index Element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_fw_standalone_updater_cancel(uint16_t elem_index); + +/** @} */ // end addtogroup sl_btmesh_fw_standalone_updater + +/** + * @addtogroup sl_btmesh_migration Bluetooth Mesh Key migration + * @{ + * + * @brief Bluetooth Mesh Key migration + * + * These commands are meant for migration from older releases to 3.2 and later + * releases. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_migration_migrate_keys_id 0x01600028 +#define sl_btmesh_cmd_migration_migrate_ddb_id 0x02600028 +#define sl_btmesh_rsp_migration_migrate_keys_id 0x01600028 +#define sl_btmesh_rsp_migration_migrate_ddb_id 0x02600028 + +/***************************************************************************//** + * + * Ugrade keys from pre 3.2 release. Must be executed prior to to node or + * Provisioner initialization. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_migration_migrate_keys(); + +/***************************************************************************//** + * + * Ugrade Device Database from pre 3.2 release. This command must be executed + * prior to provisioner initialization. Command may not be issued twice. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_migration_migrate_ddb(); + +/** @} */ // end addtogroup sl_btmesh_migration + +/** + * @addtogroup sl_btmesh_ncp_fw_list NCP firmware list cache + * @{ + * + * @brief NCP firmware list cache + * + * These commands can be used to manipulate the Firmware List cache. + * + * This class is only intended for testing and development purposes with an NCP + * target. The Distributor SoC example application contains a proper + * implementation of the Firmware List. + * + * The elem_index parameter in all of the commands and events is the element + * index of the Distribution Server. This class handles firmware deletion + * automatically as a response to @ref + * sl_btmesh_evt_fw_dist_server_fw_delete_req and @ref + * sl_btmesh_evt_fw_dist_server_fw_delete_all_req. Thus, the @ref + * sl_btmesh_fw_dist_server_delete_rsp and @ref + * sl_btmesh_fw_dist_server_delete_all_rsp should not be called explicitly. This + * class handles adding firmware images automatically as a response to @ref + * sl_btmesh_evt_fw_dist_server_upload_complete. Thus, when an upload completes, + * @ref sl_btmesh_ncp_fw_list_add_fw does not need to be called. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_ncp_fw_list_init_id 0x00610028 +#define sl_btmesh_cmd_ncp_fw_list_deinit_id 0x01610028 +#define sl_btmesh_cmd_ncp_fw_list_get_fw_info_by_index_id 0x02610028 +#define sl_btmesh_cmd_ncp_fw_list_get_fw_metadata_by_index_id 0x03610028 +#define sl_btmesh_cmd_ncp_fw_list_add_fw_id 0x04610028 +#define sl_btmesh_cmd_ncp_fw_list_set_fw_metadata_id 0x05610028 +#define sl_btmesh_rsp_ncp_fw_list_init_id 0x00610028 +#define sl_btmesh_rsp_ncp_fw_list_deinit_id 0x01610028 +#define sl_btmesh_rsp_ncp_fw_list_get_fw_info_by_index_id 0x02610028 +#define sl_btmesh_rsp_ncp_fw_list_get_fw_metadata_by_index_id 0x03610028 +#define sl_btmesh_rsp_ncp_fw_list_add_fw_id 0x04610028 +#define sl_btmesh_rsp_ncp_fw_list_set_fw_metadata_id 0x05610028 + +/** + * @addtogroup sl_btmesh_evt_ncp_fw_list_fw_deleted sl_btmesh_evt_ncp_fw_list_fw_deleted + * @{ + * @brief An image was deleted via a message received by the Distribution Server + */ + +/** @brief Identifier of the fw_deleted event */ +#define sl_btmesh_evt_ncp_fw_list_fw_deleted_id 0x086100a8 + +/***************************************************************************//** + * @brief Data structure of the fw_deleted event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_ncp_fw_list_fw_deleted_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ + uint8array fwid; /**< FWID of the firmware that was deleted */ +}); + +typedef struct sl_btmesh_evt_ncp_fw_list_fw_deleted_s sl_btmesh_evt_ncp_fw_list_fw_deleted_t; + +/** @} */ // end addtogroup sl_btmesh_evt_ncp_fw_list_fw_deleted + +/** + * @addtogroup sl_btmesh_evt_ncp_fw_list_fw_all_deleted sl_btmesh_evt_ncp_fw_list_fw_all_deleted + * @{ + * @brief All images were deleted via a message received by the Distribution + * Server + */ + +/** @brief Identifier of the fw_all_deleted event */ +#define sl_btmesh_evt_ncp_fw_list_fw_all_deleted_id 0x096100a8 + +/***************************************************************************//** + * @brief Data structure of the fw_all_deleted event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_ncp_fw_list_fw_all_deleted_s +{ + uint16_t elem_index; /**< Server model element index */ + uint16_t client_address; /**< Address of the Distribution Client */ +}); + +typedef struct sl_btmesh_evt_ncp_fw_list_fw_all_deleted_s sl_btmesh_evt_ncp_fw_list_fw_all_deleted_t; + +/** @} */ // end addtogroup sl_btmesh_evt_ncp_fw_list_fw_all_deleted + +/** + * @addtogroup sl_btmesh_evt_ncp_fw_list_fw_added sl_btmesh_evt_ncp_fw_list_fw_added + * @{ + * @brief A new image was added via the Distribution Server + */ + +/** @brief Identifier of the fw_added event */ +#define sl_btmesh_evt_ncp_fw_list_fw_added_id 0x0a6100a8 + +/***************************************************************************//** + * @brief Data structure of the fw_added event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_ncp_fw_list_fw_added_s +{ + uint16_t elem_index; /**< Server model element index */ + uint32_t size; /**< Size of the image */ + sl_bt_uuid_64_t blob_id; /**< BLOB ID that will be used to transmit the + image */ + uint8array fwid; /**< Firmware ID of the image */ +}); + +typedef struct sl_btmesh_evt_ncp_fw_list_fw_added_s sl_btmesh_evt_ncp_fw_list_fw_added_t; + +/** @} */ // end addtogroup sl_btmesh_evt_ncp_fw_list_fw_added + +/***************************************************************************//** + * + * Initializes the Firmware List. Before initializing the Firmware List, the + * Distribution Server model must have been initialized. + * + * @param[in] elem_index Distribution Server model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_ncp_fw_list_init(uint16_t elem_index); + +/***************************************************************************//** + * + * Deinitializes the Firmware List. + * + * @param[in] elem_index Distribution Server model element index + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_ncp_fw_list_deinit(uint16_t elem_index); + +/***************************************************************************//** + * + * Retrieve information about a stored firmware in the Firmware List. + * + * @param[in] elem_index Server model element index + * @param[in] index Firmware list index to check + * @param[out] size Firmware image size + * @param[out] blob_id BLOB ID that will be used to transmit the image + * @param[in] max_fwid_size Size of output buffer passed in @p fwid + * @param[out] fwid_len On return, set to the length of output data written to + * @p fwid + * @param[out] fwid Firmware ID of the image + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_ncp_fw_list_get_fw_info_by_index(uint16_t elem_index, + uint16_t index, + uint32_t *size, + sl_bt_uuid_64_t *blob_id, + size_t max_fwid_size, + size_t *fwid_len, + uint8_t *fwid); + +/***************************************************************************//** + * + * Retrieve information about a stored firmware metadata in the Firmware List. + * + * @param[in] elem_index Server model element index + * @param[in] index Firmware list index to check + * @param[in] max_metadata_size Size of output buffer passed in @p metadata + * @param[out] metadata_len On return, set to the length of output data written + * to @p metadata + * @param[out] metadata Metadata of firmware image + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_ncp_fw_list_get_fw_metadata_by_index(uint16_t elem_index, + uint16_t index, + size_t max_metadata_size, + size_t *metadata_len, + uint8_t *metadata); + +/***************************************************************************//** + * + * Add a firmware image to the Firmware List. This command is used to inform the + * stack that a image already exists on the local device. For example, it may + * have been stored via Upload previously, and the device has been reset. + * + * @param[in] elem_index Server model element index + * @param[in] size Size of the image + * @param[in] blob_id BLOB ID that will be used to transmit the image + * @param[in] fwid_len Length of data in @p fwid + * @param[in] fwid Firmware ID of the image + * @param[out] fw_list_index Firmware List Index that was assigned to the image + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_ncp_fw_list_add_fw(uint16_t elem_index, + uint32_t size, + sl_bt_uuid_64_t blob_id, + size_t fwid_len, + const uint8_t* fwid, + uint16_t *fw_list_index); + +/***************************************************************************//** + * + * Set the metadata of a image in the Firmware List. This command is used to set + * the metadata for images added with the add_fw command. NOTE: this should not + * be used to modify the metadata of images received via Upload! + * + * @param[in] elem_index Server model element index + * @param[in] fw_list_index Firmware List Index for which to set the metadata + * @param[in] metadata_len Length of data in @p metadata + * @param[in] metadata Metadata of the image. May be zero-length. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_ncp_fw_list_set_fw_metadata(uint16_t elem_index, + uint16_t fw_list_index, + size_t metadata_len, + const uint8_t* metadata); + +/** @} */ // end addtogroup sl_btmesh_ncp_fw_list + +/** + * @addtogroup sl_btmesh_sar_config_client Bluetooth Mesh SAR Configuration Client Model + * @{ + * + * @brief Bluetooth Mesh SAR Configuration Client Model + * + * SAR Configuration Client model, used to configure the behavior of the lower + * transport layer of a node that that supports the SAR Configuration Server + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_sar_config_client_init_id 0x01620028 +#define sl_btmesh_cmd_sar_config_client_deinit_id 0x02620028 +#define sl_btmesh_cmd_sar_config_client_get_sar_transmitter_id 0x03620028 +#define sl_btmesh_cmd_sar_config_client_set_sar_transmitter_id 0x04620028 +#define sl_btmesh_cmd_sar_config_client_get_sar_receiver_id 0x05620028 +#define sl_btmesh_cmd_sar_config_client_set_sar_receiver_id 0x06620028 +#define sl_btmesh_rsp_sar_config_client_init_id 0x01620028 +#define sl_btmesh_rsp_sar_config_client_deinit_id 0x02620028 +#define sl_btmesh_rsp_sar_config_client_get_sar_transmitter_id 0x03620028 +#define sl_btmesh_rsp_sar_config_client_set_sar_transmitter_id 0x04620028 +#define sl_btmesh_rsp_sar_config_client_get_sar_receiver_id 0x05620028 +#define sl_btmesh_rsp_sar_config_client_set_sar_receiver_id 0x06620028 + +/** + * @addtogroup sl_btmesh_evt_sar_config_client_sar_transmitter_status sl_btmesh_evt_sar_config_client_sar_transmitter_status + * @{ + * @brief SAR Transmitter state parameters, reply for a @ref + * sl_btmesh_sar_config_client_get_sar_transmitter or @ref + * sl_btmesh_sar_config_client_set_sar_transmitter command. + */ + +/** @brief Identifier of the sar_transmitter_status event */ +#define sl_btmesh_evt_sar_config_client_sar_transmitter_status_id 0x016200a8 + +/***************************************************************************//** + * @brief Data structure of the sar_transmitter_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sar_config_client_sar_transmitter_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. + Error code otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t segment_interval_step; /**< SAR Segment Interval Step + + The Segment Interval Step + controls the interval + between transmissions of + segments of a segmented + message in milliseconds. The + value is the range of 10ms + to 160ms in 10ms steps, + intermediate values are + rounded down to the nearest + multiple of 10. Default + value is 20ms. */ + uint8_t unicast_retrans_count; /**< SAR Unicast Retransmissions + Count + + The SAR Unicast + Retransmission Count + controls the maximum number + of transmissions of segments + of segmented messages to a + unicast destination. Valid + range is 0 - 15, where 0 + represents a single + transmission. The default + value is 7, resulting in 8 + transmissions. */ + uint8_t unicast_retrans_wo_progress_count; /**< SAR Unicast Retransmissions + Without Progress Count + + The SAR Unicase + Retransmissions Without + Progress Count controls the + maximum number of + retransmissions of segments + of segmented messages to a + unicast destination without + progress (without marking + newly marking any segments + acknowledged). Valid range + is 0 - 15, where 0 + represents a single + transmission. The default + value is 2, resulting in 3 + transmissions. The value of + this state should be set to + a value greater by two or + more than the value of the + SAR Acknowledgement + Retransmissions Count on a + peer node. This helps + prevent the SAR transmitter + from abandoning the SAR + prematurely. */ + uint16_t unicast_retrans_interval_step; /**< SAR Unicast Retransmissions + Interval Step + + The SAR Unicast + Retransmissions Interval + Step state controls the + minimum interval between + retransmissions of segments + of a segmented message for a + destination that is a + unicast address in 25ms + steps. Valid range is 25 - + 400ms, intermediate values + are rounded down to the + nearest multiple of 25. + Default value is 200ms. */ + uint16_t unicast_retrans_interval_increment; /**< SAR Unicast Retransmissions + Interval Increment + + The SAR Unicast + Retransmissions Interval + Increment state controls the + incremental component of the + interval between + retransmissions of segments + of a segmented message for a + destination that is a + unicast address in 25ms + steps. Valid range is 25 - + 400ms, intermediate values + are rounded down to the + nearest multiple of 25. + Default value is 50ms. */ + uint8_t multicast_retrans_count; /**< SAR Multicast + Retransmissions Count + + The SAR Multicast + Retransmissions Count state + controls the maximum number + of transmissions of segments + of segmented messages to a + group address or a virtual + address. Valid range is 0 - + 15, where 0 represents a + single transmission. The + default value is 1, + resulting in 2 + transmissions. */ + uint16_t multicast_retrans_interval_step; /**< SAR Multicast + Retransmissions Interval + + The SAR Multicast + Retransmissions Interval + Step state controls the + interval between + retransmissions of segments + of a segmented message for a + destination that is a group + address or a virtual address + in 25ms steps. Valid range + is 25-400ms, intermediate + values are rounded down to + the nearest multiple of 25. + Default values is 100ms. */ +}); + +typedef struct sl_btmesh_evt_sar_config_client_sar_transmitter_status_s sl_btmesh_evt_sar_config_client_sar_transmitter_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sar_config_client_sar_transmitter_status + +/** + * @addtogroup sl_btmesh_evt_sar_config_client_sar_receiver_status sl_btmesh_evt_sar_config_client_sar_receiver_status + * @{ + * @brief SAR Reveiver state parameters, reply for a @ref + * sl_btmesh_sar_config_client_get_sar_receiver or @ref + * sl_btmesh_sar_config_client_set_sar_receiver command. + */ + +/** @brief Identifier of the sar_receiver_status event */ +#define sl_btmesh_evt_sar_config_client_sar_receiver_status_id 0x026200a8 + +/***************************************************************************//** + * @brief Data structure of the sar_receiver_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sar_config_client_sar_receiver_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code + otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t segments_threshold; /**< SAR Segments Threshold + + The SAR Segments Threshold state + represents the size of a segmented + message in number of segments above which + the Segment Acknowledgment messages are + enabled. Valid range is 0 - 31, the + default value is 3. */ + uint8_t ack_delay_increment; /**< SAR Acknowledgment Delay Increment + + The SAR Acknowledgment Delay Increment + state control the interval between the + reception of a new segment of a segmented + message for a destination that is a + unicast address and the transmission of + the Segment Acknowledgment for that + message. Valid range is 0 - 7, default is + 2. */ + uint32_t discard_timeout; /**< SAR Discard Timeout + + The SAR Discard Timeout state controls + the time that the lower transport layer + waits after receiving unique segments of + a segmented message before discarding + that segmented message in 5s steps. Valid + range is 5000 - 80000ms, intermediate + values are rounded down to the nearest + multiple of 5s. The default value is + 10000s. */ + uint8_t segment_interval_step; /**< SAR Receiver Segment Interval Step + + The SAR Receiver Segment Interval Step + state indicates the interval between + received segments of a segmented message + in milliseconds. This is used to control + rate of transmission of Segment + Acknowledgment messages. Valid range is + 10 - 160, intermediate values are rounded + down to the nearest multiple of 10. The + default value is 20ms. */ + uint8_t ack_retrans_count; /**< SAR Acknowledgment Retransmissions Count + + The SAR Acknowledgment Retransmissions + Count state controls the maximum number + of retransmissions of Segment + Acknowledgment messages sent by the lower + transport layer. Valid range is 0 - 3. + The default value is 2, representing 2 + retransmissions or 3 in total. */ +}); + +typedef struct sl_btmesh_evt_sar_config_client_sar_receiver_status_s sl_btmesh_evt_sar_config_client_sar_receiver_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sar_config_client_sar_receiver_status + +/***************************************************************************//** + * + * Initialize the SAR Configuration Client model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_client_init(); + +/***************************************************************************//** + * + * Deinitialize the SAR Configuration Client model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_client_deinit(); + +/***************************************************************************//** + * + * Query the SAR Transmitter state of a node + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sar_config_client_sar_transmitter_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_client_get_sar_transmitter(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set the SAR Tranmitter state of a node + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] segment_interval_step @parblock + * SAR Segment Interval Step + * + * The Segment Interval Step controls the interval between transmissions of + * segments of a segmented message in milliseconds. The value is the range of + * 10ms to 160ms in 10ms steps, intermediate values are rounded down to the + * nearest multiple of 10. Default value is 20ms. + * @endparblock + * @param[in] unicast_retrans_count @parblock + * SAR Unicast Retransmissions Count + * + * The SAR Unicast Retransmission Count controls the maximum number of + * transmissions of segments of segmented messages to a unicast destination. + * Valid range is 0 - 15, where 0 represents a single transmission. The + * default value is 7, resulting in 8 transmissions total. + * @endparblock + * @param[in] unicast_retrans_wo_progress_count @parblock + * SAR Unicast Retransmissions Without Progress Count + * + * The SAR Unicase Retransmissions Without Progress Count controls the maximum + * number of retransmissions of segments of segmented messages to a unicast + * destination without progress (without marking newly marking any segments + * acknowledged). Valid range is 0 - 15, where 0 represents a single + * transmission. The default value is 2, resulting in 3 transmissions. The + * value of this state should be set to a value greater by two or more than + * the value of the SAR Acknowledgement Retransmissions Count on a peer node. + * This helps prevent the SAR transmitter from abandoning the SAR prematurely. + * @endparblock + * @param[in] unicast_retrans_interval_step @parblock + * SAR Unicast Retransmissions Interval Step + * + * The SAR Unicast Retransmissions Interval Step state controls the minimum + * interval between retransmissions of segments of a segmented message for a + * destination that is a unicast address in 25ms steps. Valid range is 25 - + * 400ms, intermediate values are rounded down to the nearest multiple of 25. + * Default value is 200ms. + * @endparblock + * @param[in] unicast_retrans_interval_increment @parblock + * SAR Unicast Retransmissions Interval Increment + * + * The SAR Unicast Retransmissions Interval Increment state controls the + * incremental component of the interval between retransmissions of segments + * of a segmented message for a destination that is a unicast address in 25ms + * steps. Valid range is 25 - 400ms, intermediate values are rounded down to + * the nearest multiple of 25. Default value is 50ms. + * @endparblock + * @param[in] multicast_retrans_count @parblock + * SAR Multicast Retransmissions Count + * + * The SAR Multicast Retransmissions Count state controls the maximum number + * of transmissions of segments of segmented messages to a group address or a + * virtual address. Valid range is 0 - 15, where 0 represents a single + * transmission. The default value is 1, resulting in 2 transmissions. + * @endparblock + * @param[in] multicast_retrans_interval_step @parblock + * SAR Multicast Retransmissions Interval + * + * The SAR Multicast Retransmissions Interval Step state controls the interval + * between retransmissions of segments of a segmented message for a + * destination that is a group address or a virtual address in 25ms steps. + * Valid range is 25-400ms, intermediate values are rounded down to the + * nearest multiple of 25. Default values is 100ms. + * @endparblock + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sar_config_client_sar_transmitter_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_client_set_sar_transmitter(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t segment_interval_step, + uint8_t unicast_retrans_count, + uint8_t unicast_retrans_wo_progress_count, + uint16_t unicast_retrans_interval_step, + uint16_t unicast_retrans_interval_increment, + uint8_t multicast_retrans_count, + uint16_t multicast_retrans_interval_step, + uint32_t *handle); + +/***************************************************************************//** + * + * Query the SAR Receiver state of a node + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sar_config_client_sar_receiver_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_client_get_sar_receiver(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set the SAR Receiver state of a node + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] segments_threshold @parblock + * SAR Segments Threshold + * + * The SAR Segments Threshold state represents the size of a segmented message + * in number of segments above which the Segment Acknowledgment messages are + * enabled. Valid range is 0 - 31, the default value is 3. + * @endparblock + * @param[in] ack_delay_increment @parblock + * SAR Acknowledgment Delay Increment + * + * The SAR Acknowledgment Delay Increment state control the interval between + * the reception of a new segment of a segmented message for a destination + * that is a unicast address and the transmission of the Segment + * Acknowledgment for that message. Valid range is 0 - 7, default is 2. + * @endparblock + * @param[in] discard_timeout @parblock + * SAR Discard Timeout + * + * The SAR Discard Timeout state controls the time that the lower transport + * layer waits after receiving unique segments of a segmented message before + * discarding that segmented message in 5s steps. Valid range is 5000 - + * 80000ms, intermediate values are rounded down to the nearest multiple of + * 5s. The default value is 10000ms. + * @endparblock + * @param[in] segment_interval_step @parblock + * SAR Discard Timeout + * + * The SAR Discard Timeout state controls the time that the lower transport + * layer waits after receiving unique segments of a segmented message before + * discarding that segmented message in 5s steps. Valid range is 5000 - + * 80000ms, intermediate values are rounded down to the nearest multiple of + * 5s. The default value is 10000ms. + * @endparblock + * @param[in] ack_retrans_count @parblock + * SAR Acknowledgment Retransmissions Count + * + * The SAR Acknowledgment Retransmissions Count state controls the maximum + * number of retransmissions of Segment Acknowledgment messages sent by the + * lower transport layer. Valid range is 0 - 3. The default value is 2, + * representing 2 retransmissions or 3 in total. + * @endparblock + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_sar_config_client_sar_receiver_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_client_set_sar_receiver(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t segments_threshold, + uint8_t ack_delay_increment, + uint32_t discard_timeout, + uint8_t segment_interval_step, + uint8_t ack_retrans_count, + uint32_t *handle); + +/** @} */ // end addtogroup sl_btmesh_sar_config_client + +/** + * @addtogroup sl_btmesh_sar_config_server Bluetooth Mesh SAR Configuration Server Model + * @{ + * + * @brief Bluetooth Mesh SAR Configuration Server Model + * + * SAR Configuration Server, control the segmentation and reassembly behavior of + * the node + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_sar_config_server_init_id 0x01630028 +#define sl_btmesh_cmd_sar_config_server_deinit_id 0x02630028 +#define sl_btmesh_cmd_sar_config_server_get_sar_transmitter_id 0x03630028 +#define sl_btmesh_cmd_sar_config_server_set_sar_transmitter_id 0x04630028 +#define sl_btmesh_cmd_sar_config_server_get_sar_receiver_id 0x05630028 +#define sl_btmesh_cmd_sar_config_server_set_sar_receiver_id 0x06630028 +#define sl_btmesh_rsp_sar_config_server_init_id 0x01630028 +#define sl_btmesh_rsp_sar_config_server_deinit_id 0x02630028 +#define sl_btmesh_rsp_sar_config_server_get_sar_transmitter_id 0x03630028 +#define sl_btmesh_rsp_sar_config_server_set_sar_transmitter_id 0x04630028 +#define sl_btmesh_rsp_sar_config_server_get_sar_receiver_id 0x05630028 +#define sl_btmesh_rsp_sar_config_server_set_sar_receiver_id 0x06630028 + +/** + * @addtogroup sl_btmesh_evt_sar_config_server_sar_transmitter_set sl_btmesh_evt_sar_config_server_sar_transmitter_set + * @{ + * @brief Diagnostic event to report SAR Transmitter state changes + */ + +/** @brief Identifier of the sar_transmitter_set event */ +#define sl_btmesh_evt_sar_config_server_sar_transmitter_set_id 0x016300a8 + +/***************************************************************************//** + * @brief Data structure of the sar_transmitter_set event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sar_config_server_sar_transmitter_set_s +{ + uint8_t segment_interval_step; /**< SAR Segment Interval Step + + The Segment Interval Step + controls the interval + between transmissions of + segments of a segmented + message in milliseconds. The + value is the range of 10ms + to 160ms in 10ms steps, + intermediate values are + rounded down to the nearest + multiple of 10. Default + value is 20ms. */ + uint8_t unicast_retrans_count; /**< SAR Unicast Retransmissions + Count + + The SAR Unicast + Retransmission Count + controls the maximum number + of transmissions of segments + of segmented messages to a + unicast destination. Valid + range is 0 - 15, where 0 + represents a single + transmission. The default + value is 7, resulting in 8 + transmissions total. */ + uint8_t unicast_retrans_wo_progress_count; /**< SAR Unicast Retransmissions + Without Progress Count + + The SAR Unicase + Retransmissions Without + Progress Count controls the + maximum number of + retransmissions of segments + of segmented messages to a + unicast destination without + progress (without marking + newly marking any segments + acknowledged). Valid range + is 0 - 15, where 0 + represents a single + transmission. The default + value is 2, resulting in 3 + transmissions. The value of + this state should be set to + a value greater by two or + more than the value of the + SAR Acknowledgement + Retransmissions Count on a + peer node. This helps + prevent the SAR transmitter + from abandoning the SAR + prematurely. */ + uint16_t unicast_retrans_interval_step; /**< SAR Unicast Retransmissions + Interval Step + + The SAR Unicast + Retransmissions Interval + Step state controls the + minimum interval between + retransmissions of segments + of a segmented message for a + destination that is a + unicast address in 25ms + steps. Valid range is 25 - + 400ms, intermediate values + are rounded down to the + nearest multiple of 25. + Default value is 200ms. */ + uint16_t unicast_retrans_interval_increment; /**< SAR Unicast Retransmissions + Interval Increment + + The SAR Unicast + Retransmissions Interval + Increment state controls the + incremental component of the + interval between + retransmissions of segments + of a segmented message for a + destination that is a + unicast address in 25ms + steps. Valid range is 25 - + 400ms, intermediate values + are rounded down to the + nearest multiple of 25. + Default value is 50ms. */ + uint8_t multicast_retrans_count; /**< SAR Multicast + Retransmissions Count + + The SAR Multicast + Retransmissions Count state + controls the maximum number + of transmissions of segments + of segmented messages to a + group address or a virtual + address. Valid range is 0 - + 15, where 0 represents a + single transmission. The + default value is 1, + resulting in 2 + transmissions. */ + uint16_t multicast_retrans_interval_step; /**< SAR Multicast + Retransmissions Interval + + The SAR Multicast + Retransmissions Interval + Step state controls the + interval between + retransmissions of segments + of a segmented message for a + destination that is a group + address or a virtual address + in 25ms steps. Valid range + is 25-400ms, intermediate + values are rounded down to + the nearest multiple of 25. + Default values is 100ms. */ +}); + +typedef struct sl_btmesh_evt_sar_config_server_sar_transmitter_set_s sl_btmesh_evt_sar_config_server_sar_transmitter_set_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sar_config_server_sar_transmitter_set + +/** + * @addtogroup sl_btmesh_evt_sar_config_server_sar_receiver_set sl_btmesh_evt_sar_config_server_sar_receiver_set + * @{ + * @brief Diagnostic event to report SAR Receiver state changes + */ + +/** @brief Identifier of the sar_receiver_set event */ +#define sl_btmesh_evt_sar_config_server_sar_receiver_set_id 0x026300a8 + +/***************************************************************************//** + * @brief Data structure of the sar_receiver_set event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_sar_config_server_sar_receiver_set_s +{ + uint8_t segments_threshold; /**< SAR Segments Threshold + + The SAR Segments Threshold state + represents the size of a segmented + message in number of segments above which + the Segment Acknowledgment messages are + enabled. Valid range is 0 - 31, the + default value is 3. */ + uint8_t ack_delay_increment; /**< SAR Acknowledgment Delay Increment + + The SAR Acknowledgment Delay Increment + state control the interval between the + reception of a new segment of a segmented + message for a destination that is a + unicast address and the transmission of + the Segment Acknowledgment for that + message. Valid range is 0 - 7, default is + 2. */ + uint32_t discard_timeout; /**< SAR Discard Timeout + + The SAR Discard Timeout state controls + the time that the lower transport layer + waits after receiving unique segments of + a segmented message before discarding + that segmented message in 5s steps. Valid + range is 5000 - 80000ms, intermediate + values are rounded down to the nearest + multiple of 5s. The default value is + 10000ms. */ + uint8_t segment_interval_step; /**< SAR Receiver Segment Interval Step + + The SAR Receiver Segment Interval Step + state indicates the interval between + received segments of a segmented message + in milliseconds. This is used to control + rate of transmission of Segment + Acknowledgment messages. Valid range is + 10 - 160, intermediate values are rounded + down to the nearest multiple of 10. The + default value is 20ms. */ + uint8_t ack_retrans_count; /**< SAR Acknowledgment Retransmissions Count + + The SAR Acknowledgment Retransmissions + Count state controls the maximum number + of retransmissions of Segment + Acknowledgment messages sent by the lower + transport layer. Valid range is 0 - 3. + The default value is 2, representing 2 + retransmissions or 3 in total. */ +}); + +typedef struct sl_btmesh_evt_sar_config_server_sar_receiver_set_s sl_btmesh_evt_sar_config_server_sar_receiver_set_t; + +/** @} */ // end addtogroup sl_btmesh_evt_sar_config_server_sar_receiver_set + +/***************************************************************************//** + * + * Initialize the SAR Configuration Server + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_server_init(); + +/***************************************************************************//** + * + * Deinitialie the SAR Configuration Server + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_server_deinit(); + +/***************************************************************************//** + * + * Query the local SAR Transmitter configuration + * + * @param[out] segment_interval_step SAR Segment Interval Step in milliseconds + * @param[out] unicast_retrans_count SAR Unicast Retransmissions Count + * @param[out] unicast_retrans_wo_progress_count SAR Unicast Retransmissions + * Without Progress Count + * @param[out] unicast_retrans_interval_step SAR Unicast Retransmissions + * Interval Step in milliseconds + * @param[out] unicast_retrans_interval_increment SAR Unicast Retransmissions + * Interval Increment + * @param[out] multicast_retrans_count SAR Multicast Retransmissions Count + * @param[out] multicast_retrans_interval_step SAR Multicast Retransmissions + * Interval in milliseconds + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_server_get_sar_transmitter(uint8_t *segment_interval_step, + uint8_t *unicast_retrans_count, + uint8_t *unicast_retrans_wo_progress_count, + uint16_t *unicast_retrans_interval_step, + uint16_t *unicast_retrans_interval_increment, + uint8_t *multicast_retrans_count, + uint16_t *multicast_retrans_interval_step); + +/***************************************************************************//** + * + * Set the local SAR Transmitter configuration + * + * @param[in] segment_interval_step @parblock + * SAR Segment Interval Step + * + * The Segment Interval Step controls the interval between transmissions of + * segments of a segmented message in milliseconds. The value is the range of + * 10ms to 160ms in 10ms steps, intermediate values are rounded down to the + * nearest multiple of 10. Default value is 20ms. + * @endparblock + * @param[in] unicast_retrans_count @parblock + * SAR Unicast Retransmissions Count + * + * The SAR Unicast Retransmission Count controls the maximum number of + * transmissions of segments of segmented messages to a unicast destination. + * Valid range is 0 - 15, where 0 represents a single transmission. The + * default value is 7, resulting in 8 transmissions total. + * @endparblock + * @param[in] unicast_retrans_wo_progress_count @parblock + * SAR Unicast Retransmissions Without Progress Count + * + * The SAR Unicase Retransmissions Without Progress Count controls the maximum + * number of retransmissions of segments of segmented messages to a unicast + * destination without progress (without marking newly marking any segments + * acknowledged). Valid range is 0 - 15, where 0 represents a single + * transmission. The default value is 2, resulting in 3 transmissions. The + * value of this state should be set to a value greater by two or more than + * the value of the SAR Acknowledgement Retransmissions Count on a peer node. + * This helps prevent the SAR transmitter from abandoning the SAR prematurely. + * @endparblock + * @param[in] unicast_retrans_interval_step @parblock + * SAR Unicast Retransmissions Interval Step + * + * The SAR Unicast Retransmissions Interval Step state controls the minimum + * interval between retransmissions of segments of a segmented message for a + * destination that is a unicast address in 25ms steps. Valid range is 25 - + * 400ms, intermediate values are rounded down to the nearest multiple of 25. + * Default value is 200ms. + * @endparblock + * @param[in] unicast_retrans_interval_increment @parblock + * SAR Unicast Retransmissions Interval Increment + * + * The SAR Unicast Retransmissions Interval Increment state controls the + * incremental component of the interval between retransmissions of segments + * of a segmented message for a destination that is a unicast address in 25ms + * steps. Valid range is 25 - 400ms, intermediate values are rounded down to + * the nearest multiple of 25. Default value is 50ms. + * @endparblock + * @param[in] multicast_retrans_count @parblock + * SAR Multicast Retransmissions Count + * + * The SAR Multicast Retransmissions Count state controls the maximum number + * of transmissions of segments of segmented messages to a group address or a + * virtual address. Valid range is 0 - 15, where 0 represents a single + * transmission. The default value is 1, resulting in 2 transmissions. + * @endparblock + * @param[in] multicast_retrans_interval_step @parblock + * SAR Multicast Retransmissions Interval + * + * The SAR Multicast Retransmissions Interval Step state controls the interval + * between retransmissions of segments of a segmented message for a + * destination that is a group address or a virtual address in 25ms steps. + * Valid range is 25-400ms, intermediate values are rounded down to the + * nearest multiple of 25. Default values is 100ms. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_server_set_sar_transmitter(uint8_t segment_interval_step, + uint8_t unicast_retrans_count, + uint8_t unicast_retrans_wo_progress_count, + uint16_t unicast_retrans_interval_step, + uint16_t unicast_retrans_interval_increment, + uint8_t multicast_retrans_count, + uint16_t multicast_retrans_interval_step); + +/***************************************************************************//** + * + * Query the local SAR Receiver configuration + * + * @param[out] segments_threshold @parblock + * SAR Segments Threshold + * + * The SAR Segments Threshold state represents the size of a segmented message + * in number of segments above which the Segment Acknowledgment messages are + * enabled. Valid range is 0 - 31, the default value is 3. + * @endparblock + * @param[out] ack_delay_increment @parblock + * SAR Acknowledgment Delay Increment + * + * The SAR Acknowledgment Delay Increment state control the interval between + * the reception of a new segment of a segmented message for a destination + * that is a unicast address and the transmission of the Segment + * Acknowledgment for that message. Valid range is 0 - 7, default is 2. + * @endparblock + * @param[out] discard_timeout @parblock + * SAR Discard Timeout + * + * The SAR Discard Timeout state controls the time that the lower transport + * layer waits after receiving unique segments of a segmented message before + * discarding that segmented message in 5s steps. Valid range is 5000 - + * 80000ms, intermediate values are rounded down to the nearest multiple of + * 5s. The default value is 10000ms. + * @endparblock + * @param[out] segment_interval_step @parblock + * SAR Receiver Segment Interval Step + * + * The SAR Receiver Segment Interval Step state indicates the interval between + * received segments of a segmented message in milliseconds. This is used to + * control rate of transmission of Segment Acknowledgment messages. Valid + * range is 10 - 160, intermediate values are rounded down to the nearest + * multiple of 10. The default value is 20ms. + * @endparblock + * @param[out] ack_retrans_count @parblock + * SAR Acknowledgment Retransmissions Count + * + * The SAR Acknowledgment Retransmissions Count state controls the maximum + * number of retransmissions of Segment Acknowledgment messages sent by the + * lower transport layer. Valid range is 0 - 3. The default value is 2, + * representing 2 retransmissions or 3 in total. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_server_get_sar_receiver(uint8_t *segments_threshold, + uint8_t *ack_delay_increment, + uint32_t *discard_timeout, + uint8_t *segment_interval_step, + uint8_t *ack_retrans_count); + +/***************************************************************************//** + * + * + * + * @param[in] segments_threshold @parblock + * SAR Segments Threshold + * + * The SAR Segments Threshold state represents the size of a segmented message + * in number of segments above which the Segment Acknowledgment messages are + * enabled. Valid range is 0 - 31, the default value is 3. + * @endparblock + * @param[in] ack_delay_increment @parblock + * SAR Acknowledgment Delay Increment + * + * The SAR Acknowledgment Delay Increment state control the interval between + * the reception of a new segment of a segmented message for a destination + * that is a unicast address and the transmission of the Segment + * Acknowledgment for that message. Valid range is 0 - 7, default is 2. + * @endparblock + * @param[in] discard_timeout @parblock + * SAR Discard Timeout + * + * The SAR Discard Timeout state controls the time that the lower transport + * layer waits after receiving unique segments of a segmented message before + * discarding that segmented message in 5s steps. Valid range is 5000 - + * 80000ms, intermediate values are rounded down to the nearest multiple of + * 5s. The default value is 10000ms (10s). + * @endparblock + * @param[in] segment_interval_step @parblock + * SAR Receiver Segment Interval Step + * + * The SAR Receiver Segment Interval Step state indicates the interval between + * received segments of a segmented message in milliseconds. This is used to + * control rate of transmission of Segment Acknowledgment messages. Valid + * range is 10 - 160, intermediate values are rounded down to the nearest + * multiple of 10. The default value is 20ms. + * @endparblock + * @param[in] ack_retrans_count @parblock + * SAR Acknowledgment Retransmissions Count + * + * The SAR Acknowledgment Retransmissions Count state controls the maximum + * number of retransmissions of Segment Acknowledgment messages sent by the + * lower transport layer. Valid range is 0 - 3. The default value is 2, + * representing 2 retransmissions or 3 in total. + * @endparblock + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_sar_config_server_set_sar_receiver(uint8_t segments_threshold, + uint8_t ack_delay_increment, + uint32_t discard_timeout, + uint8_t segment_interval_step, + uint8_t ack_retrans_count); + +/** @} */ // end addtogroup sl_btmesh_sar_config_server + +/** + * @addtogroup sl_btmesh_private_beacon_client Bluetooth Mesh Private Beacon Client Model + * @{ + * + * @brief Bluetooth Mesh Private Beacon Client Model + * + * This class provides the commands and messages to interface with the Private + * Beacon Client Model. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_private_beacon_client_init_id 0x01640028 +#define sl_btmesh_cmd_private_beacon_client_deinit_id 0x02640028 +#define sl_btmesh_cmd_private_beacon_client_get_beacon_id 0x03640028 +#define sl_btmesh_cmd_private_beacon_client_set_beacon_id 0x04640028 +#define sl_btmesh_cmd_private_beacon_client_get_gatt_proxy_id 0x05640028 +#define sl_btmesh_cmd_private_beacon_client_set_gatt_proxy_id 0x06640028 +#define sl_btmesh_cmd_private_beacon_client_get_identity_id 0x07640028 +#define sl_btmesh_cmd_private_beacon_client_set_identity_id 0x08640028 +#define sl_btmesh_rsp_private_beacon_client_init_id 0x01640028 +#define sl_btmesh_rsp_private_beacon_client_deinit_id 0x02640028 +#define sl_btmesh_rsp_private_beacon_client_get_beacon_id 0x03640028 +#define sl_btmesh_rsp_private_beacon_client_set_beacon_id 0x04640028 +#define sl_btmesh_rsp_private_beacon_client_get_gatt_proxy_id 0x05640028 +#define sl_btmesh_rsp_private_beacon_client_set_gatt_proxy_id 0x06640028 +#define sl_btmesh_rsp_private_beacon_client_get_identity_id 0x07640028 +#define sl_btmesh_rsp_private_beacon_client_set_identity_id 0x08640028 + +/** + * @addtogroup sl_btmesh_evt_private_beacon_client_beacon_status sl_btmesh_evt_private_beacon_client_beacon_status + * @{ + * @brief Status event for @ref sl_btmesh_private_beacon_client_get_beacon and + * @ref sl_btmesh_private_beacon_client_set_beacon commands. + */ + +/** @brief Identifier of the beacon_status event */ +#define sl_btmesh_evt_private_beacon_client_beacon_status_id 0x016400a8 + +/***************************************************************************//** + * @brief Data structure of the beacon_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_private_beacon_client_beacon_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code + otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t state; /**< Private network beacon state of the node. + Valid values are: + - 0: Node is not broadcasting secure + network beacons + - 1: Node is broadcasting secure network + beacons */ + uint8_t random_update_steps; /**< Number of beacons that are to be sent + before changing the random of obfuscation. + Valid step values are from 0x00 to 0xff. + 0x00 means that random is updated for every + beacon send and 0x01-0xff tells in + multiples of 10 seconds how often random is + updated. */ +}); + +typedef struct sl_btmesh_evt_private_beacon_client_beacon_status_s sl_btmesh_evt_private_beacon_client_beacon_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_private_beacon_client_beacon_status + +/** + * @addtogroup sl_btmesh_evt_private_beacon_client_gatt_proxy_status sl_btmesh_evt_private_beacon_client_gatt_proxy_status + * @{ + * @brief Status event for @ref sl_btmesh_private_beacon_client_get_gatt_proxy + * and @ref sl_btmesh_private_beacon_client_set_gatt_proxy commands. + */ + +/** @brief Identifier of the gatt_proxy_status event */ +#define sl_btmesh_evt_private_beacon_client_gatt_proxy_status_id 0x026400a8 + +/***************************************************************************//** + * @brief Data structure of the gatt_proxy_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_private_beacon_client_gatt_proxy_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t state; /**< Private gatt proxy beacon state of the node. Valid + values are: + - 0: Node is not broadcasting private gatt proxy + beacons + - 1: Node is broadcasting private gatt proxy beacons */ +}); + +typedef struct sl_btmesh_evt_private_beacon_client_gatt_proxy_status_s sl_btmesh_evt_private_beacon_client_gatt_proxy_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_private_beacon_client_gatt_proxy_status + +/** + * @addtogroup sl_btmesh_evt_private_beacon_client_identity_status sl_btmesh_evt_private_beacon_client_identity_status + * @{ + * @brief Status event for @ref sl_btmesh_private_beacon_client_get_identity and + * @ref sl_btmesh_private_beacon_client_set_identity commands. + */ + +/** @brief Identifier of the identity_status event */ +#define sl_btmesh_evt_private_beacon_client_identity_status_id 0x036400a8 + +/***************************************************************************//** + * @brief Data structure of the identity_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_private_beacon_client_identity_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t status; /**< Foundation status of last request */ + uint16_t netkey_index; /**< Network key index for which the state is + configured */ + uint8_t state; /**< Private identity beacon state of the node. Valid + values are: + - 0: Node is not broadcasting private identity + beacons + - 1: Node is broadcasting private identity + beacons */ +}); + +typedef struct sl_btmesh_evt_private_beacon_client_identity_status_s sl_btmesh_evt_private_beacon_client_identity_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_private_beacon_client_identity_status + +/***************************************************************************//** + * + * Initialize the private beacon client. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_private_beacon_client_init(); + +/***************************************************************************//** + * + * Deinitialize the private beacon client. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_private_beacon_client_deinit(); + +/***************************************************************************//** + * + * Get the node's private network beacon state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_private_beacon_client_beacon_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_private_beacon_client_get_beacon(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set node private network beacon state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] state Secure network beacon value to set. Valid values are: + * - 0: Node is not broadcasting private network beacons + * - 1: Node is broadcasting private network beacons + * @param[in] random_update_steps Number of beacons that are to be sent before + * changing the random of obfuscation. Valid step values are from 0x00 to + * 0xff. 0x00 means that the random is updated for every beacon send. and + * 0x01-0xff tells how often random is updated in multiples of 10 seconds. + * Update of random will also trigger update of random address used in + * sending. Value 0x100 is used to indicate that no change in this parameter + * is desired. + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_private_beacon_client_beacon_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_private_beacon_client_set_beacon(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t state, + uint16_t random_update_steps, + uint32_t *handle); + +/***************************************************************************//** + * + * Get the node's private gatt proxy beacon state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_private_beacon_client_gatt_proxy_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_private_beacon_client_get_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set the node's private gatt proxy beacon state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] state Secure network beacon value to set. Valid values are: + * - 0: Node is not broadcasting private gatt proxy beacons + * - 1: Node is broadcasting private gatt proxy beacons + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_private_beacon_client_gatt_proxy_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_private_beacon_client_set_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t state, + uint32_t *handle); + +/***************************************************************************//** + * + * Get the node's private identity beacon state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] netkey_index Network key index for which the state is queried + * @param[out] handle Request handle. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_private_beacon_client_identity_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_private_beacon_client_get_identity(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle); + +/***************************************************************************//** + * + * Set the node's private node identity beacon state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] netkey_index Network key index for which the state is configured + * @param[in] state Node private beacon value to set. Valid values are: + * - 0: Node is not broadcasting private identity beacons + * - 1: Node is broadcasting private identity beacons + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_private_beacon_client_identity_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_private_beacon_client_set_identity(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint8_t state, + uint32_t *handle); + +/** @} */ // end addtogroup sl_btmesh_private_beacon_client + +/** + * @addtogroup sl_btmesh_private_beacon_server Bluetooth Mesh Private Beacon Server Model + * @{ + * + * @brief Bluetooth Mesh Private Beacon Server Model + * + * This class provides the commands and messages to interface with the Private + * Beacon Server Model. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_private_beacon_server_init_id 0x01650028 +#define sl_btmesh_cmd_private_beacon_server_deinit_id 0x02650028 +#define sl_btmesh_rsp_private_beacon_server_init_id 0x01650028 +#define sl_btmesh_rsp_private_beacon_server_deinit_id 0x02650028 + +/***************************************************************************//** + * + * Initialize the private beacon server. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_private_beacon_server_init(); + +/***************************************************************************//** + * + * Deinitialize the private beacon server. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_private_beacon_server_deinit(); + +/** @} */ // end addtogroup sl_btmesh_private_beacon_server + +/** + * @addtogroup sl_btmesh_lcd_client Bluetooth Mesh Large Composition Data Client Model + * @{ + * + * @brief Bluetooth Mesh Large Composition Data Client Model + * + * This class provides the commands and messages to interface with the Large + * Composition Data Client model. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_lcd_client_init_id 0x01660028 +#define sl_btmesh_cmd_lcd_client_deinit_id 0x02660028 +#define sl_btmesh_cmd_lcd_client_get_composition_data_id 0x03660028 +#define sl_btmesh_cmd_lcd_client_get_metadata_id 0x04660028 +#define sl_btmesh_rsp_lcd_client_init_id 0x01660028 +#define sl_btmesh_rsp_lcd_client_deinit_id 0x02660028 +#define sl_btmesh_rsp_lcd_client_get_composition_data_id 0x03660028 +#define sl_btmesh_rsp_lcd_client_get_metadata_id 0x04660028 + +/** + * @addtogroup sl_btmesh_evt_lcd_client_data_header sl_btmesh_evt_lcd_client_data_header + * @{ + * @brief Large Composition Data response message to the @ref + * sl_btmesh_lcd_client_get_composition_data or @ref + * sl_btmesh_lcd_client_get_metadata command + * + * This is a first event in a series, consists of page number, offset and total + * size of the requested page. + */ + +/** @brief Identifier of the data_header event */ +#define sl_btmesh_evt_lcd_client_data_header_id 0x016600a8 + +/***************************************************************************//** + * @brief Data structure of the data_header event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lcd_client_data_header_s +{ + uint32_t handle; /**< Request handle */ + uint8_t page_number; /**< Page number of the Composition Data */ + uint16_t offset; /**< Offset within the page */ + uint16_t total_size; /**< Total size of the page */ +}); + +typedef struct sl_btmesh_evt_lcd_client_data_header_s sl_btmesh_evt_lcd_client_data_header_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lcd_client_data_header + +/** + * @addtogroup sl_btmesh_evt_lcd_client_data sl_btmesh_evt_lcd_client_data + * @{ + * @brief Event reporting queried composition data page contents + * + * The content of the event is requested using the @ref + * sl_btmesh_lcd_client_get_composition_data or @ref + * sl_btmesh_lcd_client_get_metadata command. More than one event may be + * generated. This event preceedes by a @ref + * sl_btmesh_evt_lcd_client_data_header event. Page content is terminated by a + * @ref sl_btmesh_evt_lcd_client_data_end event. Note that the interpretation of + * the received data is page-specific. + */ + +/** @brief Identifier of the data event */ +#define sl_btmesh_evt_lcd_client_data_id 0x026600a8 + +/***************************************************************************//** + * @brief Data structure of the data event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lcd_client_data_s +{ + uint32_t handle; /**< Request handle */ + uint8array data; /**< Composition data page contents */ +}); + +typedef struct sl_btmesh_evt_lcd_client_data_s sl_btmesh_evt_lcd_client_data_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lcd_client_data + +/** + * @addtogroup sl_btmesh_evt_lcd_client_data_end sl_btmesh_evt_lcd_client_data_end + * @{ + * @brief Terminating event for the Composition Data, response to the @ref + * sl_btmesh_lcd_client_get_composition_data or @ref + * sl_btmesh_lcd_client_get_metadata command. + */ + +/** @brief Identifier of the data_end event */ +#define sl_btmesh_evt_lcd_client_data_end_id 0x036600a8 + +/***************************************************************************//** + * @brief Data structure of the data_end event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_lcd_client_data_end_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ +}); + +typedef struct sl_btmesh_evt_lcd_client_data_end_s sl_btmesh_evt_lcd_client_data_end_t; + +/** @} */ // end addtogroup sl_btmesh_evt_lcd_client_data_end + +/***************************************************************************//** + * + * Initializes the Large Composition Data Client model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lcd_client_init(); + +/***************************************************************************//** + * + * Deinitialize the Large Composition Data Client model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lcd_client_deinit(); + +/***************************************************************************//** + * + * Send a Large Composition Data Get to a LCD Server. + * + * @param[in] enc_netkey_index Network key index used to encrypt the request + * @param[in] server_address Destination server model address + * @param[in] page_number Page number of the Composition Data + * @param[in] offset Offset within the page + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lcd_client_data_header + * - @ref sl_btmesh_evt_lcd_client_data + * - @ref sl_btmesh_evt_lcd_client_data_end + * + ******************************************************************************/ +sl_status_t sl_btmesh_lcd_client_get_composition_data(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t page_number, + uint16_t offset, + uint32_t *handle); + +/***************************************************************************//** + * + * Send a Metadata request to a LCD Server. + * + * @param[in] enc_netkey_index Network key index used to encrypt the request + * @param[in] server_address Destination server model address + * @param[in] page_number Page number of the Composition Data + * @param[in] offset Offset within the page + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_lcd_client_data_header + * - @ref sl_btmesh_evt_lcd_client_data + * - @ref sl_btmesh_evt_lcd_client_data_end + * + ******************************************************************************/ +sl_status_t sl_btmesh_lcd_client_get_metadata(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t page_number, + uint16_t offset, + uint32_t *handle); + +/** @} */ // end addtogroup sl_btmesh_lcd_client + +/** + * @addtogroup sl_btmesh_lcd_server Bluetooth Mesh Large Composition Data Server Model + * @{ + * + * @brief Bluetooth Mesh Large Composition Data Server Model + * + * This class provides the commands and messages to interface with the Large + * Composition Data Server model. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_lcd_server_init_id 0x01670028 +#define sl_btmesh_cmd_lcd_server_deinit_id 0x02670028 +#define sl_btmesh_rsp_lcd_server_init_id 0x01670028 +#define sl_btmesh_rsp_lcd_server_deinit_id 0x02670028 + +/***************************************************************************//** + * + * Initializes the Large Composition Data Server model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lcd_server_init(); + +/***************************************************************************//** + * + * Deinitialize the Large Composition Data Server model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_lcd_server_deinit(); + +/** @} */ // end addtogroup sl_btmesh_lcd_server + +/** + * @addtogroup sl_btmesh_on_demand_private_proxy_client Bluetooth Mesh On-demand Private Proxy Client Model + * @{ + * + * @brief Bluetooth Mesh On-demand Private Proxy Client Model + * + * The On-Demand Private Proxy Client model is used to configure a node to + * advertise with Private Network Identity + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_on_demand_private_proxy_client_init_id 0x01680028 +#define sl_btmesh_cmd_on_demand_private_proxy_client_deinit_id 0x02680028 +#define sl_btmesh_cmd_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_id 0x03680028 +#define sl_btmesh_cmd_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_id 0x04680028 +#define sl_btmesh_rsp_on_demand_private_proxy_client_init_id 0x01680028 +#define sl_btmesh_rsp_on_demand_private_proxy_client_deinit_id 0x02680028 +#define sl_btmesh_rsp_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_id 0x03680028 +#define sl_btmesh_rsp_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_id 0x04680028 + +/** + * @addtogroup sl_btmesh_evt_on_demand_private_proxy_client_private_gatt_proxy_status sl_btmesh_evt_on_demand_private_proxy_client_private_gatt_proxy_status + * @{ + * @brief Status event for @ref + * sl_btmesh_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy and + * @ref + * sl_btmesh_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy + * commands + */ + +/** @brief Identifier of the private_gatt_proxy_status event */ +#define sl_btmesh_evt_on_demand_private_proxy_client_private_gatt_proxy_status_id 0x016800a8 + +/***************************************************************************//** + * @brief Data structure of the private_gatt_proxy_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_on_demand_private_proxy_client_private_gatt_proxy_status_s +{ + uint16_t result; /**< SL_STATUS_OK if successful. Error code otherwise. */ + uint32_t handle; /**< Request handle */ + uint8_t value; /**< On-Demand Private GATT proxy value of the node. Valid + values are: + - 0: Advertising with Private Network Identity type + cannot be enabled on demand + - 1-255: Advertising interval for Private Network + Identity in seconds */ +}); + +typedef struct sl_btmesh_evt_on_demand_private_proxy_client_private_gatt_proxy_status_s sl_btmesh_evt_on_demand_private_proxy_client_private_gatt_proxy_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_on_demand_private_proxy_client_private_gatt_proxy_status + +/***************************************************************************//** + * + * Initialize the On-Demand Private Proxy Client model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_on_demand_private_proxy_client_init(); + +/***************************************************************************//** + * + * Deinitialize the On-Demand Private Proxy Client model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_on_demand_private_proxy_client_deinit(); + +/***************************************************************************//** + * + * Get node On-Demand Private GATT proxy state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref + * sl_btmesh_evt_on_demand_private_proxy_client_private_gatt_proxy_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle); + +/***************************************************************************//** + * + * Set node On-Demand Private GATT proxy state. + * + * @param[in] enc_netkey_index Network key used to encrypt the request on the + * network layer + * @param[in] server_address Destination node primary element address + * @param[in] value On-Demand Private GATT proxy value to set. Valid values are: + * - 0: Advertising with Private Network Identity type cannot be enabled on + * demand + * - 1: Advertising interval for Private Network Identity in seconds + * @param[out] handle Request handle + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref + * sl_btmesh_evt_on_demand_private_proxy_client_private_gatt_proxy_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint32_t *handle); + +/** @} */ // end addtogroup sl_btmesh_on_demand_private_proxy_client + +/** + * @addtogroup sl_btmesh_solicitation_config_client Bluetooth Mesh Solicitation PDU RPL Config Client Model + * @{ + * + * @brief Bluetooth Mesh Solicitation PDU RPL Config Client Model + * + * The Solicitation PDU RPL Configuration Client model is used to support the + * functionality of removing addresses from the solicitation replay protection + * list of a node that supports the Solicitation PDU RPL Configuration Server + * model. A Configuration Manager can use the Solicitation PDU RPL Configuration + * Client model to remove from the solicitation replay protection list the + * addresses that have been reassigned to a new node after a node was removed + * from the network. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_solicitation_config_client_init_id 0x01690028 +#define sl_btmesh_cmd_solicitation_config_client_deinit_id 0x02690028 +#define sl_btmesh_cmd_solicitation_config_client_clear_items_id 0x03690028 +#define sl_btmesh_rsp_solicitation_config_client_init_id 0x01690028 +#define sl_btmesh_rsp_solicitation_config_client_deinit_id 0x02690028 +#define sl_btmesh_rsp_solicitation_config_client_clear_items_id 0x03690028 + +/** + * @addtogroup sl_btmesh_evt_solicitation_config_client_items_status sl_btmesh_evt_solicitation_config_client_items_status + * @{ + * @brief Indicate an incoming Solicitation PDU RPL Items Status message, + * received as a response to the @ref + * sl_btmesh_solicitation_config_client_clear_items command if acknowledged mode + * used. + */ + +/** @brief Identifier of the items_status event */ +#define sl_btmesh_evt_solicitation_config_client_items_status_id 0x016900a8 + +/***************************************************************************//** + * @brief Data structure of the items_status event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_solicitation_config_client_items_status_s +{ + uint16_t src; /**< Server address */ + uint16_t dst; /**< Client address */ + uint16_t appkey_index; /**< App key index */ + uint16_t range_start; /**< 15 least significant bits of the starting + unicast address */ + uint8_t length_present; /**< Indicates the presence or absence of the + RangeLength field */ + uint8_t range_length; /**< If present, containsNumber of addresses in the + range (0x02 – 0xFF), otherwise 0 */ +}); + +typedef struct sl_btmesh_evt_solicitation_config_client_items_status_s sl_btmesh_evt_solicitation_config_client_items_status_t; + +/** @} */ // end addtogroup sl_btmesh_evt_solicitation_config_client_items_status + +/***************************************************************************//** + * + * Initialize the Solicitation PDU RPL Configuration Client model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_solicitation_config_client_init(); + +/***************************************************************************//** + * + * Deinitialize the Solicitation PDU RPL Configuration Client model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_solicitation_config_client_deinit(); + +/***************************************************************************//** + * + * Sends a SOLICITATION_PDU_RPL_ITEMS_CLEAR message to remove one or more items + * from the solicitation replay protection list of a node. + * + * @param[in] dst Destination address + * @param[in] appkey_index The application key index to use + * @param[in] range_start 15 least significant bits of the starting unicast + * address + * @param[in] length_present Indicates the presence or absence of the + * RangeLength field + * @param[in] range_length If present, containsNumber of addresses in the range + * (0x02 – 0xFF), otherwise 0 + * @param[in] response_required Defines whether acknowledged or unacknowledged + * message shall be used + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + * @b Events + * - @ref sl_btmesh_evt_solicitation_config_client_items_status + * + ******************************************************************************/ +sl_status_t sl_btmesh_solicitation_config_client_clear_items(uint16_t dst, + uint16_t appkey_index, + uint16_t range_start, + uint8_t length_present, + uint8_t range_length, + uint8_t response_required); + +/** @} */ // end addtogroup sl_btmesh_solicitation_config_client + +/** + * @addtogroup sl_btmesh_on_demand_private_proxy_server Bluetooth Mesh On-demand Private Proxy Server Model + * @{ + * + * @brief Bluetooth Mesh On-demand Private Proxy Server Model + * + * The On-Demand Private Proxy Server model is used to support the configuration + * of the advertising with Private Network Identity type functionality of a + * node. Requires the presence of the corresponding Solicitation PDU RPL + * Configuration Server model, which is initialized with it at the same time + * (see init command). + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_on_demand_private_proxy_server_init_id 0x016a0028 +#define sl_btmesh_cmd_on_demand_private_proxy_server_deinit_id 0x026a0028 +#define sl_btmesh_rsp_on_demand_private_proxy_server_init_id 0x016a0028 +#define sl_btmesh_rsp_on_demand_private_proxy_server_deinit_id 0x026a0028 + +/***************************************************************************//** + * + * Initialize the On-Demand Private Proxy Server model, and the Solicitation PDU + * RPL Configuration Server model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_on_demand_private_proxy_server_init(); + +/***************************************************************************//** + * + * Deinitialize the On-Demand Private Proxy Server model, and the Solicitation + * PDU RPL Configuration Server model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_on_demand_private_proxy_server_deinit(); + +/** @} */ // end addtogroup sl_btmesh_on_demand_private_proxy_server + +/** + * @addtogroup sl_btmesh_silabs_config_server Bluetooth Mesh Silabs Configuration Server Vendor Model + * @{ + * + * @brief Bluetooth Mesh Silabs Configuration Server Vendor Model + * + * Silicon Labs Configuration Server vendor model. It provides the functionality + * of configuration of global and per-model specific settings of a node. + */ + +/* Command and Response IDs */ +#define sl_btmesh_cmd_silabs_config_server_init_id 0x006b0028 +#define sl_btmesh_cmd_silabs_config_server_deinit_id 0x016b0028 +#define sl_btmesh_cmd_silabs_config_server_set_tx_id 0x026b0028 +#define sl_btmesh_cmd_silabs_config_server_get_tx_id 0x036b0028 +#define sl_btmesh_cmd_silabs_config_server_set_model_enable_id 0x046b0028 +#define sl_btmesh_cmd_silabs_config_server_get_model_enable_id 0x056b0028 +#define sl_btmesh_cmd_silabs_config_server_set_network_pdu_id 0x066b0028 +#define sl_btmesh_cmd_silabs_config_server_get_network_pdu_id 0x076b0028 +#define sl_btmesh_rsp_silabs_config_server_init_id 0x006b0028 +#define sl_btmesh_rsp_silabs_config_server_deinit_id 0x016b0028 +#define sl_btmesh_rsp_silabs_config_server_set_tx_id 0x026b0028 +#define sl_btmesh_rsp_silabs_config_server_get_tx_id 0x036b0028 +#define sl_btmesh_rsp_silabs_config_server_set_model_enable_id 0x046b0028 +#define sl_btmesh_rsp_silabs_config_server_get_model_enable_id 0x056b0028 +#define sl_btmesh_rsp_silabs_config_server_set_network_pdu_id 0x066b0028 +#define sl_btmesh_rsp_silabs_config_server_get_network_pdu_id 0x076b0028 + +/** + * @addtogroup sl_btmesh_evt_silabs_config_server_tx_changed sl_btmesh_evt_silabs_config_server_tx_changed + * @{ + * @brief TX PHY configuration value has changed + * + * New values included in the parameters. + */ + +/** @brief Identifier of the tx_changed event */ +#define sl_btmesh_evt_silabs_config_server_tx_changed_id 0x006b00a8 + +/***************************************************************************//** + * @brief Data structure of the tx_changed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_silabs_config_server_tx_changed_s +{ + uint8_t phy; /**< TX PHY for long packets (packets that would be + segmented). + - 1: LE 1M PHY + - 2: LE 2M PHY */ + uint32_t options; /**< TX options. NOTE: Currently not used: reserved for + future use. */ +}); + +typedef struct sl_btmesh_evt_silabs_config_server_tx_changed_s sl_btmesh_evt_silabs_config_server_tx_changed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_silabs_config_server_tx_changed + +/** + * @addtogroup sl_btmesh_evt_silabs_config_server_model_option_changed sl_btmesh_evt_silabs_config_server_model_option_changed + * @{ + * @brief TX over AE on per-model basis enable/disable configuration value has + * changed. + */ + +/** @brief Identifier of the model_option_changed event */ +#define sl_btmesh_evt_silabs_config_server_model_option_changed_id 0x016b00a8 + +/***************************************************************************//** + * @brief Data structure of the model_option_changed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_silabs_config_server_model_option_changed_s +{ + uint8_t elem_index; /**< Element index of model to configure. */ + uint16_t vendor_id; /**< Vendor ID of model to configure. */ + uint16_t model_id; /**< Model ID of model to configure. */ + uint16_t value; /**< Extended packet size to set, currently 1 to use + extended 0 to not */ +}); + +typedef struct sl_btmesh_evt_silabs_config_server_model_option_changed_s sl_btmesh_evt_silabs_config_server_model_option_changed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_silabs_config_server_model_option_changed + +/** + * @addtogroup sl_btmesh_evt_silabs_config_server_network_pdu_changed sl_btmesh_evt_silabs_config_server_network_pdu_changed + * @{ + * @brief Network PDU configuration value has changed. + */ + +/** @brief Identifier of the network_pdu_changed event */ +#define sl_btmesh_evt_silabs_config_server_network_pdu_changed_id 0x026b00a8 + +/***************************************************************************//** + * @brief Data structure of the network_pdu_changed event + ******************************************************************************/ +PACKSTRUCT( struct sl_btmesh_evt_silabs_config_server_network_pdu_changed_s +{ + uint16_t max_size; /**< Max size of packet to be used, in range 29 - 227 + bytes. */ +}); + +typedef struct sl_btmesh_evt_silabs_config_server_network_pdu_changed_s sl_btmesh_evt_silabs_config_server_network_pdu_changed_t; + +/** @} */ // end addtogroup sl_btmesh_evt_silabs_config_server_network_pdu_changed + +/***************************************************************************//** + * + * Initialize Silabs Configuration Server model + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_server_init(); + +/***************************************************************************//** + * + * Deinitialize Silabs Configuration Server model. After this call, the model + * cannot be used until it is initialized again. See @ref + * sl_btmesh_silabs_config_server_init. + * + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_server_deinit(); + +/***************************************************************************//** + * + * Set TX PHY for the node. + * + * @param[in] phy TX PHY for long packets (packets that would be segmented). + * - 1: LE 1M PHY + * - 2: LE 2M PHY + * @param[in] options TX options. NOTE: Currently not used: reserved for future + * use. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_server_set_tx(uint8_t phy, + uint32_t options); + +/***************************************************************************//** + * + * Get current TX PHY. + * + * @param[out] phy TX PHY for long packets (packets that would be segmented). + * - 1: LE 1M PHY + * - 2: LE 2M PHY + * @param[out] options TX options. NOTE: Currently not used: reserved for future + * use. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_server_get_tx(uint8_t *phy, + uint32_t *options); + +/***************************************************************************//** + * + * Enable/Disable usage of extended packets for a model. + * + * @param[in] elem_index Element index of model to configure. + * @param[in] vendor_id Vendor ID of model to configure. + * @param[in] model_id Model ID of model to configure. + * @param[in] value Extended packet size to set, currently 1 to use extended 0 + * to not + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_server_set_model_enable(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t value); + +/***************************************************************************//** + * + * Get model settings. + * + * @param[in] elem_index Element index of model to get. + * @param[in] vendor_id Vendor ID of model to get. + * @param[in] model_id Model ID of model to get. + * @param[out] value Extended packet size is used, currently 1 is in use, 0 is + * not + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_server_get_model_enable(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t *value); + +/***************************************************************************//** + * + * Set max network pdu for the node. + * + * @param[in] max_size Max size of packet to be used, in range 29 - 227 bytes. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_server_set_network_pdu(uint16_t max_size); + +/***************************************************************************//** + * + * Get max network pdu in use. + * + * @param[out] max_size Max size of packet, in range 29 - 227 bytes. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + * + ******************************************************************************/ +sl_status_t sl_btmesh_silabs_config_server_get_network_pdu(uint16_t *max_size); + +/** @} */ // end addtogroup sl_btmesh_silabs_config_server + + +/***************************************************************************//** + * @addtogroup sl_btmesh_common_types BTMESH Common Types + * @{ + * @brief BTMESH common types + */ + +/** + * @brief Data structure of BTMESH API messages + */ +PACKSTRUCT( struct sl_btmesh_msg { + /** API protocol header consisting of event identifier and data length */ + uint32_t header; + + /** Union of API event types */ + union { + uint8_t handle; + sl_btmesh_evt_node_initialized_t evt_node_initialized; /**< Data field for node initialized event*/ + sl_btmesh_evt_node_provisioned_t evt_node_provisioned; /**< Data field for node provisioned event*/ + sl_btmesh_evt_node_config_get_t evt_node_config_get; /**< Data field for node config_get event*/ + sl_btmesh_evt_node_config_set_t evt_node_config_set; /**< Data field for node config_set event*/ + sl_btmesh_evt_node_display_output_oob_t evt_node_display_output_oob; /**< Data field for node display_output_oob event*/ + sl_btmesh_evt_node_input_oob_request_t evt_node_input_oob_request; /**< Data field for node input_oob_request event*/ + sl_btmesh_evt_node_provisioning_started_t evt_node_provisioning_started; /**< Data field for node provisioning_started event*/ + sl_btmesh_evt_node_provisioning_failed_t evt_node_provisioning_failed; /**< Data field for node provisioning_failed event*/ + sl_btmesh_evt_node_key_added_t evt_node_key_added; /**< Data field for node key_added event*/ + sl_btmesh_evt_node_model_config_changed_t evt_node_model_config_changed; /**< Data field for node model_config_changed event*/ + sl_btmesh_evt_node_ivrecovery_needed_t evt_node_ivrecovery_needed; /**< Data field for node ivrecovery_needed event*/ + sl_btmesh_evt_node_changed_ivupdate_state_t evt_node_changed_ivupdate_state; /**< Data field for node changed_ivupdate_state event*/ + sl_btmesh_evt_node_key_removed_t evt_node_key_removed; /**< Data field for node key_removed event*/ + sl_btmesh_evt_node_key_updated_t evt_node_key_updated; /**< Data field for node key_updated event*/ + sl_btmesh_evt_node_heartbeat_t evt_node_heartbeat; /**< Data field for node heartbeat event*/ + sl_btmesh_evt_node_heartbeat_start_t evt_node_heartbeat_start; /**< Data field for node heartbeat_start event*/ + sl_btmesh_evt_node_heartbeat_stop_t evt_node_heartbeat_stop; /**< Data field for node heartbeat_stop event*/ + sl_btmesh_evt_node_beacon_received_t evt_node_beacon_received; /**< Data field for node beacon_received event*/ + sl_btmesh_evt_node_local_dcd_data_t evt_node_local_dcd_data; /**< Data field for node local_dcd_data event*/ + sl_btmesh_evt_node_local_dcd_data_end_t evt_node_local_dcd_data_end; /**< Data field for node local_dcd_data_end event*/ + sl_btmesh_evt_node_local_model_metadata_page_t evt_node_local_model_metadata_page; /**< Data field for node local_model_metadata_page event*/ + sl_btmesh_evt_node_local_model_metadata_page_end_t evt_node_local_model_metadata_page_end; /**< Data field for node local_model_metadata_page_end event*/ + sl_btmesh_evt_node_start_received_t evt_node_start_received; /**< Data field for node start_received event*/ + sl_btmesh_evt_node_address_updated_t evt_node_address_updated; /**< Data field for node address_updated event*/ + sl_btmesh_evt_prov_initialized_t evt_prov_initialized; /**< Data field for prov initialized event*/ + sl_btmesh_evt_prov_provisioning_suspended_t evt_prov_provisioning_suspended; /**< Data field for prov provisioning_suspended event*/ + sl_btmesh_evt_prov_capabilities_t evt_prov_capabilities; /**< Data field for prov capabilities event*/ + sl_btmesh_evt_prov_provisioning_failed_t evt_prov_provisioning_failed; /**< Data field for prov provisioning_failed event*/ + sl_btmesh_evt_prov_device_provisioned_t evt_prov_device_provisioned; /**< Data field for prov device_provisioned event*/ + sl_btmesh_evt_prov_unprov_beacon_t evt_prov_unprov_beacon; /**< Data field for prov unprov_beacon event*/ + sl_btmesh_evt_prov_oob_pkey_request_t evt_prov_oob_pkey_request; /**< Data field for prov oob_pkey_request event*/ + sl_btmesh_evt_prov_oob_auth_request_t evt_prov_oob_auth_request; /**< Data field for prov oob_auth_request event*/ + sl_btmesh_evt_prov_oob_display_input_t evt_prov_oob_display_input; /**< Data field for prov oob_display_input event*/ + sl_btmesh_evt_prov_ddb_list_t evt_prov_ddb_list; /**< Data field for prov ddb_list event*/ + sl_btmesh_evt_prov_uri_t evt_prov_uri; /**< Data field for prov uri event*/ + sl_btmesh_evt_prov_key_refresh_phase_update_t evt_prov_key_refresh_phase_update; /**< Data field for prov key_refresh_phase_update event*/ + sl_btmesh_evt_prov_key_refresh_node_update_t evt_prov_key_refresh_node_update; /**< Data field for prov key_refresh_node_update event*/ + sl_btmesh_evt_prov_key_refresh_complete_t evt_prov_key_refresh_complete; /**< Data field for prov key_refresh_complete event*/ + sl_btmesh_evt_prov_add_ddb_entry_complete_t evt_prov_add_ddb_entry_complete; /**< Data field for prov add_ddb_entry_complete event*/ + sl_btmesh_evt_prov_delete_ddb_entry_complete_t evt_prov_delete_ddb_entry_complete; /**< Data field for prov delete_ddb_entry_complete event*/ + sl_btmesh_evt_prov_initialization_failed_t evt_prov_initialization_failed; /**< Data field for prov initialization_failed event*/ + sl_btmesh_evt_prov_provisioning_records_list_t evt_prov_provisioning_records_list; /**< Data field for prov provisioning_records_list event*/ + sl_btmesh_evt_prov_provisioning_record_data_t evt_prov_provisioning_record_data; /**< Data field for prov provisioning_record_data event*/ + sl_btmesh_evt_prov_start_sent_t evt_prov_start_sent; /**< Data field for prov start_sent event*/ + sl_btmesh_evt_proxy_connected_t evt_proxy_connected; /**< Data field for proxy connected event*/ + sl_btmesh_evt_proxy_disconnected_t evt_proxy_disconnected; /**< Data field for proxy disconnected event*/ + sl_btmesh_evt_proxy_filter_status_t evt_proxy_filter_status; /**< Data field for proxy filter_status event*/ + sl_btmesh_evt_silabs_config_client_tx_status_t evt_silabs_config_client_tx_status; /**< Data field for silabs_config_client tx_status event*/ + sl_btmesh_evt_silabs_config_client_model_status_t evt_silabs_config_client_model_status; /**< Data field for silabs_config_client model_status event*/ + sl_btmesh_evt_silabs_config_client_network_pdu_status_t evt_silabs_config_client_network_pdu_status; /**< Data field for silabs_config_client network_pdu_status event*/ + sl_btmesh_evt_vendor_model_receive_t evt_vendor_model_receive; /**< Data field for vendor_model receive event*/ + sl_btmesh_evt_vendor_model_send_complete_t evt_vendor_model_send_complete; /**< Data field for vendor_model send_complete event*/ + sl_btmesh_evt_health_client_server_status_t evt_health_client_server_status; /**< Data field for health_client server_status event*/ + sl_btmesh_evt_health_client_server_status_period_t evt_health_client_server_status_period; /**< Data field for health_client server_status_period event*/ + sl_btmesh_evt_health_client_server_status_attention_t evt_health_client_server_status_attention; /**< Data field for health_client server_status_attention event*/ + sl_btmesh_evt_health_server_attention_t evt_health_server_attention; /**< Data field for health_server attention event*/ + sl_btmesh_evt_health_server_test_request_t evt_health_server_test_request; /**< Data field for health_server test_request event*/ + sl_btmesh_evt_generic_client_server_status_t evt_generic_client_server_status; /**< Data field for generic_client server_status event*/ + sl_btmesh_evt_generic_server_client_request_t evt_generic_server_client_request; /**< Data field for generic_server client_request event*/ + sl_btmesh_evt_generic_server_state_changed_t evt_generic_server_state_changed; /**< Data field for generic_server state_changed event*/ + sl_btmesh_evt_generic_server_state_recall_t evt_generic_server_state_recall; /**< Data field for generic_server state_recall event*/ + sl_btmesh_evt_test_local_heartbeat_subscription_complete_t evt_test_local_heartbeat_subscription_complete; /**< Data field for test local_heartbeat_subscription_complete event*/ + sl_btmesh_evt_test_replay_protection_list_entry_set_t evt_test_replay_protection_list_entry_set; /**< Data field for test replay_protection_list_entry_set event*/ + sl_btmesh_evt_test_replay_protection_list_entry_cleared_t evt_test_replay_protection_list_entry_cleared; /**< Data field for test replay_protection_list_entry_cleared event*/ + sl_btmesh_evt_test_replay_protection_list_saved_t evt_test_replay_protection_list_saved; /**< Data field for test replay_protection_list_saved event*/ + sl_btmesh_evt_lpn_friendship_established_t evt_lpn_friendship_established; /**< Data field for lpn friendship_established event*/ + sl_btmesh_evt_lpn_friendship_failed_t evt_lpn_friendship_failed; /**< Data field for lpn friendship_failed event*/ + sl_btmesh_evt_lpn_friendship_terminated_t evt_lpn_friendship_terminated; /**< Data field for lpn friendship_terminated event*/ + sl_btmesh_evt_friend_friendship_established_t evt_friend_friendship_established; /**< Data field for friend friendship_established event*/ + sl_btmesh_evt_friend_friendship_terminated_t evt_friend_friendship_terminated; /**< Data field for friend friendship_terminated event*/ + sl_btmesh_evt_config_client_request_modified_t evt_config_client_request_modified; /**< Data field for config_client request_modified event*/ + sl_btmesh_evt_config_client_netkey_status_t evt_config_client_netkey_status; /**< Data field for config_client netkey_status event*/ + sl_btmesh_evt_config_client_netkey_list_t evt_config_client_netkey_list; /**< Data field for config_client netkey_list event*/ + sl_btmesh_evt_config_client_netkey_list_end_t evt_config_client_netkey_list_end; /**< Data field for config_client netkey_list_end event*/ + sl_btmesh_evt_config_client_appkey_status_t evt_config_client_appkey_status; /**< Data field for config_client appkey_status event*/ + sl_btmesh_evt_config_client_appkey_list_t evt_config_client_appkey_list; /**< Data field for config_client appkey_list event*/ + sl_btmesh_evt_config_client_appkey_list_end_t evt_config_client_appkey_list_end; /**< Data field for config_client appkey_list_end event*/ + sl_btmesh_evt_config_client_binding_status_t evt_config_client_binding_status; /**< Data field for config_client binding_status event*/ + sl_btmesh_evt_config_client_bindings_list_t evt_config_client_bindings_list; /**< Data field for config_client bindings_list event*/ + sl_btmesh_evt_config_client_bindings_list_end_t evt_config_client_bindings_list_end; /**< Data field for config_client bindings_list_end event*/ + sl_btmesh_evt_config_client_model_pub_status_t evt_config_client_model_pub_status; /**< Data field for config_client model_pub_status event*/ + sl_btmesh_evt_config_client_model_sub_status_t evt_config_client_model_sub_status; /**< Data field for config_client model_sub_status event*/ + sl_btmesh_evt_config_client_subs_list_t evt_config_client_subs_list; /**< Data field for config_client subs_list event*/ + sl_btmesh_evt_config_client_subs_list_end_t evt_config_client_subs_list_end; /**< Data field for config_client subs_list_end event*/ + sl_btmesh_evt_config_client_heartbeat_pub_status_t evt_config_client_heartbeat_pub_status; /**< Data field for config_client heartbeat_pub_status event*/ + sl_btmesh_evt_config_client_heartbeat_sub_status_t evt_config_client_heartbeat_sub_status; /**< Data field for config_client heartbeat_sub_status event*/ + sl_btmesh_evt_config_client_beacon_status_t evt_config_client_beacon_status; /**< Data field for config_client beacon_status event*/ + sl_btmesh_evt_config_client_default_ttl_status_t evt_config_client_default_ttl_status; /**< Data field for config_client default_ttl_status event*/ + sl_btmesh_evt_config_client_gatt_proxy_status_t evt_config_client_gatt_proxy_status; /**< Data field for config_client gatt_proxy_status event*/ + sl_btmesh_evt_config_client_relay_status_t evt_config_client_relay_status; /**< Data field for config_client relay_status event*/ + sl_btmesh_evt_config_client_network_transmit_status_t evt_config_client_network_transmit_status; /**< Data field for config_client network_transmit_status event*/ + sl_btmesh_evt_config_client_identity_status_t evt_config_client_identity_status; /**< Data field for config_client identity_status event*/ + sl_btmesh_evt_config_client_friend_status_t evt_config_client_friend_status; /**< Data field for config_client friend_status event*/ + sl_btmesh_evt_config_client_key_refresh_phase_status_t evt_config_client_key_refresh_phase_status; /**< Data field for config_client key_refresh_phase_status event*/ + sl_btmesh_evt_config_client_lpn_polltimeout_status_t evt_config_client_lpn_polltimeout_status; /**< Data field for config_client lpn_polltimeout_status event*/ + sl_btmesh_evt_config_client_dcd_data_t evt_config_client_dcd_data; /**< Data field for config_client dcd_data event*/ + sl_btmesh_evt_config_client_dcd_data_end_t evt_config_client_dcd_data_end; /**< Data field for config_client dcd_data_end event*/ + sl_btmesh_evt_config_client_reset_status_t evt_config_client_reset_status; /**< Data field for config_client reset_status event*/ + sl_btmesh_evt_config_client_obo_ack_received_t evt_config_client_obo_ack_received; /**< Data field for config_client obo_ack_received event*/ + sl_btmesh_evt_mbt_client_server_information_status_t evt_mbt_client_server_information_status; /**< Data field for mbt_client server_information_status event*/ + sl_btmesh_evt_mbt_client_query_information_complete_t evt_mbt_client_query_information_complete; /**< Data field for mbt_client query_information_complete event*/ + sl_btmesh_evt_mbt_client_server_transfer_status_t evt_mbt_client_server_transfer_status; /**< Data field for mbt_client server_transfer_status event*/ + sl_btmesh_evt_mbt_client_start_transfer_complete_t evt_mbt_client_start_transfer_complete; /**< Data field for mbt_client start_transfer_complete event*/ + sl_btmesh_evt_mbt_client_server_block_status_t evt_mbt_client_server_block_status; /**< Data field for mbt_client server_block_status event*/ + sl_btmesh_evt_mbt_client_start_block_complete_t evt_mbt_client_start_block_complete; /**< Data field for mbt_client start_block_complete event*/ + sl_btmesh_evt_mbt_client_send_chunk_request_t evt_mbt_client_send_chunk_request; /**< Data field for mbt_client send_chunk_request event*/ + sl_btmesh_evt_mbt_client_server_partial_block_report_t evt_mbt_client_server_partial_block_report; /**< Data field for mbt_client server_partial_block_report event*/ + sl_btmesh_evt_mbt_client_send_chunks_complete_t evt_mbt_client_send_chunks_complete; /**< Data field for mbt_client send_chunks_complete event*/ + sl_btmesh_evt_mbt_client_query_block_status_complete_t evt_mbt_client_query_block_status_complete; /**< Data field for mbt_client query_block_status_complete event*/ + sl_btmesh_evt_mbt_client_tx_complete_t evt_mbt_client_tx_complete; /**< Data field for mbt_client tx_complete event*/ + sl_btmesh_evt_mbt_client_server_failed_t evt_mbt_client_server_failed; /**< Data field for mbt_client server_failed event*/ + sl_btmesh_evt_mbt_client_transfer_complete_t evt_mbt_client_transfer_complete; /**< Data field for mbt_client transfer_complete event*/ + sl_btmesh_evt_mbt_server_state_changed_t evt_mbt_server_state_changed; /**< Data field for mbt_server state_changed event*/ + sl_btmesh_evt_mbt_server_transfer_start_req_t evt_mbt_server_transfer_start_req; /**< Data field for mbt_server transfer_start_req event*/ + sl_btmesh_evt_mbt_server_block_start_t evt_mbt_server_block_start; /**< Data field for mbt_server block_start event*/ + sl_btmesh_evt_mbt_server_chunk_t evt_mbt_server_chunk; /**< Data field for mbt_server chunk event*/ + sl_btmesh_evt_mbt_server_block_complete_t evt_mbt_server_block_complete; /**< Data field for mbt_server block_complete event*/ + sl_btmesh_evt_mbt_server_transfer_cancel_t evt_mbt_server_transfer_cancel; /**< Data field for mbt_server transfer_cancel event*/ + sl_btmesh_evt_mbt_server_partial_block_report_tx_complete_t evt_mbt_server_partial_block_report_tx_complete; /**< Data field for mbt_server partial_block_report_tx_complete event*/ + sl_btmesh_evt_sensor_server_get_request_t evt_sensor_server_get_request; /**< Data field for sensor_server get_request event*/ + sl_btmesh_evt_sensor_server_get_column_request_t evt_sensor_server_get_column_request; /**< Data field for sensor_server get_column_request event*/ + sl_btmesh_evt_sensor_server_get_series_request_t evt_sensor_server_get_series_request; /**< Data field for sensor_server get_series_request event*/ + sl_btmesh_evt_sensor_server_publish_t evt_sensor_server_publish; /**< Data field for sensor_server publish event*/ + sl_btmesh_evt_sensor_setup_server_get_cadence_request_t evt_sensor_setup_server_get_cadence_request; /**< Data field for sensor_setup_server get_cadence_request event*/ + sl_btmesh_evt_sensor_setup_server_set_cadence_request_t evt_sensor_setup_server_set_cadence_request; /**< Data field for sensor_setup_server set_cadence_request event*/ + sl_btmesh_evt_sensor_setup_server_get_settings_request_t evt_sensor_setup_server_get_settings_request; /**< Data field for sensor_setup_server get_settings_request event*/ + sl_btmesh_evt_sensor_setup_server_get_setting_request_t evt_sensor_setup_server_get_setting_request; /**< Data field for sensor_setup_server get_setting_request event*/ + sl_btmesh_evt_sensor_setup_server_set_setting_request_t evt_sensor_setup_server_set_setting_request; /**< Data field for sensor_setup_server set_setting_request event*/ + sl_btmesh_evt_sensor_setup_server_publish_t evt_sensor_setup_server_publish; /**< Data field for sensor_setup_server publish event*/ + sl_btmesh_evt_sensor_client_descriptor_status_t evt_sensor_client_descriptor_status; /**< Data field for sensor_client descriptor_status event*/ + sl_btmesh_evt_sensor_client_cadence_status_t evt_sensor_client_cadence_status; /**< Data field for sensor_client cadence_status event*/ + sl_btmesh_evt_sensor_client_settings_status_t evt_sensor_client_settings_status; /**< Data field for sensor_client settings_status event*/ + sl_btmesh_evt_sensor_client_setting_status_t evt_sensor_client_setting_status; /**< Data field for sensor_client setting_status event*/ + sl_btmesh_evt_sensor_client_status_t evt_sensor_client_status; /**< Data field for sensor_client status event*/ + sl_btmesh_evt_sensor_client_column_status_t evt_sensor_client_column_status; /**< Data field for sensor_client column_status event*/ + sl_btmesh_evt_sensor_client_series_status_t evt_sensor_client_series_status; /**< Data field for sensor_client series_status event*/ + sl_btmesh_evt_sensor_client_publish_t evt_sensor_client_publish; /**< Data field for sensor_client publish event*/ + sl_btmesh_evt_fw_update_client_info_status_current_fwid_t evt_fw_update_client_info_status_current_fwid; /**< Data field for fw_update_client info_status_current_fwid event*/ + sl_btmesh_evt_fw_update_client_info_status_update_uri_t evt_fw_update_client_info_status_update_uri; /**< Data field for fw_update_client info_status_update_uri event*/ + sl_btmesh_evt_fw_update_client_update_status_t evt_fw_update_client_update_status; /**< Data field for fw_update_client update_status event*/ + sl_btmesh_evt_fw_update_client_metadata_status_t evt_fw_update_client_metadata_status; /**< Data field for fw_update_client metadata_status event*/ + sl_btmesh_evt_lc_client_mode_status_t evt_lc_client_mode_status; /**< Data field for lc_client mode_status event*/ + sl_btmesh_evt_lc_client_om_status_t evt_lc_client_om_status; /**< Data field for lc_client om_status event*/ + sl_btmesh_evt_lc_client_light_onoff_status_t evt_lc_client_light_onoff_status; /**< Data field for lc_client light_onoff_status event*/ + sl_btmesh_evt_lc_client_property_status_t evt_lc_client_property_status; /**< Data field for lc_client property_status event*/ + sl_btmesh_evt_lc_server_mode_updated_t evt_lc_server_mode_updated; /**< Data field for lc_server mode_updated event*/ + sl_btmesh_evt_lc_server_om_updated_t evt_lc_server_om_updated; /**< Data field for lc_server om_updated event*/ + sl_btmesh_evt_lc_server_light_onoff_updated_t evt_lc_server_light_onoff_updated; /**< Data field for lc_server light_onoff_updated event*/ + sl_btmesh_evt_lc_server_occupancy_updated_t evt_lc_server_occupancy_updated; /**< Data field for lc_server occupancy_updated event*/ + sl_btmesh_evt_lc_server_ambient_lux_level_updated_t evt_lc_server_ambient_lux_level_updated; /**< Data field for lc_server ambient_lux_level_updated event*/ + sl_btmesh_evt_lc_server_linear_output_updated_t evt_lc_server_linear_output_updated; /**< Data field for lc_server linear_output_updated event*/ + sl_btmesh_evt_lc_server_state_updated_t evt_lc_server_state_updated; /**< Data field for lc_server state_updated event*/ + sl_btmesh_evt_lc_server_regulator_debug_info_t evt_lc_server_regulator_debug_info; /**< Data field for lc_server regulator_debug_info event*/ + sl_btmesh_evt_lc_setup_server_set_property_t evt_lc_setup_server_set_property; /**< Data field for lc_setup_server set_property event*/ + sl_btmesh_evt_scene_client_status_t evt_scene_client_status; /**< Data field for scene_client status event*/ + sl_btmesh_evt_scene_client_register_status_t evt_scene_client_register_status; /**< Data field for scene_client register_status event*/ + sl_btmesh_evt_scene_server_get_t evt_scene_server_get; /**< Data field for scene_server get event*/ + sl_btmesh_evt_scene_server_register_get_t evt_scene_server_register_get; /**< Data field for scene_server register_get event*/ + sl_btmesh_evt_scene_server_recall_t evt_scene_server_recall; /**< Data field for scene_server recall event*/ + sl_btmesh_evt_scene_server_publish_t evt_scene_server_publish; /**< Data field for scene_server publish event*/ + sl_btmesh_evt_scene_server_compact_recall_t evt_scene_server_compact_recall; /**< Data field for scene_server compact_recall event*/ + sl_btmesh_evt_scene_setup_server_store_t evt_scene_setup_server_store; /**< Data field for scene_setup_server store event*/ + sl_btmesh_evt_scene_setup_server_delete_t evt_scene_setup_server_delete; /**< Data field for scene_setup_server delete event*/ + sl_btmesh_evt_scene_setup_server_publish_t evt_scene_setup_server_publish; /**< Data field for scene_setup_server publish event*/ + sl_btmesh_evt_scheduler_client_status_t evt_scheduler_client_status; /**< Data field for scheduler_client status event*/ + sl_btmesh_evt_scheduler_client_action_status_t evt_scheduler_client_action_status; /**< Data field for scheduler_client action_status event*/ + sl_btmesh_evt_scheduler_server_action_changed_t evt_scheduler_server_action_changed; /**< Data field for scheduler_server action_changed event*/ + sl_btmesh_evt_scheduler_server_scene_changed_t evt_scheduler_server_scene_changed; /**< Data field for scheduler_server scene_changed event*/ + sl_btmesh_evt_scheduler_server_action_triggered_t evt_scheduler_server_action_triggered; /**< Data field for scheduler_server action_triggered event*/ + sl_btmesh_evt_fw_update_server_check_fw_metadata_req_t evt_fw_update_server_check_fw_metadata_req; /**< Data field for fw_update_server check_fw_metadata_req event*/ + sl_btmesh_evt_fw_update_server_update_start_req_t evt_fw_update_server_update_start_req; /**< Data field for fw_update_server update_start_req event*/ + sl_btmesh_evt_fw_update_server_verify_fw_req_t evt_fw_update_server_verify_fw_req; /**< Data field for fw_update_server verify_fw_req event*/ + sl_btmesh_evt_fw_update_server_apply_t evt_fw_update_server_apply; /**< Data field for fw_update_server apply event*/ + sl_btmesh_evt_fw_update_server_update_cancelled_t evt_fw_update_server_update_cancelled; /**< Data field for fw_update_server update_cancelled event*/ + sl_btmesh_evt_fw_update_server_distributor_self_update_req_t evt_fw_update_server_distributor_self_update_req; /**< Data field for fw_update_server distributor_self_update_req event*/ + sl_btmesh_evt_time_server_time_updated_t evt_time_server_time_updated; /**< Data field for time_server time_updated event*/ + sl_btmesh_evt_time_server_time_zone_offset_updated_t evt_time_server_time_zone_offset_updated; /**< Data field for time_server time_zone_offset_updated event*/ + sl_btmesh_evt_time_server_tai_utc_delta_updated_t evt_time_server_tai_utc_delta_updated; /**< Data field for time_server tai_utc_delta_updated event*/ + sl_btmesh_evt_time_server_time_role_updated_t evt_time_server_time_role_updated; /**< Data field for time_server time_role_updated event*/ + sl_btmesh_evt_time_client_time_status_t evt_time_client_time_status; /**< Data field for time_client time_status event*/ + sl_btmesh_evt_time_client_time_zone_status_t evt_time_client_time_zone_status; /**< Data field for time_client time_zone_status event*/ + sl_btmesh_evt_time_client_tai_utc_delta_status_t evt_time_client_tai_utc_delta_status; /**< Data field for time_client tai_utc_delta_status event*/ + sl_btmesh_evt_time_client_time_role_status_t evt_time_client_time_role_status; /**< Data field for time_client time_role_status event*/ + sl_btmesh_evt_fw_dist_server_nodes_added_t evt_fw_dist_server_nodes_added; /**< Data field for fw_dist_server nodes_added event*/ + sl_btmesh_evt_fw_dist_server_nodes_deleted_t evt_fw_dist_server_nodes_deleted; /**< Data field for fw_dist_server nodes_deleted event*/ + sl_btmesh_evt_fw_dist_server_dist_start_req_t evt_fw_dist_server_dist_start_req; /**< Data field for fw_dist_server dist_start_req event*/ + sl_btmesh_evt_fw_dist_server_dist_cancel_t evt_fw_dist_server_dist_cancel; /**< Data field for fw_dist_server dist_cancel event*/ + sl_btmesh_evt_fw_dist_server_dist_cancel_complete_t evt_fw_dist_server_dist_cancel_complete; /**< Data field for fw_dist_server dist_cancel_complete event*/ + sl_btmesh_evt_fw_dist_server_upload_start_metadata_t evt_fw_dist_server_upload_start_metadata; /**< Data field for fw_dist_server upload_start_metadata event*/ + sl_btmesh_evt_fw_dist_server_upload_start_req_t evt_fw_dist_server_upload_start_req; /**< Data field for fw_dist_server upload_start_req event*/ + sl_btmesh_evt_fw_dist_server_upload_cancel_t evt_fw_dist_server_upload_cancel; /**< Data field for fw_dist_server upload_cancel event*/ + sl_btmesh_evt_fw_dist_server_dist_state_changed_t evt_fw_dist_server_dist_state_changed; /**< Data field for fw_dist_server dist_state_changed event*/ + sl_btmesh_evt_fw_dist_server_node_failed_t evt_fw_dist_server_node_failed; /**< Data field for fw_dist_server node_failed event*/ + sl_btmesh_evt_fw_dist_server_upload_complete_metadata_t evt_fw_dist_server_upload_complete_metadata; /**< Data field for fw_dist_server upload_complete_metadata event*/ + sl_btmesh_evt_fw_dist_server_upload_complete_t evt_fw_dist_server_upload_complete; /**< Data field for fw_dist_server upload_complete event*/ + sl_btmesh_evt_fw_dist_server_upload_failed_t evt_fw_dist_server_upload_failed; /**< Data field for fw_dist_server upload_failed event*/ + sl_btmesh_evt_fw_dist_server_upload_oob_start_uri_t evt_fw_dist_server_upload_oob_start_uri; /**< Data field for fw_dist_server upload_oob_start_uri event*/ + sl_btmesh_evt_fw_dist_server_upload_oob_start_req_t evt_fw_dist_server_upload_oob_start_req; /**< Data field for fw_dist_server upload_oob_start_req event*/ + sl_btmesh_evt_fw_dist_server_fw_delete_req_t evt_fw_dist_server_fw_delete_req; /**< Data field for fw_dist_server fw_delete_req event*/ + sl_btmesh_evt_fw_dist_server_fw_delete_all_req_t evt_fw_dist_server_fw_delete_all_req; /**< Data field for fw_dist_server fw_delete_all_req event*/ + sl_btmesh_evt_fw_dist_server_dist_suspend_t evt_fw_dist_server_dist_suspend; /**< Data field for fw_dist_server dist_suspend event*/ + sl_btmesh_evt_fw_dist_server_resume_req_t evt_fw_dist_server_resume_req; /**< Data field for fw_dist_server resume_req event*/ + sl_btmesh_evt_fw_dist_client_receivers_status_t evt_fw_dist_client_receivers_status; /**< Data field for fw_dist_client receivers_status event*/ + sl_btmesh_evt_fw_dist_client_receivers_list_t evt_fw_dist_client_receivers_list; /**< Data field for fw_dist_client receivers_list event*/ + sl_btmesh_evt_fw_dist_client_receivers_list_end_t evt_fw_dist_client_receivers_list_end; /**< Data field for fw_dist_client receivers_list_end event*/ + sl_btmesh_evt_fw_dist_client_capabilities_status_t evt_fw_dist_client_capabilities_status; /**< Data field for fw_dist_client capabilities_status event*/ + sl_btmesh_evt_fw_dist_client_distribution_status_t evt_fw_dist_client_distribution_status; /**< Data field for fw_dist_client distribution_status event*/ + sl_btmesh_evt_fw_dist_client_upload_status_t evt_fw_dist_client_upload_status; /**< Data field for fw_dist_client upload_status event*/ + sl_btmesh_evt_fw_dist_client_fw_status_t evt_fw_dist_client_fw_status; /**< Data field for fw_dist_client fw_status event*/ + sl_btmesh_evt_fw_dist_client_upload_complete_t evt_fw_dist_client_upload_complete; /**< Data field for fw_dist_client upload_complete event*/ + sl_btmesh_evt_fw_dist_client_upload_failed_t evt_fw_dist_client_upload_failed; /**< Data field for fw_dist_client upload_failed event*/ + sl_btmesh_evt_remote_provisioning_client_scan_capabilities_t evt_remote_provisioning_client_scan_capabilities; /**< Data field for remote_provisioning_client scan_capabilities event*/ + sl_btmesh_evt_remote_provisioning_client_scan_status_t evt_remote_provisioning_client_scan_status; /**< Data field for remote_provisioning_client scan_status event*/ + sl_btmesh_evt_remote_provisioning_client_scan_report_t evt_remote_provisioning_client_scan_report; /**< Data field for remote_provisioning_client scan_report event*/ + sl_btmesh_evt_remote_provisioning_client_extended_scan_report_t evt_remote_provisioning_client_extended_scan_report; /**< Data field for remote_provisioning_client extended_scan_report event*/ + sl_btmesh_evt_remote_provisioning_client_link_status_t evt_remote_provisioning_client_link_status; /**< Data field for remote_provisioning_client link_status event*/ + sl_btmesh_evt_remote_provisioning_client_link_report_t evt_remote_provisioning_client_link_report; /**< Data field for remote_provisioning_client link_report event*/ + sl_btmesh_evt_remote_provisioning_server_link_open_request_t evt_remote_provisioning_server_link_open_request; /**< Data field for remote_provisioning_server link_open_request event*/ + sl_btmesh_evt_remote_provisioning_server_link_close_request_t evt_remote_provisioning_server_link_close_request; /**< Data field for remote_provisioning_server link_close_request event*/ + sl_btmesh_evt_fw_standalone_updater_dist_state_changed_t evt_fw_standalone_updater_dist_state_changed; /**< Data field for fw_standalone_updater dist_state_changed event*/ + sl_btmesh_evt_fw_standalone_updater_node_failed_t evt_fw_standalone_updater_node_failed; /**< Data field for fw_standalone_updater node_failed event*/ + sl_btmesh_evt_ncp_fw_list_fw_deleted_t evt_ncp_fw_list_fw_deleted; /**< Data field for ncp_fw_list fw_deleted event*/ + sl_btmesh_evt_ncp_fw_list_fw_all_deleted_t evt_ncp_fw_list_fw_all_deleted; /**< Data field for ncp_fw_list fw_all_deleted event*/ + sl_btmesh_evt_ncp_fw_list_fw_added_t evt_ncp_fw_list_fw_added; /**< Data field for ncp_fw_list fw_added event*/ + sl_btmesh_evt_sar_config_client_sar_transmitter_status_t evt_sar_config_client_sar_transmitter_status; /**< Data field for sar_config_client sar_transmitter_status event*/ + sl_btmesh_evt_sar_config_client_sar_receiver_status_t evt_sar_config_client_sar_receiver_status; /**< Data field for sar_config_client sar_receiver_status event*/ + sl_btmesh_evt_sar_config_server_sar_transmitter_set_t evt_sar_config_server_sar_transmitter_set; /**< Data field for sar_config_server sar_transmitter_set event*/ + sl_btmesh_evt_sar_config_server_sar_receiver_set_t evt_sar_config_server_sar_receiver_set; /**< Data field for sar_config_server sar_receiver_set event*/ + sl_btmesh_evt_private_beacon_client_beacon_status_t evt_private_beacon_client_beacon_status; /**< Data field for private_beacon_client beacon_status event*/ + sl_btmesh_evt_private_beacon_client_gatt_proxy_status_t evt_private_beacon_client_gatt_proxy_status; /**< Data field for private_beacon_client gatt_proxy_status event*/ + sl_btmesh_evt_private_beacon_client_identity_status_t evt_private_beacon_client_identity_status; /**< Data field for private_beacon_client identity_status event*/ + sl_btmesh_evt_lcd_client_data_header_t evt_lcd_client_data_header; /**< Data field for lcd_client data_header event*/ + sl_btmesh_evt_lcd_client_data_t evt_lcd_client_data; /**< Data field for lcd_client data event*/ + sl_btmesh_evt_lcd_client_data_end_t evt_lcd_client_data_end; /**< Data field for lcd_client data_end event*/ + sl_btmesh_evt_on_demand_private_proxy_client_private_gatt_proxy_status_t evt_on_demand_private_proxy_client_private_gatt_proxy_status; /**< Data field for on_demand_private_proxy_client private_gatt_proxy_status event*/ + sl_btmesh_evt_solicitation_config_client_items_status_t evt_solicitation_config_client_items_status; /**< Data field for solicitation_config_client items_status event*/ + sl_btmesh_evt_silabs_config_server_tx_changed_t evt_silabs_config_server_tx_changed; /**< Data field for silabs_config_server tx_changed event*/ + sl_btmesh_evt_silabs_config_server_model_option_changed_t evt_silabs_config_server_model_option_changed; /**< Data field for silabs_config_server model_option_changed event*/ + sl_btmesh_evt_silabs_config_server_network_pdu_changed_t evt_silabs_config_server_network_pdu_changed; /**< Data field for silabs_config_server network_pdu_changed event*/ + uint8_t payload[SL_BGAPI_MAX_PAYLOAD_SIZE]; + } data; +}); + +/** + * @brief Type definition for the data structure of BTMESH API messages + */ +typedef struct sl_btmesh_msg sl_btmesh_msg_t; + +/** @} */ // end addtogroup sl_btmesh_common_types +/******************************************************************************/ + +/***************************************************************************//** + * @addtogroup sl_bt_utility_functions Utility Functions + * @brief Utility functions for applications on SoC + * @{ + */ + +/** + * Get the next event that requires processing by user application. Application + * is not blocked if no event is waiting. + * + * @param event the pointer for storing the new event + * @return SL_STATUS_OK if a new event is returned, or SL_STATUS_NOT_FOUND if no + * event is waiting; other value indicates an error occurred + */ +sl_status_t sl_btmesh_pop_event(sl_btmesh_msg_t* event); + +/** + * Check whether events are in queue pending for processing. + * Call @ref sl_btmesh_pop_event to process pending events. + * + * @return true if event is pending; false otherwise + */ +bool sl_btmesh_event_pending(void); + +/** + * Check whether events are in queue pending for processing and return the next + * event length in bytes if events are pending. + * Call @ref sl_btmesh_pop_event to process pending events. + * + * @return the next event length if event is pending; 0 otherwise + */ +uint32_t sl_btmesh_event_pending_len(void); + + +/** @} */ // end addtogroup sl_bt_utility_functions +/******************************************************************************/ + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/protocol/bluetooth/inc/sl_btmesh_bgapi.h b/protocol/bluetooth/inc/sl_btmesh_bgapi.h new file mode 100644 index 00000000000..258d3baaa05 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_bgapi.h @@ -0,0 +1,27 @@ +/***************************************************************************//** + * @file sl_btmesh_bgapi.h + * @brief Mesh bgapi interface functions + ******************************************************************************* + * # License + * Copyright 2018 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 SL_BTMESH_BGAPI_H +#define SL_BTMESH_BGAPI_H + +/** + * @Brief MESH Bgapi Listener + * @param evt BGAPI event + */ +void sl_btmesh_bgapi_listener(sl_bt_msg_t *evt); + +#endif diff --git a/protocol/bluetooth/inc/sl_btmesh_capi_types.h b/protocol/bluetooth/inc/sl_btmesh_capi_types.h new file mode 100644 index 00000000000..d524e0a6459 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_capi_types.h @@ -0,0 +1,1125 @@ +/******************************************************************************/ +/** + * @file sl_btmesh_capi_types.h + * @brief Silicon Labs Bluetooth Mesh C API + * + ******************************************************************************* + * # License + * Copyright 2018 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 SL_BTMESH_CAPI_TYPES_H_ +#define SL_BTMESH_CAPI_TYPES_H_ + +/** forward declaration for SDK use */ +struct bgbuf_t; + +#include +#include +#include +#include "sl_btmesh_compatibility_macros.h" +#include "sl_status.h" +#include "sl_btmesh_memory_config.h" +#include + +/** Dummy vendor ID for Mesh specification models */ +#define MESH_SPEC_VENDOR_ID 0xffff + +#if FEATURE_MESH_GATT + +/** Mesh GATT provisioning service UUID */ +#define MESH_GATT_SERVICE_PROVISIONING_UUID "\x27\x18" +/** Mesh GATT provisioning service data in characteristic UUID */ +#define MESH_GATT_SERVICE_PROVISIONING_DATA_IN_UUID "\xdb\x2a" +/** Mesh GATT provisioning service data out characteristic UUID */ +#define MESH_GATT_SERVICE_PROVISIONING_DATA_OUT_UUID "\xdc\x2a" + +/** Mesh GATT proxy service UUID */ +#define MESH_GATT_SERVICE_PROXY_UUID "\x28\x18" +/** Mesh GATT proxy service data in characteristic UUID */ +#define MESH_GATT_SERVICE_PROXY_DATA_IN_UUID "\xdd\x2a" +/** Mesh GATT proxy service data out characteristic UUID */ +#define MESH_GATT_SERVICE_PROXY_DATA_OUT_UUID "\xde\x2a" + +/** Advertising data does not match requested network ID or node identity */ +#define MESH_PROXY_SERVICE_NO_MATCH 0 +/** Advertising data matches requested network ID */ +#define MESH_PROXY_SERVICE_NETWORK_MATCH 1 +/** Advertising data matches requested node identity */ +#define MESH_PROXY_SERVICE_IDENTITY_MATCH 2 + +/** Advertise Mesh GATT proxy service with network ID */ +#define MESH_GATT_SERVICE_PROXY_NETWORK_ID_ADV 0x00 + +/** Advertise Mesh GATT proxy service with node identity */ +#define MESH_GATT_SERVICE_PROXY_NODE_IDENTITY_ADV 0x01 + +#endif /* FEATURE_MESH_GATT */ + +/* Provisioning algortihm bits */ +/** Use FIPS-P256 for provisioning */ +#define MESH_PROV_FLAG_ALGORITHM_FIPS_P256 0x0001 + +/* Public key type bits */ +/** Out of band public key is available for provisioning */ +#define MESH_PROV_FLAG_PUBLIC_KEY_AVAILABLE 0x01 + +/* Static OOB type bits */ +/** Out of band static authentication data is available for provisioning */ +#define MESH_PROV_FLAG_STATIC_OOB_AVAILABLE 0x01 + +/** Do not use out-of-band data in provisioning */ +#define MESH_PROV_FLAG_NO_OOB 0x01 +/** Use static out-of-band data in provisioning */ +#define MESH_PROV_FLAG_STATIC_OOB 0x02 +/** Use output out-of-band data in provisioning */ +#define MESH_PROV_FLAG_OUTPUT_OOB 0x04 +/** Use input out-of-band data in provisioning */ +#define MESH_PROV_FLAG_INPUT_OOB 0x08 + +/** Flag indicating device support for out-of-band output + authentication using blinking */ +#define MESH_PROV_FLAG_OUTPUT_OOB_BLINK 0x01 +/** Flag indicating device support for out-of-band output + authentication using beeping */ +#define MESH_PROV_FLAG_OUTPUT_OOB_BEEP 0x02 +/** Flag indicating device support for out-of-band output + authentication using vibration */ +#define MESH_PROV_FLAG_OUTPUT_OOB_VIBRATE 0x04 +/** Flag indicating device support for out-of-band output + authentication using numeric display */ +#define MESH_PROV_FLAG_OUTPUT_OOB_NUMERIC 0x08 +/** Flag indicating device support for out-of-band output + authentication using alphanumeric display */ +#define MESH_PROV_FLAG_OUTPUT_OOB_ALPHA 0x10 +/** Bitmask for valid out-of-band output authentication + flags */ +#define MESH_PROV_MASK_OUTPUT_OOB 0x1f + +/** Flag indicating device support for out-of-band input + authentication using push action */ +#define MESH_PROV_FLAG_INPUT_OOB_PUSH 0x01 +/** Flag indicating device support for out-of-band input + authentication using twist action */ +#define MESH_PROV_FLAG_INPUT_OOB_TWIST 0x02 +/** Flag indicating device support for out-of-band input + authentication using numeric input */ +#define MESH_PROV_FLAG_INPUT_OOB_NUMERIC 0x04 +/** Flag indicating device support for out-of-band input + authentication using alphanumeric input */ +#define MESH_PROV_FLAG_INPUT_OOB_ALPHA 0x08 +/** Bitmask for valid out-of-band input authentication + flags */ +#define MESH_PROV_MASK_INPUT_OOB 0x0f + +/** FIPS P-256 provisioning algorithm used in provisioning */ +#define MESH_PROV_ALGORITHM_FIPS_P256 0x00 + +/** Out-of-band EC public key is not used in provisioning */ +#define MESH_PROV_OOB_PUBLIC_KEY_NO 0x00 +/** Out-of-band EC public key is used in provisioning */ +#define MESH_PROV_OOB_PUBLIC_KEY_YES 0x01 + +/** Out-of-band authentication is not used in provisioning */ +#define MESH_PROV_AUTH_OOB_NONE 0x00 +/** Out-of-band static authentication is used in provisioning */ +#define MESH_PROV_AUTH_OOB_STATIC 0x01 +/** Out-of-band output authentication is used in provisioning */ +#define MESH_PROV_AUTH_OOB_OUTPUT 0x02 +/** Out-of-band input authentication is used in provisioning */ +#define MESH_PROV_AUTH_OOB_INPUT 0x03 + +/** Out-of-band output authentication by blinking is used in provisioning */ +#define MESH_PROV_OUTPUT_OOB_BLINK 0x00 +/** Out-of-band output authentication by beeping is used in provisioning */ +#define MESH_PROV_OUTPUT_OOB_BEEP 0x01 +/** Out-of-band output authentication by vibration is used in provisioning */ +#define MESH_PROV_OUTPUT_OOB_VIBRATE 0x02 +/** Out-of-band output authentication by numeric output is used in provisioning */ +#define MESH_PROV_OUTPUT_OOB_NUMERIC 0x03 +/** Out-of-band output authentication by alphanumeric output is used in provisioning */ +#define MESH_PROV_OUTPUT_OOB_ALPHA 0x04 + +/** Out-of-band input authentication by push action is used in provisioning */ +#define MESH_PROV_INPUT_OOB_PUSH 0x00 +/** Out-of-band input authentication by twist action is used in provisioning */ +#define MESH_PROV_INPUT_OOB_TWIST 0x01 +/** Out-of-band input authentication by numeric input is used in provisioning */ +#define MESH_PROV_INPUT_OOB_NUMERIC 0x02 +/** Out-of-band input authentication by alphanumeric input is used in provisioning */ +#define MESH_PROV_INPUT_OOB_ALPHA 0x03 + +/** Key refresh is in progress */ +#define MESH_PROV_SETUP_KR_IN_PROGRESS 0x01 +/** IV index update is in progress */ +#define MESH_PROV_SETUP_IVU_IN_PROGRESS 0x02 + +/** Advertisement provisioning bearer (PB-ADV) */ +#define MESH_PROV_BEARER_ID_ADV 0x00 +#if FEATURE_MESH_GATT +/** GATT provisioning bearer (PB-GATT) */ +#define MESH_PROV_BEARER_ID_GATT 0x01 +/** All available provisioning bearers */ +#define MESH_PROV_BEARERS_MASK ((1 << MESH_PROV_BEARER_ID_ADV) | (1 << MESH_PROV_BEARER_ID_GATT)) +#else +/** All available provisioning bearers */ +#define MESH_PROV_BEARERS_MASK (1 << MESH_PROV_BEARER_ID_ADV) +#endif /* FEATURE_MESH_GATT */ + +/** Node is blacklisted and thus does not participate in key refresh */ +#define MESH_KR_NODE_IS_BLACKLISTED 1 + +/** Node is not blacklisted and thus does participate in key refresh */ +#define MESH_KR_NODE_IS_NOT_BLACKLISTED 0 + +#define MESH_PLATFORM_MEMPOOL_ID_DDB 0 /**< Device database pool */ +#define MESH_PLATFORM_MEMPOOL_ID_FOUNDATION 1 /**< Foundation command pool */ +#define MESH_PLATFORM_MEMPOOL_ID_DDB_APPKEY 2 /**< DDB appkey blacklist pool */ +#define MESH_PLATFORM_MEMPOOL_COUNT 3 /**< Memory pool count */ + +/** Model handle */ +typedef struct __mesh_model *mesh_model_t; + +/** Element handle */ +typedef struct __mesh_element *mesh_element_t; + +/** Primary element index */ +#define MESH_PRIMARY_ELEMENT_INDEX 0 + +/** Maximum useful Access message size including an opcode */ +#define MESH_MAX_ACCESS_MESSAGE_SIZE 380 + +/** Mesh advertisement types */ +typedef enum { + mesh_packet_undefined = 0x00, /** Undefined packet type */ + mesh_packet_service_data = 0x016, /** Service data */ + mesh_packet_uri = 0x24, /**< URI advertisement */ + mesh_packet_provisioning = 0x29, /**< Provisioning data */ + mesh_packet_generic = 0x2a, /**< Mesh data */ + mesh_packet_beacon = 0x2b, /**< Mesh beacon */ +} mesh_packet_type_t; + +/** Mesh bearer types */ +typedef enum { + mesh_bearer_adv = 0, /**< Advertisement bearer */ +#if FEATURE_MESH_GATT + mesh_bearer_gatt = 1 /**< GATT bearer */ +#endif /* FEATURE_MESH_GATT */ +} mesh_bearer_t; + +/** Network layer configuration structure */ +typedef struct { + uint8_t relay_interval_min; /**< Minimum relay delay */ + uint8_t relay_interval_max; /**< Maximum relay delay */ +} mesh_net_config_t; + +/** SAR Transmitter Configuration */ +typedef struct mesh_sar_transmitter_config { + uint32_t segment_interval_step; /**< Segment Interval Step */ + uint32_t unicast_retrans_count; /**< Unicast Retransmissions Count */ + uint32_t unicast_retrans_wo_progress_count; /**< Unicast Retransmissions Count Without Progress */ + uint32_t unicast_retrans_interval_step; /**< Unicast Retransmission Interval Step */ + uint32_t unicast_retrans_interval_increment; /**< Unicast Retransmission Interval Increment */ + uint32_t multicast_retrans_count; /**< Multicast Retransmissions Count */ + uint32_t multicast_retrans_interval_step; /**< Multicast Retransmission Interval Step */ +} mesh_sar_transmitter_config_t; + +/** SAR Receiver Configuration */ +typedef struct mesh_sar_receiver_config { + uint32_t segments_threshold; /**< Segments Threshold */ + uint32_t ack_delay_increment; /**< Acknowledgement Delay Increment */ + uint32_t discard_timeout; /**< Discard Timeout */ + uint32_t segment_interval_step; /**< Segment Interval Step */ + uint32_t ack_retrans_count; /**< Acknowledgement Retransmissions Count */ +} mesh_sar_receiver_config_t; + +/** Segmentation and reassembly configuration structure */ +typedef struct { + mesh_sar_transmitter_config_t transmitter; /**< SAR Transmitter Configuration */ + mesh_sar_receiver_config_t receiver;/**< SAR Receiver Configuration */ +} mesh_trans_sar_config_t; + +/** + * Mesh device configuration structure. + */ +typedef struct { + const mesh_net_config_t *p_net_config; /**< Network layer configuration */ + const mesh_trans_sar_config_t *p_trans_sar_config; /**< Transport layer confoiguration */ + const mesh_memory_config_t *p_memory_config; /**< Memory configuration */ + uint8_t flags; /**< Node flags */ + /* The following fields are only relevant for the Node. */ + const uint8_t *p_uuid; /**< Pointer to device UUID */ + uint16_t oob_location; /**< OOB location bitmask */ + uint8_t oob_public_key; /**< OOB public key availability */ + uint8_t oob_auth_methods; /**< OOB authentication methods supported */ + uint8_t oob_auth_output_actions; /**< Output OOB actions supported bitmask */ + uint8_t oob_auth_output_size; /**< Output OOB size */ + uint8_t oob_auth_input_actions; /**< Input OOB actions supported bitmask */ + uint8_t oob_auth_input_size; /**< Input OOB size */ + uint16_t allowed_algorithms; /**< Allowed provisioning algorithms; set + to bitmask containing #MESH_PROV_FLAG_ALGORITHM_FIPS_P256 */ +} mesh_device_config_t; + +/** Device UUID length */ +#define MESH_UUID_LEN (16) + +/** Mesh size */ +typedef uint16_t mesh_size_t; + +/** Mesh bearer */ +typedef uint8_t mesh_bearer_id; + +/** Mesh address */ +typedef uint16_t mesh_addr_t; + +/** Mesh label UUID (full virtual address data) */ +typedef struct { + uint8_t addr[16]; /**< Address data */ +} mesh_full_virtual_addr_t; + +/** A special nil label UUID */ +extern const mesh_full_virtual_addr_t MESH_VA_NIL; + +/** Unassigned address */ +#define MESH_ADDR_UNASSIGNED 0x0000 +/** All IPT border routers address */ +#define MESH_ADDR_ALLIPTBORDERROUTERS 0xfff9 +/** All IPT nodes address */ +#define MESH_ADDR_ALLIPTNODES 0xfffa +/** All nodes with directed forwarding address */ +#define MESH_ADDR_ALLDIRECEDTFORWARDING 0xfffb +/** All-proxies address */ +#define MESH_ADDR_ALLPROXIES 0xfffc +/** All-friends address */ +#define MESH_ADDR_ALLFRIENDS 0xfffd +/** All-relays address */ +#define MESH_ADDR_ALLRELAYS 0xfffe +/** All-nodes address (broadcast) */ +#define MESH_ADDR_ALLNODES 0xffff + +/** Mesh address types */ +typedef enum { + MESH_ADDR_TYPE_UNASSIGNED, /**< Unassigned */ + MESH_ADDR_TYPE_UNICAST, /**< Unicast address */ + MESH_ADDR_TYPE_VIRTUAL, /**< Virtual address (hash of Label UUID) */ + MESH_ADDR_TYPE_GROUP, /**< Group address */ + MESH_ADDR_TYPE_FIXEDGROUP /**< Fixed group address */ +} mesh_addr_type_t; + +/** + * @brief Get address type + * + * Get address type of an address + * @param addr Mesh address + * @return Type of the address + */ +inline mesh_addr_type_t mesh_addr_type(mesh_addr_t addr) +{ + switch ((addr >> 14) & 3) { + case 0: + return (addr == MESH_ADDR_UNASSIGNED) + ? MESH_ADDR_TYPE_UNASSIGNED + : MESH_ADDR_TYPE_UNICAST; + case 1: + return MESH_ADDR_TYPE_UNICAST; + case 2: + return MESH_ADDR_TYPE_VIRTUAL; + default: + return (addr >= 0xff00) + ? MESH_ADDR_TYPE_FIXEDGROUP + : MESH_ADDR_TYPE_GROUP; + } +} + +/** Mesh message MIC sizes */ +typedef enum { + mesh_mic_32 = 0, // Explicitly 32 bit MIC + mesh_mic_64 = 1, // Explicitly 64 bit MIC + mesh_mic_longest = 2, // Use longest MIC which can fit in the PDU + // without causing extra overhead (e.g. segmentation) +} mesh_mic_t; + +/** Mesh node handle */ +typedef uint8_t mesh_node_handle_t; +/** Mesh application handle + @deprecated Not used */ +typedef uint8_t mesh_app_handle_t; +/** Mesh component handle + @deprecated Not used */ +typedef uint32_t mesh_component_handle_t; +/** Mesh packet handle + @deprecated Not used */ +typedef uint32_t mesh_packet_handle_t; +/** Mesh Tx PDU handle */ +typedef void* mesh_tx_handle_t; + +/** Invalid Tx handle */ +#define MESH_INVALID_TX_HANDLE NULL + +/** Transport layer Tx related event types */ +enum mesh_trans_tx_event_type { + mesh_trans_tx_event_obo_ack, /**< OBO acknowledgement (friend) */ + mesh_trans_tx_event_sdu_send_started, /**< Segmented TX started */ + mesh_trans_tx_event_sdu_send_completed, /**< TX completed */ + mesh_trans_tx_event_sdu_send_failed, /**< TX Failed */ +}; + +/** Transport layer Tx related event reporting structure */ +typedef struct { + enum mesh_trans_tx_event_type type; /**< Event type */ + union { + struct { + mesh_addr_t obo_src; /**< friend address */ + } obo_ack; /**< On-behalf-of acknowledgement received */ + }; +} mesh_trans_tx_event_t; + +typedef uint8_t mesh_uuid_t[16]; /**< UUID */ + +/** Callback for events related to transport layer sending */ +typedef void (*mesh_trans_tx_event_cb)(mesh_trans_tx_event_t *event, + void *cb_param); + +#if FEATURE_MESH_GATT + +/** + * GATT service + */ +typedef enum { + mesh_gatt_service_proxy, /**< Mesh proxy service */ + mesh_gatt_service_provisioning /**< Mesh provisioning service */ +} mesh_gatt_service_t; + +/** + * GATT connection handle + */ +typedef void* mesh_gatt_handle_t; + +/** + * GATT connection event types + */ +typedef enum { + mesh_gatt_event_connected, + mesh_gatt_event_disconnected, + mesh_gatt_event_data +} mesh_gatt_event_type_t; + +/** + * GATT PDU type + */ +typedef enum { + mesh_gatt_pdu_data = 0, + mesh_gatt_pdu_beacon = 1, + mesh_gatt_pdu_proxyconfig = 2, + mesh_gatt_pdu_provisioning = 3, +} mesh_gatt_pdu_t; + +/** + * GATT event structure + */ +typedef struct { + mesh_gatt_event_type_t type; /**< Event type */ + union { + struct { + uint8_t addr[6]; /**< Remote address */ + } connect; /**< Connection event */ + struct { + sl_status_t reason; /**< Disconnection reason */ + } disconnect; /**< Disconnection event */ + struct { + struct bgbuf_t *buf; /**< Data contents */ + } data; /**< Incoming data */ + }; +} mesh_gatt_event_t; + +/** + * GATT event handler callback + */ +typedef void (*mesh_gatt_cb)(mesh_gatt_handle_t handle, + mesh_gatt_event_t *event, + void *cb_param); + +#endif /* FEATURE_MESH_GATT */ + +/** Mesh AES cryptographic key type */ +typedef enum { + MESH_CRYPTO_KEY_NET = 0, /**< 128 bit network key */ + MESH_CRYPTO_KEY_APP, /**< 128 bit application key */ + MESH_CRYPTO_KEY_DEV, /**< 128 bit device key */ + MESH_CRYPTO_KEY_NONE, /**< 128 bit AES key with no mesh context */ + MESH_CRYPTO_KEY_NONE_256, /**< 256 bit AES key with no mesh context */ +} mesh_crypto_key_type_t; + +/** Key refresh phase */ +typedef enum { + MESH_CRYPTO_KEY_REFRESH_PHASE_NORMAL, /**< No key refresh ongoing */ + MESH_CRYPTO_KEY_REFRESH_PHASE_1, /**< Key refresh phase 1 */ + MESH_CRYPTO_KEY_REFRESH_PHASE_2, /**< Key refresh phase 2 */ + MESH_CRYPTO_KEY_REFRESH_PHASE_3, /**< Key refresh phase 3 */ +} mesh_crypto_key_refresh_phase_t; + +/** Mesh AES cryptographic key index */ +typedef uint16_t mesh_crypto_key_index_t; + +/** Invalid AES cryptographic key index */ +#define MESH_CRYPTO_KEY_INDEX_INVALID 0xffff + +/** Mesh AES cryptographic key length */ +#define MESH_CRYPTO_KEY_LEN 16 + +/** Mesh AES 256 bit cryptographic key length */ +#define MESH_CRYPTO_KEY_256_LEN 32 + +/** Mesh AES cryptographic key opaque structure */ +struct mesh_crypto_key; + +/** Mesh AES cryptographic key handle */ +typedef struct mesh_crypto_key mesh_crypto_key_t; + +/** Mesh AES MAC data maximum length */ +#define MESH_CRYPTO_MAC_LEN 16 + +/** Mesh AES cryptographic MAC structure */ +struct mesh_crypto_mac { + uint8_t data[MESH_CRYPTO_MAC_LEN]; /**< MAC data */ +}; + +/** Mesh AES cryptographic MAC type */ +typedef struct mesh_crypto_mac mesh_crypto_mac_t; + +/** Mesh HMAC-SHA-256 data length */ +#define MESH_CRYPTO_HMAC_SHA_256_LEN 32 + +/** Mesh HMAC-SHA-256 structure */ +struct mesh_crypto_hmac_sha_256 { + uint8_t data[MESH_CRYPTO_HMAC_SHA_256_LEN]; /**< HMAC-SHA-256 data */ +}; + +/** Mesh HMAC-SHA-256 type */ +typedef struct mesh_crypto_hmac_sha_256 mesh_crypto_hmac_sha_256_t; + +/** Mesh SHA-1 data length */ +#define MESH_CRYPTO_SHA_1_LEN 20 + +/** Mesh SHA-1 MAC type */ +typedef struct { + uint8_t data[MESH_CRYPTO_SHA_1_LEN]; /**< SHA-1 digest */ +} mesh_crypto_sha1_t; + +/** Mesh elliptic curve cryptographic public key length */ +#define MESH_CRYPTO_EC_PUBLIC_KEY_LEN 64 +/** Mesh elliptic curve cryptographic private key length */ +#define MESH_CRYPTO_EC_PRIVATE_KEY_LEN 32 + +/** Mesh elliptic curve cryptographic key pair opaque structure */ +struct mesh_crypto_ec_key; + +/** Mesh elliptic curve cryptographic key pair handle */ +typedef struct mesh_crypto_ec_key mesh_crypto_ec_key_t; + +/** Mesh EC Diffie-Hellman shared secret opaque strcture */ +struct mesh_crypto_ecdh_secret; + +/** Mesh EC Diffie-Hellman shared secret handle */ +typedef struct mesh_crypto_ecdh_secret mesh_crypto_ecdh_secret_t; + +/** Mesh provisioning authentication data length */ +#define MESH_CRYPTO_AUTH_LEN 16 + +/** Incoming packet */ +#define MESH_PACKET_DIR_IN 0 +/** Outgoing packet */ +#define MESH_PACKET_DIR_OUT 1 + +/** Advertisement packet */ +#define MESH_PACKET_TYPE_ADV 0 + +#define MESH_NODE_FLAG_DEBUG 1 /**< Debugging enabled */ +#define MESH_NODE_FLAG_PROVISIONER 2 /**< Provisioner role */ +#define MESH_NODE_FLAG_CFG_CLIENT 4 /**< Node with config client */ + +#define MESH_MAX_ACCESS_PDU_LEN (384) /**< Maximum access PDU including MIC */ + +#define MESH_MAX_ACCESS_MESSAGE_LEN (380) /**< Maximum access PDU excluding MIC */ + +/** + * Mesh node state + */ +typedef enum { + mesh_device_state_uninitialized = 0, + mesh_device_state_unprovisioned, + mesh_device_state_unprovisioned_beaconing, + mesh_device_state_provisioning, + mesh_device_state_operational, + mesh_device_state_provisioner, + mesh_device_state_last +} mesh_device_state_t; + +/** Mesh provisioning process state */ +typedef enum { + mesh_prov_beaconing = 0, + mesh_prov_link_open = 1, + mesh_prov_key_exchange = 2, + mesh_prov_finished = 3, +} mesh_provisioning_step_t; + +/* Message flags */ + +// Replies may get artificially delayed by a random amount to avoid +// +// 1) sending a reply before original sender has managed to switch to +// listening +// +// 2) clobbering neighbours' transmissions when multiple nodes respond +// to the same message +// +/** Message does not have flags*/ +#define MESH_MESSAGE_FLAG_NONE 0x00 +/** Message is an access layer reply to a unicast request */ +#define MESH_MESSAGE_FLAG_REPLY 0x01 +/** Message is an access layer reply to a multicast request */ +#define MESH_MESSAGE_FLAG_MULTICAST_REPLY 0x02 + +/** Message is either received with TTL=0 or is a response to such a message + and should be sent out with TTL=0 */ +#define MESH_MESSAGE_FLAG_TTL0 0x04 + +/** Message is segmented in transport layer, + * can be used to force the use of transport layer segmentation */ +#define MESH_MESSAGE_FLAG_SEGTRANS 0x10 + +/** Use friendship credentials instead of normal credentials + when sending data; used when publishing with friendship + credential flag on in model publish settings */ +#define MESH_MESSAGE_FLAG_FRIENDCRED 0x20 + +/** Use extended packet size instead of standard */ +#define MESH_MESSAGE_FLAG_EXTENDED 0x40 +/** long delay needed in sending two messages in reply that need to be sent in order */ +#define MESH_MESSAGE_FLAG_LONG_DELAY 0x80 + +/** Bearer layer message sending callback signature + * When the bearer packet has been sent, the callback + * will be called to indicate that. + */ +typedef void (*mesh_send_cb)(sl_status_t status, + mesh_tx_handle_t handle, + uint8_t message_flags, + void *cb_param); + +/* Time */ + +/** CPU tick or some other similar high resolution time unit */ +typedef uint64_t mesh_tick_t; + +/** Maximum value representable with a 64-bit uint */ +#define MESH_MAX_TICK 0xffffffffffffffff + +/** Low resolution time (in seconds) that advances during sleep + modes. Used only for counting relative time differences; Epoch + value is not important. */ +typedef uint32_t mesh_clock_t; + +/** Persistent storage handle to data */ +typedef uint16_t mesh_pstore_handle_t; + +/** Mesh model type */ +typedef enum { + MESH_MODEL_BT_SIG, /**< SIG model */ + MESH_MODEL_VENDOR /**< Vendor model */ +} mesh_model_type_t; + +/** Model publication state */ +typedef struct { + mesh_addr_t addr; /**< Publication address */ + mesh_full_virtual_addr_t va; /**< Full virtual address data; needed if + publication address is a virtual one */ + mesh_crypto_key_index_t key_index; /**< Publication app key */ + uint8_t ttl; /**< Publication time to live */ + uint8_t period; /**< Publication period */ + uint8_t retrans; /**< Retransmission count and interval */ + uint8_t friendcred : 1; /**< Use friendship credentials flag */ +} mesh_model_publish_t; + +/** Model transmission options */ +typedef struct { + uint8_t extended_packet_size : 1; /**< Use extended packet size */ +} mesh_model_tx_options_t; + +/** Cryptographic key event */ +typedef enum { + key_added = 0, + key_updated = 1, + key_deleted = 2, + key_last, +} mesh_key_event_t; + +/** Model configuration event */ +typedef enum { + model_appkey_bindings_changed = 0, + model_publication_changed = 1, + model_subscriptions_changed = 2, + model_last, +} mesh_model_config_event_t; + +/** Dummy vendor ID for Mesh specification models + @deprecated Use MESH_SPEC_VENDOR_ID instead */ +#define MESH_VENDOR_ID_SIG 0xffff + +/** TTL value indicating default TTL should be used */ +#define MESH_USE_DEFAULT_TTL (255) + +/** Instrumentation event */ +typedef enum { + mesh_instr_hello = 0x00, + + mesh_instr_net_pdu_decryption_failure = 0x01, + mesh_instr_net_pdu_decrypted = 0x02, + mesh_instr_net_pdu_dropped = 0x03, + mesh_instr_net_pdu_handled = 0x04, + mesh_instr_net_pdu_not_handled = 0x05, + mesh_instr_net_pdu_relayed = 0x06, + mesh_instr_net_pdu_not_relayed = 0x07, + mesh_instr_net_pdu_sent = 0x08, + mesh_instr_net_pdu_not_sent = 0x09, + + mesh_instr_trans_pdu_handled = 0x0a, + mesh_instr_trans_pdu_not_handled = 0x0b, + mesh_instr_trans_receiver_start = 0x0c, + mesh_instr_trans_receiver_cleanup = 0x0d, + mesh_instr_trans_receiver_recv = 0x0e, + mesh_instr_trans_receiver_ack_sent = 0x0f, + mesh_instr_trans_receiver_ack_not_sent = 0x10, + mesh_instr_trans_receiver_timer_set = 0x11, + mesh_instr_trans_receiver_timer_expired = 0x12, + + mesh_instr_trans_sender_start = 0x13, + mesh_instr_trans_sender_table_full = 0x14, + mesh_instr_trans_sender_cleanup = 0x15, + mesh_instr_trans_sender_ack_handled = 0x16, + mesh_instr_trans_sender_ack_not_handled = 0x17, + mesh_instr_trans_sender_pdu_sent = 0x18, + mesh_instr_trans_sender_pdu_not_sent = 0x19, + mesh_instr_trans_sender_sdu_sent = 0x1a, + mesh_instr_trans_sender_sdu_not_sent = 0x1b, + mesh_instr_trans_sender_timer_set = 0x1c, + mesh_instr_trans_sender_timer_expired = 0x1d, + + mesh_instr_adv_sent = 0x1e, + mesh_instr_adv_not_sent = 0x1f, + mesh_instr_adv_queue_push = 0x20, + mesh_instr_adv_queue_pop = 0x21, + + mesh_instr_tx_complete = 0x22, + mesh_instr_tx_cancelled = 0x23, +} mesh_instr_event_t; + +/** Instrumentation result codes for dropping a network PDU */ +typedef enum { + mesh_instr_net_pdu_dropped_cache_hit = 0x00, + mesh_instr_net_pdu_dropped_invalid_src = 0x01, + mesh_instr_net_pdu_dropped_invalid_dst = 0x02, + mesh_instr_net_pdu_dropped_internal_error = 0x03, +} mesh_instr_net_pdu_dropped_reason_t; +/** Number of instrumentation errors for dropping a network PDU */ +#define mesh_instr_net_pdu_dropped_reasons 4 + +/** Instrumentation result codes for not handling a network PDU */ +typedef enum { + mesh_instr_net_pdu_not_handled_not_for_me = 0x00, +} mesh_instr_net_pdu_not_handled_reason_t; +/** Number of instrumentation errors for not handling a network PDU */ +#define mesh_instr_net_pdu_not_handled_reasons 1 + +/** Instrumentation result codes for not relaying a network PDU */ +typedef enum { + mesh_instr_net_pdu_not_relayed_no_relay = 0x00, + mesh_instr_net_pdu_not_relayed_hop_limit = 0x01, + mesh_instr_net_pdu_not_relayed_out_of_memory = 0x02, + mesh_instr_net_pdu_not_relayed_internal_error = 0x03, +} mesh_instr_net_pdu_not_relayed_reason_t; +/** Number of instrumentation errors for not relaying a network PDU */ +#define mesh_instr_net_pdu_not_relayed_reasons 4 + +/** Instrumentation result codes for not sending a network PDU */ +typedef enum { + mesh_instr_net_pdu_not_sent_out_of_memory = 0x00, + mesh_instr_net_pdu_not_sent_internal_error = 0x01, + mesh_instr_net_pdu_not_sent_hop_limit = 0x02, +} mesh_instr_net_pdu_not_sent_reason_t; +/** Number of instrumentation errors for not sending a network PDU */ +#define mesh_instr_net_pdu_not_sent_reasons 3 + +/** Instrumentation result codes for not handling a transport PDU */ +typedef enum { + mesh_instr_trans_pdu_not_handled_invalid_pdu = 0x00, + mesh_instr_trans_pdu_not_handled_invalid_src = 0x01, + mesh_instr_trans_pdu_not_handled_invalid_dst = 0x02, + mesh_instr_trans_pdu_not_handled_invalid_seg = 0x03, + mesh_instr_trans_pdu_not_handled_old_seqauth = 0x04, + mesh_instr_trans_pdu_not_handled_old_data = 0x05, + mesh_instr_trans_pdu_not_handled_out_of_recv = 0x06, + mesh_instr_trans_pdu_not_handled_out_of_memory = 0x07, + mesh_instr_trans_pdu_not_handled_header_mismatch = 0x08, +} mesh_instr_trans_pdu_not_handled_reason_t; +/** Number of instrumentation errors for not handling a transport PDU */ +#define mesh_instr_trans_pdu_not_handled_reasons 9 + +/** Instrumentation result codes for not sending a transport layer acknowledgement */ +typedef enum { + mesh_instr_trans_ack_not_sent_out_of_memory = 0x00, + mesh_instr_trans_ack_not_sent_internal_error = 0x01, +} mesh_instr_trans_ack_not_sent_reason_t; +/** Number of instrumentation errors for not sending transport layer acknowledgement */ +#define mesh_instr_trans_receiver_ack_not_sent_reasons 2 + +/** Instrumentation result codes for not handling a transport layer acknowledgement */ +typedef enum { + mesh_instr_trans_ack_not_handled_not_found = 0x00, + mesh_instr_trans_ack_not_handled_non_cumulative = 0x01, +} mesh_instr_trans_ack_not_handled_reason_t; +/** Number of instrumentation errors for not handling transport layer acknowledgement */ +#define mesh_instr_trans_sender_ack_not_handled_reasons 2 + +/** Instrumentation result codes for receiving a transport layer message */ +typedef enum { + mesh_instr_trans_receive_success = 0x00, + mesh_instr_trans_receive_incomplete = 0x01, + mesh_instr_trans_receive_sender_cancelled = 0x02, + mesh_instr_trans_receive_receiver_cancelled = 0x03, +} mesh_instr_trans_receive_status_t; +/** Number of instrumentation errors for transport layer message reception */ +#define mesh_instr_trans_receiver_receive_reasons 3 + +/** Instrumentation result codes for not sending a transport layer PDU */ +typedef enum { + mesh_instr_trans_pdu_not_sent_wrong_state = 0x00, + mesh_instr_trans_pdu_not_sent_out_of_memory = 0x01, + mesh_instr_trans_pdu_not_sent_internal_error = 0x02, +} mesh_instr_trans_pdu_not_sent_reason_t; +/** Number of instrumentation errors for not sending transport layer PDU */ +#define mesh_instr_trans_sender_pdu_not_sent_reasons 3 + +/** Instrumentation result codes for not sending a transport layer SDU */ +typedef enum { + mesh_instr_trans_sdu_not_sent_invalid_src = 0x00, + mesh_instr_trans_sdu_not_sent_invalid_dst = 0x01, + mesh_instr_trans_sdu_not_sent_invalid_key = 0x02, + mesh_instr_trans_sdu_not_sent_wrong_state = 0x03, + mesh_instr_trans_sdu_not_sent_out_of_memory = 0x04, + mesh_instr_trans_sdu_not_sent_internal_error = 0x05, +} mesh_instr_trans_sdu_not_sent_reason_t; +/** Number of instrumentation errors for not sending transport layer SDU */ +#define mesh_instr_trans_sender_sdu_not_sent_reasons 6 + +/** Instrumentation result codes for sending a transport layer message */ +typedef enum { + mesh_instr_trans_send_success = 0x00, + mesh_instr_trans_send_timeout = 0x01, + mesh_instr_trans_send_receiver_cancelled = 0x02, + mesh_instr_trans_send_out_of_memory = 0x03, + mesh_instr_trans_send_internal_error = 0x04, + mesh_instr_trans_send_sender_cancelled = 0x05, +} mesh_instr_trans_send_status_t; +/** Number of instrumentation errors for transport layer message sending */ +#define mesh_instr_trans_sender_send_reasons 5 + +/** Mesh stack statistics counters */ +typedef struct { + /** Network decryption failure counter */ + uint32_t net_pdu_decryption_failure; + /** Network decryption success counter */ + uint32_t net_pdu_decrypted; + /** Network PDU dropped counter */ + uint32_t net_pdu_dropped[mesh_instr_net_pdu_dropped_reasons]; + /** Network PDU handled counter */ + uint32_t net_pdu_handled; + /** Network PDU not handled counter */ + uint32_t net_pdu_not_handled[mesh_instr_net_pdu_not_handled_reasons]; + /** Network PDU relayed counter */ + uint32_t net_pdu_relayed; + /** Network PDU not relayed counter */ + uint32_t net_pdu_not_relayed[mesh_instr_net_pdu_not_relayed_reasons]; + /** Network PDU sent counter */ + uint32_t net_pdu_sent; + /** Network PDU not sent counter */ + uint32_t net_pdu_not_sent[mesh_instr_net_pdu_not_sent_reasons]; + + /** Transport PDU processed counter */ + uint32_t trans_pdu_handled; + /** Transport PDU not handled counter */ + uint32_t trans_pdu_not_handled[mesh_instr_trans_pdu_not_handled_reasons]; + + /** Transport SDU reception started counter */ + uint32_t trans_receiver_start; + /** Transport SDU reception ended counter */ + uint32_t trans_receiver_cleanup[mesh_instr_trans_receiver_receive_reasons]; + /** Transport SDU received counter */ + uint32_t trans_receiver_recv; + /** Transport acknowledgement sent counter */ + uint32_t trans_receiver_ack_sent; + /** Transport acknowledgement not sent counter */ + uint32_t trans_receiver_ack_not_sent[mesh_instr_trans_receiver_ack_not_sent_reasons]; + /** Transport receive timer set counter */ + uint32_t trans_receiver_timer_set; + /** Transport receive timer expired counter */ + uint32_t trans_receiver_timer_expired; + + /** Transport sender started counter */ + uint32_t trans_sender_start; + /** Transport sender out of resources counter */ + uint32_t trans_sender_table_full; + /** Transport sender ended counter */ + uint32_t trans_sender_cleanup[mesh_instr_trans_sender_send_reasons]; + /** Transport acknowledgement handled counter */ + uint32_t trans_sender_ack_handled; + /** Transport acknowledgement not handled counter */ + uint32_t trans_sender_ack_not_handled[mesh_instr_trans_sender_ack_not_handled_reasons]; + /** Transport PDU sent counter */ + uint32_t trans_sender_pdu_sent; + /** Transport PDU not sent counter */ + uint32_t trans_sender_pdu_not_sent[mesh_instr_trans_sender_pdu_not_sent_reasons]; + /** Transport SDU sent counter */ + uint32_t trans_sender_sdu_sent; + /** Transport SDU not sent counter */ + uint32_t trans_sender_sdu_not_sent[mesh_instr_trans_sender_sdu_not_sent_reasons]; + /** Transport sender timer set counter */ + uint32_t trans_sender_timer_set; + /** Transport sender timer expired counter */ + uint32_t trans_sender_timer_expired; +} mesh_statistics_t; + +/** Pointer to current mesh statistics */ +extern mesh_statistics_t *mesh_stats; + +/** Instrumentation result codes for not sending an advertisement */ +typedef enum { + mesh_instr_adv_not_sent_out_of_memory = 0x00, + mesh_instr_adv_not_sent_internal_error = 0x01, +} mesh_instr_adv_not_sent_reason_t; + +/** Instrumentation result codes for removing an advertisement from send queue */ +typedef enum { + mesh_instr_adv_queue_pop_finished = 0x00, + mesh_instr_adv_queue_pop_cancelled = 0x01, +} mesh_instr_adv_queue_pop_reason_t; + +/** Convert integer to pointer */ +#define MESH_I2P(i) ((void *)((uintptr_t)(i))) + +/** Convert pointer to integer */ +#define MESH_P2I(p) ((uintptr_t)(p)) + +/** Scheduled callback function. + A scheduled callback will be called by + the platform once a request made by the mesh stack, by calling + mesh_platform_callback_schedule() has expired. */ +typedef void (*mesh_scheduled_cb_fn)(uint32_t handle, void *ctx); + +/** Scheduled callback function. for non-cancellable events + A scheduled callback will be called by + the platform once a request made by the mesh stack, by calling + mesh_platform_callback_schedule_event() has expired. */ +typedef void (*mesh_scheduled_event_cb_fn)(uint32_t event, void *ctx); + +/** Stack diagnostic event types */ +typedef enum { + mesh_stack_diag_event_config_server_beacon_set, + mesh_stack_diag_event_config_server_default_ttl_set, + mesh_stack_diag_event_config_server_friend_set, + mesh_stack_diag_event_config_server_gatt_proxy_set, + mesh_stack_diag_event_config_server_nettx_set, + mesh_stack_diag_event_config_server_node_identity_set, + mesh_stack_diag_event_config_server_relay_set, + mesh_stack_diag_event_config_server_beacon_get, + mesh_stack_diag_event_config_server_default_ttl_get, + mesh_stack_diag_event_config_server_friend_get, + mesh_stack_diag_event_config_server_gatt_proxy_get, + mesh_stack_diag_event_config_server_nettx_get, + mesh_stack_diag_event_config_server_node_identity_get, + mesh_stack_diag_event_config_server_relay_get, + + mesh_stack_diag_event_replay_protection_list_load, + mesh_stack_diag_event_replay_protection_list_save, + mesh_stack_diag_event_replay_protection_list_flush, + mesh_stack_diag_event_replay_protection_list_set_entry, + mesh_stack_diag_event_replay_protection_list_clear_entry, + mesh_stack_diag_event_replay_protection_list_full, + + mesh_stack_diag_event_sar_config_server_transmitter_set, + mesh_stack_diag_event_sar_config_server_receiver_set, +} mesh_stack_diag_event_type_t; + +/** Diagnostic event for configuration server change */ +typedef union { + uint8_t beacon; /**< Value of beacon state after set request */ + uint8_t default_ttl; /**< Value of default TTL state after set request */ + uint8_t friend_; /**< Value of friend state after set request */ + uint8_t gatt_proxy; /**< Value of GATT proxy state after set request */ + struct { + uint8_t count; + uint8_t interval; + } nettx; /**< Value of network transmit state after set request */ + struct { + mesh_crypto_key_index_t index; + uint8_t enabled; + } node_identity; /**< Value of node identity state after set request */ + struct { + uint8_t enabled; + uint8_t count; + uint8_t interval; + } relay; /**< Value of relay state after set request */ +} mesh_stack_diag_event_config_server_t; + +/** Diagnostic event for replay protection list */ +typedef union { + struct { + uint16_t loaded_count; + uint16_t total_count; + sl_status_t result; + } load; /**< Replay protection list loaded from flash */ + struct { + uint16_t saved_count; + uint16_t total_count; + sl_status_t result; + } save; /**< Replay protection list saved to flash */ + // Nothing for flush + struct { + mesh_addr_t src; + bool cancel; + } set; /**< Replay protection list entry set */ + struct { + mesh_addr_t src; + } clear; /**< Replay protection list entry removed */ + // Nothing for full +} mesh_stack_diag_event_replay_protection_list_t; + +/** Diagnostic event for SAR configuration server change */ +typedef union { + mesh_sar_transmitter_config_t transmitter; /**< SAR Transmitter configuration value after set request */ + mesh_sar_receiver_config_t receiver; /**< SAR Receiver configuration value after set request */ +} mesh_stack_diag_event_sar_config_server_t; + +/** Stack diagnostic event */ +typedef struct { + mesh_stack_diag_event_type_t type; /**< Event type */ + union { + mesh_stack_diag_event_config_server_t config_server; /**< Config server event */ + mesh_stack_diag_event_replay_protection_list_t replay_protection_list; /**< Replay protection list event */ + mesh_stack_diag_event_sar_config_server_t sar_config_server; /**< SAR Config server event */ + }; +} mesh_stack_diag_event_t; + +/** + * Stack diagnostic event handler callback + */ +typedef void (*mesh_stack_diag_event_cb)(const mesh_stack_diag_event_t *event); + +/** Secure network beacon callback; called when a secure network + beacon is successfully received */ +typedef void (*mesh_network_beacon_cb)(mesh_crypto_key_index_t net_key_index, + uint8_t key_refresh, + uint8_t iv_update, + uint32_t ivindex); + +/** Unprovisioned device beacon callback; called when an unprovisioned + device beacon is successfully received */ +typedef void (*mesh_unprov_beacon_cb)(const uint8_t *uuid, + uint16_t oob, + const uint8_t *uri_hash, + mesh_bearer_t bearer, + const uint8_t *bdaddr, + uint8_t bdaddr_type, + int8_t rssi); + +/** Application layer message sending function signature; mainly + needed for easier writing of unit tests */ +typedef sl_status_t (*mesh_app_send_fn)(mesh_crypto_key_type_t app_key_type, + mesh_crypto_key_index_t app_key_index, + mesh_crypto_key_index_t net_key_index, + mesh_addr_t src, + mesh_addr_t dst, + const mesh_full_virtual_addr_t *va, + mesh_mic_t szmict, + mesh_model_t model, + struct bgbuf_t *message, + uint8_t message_flags, + uint8_t ttl, + mesh_send_cb cb, + mesh_trans_tx_event_cb tx_cb, + void *cb_param); + +/** + * event id for application information events + */ +typedef enum { + mesh_prov_capabilites_evt = 100, + mesh_prov_provisioning_suspended_evt, + mesh_prov_provisioning_start_evt, + mesh_prov_rfu_1_evt, + mesh_prov_rfu_2_evt, + mesh_prov_rfu_3_evt, + mesh_prov_rfu_4_evt, + mesh_prov_rfu_5_evt, +} mesh_prov_event_type_t; + +/** + * reason code indicating why provisioning was suspended + */ +typedef enum { + mesh_prov_reason_capabilities = 0, + mesh_prov_reason_link_open = 1, +} mesh_prov_suspension_reason_t; + +/** Suspend provisioning when Capabilities PDU has been received */ +#define MESH_PROV_SUSPENSION_FLAG_CAPABILITIES (1 << 0) + +/** Suspend provisioning when provisioning session is open */ +#define MESH_PROV_SUSPENSION_FLAG_LINK_OPEN (1 << 1) + +/** + * call back to carry events + */ +typedef void (*provisioner_event_handler_cb)(mesh_prov_event_type_t event_type, + const uint8_t *uuid, + uint8_t len, + const uint8_t *data); + +/** + * GATT Service advertisement type + */ +typedef enum { + mesh_gatt_adv_type_provisioning_service = 0, + mesh_gatt_adv_type_proxy_service, + mesh_gatt_adv_rfu_1, + mesh_gatt_adv_type_last +} mesh_gatt_adv_type_t; + +/** + * DCD page + */ +typedef struct { + uint8_t page_number; /**< Number of the Composition Data page */ + size_t size; /**< Length of the page data */ + const uint8_t *data; /**< Page content */ +} mesh_dcd_page_t; + +/** + * Model Metadata page + */ +typedef struct { + uint8_t page_number; /**< Number of the Model Metadata page */ + size_t size; /**< Length of the page data */ + const uint8_t *data; /**< Page content */ +} mesh_metadata_page_t; + +#endif diff --git a/protocol/bluetooth/inc/sl_btmesh_compatibility_macros.h b/protocol/bluetooth/inc/sl_btmesh_compatibility_macros.h new file mode 100644 index 00000000000..8f1564132f6 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_compatibility_macros.h @@ -0,0 +1,123 @@ +/***************************************************************************//** + * @brief Compatibility macros for bgcommon + ******************************************************************************* + * # License + * Copyright 2018 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 SL_BTMESH_COMPATIBILITY_MACROS_H_ +#define SL_BTMESH_COMPATIBILITY_MACROS_H_ +#include + +/* + IAR requires that macros are given before variable definition. + For example: + WEAK void func() {} + PACKSTRUCT(struct foo { int bar; }); + ALIGNED(256) struct foo bar; + */ + +#if defined(__IAR_SYSTEMS_ICC__) +/* IAR ICC */ + #define __STRINGIFY(a) #a + #ifndef ALIGNED + #define ALIGNED(alignment) _Pragma(__STRINGIFY(data_alignment = alignment)) + #endif + #ifndef PACKSTRUCT + #define PACKSTRUCT(decl) __packed decl + #endif + #define WEAK __weak + #define KEEP_SYMBOL __root +#ifdef NDEBUG + #define OPTIMIZE_SPEED _Pragma(__STRINGIFY(optimize = speed high)) +#else +/* Increasing optimization is not allowed */ + #define OPTIMIZE_SPEED +#endif +#elif defined(__GNUC__) +/* GNU GCC */ + #ifndef ALIGNED + #define ALIGNED(alignment) __attribute__((aligned(alignment))) + #endif + #ifndef PACKSTRUCT + #if defined(_WIN32) + #define PACKSTRUCT(decl) decl __attribute__((packed, gcc_struct)) + #else + #define PACKSTRUCT(decl) decl __attribute__((packed)) + #endif + #endif + #define WEAK __attribute__((weak)) + #define KEEP_SYMBOL __attribute__((used)) +#ifdef __clang__ +// clang does not support optimize attribute + #define OPTIMIZE_SPEED +#else + #define OPTIMIZE_SPEED __attribute__((optimize("O3"))) +#endif +#else +/* Unknown */ +#ifndef PACKSTRUCT + #define PACKSTRUCT(decl) decl +#endif + #define WEAK + #define KEEP_SYMBOL +#endif + +#ifndef PACKED + #ifdef __GNUC__ //GNU Packed definition + #define PACKED __attribute__((packed)) + #elif defined(__CWCC__) //Codewarrior + #define PACKED + #pragma options align=packed + #elif defined(__IAR_SYSTEMS_ICC__) + #define PACKED + #else + #define PACKED + #endif +#endif + +#ifndef ALIGNED_WORD_SIZE + #define ALIGNED_WORD_SIZE (4) +#endif + +#ifndef PACKSTRUCT + #ifdef __GNUC__ + #ifdef _WIN32 + #define PACKSTRUCT(decl) decl __attribute__((__packed__, gcc_struct)) + #else + #define PACKSTRUCT(decl) decl __attribute__((__packed__)) + #endif + #define ALIGNED __attribute__((aligned(ALIGNED_WORD_SIZE))) + #elif defined(__IAR_SYSTEMS_ICC__) + #define PACKSTRUCT(decl) __packed decl + #define ALIGNED + #elif _MSC_VER //msvc + #define PACKSTRUCT(decl) __pragma(pack(push, 1) ) decl __pragma(pack(pop) ) + #define ALIGNED + #else + #define PACKSTRUCT(a) a PACKED + #endif +#endif + +#ifndef WEAK + #if defined(__IAR_SYSTEMS_ICC__) +/* IAR ICC*/ + #define WEAK __weak + #elif defined(__GNUC__) +/* GNU GCC */ + #define WEAK __attribute__ ((weak)) + #else +/* Unknown */ + #define WEAK + #endif +#endif + +#endif /* SL_BTMESH_COMPATIBILITY_MACROS_H_ */ diff --git a/protocol/bluetooth/inc/sl_btmesh_device_properties.h b/protocol/bluetooth/inc/sl_btmesh_device_properties.h new file mode 100644 index 00000000000..b1bd6cd84d6 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_device_properties.h @@ -0,0 +1,1721 @@ +/******************************************************************************/ +/** + * @file sl_btmesh_device_properties.h + * @brief Silicon Labs Bluetooth Mesh Generic Model API + * + ******************************************************************************* + * (C) Copyright 2018 Silicon Labs, http://www.silabs.com + ******************************************************************************* + * This file is licensed under the Silabs License Agreement. See the file + * "Silabs_License_Agreement.txt" for details. Before using this software for + * any purpose, you must agree to the terms of that agreement. + ******************************************************************************/ + +#ifndef SL_BTMESH_DEVICE_PROPERTIES_H +#define SL_BTMESH_DEVICE_PROPERTIES_H + +#include "stdint.h" + +/** + * @brief Mesh Characteristics + * + * Mesh Characteristics + * The GATT characteristics below are used by device properties that are required by the Mesh Model specification, + * the Mesh Provisioning Service and the Mesh Proxy Service, excluding characteristics defined in the Bluetooth Core Specification + * or in the Bluetooth Service specifications. + */ + +/** + * Boolean + * 0: False + * 1: False + * 2-0xff: Prohibited + */ +typedef uint8_t boolean_t; + +/** + * Electric current + * Unit is ampere with a resolution of 0.01. Range is from 0 to 655.34. + * A value of 0xFFFF represents 'value is not known'. + */ +typedef uint16_t electric_current_t; + +/** + * Voltage + * The Voltage characteristic is used to represent a measure of positive electric potential difference in units of volts. + * Unit is volt with a resolution of 1/64V. + * Range: 0.0 to 1022.0 + * A value of 0xFFFF represents 'value is not known'. + * The minimum representable value represents the minimum value or lower, the maximum representable value represents the maximum value or higher. + */ +typedef uint16_t voltage_t; + +/** + * High Voltage + * The High Voltage characteristic is used to represent a measure of positive electric potential difference + * in units of volt. + * Unit is volt with a resolution of 1/64V represented as a 24-bit number. + * Range: 0.0 to 262143.97 + * A value of 0xFFFFFF represents “Value is not known”. + */ +typedef uint32_t high_voltage_t; + +/** Presence detected */ +/** + * Time Exponential 8 + * The Time Exponential 8 characteristic is used to represent a measure of period of time in seconds. + * The time duration is given by the value 1.1(N-64) in seconds, with N being the raw 8-bit value. + * Range is form 0.0 to 73216705. + * A raw value of 0x00 represents 0 seconds, and a raw value of 0xFF represents the total life of the device. + */ +typedef uint8_t time_exponential_8_t; + +/** + * Average Current + * This characteristic aggregates the Electric Current characteristic and instance of the Time Exponential 8 characteristic. + */ +typedef struct average_current { + /** Current */ + electric_current_t current; + /** Duration */ + time_exponential_8_t duration; +} average_current_t; +//typedef average_current_t average_current_t; + +/** + * Average Voltage + * This characteristic aggregates the Voltage characteristic and instance of the Time Exponential 8 characteristic. + */ +typedef struct average_voltage { + /** Voltage */ + voltage_t voltage; + /** Duration */ + time_exponential_8_t duration; +} average_voltage_t; +//typedef average_voltage_t average_voltage_t; + +/** + * Chromatic Distance From Planckian + * Unit is unitless with a resolution of 0.00001 with a range of -0.05 to 0.05. + * A value of 0xFFFF represents 'value is not known'. A value of 0xFFFE represents 'value is not valid'. + */ +typedef int16_t chromatic_distance_from_planckian_t; + +/** + * Chromaticity Coordinate + * This characteristic represents a chromaticity coordinate in a color diagram such as the CIE1931 diagram. It can represent an x or y coordinate. + */ +typedef uint16_t chromaticity_coordinate_t; + +/** + * Chromaticity Coordinates + * This characteristic represents a chromaticity coordinate as a tuple with an x and y coordinate. + * Unit is unitless with a resolution of 1/65535 in the range of 0 to 1.0 + */ +typedef struct chromaticity_coordinates { + /** Chromaticity x-coordinate */ + chromaticity_coordinate_t x; + /** Chromaticity y-coordinate */ + chromaticity_coordinate_t y; +} chromaticity_coordinates_t; + +/* + * + * Chromaticity Tolerance + * Cie 13.3-1995 Color Rendering Index + */ + +/** Coefficient + * The Coefficient characteristic is used to represent a general coefficient value. */ +typedef float coefficient_t; + +/** + * Correlated Color Temperature + * Unit is Kelvin with a resolution of 1, ranging from 800 to 65534. + * A value of 0xFFFF represents 'value is not known'. + */ +typedef uint16_t correlated_color_temperature_t; + +/** Count 16 */ +typedef uint16_t count16_t; + +/** Count 24 */ +typedef uint32_t count24_t; + +/** + * Country Code + * This characteristic represents a country or dependent areas in accordance with the ISO 3166-1 Numeric standard.\ + * Unitless, a value of 0xFFFF represents 'value is not known'. + * + */ +typedef uint16_t country_code_t; + +/** + * Date UTC + * Date as days elapsed since the Epoch (Jan 1, 1970) in the Coordinated Universal Time (UTC) time zone. + * Unit is a day with a resolution of 1. Range is from 1 to 16777214. + * A value of 0x000000 represents 'value is not known'. + * NOTE: It is a 24-bit field; + */ +typedef uint32_t date_utc_t; + +/** + * The Temperature 8 characteristic is used to represent a measure of temperature with a unit of 0.5 degree Celsius. + * Unit is degree Celsius with a resolution of 0.5 + * A value of 0xFF represents 'value is not known'. + */ +typedef int8_t temperature_8_t; + +/** + * The Time Decihour 8 characteristic is used to represent a period of time in tenths of an hour. + * Unit is hour with a resolution of 0.1. + * A value of 0xFF represents 'value is not known'. All other values are Prohibited. + */ +typedef uint8_t time_decihour_8_t; + +/** + * Electric Current Range + * This characteristic aggregates two instances of the Electric Current characteristic to represent a range of Electric Current values. + */ +typedef struct electric_current_range { + /** Minimum current */ + electric_current_t minimum; + /** Maximum current */ + electric_current_t maximum; +} electric_current_range_t; + +/** + * Electric Current Specification + * This characteristic aggregates three instances of the Electric Current characteristic to represent a specification of electric current values. + */ +typedef struct electric_current_specification { + /** Minimum */ + electric_current_t minimum; + /** Current */ + electric_current_t typical; + /** Maximum */ + electric_current_t maximum; +} electric_current_specification_t; + +/** + * Electric Current Statistics + * This characteristic aggregates four instances of the Electric Current characteristic with a Sensing Duration to represent a set of statistical electric current values. + */ +typedef struct electric_current_statistics { + /** Current */ + electric_current_t current; + /** Standard deviation */ + electric_current_t std_deviation; + /** Minimum */ + electric_current_t minimum; + /** Maximum */ + electric_current_t maximum; + /** Sensing duration */ + time_exponential_8_t sensing_duration; +} electric_current_statistics_t; + +/** + * Energy + * The Energy characteristic is used to represent a measure of energy in units of kilowatt hours. + * Unit is kilowatt-hour with a resolution of 1. + * Format UINT24, ranging from 0 to 16777214. + * A value of 0xFFFFFF represents ‘value is not known’. + */ +typedef uint32_t energy_t; + +/** + * Energy32 + * The Energy32 characteristic is used to represent a measure of energy in units of kilowatt-hours, + * with a precision of 1 Watt-hour. + * Format UINT32, ranging from 0.000 to 4294967.293. + * A value of 0xFFFFFFFE represents ’value is not valid’. + A value of 0xFFFFFFFF represents ‘value is not known’. + */ +typedef uint32_t energy32_t; + +/** + * Apparent Energy32 + * The integral of Apparent Power over a time interval, represented in units of kVAh (kilo-volt-ampere-hour), + * with a resolution of 1 volt-ampere-hour. + * Format UINT32, ranging from 0.000 to 4294967.293. + * A value of 0xFFFFFFFE represents ’value is not valid’. + A value of 0xFFFFFFFF represents ‘value is not known’. + */ +typedef uint32_t apparent_energy32_t; + +/** + * Energy In A Period Of Day + * This characteristic aggregates the Energy characteristic, and two instances of the Time Decihour 8 characteristic, + * to represent energy use in a period of day. + */ +typedef struct energy_in_a_period_of_day { + /** Energy Value */ + energy_t energy; + /** Start time */ + time_decihour_8_t start_time; + /** End time */ + time_decihour_8_t end_time; +} energy_in_a_period_of_day_t; + +/** + * Fixed String 8 * + * The Fixed String 8 characteristic represents a 8-octet UTF-8 string. + */ +typedef uint8_t fixed_string8[8]; + +/** + * Fixed String 16 * + * The Fixed String 16 characteristic represents a 16-octet UTF-8 string. + */ +typedef uint8_t fixed_string16[16]; + +/** + * Fixed String 24 * + * The Fixed String 24 characteristic represents a 24-octet UTF-8 string. + */ +typedef uint8_t fixed_string24[24]; + +/** + * Fixed String 36 * + * The Fixed String 16 characteristic represents a 36-octet UTF-8 string. + */ +typedef uint8_t fixed_string36[36]; + +/** + * Temperature 8 in a period of a day + * This characteristic aggregates the Temperature 8 characteristic, and two instances of + * the Time Decihour 8 characteristic, to represent a temperature value in a period of day. + */ +typedef struct temperature_8_in_a_period_of_day { + /** Temperature */ + temperature_8_t temperature; + /** Start time */ + time_decihour_8_t start_time; + /** End time */ + time_decihour_8_t end_time; +} temperature_8_in_a_period_of_day_t; + +/** + * Temperature 8 Statistics + * This characteristic aggregates four instances of the Temperature 8 characteristic, + * and one instance of the Time Exponential 8 characteristic. + * + */ +typedef struct temperature_8_statistics { + /** Average */ + temperature_8_t average; + /** Standard Deviation value */ + temperature_8_t standard_deviation_value; + /** Minimum Value */ + temperature_8_t minimum_value; + /** Maximum Value */ + temperature_8_t maximum_value; + /** Sensing Duration */ + time_exponential_8_t sensing_duration; +} temperature_8_statistics_t; + +/** + * Present Input Current + */ +typedef electric_current_t present_input_current_t; + +/** + * Present Output Current + */ +typedef electric_current_t present_output_current_t; + +/** + * Average Input Current + * This property represents the most recently measured average current for the element. + * It consists of the average current value and the averaging period. + */ +typedef average_current_t average_input_current_t; +/** + * Average Output Current + * This property represents the average output current for the device. + * This property consists of two fields: + * the first value (Electric Current Value) is the average current of a set of current values, + * and the second value (Sensing Duration) the period over which the set of values were measured. + */ +typedef average_current_t average_output_current_t; + +/** + * Temperature + * Unit is in degrees Celsius with a resolution of 0.01 degrees Celsius + * Range: 327.68 to 327.67. + * NOTE: there is no 'UNKNOWN' value defined in the specification + */ +typedef int16_t temperature_t; + +/** + * High Temperature + * Unit is in degrees Celsius with a resolution of 0.5 degrees Celsius + * Range: -273 to 16383.5 + * Values 0x8002 to 0xFDDE are prohibited. + * A value of 0x8001 represents “Value is not valid”. + * A value of 0x8000 represents “Value is not known”. + */ +typedef int16_t high_temperature_t; + +/** + * Temperature Statistics + * This characteristic aggregates four instances of the Temperature characteristic, + * and one instance of the Time Exponential 8 characteristic. + */ +typedef struct temperature_statistics { + /** Average temperature */ + temperature_t average; + /** Standard deviation */ + temperature_t standard_deviation; + /** Minimum */ + temperature_t minimum; + /** Minimum */ + temperature_t maximum; + /** Duration */ + time_exponential_8_t duration; +} temperature_statistics_t; + +/** + * Temperature Range + * This characteristic aggregates two instances of the Temperature characteristic to represent a temperature range. + */ +typedef struct temperature_range { + /** Minimum Temperature */ + temperature_t minimum; + /** Maximum temperature */ + temperature_t maximum; +} temperature_range_t; + +/** + * Time Hour 24 + * The Time Hour 24 characteristic is used to represent a period of time in hours. + * Unit is hour with a resolution of 1. + * Range: 0 to 16777214 + * A value of 0xFFFFFF represents 'value is not known'. + * Should be 24 bits, only if uint24 existed. Packed structure should define the field length; + */ +typedef uint32_t time_hour_24_t; + +/** + * Device Runtime Since Turn On + * This property represents the total time the element has been operating in the + * On-state since it was turned on the last time. A value of 0 represents that the run time is not known. + */ +typedef time_hour_24_t device_runtime_since_turn_on_t; +/** + * Device Runtime Warranty + * This property represents the total operating time covered by the warranty. + */ +typedef time_hour_24_t device_runtime_warranty_t; +/** + * Total Device Power On Time + * This property represents the total of the recorded duration the device has been powered on. + * A value of 0 represents that this time is not known. + */ +typedef time_hour_24_t total_device_power_on_time_t; +/** + * Total Device Runtime + * This property represents the total time that the element has been operating (has been in an On-state). + */ +typedef time_hour_24_t total_device_runtime_t; +/** + * Total Light Exposure Time + * This property represents the total recorded sensing duration of a light sensor (typically a photodetector). + * This property typically can, for example, be used in combination with the Relative Exposure Time In An Illuminance Range property + * to calculate absolute exposure times of an illuminated work of art as presented in a histogram. + */ +typedef time_hour_24_t total_light_exposure_time_t; + +/** + * Time Millisecond 24 + * The Time Millisecond 24 characteristic is used to represent a period of time with a resolution of 1 millisecond. + * Unit is second with a resolution of 0.001. + * Range: 0 to 16777.214 + * A value of 0xFFFFFF represents 'value is not known'. + * Should be 24 bits, if uint24 existed... Packed structures should define the length for the fields. + * + */ +typedef uint32_t time_millisecond_24_t; + +/** + * Illumincance + * The Illuminance characteristic is used to represent a measure of illuminance in units of lux. + * Unit is lux with a resolution of 0.01, in the range of 0 to 167772.14, represented on uint24. + * 0xFFFFFF represents unknown value + */ +typedef uint32_t illuminance_t; + +/** + * Light Control Time Fade + * This property represents the time a light takes to transition from a run state to a prolong state. + * The run state is the state when the light is running at normal light level, + * the prolong state is an intermediate state of a light between the run state and the standby state. + */ +typedef time_millisecond_24_t light_control_time_fade; + +/** + * Light Control Time Fade On + * This property represents the time lights take to transition from a standby state to a run state. + */ +typedef time_millisecond_24_t light_control_time_fade_on; + +/** + * Light Control Time Fade Standby Auto + * This property represents the time lights transition from a prolong state to a standby state when + * the transition is automatic (such as when triggered by an occupancy or light sensor). + */ +typedef time_millisecond_24_t light_control_time_standby_auto; + +/** + * Light Control Time Fade Standby Auto + * This property represents the time lights transition from a prolong state to a standby state when + * the transition is automatic (such as when triggered by an occupancy or light sensor). + */ +typedef time_millisecond_24_t light_control_time_standby_manual; + +/** + * Light Control Time Fade Standby Manual + * This property represents the time lights take to transition from a prolong state to an standby state + * when the transition is triggered by a manual operation (for example by a user operating a light switch). + */ +typedef time_millisecond_24_t light_control_time_occupancy_delay; + +/** + * Light Control Time Prolong + * This property represents the duration of the prolong state which is the state of a device between its run state and its standby state. + */ +typedef time_millisecond_24_t light_control_time_prolong; + +/** + * Light Control Time Run On + * This property represents the duration of the run state after last occupancy was detected. + * This duration can be used to prevent lights from entering a standby state, for example, + * when people are still in a room and occupancy detectors fail to detect occupancy (which could occur, + * for example, with passive infrared motion sensors and people in the room not moving for a period of time). + */ +typedef time_millisecond_24_t light_control_time_run_on; + +/** + * Percentage 8 + * The Percentage 8 characteristic is used to represent a measure of percentage. + * Unit is a percentage with a resolution of 0.5. + * Range 0 to 100, a value of 0xFF represents 'value is not known'. All other values are Prohibited. + */ +typedef uint8_t percentage_8_t; + +/** + * Power + * The Power characteristic is used to represent a measure of power in units of watts. + * Unit is watt with a resolution of 0.1. + * Range is from 0 to 0 1677721.4 represented by a 24-bit unsiged integer. + * A value of 0xFFFFFF represents 'value is not known'. All other values are Prohibited. + */ +typedef uint32_t power_t; + +/** + * Apparent Power + * Apparent power is expressed in volt-amperes (VA) since it is the product of quadratic mean + * voltage and quadratic mean current. + * Range is from 0 to 0 1677721.3 represented by a 24-bit unsiged integer. + * A value of 0xFFFFFE represents 'value is not valid'. + * A value of 0xFFFFFF represents 'value is not known'. + */ +typedef uint32_t apparent_power_t; + +/** + * Power specification + * This characteristic aggregates three instances of the Power characteristic to represent a specification of Power values. + */ +typedef struct power_specification { + /** Minimum power value */ + power_t minimum_power_value; + /** Typical power value */ + power_t typical_power_value; + /** Maximum power value */ + power_t maximum_power_value; +} power_specification_t; + +/** + * Time Second 16 + * The Time Second 16 characteristic is used to represent a period of time with a unit of 1 second. + * Unit is second with a resolution of 1. + * Range: 0 to 65534. + * A value of 0xFFFF represents 'value is not known'. + */ +typedef uint16_t time_second_16_t; + +/** + * Time Second 32 + * The Time Second 32 characteristic is used to represent a period of time with a unit of 1 second. + * Unit is second with a resolution of 1. + * Range: 0 to 4294967294. + * A value of 0xFFFFFFFF represents 'value is not known'. + */ +typedef uint32_t time_second_32_t; + +/** + * Event Statistics + * This characteristic aggregates the Count 16 characteristic, two instances of the + * Time Decihour 8 characteristic and an instance of the Sensing Duration characteristic, + * to represent statistical values of events. + */ +typedef struct event_statistics { + /** Number of events */ + count16_t number_of_events; + /** Average Event Duration */ + time_second_16_t average_event_duration; + /** Time Elapsed Since Last Event */ + time_exponential_8_t time_since_last_event; + /** Sensing Duration */ + time_exponential_8_t sensing_duration; +} event_statistics_t; + +/** + * Time Since Motion Sensed + */ +typedef time_second_16_t time_since_motion_sensed_t; + +/** Time Since Presence Detected */ +typedef time_second_16_t time_since_presence_detected_t; + +/** + * Present Input Voltage + * This property represents the most recently measured input voltage for the device. + */ +typedef voltage_t present_input_voltage_t; + +/** + * Present Output voltage + * This property represents the present output voltage of the power supply. + * Unit is volt with a resolution of 1/64V represented on uint16, ranging from 0.0 to 1022.0. + * A value of 0xFFFF represents 'value is not known'. + * The minimum representable value represents the minimum value or lower, + * the maximum representable value represents the maximum value or higher. + */ +typedef voltage_t present_output_voltage_t; + +/** + * Voltage Specification + * This characteristic aggregates three instances of the Voltage characteristic to represent a specification of voltage values. + */ +typedef struct voltage_specification { + /** Minimum */ + voltage_t minimum; + /** Typical */ + voltage_t typical; + /** Maximum */ + voltage_t maximum; +} voltage_specification_t; + +/** + * Input Voltage Range specification + * This property represents the minimum, typical, and maximum input voltage range + * as specified for a device. + * These values can be used together with the measured input voltages to check if + * the device is operating within specification. + */ +typedef voltage_specification_t input_voltage_range_specification_t; + +/** + * Output Voltage Range + * This property represents the minimum and maximum output voltage of the power supply. + */ +typedef voltage_specification_t output_voltage_range_t; + +/** + * Voltage statistics + * This characteristic aggregates four instances of the Voltage characteristic and + * an instance of the Time Exponential 8 characteristic to represent a set of + * statistical voltage values over a period of time. + */ +typedef struct voltage_statistics { + /** Average voltage */ + voltage_t average; + /** Standard deviation */ + voltage_t standard_deviation; + /** Minimum */ + voltage_t minimum; + /** Maximum */ + voltage_t maximum; + /** Duration */ + time_exponential_8_t duration; +} voltage_statistics_t; + +/** Output Voltage Statistics */ +typedef voltage_statistics_t output_voltage_statistics_t; + +/** Input Voltage Statistics */ +typedef voltage_statistics_t input_voltage_statistics_t; + +/** + * Average Input Voltage + */ +typedef average_voltage_t average_input_voltage_t; +/** + * Average Output Voltage + */ +typedef average_voltage_t average_output_voltage; + +/** + * Voltage Frequency + * Power supply voltage frequency measured in hertz + * Unit is hertz with resolution of 1 represented as a 16-bit number. + * Range is from 1 to 65533. + * A value of 0 represents DC power supply. + * A value of 0xFFFE represents “Value is not valid”. + * A value of 0xFFFF represents “Value is not known”. + */ +typedef uint16_t voltage_frequency_t; + +/** + * Cosine Of The Angle + * The Cosine Of The Angle characteristic represents a value of cosine of the angle. + * This is unitless value, expressed as Cos(o)/100, with a resolution of 1. + * Unit: org.bluetooth.unit.unitless + * Allowed range is -100 to 100. + * A raw value of 0x7F represents ’value is not known’. + */ +typedef uint8_t cosine_of_the_angle_t; + +/** + * Humidity + * The Humidity characteristic is used to represent the humi + * Unit is in percent with a resolution of 0.01 percent. + * Allowed range is 0.00 to 100.00 + * A value of 0xFFFF represents "value is not known" + */ +typedef uint16_t humidity_t; + +/** + * CO2 Concentration + * The CO2 Concentration characteristic is used to represent a measure of carbon dioxide + * concentration in units of parts per million. + * Unit is parts per million (ppm) with a resolution of 1. + * Allowed range is: 0 to 65533. + * A value of 0xFFFE represents ‘value is 65534 or greater’. + * A value of 0xFFFF represents ‘value is not known. + */ +typedef uint16_t co2_concentration_t; + +/** + * VOC Concentration + * The VOC Concentration characteristic is used to represent a measure of volatile organic + * compounds concentration in units of parts per billion + * Unit is parts per billion (ppb) with a resolution of 1. + * Allowed range is: 0 to 65533. + * A value of 0xFFFE represents ‘value is 65534 or greater’. + * A value of 0xFFFF represents ‘value is not known. + */ +typedef uint16_t voc_concentration_t; + +/** + * Pollen Concentration + * The Pollen Concentration characteristic is used to represent the pollen count. + * Unit is pollen count per cubic metre, represented as uint24 + */ +typedef uint32_t pollen_concentration_t; + +/** + * Noise + * The Noise characteristic is used to represent a measure of sound pressure level in units of + * decibel. + * Unit is decibel with a resolution of 1. + * Allowed range is: 0 to 253. + * A value of 0xFE represents ‘value is 254 or greater’. + * A value of 0xFF represents ‘value is not known’. + */ +typedef uint8_t noise_t; + +/** + * Pressure + * Yhe Pressure characteristic is used to represent pressure + * Unit is Pascals with a resolution of 0.1 Pa + */ +typedef uint32_t pressure_t; + +/** + * Apparent Wind Direction + * The Apparent Wind Direction characteristic is used to represent the apparent wind direction + * Unit is degrees with a resolution of 0.01 degrees + * Range is from 0 to 359.99 represented as a 16-bit number. + */ +typedef uint16_t apparent_wind_direction_t; + +/** + * True Wind Direction + * The True Wind Direction characteristic is used to represent the true wind direction + * Unit is degrees with a resolution of 0.01 degrees + * Range is from 0 to 359.99 represented as a 16-bit number. + */ +typedef uint16_t true_wind_direction_t; + +/** + * Apparent Wind Speed + * The Apparent Wind Speed characteristic is used to represent the apparent wind speed + * Unit is in metres per second with a resolution of 0,01 m/s + * Range is from 0 to 655.35 represented as a 16-bit number. + */ +typedef uint16_t apparent_wind_speed_t; + +/** + * True Wind Speed + * The True Wind Speed characteristic is used to represent the true wind speed + * Unit is in metres per second with a resolution of 0,01 m/s + * Range is from 0 to 655.35 represented as a 16-bit number. + */ +typedef uint16_t true_wind_speed_t; + +/** + * Dew Point + * The Dew Point characteristic is used to represent the dew point in degrees Celsius. + * Unit is in degrees Celsius with a resolution of 1 degree Celsius. + */ +typedef int8_t dew_point_t; + +/** + * Gust Factor + * The Gust Factor characteristic is used to represent the gust factor + * Unitless value is represented as an 8-bit number. + * The factor has a fixed-point representation, where the actual factor is (attribute value * 0.1). + */ +typedef uint8_t gust_factor_t; + +/** + * Heat Index + * The Heat Index characteristic is used to represent the heat index + * The value is represented as a signed 8-bit number. + * Unit is in degrees Celsius. + */ +typedef int8_t heat_index_t; + +/** + * Light Distribution + * Light distribution is the projected pattern of outdoor light that a fixture disperses onto a surface. + * The value is represented as an unsigned 8-bit number and is an enumeration with the following values: + * 0: Type not specified + * 1: Type I + * 2: Type II + * 3: Type III + * 4: Type IV + * 5: Type V + * All other values are reserved for future use. + */ +typedef uint8_t light_distribution_t; + +/** + * Light Output + * Measure of the total quantity of visible light emitted by a source per unit of time. + * Unit is Lumen with resolution of 1, represented as 24 bit number. + * Range is from 0 to 16777213, + * A value of 0xFFFFFE represents “Value is not valid”. + * A value of 0xFFFFFF represents “Value is not known" + */ +typedef uint32_t light_output_t; + +/** + * Global Trade Item Number + * The Global Trade Item Number characteristic represents an identifier as issued by GS1 [6], which may + * consist up to 14 digits, and is here represented as a 48-bit unsigned integer. + */ +typedef uint8_t global_trade_item_number_t[6]; + +/** + * Magnetic Declination + * The Magnetic Declination characteristic is used to represent the magnetic declination. + * Unit is degrees with a resolution of 0.01 degrees + * Range is from 0 to 359.99 represented as a 16-bit number. + */ +typedef uint16_t magnetic_declination_t; + +/** + * Magnetic Flux Density - 2D + * The Magnetic Flux Density - 2D characteristic is used to represent measurements of magnetic flux + * density for two orthogonal axes: X and Y. + * Unit is 10^-7 Tesla. + */ +typedef struct { + uint16_t x; /**< X axis density */ + uint16_t y; /**< Y axis density */ +} magnetic_flux_density_2d_t; + +/** + * Magnetic Flux Density - 3D + * The Magnetic Flux Density - 3D characteristic is used to represent measurements of magnetic flux + * density for two orthogonal axes: X, Y, and Z. + * Unit is 10^-7 Tesla. + */ +typedef struct { + uint16_t x; /**< X axis density */ + uint16_t y; /**< Y axis density */ + uint16_t z; /**< Z axis density */ +} magnetic_flux_density_3d_t; + +/** + * Rainfall + * The Rainfall characteristic is used to represent the amount of rain that has fallen. + * Unit is meters with a resolution of 1mm, represented with a 16 bit number. + */ +typedef uint16_t rainfall_t; + +/** + * UV Index + * The UV Index characteristic is used to represent the UV Index. + * The unitless value is represented as an 8-bit number. + */ +typedef uint8_t uv_index_t; + +/** + * Wind Chill + * The Wind Chill characteristic is used to represent the wind chill factor. + * Unit is degrees Celsius, and the value is represented as a signed 8-bit number + */ +typedef int8_t wind_chill_t; + +/** + * Mesh Device Property union + */ +typedef struct mesh_device_property { + union { + /** int8 base type */ + int8_t int8; + /** uint8 base type */ + uint8_t uint8; + /** int16 base type */ + int16_t int16; + /** uint16 base type */ + uint16_t uint16; + /** uint32 base type */ + uint32_t uint32; + /** Apparent Energy32 */ + apparent_energy32_t apparent_energy; + /** Apparent Power */ + apparent_power_t apparent_power; + /** Apparent Wind Direction */ + apparent_wind_direction_t apparent_wind_direction; + /** Apparent Wind Speed */ + apparent_wind_speed_t apparent_wind_speed; + /** Average current */ + average_current_t average_current; + /** Average Voltage */ + average_voltage_t average_voltage; + /** Boolean */ + boolean_t boolean; + /** Chromatic distance from planckian */ + chromatic_distance_from_planckian_t chromatic_distance_from_planckian; + /** Chromaticitiy coordinates */ + chromaticity_coordinates_t chromaticity_coordinates; + /** Chromaticity tolerance */ + //chromaticity_tolerance_t chromaticity_tolerance_t; + // ** Color rendering index */ + //cie_color_rendering_index_t color_rendering_index; + /** CO2 Concentration */ + co2_concentration_t co2_concentration; + /** Coefficient */ + coefficient_t coefficient; + /** Correlated color temperature */ + correlated_color_temperature_t correlated_color_temperature; + /** Cosine of the angle */ + cosine_of_the_angle_t cosine_of_the_angle; + /** Count16 */ + count16_t count16; + /** Count24 */ + count24_t count24; + /** Country Code */ + country_code_t country_code; + /** Date UTC */ + date_utc_t date_utc; + /** Dew Point */ + dew_point_t dew_point; + /** Electric current */ + electric_current_t electric_current; + /** Electric current range */ + electric_current_range_t electric_current_range; + /** Electric current specification */ + electric_current_specification_t electric_current_specification; + /** Electric current statistics */ + electric_current_statistics_t electric_current_statistics; + /** Energy */ + energy_t energy; + /** Energy32 */ + energy32_t energy32; + /** Energy in a period of day */ + energy_in_a_period_of_day_t energy_in_a_period_of_day; + /** Event statistics */ + event_statistics_t event_statistics; + /** Global Trade Item Number */ + global_trade_item_number_t global_trade_item_number; + /** Gust Factor */ + gust_factor_t gust_factor; + /** Heat Index */ + heat_index_t heat_index; + /** High Temperature */ + high_temperature_t high_temperature; + /** High Voltage */ + high_voltage_t high_voltage; + /** Humidity */ + humidity_t humidity; + /** Illuminance */ + illuminance_t illuminance; + /** Light distribution */ + light_distribution_t light_distribution; + /** Light output */ + light_output_t light_output; + //luminous_efficacy_t luminous_efficacy; + //luminous_energy_t luminous_energy; + //luminous_exposure_t lumimous_exposure; + //luminous_flux_t luminous_flux; + //luminous_flux_range_t luminous_flux_range; + //luminois_intensity_t luminous_intensity; + //perceived_lightness_t perceived_lightness; + /** Magnetic Declination */ + magnetic_declination_t magnetic_declination; + /** Magnetic Flux Density - 2D */ + magnetic_flux_density_2d_t magnetic_flux_density_2d; + /** Magnetic Flux Density - 3D */ + magnetic_flux_density_3d_t magnetic_flux_density_3d; + /** Noise */ + noise_t noise; + /** Percentage */ + percentage_8_t percentage; + /** Pollen Concentration */ + pollen_concentration_t pollen_concentration; + /** Power */ + power_t power; + /** Power specification */ + power_specification_t power_specification; + /** Pressure */ + pressure_t pressure; + /** Rainfall */ + rainfall_t rainfall; + //relative_runtime_in_a_current_range_t relative_runtime_in_a_current_range; + //relative_runtime_in_a_relative_level_range_t relative_runtime_in_a_relative_level_range; + //relative_runtime_in_a_temperature_range_t relative_runtime_in_a_temperature_range; + //relative_value_in_a_temperature_range_t relative_value_in_a_temperature_range; + //relative_value_in_a_voltage_range_t relative_value_in_a_voltage_range; + //relative_value_in_a_an_illuminance_rang; + /** Temperature */ + temperature_t temperature; + /** Temperature 8 */ + temperature_8_t temperature_8; + /** Temperature 8 in a period of day */ + temperature_8_in_a_period_of_day_t temperature_8_in_a_period_of_day; + /** Temperature 8 statistics */ + temperature_8_statistics_t temperature_8_statistics; + /** Temperature range */ + temperature_range_t temperature_range; + /** Temperature statistics */ + temperature_statistics_t temperature_statistics; + /** Time hour 24 */ + time_hour_24_t time_hour_24; + /** Time millisecond 24 */ + time_millisecond_24_t time_millisecond_24; + /** Time second 16 */ + time_second_16_t time_second_16; + /** Time second 32 */ + time_second_32_t time_second_32; + /** True Wind Direction */ + true_wind_direction_t true_wind_direction; + /** True Wind Speed */ + true_wind_speed_t true_wind_speed; + /** UV Index */ + uv_index_t uv_index; + /** VOC Concentration */ + voc_concentration_t voc_concentration; + /** Voltage */ + voltage_t voltage; + /** Voltage Frequency */ + voltage_frequency_t voltage_frequency; + /** Voltage specification */ + voltage_specification_t voltage_specification; + /** Voltage statistics */ + voltage_statistics_t voltage_statistics; + wind_chill_t wind_chill; + }; +} mesh_device_property_t; + +/** + * @brief Mesh Device Properties + * + * Mesh Devices Properties + * + * A device property is a collection of one or more format descriptors that interpret data contained by a server state. + * The property is identified by an assigned Property ID, which references Generic Attributes (GATT) characteristics, + * and has a state called the Property Value. + * The device properties below are required by the Mesh Model specification, the Mesh Provisioning Service, and/or the Mesh Proxy Service. + */ + +typedef enum mesh_device_properties_e { + DEVICE_PROPERTY_INVALID = 0x0000, + /** Average Ambient Temperature In A Period Of Day + * Type: Temperature 8 In A Period Of Day */ + AVERAGE_AMBIENT_TEMPERATURE_IN_A_PERIOD_OF_DAY = 0x0001, + /** Average Input Current + * Type: Average Current */ + AVERAGE_INPUT_CURRENT = 0x0002, + /** Average Input Voltage + * Type: Average Voltage */ + AVERAGE_INPUT_VOLTAGE = 0x0003, + /** Average Output Current + * Type: Average Current */ + AVERAGE_OUTPUT_CURRENT = 0x0004, + /** Average Output Voltage + * Type: Average Voltage */ + AVERAGE_OUTPUT_VOLTAGE = 0x0005, + /** Center Beam Intensity At Full Power + * Type: Luminous Intensity */ + CENTER_BEAM_INTENSITY_AT_FULL_POWER = 0x0006, + /** Chromaticity Tolerance + * Type: Chromaticity Tolerance */ + CHROMATICITY_TOLERANCE = 0x0007, + /** Color Rendering Index R9 + * Type: Cie 13.3-1995 Color Rendering Index */ + COLOR_RENDERING_INDEX_R9 = 0x0008, + /** Color Rendering Index Ra + * Type: Cie 13.3-1995 Color Rendering Index */ + COLOR_RENDERING_INDEX_RA = 0x0009, + /** Device Appearance + * Type: Gap.Appearance */ + DEVICE_APPEARANCE = 0x000A, + /** Device Country Of Origin + * Type: Country Code */ + DEVICE_COUNTRY_OF_ORIGIN = 0x000B, + /** Device Date Of Manufacture + * Type: Date Utc */ + DEVICE_DATE_OF_MANUFACTURE = 0x000C, + /** Device Energy Use Since Turn On + * Type: Energy */ + DEVICE_ENERGY_USE_SINCE_TURN_ON = 0x000D, + /** Device Firmware Revision + * Type: Fixed String 8 */ + DEVICE_FIRMWARE_REVISION = 0x000E, + /** Device Global Trade Item Number + * Type: Global Trade Item Number */ + DEVICE_GLOBAL_TRADE_ITEM_NUMBER = 0x000F, + /** Device Hardware Revision + * Type: Fixed String 16 */ + DEVICE_HARDWARE_REVISION = 0x0010, + /** Device Manufacturer Name + * Type: Fixed String 36 */ + DEVICE_MANUFACTURER_NAME = 0x0011, + /** Device Model Number + * Type: Fixed String 24 */ + DEVICE_MODEL_NUMBER = 0x0012, + /** Device Operating Temperature Range Specification + * Type: Temperature Range */ + DEVICE_OPERATING_TEMPERATURE_RANGE_SPECIFICATION = 0x0013, + /** Device Operating Temperature Statistical Values + * Type: Temperature Statistics */ + DEVICE_OPERATING_TEMPERATURE_STATISTICAL_VALUES = 0x0014, + /** Device Over Temperature Event Statistics + * Type: Event Statistics */ + DEVICE_OVER_TEMPERATURE_EVENT_STATISTICS = 0x0015, + /** Device Power Range Specification + * Type: Power Specification */ + DEVICE_POWER_RANGE_SPECIFICATION = 0x0016, + /** Device Runtime Since Turn On + * Type: Time Hour 24 */ + DEVICE_RUNTIME_SINCE_TURN_ON = 0x0017, + /** Device Runtime Warranty + * Type: Time Hour 24 */ + DEVICE_RUNTIME_WARRANTY = 0x0018, + /** Device Serial Number + * Type: Fixed String 16 */ + DEVICE_SERIAL_NUMBER = 0x0019, + /** Device Software Revision + * Type: Fixed String 8*/ + DEVICE_SOFTWARE_REVISION = 0x001A, + /** Device Under Temperature Event Statistics + * Type: Event Statistics */ + DEVICE_UNDER_TEMPERATURE_EVENT_STATISTICS = 0x001B, + /** Indoor Ambient Temperature Statistical Values + * Type: Temperature 8 Statistics */ + INDOOR_AMBIENT_TEMPERATURE_STATISTICAL_VALUES = 0x001C, + /** Initial CIE 1931 Chromaticity Coordinates + * Type: Chromaticity Coordinates */ + INITIAL_CIE_1931_CHROMATICITY_COORDINATES = 0x001D, + /** Initial Correlated Color Temperature + * Type: Correlated Color Temperature */ + INITIAL_CORRELATED_COLOR_TEMPERATURE = 0x001E, + /** Initial Luminous Flux + * Type: Luminous Flux */ + INITIAL_LUMINOUS_FLUX = 0x001F, + /** Initial Planckian Distance + * Type: Chromatic Distance From Planckian */ + INITIAL_PLANCKIAN_DISTANCE = 0x0020, + /** Input Current Range Specification + * Type: Electric Current Specification */ + INPUT_CURRENT_RANGE_SPECIFICATION = 0x0021, + /** Input Current Statistics + * Type: Electric Current Statistics */ + INPUT_CURRENT_STATISTICS = 0x0022, + /** Input Over Current Event Statistics + * Type: Event Statistics */ + INPUT_OVER_CURRENT_EVENT_STATISTICS = 0x0023, + /** Input Over Ripple Voltage Event Statistics + * Type: Event Statistics */ + INPUT_OVER_RIPPLE_VOLTAGE_EVENT_STATISTICS = 0x0024, + /** Input Over Voltage Event Statistics + * Type: Event Statistics */ + INPUT_OVER_VOLTAGE_EVENT_STATISTICS = 0x0025, + /** Input Under Current Event Statistics + * Type: Event Statistics */ + INPUT_UNDER_CURRENT_EVENT_STATISTICS = 0x0026, + /** Input Under Voltage Event Statistics + * Type: Event Statistics */ + INPUT_UNDER_VOLTAGE_EVENT_STATISTICS = 0x0027, + /** Input Voltage Range Specification + * Type: Voltage Specification */ + INPUT_VOLTAGE_RANGE_SPECIFICATION = 0x0028, + /** Input Voltage Ripple Specification + * Type: Percentage 8 */ + INPUT_VOLTAGE_RIPPLE_SPECIFICATION = 0x0029, + /** Input Voltage Statistics + * Type: Voltage */ + INPUT_VOLTAGE_STATISTICS = 0x002A, + /** Light Control Ambient LuxLevel On + * Type: Illuminance*/ + LIGHT_CONTROL_AMBIENT_LUXLEVEL_ON = 0x002B, + /** Light Control Ambient LuxLevel Prolong + * Type: Illuminance */ + LIGHT_CONTROL_AMBIENT_LUXLEVEL_PROLONG = 0x002C, + /** Light Control Ambient LuxLevel Standby + * Type: Illuminance */ + LIGHT_CONTROL_AMBIENT_LUXLEVEL_STANDBY = 0x002D, + /** Light Control Lightness On + * Type: Perceived Lightness */ + LIGHT_CONTROL_LIGHTNESS_ON = 0x002E, + /** Light Control Lightness Prolong + * Type: Perceived Lightness */ + LIGHT_CONTROL_LIGHTNESS_PROLONG = 0x002F, + /** Light Control Lightness Standby + * Type: Perceived Lightness */ + LIGHT_CONTROL_LIGHTNESS_STANDBY = 0x0030, + /** Light Control Regulator Accuracy + * Type: Percentage 8 */ + LIGHT_CONTROL_REGULATOR_ACCURACY = 0x0031, + /** Light Control Regulator Kid + * Type: Coefficient */ + LIGHT_CONTROL_REGULATOR_KID = 0x0032, + /** Light Control Regulator Kiu + * Type: Coefficient */ + LIGHT_CONTROL_REGULATOR_KIU = 0x0033, + /** Light Control Regulator Kpd + * Type: Coefficient */ + LIGHT_CONTROL_REGULATOR_KPD = 0x0034, + /** Light Control Regulator Kpu + * Type: Coefficient */ + LIGHT_CONTROL_REGULATOR_KPU = 0x0035, + /** Light Control Time Fade + * Type: Time Millisecond 24 */ + LIGHT_CONTROL_TIME_FADE = 0x0036, + /** Light Control Time Fade On + * Type: Time Millisecond 24 */ + LIGHT_CONTROL_TIME_FADE_ON = 0x0037, + /** Light Control Time Fade Standby Auto + * Type: Time Millisecond 24 */ + LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO = 0x0038, + /** Light Control Time Fade Standby Manual + * Type: Time Millisecond 24 */ + LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL = 0x0039, + /** Light Control Time Occupancy Delay + * Type: Time Millisecond 24 */ + LIGHT_CONTROL_TIME_OCCUPANCY_DELAY = 0x003A, + /** Light Control Time Prolong + * Type: Time Millisecond 24 */ + LIGHT_CONTROL_TIME_PROLONG = 0x003B, + /** Light Control Time Run On + * Type: Time Millisecond 24 */ + LIGHT_CONTROL_TIME_RUN_ON = 0x003C, + /** Lumen Maintenance Factor + * Type: Percentage 8 */ + LUMEN_MAINTENANCE_FACTOR = 0x003D, + /** Luminous Efficacy + * Type: Luminous Efficacy */ + LUMINOUS_EFFICACY = 0x003E, + /** Luminous Energy Since Turn On + * Type: Luminous Energy */ + LUMINOUS_ENERGY_SINCE_TURN_ON = 0x003F, + /** Luminous Exposure + * Type: Luminous Exposure */ + LUMINOUS_EXPOSURE = 0x0040, + /** Luminous Flux Range + * Type: Luminous Flux Range */ + LUMINOUS_FLUX_RANGE = 0x0041, + /** Motion Sensed + * Type: Percentage 8 */ + MOTION_SENSED = 0x0042, + /** Motion Threshold + * Type: Percentage 8 */ + MOTION_THRESHOLD = 0x0043, + /** Open Circuit Event Statistics + * Type: Event Statistics */ + OPEN_CIRCUIT_EVENT_STATISTICS = 0x0044, + /** Outdoor Statistical Values + * Type: Temperature 8 Statistics */ + OUTDOOR_STATISTICAL_VALUES = 0x0045, + /** Output Current Range + * Type: Electric Current Range */ + OUTPUT_CURRENT_RANGE = 0x0046, + /** Output Current Statistics + * Type: Electric Current Statistics */ + OUTPUT_CURRENT_STATISTICS = 0x0047, + /** Output Ripple Voltage Specification + * Type: Percentage 8 */ + OUTPUT_RIPPLE_VOLTAGE_SPECIFICATION = 0x0048, + /** Output Voltage Range + * Type: Voltage Specification */ + OUTPUT_VOLTAGE_RANGE = 0x0049, + /** Output Voltage Statistics + * Type: Voltage Statistics */ + OUTPUT_VOLTAGE_STATISTICS = 0x004A, + /** Over Output Ripple Voltage Event Statistics + * Type: Event Statistics */ + OVER_OUTPUT_RIPPLE_VOLTAGE_EVENT_STATISTICS = 0x004B, + /** People Count + * Type: Count 16 */ + PEOPLE_COUNT = 0x004C, + /** Presence Detected + * Type: Boolean */ + PRESENCE_DETECTED = 0x004D, + /** Present Ambient Light Level + * Type: Illuminance */ + PRESENT_AMBIENT_LIGHT_LEVEL = 0x004E, + /** Present Ambient Temperature + * Type: Temperature 8 */ + PRESENT_AMBIENT_TEMPERATURE = 0x004F, + /** Present CIE 1931 Chromaticity Coordinates + * Type: Chromaticity Coordinates */ + PRESENT_CIE_1931_CHROMATICITY_COORDINATES = 0x0050, + /** Present Correlated Color Temperature + * Type: Correlated Color Temperature */ + PRESENT_CORRELATED_COLOR_TEMPERATURE = 0x0051, + /** Present Device Input Power + * Type: Power */ + PRESENT_DEVICE_INPUT_POWER = 0x0052, + /** Present Device Operating Efficiency + * Type: Percentage 8 */ + PRESENT_DEVICE_OPERATING_EFFICIENCY = 0x0053, + /** Present Device Operating Temperature + * Type: Temperature */ + PRESENT_DEVICE_OPERATING_TEMPERATURE = 0x0054, + /** Present Illuminance + * Type: Illuminance */ + PRESENT_ILLUMINANCE = 0x0055, + /** Present Indoor Ambient Temperature + * Type: Temperature 8*/ + PRESENT_INDOOR_AMBIENT_TEMPERATURE = 0x0056, + /** Present Input Current + * Type: Electric Current */ + PRESENT_INPUT_CURRENT = 0x0057, + /** Present Input Ripple Voltage + * Type: Percentage 8 */ + PRESENT_INPUT_RIPPLE_VOLTAGE = 0x0058, + /** Present Input Voltage + * Type: Voltage */ + PRESENT_INPUT_VOLTAGE = 0x0059, + /** Present Luminous Flux + * Type: Luminous Flux */ + PRESENT_LUMINOUS_FLUX = 0x005A, + /** Present Outdoor Ambient Temperature + * Type: Temperature 8 */ + PRESENT_OUTDOOR_AMBIENT_TEMPERATURE = 0x005B, + /** Present Output Current + * Type: Electric Current */ + PRESENT_OUTPUT_CURRENT = 0x005C, + /** Present Output Voltage + * Type: Voltage */ + PRESENT_OUTPUT_VOLTAGE = 0x005D, + /** Present Planckian Distance + * Type: Chromatic Distance From Planckian */ + PRESENT_PLANCKIAN_DISTANCE = 0x005E, + /** Present Relative Output Ripple Voltage + * Type: Percentage 8 */ + PRESENT_RELATIVE_OUTPUT_RIPPLE_VOLTAGE = 0x005F, + /** Relative Device Energy Use In A Period Of Day + * Type: Energy In A Period Of Day */ + RELATIVE_DEVICE_ENERGY_USE_IN_A_PERIOD_OF_DAY = 0x0060, + /** Relative Device Runtime In A Generic Level Range + * Type: Relative Runtime In A Generic Level Range */ + RELATIVE_DEVICE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE = 0x0061, + /** Relative Exposure Time In An Illuminance Range + * Type: Relative Value In An Illuminance Range */ + RELATIVE_EXPOSURE_TIME_IN_AN_ILLUMINANCE_RANGE = 0x0062, + /** Relative Runtime In A Correlated Color Temperature Range + * Type: Luminous Energy */ + RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE = 0x0063, + /** Relative Runtime In A Device Operating Temperature Range + * Type: Relative Value In A Temperature Range */ + RELATIVE_RUNTIME_IN_A_DEVICE_OPERATING_TEMPERATURE_RANGE = 0x0064, + /** Relative Runtime In An Input Current Range + * Type: Relative Runtime In A Current Range */ + RELATIVE_RUNTIME_IN_AN_INPUT_CURRENT_RANGE = 0x0065, + /** Relative Runtime In An Input Voltage Range + * Type: Relative Value In A Voltage Range */ + RELATIVE_RUNTIME_IN_AN_INPUT_VOLTAGE_RANGE = 0x0066, + /** Short Circuit Event Statistics + * Type: Event Statistics */ + SHORT_CIRCUIT_EVENT_STATISTICS = 0x0067, + /** Time Since Motion Sensed + * Type: Time Second 16 */ + TIME_SINCE_MOTION_SENSED = 0x0068, + /** Time Since Presence Detected + * Type: Time Second 16 */ + TIME_SINCE_PRESENCE_DETECTED = 0x0069, + /** Total Device Energy Use + * Type: Energy */ + TOTAL_DEVICE_ENERGY_USE = 0x006A, + /** Total Device Off On Cycles + * Type: Count 24 */ + TOTAL_DEVICE_OFF_ON_CYCLES = 0x006B, + /** Total Device Power On Cycles + * Type: Count 24 */ + TOTAL_DEVICE_POWER_ON_CYCLES = 0x006C, + /** Total Device Power On Time + * Type: Time Hour 24 */ + TOTAL_DEVICE_POWER_ON_TIME = 0x006D, + /** Total Device Runtime + * Type: Time Hour 24 */ + TOTAL_DEVICE_RUNTIME = 0x006E, + /** Total Light Exposure Time + * Type: Time Hour 24 */ + TOTAL_LIGHT_EXPOSURE_TIME = 0x006F, + /** Total Luminous Energy + * Type: Luminous Energy */ + TOTAL_LUMINOUS_ENERGY = 0x0070, + /** Desired Ambient Temperature + * Type: Temperature 8 */ + DESIRED_AMBIENT_TEMPERATURE = 0x0071, + /** Precise Total Device Energy Use + * Type: Energy32 */ + PRECISE_TOTAL_DEVICE_ENERGY_USE = 0x0072, + /** Power Factor + * Type: Cosine Of The Angle */ + POWER_FACTOR = 0x0073, + /** Sensor Gain + * Type: Coefficient */ + SENSOR_GAIN = 0x0074, + /** Precise Present Ambient Temperature + * Type: Temperature */ + PRECISE_PRESENT_AMBIENT_TEMPERATURE = 0x0075, + /** Present Ambient Relative Humidity + * Type: Humidity */ + PRESENT_AMBIENT_RELATIVE_HUMIDITY = 0x0076, + /** Present Ambient Carbon Dioxide Concentration + * Type: CO2 Concentration */ + PRESENT_AMBIENT_CO2_CONCENTRATION = 0x0077, + /** Present Ambient Volatile Organic Compounds Concentration + * Type: VOC Concentration */ + PRESENT_AMBIENT_VOC_CONCENTRATION = 0x0078, + /** Present Ambient Noise + * Type: Noise */ + PRESENT_AMBIENT_NOISE = 0x0079, + + /* -- No entries for 0x007A .. 0x007F -- */ + + /** Active Energy Loadside + * Energy32 */ + ACTIVE_ENERGY_LOADSIDE = 0x0080, + /** Active Power Loadside + * Type: Power */ + ACTIVE_POWER_LOADSIDE = 0x0081, + /** Air Pressure + * Type: Pressure */ + AIR_PRESSURE = 0x0082, + /** Apparent Energy + * Type: Apparent Energy32 */ + APPARENT_ENERGY = 0x0083, + /** Apparent Power + * Type: Apparent Power */ + APPARENT_POWER = 0x0084, + /** Apparent Wind Direction + * Type: Apparent Wind Direction */ + APPARENT_WIND_DIRECTION = 0x0085, + /** Apparent Wind Speed + * Type: Apparent Wind Speed */ + APPARENT_WIND_SPEED = 0x0086, + /** Dew Point + * Type: Dew Point */ + DEW_POINT = 0x0087, + /** External Supply Voltage + * Type: High Voltage */ + EXTERNAL_SUPPLY_VOLTAGE = 0x0088, + /** External Supply Voltage Frequency + * Type: Voltage Frequency */ + EXTERNAL_SUPPLY_VOLTAGE_FREQUENCY = 0x0089, + /** Gust Factor + * Type: Gust Factor */ + GUST_FACTOR = 0x008A, + /** Heat Index + * Type: Heat Index */ + HEAT_INDEX = 0x008B, + /** Light Distribution + * Type: Light Distribution */ + LIGHT_DISTRIBUTION = 0x008C, + /** Light Source Current + * Type: Average Current */ + LIGHT_SOURCE_CURRENT = 0x008D, + /** Light Source On Time Not Resettable + * Type: Time Second 32 */ + LIGHT_SOURCE_ON_TIME_NOT_RESETTABLE = 0x008E, + /** Light Source On Time Resettable + * Type: Time Second 32 */ + LIGHT_SOURCE_ON_TIME_RESETTABLE = 0x008F, + /** Light Source Open Circuit Statistics + * Type: Event Statistics */ + LIGHT_SOURCE_OPEN_CIRCUIT_STATISTICS = 0x0090, + /** Light Source Overall Failures Statistics + * Type: Event Statistics */ + LIGHT_SOURCE_OVERALL_FAILURES_STATISTICS = 0x0091, + /** Light Source Short Circuit Statistics + * Type: Event Statistics */ + LIGHT_SOURCE_SHORT_CIRCUIT_STATISTICS = 0x0092, + /** Light Source Start Counter Resettable + * Type: Count 24 */ + LIGHT_SOURCE_START_COUNTER_RESETTABLE = 0x0093, + /** Light Source Temperature + * Type: High Temperature */ + LIGHT_SOURCE_TEMPERATURE = 0x0094, + /** Light Source Thermal Derating Statistics + * Type: Event Statistics */ + LIGHT_SOURCE_THERMAL_DERATING_STATISTICS = 0x0095, + /** Light Source Thermal Shutdown Statistics + * Type: Event Statistics */ + LIGHT_SOURCE_THERMAL_SHUTDOWN_STATISTICS = 0x0096, + /** Light Source Power On Cycles + * Type: Count 24 */ + LIGHT_SOURCE_TOTAL_POWER_ON_CYCLES = 0x0097, + /** Light Source Voltage + * Type: Average Voltage */ + LIGHT_SOURCE_VOLTAGE = 0x0098, + /** Luminaire Color + * Type: Fixed String 24 */ + LUMINAIRE_COLOR = 0x0099, + /** Luminaire Identification Number + * Type: Fixed String 24 */ + LUMINAIRE_IDENTIFICATION_NUMBER = 0x009A, + /** Luminaire Manufacturer GTIN + * Type: Global Trade Item Number */ + LUMINAIRE_MANUFACTURER_GTIN = 0x009B, + /** Luminaire Nominal Input Power + * Type: Power */ + LUMINAIRE_NOMINAL_INPUT_POWER = 0x009C, + /** Luminaire Nominal Maximum AC Mains Voltage + * Type: Voltage */ + LUMINAIRE_NOMINAL_MAXIMUM_AC_MAINS_VOLTAGE = 0x009D, + /** Luminaire Nominal Minimum AC Mains Voltage + * Type: Voltage */ + LUMINAIRE_NOMINAL_MINIMUM_AC_MAINS_VOLTAGE = 0x009E, + /** Luminaire Power At Minimum Dim Level + * Type: Power */ + LUMINAIRE_POWER_AT_MINIMUM_DIM_LEVEL = 0x009F, + /** Luminaire Time Of Manufacture + * Type: Date UTC */ + LUMINAIRE_TIME_OF_MANUFACTURE = 0x00A0, + /** Magnetic Declination + * Type: Magnetic Declination */ + MAGNETIC_DECLINATION = 0x00A1, + /** Magnetic Flux Density - 2D + * Type: Magnetic Flux Density 2D */ + MAGNETIC_FLUX_DENSITY_2D = 0x00A2, + /** Magnetic Flux Density - 3D + * Type: Magnetic Flux Density 3D */ + MAGNETIC_FLUX_DENSITY_3D = 0x00A3, + /** Nominal Light Output + * Type: Light Output */ + NOMINAL_LIGHT_OUTPUT = 0x00A4, + /** Overall Failure Condition + * Type: Event Statistics */ + OVERALL_FAILURE_CONDITION = 0x00A5, + /** Pollen Concentration + * Type: Pollen Concentration */ + POLLEN_CONCENTRATION = 0x00A6, + /** Present Indoor Relative Humidity + * Type; Humidity */ + PRESENT_INDOOR_RELATIVE_HUMIDITY = 0x00A7, + /** Present Outdoor Relative Humidity + * Type; Humidity */ + PRESENT_OUTDOOR_RELATIVE_HUMIDITY = 0x00A8, + /** Pressure + * Type: Pressure */ + PRESSURE = 0x00A9, + /** Rainfall + * Type: Rainfall */ + RAINFALL = 0x00AA, + /** Rated Median Useful Life of Luminaire + * Type: Time Hour 24 */ + RATED_MEDIAN_USEFUL_LIFE_OF_LUMINAIRE = 0x00AB, + /** Rated Median Useful Light Source Starts + * Type: Count 24 */ + RATED_MEDIAN_USEFUL_LIGHT_SOURCE_STARTS = 0x00AC, + /** Reference Temperature + * Type: High Temperature */ + REFERENCE_TEMPERATURE = 0x00AD, + /** Total Device Starts + * Type: Count 24 */ + TOTAL_DEVICE_STARTS = 0x00AE, + /** True Wind Direction + * Type: True Wind Direction */ + TRUE_WIND_DIRECTION = 0x00AF, + /** True Wind Speed + * Type: True Wind Speed */ + TRUE_WIND_SPEED = 0x00B0, + /** UV Index + * Type: UV index */ + UV_INDEX = 0x00B1, + /** Wind Chill + * Type: Wind Chill */ + WIND_CHILL = 0x00B2, + /** + * */ + LIGHT_SOURCE_TYPE = 0x00B3, + /** Luminaire Identification String + * Type: Fixed String 24 */ + LUMINAIRE_IDENTIFICATION_STRING = 0x00B4, + /** Output Power Limitation + * Type: Event Statistics */ + OUTPUT_POWER_LIMITATION = 0x00B5, + /** Thermal Derating + * Type: Event Statistics */ + THERMAL_DERATING = 0x00B6, + /** Output Current Percent + * Type: Percentage 8 */ + OUTPUT_CURRENT_PERCENT = 0x00B7, +} mesh_device_properties_t; + +#if 0 +typedef enum mesh_characteristics_e { + /** Temperature - Listed in GATT Characteristics */ + TEMPERATURE = 0x2A6E, + /** Average Current */ + AVERAGE_CURRENT = 0x2AE0, + /** Average Voltage */ + AVERAGE_VOLTAGE = 0x2AE1, + /** Boolean */ + BOOLEAN = 0x2AE2, + /** Chromatic Distance From Planckian */ + CHROMATIC_DISTANCE_FROM_PLANCKIAN = 0x2AE3, + /** Chromaticity Coordinate */ + CHROMATICITY_COORDINATE = 0x2B1C, + /** Chromaticity Coordinates */ + CHROMATICITY_COORDINATES = 0x2AE4, + /** Chromaticity In CCT And Duv Values */ + CHROMATICITY_IN_CCT_AND_DUV_VALUES = 0x2AE5, + /** Chromaticity Tolerance */ + CHROMATICITY_TOLERANCE = 0x2AE6, + /** CIE 13.3-1995 Color Rendering Index */ + COLOR_RENDERING_INDEX = 0x2AE7, + /** Coefficient */ + COEFFICIENT = 0x2AE8, + /** Correlated Color Temperature */ + CORRELATED_COLOR_TEMPERATURE = 0x2AE9, + /** Count 16 */ + COUNT_16 = 0x2AEA, + /** Count 24 */ + COUNT_24 = 0x2AEB, + /** Country Code */ + COUNTRY_CODE = 0x2AEC, + /** Date UTC */ + DATE_UTC = 0x2AED, + /** Electric Current */ + ELECTRIC_CURRENT = 0x2AEE, + /** Electric Current Range */ + ELECTRIC_CURRENT_RANGE = 0x2AEF, + /** Electric Current Specification */ + ELECTRIC_CURRENT_SPECIFICATION = 0x2AF0, + /** Electric Current Statistics */ + ELECTRIC_CURRENT_STATISTICS = 0x2AF1, + /** Energy */ + ENERGY = 0x2AF2, + /** Energy In A Period Of Day */ + ENERGY_IN_A_PERIOD_OF_DAY = 0x2AF3, + /** Event Statistics */ + EVENT_STATISTICS = 0x2AF4, + /** Fixed String 16 */ + FIXED_STRING_16 = 0x2AF5, + /** Fixed String 24 */ + FIXED_STRING_24 = 0x2AF6, + /** Fixed String 36 */ + FIXED_STRING_36 = 0x2AF7, + /** Fixed String 8 */ + FIXED_STRING_8 = 0x2AF8, + /** Generic Level */ + GENERIC_LEVEL = 0x2AF9, + /** Global Trade Item Number */ + GLOBAL_TRADE_ITEM_NUMBER = 0x2AFA, + /** Illuminance */ + ILLUMINANCE = 0x2AFB, + /** Luminous Efficacy */ + LUMINOUS_EFFICACY = 0x2AFC, + /** Luminous Energy */ + LUMINOUS_ENERGY = 0x2AFD, + /** Luminous Exposure */ + LUMINOUS_EXPOSURE = 0x2AFE, + /** Luminous Flux */ + LUMINOUS_FLUX = 0x2AFF, + /** Luminous Flux Range */ + LUMINOUS_FLUX_RANGE = 0x2B00, + /** Luminous Intensity */ + LUMINOUS_INTENSITY = 0x2B01, + /** Mass Flow */ + MASS_FLOW = 0x2B02, + /** Mesh Provisioning Data In */ + MESH_PROVISIONING_DATA_IN = 0x2ADB, + /** Mesh Provisioning Data Out */ + MESH_PROVISIONING_DATA_OUT = 0x2ADC, + /** Mesh Proxy Data In */ + MESH_PROXY_DATA_IN = 0x2ADD, + /** Mesh Proxy Data Out */ + MESH_PROXY_DATA_OUT = 0x2ADE, + /** Perceived Lightness */ + PERCEIVED_LIGHTNESS = 0x2B03, + /** Percentage 8 */ + PERCENTAGE_8 = 0x2B04, + /** Power */ + POWER = 0x2B05, + /** Power Specification */ + POWER_SPECIFICATION = 0x2B06, + /** Relative Runtime In A Current Range */ + RELATIVE_RUNTIME_IN_A_CURRENT_RANGE = 0x2B07, + /** Relative Runtime In A Generic Level Range */ + RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE = 0x2B08, + /** Relative Value In A Period of Day */ + RELATIVE_VALUE_IN_A_PERIOD_OF_DAY = 0x2B0B, + /** Relative Value In A Temperature Range */ + RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE = 0x2B0C, + /** Relative Value In A Voltage Range */ + RELATIVE_VALUE_IN_A_VOLTAGE_RANGE = 0x2B09, + /** Relative Value In An Illuminance Range */ + RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE = 0x2B0A, + /** Temperature 8 */ + TEMPERATURE_8 = 0x2B0D, + /** Temperature 8 In A Period Of Day */ + TEMPERATURE_8_IN_A_PERIOD_OF_DAY = 0x2B0E, + /** Temperature 8 Statistics */ + TEMPERATURE_8_STATISTICS = 0x2B0F, + /** Temperature Range */ + TEMPERATURE_RANGE = 0x2B10, + /** Temperature Statistics */ + TEMPERATURE_STATISTICS = 0x2B11, + /** Time Decihour 8 */ + TIME_DECIHOUR_8 = 0x2B12, + /** Time Exponential 8 */ + TIME_EXPONENTIAL_8 = 0x2B13, + /** Time Hour 24 */ + TIME_HOUR_24 = 0x2B14, + /** Time Millisecond 24 */ + TIME_MILLISECOND_24 = 0x2B15, + /** Time Second 16 */ + TIME_SECOND_16 = 0x2B16, + /** Time Second 8 */ + TIME_SECOND_8 = 0x2B17, + /** Voltage */ + VOLTAGE = 0x2B18, + /** Voltage Specification */ + VOLTAGE_SPECIFICATION = 0x2B19, + /** Voltage Statistics */ + VOLTAGE_STATISTICS = 0x2B1A, + /** Volume Flow */ + VOLUME_FLOW = 0x2B1B, +} mesh_characteristics_t; +#endif +#endif diff --git a/protocol/bluetooth/inc/sl_btmesh_dfu_platform_capi.h b/protocol/bluetooth/inc/sl_btmesh_dfu_platform_capi.h new file mode 100644 index 00000000000..f48405ed83a --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_dfu_platform_capi.h @@ -0,0 +1,116 @@ +/***************************************************************************//** + * @file sl_btmesh_dfu_platform_capi.h + * @brief Silicon Labs Bluetooth Mesh DFU Model Platform API + ******************************************************************************* + * # License + * Copyright 2022 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 SL_BTMESH_DFU_PLATFORM_CAPI_H +#define SL_BTMESH_DFU_PLATFORM_CAPI_H + +#include +#include + +#include + +/** + * @defgroup fw_dist_server_platform Firmware Distribution Server Platform API + * + * @{ + */ + +/** + * Firmware information + */ +typedef struct { + uint32_t size; // Actual over-the-air size, not including any flash / bootloader slot overhead etc. + const uint8_t *p_blob_id; + uint8_t metadata_len; + const uint8_t *p_metadata; + uint8_t fwid_len; + const uint8_t *p_fwid; + uint16_t index; +} mesh_dfu_dist_server_fw_info_t; + +/** + * @brief Get current number of images stored + * + * Get current number of images stored. + * + * The platform must provide an implementation of the api for Mesh stack. + * + * @param element_index The index of the element of Distribution Server + * @param count Pointer to output variable for current number of images stored + * + * @return SL_STATUS_OK if successful. Error code otherwise. + */ +sl_status_t mesh_platform_dfu_dist_server_get_fw_count(size_t element_index, uint16_t *count); + +/** + * @brief Get current number of free bytes + * + * Get current number of free bytes. + * + * The platform must provide an implementation of the api for Mesh stack. + * + * @param element_index The index of the element of Distribution Server + * @param bytes Pointer to output variable for current number of free bytes + * + * @return SL_STATUS_OK if successful, SL_STATUS_NOT_INITIALIZED if FW list was not initialized. + */ +sl_status_t mesh_platform_dfu_dist_server_get_remaining_space(size_t element_index, uint32_t *bytes); + +/** + * @brief Get firmware with Firmware List index + * + * Get firmware with Firmware List index. + * + * The platform must provide an implementation of the api for Mesh stack. + * + * All output parameter pointers are optional to provide; any NULL pointers will be ignored. + * + * @param element_index The index of the element of the Distribution Server + * @param fw_index The firmware index from which the info metadata is retuned + * @param info Pointer to firmware information to be returned ::mesh_dfu_dist_server_fw_info_t. + * Data shall be valid as long as the the firmware is present in the Firmware List. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + */ +sl_status_t mesh_platform_dfu_dist_server_get_fw_by_index(size_t element_index, + uint16_t fw_index, mesh_dfu_dist_server_fw_info_t *info); + +/** + * @brief Get firmware with FWID + * + * Get firmware with FWID. + * + * The platform must provide an implementation of the api for Mesh stack. + * + * All output parameter pointers are optional to provide; any NULL pointers will be ignored. + * + * @param element_index The index of the element of the Distribution Server + * @param fwid_len Length of firmware id + * @param fwid Pointer to firmware id + * @param info Pointer to firmware information to be returned ::mesh_dfu_dist_server_fw_info_t + * Data shall be valid as long as the the firmware is present in the Firmware List. + * + * @return SL_STATUS_OK if successful. Error code otherwise. + */ +sl_status_t mesh_platform_dfu_dist_server_get_fw_by_fwid(size_t element_index, + uint8_t fwid_len, + const uint8_t *fwid, + mesh_dfu_dist_server_fw_info_t *info); + +/** @} */ + +#endif diff --git a/protocol/bluetooth/inc/sl_btmesh_generic_model_capi_types.h b/protocol/bluetooth/inc/sl_btmesh_generic_model_capi_types.h new file mode 100644 index 00000000000..393a77637a6 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_generic_model_capi_types.h @@ -0,0 +1,613 @@ +/******************************************************************************/ +/** + * @file sl_btmesh_generic_model_capi_types.h + * @brief Silicon Labs Bluetooth Mesh Generic Model API + * + ******************************************************************************* + * # License + * Copyright 2018 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. + * + ******************************************************************************/ + +/* + * C API for generic models + */ + +#ifndef SL_BTMESH_GENERIC_MODEL_CAPI_TYPES_H +#define SL_BTMESH_GENERIC_MODEL_CAPI_TYPES_H + +#include "sl_btmesh_capi_types.h" +#include "sl_btmesh_model_specification_defs.h" + +/** Model status */ +typedef enum { + mesh_model_status_success = 0x00, + mesh_model_status_cannot_set_range_min = 0x01, + mesh_model_status_cannot_set_range_max = 0x02, +} mesh_model_status_t; + +/* + * Generic model states + * + * Generic models contain cached values representing the actual + * implementation state. The implementation is responsible for + * updating the cache when the implementation state changes -- + * including at initialization -- and is also responsible for + * responding to requests for setting the state (requests for getting + * the state are handled directly from the cache) + */ + +/** Generic on/off state value off */ +#define MESH_GENERIC_ON_OFF_STATE_OFF 0x00 +/** Generic on/off state value on */ +#define MESH_GENERIC_ON_OFF_STATE_ON 0x01 +/** Generic on/off state */ +struct mesh_generic_on_off_state { + /** The state can be either #MESH_GENERIC_ON_OFF_STATE_OFF or + #MESH_GENERIC_ON_OFF_STATE_ON */ + uint8_t on; +}; + +/** Generic on power up state value off */ +#define MESH_GENERIC_ON_POWER_UP_STATE_OFF 0x00 +/** Generic on power up state value on */ +#define MESH_GENERIC_ON_POWER_UP_STATE_ON 0x01 +/** Generic on power up state value restore previous state */ +#define MESH_GENERIC_ON_POWER_UP_STATE_RESTORE 0x02 +/** Generic on power up state */ +struct mesh_generic_on_power_up_state { + /** The state can be either #MESH_GENERIC_ON_POWER_UP_STATE_OFF, + #MESH_GENERIC_ON_POWER_UP_STATE_ON, or + #MESH_GENERIC_ON_POWER_UP_STATE_RESTORE */ + uint8_t on_power_up; +}; + +/** Generic level state */ +struct mesh_generic_level_state { + /** By default the level range is from -32768 to 32767, + but this can be restricted for a model by calling + mesh_generic_level_server_cap() or + mesh_generic_level_server_wrap() */ + int16_t level; +}; + +/** Generic power level state */ +struct mesh_generic_power_level_state { + /** The power level range is from 0 (off) to 65535 (maximum power) */ + uint16_t level; +}; + +/** Generic power level last state */ +struct mesh_generic_power_level_last_state { + /** The power level last range is from 1 (minimum power) to + 65535 (maximum power); value of 0 is not allowed. */ + uint16_t level; +}; + +/** Generic power default state */ +struct mesh_generic_power_level_default_state { + /** The power default value can range from 1 (minimum power) to + 65535 (maximum power); value of 0 is allowed and has the + special meaning of using the generic power level last state. */ + uint16_t level; +}; + +/** Generic power range status success */ +#define MESH_GENERIC_POWER_RANGE_STATUS_SUCCESS 0x00 +/** Generic power range status cannot set minimum */ +#define MESH_GENERIC_POWER_RANGE_STATUS_CANNOT_SET_MIN 0x01 +/** Generic power range status cannot set maximum */ +#define MESH_GENERIC_POWER_RANGE_STATUS_CANNOT_SET_MAX 0x02 + +/** Generic power range state */ +struct mesh_generic_power_level_range_state { + /** The minimum power level ranges from 1 to + 65535; value of 0 is not allowed. */ + uint16_t min; + /** The maximum power level ranges from 1 to + 65535; value of 0 is not allowed. */ + uint16_t max; + /** Range set status */ + uint8_t status; +}; + +/** Generic default transition time state */ +struct mesh_generic_transition_time_state { + /** The transition time is divided into two fields. The high 2 bits + indicate unit resolution (0b00 = 100ms, 0b01 = 1s, 0b10 = 10s, 0b11 = + 10min) while the low 6 bits are the number of units. For instance, + a value of 0x85 would mean 5*10s = 50s. */ + uint8_t time; +}; + +/** Generic battery state */ +struct mesh_generic_battery_state { + /** The allowed battery level values are either in the range of + 0 to 100, indicating battery charge percentage, or 0xff for + unknown charge level; other values are not allowed. */ + uint8_t level; + /** Discharge time is a 24-bit unsigned value representing + battery discharge time in minutes; the value of 0xffffff + represents unknown discharging time */ + uint8_t discharge_time[3]; + /** Discharge time is a 24-bit unsigned value representing + battery charge time in minutes; the value of 0xffffff + represents unknown charging time */ + uint8_t charge_time[3]; + /** Battery flags are divided into four fields: + + * Bits 0 and 1 + represent battery presence (0b00 = not present, 0b01 = + present and removable, 0b10 = present and nonremovable, + 0b11 = unknown); + + * Bits 2 and 3 represent a simple level + indicator (0b00 = critically low, 0b01 = low level, + 0b10 = good level, 0b11 = unknown); + + * Bits 4 and 5 + represent charging indicator (0b00 = not chargeable, + 0b01 = chargeable, not charging, 0b10 = chargeable, + charging, 0b11 = unknown); + + * Bits 6 and 7 represent + battery serviceability (0b10 = service not required, + 0b10 = service required, 0b11 = unknown) + */ + uint8_t flags; +}; + +/** Generic global location state */ +struct mesh_generic_location_global_state { + /** Latitude; see the Mesh model specification for encoding */ + int32_t lat; + /** Longitude; see the Mesh model specification for encoding */ + int32_t lon; + /** Altitude in metres; value of 0x7ffe means 32766 or higher, + while a value of 0x7fff means altitude not configured. */ + int16_t alt; +}; + +/** Generic local location state */ +struct mesh_generic_location_local_state { + /** Local coordinate North-South axis offset from origin in decimetres */ + int16_t north; + /** Local coordinate East-West axis offset from origin in decimetres */ + int16_t east; + /** Local altitude in decimetres; value of 0x7ffe means 32766 or higher, + while a value of 0x7fff means altitude not configured. */ + int16_t alt; + /** Floor number + 20, with the following special cases + * + * Value of 0 indicates floor -20 or lower; + * + * Value of 252 indicates floor 232 or above. + * + * Value of 253 indicates ground floor (floor 0) + * + * Value of 254 indicates ground floor (floor 1) + * + * Value of 255 indicates floor not configured. */ + uint8_t floor; + /** Location uncertainty; see the Mesh model specification + for encoding details */ + uint16_t uncertainty; +}; + +/** Generic property type */ +typedef enum { + /** User property */ + mesh_generic_property_type_user = 0x00, + /** Admin property */ + mesh_generic_property_type_admin = 0x01, + /** Manufacturer property */ + mesh_generic_property_type_manuf = 0x02, + /** Client property */ + mesh_generic_property_type_client = 0x03, +} mesh_generic_property_type; + +/** Invalid property ID */ +#define MESH_GENERIC_PROPERTY_ID_INVALID 0x0000 + +/** Generic property list state */ +struct mesh_generic_property_list_state { + /** Length of property list data */ + uint16_t length; + /** Offset of property list data */ + uint16_t offset; + /** Handle to a buffer in which property list data is contained */ + const uint8_t *buffer; +}; + +/** Generic property state */ +struct mesh_generic_property_state { + /** Property ID */ + uint16_t id; + /** Property access control */ + uint8_t access; + /** Length of property data */ + uint16_t length; + /** Offset of property data */ + uint16_t offset; + /** Handle to a buffer in which property data is contained */ + const uint8_t *buffer; +}; + +/** Light lightness state */ +struct mesh_lighting_lightness_state { + uint16_t level; /**< Lightness level */ +}; + +/** Light lightness range state */ +struct mesh_lighting_lightness_range_state { + uint16_t min; /**< Minimum lightness */ + uint16_t max; /**< Maximum lightness */ + uint8_t status; /**< Status of previous range operation */ +}; + +/** Light CTL state */ +struct mesh_lighting_ctl_state { + uint16_t lightness; /**< Lightness level */ + uint16_t temperature; /**< Color temperature */ + int16_t deltauv; /**< Delta UV */ +}; + +/** Light CTL temperature + deltauv state */ +struct mesh_lighting_ctl_temperature_state { + uint16_t temperature; /**< Color temperature */ + int16_t deltauv; /**< Delta UV */ +}; + +/** Light CTL lightness + temperature state */ +struct mesh_lighting_ctl_lightness_temperature_state { + uint16_t lightness; /**< Lightness level */ + uint16_t temperature; /**< Color temperature */ +}; + +/** Light CTL range state */ +struct mesh_lighting_ctl_temperature_range_state { + uint16_t min; /**< Minimum temperature */ + uint16_t max; /**< Maximum temperature */ + uint8_t status; /**< Status of previous range operation */ +}; + +/** Light HSL, HSL target, HSL default state */ +struct mesh_lighting_hsl_state { + uint16_t lightness; /**< Lightness value */ + uint16_t hue; /**< Hue value */ + uint16_t saturation; /**< Saturation value */ +}; + +/** Light HSL hue state */ +struct mesh_lighting_hsl_hue_state { + uint16_t hue; /**< Hue value */ +}; + +/** Light HSL saturation state */ +struct mesh_lighting_hsl_saturation_state { + uint16_t saturation; /**< Saturation value */ +}; + +/** Light HSL range state */ +struct mesh_lighting_hsl_range_state { + uint16_t hue_min; /**< Minimum hue value */ + uint16_t hue_max; /**< Maximum hue value */ + uint16_t saturation_min; /**< Minimum saturation value */ + uint16_t saturation_max; /**< Maximum saturation value */ + uint8_t status; /**< Status of previous range operation */ +}; + +/** Generic state type */ +typedef enum { + mesh_generic_state_on_off = 0x00, + mesh_generic_state_on_power_up = 0x01, + mesh_generic_state_level = 0x02, + mesh_generic_state_power_level = 0x03, + mesh_generic_state_power_level_last = 0x04, + mesh_generic_state_power_level_default = 0x05, + mesh_generic_state_power_level_range = 0x06, + mesh_generic_state_transition_time = 0x07, + mesh_generic_state_battery = 0x08, + mesh_generic_state_location_global = 0x09, + mesh_generic_state_location_local = 0x0a, + mesh_generic_state_property_user = 0x0b, + mesh_generic_state_property_admin = 0x0c, + mesh_generic_state_property_manuf = 0x0d, + mesh_generic_state_property_list_user = 0x0e, + mesh_generic_state_property_list_admin = 0x0f, + mesh_generic_state_property_list_manuf = 0x10, + mesh_generic_state_property_list_client = 0x11, + + mesh_lighting_state_lightness_actual = 0x80, + mesh_lighting_state_lightness_linear = 0x81, + mesh_lighting_state_lightness_last = 0x82, + mesh_lighting_state_lightness_default = 0x83, + mesh_lighting_state_lightness_range = 0x84, + + mesh_lighting_state_ctl = 0x85, + mesh_lighting_state_ctl_temperature = 0x86, + mesh_lighting_state_ctl_default = 0x87, + mesh_lighting_state_ctl_temperature_range = 0x88, + mesh_lighting_state_ctl_lightness_temperature = 0x89, + + mesh_lighting_state_hsl = 0x8a, + mesh_lighting_state_hsl_hue = 0x8b, + mesh_lighting_state_hsl_saturation = 0x8c, + mesh_lighting_state_hsl_default = 0x8d, + mesh_lighting_state_hsl_range = 0x8e, + mesh_lighting_state_hsl_target = 0x8f, + + mesh_lighting_state_lightness_range_with_status = 0x90, + mesh_lighting_state_ctl_temperature_range_with_status = 0x91, + mesh_lighting_state_hsl_range_with_status = 0x92, + + mesh_generic_state_last +} mesh_generic_state_t; + +/** Generic state */ +struct mesh_generic_state { + /** Type of state */ + mesh_generic_state_t kind; + /** State data */ + union { + struct mesh_generic_on_off_state on_off; + struct mesh_generic_on_power_up_state on_power_up; + struct mesh_generic_level_state level; + struct mesh_generic_power_level_state power_level; + struct mesh_generic_power_level_last_state power_level_last; + struct mesh_generic_power_level_default_state power_level_default; + struct mesh_generic_power_level_range_state power_level_range; + struct mesh_generic_transition_time_state transition_time; + struct mesh_generic_battery_state battery; + struct mesh_generic_location_global_state location_global; + struct mesh_generic_location_local_state location_local; + struct mesh_generic_property_state property; + struct mesh_generic_property_list_state property_list; + + struct mesh_lighting_lightness_state lightness; + struct mesh_lighting_lightness_range_state lightness_range; + + /** Light CTL state used for updating + mesh_lighting_state_ctl, and + mesh_lighting_state_ctl_default */ + struct mesh_lighting_ctl_state ctl; + /** Light CTL state used for updating + mesh_lighting_state_ctl_temperature */ + struct mesh_lighting_ctl_temperature_state ctl_temperature; + /** Light CTL state used for updating + mesh_lighting_state_ctl_temperature_range */ + struct mesh_lighting_ctl_temperature_range_state ctl_temperature_range; + /** Light CTL state used for updating + mesh_lighting_state_ctl_lightness_temperature */ + struct mesh_lighting_ctl_lightness_temperature_state ctl_lightness_temperature; + + /** Light HSL state used for updating/getting mesh_lighting_state_hsl, + mesh_lighting_state_hsl_target and mesh_lighting_state_hsl_default */ + struct mesh_lighting_hsl_state hsl; + + /** Light HSL hue state used for updating mesh_lighting_state_hsl_hue */ + struct mesh_lighting_hsl_hue_state hsl_hue; + + /** Light HSL saturation state used for updating + mesh_lighting_state_hsl_saturation */ + struct mesh_lighting_hsl_saturation_state hsl_saturation; + + /** Light HSL range state used for updating + mesh_lighting_state_hsl_range */ + struct mesh_lighting_hsl_range_state hsl_range; + }; +}; + +/** Generic request type */ +typedef enum { + mesh_generic_request_on_off = 0x00, + mesh_generic_request_on_power_up = 0x01, + mesh_generic_request_level = 0x02, + mesh_generic_request_level_delta = 0x03, + mesh_generic_request_level_move = 0x04, + mesh_generic_request_level_halt = 0x05, + mesh_generic_request_power_level = 0x06, + // last level cannot be set + mesh_generic_request_power_level_default = 0x07, + mesh_generic_request_power_level_range = 0x08, + mesh_generic_request_transition_time = 0x09, + // battery information cannot be set + mesh_generic_request_location_global = 0x0a, + mesh_generic_request_location_local = 0x0b, + mesh_generic_request_property_user = 0x0c, + mesh_generic_request_property_admin = 0x0d, + mesh_generic_request_property_manuf = 0x0e, + + mesh_lighting_request_lightness_actual = 0x80, + mesh_lighting_request_lightness_linear = 0x81, + mesh_lighting_request_lightness_default = 0x82, + mesh_lighting_request_lightness_range = 0x83, + + mesh_lighting_request_ctl = 0x84, + mesh_lighting_request_ctl_temperature = 0x85, + mesh_lighting_request_ctl_default = 0x86, + mesh_lighting_request_ctl_temperature_range = 0x87, + + mesh_lighting_request_hsl = 0x88, + mesh_lighting_request_hsl_hue = 0x89, + mesh_lighting_request_hsl_saturation = 0x8a, + mesh_lighting_request_hsl_default = 0x8b, + mesh_lighting_request_hsl_range = 0x8c, +} mesh_generic_request_t; + +/** Generic request */ +struct mesh_generic_request { + /** Request type */ + mesh_generic_request_t kind; + /** Request data */ + union { + /** On/off state change request data; either + #MESH_GENERIC_ON_OFF_STATE_OFF or + #MESH_GENERIC_ON_OFF_STATE_ON */ + uint8_t on_off; + /** On power up state change request data; can be either + #MESH_GENERIC_ON_POWER_UP_STATE_OFF, + #MESH_GENERIC_ON_POWER_UP_STATE_ON, or + #MESH_GENERIC_ON_POWER_UP_STATE_RESTORE */ + uint8_t on_power_up; + /** Generic level state change request data for mesh_generic_request_level + and mesh_generic_request_level_move types */ + int16_t level; + /** Generic level state change request data for + mesh_generic_request_level_delta type */ + int32_t delta; + /** Generic power level state change request data for + mesh_generic_request_power_level and + mesh_generic_request_power_level_default */ + uint16_t power_level; + /** Generic power range state change request data for + mesh_generic_request_power_level_range */ + uint16_t power_range[2]; + /** Generic transition time state change request data for + mesh_generic_request_transition_time */ + uint8_t transition_time; + /** Generic global location state change request data for + mesh_generic_request_location_global */ + struct { + /** Latitude */ + int32_t lat; + /** Longitude */ + int32_t lon; + /** Altitude */ + int16_t alt; + } location_global; + /** Generic local location state change request data for + mesh_generic_request_location_local */ + struct { + /** Local north-south offset from origin */ + int16_t north; + /** Local east-west offset from origin */ + int16_t east; + /** Local altitude */ + int16_t alt; + /** Floor */ + uint8_t floor; + /** Location uncertainty */ + uint16_t uncertainty; + } location_local; + /** Generic property state change request data for + mesh_generic_request_property_user, + mesh_generic_request_property_admin, and + mesh_generic_request_property_manuf */ + struct { + /** Property ID */ + uint16_t id; + /** Access control */ + uint8_t access; + /** Property data length */ + uint16_t length; + /** Property data offset */ + uint16_t offset; + /** Handle to property data buffer */ + const uint8_t *buffer; + } property; + + /** Light lightness state change request data for + mesh_lighting_request_lightness_actual, + mesh_lighting_request_lightness_linear, + and mesh_lighting_request_lightness_default */ + uint16_t lightness; + /** Light lightness range state change request data for + mesh_lighting_request_lightness_range */ + struct { + /** Minimum lightness */ + uint16_t min; + /** Maximum lightness */ + uint16_t max; + } lightness_range; + + /** Light CTL state change request data for + mesh_lighting_request_ctl, and + mesh_lighting_request_ctl_default */ + struct { + uint16_t lightness; + uint16_t temperature; + int16_t deltauv; + } ctl; + /** Light CTL state change request data for + mesh_lighting_request_ctl_temperature */ + struct { + uint16_t temperature; + int16_t deltauv; + } ctl_temperature; + /** Light CTL range state change request data for + mesh_lighting_request_ctl_temperature_range */ + struct { + /** Minimum temperature */ + uint16_t min; + /** Maximum temperature */ + uint16_t max; + } ctl_temperature_range; + /** Light HSL state change request data for + mesh_lighting_request_hsl and mesh_lighting_request_hsl_default */ + struct { + uint16_t lightness; + uint16_t hue; + uint16_t saturation; + } hsl; + /** Light HSL hue state change request data for + mesh_lighting_request_hsl_hue */ + uint16_t hsl_hue; + /** Light HSL saturation state change request data for + mesh_lighting_request_hsl_saturation */ + uint16_t hsl_saturation; + /** Light HSL range state change request data for + mesh_lighting_request_hsl_range */ + struct { + /** Minimum hue */ + uint16_t hue_min; + /** Maximum hue */ + uint16_t hue_max; + /** Minimum saturation */ + uint16_t saturation_min; + /** Maximum saturation */ + uint16_t saturation_max; + } hsl_range; + }; +}; + +/** Use default transition time */ +#define MESH_GENERIC_DEFAULT_TRANS_MS 0xffffffff + +/** + * Transaction based request history record + */ +PACKSTRUCT(struct mesh_generic_history_record { + mesh_tick_t tstamp; /**< When received */ + mesh_addr_t src; /**< Sent from */ + mesh_addr_t dst; /**< Sent to */ + uint8_t tid; /**< Transaction ID */ + unsigned aborted: 1; /**< Aborted transaction */ +}); + +/** Per model transaction history length */ +#define MESH_GENERIC_HISTORY_MAX 8 + +/** + * Transaction based request history array + */ +PACKSTRUCT(struct mesh_generic_history { + struct mesh_generic_history_record rec[MESH_GENERIC_HISTORY_MAX]; /**< Request history */ + uint8_t len; /**< Valid items in history */ +}); + +/** + * API for handling state binding between LC and Generic On/Off model + */ +typedef void (*mesh_lc_light_onoff_binding_fn) (mesh_model_t model, + uint8_t onoff_value); + +#endif /* SL_BTMESH_GENERIC_MODEL_CAPI_TYPES_H */ diff --git a/protocol/bluetooth/inc/sl_btmesh_lib.h b/protocol/bluetooth/inc/sl_btmesh_lib.h new file mode 100644 index 00000000000..a41cda9eea0 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_lib.h @@ -0,0 +1,464 @@ +/***************************************************************************//** + * @file mesh_lib.h + * @brief Mesh helper library + ******************************************************************************* + * # License + * Copyright 2018 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 MESH_LIB_H +#define MESH_LIB_H + +/** Request flags */ +typedef enum { + /** Send request as nonrelayed (with TTL zero); response, if any, + should likewise be sent as nonrelayed */ + MESH_REQUEST_FLAG_NONRELAYED = 0x01, + /** Request needs a response */ + MESH_REQUEST_FLAG_RESPONSE_REQUIRED = 0x02, +} mesh_request_flags_t; + +/** Response flags */ +typedef enum { + /** Send response as nonrelayed (with TTL zero); to be used + when responding to a request that was sent as nonrelayed */ + MESH_RESPONSE_FLAG_NONRELAYED = 0x01, +} mesh_response_flags_t; + +/** + * @brief Convert transition time state value to milliseconds + * + * Converts from resolution+count format used in Mesh messages to + * milliseconds + * + * @param transition_time Transition time value in Mesh representation + * + * @return Value converted to milliseconds + */ +uint32_t mesh_lib_transition_time_to_ms(uint8_t transition_time); + +/*** + *** Library initialization + ***/ + +/** + * @brief Initialize Mesh helper library + * + * This function needs to be called before using other helper library + * functions. + * + * @param initial_num The initial number of entries which the array is + * allocated for + * @param increment The number of extra entries allocated when needed + * event handlers will be registered; if 0, no reallocation occurs; see + * @ref mesh_lib_generic_client_register_handler and + * @ref mesh_lib_generic_server_register_handler + * + * @return SL_STATUS_OK on success + * @return SL_STATUS_NO_MORE_RESOURCE if memory allocation failed + */ +sl_status_t mesh_lib_init(size_t initial_num, size_t increment); + +/** + * @brief Initialize Mesh helper library + * + * This function needs to be called to release resources allocated by the + * helper library. After calling it other helper library functions are not + * to be used until the library is again initialized. + */ +void mesh_lib_deinit(void); + +/*** + *** Generic event handlers + ***/ + +/** + * @brief Process a generic server event + * + * When a generic server event is passed to this function, it will + * unpack the data contained in the message and call the registered + * event handler for the correct model. + * + * @param evt Event to process + */ +void mesh_lib_generic_server_event_handler(sl_btmesh_msg_t *evt); + +/** + * @brief Process a generic client event + * + * When a generic client event is passed to this function, it will + * unpack the data contained in the message and call the registered + * event handler for the correct model. + * + * @param evt Event to process + */ +void mesh_lib_generic_client_event_handler(sl_btmesh_msg_t *evt); + +/*** + *** Generic Server + ***/ + +/** + * @brief Client request handler function for generic server model + * + * When a generic server client request event is passed to + * @ref mesh_lib_generic_server_event_handler it will call + * the request handler function that has been registered + * for the model that received the message. It will have + * unpacked the request data into a generic request + * structure and other parameters. + * + * @param model_id Model that received the message + * @param element_index Element where the model resides + * @param client_addr Mesh address of the client node that sent the request + * @param server_addr Mesh destination address of the request; may be a + * group address in case of a multicast request + * @param appkey_index Application key index of the key used to encrypt + * the request; the response, if any, has to be encrypted with the same key. + * @param req Request parameters + * @param transition_ms Requested transition time in milliseconds, or zero + * for immediate state transition + * @param delay_ms Requested delay time in milliseconds before a state + * transition or an immediate state change should occur + * @param request_flags Request flags + */ +typedef void +(*mesh_lib_generic_server_client_request_cb)(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + uint16_t appkey_index, + const struct mesh_generic_request *req, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags); + +/** + * @brief Server state change handler function for generic server model + * + * When a generic server state change event is passed to + * @ref mesh_lib_generic_server_event_handler it will call the request + * handler function that has been registered for the model that + * emitted the state change event. It will have unpacked the event + * data into a generic request structure and other parameters. + * + * This typically happens when the server changes a model state + * that is bound to other states; for instance, if the Light + * Lightness Actual state is set to zero from a non-zero value, + * it will change also the bound Generic On/Off state to off. + * + * @param model_id Model that generated the event + * @param element_index Element where the model resides + * @param current Current model state + * @param target Target model state, towards which model is moving; + * in case there is no state transition ongoing a NULL pointer will + * be given + * @param remaining_ms Time remaining for transition in milliseconds; + * in case there is no state transition ongoing a value of zero will + * be given + */ +typedef void +(*mesh_lib_generic_server_change_cb)(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms); + +/** + * @brief Server state recall handler function for generic server model + * + * When a generic server state recall event is passed to + * @ref mesh_lib_generic_server_event_handler it will call the request + * handler function that has been registered for the model that + * emitted the state recall event. It will have unpacked the event + * data into a generic request structure and other parameters. + * + * This happens when node has received state recall reques + * + * @param model_id Model that generated the event + * @param element_index Element where the model resides + * @param current Current model state + * @param target Target model state, towards which model is moving; + * in case there is no state transition ongoing a NULL pointer will + * be given + * @param transition_time_ms Time remaining for transition in milliseconds; + * in case there is no state transition ongoing a value of zero will + * be given + */ +typedef void +(*mesh_lib_generic_server_recall_cb)(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t transition_time_ms); + +/** + * @brief Send a response to a client request + * + * When a server model has received a client request that needs to be + * responsed to this function has to be called to push a status + * message to the client, as well as update the stack internal state + * to correspond to the new state. + * + * @param model_id Model that received the request being responded to + * @param element_index Element where the model resides + * @param client_addr Mesh address of the client node that sent the request + * @param appkey_index Application key index of the key used to encrypt + * the response; has to be the same key that was used to encrypt the request + * @param current Current model state + * @param target Target model state, towards which model is moving; + * in case there is no state transition ongoing a NULL pointer should + * be given + * @param remaining_ms Time remaining for transition in milliseconds; + * in case there is no state transition ongoing a zero value should be + * given + * @param response_flags Response flags + * + * @return bg_err_success if response was sent; an error otherwise + */ +sl_status_t +mesh_lib_generic_server_respond(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms, + uint8_t response_flags); + +/** + * @brief Update server state without sending a response to a client request + * + * When a server model has received a client request that does not + * require a response, or if server model state needs to be updated + * for some other reason (such as local action by a user, timed + * activity, or transitioning towards target state) this function has + * to be called to update the stack internal state to correspond to + * the new state. + * + * @param model_id Model that is being updated + * @param element_index Element where the model resides + * @param current Current model state + * @param target Target model state, towards which model is moving; + * in case there is no state transition ongoing a NULL pointer should + * be given + * @param remaining_ms Time remaining for transition in milliseconds; + * in case there is no state transition ongoing a zero value should be + * given + * + * @return bg_err_success if update was done; an error otherwise + */ +sl_status_t +mesh_lib_generic_server_update(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms); + +/** + * @brief Publish current server state + * + * This function can be called when the server model needs to + * publish its state, for instance because of a local action + * by a user or because of some pre-programmed event. + * + * @param model_id Model that is being published + * @param element_index Element where the model resides + * @param kind Type of data to be published; some models have only + * one type of data to publish while others may have multiple + * + * @return bg_err_success if publishing was done; an error otherwise + */ +sl_status_t +mesh_lib_generic_server_publish(uint16_t model_id, + uint16_t element_index, + mesh_generic_state_t kind); + +/** + * @brief Register handler functions for a server model + * + * After this function is called @ref mesh_lib_generic_server_event_handler + * will start passing client requests and server state changes to the + * registered functions. + * + * @note It is possible to have any (but not all at once) callback to be NULL. + * NULL function pointers are handled appropriately in + * @ref mesh_lib_generic_server_event_handler. + * + * @param model_id Model for which functions are being registered + * @param element_index Element where the model resides + * @param request Function for client requests + * @param change Function for server state changes + * @param recall Function for server state recall + * + * @return SL_STATUS_OK if registration succeeded + * @return SL_STATUS_NULL_POINTER if all three callback function pointer inputs + * are NULL + * @return SL_STATUS_INVALID_STATE if model and element ID pair is already + * registered + * @return SL_STATUS_NO_MORE_RESOURCE if no empty registry entry could be + * attained + */ +sl_status_t +mesh_lib_generic_server_register_handler(uint16_t model_id, + uint16_t element_index, + mesh_lib_generic_server_client_request_cb request, + mesh_lib_generic_server_change_cb change, + mesh_lib_generic_server_recall_cb recall); + +/*** + *** Generic Client + ***/ + +/** + * @brief Server response handler function for generic client model + * + * When a generic client server response event is passed to + * @ref mesh_lib_generic_client_event_handler it will call the response + * handler function that has been registered for the model that + * received the message. It will have unpacked the response data into + * generic state structures and other parameters. + * + * @param model_id Model that received the message + * @param element_index Element where the model resides + * @param client_addr Mesh address of the client node that received the response + * @param server_addr Mesh address of the server that sent the response + * @param current Current server state + * @param target Target server state, towards which server is moving; + * in case there is no state transition ongoing a NULL pointer will + * be given + * @param remaining_ms Time remaining for transition in milliseconds; + * in case there is no state transition ongoing a value of zero will + * be given + * @param response_flags Response flags + */ +typedef void +(*mesh_lib_generic_client_server_response_cb)(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t server_addr, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms, + uint8_t response_flags); + +/** + * @brief Issue a get request + * + * A get request will be sent to server or servers; responses from + * servers will be reported as generic client server response events. + * + * @param model_id Client model + * @param element_index Element where the model resides + * @param server_addr Address of the server to send the request to; may + * be a group address in case of a multicast request + * @param appkey_index Index of the application key used to encrypt the request + * @param kind Type of state to get; some server models may have only + * one kind of state to query while others may have several + * + * @return bg_err_success if request was made, an error code otherwise + */ +sl_status_t +mesh_lib_generic_client_get(uint16_t model_id, + uint16_t element_index, + uint16_t server_addr, + uint16_t appkey_index, + mesh_generic_state_t kind); + +/** + * @brief Issue a set request + * + * A set request will be sent to server or servers; responses from + * servers will be reported as generic client server response events + * if the request flag #MESH_REQUEST_FLAG_RESPONSE_REQUIRED is set. + * + * @param model_id Client model + * @param element_index Element where the model resides + * @param server_addr Address of the server to send the request to; may + * be a group address in case of a multicast request + * @param appkey_index Index of the application key used to encrypt the request + * @param transaction_id Transaction ID, used for messages that are defined + * to contain one and ignored for others + * @param req Request structure + * @param transition_ms Requested transition time in milliseconds, + * or zero for immediate state transition + * @param delay_ms Requested delay before starting transition or + * setting the immediate value, in milliseconds + * @param request_flags Request flags + * + * @return bg_err_success if request was made, an error code otherwise + */ +sl_status_t +mesh_lib_generic_client_set(uint16_t model_id, + uint16_t element_index, + uint16_t server_addr, + uint16_t appkey_index, + uint8_t transaction_id, + const struct mesh_generic_request *req, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags); + +/** + * @brief Publish a client request + * + * This function can be called when the client model needs to + * publish a request, for instance because of a local action + * by a user or because of some pre-programmed event. + * + * @param model_id Model that is being published + * @param element_index Element where the model resides + * @param transaction_id Transaction ID, used for messages that are defined + * to contain one and ignored for others + * @param req Request structure + * @param transition_ms Requested transition time in milliseconds, + * or zero for immediate state transition + * @param delay_ms Requested delay before starting transition or + * setting the immediate value, in milliseconds + * @param request_flags Request flags + * + * @return bg_err_success if publishing was done; an error otherwise + */ +sl_status_t +mesh_lib_generic_client_publish(uint16_t model_id, + uint16_t element_index, + uint8_t transaction_id, + const struct mesh_generic_request *req, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags); + +/** + * @brief Register handler functions for a client model + * + * After this function is called + * @ref mesh_lib_generic_client_event_handler will start passing server + * response events to the registered functions. + * + * @param model_id Model for which functions are being registered + * @param element_index Element where the model resides + * @param response Function for server responses + * + * @return SL_STATUS_OK if registration succeeded + * @return SL_STATUS_NULL_POINTER if all three callback function pointer inputs + * are NULL + * @return SL_STATUS_INVALID_STATE if model and element ID pair is already + * registered + * @return SL_STATUS_NO_MORE_RESOURCE if no empty registry entry could be + * attained + */ +sl_status_t +mesh_lib_generic_client_register_handler(uint16_t model_id, + uint16_t element_index, + mesh_lib_generic_client_server_response_cb response); + +#endif diff --git a/protocol/bluetooth/inc/sl_btmesh_lighting_model_capi_types.h b/protocol/bluetooth/inc/sl_btmesh_lighting_model_capi_types.h new file mode 100644 index 00000000000..8ed36d79072 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_lighting_model_capi_types.h @@ -0,0 +1,42 @@ +/******************************************************************************/ +/** + * @file sl_btmesh_lighting_model_capi_types.h + * @brief Silicon Labs Bluetooth Mesh Lighting Model API + * + * Please see the @ref mesh_generic "generic model API" + * + ******************************************************************************* + * # License + * Copyright 2018 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. + * + ******************************************************************************/ + +/* + * C API for lighting models + */ + +#ifndef SL_BTMESH_LIGHTING_MODEL_CAPI_TYPES_H +#define SL_BTMESH_LIGHTING_MODEL_CAPI_TYPES_H + +#include "sl_btmesh_model_specification_defs.h" + +/** Light CTL Temperature Minimum */ +#define MESH_LIGHTING_CTL_TEMPERATURE_MIN 0x0320 + +/** Light CTL Temperature Maximum */ +#define MESH_LIGHTING_CTL_TEMPERATURE_MAX 0x4e20 + +/** + * API for handling state binding between LC and Light Lightness model + */ +typedef void (*mesh_lc_light_lightness_linear_binding_fn) (mesh_model_t model); + +#endif /* SL_BTMESH_LIGHTING_MODEL_CAPI_TYPES_H */ diff --git a/protocol/bluetooth/inc/sl_btmesh_memory_config.h b/protocol/bluetooth/inc/sl_btmesh_memory_config.h new file mode 100644 index 00000000000..09b35cd89f7 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_memory_config.h @@ -0,0 +1,104 @@ +/******************************************************************************/ +/** + * @file sl_btmesh_memory_config.h + * @brief Silicon Labs Bluetooth Mesh Memory Configuration API + * + ******************************************************************************* + * # License + * Copyright 2018 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 SL_BTMESH_MEMORY_CONFIG_H +#define SL_BTMESH_MEMORY_CONFIG_H +#include + +/** + * Structure defining the heap memory reserved for the BT Mesh stack. + * Everything is allocated when the stack is initialized, in order + * to prevent the heap from becoming fragmented. + * + * The maximum values for items defined in the DCD (elements, models, + * replay protection list size, GATT proxy connections) should be set + * according to what is actually needed. That is, max_elements should + * be equal to the number of elements present in the DCD, and so on. + * + * The memory is wasted if the maximum value is higher than needed, but + * causes no other side effects. Setting the value to a lower number + * than required will cause undefined behavior. + */ +typedef struct { + /** Local sequence number write interval; must be a power of two */ + uint32_t pstore_write_interval_elem_seq; + /** Size of RAM cache for persistent keys stored under ITS */ + uint16_t its_key_cache; + /** Maximum number of network keys on the device */ + uint16_t max_net_keys; + /** Maximum number of application keys on the device */ + uint16_t max_appkeys; + /** Maximum number of model-application key bindings per model; + should not be larger than the maximum number of application keys */ + uint16_t max_app_binds; + /** Maximum number of subscription addresses per model */ + uint16_t max_subscriptions; + /** Network cache entry size */ + uint16_t net_cache_size; + /** Replay protection list entry size; must be equal to or larger than + the number of nodes the device communicates with */ + uint16_t replay_size; + /** Maximum number of concurrent transport layer segmented messages + being sent */ + uint16_t max_send_segs; + /** Maximum number of concurrent transport layer segmented messages + being received */ + uint16_t max_recv_segs; + /** Maximum number of virtual addresses on the node */ + uint16_t max_virtual_addresses; + /** Maximum number of provisioner database entries; ignored for node */ + uint16_t provisioner_max_ddb_entries; + /** Maximum number of keys to store per node on provisioner; + ignored for node */ + uint16_t provisioner_max_node_net_keys; + /** Maximum number of application keys to store per node on provisioner; + ignored for node */ + uint16_t provisioner_max_node_app_keys; + /** Friend node total cache buffer count */ + uint16_t friend_max_total_cache; + /** Friend node friendship queue size */ + uint8_t friend_max_single_cache; + /** Subscriptions per friendship */ + uint8_t friend_max_subs_list; + /** maximum deferred send queue for app layer */ + uint8_t app_send_max_queue; + /** Maximum number number of proxy access control list entries */ + uint8_t proxy_max_access_control_list_entries; + /** Maximum number of elements on the device */ + uint8_t max_elements; + /** Maximum number of models on the device */ + uint8_t max_models; + /** Maximum number of friendships for a friend/LPN device */ + uint8_t max_friendships; + /** Maximum number of concurrently ongoing foundation model commands */ + uint8_t max_foundation_model_commands; + /** Maximum number of provisioning sessions */ + uint8_t max_provision_sessions; + /** Maximum number of provisioning bearers */ + uint8_t max_provision_bearers; + /** Maximum number of concurrent GATT connections (for + provisioning and proxying) */ + uint8_t max_gatt_connections; + /** GATT transport queue size */ + uint8_t gatt_txqueue_size; + /** Maximum number of Key Refresh requests pending for the Provisioner */ + uint8_t limit_prov_concurrent_kr; +} mesh_memory_config_t; + +#endif diff --git a/protocol/bluetooth/inc/sl_btmesh_model_specification_defs.h b/protocol/bluetooth/inc/sl_btmesh_model_specification_defs.h new file mode 100644 index 00000000000..b7e132dd9c8 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_model_specification_defs.h @@ -0,0 +1,579 @@ +/******************************************************************************/ +/** + * @file sl_btmesh_model_specification_defs.h + * @brief Silicon Labs Bluetooth Mesh Model v1.0 Specification Definitions + * + ******************************************************************************* + * # 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 SL_BTMESH_MODEL_SPECIFICATION_DEFS_H +#define SL_BTMESH_MODEL_SPECIFICATION_DEFS_H + +#include "sl_btmesh_capi_types.h" + +/** Generic on/off server */ +#define MESH_GENERIC_ON_OFF_SERVER_MODEL_ID 0x1000 +/** Generic on/off client */ +#define MESH_GENERIC_ON_OFF_CLIENT_MODEL_ID 0x1001 + +/** Generic level server */ +#define MESH_GENERIC_LEVEL_SERVER_MODEL_ID 0x1002 +/** Generic level client */ +#define MESH_GENERIC_LEVEL_CLIENT_MODEL_ID 0x1003 + +/** Generic transition time server */ +#define MESH_GENERIC_TRANSITION_TIME_SERVER_MODEL_ID 0x1004 +/** Generic transition time client */ +#define MESH_GENERIC_TRANSITION_TIME_CLIENT_MODEL_ID 0x1005 + +/** Generic power on/off server */ +#define MESH_GENERIC_POWER_ON_OFF_SERVER_MODEL_ID 0x1006 +/** Generic power on/off setup server */ +#define MESH_GENERIC_POWER_ON_OFF_SETUP_SERVER_MODEL_ID 0x1007 +/** Generic power on/off client */ +#define MESH_GENERIC_POWER_ON_OFF_CLIENT_MODEL_ID 0x1008 + +/** Generic power level server */ +#define MESH_GENERIC_POWER_LEVEL_SERVER_MODEL_ID 0x1009 +/** Generic power level setup server */ +#define MESH_GENERIC_POWER_LEVEL_SETUP_SERVER_MODEL_ID 0x100a +/** Generic power level client */ +#define MESH_GENERIC_POWER_LEVEL_CLIENT_MODEL_ID 0x100b + +/** Generic battery server */ +#define MESH_GENERIC_BATTERY_SERVER_MODEL_ID 0x100c +/** Generic battery client */ +#define MESH_GENERIC_BATTERY_CLIENT_MODEL_ID 0x100d + +/** Generic location server */ +#define MESH_GENERIC_LOCATION_SERVER_MODEL_ID 0x100e +/** Generic location setup server */ +#define MESH_GENERIC_LOCATION_SETUP_SERVER_MODEL_ID 0x100f +/** Generic location client */ +#define MESH_GENERIC_LOCATION_CLIENT_MODEL_ID 0x1010 + +/** Generic admin property server */ +#define MESH_GENERIC_ADMIN_PROPERTY_SERVER_MODEL_ID 0x1011 +/** Generic manufacturer property server */ +#define MESH_GENERIC_MANUF_PROPERTY_SERVER_MODEL_ID 0x1012 +/** Generic user property server */ +#define MESH_GENERIC_USER_PROPERTY_SERVER_MODEL_ID 0x1013 +/** Generic client property server */ +#define MESH_GENERIC_CLIENT_PROPERTY_SERVER_MODEL_ID 0x1014 +/** Generic property client */ +#define MESH_GENERIC_PROPERTY_CLIENT_MODEL_ID 0x1015 + +/** Sensor Server model ID */ +#define MESH_SENSOR_SERVER_MODEL_ID 0x1100 +/** Sensor Setup Server model ID*/ +#define MESH_SENSOR_SETUP_SERVER_MODEL_ID 0x1101 +/** Sensor Client model ID */ +#define MESH_SENSOR_CLIENT_MODEL_ID 0x1102 + +/** Time Server model ID */ +#define MESH_TIME_SERVER_MODEL_ID 0x1200 +/** Time Setup Server model ID */ +#define MESH_TIME_SETUP_SERVER_MODEL_ID 0x1201 +/** Time Client model ID */ +#define MESH_TIME_CLIENT_MODEL_ID 0x1202 + +/** Scene Server model ID */ +#define MESH_SCENE_SERVER_MODEL_ID 0x1203 +/** Scene Setup Server model ID */ +#define MESH_SCENE_SETUP_SERVER_MODEL_ID 0x1204 +/** Scene Client model ID */ +#define MESH_SCENE_CLIENT_MODEL_ID 0x1205 + +/** Scheduler Server model ID */ +#define MESH_SCHEDULER_SERVER_MODEL_ID 0x1206 +/** Scheduler Setup Server model ID */ +#define MESH_SCHEDULER_SETUP_SERVER_MODEL_ID 0x1207 +/** Scheduler Client model ID */ +#define MESH_SCHEDULER_CLIENT_MODEL_ID 0x1208 + +/** Light lightness server */ +#define MESH_LIGHTING_LIGHTNESS_SERVER_MODEL_ID 0x1300 +/** Light lightness setup server */ +#define MESH_LIGHTING_LIGHTNESS_SETUP_SERVER_MODEL_ID 0x1301 +/** Light lightness client */ +#define MESH_LIGHTING_LIGHTNESS_CLIENT_MODEL_ID 0x1302 + +/** Light CTL server */ +#define MESH_LIGHTING_CTL_SERVER_MODEL_ID 0x1303 +/** Light CTL setup server */ +#define MESH_LIGHTING_CTL_SETUP_SERVER_MODEL_ID 0x1304 +/** Light CTL client */ +#define MESH_LIGHTING_CTL_CLIENT_MODEL_ID 0x1305 +/** Light CTL temperature server */ +#define MESH_LIGHTING_CTL_TEMPERATURE_SERVER_MODEL_ID 0x1306 + +/** Light HSL server */ +#define MESH_LIGHTING_HSL_SERVER_MODEL_ID 0x1307 +/** Light HSL setup server */ +#define MESH_LIGHTING_HSL_SETUP_SERVER_MODEL_ID 0x1308 +/** Light HSL client */ +#define MESH_LIGHTING_HSL_CLIENT_MODEL_ID 0x1309 +/** Light HSL hue server */ +#define MESH_LIGHTING_HSL_HUE_SERVER_MODEL_ID 0x130a +/** Light HSL saturation server */ +#define MESH_LIGHTING_HSL_SATURATION_SERVER_MODEL_ID 0x130b + +/** Light xyl server */ +#define MESH_LIGHTING_XYL_SERVER_MODEL_ID 0x130c +/** Light xyl setup server */ +#define MESH_LIGHTING_XYL_SETUP_SERVER_MODEL_ID 0x130d +/** Light xyl client */ +#define MESH_LIGHTING_XYL_CLIENT_MODEL_ID 0x130e + +/** LC Server model ID */ +#define MESH_LC_SERVER_MODEL_ID 0x130f +/** LC Setup Server model ID */ +#define MESH_LC_SETUP_SERVER_MODEL_ID 0x1310 +/** LC Client model ID */ +#define MESH_LC_CLIENT_MODEL_ID 0x1311 + +/* + * Generic model opcodes + */ + +/** Generic On/Off Get */ +#define GENERIC_ON_OFF_GET 0x8201 +/** Generic On/Off Set */ +#define GENERIC_ON_OFF_SET 0x8202 +/** Generic On/Off Set Unreliable*/ +#define GENERIC_ON_OFF_SET_UNRL 0x8203 +/** Generic On/Off Status */ +#define GENERIC_ON_OFF_STATUS 0x8204 + +/** Generic Level Get */ +#define GENERIC_LEVEL_GET 0x8205 +/** Generic Level Set */ +#define GENERIC_LEVEL_SET 0x8206 +/** Generic Level Set Unreliable */ +#define GENERIC_LEVEL_SET_UNRL 0x8207 +/** Generic Level Status */ +#define GENERIC_LEVEL_STATUS 0x8208 +/** Generic Level Delta */ +#define GENERIC_LEVEL_DELTA 0x8209 +/** Generic Level Delta Unreliable */ +#define GENERIC_LEVEL_DELTA_UNRL 0x820a +/** Generic Level Move */ +#define GENERIC_LEVEL_MOVE 0x820b +/** Generic Level Move Unreliable */ +#define GENERIC_LEVEL_MOVE_UNRL 0x820c + +/** Generic Transition Time Get */ +#define GENERIC_TRANSITION_TIME_GET 0x820d +/** Generic Transition Time Set */ +#define GENERIC_TRANSITION_TIME_SET 0x820e +/** Generic Transition Time Set Unreliable */ +#define GENERIC_TRANSITION_TIME_SET_UNRL 0x820f +/** Generic Transition Time Status */ +#define GENERIC_TRANSITION_TIME_STATUS 0x8210 + +/** Generic On Power Up Get */ +#define GENERIC_ON_POWER_UP_GET 0x8211 +/** Generic On Power Up Status */ +#define GENERIC_ON_POWER_UP_STATUS 0x8212 +/** Generic On Power Up Set */ +#define GENERIC_ON_POWER_UP_SET 0x8213 +/** Generic On Power Up Set Unreliable */ +#define GENERIC_ON_POWER_UP_SET_UNRL 0x8214 + +/** Generic Power Level Get */ +#define GENERIC_POWER_LEVEL_GET 0x8215 +/** Generic Power Level Set */ +#define GENERIC_POWER_LEVEL_SET 0x8216 +/** Generic Power Level Set Unreliable */ +#define GENERIC_POWER_LEVEL_SET_UNRL 0x8217 +/** Generic Power Level Status */ +#define GENERIC_POWER_LEVEL_STATUS 0x8218 +/** Generic Power Level Last Get */ +#define GENERIC_POWER_LAST_GET 0x8219 +/** Generic Power Level Last Status */ +#define GENERIC_POWER_LAST_STATUS 0x821a +/** Generic Power Level Default Get */ +#define GENERIC_POWER_DEFAULT_GET 0x821b +/** Generic Power Level Default Status */ +#define GENERIC_POWER_DEFAULT_STATUS 0x821c +/** Generic Power Level Range Get */ +#define GENERIC_POWER_RANGE_GET 0x821d +/** Generic Power Level Range Status */ +#define GENERIC_POWER_RANGE_STATUS 0x821e +/** Generic Power Level Default Set */ +#define GENERIC_POWER_DEFAULT_SET 0x821f +/** Generic Power Level Default Set Unreliable */ +#define GENERIC_POWER_DEFAULT_SET_UNRL 0x8220 +/** Generic Power Level Range Set */ +#define GENERIC_POWER_RANGE_SET 0x8221 +/** Generic Power Level Range Set Unreliable */ +#define GENERIC_POWER_RANGE_SET_UNRL 0x8222 + +/** Generic Battery Get */ +#define GENERIC_BATTERY_GET 0x8223 +/** Generic Battery Status */ +#define GENERIC_BATTERY_STATUS 0x8224 + +/** Generic Location Global Get */ +#define GENERIC_LOCATION_GLOBAL_GET 0x8225 +/** Generic Location Local Get */ +#define GENERIC_LOCATION_LOCAL_GET 0x8226 +/** Generic Location Local Status */ +#define GENERIC_LOCATION_LOCAL_STATUS 0x8227 +/** Generic Location Local Set */ +#define GENERIC_LOCATION_LOCAL_SET 0x8228 +/** Generic Location Local Set Unreliable */ +#define GENERIC_LOCATION_LOCAL_SET_UNRL 0x8229 +/** Generic Location Global Status */ +#define GENERIC_LOCATION_GLOBAL_STATUS 0x40 +/** Generic Location Global Set */ +#define GENERIC_LOCATION_GLOBAL_SET 0x41 +/** Generic Location Global Set Unreliable */ +#define GENERIC_LOCATION_GLOBAL_SET_UNRL 0x42 + +/** Generic Manufacturer Properties Get */ +#define GENERIC_MANUF_PROPERTIES_GET 0x822a +/** Generic Manufacturer Properties Status */ +#define GENERIC_MANUF_PROPERTIES_STATUS 0x43 +/** Generic Manufacturer Property Get */ +#define GENERIC_MANUF_PROPERTY_GET 0x822b +/** Generic Manufacturer Property Set */ +#define GENERIC_MANUF_PROPERTY_SET 0x44 +/** Generic Manufacturer Property Set Unreliable */ +#define GENERIC_MANUF_PROPERTY_SET_UNRL 0X45 +/** Generic Manufacturer Property Status */ +#define GENERIC_MANUF_PROPERTY_STATUS 0x46 + +/** Generic Admin Properties Get */ +#define GENERIC_ADMIN_PROPERTIES_GET 0x822c +/** Generic Admin Properties Status */ +#define GENERIC_ADMIN_PROPERTIES_STATUS 0x47 +/** Generic Admin Property Get */ +#define GENERIC_ADMIN_PROPERTY_GET 0x822D +/** Generic Admin Property Set */ +#define GENERIC_ADMIN_PROPERTY_SET 0x48 +/** Generic Admin Property Set Unreliable */ +#define GENERIC_ADMIN_PROPERTY_SET_UNRL 0x49 +/** Generic Admin Property Status */ +#define GENERIC_ADMIN_PROPERTY_STATUS 0x4A + +/** Generic User Properties Get */ +#define GENERIC_USER_PROPERTIES_GET 0x822e +/** Generic User Properties Status */ +#define GENERIC_USER_PROPERTIES_STATUS 0x4b +/** Generic User Property Get */ +#define GENERIC_USER_PROPERTY_GET 0x822f +/** Generic User Property Set */ +#define GENERIC_USER_PROPERTY_SET 0x4c +/** Generic User Property Set Unreliable */ +#define GENERIC_USER_PROPERTY_SET_UNRL 0x4d +/** Generic User Property Status */ +#define GENERIC_USER_PROPERTY_STATUS 0x4e +/** Generic Client Properties Get */ +#define GENERIC_CLIENT_PROPERTIES_GET 0x4f +/** Generic Client Properties Status */ +#define GENERIC_CLIENT_PROPERTIES_STATUS 0x50 + +/** + * Sensor Server model opcodes + */ + +/** Sensor Descriptor Get request */ +#define SENSOR_DESCRIPTOR_GET 0x8230 +/** Sensor Descriptor Status message */ +#define SENSOR_DESCRIPTOR_STATUS 0x51 + +/** Sensor Get request */ +#define SENSOR_GET 0x8231 +/** Sensor Status message */ +#define SENSOR_STATUS 0x52 + +/** Sensor Column Get request */ +#define SENSOR_COLUMN_GET 0x8232 +/** Sensor Status message */ +#define SENSOR_COLUMN_STATUS 0x53 + +/** Sensor Series Get request */ +#define SENSOR_SERIES_GET 0x8233 +/** Sensor Series Status message */ +#define SENSOR_SERIES_STATUS 0x54 + +/** + * Sensor Setup Server opcodes + */ +/** Sensor Cadence Get request */ +#define SENSOR_CADENCE_GET 0x8234 +/** Sensor Cadence Set request */ +#define SENSOR_CADENCE_SET 0x55 +/** Sensor Cadence Set request, no acknowledgment */ +#define SENSOR_CADENCE_SET_UNACK 0x56 +/** Sensor Cadence Status message */ +#define SENSOR_CADENCE_STATUS 0x57 + +/** Sensor Settings Get request */ +#define SENSOR_SETTINGS_GET 0x8235 +/** Sensor Settings Status message */ +#define SENSOR_SETTINGS_STATUS 0x58 + +/** Sensor Setting Get request */ +#define SENSOR_SETTING_GET 0x8236 +/** Sensor Setting Set request */ +#define SENSOR_SETTING_SET 0x59 +/** Sensor Setting Set request */ +#define SENSOR_SETTING_SET_UNACK 0x5A + +/** Sensor Setting Status message */ +#define SENSOR_SETTING_STATUS 0x5B + +/* Time model message opcodes */ + +/** Time Get */ +#define TIME_GET 0x8237 +/** Time Set */ +#define TIME_SET 0x5C +/** Time Status */ +#define TIME_STATUS 0x5D +/** Time Role Get */ +#define TIME_ROLE_GET 0x8238 +/** Time Role Set */ +#define TIME_ROLE_SET 0x8239 +/** Time Role Status */ +#define TIME_ROLE_STATUS 0x823A +/** Time Zone Get */ +#define TIME_ZONE_GET 0x823B +/** Time Zone Set */ +#define TIME_ZONE_SET 0x823C +/** Time Zone Status */ +#define TIME_ZONE_STATUS 0x823D +/** Time TAI-UTC Delta Get */ +#define TIME_TAI_UTC_DELTA_GET 0x823E +/** Time TAI-UTC Delta Set */ +#define TIME_TAI_UTC_DELTA_SET 0x823F +/** Time TAI-UTC Delta Status */ +#define TIME_TAI_UTC_DELTA_STATUS 0x8240 + +/** Scene Get request */ +#define SCENE_GET 0x8241 +/** Scene Recall request */ +#define SCENE_RECALL 0x8242 +/** Scene Recall Unacknowledged request */ +#define SCENE_RECALL_UNACK 0x8243 +/** Scene Register Get request */ +#define SCENE_REGISTER_GET 0x8244 +/** Scene Register Status request */ +#define SCENE_REGISTER_STATUS 0x8245 +/** Scene Store request */ +#define SCENE_STORE 0x8246 +/** Scene Store Unacknowledged request */ +#define SCENE_STORE_UNACK 0x8247 +/** Scene Delete request */ +#define SCENE_DELETE 0x829E +/** Scene Delete Unacknowledged request */ +#define SCENE_DELETE_UNACK 0x829F +/** Scene Status */ +#define SCENE_STATUS 0x5E + +/* Scheduler model message opcodes */ +/** Scheduler Action Get */ +#define SCHEDULER_ACTION_GET 0x8248 +/** Scheduler Action Status */ +#define SCHEDULER_ACTION_STATUS 0x5F +/** Scheduler Get */ +#define SCHEDULER_GET 0x8249 +/** Scheduler Status */ +#define SCHEDULER_STATUS 0x824A +/** Scheduler Action Set */ +#define SCHEDULER_ACTION_SET 0x60 +/** Scheduler Action Set Unreliable */ +#define SCHEDULER_ACTION_SET_NOACK 0x61 + +/** + * LC Server model opcodes + */ + +/** LC Mode Get request */ +#define LC_MODE_GET 0x8291 +/** LC Mode Set request */ +#define LC_MODE_SET 0x8292 +/** LC Mode Set request */ +#define LC_MODE_SET_UNACK 0x8293 +/** LC Mode Status message */ +#define LC_MODE_STATUS 0x8294 + +/** LC OM Get request */ +#define LC_OM_GET 0x8295 +/** LC OM Set request */ +#define LC_OM_SET 0x8296 +/** LC OM Set Unacknowledged request */ +#define LC_OM_SET_UNACK 0x8297 +/** LC OM Status message */ +#define LC_OM_STATUS 0x8298 + +/** LC Light OnOff Get request */ +#define LC_LIGHT_ONOFF_GET 0x8299 +/** LC Light OnOff Set request */ +#define LC_LIGHT_ONOFF_SET 0x829A +/** LC Light OnOff Set Unacknowledged request */ +#define LC_LIGHT_ONOFF_SET_UNACK 0x829B +/** LC Light OnOff Status message */ +#define LC_LIGHT_ONOFF_STATUS 0x829C + +/** LC Property Get request */ +#define LC_PROPERTY_GET 0x829D +/** LC Property Set request */ +#define LC_PROPERTY_SET 0x62 +/** LC Property Set Unacknowledged request */ +#define LC_PROPERTY_SET_UNACK 0x63 +/** LC Property Status message */ +#define LC_PROPERTY_STATUS 0x64 + +/* + * Lighting model opcodes + */ + +/** Lighting Lightness Actual Get */ +#define LIGHTING_LIGHTNESS_ACTUAL_GET 0x824b +/** Lighting Lightness Actual Set */ +#define LIGHTING_LIGHTNESS_ACTUAL_SET 0x824c +/** Lighting Lightness Actual Set Unreliable */ +#define LIGHTING_LIGHTNESS_ACTUAL_SET_UNRL 0x824d +/** Lighting Lightness Actual Status */ +#define LIGHTING_LIGHTNESS_ACTUAL_STATUS 0x824e +/** Lighting Lightness Linear Get */ +#define LIGHTING_LIGHTNESS_LINEAR_GET 0x824f +/** Lighting Lightness Linear Set */ +#define LIGHTING_LIGHTNESS_LINEAR_SET 0x8250 +/** Lighting Lightness Linear Set Unreliable */ +#define LIGHTING_LIGHTNESS_LINEAR_SET_UNRL 0x8251 +/** Lighting Lightness Linear Status */ +#define LIGHTING_LIGHTNESS_LINEAR_STATUS 0x8252 +/** Lighting Lightness Last Get */ +#define LIGHTING_LIGHTNESS_LAST_GET 0x8253 +/** Lighting Lightness Last Status */ +#define LIGHTING_LIGHTNESS_LAST_STATUS 0x8254 +/** Lighting Lightness Default Get */ +#define LIGHTING_LIGHTNESS_DEFAULT_GET 0x8255 +/** Lighting Lightness Default Set */ +#define LIGHTING_LIGHTNESS_DEFAULT_SET 0x8259 +/** Lighting Lightness Default Set Unreliable */ +#define LIGHTING_LIGHTNESS_DEFAULT_SET_UNRL 0x825a +/** Lighting Lightness Default Status */ +#define LIGHTING_LIGHTNESS_DEFAULT_STATUS 0x8256 +/** Lighting Lightness Range Get */ +#define LIGHTING_LIGHTNESS_RANGE_GET 0x8257 +/** Lighting Lightness Range Set */ +#define LIGHTING_LIGHTNESS_RANGE_SET 0x825b +/** Lighting Lightness Range Set Unreliable */ +#define LIGHTING_LIGHTNESS_RANGE_SET_UNRL 0x825c +/** Lighting Lightness Range Status */ +#define LIGHTING_LIGHTNESS_RANGE_STATUS 0x8258 + +/** Lighting CTL Get */ +#define LIGHTING_CTL_GET 0x825d +/** Lighting CTL Set */ +#define LIGHTING_CTL_SET 0x825e +/** Lighting CTL Set Unreliable */ +#define LIGHTING_CTL_SET_UNRL 0x825f +/** Lighting CTL Status */ +#define LIGHTING_CTL_STATUS 0x8260 +/** Lighting CTL Temperature Get */ +#define LIGHTING_CTL_TEMP_GET 0x8261 +/** Lighting CTL Temperature Range Get */ +#define LIGHTING_CTL_TEMP_RANGE_GET 0x8262 +/** Lighting CTL Temperature Range Status */ +#define LIGHTING_CTL_TEMP_RANGE_STATUS 0x8263 +/** Lighting CTL Temperature Set */ +#define LIGHTING_CTL_TEMP_SET 0x8264 +/** Lighting CTL Temperature Set Unreliable */ +#define LIGHTING_CTL_TEMP_SET_UNRL 0x8265 +/** Lighting CTL Temperature Status */ +#define LIGHTING_CTL_TEMP_STATUS 0x8266 +/** Lighting CTL Temperature Default Get */ +#define LIGHTING_CTL_DEFAULT_GET 0x8267 +/** Lighting CTL Temperature Default Status */ +#define LIGHTING_CTL_DEFAULT_STATUS 0x8268 +/** Lighting CTL Temperature Default Set */ +#define LIGHTING_CTL_DEFAULT_SET 0x8269 +/** Lighting CTL Temperature Default Set Unreliable */ +#define LIGHTING_CTL_DEFAULT_SET_UNRL 0x826a +/** Lighting CTL Temperature Range Set */ +#define LIGHTING_CTL_TEMP_RANGE_SET 0x826b +/** Lighting CTL Temperature Range Set Unreliable */ +#define LIGHTING_CTL_TEMP_RANGE_SET_UNRL 0x826c + +/** Lighting HSL Get */ +#define LIGHTING_HSL_GET 0x826d +/** Lighting HSL Set */ +#define LIGHTING_HSL_SET 0x8276 +/** Lighting HSL Set Unreliable */ +#define LIGHTING_HSL_SET_UNRL 0x8277 +/** Lighting HSL Status */ +#define LIGHTING_HSL_STATUS 0x8278 +/** Lighting HSL Hue Get */ +#define LIGHTING_HSL_HUE_GET 0x826e +/** Lighting HSL Hue Set */ +#define LIGHTING_HSL_HUE_SET 0x826f +/** Lighting HSL Hue Set Unreliable */ +#define LIGHTING_HSL_HUE_SET_UNRL 0x8270 +/** Lighting HSL Hue Status */ +#define LIGHTING_HSL_HUE_STATUS 0x8271 +/** Lighting HSL Saturation Get */ +#define LIGHTING_HSL_SATURATION_GET 0x8272 +/** Lighting HSL Saturation Set */ +#define LIGHTING_HSL_SATURATION_SET 0x8273 +/** Lighting HSL Saturation Set Unreliable */ +#define LIGHTING_HSL_SATURATION_SET_UNRL 0x8274 +/** Lighting HSL Saturation Status */ +#define LIGHTING_HSL_SATURATION_STATUS 0x8275 +/** Lighting HSL Target Get */ +#define LIGHTING_HSL_TARGET_GET 0x8279 +/** Lighting HSL Target Status */ +#define LIGHTING_HSL_TARGET_STATUS 0x827a +/** Lighting HSL Default Get */ +#define LIGHTING_HSL_DEFAULT_GET 0x827b +/** Lighting HSL Default Set */ +#define LIGHTING_HSL_DEFAULT_SET 0x827f +/** Lighting HSL Default Set Unreliable */ +#define LIGHTING_HSL_DEFAULT_SET_UNRL 0x8280 +/** Lighting HSL Default Status */ +#define LIGHTING_HSL_DEFAULT_STATUS 0x827c +/** Lighting HSL Range Get */ +#define LIGHTING_HSL_RANGE_GET 0x827d +/** Lighting HSL Range Set */ +#define LIGHTING_HSL_RANGE_SET 0x8281 +/** Lighting HSL Range Set Unreliable */ +#define LIGHTING_HSL_RANGE_SET_UNRL 0x8282 +/** Lighting HSL Range Status */ +#define LIGHTING_HSL_RANGE_STATUS 0x827e + +/** + * Enumeration describing attributes a model supports. + * Multiple bits can be supported. + */ +typedef enum { + sl_btmesh_model_attributes_none = 0, /**< No attribute flags */ + sl_btmesh_model_supports_subscription = (1 << 0), /**< Subscription supported */ + sl_btmesh_model_supports_publication = (1 << 1), /**< Publication supported */ +} sl_btmesh_model_attributes_bitmask_t; + +/** + * @brief Check supported attributes bitmask for Bluetooth SIG model + * + * @param model_id Model ID of the model to check + * @param attributes If model is recognized, attributes are written here + * @return SL_STATUS_OK if model is recognized, SL_STATUS_NOT_SUPPORTED otherwise + */ +sl_status_t mesh_stack_bt_sig_model_attributes(uint16_t model_id, + sl_btmesh_model_attributes_bitmask_t *attributes); + +#endif diff --git a/protocol/bluetooth/inc/sl_btmesh_model_specification_v1_1_defs.h b/protocol/bluetooth/inc/sl_btmesh_model_specification_v1_1_defs.h new file mode 100644 index 00000000000..67285fe5e5c --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_model_specification_v1_1_defs.h @@ -0,0 +1,117 @@ +/******************************************************************************/ +/** + * @file sl_btmesh_model_specification_defs.h + * @brief Silicon Labs Bluetooth Mesh Model v1.1 Specification Definitions + * + ******************************************************************************* + * # 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 SL_BTMESH_MODEL_SPECIFICATION_V1_1_DEFS_H +#define SL_BTMESH_MODEL_SPECIFICATION_V1_1_DEFS_H + +/** Device Firmware Update Server model ID */ +#define MESH_DFU_SERVER_MODEL_ID 0x1402 +/** Device Firmware Update Client model ID */ +#define MESH_DFU_CLIENT_MODEL_ID 0x1403 +/** Device Firmware Update Distributor Server model ID */ +#define MESH_DFU_DISTRIBUTOR_SERVER_MODEL_ID 0x1404 +/** Device Firmware Update Distributor Client model ID */ +#define MESH_DFU_DISTRIBUTOR_CLIENT_MODEL_ID 0x1405 +/** BLOB Transfer Server model ID */ +#define MESH_MBT_SERVER_MODEL_ID 0x1400 +/** BLOB Transfer Client model ID */ +#define MESH_MBT_CLIENT_MODEL_ID 0x1401 + +//TODO are subject to change in final specification +/** Remote provisioning server */ +#define MESH_REMOTE_PROV_SERVER_MODEL_ID 0x0004 +/** Remote provisioning server */ +#define MESH_REMOTE_PROV_CLIENT_MODEL_ID 0x0005 +/** Private Beacon server */ +#define MESH_PRIVATE_BEACON_SERVER_MODEL_ID 0x000A +/** Private Beacon Client */ +#define MESH_PRIVATE_BEACON_CLIENT_MODEL_ID 0x000B + +#define MBT_TRANSFER_GET 0x8300 +#define MBT_TRANSFER_START 0x8301 +#define MBT_TRANSFER_CANCEL 0x8302 +#define MBT_TRANSFER_STATUS 0x8303 +#define MBT_BLOCK_START 0x8304 +#define MBT_CHUNK 0x66 +#define MBT_BLOCK_GET 0x8305 +#define MBT_BLOCK_STATUS 0x67 +#define MBT_INFO_GET 0x8306 +#define MBT_INFO_STATUS 0x8307 +#define MBT_PARTIAL_BLOCK_REPORT 0x68 + +#define DFU_INFORMATION_GET 0x8308 +#define DFU_INFORMATION_STATUS 0x8309 +#define DFU_METADATA_CHECK 0x830A +#define DFU_METADATA_STATUS 0x830B +#define DFU_UPDATE_GET 0x830C +#define DFU_UPDATE_START 0x830D +#define DFU_UPDATE_CANCEL 0x830E +#define DFU_UPDATE_APPLY 0x830F +#define DFU_UPDATE_STATUS 0x8310 +#define DFU_DISTRIBUTION_NODES_ADD 0x8311 +#define DFU_DISTRIBUTION_NODES_DELETE_ALL 0x8312 +#define DFU_DISTRIBUTION_NODES_STATUS 0x8313 +#define DFU_DISTRIBUTION_NODES_GET 0x8314 +#define DFU_DISTRIBUTION_NODES_LIST 0x8315 +#define DFU_DISTRIBUTION_CAPABILITIES_GET 0x8316 +#define DFU_DISTRIBUTION_CAPABILITIES_STATUS 0x8317 +#define DFU_DISTRIBUTION_GET 0x8318 +#define DFU_DISTRIBUTION_START 0x8319 +#define DFU_DISTRIBUTION_CANCEL 0x831B +#define DFU_DISTRIBUTION_APPLY 0x831C +#define DFU_DISTRIBUTION_STATUS 0x831D +#define DFU_DISTRIBUTION_UPLOAD_GET 0x831E +#define DFU_DISTRIBUTION_UPLOAD_START 0x831F +#define DFU_DISTRIBUTION_UPLOAD_OOB_START 0x8320 +#define DFU_DISTRIBUTION_UPLOAD_CANCEL 0x8321 +#define DFU_DISTRIBUTION_UPLOAD_STATUS 0x8322 +#define DFU_DISTRIBUTION_FW_GET 0x8323 +#define DFU_DISTRIBUTION_FW_GET_BY_INDEX 0x8324 +#define DFU_DISTRIBUTION_FW_DELETE 0x8325 +#define DFU_DISTRIBUTION_FW_DELETE_ALL 0x8326 +#define DFU_DISTRIBUTION_FW_STATUS 0x8327 +#define DFU_DISTRIBUTION_SUSPEND 0x831A + +/** Firmware List index value representing "not found" */ +#define MESH_DFU_FW_INDEX_NOT_FOUND 0xffff + +/** Minimum length of a FWID. Must contain a 2-byte Company ID, at minimum */ +#define MESH_DFU_FWID_MIN_LEN 2 + +/** Maximum length of a FWID. 2-byte Company ID + 106 B is the maximum length */ +#define MESH_DFU_FWID_MAX_LEN 108 + +/** Minimum URI length */ +#define MESH_DFU_URI_MIN_LEN 0 + +/** Maximum URI length */ +#define MESH_DFU_URI_MAX_LEN 255 + +/** Minimum metadata length */ +#define MESH_DFU_METADATA_MIN_LEN 0 + +/** Maximum metadata length */ +#define MESH_DFU_METADATA_MAX_LEN 255 + +/** If the Supported URI Scheme Names state exists, it is at least 1 byte long */ +#define MESH_DFU_URI_SCHEMES_MIN_LEN 1 + +/** Maximum Supported URI Scheme Names length */ +#define MESH_DFU_URI_SCHEMES_MAX_LEN 255 + +#endif diff --git a/protocol/bluetooth/inc/sl_btmesh_ncp_host.h b/protocol/bluetooth/inc/sl_btmesh_ncp_host.h new file mode 100644 index 00000000000..569bf5bdb80 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_ncp_host.h @@ -0,0 +1,104 @@ +/***************************************************************************//** + * @brief Adaptation layer between host application and SL_BTMESH_API protocol + ******************************************************************************* + * # 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 SL_BTMESH_NCP_HOST_H +#define SL_BTMESH_NCP_HOST_H + +/***************************************************************************** + * + * This is an adaptation layer between host application and SL_BTMESH_API protocol. + * It provides synchronization mechanism for SL_BTMESH_API-protocol that allows + * using same application architecture between application in mcu and external + * host. + * + * Synchronization is done by waiting for response after each command. If + * any events are received during response waiting, they are queued and + * delivered next time sl_btmesh_wait_event is called. + * + * Queue length is controlled by defining macro "SL_BTMESH_API_QUEUE_LEN", default is 30. + * Queue length depends on use cases and allowed host memory usage. + * + * SL_BTMESH_API usage: + * Register library with the SL_BT_API protocol handler. + * + * SL_BTMESH_API_REGISTER(); + * + * The SL_BT_API protocol handler MUST have been initialized prior to registering SL_BTMESH_API. + * Both use the same data pipe input and output functions, defined by the SL_BT_API initializers. + * See the documentation in sl_bt_ncp_host.h for information about how to initialize it. + * In all other ways, SL_BTMESH_API behaves the same way as SL_BT_API. + * + * + * Receiving event: + * Events are received by sl_btmesh_wait_event-function. + * + * prototype: + * sl_btmesh_msg_t* sl_btmesh_wait_event(void) + * + * Event ID can be read from header of event by SL_BTMESH_API_MSG_ID-macro. + * + * Event data can be accessed thru returned pointer. + * + * Example: + * sl_btmesh_msg_t *p; + * + * p=sl_btmesh_wait_event() + * + * if(SL_BTMESH_API_MSG_ID(p->header)==sl_btmesh_evt_gatt_server_characteristic_status_id) + * { + * c=evt->evt_gatt_server_characteristic_status.connection;//accesses connection field of event data + * } + * + * Sending commands: + * SL_BTMESH_API-commands can be sent by calling helper functions, that then build SL_BTMESH_API-message and call output-function. + * Function then waits for response and return pointer to that message. + * + * Example: + * //Test that connection to the device is working + * if(sl_btmesh_system_hello() == SL_STATUS_OK) + * {//function call was successful + * + * } + * + * + ****************************************************************************/ + +#if _MSC_VER //msvc +#define inline __inline +#endif + +#include "sl_btmesh_api.h" +#include "sl_bt_ncp_host.h" + +#ifndef SL_BTMESH_API_QUEUE_LEN +#define SL_BTMESH_API_QUEUE_LEN 30 +#endif + +extern bgapi_device_type_queue_t sl_btmesh_api_queue; + +/** + * Register SL_BTMESH_API to the Bluetooth Host API system. + * Note that SL_BT_API_INITIALIZE_NONBLOCK or SL_BT_API_INITIALIZE + * MUST have been called prior to this. + */ +#define SL_BTMESH_API_REGISTER() \ + do { sli_bgapi_register_device(&sl_btmesh_api_queue); } while (0); + +void sl_btmesh_host_handle_command(); +void sl_btmesh_host_handle_command_noresponse(); +sl_status_t sl_btmesh_wait_event(sl_btmesh_msg_t *p); + +#endif diff --git a/protocol/bluetooth/inc/sl_btmesh_provisioning_records.h b/protocol/bluetooth/inc/sl_btmesh_provisioning_records.h new file mode 100644 index 00000000000..3dd5f1ae356 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_provisioning_records.h @@ -0,0 +1,65 @@ +/***************************************************************************//** + * @file sl_btmesh_provisioning_records.h + * @brief Mesh provisioning records + ******************************************************************************* + * # License + * Copyright 2018 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 SL_BTMESH_PROVISIONING_RECORDS_H +#define SL_BTMESH_PROVISIONING_RECORDS_H + +/* + * Some provisioning records, such as device X.509 certificate, are + * device specific (each device has its own data for the record) while + * other records are not device specific (each device in a class of + * devices has the same data for the record). + * + * Non device specific records are stored as constant data in the + * firmware image. This header is for the definitions application + * can use to set those constants. + */ + +/** + * Provisioning record that is constant across a class of devices, + * i.e., is not device-specific. + */ +struct mesh_const_provisioning_record { + const uint8_t *ptr; //< Provisioning record data + uint16_t len; //< Length of provisioning record data +}; + +/** Number of spec-defined intermediate certificates */ +#define MESH_INTERMEDIATE_CERTIFICATE_COUNT 15 + +/** + * Full set of constant provisioning records + */ +struct mesh_const_provisioning_records { + /** Certificate-based provisioning base URI */ + struct mesh_const_provisioning_record base_uri; + /** Complete local name */ + struct mesh_const_provisioning_record complete_local_name; + /** Appearance */ + struct mesh_const_provisioning_record appearance; + /** Intermediate certificate 1 to 15 */ + struct mesh_const_provisioning_record intermediate_certificate[MESH_INTERMEDIATE_CERTIFICATE_COUNT]; +}; + +/** + * Constant provisioning records of the device. Application can set + * the value of individual provisioning records by setting the value + * of this pointer to point to a structure filled with the record data. + */ +extern const struct mesh_const_provisioning_records *mesh_const_provisioning_records; + +#endif diff --git a/protocol/bluetooth/inc/sl_btmesh_sensor.h b/protocol/bluetooth/inc/sl_btmesh_sensor.h new file mode 100644 index 00000000000..635a7bcbe3f --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_sensor.h @@ -0,0 +1,63 @@ +/***************************************************************************//** + * @file mesh_sensor.h + * @brief Mesh sensor model helpers + ******************************************************************************* + * # License + * Copyright 2018 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 MESH_SENSOR_H +#define MESH_SENSOR_H + +#include "sl_status.h" +#include "sl_btmesh_device_properties.h" +#include "sl_btmesh_sensor_model_capi_types.h" + +/** + * @brief Sensor server init helper + * @param elem_idx Index of the element containing the sensor server model + * @param number_of_sensors Number of Sensor Descriptor states + * @param descriptors Array of sensor_descriptor_t structs + * + * @return bg_err_success on success; an error code otherwise + */ +sl_status_t mesh_lib_sensor_server_init(uint16_t elem_idx, uint8_t number_of_sensors, const sensor_descriptor_t *descriptors); + +/** + * @brief Serialize sensor data entry + * @param property_id Sensor Property ID + * @param ptr buffer pointer + * @param value Sensor Data encoded to mesh specific representation + * + * @return Length of encoded data + */ +uint8_t mesh_sensor_data_to_buf (uint16_t property_id, uint8_t *ptr, uint8_t *value); + +/** + * @brief Deserialize sensor data entry + * @param property_id Sensor Property ID + * @param ptr Buffer byte array pointer + * + * @return Property structure containing decoded data + */ +mesh_device_property_t mesh_sensor_data_from_buf (uint16_t property_id, const uint8_t *ptr); + +/** + * @brief Deserialize sensor descriptor states + * @param descriptor Sensor Descriptor destination array + * @param buf Byte array containing the serialized descriptors + * @param input_len Length of the byte array + * + * @return bg_err_success on success; an error code otherwise + */ +sl_status_t mesh_lib_sensor_descriptors_from_buf(sensor_descriptor_t *descriptor, uint8_t *buf, int16_t input_len); + +#endif diff --git a/protocol/bluetooth/inc/sl_btmesh_sensor_model_capi_types.h b/protocol/bluetooth/inc/sl_btmesh_sensor_model_capi_types.h new file mode 100644 index 00000000000..67c22073eae --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_sensor_model_capi_types.h @@ -0,0 +1,468 @@ +/******************************************************************************/ +/** + * @file sl_btmesh_sensor_model_capi_types.h + * @brief Silicon Labs Bluetooth Mesh Sensor Model API + * + ******************************************************************************* + * (C) Copyright 2018 Silicon Labs, http://www.silabs.com + ******************************************************************************* + * This file is licensed under the Silabs License Agreement. See the file + * "Silabs_License_Agreement.txt" for details. Before using this software for + * any purpose, you must agree to the terms of that agreement. + ******************************************************************************/ + +#ifndef SL_BTMESH_SENSOR_MODEL_CAPI_TYPES_H +#define SL_BTMESH_SENSOR_MODEL_CAPI_TYPES_H + +#include "stdint.h" +#include "sl_btmesh_device_properties.h" +#include "sl_btmesh_model_specification_defs.h" + +/** Sensor model events */ +typedef enum mesh_sensor_event_type { + /** Sensor Descriptor Get acknowledged client request to server. */ + MESH_SENSOR_EVENT_GET_DESCRIPTOR = 1, + /** Sensor Descriptor Status server response to Descriptor Get request */ + MESH_SENSOR_EVENT_DESCRIPTOR_STATUS, + + /** Sensor Cadence Get acknowledged client request to setup server*/ + MESH_SENSOR_EVENT_GET_CADENCE, + /** Sensor Cadence Set acknowledged client request to setup server + * Unacknowledged request is done using message flags*/ + MESH_SENSOR_EVENT_SET_CADENCE, + /** Sensor Cadence Set unacknowledged client request to setup server */ + MESH_SENSOR_EVENT_CADENCE_STATUS, + + /** Sensor Server Settings Get acknowledged client request to setup server */ + MESH_SENSOR_EVENT_GET_SETTINGS, + /** Sensor Settings Status setup server response to Settings Get request or unsolicited message */ + MESH_SENSOR_EVENT_SETTINGS_STATUS, + + /** Sensor Setting Get acknowledged client request to setup server */ + MESH_SENSOR_EVENT_GET_SETTING, + /** Sensor Setting Set acknowledged client request to setup server server + * Unacknowledged request is done using message flags */ + MESH_SENSOR_EVENT_SET_SETTING, + /** Sensor Setting Status setup server response to Setting Get/Set requests */ + MESH_SENSOR_EVENT_SETTING_STATUS, + + /** Sensor Get acknowledged client request to server */ + MESH_SENSOR_EVENT_GET, + /** Sensor Status server response to Sensor Get requests or unsolicited message */ + MESH_SENSOR_EVENT_STATUS, + + /** Sensor Column Get acknowledged client request to server */ + MESH_SENSOR_EVENT_GET_COLUMN, + /** Sensor Column Status server response to Get Column requests */ + MESH_SENSOR_EVENT_COLUMN_STATUS, + + /** Sensor Series Get acknowledged client request to server */ + MESH_SENSOR_EVENT_GET_SERIES, + /** Sensor Series Status server response to Series Get requests */ + MESH_SENSOR_EVENT_SERIES_STATUS, + + /** Publishing period timer elapsed, state should be reported */ + MESH_SENSOR_EVENT_PUBLISH +} mesh_sensor_event_type_t; + +/** + * Sensor Server message flags to indicate that a response is required + * Used for Set Setting and Set Cadence messages where there are + * acknowledged and unacknowledged versions differentiated by opcode + */ +#define SENSOR_SERVER_MSG_RESPONSE_REQUIRED 0x02 + +/** Sensor Property ID, 16-bit ID referencing a device property */ +typedef uint16_t sensor_property_id_t; +/** Sensor Property ID 0x0000 is prohibited */ +#define SENSOR_PROPERY_ID_INVALID DEVICE_PROPERTY_INVALID + +/* + * Sensor parameters + */ + +/** 12-bit Positive Tolerance value (0x001 - 0xFFF), the value is derived as Possible Positive Error % = 100 % * Positive Tolerance / 4095 */ +typedef uint16_t sensor_positive_tolerance_t; + +/** 12-bit Negative Tolerance value (0x001 - 0xFFF), the value is derived as Possible Negative Error % = 100 % * Negative Tolerance / 4095 */ +typedef uint16_t sensor_negative_tolerance_t; +/** Sensor Tolerance not specified */ +#define TOLERANCE_UNSPECIFIED 0 + +/** Sensor Sampling Period, 8-bit value */ +typedef uint8_t sensor_sampling_function_t; +/** Sensor Sampling Function values */ +enum sensor_sampling_function_e { + /** Unspecified */ + SAMPLING_UNSPECIFIED = 0x00, + /** Instantaneous sampling */ + SAMPLING_INSTANTANEOUS = 0x01, + /** Arithmetic mean */ + SAMPLING_ARITHMETIC_MEAN = 0x02, + /** Root mean square */ + SAMPLING_RMS = 0x03, + /** Maximum value */ + SAMPLING_MAXIMUM = 0x04, + /** Minimum value */ + SAMPLING_MINIMUM = 0x05, + /** Cumulative moving average updated with the frequency given by Sensor Update Interval */ + SAMPLING_ACCUMULATED = 0x06, // + /** Number of "events" over the period of time defined by the Measurement Period */ + SAMPLING_COUNT = 0x07, + /** Values starting from 0x08 are Reserved for Future Use */ + SAMPLING_RFU = 0x08 +}; + +/** + * Sensor Measurement Period + * 8-bit value n representing the averaging time span, accumulation time or measurement period in seconds + * Represented value = 1.1ˆ(n-64), ranging from approximately 2.5ms to about 932 days. + * Value zero means undefined, definitive values start from 1 + */ +typedef uint8_t sensor_measurement_period_t; + +/** Sensor measurement period unspecified */ +#define MEASUREMENT_PERIOD_UNDEFINED 0 + +/** + * Sensor Update Interval + * 8-bit value representing the frequency at which the measurement value is updated internally + * Represented value = 1.1ˆ(n-64), ranging from approximately 2.5ms to about 932 days. + * Value zero means undefined, definitive values start from 1 + */ +typedef uint8_t sensor_update_interval_t; +/** Sensor update interval unspecified */ +#define UPDATE_INTERVAL_UNDEFINED 0 + +/** + * @brief Sensor Descriptor + * Sensor Descriptor + * + * The Sensor Descriptor state represents the attributes describing the sensor data. This state does not change throughout the lifetime of an element. + * One sensor model can have multiple Sensor Descriptor states in case of a multisensor setup. + */ +typedef struct sensor_descriptor { + /** Sensor Property ID */ + sensor_property_id_t property_id; + /** Sensor Positive Tolerance */ + sensor_positive_tolerance_t positive_tolerance; + /** Sensor Negative Tolerance */ + sensor_negative_tolerance_t negative_tolerance; + /** Sensor Sampling Function */ + sensor_sampling_function_t sampling_function; + /** Sensor Measurement Period */ + sensor_measurement_period_t measurement_period; + /** Sensor Update Interval */ + sensor_update_interval_t update_interval; +} sensor_descriptor_t; + +/* + * Sensor setting state controlling the sensor's parameters + */ + +/** Property ID of a setting within a sensor */ +typedef uint16_t sensor_setting_property_id_t; + +/** + * Setting Access control is essentially defined in the form of a two-bit bit-flag field, + * Bit 0 (0x01) means read access, bit 1 (0x2) means write access + * NOTE: only Read (01b) or Read&Write (11b) is permitted, all other values are prohibited. + */ +typedef uint8_t sensor_setting_access_t; +/** Sensor Setting access rights values */ +enum sensor_setting_access_e { + /** PROHIBITED = 0x00 */ + /** Setting Read Access */ + SETTING_ACCESS_READ = 0x01, + /** PROHIBITED "Write only flag" = 0x02, */ + /** Setting Read and Write Access */ + SETTING_ACCESS_READWRITE = 0x03 + /** PROHIBITED = 0x04-0xFF */ +}; + +/** + * Sensor Setting state + */ +typedef struct sensor_setting { + /** Device Property ID */ + sensor_property_id_t property_id; + /** Sensor Setting Property ID */ + sensor_setting_property_id_t setting_property_id; + /** Access level */ + sensor_setting_access_t setting_access; + /** Setting raw value */ + uint8_t *raw_value; +} sensor_setting_t; + +/* + * Sensor Cadence definitions + */ + +/** + * Fast Cadence Period Divisor + * 7-bit value on "n", defining a 2ˆn divisor for the normal publish period interval + */ +typedef uint8_t fast_cadence_period_divisor_t; + +/** + * Status Trigger Type + * Specifies the value and unit for the trigger threshold given in Status Trigger Delta Up/Down fields + * 1-bit value as follows: + * 0b0 - the format is defined by Format Type specified for the characteristics of the Sensor Property ID + * 0b1 - the format is UINT16, the trigger value represent a percentage change with the resolution of 0.01 percent; + */ +typedef uint8_t status_trigger_type_t; +/** Sensor Trigger Type constants */ +enum status_trigger_type { + STATUS_TRIGGER_TYPE_PREDEFINED = 0, + STATUS_TRIGGER_TYPE_PERCENTAGE = 1 +}; + +/** + * Status Trigger Delta Down/Up + * The Status Trigger Delta Down field shall control the negative/positive change of a measured quantity that triggers publication of a Sensor Status message. + * The setting is calculated based on the value of the Status Trigger Type field: + * If the value of the Status Trigger Type field is 0b0, the setting is calculated as defined by the Sensor Property ID state. + * If the value of the Status Trigger Type field is 0b1, the setting is calculated using the following formula: represented value = value / 100 + */ +typedef struct status_trigger_delta { + /** Data length */ + uint16_t size; + /** Trigger value */ + uint8_t *value; +} status_trigger_delta_t; + +/** + * The Status Min Interval field is a 1-octet value that shall control the minimum interval between publishing two consecutive Sensor Status messages. + * The value is represented as 2n milliseconds. For example, the value 0x0A would represent an interval of 1024ms. + * The valid range for the Status Min Interval is 0–26 and other values are Prohibited. + */ +typedef uint8_t min_interval_t; + +/** + * Fast Cadence Low/High + * Defines the lower or upper boundary of the range of measured quantities when the publishing cadence is increased as defined by the Fast Cadence Period Divisor fiels. + * The represented value is calculated as defined by the Sensor Property ID state. + * NOTE: Lower bound can be set to a value higher than the higher bound. In such cases, the increased cadence occurs outside of the [low...high] range. + */ +typedef struct fast_cadence_bound_t { + /** Number of bytes in the raw value */ + uint16_t size; + /** Lower/Upper bound raw value */ + uint8_t *value; +} fast_cadence_bound_t; + +/** Sensor Cadence state */ +struct sensort_cadence_state { + /** Sensor Property ID */ + sensor_property_id_t property_id; // 16-bit value property id + /** Fast Cadence Period Divisor */ + fast_cadence_period_divisor_t period_divisor; // 7-bit value "n", giving 2ˆn divisor of the publish period interval + /** Status Trigger Type */ + status_trigger_type_t status_trigger_type; // 1-bit + /** Status Trigger Delta Down */ + status_trigger_delta_t status_trigger_delta_down; + /** Status Trigger Delta Up */ + status_trigger_delta_t status_trigger_delta_up; + /** Status Min Interval */ + min_interval_t min_interval; + /** Fast Cadence Low */ + fast_cadence_bound_t fast_cadence_low; + /** Fast Cadence High */ + fast_cadence_bound_t fast_cadence_high; +}; +/** Sensor Cadence state */ +typedef struct sensor_cadence sensor_cadence_t; + +/** Sensor measurement data */ +struct sensor_data { + /** Data length */ + uint16_t size; + /** Raw data value */ + uint8_t value; +}; +/** Sensor measurement data */ +typedef struct sensor_data sensor_data_t; + +/** + * Sensor Descriptor Get + * Message content definition for Get Descriptor request + */ +typedef struct sensor_descriptor_get { + /** Sensor Property ID */ + uint16_t property_id_t; +} sensor_descriptor_get_t; + +/** + * Sensor Descriptor Status + * Definition for Descriptor Status message sent by sensor server as a reply to Get Descriptor + */ +typedef struct sensor_descriptor_status_t { + /** Sensor Descriptor array */ + sensor_descriptor_t *descriptor; +} sensor_descriptor_status_t; + +/** + * Sensor Settings Get + * Message definition for Get Settings request + */ +typedef struct { + /** Sensor Property ID */ + uint16_t property_id; +} sensor_get_settings_msg_t; + +/** + * Sensor Settings Status + * Definition for Settings Status message sent by sensor server as a reply to Get Settings request + */ +typedef struct { + /** Sensor Property ID */ + sensor_property_id_t property_id; + /** Sensor Setting Property ID array */ + sensor_setting_property_id_t *setting_property; +} sensor_settings_status_t; + +/** + * Sensor Setting Get + * Definition of Get Setting message content + */ +typedef struct { + /** Sensor Property Id */ + uint16_t property_id; + /** Sensor Setting Property ID */ + uint16_t setting_property_id; +} sensor_get_setting_msg_t; + +/** + * Sensor Setting Set + * Definition of Set Setting message content + */ +typedef struct { + /** Sensor Property ID */ + uint16_t property_id; + /** Sensor Setting Property ID */ + uint16_t setting_property_id; + /** Data length */ + uint16_t setting_raw_len; + /** Raw setting value */ + uint8_t *setting_raw; +} sensor_set_setting_msg_t; + +/** + * Sensor Setting Status + * Definition of Setting State message content sent by sensor server as a reply to Get Setting + */ +struct sensor_setting_status { + /** Device Property Id */ + sensor_property_id_t property_id; + /** Sensor Settings Property ID */ + sensor_setting_property_id_t settings_property_id; + /** Access level */ + sensor_setting_access_t access; + /** Setting raw value */ + uint8_t *setting_raw; +}; +/** + * Sensor Setting Status + */ +typedef struct sensor_setting_status sensor_setting_status_t; + +/** + * Sensor Cadence Get + * Message content definition for Get Cadence request + */ +struct sensor_get_cadence_msg { + /** Sensor Property ID */ + uint16_t property_id; +}; +/** + * Sensor Cadence Get + */ +typedef struct sensor_get_cadence_msg sensor_get_cadence_msg_t; + +/** + * Sensor Cadence Set request + */ +struct sensor_set_cadence_msg { + /** Sensor Property ID */ + uint16_t sensor_property_id; + /** Fast Cadence Period Divisor */ + uint8_t fast_cadence_period_divisor; + /** Status Trigger Type */ + uint8_t status_trigger_type; + /** Length of raw data */ + uint16_t cadence_setting_raw_len; + /** Raw value of multiple variable length fields combined: + * - Status Trigger Delta Down + * - Status Trigger Delta Up + * - Status Min Interval + * - Fast Cadence Low + * - Fast Cadence High + */ + uint8_t *cadence_setting_raw; +}; +/** + * Sensor Cadence Set request + */ +typedef struct sensor_set_cadence_msg sensor_set_cadence_msg_t; + +/** + * Sensor Cadence Status message + */ +typedef struct { + /** Sensor Property ID */ + uint16_t sensor_property_id; + /** Fast Cadence Period Divisor */ + uint8_t fast_cadence_period_divisor; + /** Status Trigger Type */ + uint8_t status_trigger_type; + /** Length of raw data */ + uint16_t cadence_setting_raw_len; + /** Raw value of multiple variable length fields combined: + * - Status Trigger Delta Down + * - Status Trigger Delta Up + * - Status Min Interval + * - Fast Cadence Low + * - Fast Cadence High + */ + uint8_t *cadence_setting_raw; +} sensor_cadence_status_t; + +/** + * Setup Setup Server messages + */ +typedef union sensor_setup_server_msg { + /** Get Settings event */ + sensor_get_settings_msg_t settings_get_msg; + /** Get Setting event */ + sensor_get_setting_msg_t setting_get_msg; + /** Set Setting event */ + sensor_set_setting_msg_t setting_set_msg; + /** Get Cadence event */ + sensor_get_cadence_msg_t cadence_get_msg; + /** Set Cadence event */ + sensor_set_cadence_msg_t cadence_set_msg; + /** Publishing period in milliseconds for publish event to indicate the next approximate event time */ + uint32_t publish_period; +} sensor_setup_server_msg_t; + +/** + * Sensor Client messages + */ +typedef union { + /** Sensor Descriptor Status */ + sensor_descriptor_status_t descriptor_status; + /** Sensor Settings Status */ + sensor_settings_status_t settings_status; + /** Sensor Setting Status */ + sensor_setting_status_t setting_status; + /** Sensor Cadence Status */ + sensor_cadence_status_t cadence_status; + //sensor_status_t status; + //sensor_column_status_t column_status; + //sensor_series_status_t series_status; + /** Publishing period in milliseconds for publish event to indicate the next approximate event time */ + uint32_t publish_period; +} sensor_client_msg_t; + +#endif /* SL_BTMESH_SENSOR_MODEL_CAPI_TYPES_H */ diff --git a/protocol/bluetooth/inc/sl_btmesh_serdeser.h b/protocol/bluetooth/inc/sl_btmesh_serdeser.h new file mode 100644 index 00000000000..ddf0cbb1970 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_serdeser.h @@ -0,0 +1,104 @@ +/***************************************************************************//** + * @file mesh_serdeser.h + * @brief Mesh generic model data serialization/deserialization functions + ******************************************************************************* + * # License + * Copyright 2018 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 MESH_SERDESER_H +#define MESH_SERDESER_H + +/** + * @brief Serialize model state to a byte array + * + * This is a function needed by the helper library; application does not + * need to call it directly. + * + * @param current Current model state + * @param target Target model state + * @param msg_buf Buffer to write serialized state to + * @param msg_len Length of buffer + * @param msg_used Return parameter for storing the length of serialized data + * + * @return Zero for success; SL_STATUS_INVALID_PARAMETER for unknown type + * or incorrect data length + */ +sl_status_t mesh_lib_serialize_state(const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint8_t *msg_buf, + size_t msg_len, + size_t *msg_used); + +/** + * @brief Deserialize model state from a byte array + * + * This is a function needed by the helper library; application does not + * need to call it directly. + * + * @param current Pointer to store current model state + * @param target Pointer to store target model state + * @param has_target Return parameter for storing whether buffer contains + * only current or both current and target state + * @param kind Type of data in buffer + * @param msg_buf Buffer to read serialized state from + * @param msg_len Length of buffer + * + * @return Zero for success; SL_STATUS_INVALID_PARAMETER for unknown type + * or incorrect data length + */ +sl_status_t mesh_lib_deserialize_state(struct mesh_generic_state *current, + struct mesh_generic_state *target, + int *has_target, + mesh_generic_state_t kind, + const uint8_t *msg_buf, + size_t msg_len); + +/** + * @brief Serialize model request to a byte array + * + * This is a function needed by the helper library; application does not + * need to call it directly. + * + * @param req Request structure + * @param msg_buf Buffer to write serialized request to + * @param msg_len Length of buffer + * @param msg_used Return parameter for storing the length of serialized data + * + * @return Zero for success; SL_STATUS_INVALID_PARAMETER for unknown type + * or incorrect data length + */ +sl_status_t mesh_lib_serialize_request(const struct mesh_generic_request *req, + uint8_t *msg_buf, + size_t msg_len, + size_t *msg_used); + +/** + * @brief Deserialize model request from a byte array + * + * This is a function needed by the helper library; application does not + * need to call it directly. + * + * @param req Pointer to store request data + * @param kind Type of data in buffer + * @param msg_buf Buffer to read serialized state from + * @param msg_len Length of buffer + * + * @return Zero for success; SL_STATUS_INVALID_PARAMETER for unknown type + * or incorrect data length + */ +sl_status_t mesh_lib_deserialize_request(struct mesh_generic_request *req, + mesh_generic_request_t kind, + const uint8_t *msg_buf, + size_t msg_len); + +#endif // MESH_SERDESER_H diff --git a/protocol/bluetooth/inc/sl_btmesh_stack_init.h b/protocol/bluetooth/inc/sl_btmesh_stack_init.h new file mode 100644 index 00000000000..2fa989d1db1 --- /dev/null +++ b/protocol/bluetooth/inc/sl_btmesh_stack_init.h @@ -0,0 +1,147 @@ +/***************************************************************************//** + * @brief Initialization APIs for btmesh stack + ******************************************************************************* + * # 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 SL_BTMESH_STACK_INIT_H +#define SL_BTMESH_STACK_INIT_H + +#include "sl_status.h" + +/* Forward declarations of BGAPI class declaration structures */ +struct sli_bgapi_class; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_node_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_node_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_prov_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_prov_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_proxy_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_proxy_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_silabs_config_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_silabs_config_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_vendor_model_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_vendor_model_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_health_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_health_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_health_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_health_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_generic_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_generic_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_generic_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_generic_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_test_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_test_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lpn_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lpn_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_friend_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_friend_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_proxy_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_proxy_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_proxy_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_proxy_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_config_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_config_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_mbt_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_mbt_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_mbt_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_mbt_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_sensor_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_sensor_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_sensor_setup_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_sensor_setup_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_sensor_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_sensor_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_fw_update_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_fw_update_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lc_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lc_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lc_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lc_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lc_setup_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lc_setup_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_scene_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_scene_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_scene_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_scene_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_scene_setup_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_scene_setup_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_scheduler_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_scheduler_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_scheduler_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_scheduler_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_fw_update_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_fw_update_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_time_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_time_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_time_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_time_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_fw_dist_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_fw_dist_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_fw_dist_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_fw_dist_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_remote_provisioning_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_remote_provisioning_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_remote_provisioning_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_remote_provisioning_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_fw_standalone_updater_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_fw_standalone_updater_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_migration_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_migration_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_ncp_fw_list_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_ncp_fw_list_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_sar_config_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_sar_config_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_sar_config_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_sar_config_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_private_beacon_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_private_beacon_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_private_beacon_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_private_beacon_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lcd_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lcd_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lcd_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_lcd_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_on_demand_private_proxy_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_on_demand_private_proxy_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_solicitation_config_client_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_solicitation_config_client_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_on_demand_private_proxy_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_on_demand_private_proxy_server_full; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_silabs_config_server_optimized; +extern const struct sli_bgapi_class sli_bgapi_class_btmesh_silabs_config_server_full; + + +/* Macro to get a pointer to a BGAPI class declaration */ +#ifdef SL_BT_API_FULL +#define SL_BTMESH_BGAPI_CLASS(class_name) &sli_bgapi_class_btmesh_ ## class_name ## _full +#else +#define SL_BTMESH_BGAPI_CLASS(class_name) &sli_bgapi_class_btmesh_ ## class_name ## _optimized +#endif + +/** + * Initialize the BGAPI classes for btmesh stack. + * + * This function is automatically called by code generated by the Universal + * Configurator if the feature is included in the project. The application is + * not expected to call this function directly. + * + * @param[in] classes NULL-terminated array of pointers to class declarations. + * The array must remain valid until the next system reboot. + * + * @return SL_STATUS_OK if the initialization was successful; Other error code + * indicates a failure. + */ +sl_status_t sl_btmesh_init_classes(const struct sli_bgapi_class * const * classes); + +#endif \ No newline at end of file diff --git a/protocol/bluetooth/inc/sli_btmesh_api.h b/protocol/bluetooth/inc/sli_btmesh_api.h new file mode 100644 index 00000000000..86a1d503fcf --- /dev/null +++ b/protocol/bluetooth/inc/sli_btmesh_api.h @@ -0,0 +1,10886 @@ +/***************************************************************************//** + * @brief SL_BT_API library at application layer provided as source code + ******************************************************************************* + * # License + * Copyright 2020 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 SLI_BT_API_H +#define SLI_BT_API_H +#define VERSION no_link_tables + +#include "sl_btmesh_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum sli_btmesh_class_id +{ + sli_btmesh_node_class_id = 0x14, + sli_btmesh_prov_class_id = 0x15, + sli_btmesh_proxy_class_id = 0x18, + sli_btmesh_silabs_config_client_class_id = 0x01, + sli_btmesh_vendor_model_class_id = 0x19, + sli_btmesh_health_client_class_id = 0x1a, + sli_btmesh_health_server_class_id = 0x1b, + sli_btmesh_generic_client_class_id = 0x1e, + sli_btmesh_generic_server_class_id = 0x1f, + sli_btmesh_test_class_id = 0x22, + sli_btmesh_lpn_class_id = 0x23, + sli_btmesh_friend_class_id = 0x24, + sli_btmesh_proxy_client_class_id = 0x25, + sli_btmesh_proxy_server_class_id = 0x26, + sli_btmesh_config_client_class_id = 0x27, + sli_btmesh_mbt_client_class_id = 0x28, + sli_btmesh_mbt_server_class_id = 0x29, + sli_btmesh_sensor_server_class_id = 0x47, + sli_btmesh_sensor_setup_server_class_id = 0x48, + sli_btmesh_sensor_client_class_id = 0x49, + sli_btmesh_fw_update_client_class_id = 0x4a, + sli_btmesh_lc_client_class_id = 0x4C, + sli_btmesh_lc_server_class_id = 0x4D, + sli_btmesh_lc_setup_server_class_id = 0x4E, + sli_btmesh_scene_client_class_id = 0x4F, + sli_btmesh_scene_server_class_id = 0x50, + sli_btmesh_scene_setup_server_class_id = 0x51, + sli_btmesh_scheduler_client_class_id = 0x54, + sli_btmesh_scheduler_server_class_id = 0x55, + sli_btmesh_fw_update_server_class_id = 0x57, + sli_btmesh_time_server_class_id = 0x52, + sli_btmesh_time_client_class_id = 0x53, + sli_btmesh_fw_dist_server_class_id = 0x58, + sli_btmesh_fw_dist_client_class_id = 0x59, + sli_btmesh_remote_provisioning_client_class_id = 0x30, + sli_btmesh_remote_provisioning_server_class_id = 0x31, + sli_btmesh_fw_standalone_updater_class_id = 0x5a, + sli_btmesh_migration_class_id = 0x60, + sli_btmesh_ncp_fw_list_class_id = 0x61, + sli_btmesh_sar_config_client_class_id = 0x62, + sli_btmesh_sar_config_server_class_id = 0x63, + sli_btmesh_private_beacon_client_class_id = 0x64, + sli_btmesh_private_beacon_server_class_id = 0x65, + sli_btmesh_lcd_client_class_id = 0x66, + sli_btmesh_lcd_server_class_id = 0x67, + sli_btmesh_on_demand_private_proxy_client_class_id = 0x68, + sli_btmesh_solicitation_config_client_class_id = 0x69, + sli_btmesh_on_demand_private_proxy_server_class_id = 0x6a, + sli_btmesh_silabs_config_server_class_id = 0x6b, +}; + +enum sli_btmesh_command_id +{ + sli_btmesh_node_init_command_id = 0x00, + sli_btmesh_node_set_exportable_keys_command_id = 0x24, + sli_btmesh_node_start_unprov_beaconing_command_id = 0x01, + sli_btmesh_node_stop_unprov_beaconing_command_id = 0x16, + sli_btmesh_node_get_rssi_command_id = 0x17, + sli_btmesh_node_send_input_oob_request_response_command_id = 0x02, + sli_btmesh_node_get_uuid_command_id = 0x03, + sli_btmesh_node_set_provisioning_data_command_id = 0x04, + sli_btmesh_node_init_oob_command_id = 0x05, + sli_btmesh_node_set_ivrecovery_mode_command_id = 0x06, + sli_btmesh_node_get_ivrecovery_mode_command_id = 0x07, + sli_btmesh_node_get_statistics_command_id = 0x09, + sli_btmesh_node_clear_statistics_command_id = 0x0a, + sli_btmesh_node_set_net_relay_delay_command_id = 0x0b, + sli_btmesh_node_get_net_relay_delay_command_id = 0x0c, + sli_btmesh_node_get_ivupdate_state_command_id = 0x0d, + sli_btmesh_node_request_ivupdate_command_id = 0x0e, + sli_btmesh_node_get_seq_remaining_command_id = 0x0f, + sli_btmesh_node_save_replay_protection_list_command_id = 0x10, + sli_btmesh_node_set_uuid_command_id = 0x11, + sli_btmesh_node_get_replay_protection_list_status_command_id = 0x14, + sli_btmesh_node_get_element_address_command_id = 0x12, + sli_btmesh_node_send_static_oob_request_response_command_id = 0x13, + sli_btmesh_node_reset_command_id = 0x15, + sli_btmesh_node_set_beacon_reporting_command_id = 0x18, + sli_btmesh_node_set_iv_update_age_command_id = 0x19, + sli_btmesh_node_get_key_count_command_id = 0x1a, + sli_btmesh_node_get_key_command_id = 0x1b, + sli_btmesh_node_get_networks_command_id = 0x1c, + sli_btmesh_node_get_element_seqnum_command_id = 0x1d, + sli_btmesh_node_set_model_option_command_id = 0x1e, + sli_btmesh_node_get_local_dcd_command_id = 0x1f, + sli_btmesh_node_power_off_command_id = 0x21, + sli_btmesh_node_set_adv_phy_command_id = 0x22, + sli_btmesh_node_get_adv_phy_command_id = 0x23, + sli_btmesh_node_set_provisioning_algorithms_command_id = 0x25, + sli_btmesh_node_init_provisioning_records_command_id = 0x26, + sli_btmesh_node_set_unprov_beaconing_adv_interval_command_id = 0x28, + sli_btmesh_node_set_proxy_service_adv_interval_command_id = 0x29, + sli_btmesh_node_set_provisioning_service_adv_interval_command_id = 0x30, + sli_btmesh_node_get_local_model_metadata_page_command_id = 0x20, + sli_btmesh_node_save_proxy_solicitation_rpl_command_id = 0x31, + sli_btmesh_node_get_proxy_solicitation_rpl_status_command_id = 0x32, + sli_btmesh_node_set_oob_uri_command_id = 0x33, + sli_btmesh_node_get_oob_uri_command_id = 0x34, + sli_btmesh_prov_init_command_id = 0x00, + sli_btmesh_prov_scan_unprov_beacons_command_id = 0x01, + sli_btmesh_prov_create_provisioning_session_command_id = 0x41, + sli_btmesh_prov_set_provisioning_suspend_event_command_id = 0x42, + sli_btmesh_prov_provision_adv_device_command_id = 0x43, + sli_btmesh_prov_provision_gatt_device_command_id = 0x44, + sli_btmesh_prov_provision_remote_device_command_id = 0x7f, + sli_btmesh_prov_continue_provisioning_command_id = 0x45, + sli_btmesh_prov_abort_provisioning_command_id = 0x47, + sli_btmesh_prov_set_device_address_command_id = 0x46, + sli_btmesh_prov_create_network_command_id = 0x03, + sli_btmesh_prov_create_appkey_command_id = 0x07, + sli_btmesh_prov_send_oob_pkey_response_command_id = 0x08, + sli_btmesh_prov_send_oob_auth_response_command_id = 0x09, + sli_btmesh_prov_set_oob_requirements_command_id = 0x0a, + sli_btmesh_prov_start_key_refresh_command_id = 0x0b, + sli_btmesh_prov_get_key_refresh_exclusion_command_id = 0x0c, + sli_btmesh_prov_set_key_refresh_exclusion_command_id = 0x0d, + sli_btmesh_prov_set_key_refresh_failure_command_id = 0x12, + sli_btmesh_prov_phase_timeout_get_command_id = 0x10, + sli_btmesh_prov_phase_timeout_set_command_id = 0x11, + sli_btmesh_prov_get_ddb_entry_command_id = 0x16, + sli_btmesh_prov_delete_ddb_entry_command_id = 0x17, + sli_btmesh_prov_add_ddb_entry_command_id = 0x18, + sli_btmesh_prov_list_ddb_entries_command_id = 0x19, + sli_btmesh_prov_initialize_network_command_id = 0x37, + sli_btmesh_prov_get_key_refresh_appkey_exclusion_command_id = 0x38, + sli_btmesh_prov_set_key_refresh_appkey_exclusion_command_id = 0x39, + sli_btmesh_prov_stop_scan_unprov_beacons_command_id = 0x3A, + sli_btmesh_prov_update_device_netkey_index_command_id = 0x3b, + sli_btmesh_prov_suspend_key_refresh_command_id = 0x3c, + sli_btmesh_prov_resume_key_refresh_command_id = 0x3d, + sli_btmesh_prov_get_key_refresh_phase_command_id = 0x3e, + sli_btmesh_prov_start_key_refresh_from_phase_command_id = 0x3f, + sli_btmesh_prov_flush_key_refresh_state_command_id = 0x40, + sli_btmesh_prov_test_identity_command_id = 0x48, + sli_btmesh_prov_get_provisioning_records_list_command_id = 0x1c, + sli_btmesh_prov_get_provisioning_record_data_command_id = 0x1d, + sli_btmesh_prov_init_provisioning_records_command_id = 0x1e, + sli_btmesh_proxy_connect_command_id = 0x00, + sli_btmesh_proxy_disconnect_command_id = 0x01, + sli_btmesh_proxy_set_filter_type_command_id = 0x02, + sli_btmesh_proxy_allow_command_id = 0x03, + sli_btmesh_proxy_deny_command_id = 0x04, + sli_btmesh_proxy_optimisation_toggle_command_id = 0x05, + sli_btmesh_proxy_send_solicitation_command_id = 0x06, + sli_btmesh_silabs_config_client_init_command_id = 0x00, + sli_btmesh_silabs_config_client_set_tx_command_id = 0x01, + sli_btmesh_silabs_config_client_get_tx_command_id = 0x02, + sli_btmesh_silabs_config_client_set_model_enable_command_id = 0x03, + sli_btmesh_silabs_config_client_get_model_enable_command_id = 0x04, + sli_btmesh_silabs_config_client_set_network_pdu_command_id = 0x05, + sli_btmesh_silabs_config_client_get_network_pdu_command_id = 0x06, + sli_btmesh_silabs_config_client_deinit_command_id = 0x07, + sli_btmesh_vendor_model_send_command_id = 0x00, + sli_btmesh_vendor_model_set_publication_command_id = 0x01, + sli_btmesh_vendor_model_clear_publication_command_id = 0x02, + sli_btmesh_vendor_model_publish_command_id = 0x03, + sli_btmesh_vendor_model_init_command_id = 0x04, + sli_btmesh_vendor_model_deinit_command_id = 0x05, + sli_btmesh_vendor_model_send_tracked_command_id = 0x06, + sli_btmesh_vendor_model_set_publication_tracked_command_id = 0x07, + sli_btmesh_health_client_init_command_id = 0x07, + sli_btmesh_health_client_deinit_command_id = 0x08, + sli_btmesh_health_client_get_command_id = 0x00, + sli_btmesh_health_client_clear_command_id = 0x01, + sli_btmesh_health_client_test_command_id = 0x02, + sli_btmesh_health_client_get_period_command_id = 0x03, + sli_btmesh_health_client_set_period_command_id = 0x04, + sli_btmesh_health_client_get_attention_command_id = 0x05, + sli_btmesh_health_client_set_attention_command_id = 0x06, + sli_btmesh_health_server_set_fault_command_id = 0x00, + sli_btmesh_health_server_clear_fault_command_id = 0x01, + sli_btmesh_health_server_send_test_response_command_id = 0x02, + sli_btmesh_generic_client_get_command_id = 0x00, + sli_btmesh_generic_client_set_command_id = 0x01, + sli_btmesh_generic_client_publish_command_id = 0x02, + sli_btmesh_generic_client_get_params_command_id = 0x03, + sli_btmesh_generic_client_init_command_id = 0x04, + sli_btmesh_generic_client_init_common_command_id = 0x05, + sli_btmesh_generic_client_init_on_off_command_id = 0x06, + sli_btmesh_generic_client_init_level_command_id = 0x07, + sli_btmesh_generic_client_init_default_transition_time_command_id = 0x08, + sli_btmesh_generic_client_init_power_on_off_command_id = 0x09, + sli_btmesh_generic_client_init_power_level_command_id = 0x0a, + sli_btmesh_generic_client_init_battery_command_id = 0x0b, + sli_btmesh_generic_client_init_location_command_id = 0x0c, + sli_btmesh_generic_client_init_property_command_id = 0x0d, + sli_btmesh_generic_client_init_lightness_command_id = 0x0e, + sli_btmesh_generic_client_init_ctl_command_id = 0x0f, + sli_btmesh_generic_client_init_hsl_command_id = 0x10, + sli_btmesh_generic_server_respond_command_id = 0x00, + sli_btmesh_generic_server_update_command_id = 0x01, + sli_btmesh_generic_server_publish_command_id = 0x02, + sli_btmesh_generic_server_init_command_id = 0x04, + sli_btmesh_generic_server_init_common_command_id = 0x05, + sli_btmesh_generic_server_init_on_off_command_id = 0x06, + sli_btmesh_generic_server_init_level_command_id = 0x07, + sli_btmesh_generic_server_init_default_transition_time_command_id = 0x08, + sli_btmesh_generic_server_init_power_on_off_command_id = 0x09, + sli_btmesh_generic_server_init_power_level_command_id = 0x0a, + sli_btmesh_generic_server_init_battery_command_id = 0x0b, + sli_btmesh_generic_server_init_location_command_id = 0x0c, + sli_btmesh_generic_server_init_property_command_id = 0x0d, + sli_btmesh_generic_server_init_lightness_command_id = 0x0e, + sli_btmesh_generic_server_init_ctl_command_id = 0x0f, + sli_btmesh_generic_server_init_hsl_command_id = 0x10, + sli_btmesh_generic_server_get_cached_state_command_id = 0x11, + sli_btmesh_test_get_nettx_command_id = 0x00, + sli_btmesh_test_set_nettx_command_id = 0x01, + sli_btmesh_test_get_relay_command_id = 0x02, + sli_btmesh_test_set_relay_command_id = 0x03, + sli_btmesh_test_set_adv_scan_params_command_id = 0x4, + sli_btmesh_test_set_ivupdate_test_mode_command_id = 0x05, + sli_btmesh_test_get_ivupdate_test_mode_command_id = 0x06, + sli_btmesh_test_set_segment_send_delay_command_id = 0x07, + sli_btmesh_test_set_ivupdate_state_command_id = 0x08, + sli_btmesh_test_send_beacons_command_id = 0x09, + sli_btmesh_test_bind_local_model_app_command_id = 0x0a, + sli_btmesh_test_unbind_local_model_app_command_id = 0x0b, + sli_btmesh_test_add_local_model_sub_command_id = 0x0c, + sli_btmesh_test_remove_local_model_sub_command_id = 0x0d, + sli_btmesh_test_add_local_model_sub_va_command_id = 0x0e, + sli_btmesh_test_remove_local_model_sub_va_command_id = 0x0f, + sli_btmesh_test_get_local_model_sub_command_id = 0x10, + sli_btmesh_test_set_local_model_pub_command_id = 0x11, + sli_btmesh_test_set_local_model_pub_va_command_id = 0x12, + sli_btmesh_test_get_local_model_pub_command_id = 0x13, + sli_btmesh_test_set_local_heartbeat_subscription_command_id = 0x14, + sli_btmesh_test_get_local_heartbeat_subscription_command_id = 0x15, + sli_btmesh_test_get_local_heartbeat_publication_command_id = 0x16, + sli_btmesh_test_set_local_heartbeat_publication_command_id = 0x17, + sli_btmesh_test_set_local_config_command_id = 0x18, + sli_btmesh_test_get_local_config_command_id = 0x19, + sli_btmesh_test_add_local_key_command_id = 0x1a, + sli_btmesh_test_remove_local_key_command_id = 0x1b, + sli_btmesh_test_update_local_key_command_id = 0x1c, + sli_btmesh_test_set_sar_config_command_id = 0x1d, + sli_btmesh_test_set_adv_bearer_state_command_id = 0x1f, + sli_btmesh_test_prov_get_device_key_command_id = 0x23, + sli_btmesh_test_prov_prepare_key_refresh_command_id = 0x24, + sli_btmesh_test_cancel_segmented_tx_command_id = 0x25, + sli_btmesh_test_set_iv_index_command_id = 0x26, + sli_btmesh_test_set_element_seqnum_command_id = 0x27, + sli_btmesh_test_set_model_option_command_id = 0x28, + sli_btmesh_test_get_local_model_app_bindings_command_id = 0x29, + sli_btmesh_test_get_replay_protection_list_entry_command_id = 0x2a, + sli_btmesh_test_clear_replay_protection_list_entry_command_id = 0x2b, + sli_btmesh_test_set_replay_protection_list_diagnostics_command_id = 0x2c, + sli_btmesh_test_get_model_option_command_id = 0x2d, + sli_btmesh_test_get_default_ttl_command_id = 0x2e, + sli_btmesh_test_set_default_ttl_command_id = 0x2f, + sli_btmesh_test_get_gatt_proxy_command_id = 0x30, + sli_btmesh_test_set_gatt_proxy_command_id = 0x31, + sli_btmesh_test_get_identity_command_id = 0x32, + sli_btmesh_test_set_identity_command_id = 0x33, + sli_btmesh_test_get_friend_command_id = 0x34, + sli_btmesh_test_set_friend_command_id = 0x35, + sli_btmesh_test_get_beacon_command_id = 0x36, + sli_btmesh_test_set_beacon_command_id = 0x37, + sli_btmesh_test_get_private_identity_command_id = 0x38, + sli_btmesh_test_set_private_identity_command_id = 0x39, + sli_btmesh_test_set_adv_provisioning_bearer_timing_command_id = 0x3a, + sli_btmesh_test_update_keyrefresh_phase_command_id = 0x3b, + sli_btmesh_test_send_private_beacons_command_id = 0x3c, + sli_btmesh_test_set_adv_params_command_id = 0x3d, + sli_btmesh_test_set_scan_params_command_id = 0x3e, + sli_btmesh_test_adv_use_random_address_command_id = 0x3f, + sli_btmesh_lpn_init_command_id = 0x00, + sli_btmesh_lpn_deinit_command_id = 0x01, + sli_btmesh_lpn_establish_friendship_command_id = 0x03, + sli_btmesh_lpn_poll_command_id = 0x04, + sli_btmesh_lpn_terminate_friendship_command_id = 0x05, + sli_btmesh_lpn_config_command_id = 0x06, + sli_btmesh_friend_init_command_id = 0x00, + sli_btmesh_friend_deinit_command_id = 0x01, + sli_btmesh_config_client_cancel_request_command_id = 0x00, + sli_btmesh_config_client_get_request_status_command_id = 0x01, + sli_btmesh_config_client_get_default_timeout_command_id = 0x2e, + sli_btmesh_config_client_set_default_timeout_command_id = 0x2f, + sli_btmesh_config_client_add_netkey_command_id = 0x02, + sli_btmesh_config_client_remove_netkey_command_id = 0x03, + sli_btmesh_config_client_list_netkeys_command_id = 0x04, + sli_btmesh_config_client_add_appkey_command_id = 0x05, + sli_btmesh_config_client_remove_appkey_command_id = 0x06, + sli_btmesh_config_client_list_appkeys_command_id = 0x07, + sli_btmesh_config_client_bind_model_command_id = 0x08, + sli_btmesh_config_client_unbind_model_command_id = 0x09, + sli_btmesh_config_client_list_bindings_command_id = 0x0a, + sli_btmesh_config_client_get_model_pub_command_id = 0x0b, + sli_btmesh_config_client_set_model_pub_command_id = 0x0c, + sli_btmesh_config_client_set_model_pub_va_command_id = 0x0d, + sli_btmesh_config_client_add_model_sub_command_id = 0x0e, + sli_btmesh_config_client_add_model_sub_va_command_id = 0x0f, + sli_btmesh_config_client_remove_model_sub_command_id = 0x10, + sli_btmesh_config_client_remove_model_sub_va_command_id = 0x11, + sli_btmesh_config_client_set_model_sub_command_id = 0x12, + sli_btmesh_config_client_set_model_sub_va_command_id = 0x13, + sli_btmesh_config_client_clear_model_sub_command_id = 0x14, + sli_btmesh_config_client_list_subs_command_id = 0x15, + sli_btmesh_config_client_get_heartbeat_pub_command_id = 0x16, + sli_btmesh_config_client_set_heartbeat_pub_command_id = 0x17, + sli_btmesh_config_client_get_heartbeat_sub_command_id = 0x19, + sli_btmesh_config_client_set_heartbeat_sub_command_id = 0x1a, + sli_btmesh_config_client_get_beacon_command_id = 0x1b, + sli_btmesh_config_client_set_beacon_command_id = 0x1c, + sli_btmesh_config_client_get_default_ttl_command_id = 0x1d, + sli_btmesh_config_client_set_default_ttl_command_id = 0x1e, + sli_btmesh_config_client_get_gatt_proxy_command_id = 0x1f, + sli_btmesh_config_client_set_gatt_proxy_command_id = 0x20, + sli_btmesh_config_client_get_relay_command_id = 0x21, + sli_btmesh_config_client_set_relay_command_id = 0x22, + sli_btmesh_config_client_get_network_transmit_command_id = 0x23, + sli_btmesh_config_client_set_network_transmit_command_id = 0x24, + sli_btmesh_config_client_get_identity_command_id = 0x25, + sli_btmesh_config_client_set_identity_command_id = 0x26, + sli_btmesh_config_client_get_friend_command_id = 0x27, + sli_btmesh_config_client_set_friend_command_id = 0x28, + sli_btmesh_config_client_get_key_refresh_phase_command_id = 0x29, + sli_btmesh_config_client_get_lpn_polltimeout_command_id = 0x2b, + sli_btmesh_config_client_get_dcd_command_id = 0x2c, + sli_btmesh_config_client_reset_node_command_id = 0x2d, + sli_btmesh_config_client_set_request_timeout_for_node_command_id = 0x30, + sli_btmesh_mbt_client_init_command_id = 0x09, + sli_btmesh_mbt_client_setup_command_id = 0x00, + sli_btmesh_mbt_client_query_information_command_id = 0x01, + sli_btmesh_mbt_client_get_server_status_command_id = 0x0d, + sli_btmesh_mbt_client_add_server_command_id = 0x0e, + sli_btmesh_mbt_client_start_transfer_command_id = 0x02, + sli_btmesh_mbt_client_start_block_command_id = 0x03, + sli_btmesh_mbt_client_send_chunk_request_rsp_command_id = 0x04, + sli_btmesh_mbt_client_query_block_status_command_id = 0x05, + sli_btmesh_mbt_client_get_status_command_id = 0x06, + sli_btmesh_mbt_client_get_transfer_status_command_id = 0x0a, + sli_btmesh_mbt_client_cancel_transfer_command_id = 0x0b, + sli_btmesh_mbt_client_abort_command_id = 0x0c, + sli_btmesh_mbt_server_init_command_id = 0x02, + sli_btmesh_mbt_server_start_command_id = 0x00, + sli_btmesh_mbt_server_get_transfer_status_command_id = 0x01, + sli_btmesh_mbt_server_transfer_complete_command_id = 0x03, + sli_btmesh_mbt_server_abort_command_id = 0x04, + sli_btmesh_mbt_server_set_pull_mode_parameters_command_id = 0x05, + sli_btmesh_mbt_server_transfer_start_rsp_command_id = 0x06, + sli_btmesh_sensor_server_init_command_id = 0x00, + sli_btmesh_sensor_server_deinit_command_id = 0x01, + sli_btmesh_sensor_server_send_descriptor_status_command_id = 0x02, + sli_btmesh_sensor_server_send_status_command_id = 0x03, + sli_btmesh_sensor_server_send_column_status_command_id = 0x04, + sli_btmesh_sensor_server_send_series_status_command_id = 0x05, + sli_btmesh_sensor_setup_server_send_cadence_status_command_id = 0x00, + sli_btmesh_sensor_setup_server_send_settings_status_command_id = 0x01, + sli_btmesh_sensor_setup_server_send_setting_status_command_id = 0x02, + sli_btmesh_sensor_client_init_command_id = 0x00, + sli_btmesh_sensor_client_deinit_command_id = 0x01, + sli_btmesh_sensor_client_get_descriptor_command_id = 0x02, + sli_btmesh_sensor_client_get_command_id = 0x03, + sli_btmesh_sensor_client_get_column_command_id = 0x04, + sli_btmesh_sensor_client_get_series_command_id = 0x05, + sli_btmesh_sensor_client_get_cadence_command_id = 0x06, + sli_btmesh_sensor_client_set_cadence_command_id = 0x07, + sli_btmesh_sensor_client_get_settings_command_id = 0x08, + sli_btmesh_sensor_client_get_setting_command_id = 0x09, + sli_btmesh_sensor_client_set_setting_command_id = 0x0a, + sli_btmesh_fw_update_client_init_command_id = 0x00, + sli_btmesh_fw_update_client_deinit_command_id = 0x01, + sli_btmesh_fw_update_client_get_info_command_id = 0x08, + sli_btmesh_fw_update_client_get_update_command_id = 0x09, + sli_btmesh_fw_update_client_start_update_command_id = 0x0a, + sli_btmesh_fw_update_client_cancel_update_command_id = 0x0b, + sli_btmesh_fw_update_client_apply_update_command_id = 0x0c, + sli_btmesh_fw_update_client_check_metadata_command_id = 0x0d, + sli_btmesh_lc_client_init_command_id = 0x00, + sli_btmesh_lc_client_get_mode_command_id = 0x01, + sli_btmesh_lc_client_set_mode_command_id = 0x02, + sli_btmesh_lc_client_get_om_command_id = 0x04, + sli_btmesh_lc_client_set_om_command_id = 0x05, + sli_btmesh_lc_client_get_light_onoff_command_id = 0x07, + sli_btmesh_lc_client_set_light_onoff_command_id = 0x08, + sli_btmesh_lc_client_get_property_command_id = 0x09, + sli_btmesh_lc_client_set_property_command_id = 0x0a, + sli_btmesh_lc_server_init_command_id = 0x00, + sli_btmesh_lc_server_deinit_command_id = 0x01, + sli_btmesh_lc_server_update_mode_command_id = 0x02, + sli_btmesh_lc_server_update_om_command_id = 0x03, + sli_btmesh_lc_server_update_light_onoff_command_id = 0x04, + sli_btmesh_lc_server_init_all_properties_command_id = 0x05, + sli_btmesh_lc_server_set_publish_mask_command_id = 0x06, + sli_btmesh_lc_server_set_regulator_interval_command_id = 0x07, + sli_btmesh_lc_server_set_event_mask_command_id = 0x08, + sli_btmesh_lc_server_get_lc_state_command_id = 0x09, + sli_btmesh_lc_setup_server_update_property_command_id = 0x00, + sli_btmesh_scene_client_init_command_id = 0x00, + sli_btmesh_scene_client_get_command_id = 0x01, + sli_btmesh_scene_client_get_register_command_id = 0x02, + sli_btmesh_scene_client_recall_command_id = 0x03, + sli_btmesh_scene_client_store_command_id = 0x04, + sli_btmesh_scene_client_delete_command_id = 0x05, + sli_btmesh_scene_server_init_command_id = 0x00, + sli_btmesh_scene_server_deinit_command_id = 0x01, + sli_btmesh_scene_server_reset_register_command_id = 0x2, + sli_btmesh_scene_server_enable_compact_recall_events_command_id = 0x3, + sli_btmesh_scene_setup_server_init_command_id = 0x00, + sli_btmesh_scheduler_client_init_command_id = 0x00, + sli_btmesh_scheduler_client_deinit_command_id = 0x01, + sli_btmesh_scheduler_client_get_command_id = 0x02, + sli_btmesh_scheduler_client_get_action_command_id = 0x03, + sli_btmesh_scheduler_client_set_action_command_id = 0x04, + sli_btmesh_scheduler_server_init_command_id = 0x00, + sli_btmesh_scheduler_server_deinit_command_id = 0x01, + sli_btmesh_scheduler_server_get_command_id = 0x02, + sli_btmesh_scheduler_server_get_action_command_id = 0x03, + sli_btmesh_scheduler_server_set_action_command_id = 0x04, + sli_btmesh_fw_update_server_init_command_id = 0x00, + sli_btmesh_fw_update_server_deinit_command_id = 0x01, + sli_btmesh_fw_update_server_check_fw_metadata_rsp_command_id = 0x02, + sli_btmesh_fw_update_server_update_start_rsp_command_id = 0x03, + sli_btmesh_fw_update_server_verify_fw_rsp_command_id = 0x04, + sli_btmesh_fw_update_server_distributor_self_update_rsp_command_id = 0x05, + sli_btmesh_time_server_init_command_id = 0x00, + sli_btmesh_time_server_deinit_command_id = 0x01, + sli_btmesh_time_server_get_time_command_id = 0x02, + sli_btmesh_time_server_set_time_command_id = 0x03, + sli_btmesh_time_server_get_time_zone_offset_new_command_id = 0x04, + sli_btmesh_time_server_set_time_zone_offset_new_command_id = 0x05, + sli_btmesh_time_server_get_tai_utc_delta_new_command_id = 0x06, + sli_btmesh_time_server_set_tai_utc_delta_new_command_id = 0x07, + sli_btmesh_time_server_get_time_role_command_id = 0x08, + sli_btmesh_time_server_set_time_role_command_id = 0x09, + sli_btmesh_time_server_get_datetime_command_id = 0x0A, + sli_btmesh_time_server_publish_command_id = 0x0B, + sli_btmesh_time_server_status_command_id = 0x0C, + sli_btmesh_time_client_init_command_id = 0x00, + sli_btmesh_time_client_deinit_command_id = 0x01, + sli_btmesh_time_client_get_time_command_id = 0x02, + sli_btmesh_time_client_set_time_command_id = 0x03, + sli_btmesh_time_client_get_time_zone_command_id = 0x04, + sli_btmesh_time_client_set_time_zone_command_id = 0x05, + sli_btmesh_time_client_get_tai_utc_delta_command_id = 0x06, + sli_btmesh_time_client_set_tai_utc_delta_command_id = 0x07, + sli_btmesh_time_client_get_time_role_command_id = 0x08, + sli_btmesh_time_client_set_time_role_command_id = 0x09, + sli_btmesh_fw_dist_server_init_command_id = 0x00, + sli_btmesh_fw_dist_server_deinit_command_id = 0x01, + sli_btmesh_fw_dist_server_upload_start_rsp_command_id = 0x02, + sli_btmesh_fw_dist_server_execute_distribution_step_command_id = 0x03, + sli_btmesh_fw_dist_server_upload_oob_start_rsp_command_id = 0x08, + sli_btmesh_fw_dist_server_set_upload_oob_metadata_command_id = 0x09, + sli_btmesh_fw_dist_server_set_upload_oob_image_size_command_id = 0x0a, + sli_btmesh_fw_dist_server_set_upload_oob_progress_command_id = 0x0b, + sli_btmesh_fw_dist_server_get_node_status_by_index_command_id = 0x0C, + sli_btmesh_fw_dist_server_get_node_status_by_address_command_id = 0x0D, + sli_btmesh_fw_dist_server_delete_rsp_command_id = 0x0e, + sli_btmesh_fw_dist_server_dist_start_rsp_command_id = 0x13, + sli_btmesh_fw_dist_server_set_multicast_threshold_command_id = 0x14, + sli_btmesh_fw_dist_server_delete_all_rsp_command_id = 0x0f, + sli_btmesh_fw_dist_server_resume_rsp_command_id = 0x10, + sli_btmesh_fw_dist_client_init_command_id = 0x00, + sli_btmesh_fw_dist_client_deinit_command_id = 0x01, + sli_btmesh_fw_dist_client_setup_command_id = 0x02, + sli_btmesh_fw_dist_client_setup_upload_command_id = 0x03, + sli_btmesh_fw_dist_client_set_upload_metadata_command_id = 0x04, + sli_btmesh_fw_dist_client_get_receivers_command_id = 0x0e, + sli_btmesh_fw_dist_client_get_command_id = 0x0d, + sli_btmesh_fw_dist_client_start_distribution_command_id = 0x0f, + sli_btmesh_fw_dist_client_cancel_distribution_command_id = 0x10, + sli_btmesh_fw_dist_client_apply_distribution_command_id = 0x11, + sli_btmesh_fw_dist_client_suspend_distribution_command_id = 0x12, + sli_btmesh_fw_dist_client_add_receivers_command_id = 0x13, + sli_btmesh_fw_dist_client_delete_all_receivers_command_id = 0x14, + sli_btmesh_fw_dist_client_get_capabilities_command_id = 0x15, + sli_btmesh_fw_dist_client_get_upload_command_id = 0x16, + sli_btmesh_fw_dist_client_start_upload_command_id = 0x17, + sli_btmesh_fw_dist_client_cancel_upload_command_id = 0x19, + sli_btmesh_fw_dist_client_get_fw_command_id = 0x1a, + sli_btmesh_fw_dist_client_get_fw_by_index_command_id = 0x1b, + sli_btmesh_fw_dist_client_delete_fw_command_id = 0x1c, + sli_btmesh_fw_dist_client_delete_all_fw_command_id = 0x1d, + sli_btmesh_fw_dist_client_prepare_oob_upload_command_id = 0x1e, + sli_btmesh_fw_dist_client_start_oob_upload_command_id = 0x1f, + sli_btmesh_fw_dist_client_suspend_upload_command_id = 0x20, + sli_btmesh_fw_dist_client_resume_upload_command_id = 0x21, + sli_btmesh_remote_provisioning_client_init_command_id = 0x00, + sli_btmesh_remote_provisioning_client_get_scan_capabilities_command_id = 0x1, + sli_btmesh_remote_provisioning_client_start_scan_command_id = 0x2, + sli_btmesh_remote_provisioning_client_get_scan_status_command_id = 0x3, + sli_btmesh_remote_provisioning_client_stop_scan_command_id = 0x4, + sli_btmesh_remote_provisioning_client_start_extended_scan_command_id = 0x5, + sli_btmesh_remote_provisioning_client_open_link_command_id = 0x6, + sli_btmesh_remote_provisioning_client_get_link_status_command_id = 0x7, + sli_btmesh_remote_provisioning_client_close_link_command_id = 0x8, + sli_btmesh_remote_provisioning_server_init_command_id = 0x00, + sli_btmesh_remote_provisioning_server_open_link_command_id = 0x1, + sli_btmesh_remote_provisioning_server_set_default_bearer_command_id = 0x2, + sli_btmesh_fw_standalone_updater_init_command_id = 0x00, + sli_btmesh_fw_standalone_updater_deinit_command_id = 0x01, + sli_btmesh_fw_standalone_updater_setup_command_id = 0x02, + sli_btmesh_fw_standalone_updater_set_metadata_command_id = 0x03, + sli_btmesh_fw_standalone_updater_set_multicast_threshold_command_id = 0x04, + sli_btmesh_fw_standalone_updater_add_receiver_command_id = 0x05, + sli_btmesh_fw_standalone_updater_delete_all_receivers_command_id = 0x06, + sli_btmesh_fw_standalone_updater_start_command_id = 0x07, + sli_btmesh_fw_standalone_updater_execute_distribution_step_command_id = 0x08, + sli_btmesh_fw_standalone_updater_apply_command_id = 0x09, + sli_btmesh_fw_standalone_updater_get_state_command_id = 0x0a, + sli_btmesh_fw_standalone_updater_get_node_status_by_index_command_id = 0x0b, + sli_btmesh_fw_standalone_updater_get_node_status_by_address_command_id = 0x0c, + sli_btmesh_fw_standalone_updater_cancel_command_id = 0x0d, + sli_btmesh_migration_migrate_keys_command_id = 0x1, + sli_btmesh_migration_migrate_ddb_command_id = 0x2, + sli_btmesh_ncp_fw_list_init_command_id = 0x00, + sli_btmesh_ncp_fw_list_deinit_command_id = 0x01, + sli_btmesh_ncp_fw_list_get_fw_info_by_index_command_id = 0x02, + sli_btmesh_ncp_fw_list_get_fw_metadata_by_index_command_id = 0x03, + sli_btmesh_ncp_fw_list_add_fw_command_id = 0x04, + sli_btmesh_ncp_fw_list_set_fw_metadata_command_id = 0x05, + sli_btmesh_sar_config_client_init_command_id = 0x01, + sli_btmesh_sar_config_client_deinit_command_id = 0x02, + sli_btmesh_sar_config_client_get_sar_transmitter_command_id = 0x03, + sli_btmesh_sar_config_client_set_sar_transmitter_command_id = 0x04, + sli_btmesh_sar_config_client_get_sar_receiver_command_id = 0x05, + sli_btmesh_sar_config_client_set_sar_receiver_command_id = 0x06, + sli_btmesh_sar_config_server_init_command_id = 0x01, + sli_btmesh_sar_config_server_deinit_command_id = 0x02, + sli_btmesh_sar_config_server_get_sar_transmitter_command_id = 0x03, + sli_btmesh_sar_config_server_set_sar_transmitter_command_id = 0x04, + sli_btmesh_sar_config_server_get_sar_receiver_command_id = 0x05, + sli_btmesh_sar_config_server_set_sar_receiver_command_id = 0x06, + sli_btmesh_private_beacon_client_init_command_id = 0x1, + sli_btmesh_private_beacon_client_deinit_command_id = 0x2, + sli_btmesh_private_beacon_client_get_beacon_command_id = 0x3, + sli_btmesh_private_beacon_client_set_beacon_command_id = 0x4, + sli_btmesh_private_beacon_client_get_gatt_proxy_command_id = 0x5, + sli_btmesh_private_beacon_client_set_gatt_proxy_command_id = 0x6, + sli_btmesh_private_beacon_client_get_identity_command_id = 0x7, + sli_btmesh_private_beacon_client_set_identity_command_id = 0x8, + sli_btmesh_private_beacon_server_init_command_id = 0x1, + sli_btmesh_private_beacon_server_deinit_command_id = 0x2, + sli_btmesh_lcd_client_init_command_id = 0x01, + sli_btmesh_lcd_client_deinit_command_id = 0x02, + sli_btmesh_lcd_client_get_composition_data_command_id = 0x03, + sli_btmesh_lcd_client_get_metadata_command_id = 0x04, + sli_btmesh_lcd_server_init_command_id = 0x01, + sli_btmesh_lcd_server_deinit_command_id = 0x02, + sli_btmesh_on_demand_private_proxy_client_init_command_id = 0x01, + sli_btmesh_on_demand_private_proxy_client_deinit_command_id = 0x02, + sli_btmesh_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_command_id = 0x03, + sli_btmesh_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_command_id = 0x04, + sli_btmesh_solicitation_config_client_init_command_id = 0x01, + sli_btmesh_solicitation_config_client_deinit_command_id = 0x02, + sli_btmesh_solicitation_config_client_clear_items_command_id = 0x03, + sli_btmesh_on_demand_private_proxy_server_init_command_id = 0x01, + sli_btmesh_on_demand_private_proxy_server_deinit_command_id = 0x02, + sli_btmesh_silabs_config_server_init_command_id = 0x00, + sli_btmesh_silabs_config_server_deinit_command_id = 0x01, + sli_btmesh_silabs_config_server_set_tx_command_id = 0x02, + sli_btmesh_silabs_config_server_get_tx_command_id = 0x03, + sli_btmesh_silabs_config_server_set_model_enable_command_id = 0x04, + sli_btmesh_silabs_config_server_get_model_enable_command_id = 0x05, + sli_btmesh_silabs_config_server_set_network_pdu_command_id = 0x06, + sli_btmesh_silabs_config_server_get_network_pdu_command_id = 0x07, +}; + +enum sli_btmesh_response_id +{ + sli_btmesh_node_init_response_id = 0x00, + sli_btmesh_node_set_exportable_keys_response_id = 0x24, + sli_btmesh_node_start_unprov_beaconing_response_id = 0x01, + sli_btmesh_node_stop_unprov_beaconing_response_id = 0x16, + sli_btmesh_node_get_rssi_response_id = 0x17, + sli_btmesh_node_send_input_oob_request_response_response_id = 0x02, + sli_btmesh_node_get_uuid_response_id = 0x03, + sli_btmesh_node_set_provisioning_data_response_id = 0x04, + sli_btmesh_node_init_oob_response_id = 0x05, + sli_btmesh_node_set_ivrecovery_mode_response_id = 0x06, + sli_btmesh_node_get_ivrecovery_mode_response_id = 0x07, + sli_btmesh_node_get_statistics_response_id = 0x09, + sli_btmesh_node_clear_statistics_response_id = 0x0a, + sli_btmesh_node_set_net_relay_delay_response_id = 0x0b, + sli_btmesh_node_get_net_relay_delay_response_id = 0x0c, + sli_btmesh_node_get_ivupdate_state_response_id = 0x0d, + sli_btmesh_node_request_ivupdate_response_id = 0x0e, + sli_btmesh_node_get_seq_remaining_response_id = 0x0f, + sli_btmesh_node_save_replay_protection_list_response_id = 0x10, + sli_btmesh_node_set_uuid_response_id = 0x11, + sli_btmesh_node_get_replay_protection_list_status_response_id = 0x14, + sli_btmesh_node_get_element_address_response_id = 0x12, + sli_btmesh_node_send_static_oob_request_response_response_id = 0x13, + sli_btmesh_node_reset_response_id = 0x15, + sli_btmesh_node_set_beacon_reporting_response_id = 0x18, + sli_btmesh_node_set_iv_update_age_response_id = 0x19, + sli_btmesh_node_get_key_count_response_id = 0x1a, + sli_btmesh_node_get_key_response_id = 0x1b, + sli_btmesh_node_get_networks_response_id = 0x1c, + sli_btmesh_node_get_element_seqnum_response_id = 0x1d, + sli_btmesh_node_set_model_option_response_id = 0x1e, + sli_btmesh_node_get_local_dcd_response_id = 0x1f, + sli_btmesh_node_power_off_response_id = 0x21, + sli_btmesh_node_set_adv_phy_response_id = 0x22, + sli_btmesh_node_get_adv_phy_response_id = 0x23, + sli_btmesh_node_set_provisioning_algorithms_response_id = 0x25, + sli_btmesh_node_init_provisioning_records_response_id = 0x26, + sli_btmesh_node_set_unprov_beaconing_adv_interval_response_id = 0x28, + sli_btmesh_node_set_proxy_service_adv_interval_response_id = 0x29, + sli_btmesh_node_set_provisioning_service_adv_interval_response_id = 0x30, + sli_btmesh_node_get_local_model_metadata_page_response_id = 0x20, + sli_btmesh_node_save_proxy_solicitation_rpl_response_id = 0x31, + sli_btmesh_node_get_proxy_solicitation_rpl_status_response_id = 0x32, + sli_btmesh_node_set_oob_uri_response_id = 0x33, + sli_btmesh_node_get_oob_uri_response_id = 0x34, + sli_btmesh_prov_init_response_id = 0x00, + sli_btmesh_prov_scan_unprov_beacons_response_id = 0x01, + sli_btmesh_prov_create_provisioning_session_response_id = 0x41, + sli_btmesh_prov_set_provisioning_suspend_event_response_id = 0x42, + sli_btmesh_prov_provision_adv_device_response_id = 0x43, + sli_btmesh_prov_provision_gatt_device_response_id = 0x44, + sli_btmesh_prov_provision_remote_device_response_id = 0x7f, + sli_btmesh_prov_continue_provisioning_response_id = 0x45, + sli_btmesh_prov_abort_provisioning_response_id = 0x47, + sli_btmesh_prov_set_device_address_response_id = 0x46, + sli_btmesh_prov_create_network_response_id = 0x03, + sli_btmesh_prov_create_appkey_response_id = 0x07, + sli_btmesh_prov_send_oob_pkey_response_response_id = 0x08, + sli_btmesh_prov_send_oob_auth_response_response_id = 0x09, + sli_btmesh_prov_set_oob_requirements_response_id = 0x0a, + sli_btmesh_prov_start_key_refresh_response_id = 0x0b, + sli_btmesh_prov_get_key_refresh_exclusion_response_id = 0x0c, + sli_btmesh_prov_set_key_refresh_exclusion_response_id = 0x0d, + sli_btmesh_prov_set_key_refresh_failure_response_id = 0x12, + sli_btmesh_prov_phase_timeout_get_response_id = 0x10, + sli_btmesh_prov_phase_timeout_set_response_id = 0x11, + sli_btmesh_prov_get_ddb_entry_response_id = 0x16, + sli_btmesh_prov_delete_ddb_entry_response_id = 0x17, + sli_btmesh_prov_add_ddb_entry_response_id = 0x18, + sli_btmesh_prov_list_ddb_entries_response_id = 0x19, + sli_btmesh_prov_initialize_network_response_id = 0x37, + sli_btmesh_prov_get_key_refresh_appkey_exclusion_response_id = 0x38, + sli_btmesh_prov_set_key_refresh_appkey_exclusion_response_id = 0x39, + sli_btmesh_prov_stop_scan_unprov_beacons_response_id = 0x3A, + sli_btmesh_prov_update_device_netkey_index_response_id = 0x3b, + sli_btmesh_prov_suspend_key_refresh_response_id = 0x3c, + sli_btmesh_prov_resume_key_refresh_response_id = 0x3d, + sli_btmesh_prov_get_key_refresh_phase_response_id = 0x3e, + sli_btmesh_prov_start_key_refresh_from_phase_response_id = 0x3f, + sli_btmesh_prov_flush_key_refresh_state_response_id = 0x40, + sli_btmesh_prov_test_identity_response_id = 0x48, + sli_btmesh_prov_get_provisioning_records_list_response_id = 0x1c, + sli_btmesh_prov_get_provisioning_record_data_response_id = 0x1d, + sli_btmesh_prov_init_provisioning_records_response_id = 0x1e, + sli_btmesh_proxy_connect_response_id = 0x00, + sli_btmesh_proxy_disconnect_response_id = 0x01, + sli_btmesh_proxy_set_filter_type_response_id = 0x02, + sli_btmesh_proxy_allow_response_id = 0x03, + sli_btmesh_proxy_deny_response_id = 0x04, + sli_btmesh_proxy_optimisation_toggle_response_id = 0x05, + sli_btmesh_proxy_send_solicitation_response_id = 0x06, + sli_btmesh_silabs_config_client_init_response_id = 0x00, + sli_btmesh_silabs_config_client_set_tx_response_id = 0x01, + sli_btmesh_silabs_config_client_get_tx_response_id = 0x02, + sli_btmesh_silabs_config_client_set_model_enable_response_id = 0x03, + sli_btmesh_silabs_config_client_get_model_enable_response_id = 0x04, + sli_btmesh_silabs_config_client_set_network_pdu_response_id = 0x05, + sli_btmesh_silabs_config_client_get_network_pdu_response_id = 0x06, + sli_btmesh_silabs_config_client_deinit_response_id = 0x07, + sli_btmesh_vendor_model_send_response_id = 0x00, + sli_btmesh_vendor_model_set_publication_response_id = 0x01, + sli_btmesh_vendor_model_clear_publication_response_id = 0x02, + sli_btmesh_vendor_model_publish_response_id = 0x03, + sli_btmesh_vendor_model_init_response_id = 0x04, + sli_btmesh_vendor_model_deinit_response_id = 0x05, + sli_btmesh_vendor_model_send_tracked_response_id = 0x06, + sli_btmesh_vendor_model_set_publication_tracked_response_id = 0x07, + sli_btmesh_health_client_init_response_id = 0x07, + sli_btmesh_health_client_deinit_response_id = 0x08, + sli_btmesh_health_client_get_response_id = 0x00, + sli_btmesh_health_client_clear_response_id = 0x01, + sli_btmesh_health_client_test_response_id = 0x02, + sli_btmesh_health_client_get_period_response_id = 0x03, + sli_btmesh_health_client_set_period_response_id = 0x04, + sli_btmesh_health_client_get_attention_response_id = 0x05, + sli_btmesh_health_client_set_attention_response_id = 0x06, + sli_btmesh_health_server_set_fault_response_id = 0x00, + sli_btmesh_health_server_clear_fault_response_id = 0x01, + sli_btmesh_health_server_send_test_response_response_id = 0x02, + sli_btmesh_generic_client_get_response_id = 0x00, + sli_btmesh_generic_client_set_response_id = 0x01, + sli_btmesh_generic_client_publish_response_id = 0x02, + sli_btmesh_generic_client_get_params_response_id = 0x03, + sli_btmesh_generic_client_init_response_id = 0x04, + sli_btmesh_generic_client_init_common_response_id = 0x05, + sli_btmesh_generic_client_init_on_off_response_id = 0x06, + sli_btmesh_generic_client_init_level_response_id = 0x07, + sli_btmesh_generic_client_init_default_transition_time_response_id = 0x08, + sli_btmesh_generic_client_init_power_on_off_response_id = 0x09, + sli_btmesh_generic_client_init_power_level_response_id = 0x0a, + sli_btmesh_generic_client_init_battery_response_id = 0x0b, + sli_btmesh_generic_client_init_location_response_id = 0x0c, + sli_btmesh_generic_client_init_property_response_id = 0x0d, + sli_btmesh_generic_client_init_lightness_response_id = 0x0e, + sli_btmesh_generic_client_init_ctl_response_id = 0x0f, + sli_btmesh_generic_client_init_hsl_response_id = 0x10, + sli_btmesh_generic_server_respond_response_id = 0x00, + sli_btmesh_generic_server_update_response_id = 0x01, + sli_btmesh_generic_server_publish_response_id = 0x02, + sli_btmesh_generic_server_init_response_id = 0x04, + sli_btmesh_generic_server_init_common_response_id = 0x05, + sli_btmesh_generic_server_init_on_off_response_id = 0x06, + sli_btmesh_generic_server_init_level_response_id = 0x07, + sli_btmesh_generic_server_init_default_transition_time_response_id = 0x08, + sli_btmesh_generic_server_init_power_on_off_response_id = 0x09, + sli_btmesh_generic_server_init_power_level_response_id = 0x0a, + sli_btmesh_generic_server_init_battery_response_id = 0x0b, + sli_btmesh_generic_server_init_location_response_id = 0x0c, + sli_btmesh_generic_server_init_property_response_id = 0x0d, + sli_btmesh_generic_server_init_lightness_response_id = 0x0e, + sli_btmesh_generic_server_init_ctl_response_id = 0x0f, + sli_btmesh_generic_server_init_hsl_response_id = 0x10, + sli_btmesh_generic_server_get_cached_state_response_id = 0x11, + sli_btmesh_test_get_nettx_response_id = 0x00, + sli_btmesh_test_set_nettx_response_id = 0x01, + sli_btmesh_test_get_relay_response_id = 0x02, + sli_btmesh_test_set_relay_response_id = 0x03, + sli_btmesh_test_set_adv_scan_params_response_id = 0x4, + sli_btmesh_test_set_ivupdate_test_mode_response_id = 0x05, + sli_btmesh_test_get_ivupdate_test_mode_response_id = 0x06, + sli_btmesh_test_set_segment_send_delay_response_id = 0x07, + sli_btmesh_test_set_ivupdate_state_response_id = 0x08, + sli_btmesh_test_send_beacons_response_id = 0x09, + sli_btmesh_test_bind_local_model_app_response_id = 0x0a, + sli_btmesh_test_unbind_local_model_app_response_id = 0x0b, + sli_btmesh_test_add_local_model_sub_response_id = 0x0c, + sli_btmesh_test_remove_local_model_sub_response_id = 0x0d, + sli_btmesh_test_add_local_model_sub_va_response_id = 0x0e, + sli_btmesh_test_remove_local_model_sub_va_response_id = 0x0f, + sli_btmesh_test_get_local_model_sub_response_id = 0x10, + sli_btmesh_test_set_local_model_pub_response_id = 0x11, + sli_btmesh_test_set_local_model_pub_va_response_id = 0x12, + sli_btmesh_test_get_local_model_pub_response_id = 0x13, + sli_btmesh_test_set_local_heartbeat_subscription_response_id = 0x14, + sli_btmesh_test_get_local_heartbeat_subscription_response_id = 0x15, + sli_btmesh_test_get_local_heartbeat_publication_response_id = 0x16, + sli_btmesh_test_set_local_heartbeat_publication_response_id = 0x17, + sli_btmesh_test_set_local_config_response_id = 0x18, + sli_btmesh_test_get_local_config_response_id = 0x19, + sli_btmesh_test_add_local_key_response_id = 0x1a, + sli_btmesh_test_remove_local_key_response_id = 0x1b, + sli_btmesh_test_update_local_key_response_id = 0x1c, + sli_btmesh_test_set_sar_config_response_id = 0x1d, + sli_btmesh_test_set_adv_bearer_state_response_id = 0x1f, + sli_btmesh_test_prov_get_device_key_response_id = 0x23, + sli_btmesh_test_prov_prepare_key_refresh_response_id = 0x24, + sli_btmesh_test_cancel_segmented_tx_response_id = 0x25, + sli_btmesh_test_set_iv_index_response_id = 0x26, + sli_btmesh_test_set_element_seqnum_response_id = 0x27, + sli_btmesh_test_set_model_option_response_id = 0x28, + sli_btmesh_test_get_local_model_app_bindings_response_id = 0x29, + sli_btmesh_test_get_replay_protection_list_entry_response_id = 0x2a, + sli_btmesh_test_clear_replay_protection_list_entry_response_id = 0x2b, + sli_btmesh_test_set_replay_protection_list_diagnostics_response_id = 0x2c, + sli_btmesh_test_get_model_option_response_id = 0x2d, + sli_btmesh_test_get_default_ttl_response_id = 0x2e, + sli_btmesh_test_set_default_ttl_response_id = 0x2f, + sli_btmesh_test_get_gatt_proxy_response_id = 0x30, + sli_btmesh_test_set_gatt_proxy_response_id = 0x31, + sli_btmesh_test_get_identity_response_id = 0x32, + sli_btmesh_test_set_identity_response_id = 0x33, + sli_btmesh_test_get_friend_response_id = 0x34, + sli_btmesh_test_set_friend_response_id = 0x35, + sli_btmesh_test_get_beacon_response_id = 0x36, + sli_btmesh_test_set_beacon_response_id = 0x37, + sli_btmesh_test_get_private_identity_response_id = 0x38, + sli_btmesh_test_set_private_identity_response_id = 0x39, + sli_btmesh_test_set_adv_provisioning_bearer_timing_response_id = 0x3a, + sli_btmesh_test_update_keyrefresh_phase_response_id = 0x3b, + sli_btmesh_test_send_private_beacons_response_id = 0x3c, + sli_btmesh_test_set_adv_params_response_id = 0x3d, + sli_btmesh_test_set_scan_params_response_id = 0x3e, + sli_btmesh_test_adv_use_random_address_response_id = 0x3f, + sli_btmesh_lpn_init_response_id = 0x00, + sli_btmesh_lpn_deinit_response_id = 0x01, + sli_btmesh_lpn_establish_friendship_response_id = 0x03, + sli_btmesh_lpn_poll_response_id = 0x04, + sli_btmesh_lpn_terminate_friendship_response_id = 0x05, + sli_btmesh_lpn_config_response_id = 0x06, + sli_btmesh_friend_init_response_id = 0x00, + sli_btmesh_friend_deinit_response_id = 0x01, + sli_btmesh_config_client_cancel_request_response_id = 0x00, + sli_btmesh_config_client_get_request_status_response_id = 0x01, + sli_btmesh_config_client_get_default_timeout_response_id = 0x2e, + sli_btmesh_config_client_set_default_timeout_response_id = 0x2f, + sli_btmesh_config_client_add_netkey_response_id = 0x02, + sli_btmesh_config_client_remove_netkey_response_id = 0x03, + sli_btmesh_config_client_list_netkeys_response_id = 0x04, + sli_btmesh_config_client_add_appkey_response_id = 0x05, + sli_btmesh_config_client_remove_appkey_response_id = 0x06, + sli_btmesh_config_client_list_appkeys_response_id = 0x07, + sli_btmesh_config_client_bind_model_response_id = 0x08, + sli_btmesh_config_client_unbind_model_response_id = 0x09, + sli_btmesh_config_client_list_bindings_response_id = 0x0a, + sli_btmesh_config_client_get_model_pub_response_id = 0x0b, + sli_btmesh_config_client_set_model_pub_response_id = 0x0c, + sli_btmesh_config_client_set_model_pub_va_response_id = 0x0d, + sli_btmesh_config_client_add_model_sub_response_id = 0x0e, + sli_btmesh_config_client_add_model_sub_va_response_id = 0x0f, + sli_btmesh_config_client_remove_model_sub_response_id = 0x10, + sli_btmesh_config_client_remove_model_sub_va_response_id = 0x11, + sli_btmesh_config_client_set_model_sub_response_id = 0x12, + sli_btmesh_config_client_set_model_sub_va_response_id = 0x13, + sli_btmesh_config_client_clear_model_sub_response_id = 0x14, + sli_btmesh_config_client_list_subs_response_id = 0x15, + sli_btmesh_config_client_get_heartbeat_pub_response_id = 0x16, + sli_btmesh_config_client_set_heartbeat_pub_response_id = 0x17, + sli_btmesh_config_client_get_heartbeat_sub_response_id = 0x19, + sli_btmesh_config_client_set_heartbeat_sub_response_id = 0x1a, + sli_btmesh_config_client_get_beacon_response_id = 0x1b, + sli_btmesh_config_client_set_beacon_response_id = 0x1c, + sli_btmesh_config_client_get_default_ttl_response_id = 0x1d, + sli_btmesh_config_client_set_default_ttl_response_id = 0x1e, + sli_btmesh_config_client_get_gatt_proxy_response_id = 0x1f, + sli_btmesh_config_client_set_gatt_proxy_response_id = 0x20, + sli_btmesh_config_client_get_relay_response_id = 0x21, + sli_btmesh_config_client_set_relay_response_id = 0x22, + sli_btmesh_config_client_get_network_transmit_response_id = 0x23, + sli_btmesh_config_client_set_network_transmit_response_id = 0x24, + sli_btmesh_config_client_get_identity_response_id = 0x25, + sli_btmesh_config_client_set_identity_response_id = 0x26, + sli_btmesh_config_client_get_friend_response_id = 0x27, + sli_btmesh_config_client_set_friend_response_id = 0x28, + sli_btmesh_config_client_get_key_refresh_phase_response_id = 0x29, + sli_btmesh_config_client_get_lpn_polltimeout_response_id = 0x2b, + sli_btmesh_config_client_get_dcd_response_id = 0x2c, + sli_btmesh_config_client_reset_node_response_id = 0x2d, + sli_btmesh_config_client_set_request_timeout_for_node_response_id = 0x30, + sli_btmesh_mbt_client_init_response_id = 0x09, + sli_btmesh_mbt_client_setup_response_id = 0x00, + sli_btmesh_mbt_client_query_information_response_id = 0x01, + sli_btmesh_mbt_client_get_server_status_response_id = 0x0d, + sli_btmesh_mbt_client_add_server_response_id = 0x0e, + sli_btmesh_mbt_client_start_transfer_response_id = 0x02, + sli_btmesh_mbt_client_start_block_response_id = 0x03, + sli_btmesh_mbt_client_send_chunk_request_rsp_response_id = 0x04, + sli_btmesh_mbt_client_query_block_status_response_id = 0x05, + sli_btmesh_mbt_client_get_status_response_id = 0x06, + sli_btmesh_mbt_client_get_transfer_status_response_id = 0x0a, + sli_btmesh_mbt_client_cancel_transfer_response_id = 0x0b, + sli_btmesh_mbt_client_abort_response_id = 0x0c, + sli_btmesh_mbt_server_init_response_id = 0x02, + sli_btmesh_mbt_server_start_response_id = 0x00, + sli_btmesh_mbt_server_get_transfer_status_response_id = 0x01, + sli_btmesh_mbt_server_transfer_complete_response_id = 0x03, + sli_btmesh_mbt_server_abort_response_id = 0x04, + sli_btmesh_mbt_server_set_pull_mode_parameters_response_id = 0x05, + sli_btmesh_mbt_server_transfer_start_rsp_response_id = 0x06, + sli_btmesh_sensor_server_init_response_id = 0x00, + sli_btmesh_sensor_server_deinit_response_id = 0x01, + sli_btmesh_sensor_server_send_descriptor_status_response_id = 0x02, + sli_btmesh_sensor_server_send_status_response_id = 0x03, + sli_btmesh_sensor_server_send_column_status_response_id = 0x04, + sli_btmesh_sensor_server_send_series_status_response_id = 0x05, + sli_btmesh_sensor_setup_server_send_cadence_status_response_id = 0x00, + sli_btmesh_sensor_setup_server_send_settings_status_response_id = 0x01, + sli_btmesh_sensor_setup_server_send_setting_status_response_id = 0x02, + sli_btmesh_sensor_client_init_response_id = 0x00, + sli_btmesh_sensor_client_deinit_response_id = 0x01, + sli_btmesh_sensor_client_get_descriptor_response_id = 0x02, + sli_btmesh_sensor_client_get_response_id = 0x03, + sli_btmesh_sensor_client_get_column_response_id = 0x04, + sli_btmesh_sensor_client_get_series_response_id = 0x05, + sli_btmesh_sensor_client_get_cadence_response_id = 0x06, + sli_btmesh_sensor_client_set_cadence_response_id = 0x07, + sli_btmesh_sensor_client_get_settings_response_id = 0x08, + sli_btmesh_sensor_client_get_setting_response_id = 0x09, + sli_btmesh_sensor_client_set_setting_response_id = 0x0a, + sli_btmesh_fw_update_client_init_response_id = 0x00, + sli_btmesh_fw_update_client_deinit_response_id = 0x01, + sli_btmesh_fw_update_client_get_info_response_id = 0x08, + sli_btmesh_fw_update_client_get_update_response_id = 0x09, + sli_btmesh_fw_update_client_start_update_response_id = 0x0a, + sli_btmesh_fw_update_client_cancel_update_response_id = 0x0b, + sli_btmesh_fw_update_client_apply_update_response_id = 0x0c, + sli_btmesh_fw_update_client_check_metadata_response_id = 0x0d, + sli_btmesh_lc_client_init_response_id = 0x00, + sli_btmesh_lc_client_get_mode_response_id = 0x01, + sli_btmesh_lc_client_set_mode_response_id = 0x02, + sli_btmesh_lc_client_get_om_response_id = 0x04, + sli_btmesh_lc_client_set_om_response_id = 0x05, + sli_btmesh_lc_client_get_light_onoff_response_id = 0x07, + sli_btmesh_lc_client_set_light_onoff_response_id = 0x08, + sli_btmesh_lc_client_get_property_response_id = 0x09, + sli_btmesh_lc_client_set_property_response_id = 0x0a, + sli_btmesh_lc_server_init_response_id = 0x00, + sli_btmesh_lc_server_deinit_response_id = 0x01, + sli_btmesh_lc_server_update_mode_response_id = 0x02, + sli_btmesh_lc_server_update_om_response_id = 0x03, + sli_btmesh_lc_server_update_light_onoff_response_id = 0x04, + sli_btmesh_lc_server_init_all_properties_response_id = 0x05, + sli_btmesh_lc_server_set_publish_mask_response_id = 0x06, + sli_btmesh_lc_server_set_regulator_interval_response_id = 0x07, + sli_btmesh_lc_server_set_event_mask_response_id = 0x08, + sli_btmesh_lc_server_get_lc_state_response_id = 0x09, + sli_btmesh_lc_setup_server_update_property_response_id = 0x00, + sli_btmesh_scene_client_init_response_id = 0x00, + sli_btmesh_scene_client_get_response_id = 0x01, + sli_btmesh_scene_client_get_register_response_id = 0x02, + sli_btmesh_scene_client_recall_response_id = 0x03, + sli_btmesh_scene_client_store_response_id = 0x04, + sli_btmesh_scene_client_delete_response_id = 0x05, + sli_btmesh_scene_server_init_response_id = 0x00, + sli_btmesh_scene_server_deinit_response_id = 0x01, + sli_btmesh_scene_server_reset_register_response_id = 0x2, + sli_btmesh_scene_server_enable_compact_recall_events_response_id = 0x3, + sli_btmesh_scene_setup_server_init_response_id = 0x00, + sli_btmesh_scheduler_client_init_response_id = 0x00, + sli_btmesh_scheduler_client_deinit_response_id = 0x01, + sli_btmesh_scheduler_client_get_response_id = 0x02, + sli_btmesh_scheduler_client_get_action_response_id = 0x03, + sli_btmesh_scheduler_client_set_action_response_id = 0x04, + sli_btmesh_scheduler_server_init_response_id = 0x00, + sli_btmesh_scheduler_server_deinit_response_id = 0x01, + sli_btmesh_scheduler_server_get_response_id = 0x02, + sli_btmesh_scheduler_server_get_action_response_id = 0x03, + sli_btmesh_scheduler_server_set_action_response_id = 0x04, + sli_btmesh_fw_update_server_init_response_id = 0x00, + sli_btmesh_fw_update_server_deinit_response_id = 0x01, + sli_btmesh_fw_update_server_check_fw_metadata_rsp_response_id = 0x02, + sli_btmesh_fw_update_server_update_start_rsp_response_id = 0x03, + sli_btmesh_fw_update_server_verify_fw_rsp_response_id = 0x04, + sli_btmesh_fw_update_server_distributor_self_update_rsp_response_id = 0x05, + sli_btmesh_time_server_init_response_id = 0x00, + sli_btmesh_time_server_deinit_response_id = 0x01, + sli_btmesh_time_server_get_time_response_id = 0x02, + sli_btmesh_time_server_set_time_response_id = 0x03, + sli_btmesh_time_server_get_time_zone_offset_new_response_id = 0x04, + sli_btmesh_time_server_set_time_zone_offset_new_response_id = 0x05, + sli_btmesh_time_server_get_tai_utc_delta_new_response_id = 0x06, + sli_btmesh_time_server_set_tai_utc_delta_new_response_id = 0x07, + sli_btmesh_time_server_get_time_role_response_id = 0x08, + sli_btmesh_time_server_set_time_role_response_id = 0x09, + sli_btmesh_time_server_get_datetime_response_id = 0x0A, + sli_btmesh_time_server_publish_response_id = 0x0B, + sli_btmesh_time_server_status_response_id = 0x0C, + sli_btmesh_time_client_init_response_id = 0x00, + sli_btmesh_time_client_deinit_response_id = 0x01, + sli_btmesh_time_client_get_time_response_id = 0x02, + sli_btmesh_time_client_set_time_response_id = 0x03, + sli_btmesh_time_client_get_time_zone_response_id = 0x04, + sli_btmesh_time_client_set_time_zone_response_id = 0x05, + sli_btmesh_time_client_get_tai_utc_delta_response_id = 0x06, + sli_btmesh_time_client_set_tai_utc_delta_response_id = 0x07, + sli_btmesh_time_client_get_time_role_response_id = 0x08, + sli_btmesh_time_client_set_time_role_response_id = 0x09, + sli_btmesh_fw_dist_server_init_response_id = 0x00, + sli_btmesh_fw_dist_server_deinit_response_id = 0x01, + sli_btmesh_fw_dist_server_upload_start_rsp_response_id = 0x02, + sli_btmesh_fw_dist_server_execute_distribution_step_response_id = 0x03, + sli_btmesh_fw_dist_server_upload_oob_start_rsp_response_id = 0x08, + sli_btmesh_fw_dist_server_set_upload_oob_metadata_response_id = 0x09, + sli_btmesh_fw_dist_server_set_upload_oob_image_size_response_id = 0x0a, + sli_btmesh_fw_dist_server_set_upload_oob_progress_response_id = 0x0b, + sli_btmesh_fw_dist_server_get_node_status_by_index_response_id = 0x0C, + sli_btmesh_fw_dist_server_get_node_status_by_address_response_id = 0x0D, + sli_btmesh_fw_dist_server_delete_rsp_response_id = 0x0e, + sli_btmesh_fw_dist_server_dist_start_rsp_response_id = 0x13, + sli_btmesh_fw_dist_server_set_multicast_threshold_response_id = 0x14, + sli_btmesh_fw_dist_server_delete_all_rsp_response_id = 0x0f, + sli_btmesh_fw_dist_server_resume_rsp_response_id = 0x10, + sli_btmesh_fw_dist_client_init_response_id = 0x00, + sli_btmesh_fw_dist_client_deinit_response_id = 0x01, + sli_btmesh_fw_dist_client_setup_response_id = 0x02, + sli_btmesh_fw_dist_client_setup_upload_response_id = 0x03, + sli_btmesh_fw_dist_client_set_upload_metadata_response_id = 0x04, + sli_btmesh_fw_dist_client_get_receivers_response_id = 0x0e, + sli_btmesh_fw_dist_client_get_response_id = 0x0d, + sli_btmesh_fw_dist_client_start_distribution_response_id = 0x0f, + sli_btmesh_fw_dist_client_cancel_distribution_response_id = 0x10, + sli_btmesh_fw_dist_client_apply_distribution_response_id = 0x11, + sli_btmesh_fw_dist_client_suspend_distribution_response_id = 0x12, + sli_btmesh_fw_dist_client_add_receivers_response_id = 0x13, + sli_btmesh_fw_dist_client_delete_all_receivers_response_id = 0x14, + sli_btmesh_fw_dist_client_get_capabilities_response_id = 0x15, + sli_btmesh_fw_dist_client_get_upload_response_id = 0x16, + sli_btmesh_fw_dist_client_start_upload_response_id = 0x17, + sli_btmesh_fw_dist_client_cancel_upload_response_id = 0x19, + sli_btmesh_fw_dist_client_get_fw_response_id = 0x1a, + sli_btmesh_fw_dist_client_get_fw_by_index_response_id = 0x1b, + sli_btmesh_fw_dist_client_delete_fw_response_id = 0x1c, + sli_btmesh_fw_dist_client_delete_all_fw_response_id = 0x1d, + sli_btmesh_fw_dist_client_prepare_oob_upload_response_id = 0x1e, + sli_btmesh_fw_dist_client_start_oob_upload_response_id = 0x1f, + sli_btmesh_fw_dist_client_suspend_upload_response_id = 0x20, + sli_btmesh_fw_dist_client_resume_upload_response_id = 0x21, + sli_btmesh_remote_provisioning_client_init_response_id = 0x00, + sli_btmesh_remote_provisioning_client_get_scan_capabilities_response_id = 0x1, + sli_btmesh_remote_provisioning_client_start_scan_response_id = 0x2, + sli_btmesh_remote_provisioning_client_get_scan_status_response_id = 0x3, + sli_btmesh_remote_provisioning_client_stop_scan_response_id = 0x4, + sli_btmesh_remote_provisioning_client_start_extended_scan_response_id = 0x5, + sli_btmesh_remote_provisioning_client_open_link_response_id = 0x6, + sli_btmesh_remote_provisioning_client_get_link_status_response_id = 0x7, + sli_btmesh_remote_provisioning_client_close_link_response_id = 0x8, + sli_btmesh_remote_provisioning_server_init_response_id = 0x00, + sli_btmesh_remote_provisioning_server_open_link_response_id = 0x1, + sli_btmesh_remote_provisioning_server_set_default_bearer_response_id = 0x2, + sli_btmesh_fw_standalone_updater_init_response_id = 0x00, + sli_btmesh_fw_standalone_updater_deinit_response_id = 0x01, + sli_btmesh_fw_standalone_updater_setup_response_id = 0x02, + sli_btmesh_fw_standalone_updater_set_metadata_response_id = 0x03, + sli_btmesh_fw_standalone_updater_set_multicast_threshold_response_id = 0x04, + sli_btmesh_fw_standalone_updater_add_receiver_response_id = 0x05, + sli_btmesh_fw_standalone_updater_delete_all_receivers_response_id = 0x06, + sli_btmesh_fw_standalone_updater_start_response_id = 0x07, + sli_btmesh_fw_standalone_updater_execute_distribution_step_response_id = 0x08, + sli_btmesh_fw_standalone_updater_apply_response_id = 0x09, + sli_btmesh_fw_standalone_updater_get_state_response_id = 0x0a, + sli_btmesh_fw_standalone_updater_get_node_status_by_index_response_id = 0x0b, + sli_btmesh_fw_standalone_updater_get_node_status_by_address_response_id = 0x0c, + sli_btmesh_fw_standalone_updater_cancel_response_id = 0x0d, + sli_btmesh_migration_migrate_keys_response_id = 0x1, + sli_btmesh_migration_migrate_ddb_response_id = 0x2, + sli_btmesh_ncp_fw_list_init_response_id = 0x00, + sli_btmesh_ncp_fw_list_deinit_response_id = 0x01, + sli_btmesh_ncp_fw_list_get_fw_info_by_index_response_id = 0x02, + sli_btmesh_ncp_fw_list_get_fw_metadata_by_index_response_id = 0x03, + sli_btmesh_ncp_fw_list_add_fw_response_id = 0x04, + sli_btmesh_ncp_fw_list_set_fw_metadata_response_id = 0x05, + sli_btmesh_sar_config_client_init_response_id = 0x01, + sli_btmesh_sar_config_client_deinit_response_id = 0x02, + sli_btmesh_sar_config_client_get_sar_transmitter_response_id = 0x03, + sli_btmesh_sar_config_client_set_sar_transmitter_response_id = 0x04, + sli_btmesh_sar_config_client_get_sar_receiver_response_id = 0x05, + sli_btmesh_sar_config_client_set_sar_receiver_response_id = 0x06, + sli_btmesh_sar_config_server_init_response_id = 0x01, + sli_btmesh_sar_config_server_deinit_response_id = 0x02, + sli_btmesh_sar_config_server_get_sar_transmitter_response_id = 0x03, + sli_btmesh_sar_config_server_set_sar_transmitter_response_id = 0x04, + sli_btmesh_sar_config_server_get_sar_receiver_response_id = 0x05, + sli_btmesh_sar_config_server_set_sar_receiver_response_id = 0x06, + sli_btmesh_private_beacon_client_init_response_id = 0x1, + sli_btmesh_private_beacon_client_deinit_response_id = 0x2, + sli_btmesh_private_beacon_client_get_beacon_response_id = 0x3, + sli_btmesh_private_beacon_client_set_beacon_response_id = 0x4, + sli_btmesh_private_beacon_client_get_gatt_proxy_response_id = 0x5, + sli_btmesh_private_beacon_client_set_gatt_proxy_response_id = 0x6, + sli_btmesh_private_beacon_client_get_identity_response_id = 0x7, + sli_btmesh_private_beacon_client_set_identity_response_id = 0x8, + sli_btmesh_private_beacon_server_init_response_id = 0x1, + sli_btmesh_private_beacon_server_deinit_response_id = 0x2, + sli_btmesh_lcd_client_init_response_id = 0x01, + sli_btmesh_lcd_client_deinit_response_id = 0x02, + sli_btmesh_lcd_client_get_composition_data_response_id = 0x03, + sli_btmesh_lcd_client_get_metadata_response_id = 0x04, + sli_btmesh_lcd_server_init_response_id = 0x01, + sli_btmesh_lcd_server_deinit_response_id = 0x02, + sli_btmesh_on_demand_private_proxy_client_init_response_id = 0x01, + sli_btmesh_on_demand_private_proxy_client_deinit_response_id = 0x02, + sli_btmesh_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_response_id = 0x03, + sli_btmesh_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_response_id = 0x04, + sli_btmesh_solicitation_config_client_init_response_id = 0x01, + sli_btmesh_solicitation_config_client_deinit_response_id = 0x02, + sli_btmesh_solicitation_config_client_clear_items_response_id = 0x03, + sli_btmesh_on_demand_private_proxy_server_init_response_id = 0x01, + sli_btmesh_on_demand_private_proxy_server_deinit_response_id = 0x02, + sli_btmesh_silabs_config_server_init_response_id = 0x00, + sli_btmesh_silabs_config_server_deinit_response_id = 0x01, + sli_btmesh_silabs_config_server_set_tx_response_id = 0x02, + sli_btmesh_silabs_config_server_get_tx_response_id = 0x03, + sli_btmesh_silabs_config_server_set_model_enable_response_id = 0x04, + sli_btmesh_silabs_config_server_get_model_enable_response_id = 0x05, + sli_btmesh_silabs_config_server_set_network_pdu_response_id = 0x06, + sli_btmesh_silabs_config_server_get_network_pdu_response_id = 0x07, +}; + +enum sli_btmesh_event_id +{ + sli_btmesh_node_initialized_event_id = 0x00, + sli_btmesh_node_provisioned_event_id = 0x01, + sli_btmesh_node_config_get_event_id = 0x02, + sli_btmesh_node_config_set_event_id = 0x03, + sli_btmesh_node_display_output_oob_event_id = 0x04, + sli_btmesh_node_input_oob_request_event_id = 0x05, + sli_btmesh_node_provisioning_started_event_id = 0x06, + sli_btmesh_node_provisioning_failed_event_id = 0x07, + sli_btmesh_node_key_added_event_id = 0x08, + sli_btmesh_node_model_config_changed_event_id = 0x09, + sli_btmesh_node_reset_event_id = 0x0a, + sli_btmesh_node_ivrecovery_needed_event_id = 0x0b, + sli_btmesh_node_changed_ivupdate_state_event_id = 0x0c, + sli_btmesh_node_static_oob_request_event_id = 0x0d, + sli_btmesh_node_key_removed_event_id = 0x0e, + sli_btmesh_node_key_updated_event_id = 0x0f, + sli_btmesh_node_heartbeat_event_id = 0x10, + sli_btmesh_node_heartbeat_start_event_id = 0x11, + sli_btmesh_node_heartbeat_stop_event_id = 0x12, + sli_btmesh_node_beacon_received_event_id = 0x13, + sli_btmesh_node_local_dcd_data_event_id = 0x14, + sli_btmesh_node_local_dcd_data_end_event_id = 0x15, + sli_btmesh_node_local_model_metadata_page_event_id = 0x19, + sli_btmesh_node_local_model_metadata_page_end_event_id = 0x1a, + sli_btmesh_node_start_received_event_id = 0x16, + sli_btmesh_node_address_updated_event_id = 0x17, + sli_btmesh_node_dcd_updated_event_id = 0x18, + sli_btmesh_prov_initialized_event_id = 0x00, + sli_btmesh_prov_provisioning_suspended_event_id = 0x18, + sli_btmesh_prov_capabilities_event_id = 0x17, + sli_btmesh_prov_provisioning_failed_event_id = 0x01, + sli_btmesh_prov_device_provisioned_event_id = 0x02, + sli_btmesh_prov_unprov_beacon_event_id = 0x03, + sli_btmesh_prov_oob_pkey_request_event_id = 0x06, + sli_btmesh_prov_oob_auth_request_event_id = 0x07, + sli_btmesh_prov_oob_display_input_event_id = 0x08, + sli_btmesh_prov_ddb_list_event_id = 0x09, + sli_btmesh_prov_uri_event_id = 0x0d, + sli_btmesh_prov_key_refresh_phase_update_event_id = 0x14, + sli_btmesh_prov_key_refresh_node_update_event_id = 0x15, + sli_btmesh_prov_key_refresh_complete_event_id = 0x16, + sli_btmesh_prov_add_ddb_entry_complete_event_id = 0x19, + sli_btmesh_prov_delete_ddb_entry_complete_event_id = 0x1a, + sli_btmesh_prov_initialization_failed_event_id = 0x1b, + sli_btmesh_prov_provisioning_records_list_event_id = 0x1c, + sli_btmesh_prov_provisioning_record_data_event_id = 0x1d, + sli_btmesh_prov_start_sent_event_id = 0x1e, + sli_btmesh_proxy_connected_event_id = 0x00, + sli_btmesh_proxy_disconnected_event_id = 0x01, + sli_btmesh_proxy_filter_status_event_id = 0x02, + sli_btmesh_silabs_config_client_tx_status_event_id = 0x01, + sli_btmesh_silabs_config_client_model_status_event_id = 0x02, + sli_btmesh_silabs_config_client_network_pdu_status_event_id = 0x03, + sli_btmesh_vendor_model_receive_event_id = 0x00, + sli_btmesh_vendor_model_send_complete_event_id = 0x01, + sli_btmesh_health_client_server_status_event_id = 0x00, + sli_btmesh_health_client_server_status_period_event_id = 0x01, + sli_btmesh_health_client_server_status_attention_event_id = 0x02, + sli_btmesh_health_server_attention_event_id = 0x00, + sli_btmesh_health_server_test_request_event_id = 0x01, + sli_btmesh_generic_client_server_status_event_id = 0x00, + sli_btmesh_generic_server_client_request_event_id = 0x00, + sli_btmesh_generic_server_state_changed_event_id = 0x01, + sli_btmesh_generic_server_state_recall_event_id = 0x02, + sli_btmesh_test_local_heartbeat_subscription_complete_event_id = 0x00, + sli_btmesh_test_replay_protection_list_entry_set_event_id = 0x01, + sli_btmesh_test_replay_protection_list_entry_cleared_event_id = 0x02, + sli_btmesh_test_replay_protection_list_saved_event_id = 0x03, + sli_btmesh_test_replay_protection_list_full_event_id = 0x04, + sli_btmesh_lpn_friendship_established_event_id = 0x00, + sli_btmesh_lpn_friendship_failed_event_id = 0x01, + sli_btmesh_lpn_friendship_terminated_event_id = 0x02, + sli_btmesh_friend_friendship_established_event_id = 0x00, + sli_btmesh_friend_friendship_terminated_event_id = 0x01, + sli_btmesh_config_client_request_modified_event_id = 0x00, + sli_btmesh_config_client_netkey_status_event_id = 0x01, + sli_btmesh_config_client_netkey_list_event_id = 0x02, + sli_btmesh_config_client_netkey_list_end_event_id = 0x03, + sli_btmesh_config_client_appkey_status_event_id = 0x04, + sli_btmesh_config_client_appkey_list_event_id = 0x05, + sli_btmesh_config_client_appkey_list_end_event_id = 0x06, + sli_btmesh_config_client_binding_status_event_id = 0x07, + sli_btmesh_config_client_bindings_list_event_id = 0x08, + sli_btmesh_config_client_bindings_list_end_event_id = 0x09, + sli_btmesh_config_client_model_pub_status_event_id = 0x0a, + sli_btmesh_config_client_model_sub_status_event_id = 0x0b, + sli_btmesh_config_client_subs_list_event_id = 0x0c, + sli_btmesh_config_client_subs_list_end_event_id = 0x0d, + sli_btmesh_config_client_heartbeat_pub_status_event_id = 0x0e, + sli_btmesh_config_client_heartbeat_sub_status_event_id = 0x0f, + sli_btmesh_config_client_beacon_status_event_id = 0x10, + sli_btmesh_config_client_default_ttl_status_event_id = 0x11, + sli_btmesh_config_client_gatt_proxy_status_event_id = 0x12, + sli_btmesh_config_client_relay_status_event_id = 0x13, + sli_btmesh_config_client_network_transmit_status_event_id = 0x14, + sli_btmesh_config_client_identity_status_event_id = 0x15, + sli_btmesh_config_client_friend_status_event_id = 0x16, + sli_btmesh_config_client_key_refresh_phase_status_event_id = 0x17, + sli_btmesh_config_client_lpn_polltimeout_status_event_id = 0x18, + sli_btmesh_config_client_dcd_data_event_id = 0x19, + sli_btmesh_config_client_dcd_data_end_event_id = 0x1a, + sli_btmesh_config_client_reset_status_event_id = 0x1b, + sli_btmesh_config_client_obo_ack_received_event_id = 0x1c, + sli_btmesh_mbt_client_server_information_status_event_id = 0x00, + sli_btmesh_mbt_client_query_information_complete_event_id = 0x04, + sli_btmesh_mbt_client_server_transfer_status_event_id = 0x01, + sli_btmesh_mbt_client_start_transfer_complete_event_id = 0x05, + sli_btmesh_mbt_client_server_block_status_event_id = 0x03, + sli_btmesh_mbt_client_start_block_complete_event_id = 0x06, + sli_btmesh_mbt_client_send_chunk_request_event_id = 0x07, + sli_btmesh_mbt_client_server_partial_block_report_event_id = 0x0c, + sli_btmesh_mbt_client_send_chunks_complete_event_id = 0x08, + sli_btmesh_mbt_client_query_block_status_complete_event_id = 0x09, + sli_btmesh_mbt_client_tx_complete_event_id = 0x0a, + sli_btmesh_mbt_client_server_failed_event_id = 0x0b, + sli_btmesh_mbt_client_transfer_complete_event_id = 0x0d, + sli_btmesh_mbt_server_state_changed_event_id = 0x06, + sli_btmesh_mbt_server_transfer_start_req_event_id = 0x00, + sli_btmesh_mbt_server_block_start_event_id = 0x01, + sli_btmesh_mbt_server_chunk_event_id = 0x03, + sli_btmesh_mbt_server_block_complete_event_id = 0x04, + sli_btmesh_mbt_server_transfer_cancel_event_id = 0x07, + sli_btmesh_mbt_server_partial_block_report_tx_complete_event_id = 0x08, + sli_btmesh_sensor_server_get_request_event_id = 0x01, + sli_btmesh_sensor_server_get_column_request_event_id = 0x02, + sli_btmesh_sensor_server_get_series_request_event_id = 0x03, + sli_btmesh_sensor_server_publish_event_id = 0x04, + sli_btmesh_sensor_setup_server_get_cadence_request_event_id = 0x00, + sli_btmesh_sensor_setup_server_set_cadence_request_event_id = 0x01, + sli_btmesh_sensor_setup_server_get_settings_request_event_id = 0x02, + sli_btmesh_sensor_setup_server_get_setting_request_event_id = 0x03, + sli_btmesh_sensor_setup_server_set_setting_request_event_id = 0x04, + sli_btmesh_sensor_setup_server_publish_event_id = 0x05, + sli_btmesh_sensor_client_descriptor_status_event_id = 0x00, + sli_btmesh_sensor_client_cadence_status_event_id = 0x01, + sli_btmesh_sensor_client_settings_status_event_id = 0x02, + sli_btmesh_sensor_client_setting_status_event_id = 0x03, + sli_btmesh_sensor_client_status_event_id = 0x04, + sli_btmesh_sensor_client_column_status_event_id = 0x05, + sli_btmesh_sensor_client_series_status_event_id = 0x06, + sli_btmesh_sensor_client_publish_event_id = 0x07, + sli_btmesh_fw_update_client_info_status_current_fwid_event_id = 0x00, + sli_btmesh_fw_update_client_info_status_update_uri_event_id = 0x01, + sli_btmesh_fw_update_client_update_status_event_id = 0x02, + sli_btmesh_fw_update_client_metadata_status_event_id = 0x0a, + sli_btmesh_lc_client_mode_status_event_id = 0x00, + sli_btmesh_lc_client_om_status_event_id = 0x01, + sli_btmesh_lc_client_light_onoff_status_event_id = 0x02, + sli_btmesh_lc_client_property_status_event_id = 0x03, + sli_btmesh_lc_server_mode_updated_event_id = 0x00, + sli_btmesh_lc_server_om_updated_event_id = 0x01, + sli_btmesh_lc_server_light_onoff_updated_event_id = 0x02, + sli_btmesh_lc_server_occupancy_updated_event_id = 0x03, + sli_btmesh_lc_server_ambient_lux_level_updated_event_id = 0x04, + sli_btmesh_lc_server_linear_output_updated_event_id = 0x05, + sli_btmesh_lc_server_state_updated_event_id = 0x06, + sli_btmesh_lc_server_regulator_debug_info_event_id = 0x07, + sli_btmesh_lc_setup_server_set_property_event_id = 0x00, + sli_btmesh_scene_client_status_event_id = 0x00, + sli_btmesh_scene_client_register_status_event_id = 0x01, + sli_btmesh_scene_server_get_event_id = 0x01, + sli_btmesh_scene_server_register_get_event_id = 0x02, + sli_btmesh_scene_server_recall_event_id = 0x03, + sli_btmesh_scene_server_publish_event_id = 0x04, + sli_btmesh_scene_server_compact_recall_event_id = 0x05, + sli_btmesh_scene_setup_server_store_event_id = 0x00, + sli_btmesh_scene_setup_server_delete_event_id = 0x01, + sli_btmesh_scene_setup_server_publish_event_id = 0x02, + sli_btmesh_scheduler_client_status_event_id = 0x00, + sli_btmesh_scheduler_client_action_status_event_id = 0x01, + sli_btmesh_scheduler_server_action_changed_event_id = 0x01, + sli_btmesh_scheduler_server_scene_changed_event_id = 0x02, + sli_btmesh_scheduler_server_action_triggered_event_id = 0x03, + sli_btmesh_fw_update_server_check_fw_metadata_req_event_id = 0x00, + sli_btmesh_fw_update_server_update_start_req_event_id = 0x03, + sli_btmesh_fw_update_server_verify_fw_req_event_id = 0x04, + sli_btmesh_fw_update_server_apply_event_id = 0x05, + sli_btmesh_fw_update_server_update_cancelled_event_id = 0x06, + sli_btmesh_fw_update_server_distributor_self_update_req_event_id = 0x07, + sli_btmesh_time_server_time_updated_event_id = 0x00, + sli_btmesh_time_server_time_zone_offset_updated_event_id = 0x01, + sli_btmesh_time_server_tai_utc_delta_updated_event_id = 0x02, + sli_btmesh_time_server_time_role_updated_event_id = 0x03, + sli_btmesh_time_client_time_status_event_id = 0x00, + sli_btmesh_time_client_time_zone_status_event_id = 0x01, + sli_btmesh_time_client_tai_utc_delta_status_event_id = 0x02, + sli_btmesh_time_client_time_role_status_event_id = 0x03, + sli_btmesh_fw_dist_server_nodes_added_event_id = 0x00, + sli_btmesh_fw_dist_server_nodes_deleted_event_id = 0x01, + sli_btmesh_fw_dist_server_dist_start_req_event_id = 0x02, + sli_btmesh_fw_dist_server_dist_cancel_event_id = 0x03, + sli_btmesh_fw_dist_server_dist_cancel_complete_event_id = 0x04, + sli_btmesh_fw_dist_server_upload_start_metadata_event_id = 0x05, + sli_btmesh_fw_dist_server_upload_start_req_event_id = 0x06, + sli_btmesh_fw_dist_server_upload_cancel_event_id = 0x08, + sli_btmesh_fw_dist_server_dist_state_changed_event_id = 0x0b, + sli_btmesh_fw_dist_server_node_failed_event_id = 0x0c, + sli_btmesh_fw_dist_server_upload_complete_metadata_event_id = 0x0d, + sli_btmesh_fw_dist_server_upload_complete_event_id = 0x0e, + sli_btmesh_fw_dist_server_upload_failed_event_id = 0x0f, + sli_btmesh_fw_dist_server_upload_oob_start_uri_event_id = 0x10, + sli_btmesh_fw_dist_server_upload_oob_start_req_event_id = 0x11, + sli_btmesh_fw_dist_server_fw_delete_req_event_id = 0x12, + sli_btmesh_fw_dist_server_fw_delete_all_req_event_id = 0x13, + sli_btmesh_fw_dist_server_dist_suspend_event_id = 0x15, + sli_btmesh_fw_dist_server_resume_req_event_id = 0x16, + sli_btmesh_fw_dist_client_receivers_status_event_id = 0x03, + sli_btmesh_fw_dist_client_receivers_list_event_id = 0x04, + sli_btmesh_fw_dist_client_receivers_list_end_event_id = 0x05, + sli_btmesh_fw_dist_client_capabilities_status_event_id = 0x06, + sli_btmesh_fw_dist_client_distribution_status_event_id = 0x07, + sli_btmesh_fw_dist_client_upload_status_event_id = 0x08, + sli_btmesh_fw_dist_client_fw_status_event_id = 0x09, + sli_btmesh_fw_dist_client_upload_complete_event_id = 0x0a, + sli_btmesh_fw_dist_client_upload_failed_event_id = 0x0b, + sli_btmesh_remote_provisioning_client_scan_capabilities_event_id = 0x0, + sli_btmesh_remote_provisioning_client_scan_status_event_id = 0x1, + sli_btmesh_remote_provisioning_client_scan_report_event_id = 0x2, + sli_btmesh_remote_provisioning_client_extended_scan_report_event_id = 0x3, + sli_btmesh_remote_provisioning_client_link_status_event_id = 0x5, + sli_btmesh_remote_provisioning_client_link_report_event_id = 0x6, + sli_btmesh_remote_provisioning_server_link_open_request_event_id = 0x0, + sli_btmesh_remote_provisioning_server_link_close_request_event_id = 0x1, + sli_btmesh_fw_standalone_updater_dist_state_changed_event_id = 0x00, + sli_btmesh_fw_standalone_updater_node_failed_event_id = 0x01, + sli_btmesh_ncp_fw_list_fw_deleted_event_id = 0x08, + sli_btmesh_ncp_fw_list_fw_all_deleted_event_id = 0x09, + sli_btmesh_ncp_fw_list_fw_added_event_id = 0x0a, + sli_btmesh_sar_config_client_sar_transmitter_status_event_id = 0x01, + sli_btmesh_sar_config_client_sar_receiver_status_event_id = 0x02, + sli_btmesh_sar_config_server_sar_transmitter_set_event_id = 0x01, + sli_btmesh_sar_config_server_sar_receiver_set_event_id = 0x02, + sli_btmesh_private_beacon_client_beacon_status_event_id = 0x01, + sli_btmesh_private_beacon_client_gatt_proxy_status_event_id = 0x02, + sli_btmesh_private_beacon_client_identity_status_event_id = 0x03, + sli_btmesh_lcd_client_data_header_event_id = 0x01, + sli_btmesh_lcd_client_data_event_id = 0x02, + sli_btmesh_lcd_client_data_end_event_id = 0x03, + sli_btmesh_on_demand_private_proxy_client_private_gatt_proxy_status_event_id = 0x01, + sli_btmesh_solicitation_config_client_items_status_event_id = 0x01, + sli_btmesh_silabs_config_server_tx_changed_event_id = 0x00, + sli_btmesh_silabs_config_server_model_option_changed_event_id = 0x01, + sli_btmesh_silabs_config_server_network_pdu_changed_event_id = 0x02, +}; + +PACKSTRUCT( struct sl_bt_rsp_error_s +{ + uint16_t result; +}); + +typedef struct sl_bt_rsp_error_s sl_bt_rsp_error_t; + +PACKSTRUCT( struct sl_btmesh_cmd_node_start_unprov_beaconing_s +{ + uint8_t bearer; +}); + +typedef struct sl_btmesh_cmd_node_start_unprov_beaconing_s sl_btmesh_cmd_node_start_unprov_beaconing_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_send_input_oob_request_response_s +{ + uint8array data; +}); + +typedef struct sl_btmesh_cmd_node_send_input_oob_request_response_s sl_btmesh_cmd_node_send_input_oob_request_response_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_provisioning_data_s +{ + aes_key_128 device_key; + aes_key_128 network_key; + uint16_t netkey_index; + uint32_t iv_index; + uint16_t address; + uint8_t kr_in_progress; +}); + +typedef struct sl_btmesh_cmd_node_set_provisioning_data_s sl_btmesh_cmd_node_set_provisioning_data_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_init_oob_s +{ + uint8_t public_key; + uint8_t auth_methods; + uint16_t output_actions; + uint8_t output_size; + uint16_t input_actions; + uint8_t input_size; + uint16_t oob_location; +}); + +typedef struct sl_btmesh_cmd_node_init_oob_s sl_btmesh_cmd_node_init_oob_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_ivrecovery_mode_s +{ + uint8_t mode; +}); + +typedef struct sl_btmesh_cmd_node_set_ivrecovery_mode_s sl_btmesh_cmd_node_set_ivrecovery_mode_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_net_relay_delay_s +{ + uint8_t min_ms; + uint8_t max_ms; +}); + +typedef struct sl_btmesh_cmd_node_set_net_relay_delay_s sl_btmesh_cmd_node_set_net_relay_delay_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_get_seq_remaining_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_node_get_seq_remaining_s sl_btmesh_cmd_node_get_seq_remaining_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_uuid_s +{ + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_node_set_uuid_s sl_btmesh_cmd_node_set_uuid_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_get_element_address_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_node_get_element_address_s sl_btmesh_cmd_node_get_element_address_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_send_static_oob_request_response_s +{ + uint8array data; +}); + +typedef struct sl_btmesh_cmd_node_send_static_oob_request_response_s sl_btmesh_cmd_node_send_static_oob_request_response_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_beacon_reporting_s +{ + uint8_t report; +}); + +typedef struct sl_btmesh_cmd_node_set_beacon_reporting_s sl_btmesh_cmd_node_set_beacon_reporting_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_iv_update_age_s +{ + uint32_t age_sec; +}); + +typedef struct sl_btmesh_cmd_node_set_iv_update_age_s sl_btmesh_cmd_node_set_iv_update_age_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_get_key_count_s +{ + uint8_t type; +}); + +typedef struct sl_btmesh_cmd_node_get_key_count_s sl_btmesh_cmd_node_get_key_count_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_get_key_s +{ + uint8_t type; + uint32_t index; + uint8_t current; +}); + +typedef struct sl_btmesh_cmd_node_get_key_s sl_btmesh_cmd_node_get_key_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_get_element_seqnum_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_node_get_element_seqnum_s sl_btmesh_cmd_node_get_element_seqnum_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_model_option_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint8_t option; + uint32_t value; +}); + +typedef struct sl_btmesh_cmd_node_set_model_option_s sl_btmesh_cmd_node_set_model_option_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_get_local_dcd_s +{ + uint8_t page; +}); + +typedef struct sl_btmesh_cmd_node_get_local_dcd_s sl_btmesh_cmd_node_get_local_dcd_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_adv_phy_s +{ + uint8_t phy; +}); + +typedef struct sl_btmesh_cmd_node_set_adv_phy_s sl_btmesh_cmd_node_set_adv_phy_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_provisioning_algorithms_s +{ + uint16_t algorithms; +}); + +typedef struct sl_btmesh_cmd_node_set_provisioning_algorithms_s sl_btmesh_cmd_node_set_provisioning_algorithms_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_unprov_beaconing_adv_interval_s +{ + uint16_t adv_interval_min; + uint16_t adv_interval_max; +}); + +typedef struct sl_btmesh_cmd_node_set_unprov_beaconing_adv_interval_s sl_btmesh_cmd_node_set_unprov_beaconing_adv_interval_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_proxy_service_adv_interval_s +{ + uint16_t adv_interval_min; + uint16_t adv_interval_max; +}); + +typedef struct sl_btmesh_cmd_node_set_proxy_service_adv_interval_s sl_btmesh_cmd_node_set_proxy_service_adv_interval_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_provisioning_service_adv_interval_s +{ + uint16_t adv_interval_min; + uint16_t adv_interval_max; +}); + +typedef struct sl_btmesh_cmd_node_set_provisioning_service_adv_interval_s sl_btmesh_cmd_node_set_provisioning_service_adv_interval_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_get_local_model_metadata_page_s +{ + uint8_t page; +}); + +typedef struct sl_btmesh_cmd_node_get_local_model_metadata_page_s sl_btmesh_cmd_node_get_local_model_metadata_page_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_node_set_oob_uri_s +{ + uint8array uri; +}); + +typedef struct sl_btmesh_cmd_node_set_oob_uri_s sl_btmesh_cmd_node_set_oob_uri_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_create_provisioning_session_s +{ + uint16_t netkey_index; + uuid_128 uuid; + uint8_t attention_timer_sec; +}); + +typedef struct sl_btmesh_cmd_prov_create_provisioning_session_s sl_btmesh_cmd_prov_create_provisioning_session_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_set_provisioning_suspend_event_s +{ + uint8_t status; +}); + +typedef struct sl_btmesh_cmd_prov_set_provisioning_suspend_event_s sl_btmesh_cmd_prov_set_provisioning_suspend_event_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_provision_adv_device_s +{ + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_prov_provision_adv_device_s sl_btmesh_cmd_prov_provision_adv_device_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_provision_gatt_device_s +{ + uuid_128 uuid; + uint8_t connection; +}); + +typedef struct sl_btmesh_cmd_prov_provision_gatt_device_s sl_btmesh_cmd_prov_provision_gatt_device_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_provision_remote_device_s +{ + uuid_128 uuid; + uint16_t server; +}); + +typedef struct sl_btmesh_cmd_prov_provision_remote_device_s sl_btmesh_cmd_prov_provision_remote_device_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_continue_provisioning_s +{ + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_prov_continue_provisioning_s sl_btmesh_cmd_prov_continue_provisioning_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_abort_provisioning_s +{ + uuid_128 uuid; + uint8_t reason; +}); + +typedef struct sl_btmesh_cmd_prov_abort_provisioning_s sl_btmesh_cmd_prov_abort_provisioning_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_set_device_address_s +{ + uuid_128 uuid; + uint16_t address; +}); + +typedef struct sl_btmesh_cmd_prov_set_device_address_s sl_btmesh_cmd_prov_set_device_address_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_create_network_s +{ + uint16_t netkey_index; + uint8array key; +}); + +typedef struct sl_btmesh_cmd_prov_create_network_s sl_btmesh_cmd_prov_create_network_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_create_appkey_s +{ + uint16_t netkey_index; + uint16_t appkey_index; + uint8array key; +}); + +typedef struct sl_btmesh_cmd_prov_create_appkey_s sl_btmesh_cmd_prov_create_appkey_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_send_oob_pkey_response_s +{ + uuid_128 uuid; + uint8array pkey; +}); + +typedef struct sl_btmesh_cmd_prov_send_oob_pkey_response_s sl_btmesh_cmd_prov_send_oob_pkey_response_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_send_oob_auth_response_s +{ + uuid_128 uuid; + uint8array data; +}); + +typedef struct sl_btmesh_cmd_prov_send_oob_auth_response_s sl_btmesh_cmd_prov_send_oob_auth_response_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_set_oob_requirements_s +{ + uuid_128 uuid; + uint8_t public_key; + uint8_t auth_methods; + uint16_t output_actions; + uint16_t input_actions; + uint8_t min_size; + uint8_t max_size; +}); + +typedef struct sl_btmesh_cmd_prov_set_oob_requirements_s sl_btmesh_cmd_prov_set_oob_requirements_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_start_key_refresh_s +{ + uint16_t netkey_index; + uint8_t num_appkeys; + uint8array appkey_indices; +}); + +typedef struct sl_btmesh_cmd_prov_start_key_refresh_s sl_btmesh_cmd_prov_start_key_refresh_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_get_key_refresh_exclusion_s +{ + uint16_t key; + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_prov_get_key_refresh_exclusion_s sl_btmesh_cmd_prov_get_key_refresh_exclusion_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_set_key_refresh_exclusion_s +{ + uint16_t key; + uint8_t status; + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_prov_set_key_refresh_exclusion_s sl_btmesh_cmd_prov_set_key_refresh_exclusion_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_set_key_refresh_failure_s +{ + uint16_t key; + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_prov_set_key_refresh_failure_s sl_btmesh_cmd_prov_set_key_refresh_failure_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_phase_timeout_set_s +{ + uint32_t phase_timeout_s; +}); + +typedef struct sl_btmesh_cmd_prov_phase_timeout_set_s sl_btmesh_cmd_prov_phase_timeout_set_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_get_ddb_entry_s +{ + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_prov_get_ddb_entry_s sl_btmesh_cmd_prov_get_ddb_entry_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_delete_ddb_entry_s +{ + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_prov_delete_ddb_entry_s sl_btmesh_cmd_prov_delete_ddb_entry_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_add_ddb_entry_s +{ + uuid_128 uuid; + aes_key_128 device_key; + uint16_t netkey_index; + uint16_t address; + uint8_t elements; +}); + +typedef struct sl_btmesh_cmd_prov_add_ddb_entry_s sl_btmesh_cmd_prov_add_ddb_entry_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_initialize_network_s +{ + uint16_t address; + uint32_t ivi; +}); + +typedef struct sl_btmesh_cmd_prov_initialize_network_s sl_btmesh_cmd_prov_initialize_network_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_get_key_refresh_appkey_exclusion_s +{ + uint16_t netkey_index; + uint16_t appkey_index; + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_prov_get_key_refresh_appkey_exclusion_s sl_btmesh_cmd_prov_get_key_refresh_appkey_exclusion_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_set_key_refresh_appkey_exclusion_s +{ + uint16_t netkey_index; + uint16_t appkey_index; + uint8_t status; + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_prov_set_key_refresh_appkey_exclusion_s sl_btmesh_cmd_prov_set_key_refresh_appkey_exclusion_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_update_device_netkey_index_s +{ + uuid_128 uuid; + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_prov_update_device_netkey_index_s sl_btmesh_cmd_prov_update_device_netkey_index_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_suspend_key_refresh_s +{ + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_prov_suspend_key_refresh_s sl_btmesh_cmd_prov_suspend_key_refresh_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_resume_key_refresh_s +{ + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_prov_resume_key_refresh_s sl_btmesh_cmd_prov_resume_key_refresh_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_get_key_refresh_phase_s +{ + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_prov_get_key_refresh_phase_s sl_btmesh_cmd_prov_get_key_refresh_phase_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_start_key_refresh_from_phase_s +{ + uint8_t phase; + uint16_t netkey_index; + uint8_t num_appkeys; + uint8array appkey_indices; +}); + +typedef struct sl_btmesh_cmd_prov_start_key_refresh_from_phase_s sl_btmesh_cmd_prov_start_key_refresh_from_phase_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_flush_key_refresh_state_s +{ + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_prov_flush_key_refresh_state_s sl_btmesh_cmd_prov_flush_key_refresh_state_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_test_identity_s +{ + uint16_t address; + uint16_t netkey_index; + uint8array data; +}); + +typedef struct sl_btmesh_cmd_prov_test_identity_s sl_btmesh_cmd_prov_test_identity_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_get_provisioning_records_list_s +{ + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_prov_get_provisioning_records_list_s sl_btmesh_cmd_prov_get_provisioning_records_list_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_prov_get_provisioning_record_data_s +{ + uuid_128 uuid; + uint16_t record; +}); + +typedef struct sl_btmesh_cmd_prov_get_provisioning_record_data_s sl_btmesh_cmd_prov_get_provisioning_record_data_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_proxy_connect_s +{ + uint8_t connection; +}); + +typedef struct sl_btmesh_cmd_proxy_connect_s sl_btmesh_cmd_proxy_connect_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_proxy_disconnect_s +{ + uint32_t handle; +}); + +typedef struct sl_btmesh_cmd_proxy_disconnect_s sl_btmesh_cmd_proxy_disconnect_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_proxy_set_filter_type_s +{ + uint32_t handle; + uint16_t netkey_index; + uint8_t type; +}); + +typedef struct sl_btmesh_cmd_proxy_set_filter_type_s sl_btmesh_cmd_proxy_set_filter_type_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_proxy_allow_s +{ + uint32_t handle; + uint16_t netkey_index; + uint16_t address; +}); + +typedef struct sl_btmesh_cmd_proxy_allow_s sl_btmesh_cmd_proxy_allow_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_proxy_deny_s +{ + uint32_t handle; + uint16_t netkey_index; + uint16_t address; +}); + +typedef struct sl_btmesh_cmd_proxy_deny_s sl_btmesh_cmd_proxy_deny_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_proxy_optimisation_toggle_s +{ + uint8_t enable; +}); + +typedef struct sl_btmesh_cmd_proxy_optimisation_toggle_s sl_btmesh_cmd_proxy_optimisation_toggle_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_proxy_send_solicitation_s +{ + uint8_t enc_netkey_index; + uint16_t elem_index; + uint16_t dst; +}); + +typedef struct sl_btmesh_cmd_proxy_send_solicitation_s sl_btmesh_cmd_proxy_send_solicitation_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_silabs_config_client_set_tx_s +{ + uint16_t server_address; + uint16_t appkey_index; + uint8_t tx_phy; + uint32_t tx_options_bitmap; +}); + +typedef struct sl_btmesh_cmd_silabs_config_client_set_tx_s sl_btmesh_cmd_silabs_config_client_set_tx_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_silabs_config_client_get_tx_s +{ + uint16_t server_address; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_silabs_config_client_get_tx_s sl_btmesh_cmd_silabs_config_client_get_tx_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_silabs_config_client_set_model_enable_s +{ + uint16_t server_address; + uint16_t appkey_index; + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint8_t enable; +}); + +typedef struct sl_btmesh_cmd_silabs_config_client_set_model_enable_s sl_btmesh_cmd_silabs_config_client_set_model_enable_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_silabs_config_client_get_model_enable_s +{ + uint16_t server_address; + uint16_t appkey_index; + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_silabs_config_client_get_model_enable_s sl_btmesh_cmd_silabs_config_client_get_model_enable_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_silabs_config_client_set_network_pdu_s +{ + uint16_t server_address; + uint16_t appkey_index; + uint16_t pdu_max_size; +}); + +typedef struct sl_btmesh_cmd_silabs_config_client_set_network_pdu_s sl_btmesh_cmd_silabs_config_client_set_network_pdu_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_silabs_config_client_get_network_pdu_s +{ + uint16_t server_address; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_silabs_config_client_get_network_pdu_s sl_btmesh_cmd_silabs_config_client_get_network_pdu_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_vendor_model_send_s +{ + uint16_t destination_address; + int8_t va_index; + uint16_t appkey_index; + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint8_t nonrelayed; + uint8_t opcode; + uint8_t final; + uint8array payload; +}); + +typedef struct sl_btmesh_cmd_vendor_model_send_s sl_btmesh_cmd_vendor_model_send_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_vendor_model_set_publication_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint8_t opcode; + uint8_t final; + uint8array payload; +}); + +typedef struct sl_btmesh_cmd_vendor_model_set_publication_s sl_btmesh_cmd_vendor_model_set_publication_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_vendor_model_clear_publication_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_vendor_model_clear_publication_s sl_btmesh_cmd_vendor_model_clear_publication_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_vendor_model_publish_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_vendor_model_publish_s sl_btmesh_cmd_vendor_model_publish_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_vendor_model_init_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint8_t publish; + uint8array opcodes; +}); + +typedef struct sl_btmesh_cmd_vendor_model_init_s sl_btmesh_cmd_vendor_model_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_vendor_model_deinit_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_vendor_model_deinit_s sl_btmesh_cmd_vendor_model_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_vendor_model_send_tracked_s +{ + uint16_t destination_address; + int8_t va_index; + uint16_t appkey_index; + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint8_t nonrelayed; + uint8_t segment; + uint8_t opcode; + uint8_t final; + uint8array payload; +}); + +typedef struct sl_btmesh_cmd_vendor_model_send_tracked_s sl_btmesh_cmd_vendor_model_send_tracked_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_vendor_model_set_publication_tracked_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint8_t segment; + uint8_t opcode; + uint8_t final; + uint8array payload; +}); + +typedef struct sl_btmesh_cmd_vendor_model_set_publication_tracked_s sl_btmesh_cmd_vendor_model_set_publication_tracked_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_health_client_get_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint16_t vendor_id; +}); + +typedef struct sl_btmesh_cmd_health_client_get_s sl_btmesh_cmd_health_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_health_client_clear_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint16_t vendor_id; + uint8_t reliable; +}); + +typedef struct sl_btmesh_cmd_health_client_clear_s sl_btmesh_cmd_health_client_clear_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_health_client_test_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t test_id; + uint16_t vendor_id; + uint8_t reliable; +}); + +typedef struct sl_btmesh_cmd_health_client_test_s sl_btmesh_cmd_health_client_test_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_health_client_get_period_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_health_client_get_period_s sl_btmesh_cmd_health_client_get_period_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_health_client_set_period_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t period; + uint8_t reliable; +}); + +typedef struct sl_btmesh_cmd_health_client_set_period_s sl_btmesh_cmd_health_client_set_period_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_health_client_get_attention_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_health_client_get_attention_s sl_btmesh_cmd_health_client_get_attention_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_health_client_set_attention_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t attention_sec; + uint8_t reliable; +}); + +typedef struct sl_btmesh_cmd_health_client_set_attention_s sl_btmesh_cmd_health_client_set_attention_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_health_server_set_fault_s +{ + uint16_t elem_index; + uint8_t id; +}); + +typedef struct sl_btmesh_cmd_health_server_set_fault_s sl_btmesh_cmd_health_server_set_fault_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_health_server_clear_fault_s +{ + uint16_t elem_index; + uint8_t id; +}); + +typedef struct sl_btmesh_cmd_health_server_clear_fault_s sl_btmesh_cmd_health_server_clear_fault_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_health_server_send_test_response_s +{ + uint16_t client_address; + uint16_t elem_index; + uint16_t appkey_index; + uint16_t vendor_id; +}); + +typedef struct sl_btmesh_cmd_health_server_send_test_response_s sl_btmesh_cmd_health_server_send_test_response_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_generic_client_get_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t model_id; + uint16_t appkey_index; + uint8_t type; +}); + +typedef struct sl_btmesh_cmd_generic_client_get_s sl_btmesh_cmd_generic_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_generic_client_set_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t model_id; + uint16_t appkey_index; + uint8_t tid; + uint32_t transition_ms; + uint16_t delay_ms; + uint16_t flags; + uint8_t type; + uint8array parameters; +}); + +typedef struct sl_btmesh_cmd_generic_client_set_s sl_btmesh_cmd_generic_client_set_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_generic_client_publish_s +{ + uint16_t elem_index; + uint16_t model_id; + uint8_t tid; + uint32_t transition_ms; + uint16_t delay_ms; + uint16_t flags; + uint8_t type; + uint8array parameters; +}); + +typedef struct sl_btmesh_cmd_generic_client_publish_s sl_btmesh_cmd_generic_client_publish_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_generic_client_get_params_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t model_id; + uint16_t appkey_index; + uint8_t type; + uint8array parameters; +}); + +typedef struct sl_btmesh_cmd_generic_client_get_params_s sl_btmesh_cmd_generic_client_get_params_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_generic_server_respond_s +{ + uint16_t client_address; + uint16_t elem_index; + uint16_t model_id; + uint16_t appkey_index; + uint32_t remaining_ms; + uint16_t flags; + uint8_t type; + uint8array parameters; +}); + +typedef struct sl_btmesh_cmd_generic_server_respond_s sl_btmesh_cmd_generic_server_respond_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_generic_server_update_s +{ + uint16_t elem_index; + uint16_t model_id; + uint32_t remaining_ms; + uint8_t type; + uint8array parameters; +}); + +typedef struct sl_btmesh_cmd_generic_server_update_s sl_btmesh_cmd_generic_server_update_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_generic_server_publish_s +{ + uint16_t elem_index; + uint16_t model_id; + uint8_t type; +}); + +typedef struct sl_btmesh_cmd_generic_server_publish_s sl_btmesh_cmd_generic_server_publish_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_generic_server_get_cached_state_s +{ + uint16_t elem_index; + uint16_t model_id; + uint8_t type; +}); + +typedef struct sl_btmesh_cmd_generic_server_get_cached_state_s sl_btmesh_cmd_generic_server_get_cached_state_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_nettx_s +{ + uint8_t count; + uint8_t interval; +}); + +typedef struct sl_btmesh_cmd_test_set_nettx_s sl_btmesh_cmd_test_set_nettx_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_relay_s +{ + uint8_t enabled; + uint8_t count; + uint8_t interval; +}); + +typedef struct sl_btmesh_cmd_test_set_relay_s sl_btmesh_cmd_test_set_relay_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_adv_scan_params_s +{ + uint16_t adv_interval_min; + uint16_t adv_interval_max; + uint8_t adv_repeat_packets; + uint8_t adv_use_random_address; + uint8_t adv_channel_map; + uint16_t scan_interval; + uint16_t scan_window; +}); + +typedef struct sl_btmesh_cmd_test_set_adv_scan_params_s sl_btmesh_cmd_test_set_adv_scan_params_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_ivupdate_test_mode_s +{ + uint8_t mode; +}); + +typedef struct sl_btmesh_cmd_test_set_ivupdate_test_mode_s sl_btmesh_cmd_test_set_ivupdate_test_mode_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_segment_send_delay_s +{ + uint8_t delay; +}); + +typedef struct sl_btmesh_cmd_test_set_segment_send_delay_s sl_btmesh_cmd_test_set_segment_send_delay_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_ivupdate_state_s +{ + uint8_t state; +}); + +typedef struct sl_btmesh_cmd_test_set_ivupdate_state_s sl_btmesh_cmd_test_set_ivupdate_state_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_bind_local_model_app_s +{ + uint16_t elem_index; + uint16_t appkey_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_test_bind_local_model_app_s sl_btmesh_cmd_test_bind_local_model_app_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_unbind_local_model_app_s +{ + uint16_t elem_index; + uint16_t appkey_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_test_unbind_local_model_app_s sl_btmesh_cmd_test_unbind_local_model_app_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_add_local_model_sub_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint16_t sub_address; +}); + +typedef struct sl_btmesh_cmd_test_add_local_model_sub_s sl_btmesh_cmd_test_add_local_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_remove_local_model_sub_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint16_t sub_address; +}); + +typedef struct sl_btmesh_cmd_test_remove_local_model_sub_s sl_btmesh_cmd_test_remove_local_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_add_local_model_sub_va_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint8array sub_address; +}); + +typedef struct sl_btmesh_cmd_test_add_local_model_sub_va_s sl_btmesh_cmd_test_add_local_model_sub_va_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_remove_local_model_sub_va_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint8array sub_address; +}); + +typedef struct sl_btmesh_cmd_test_remove_local_model_sub_va_s sl_btmesh_cmd_test_remove_local_model_sub_va_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_get_local_model_sub_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_test_get_local_model_sub_s sl_btmesh_cmd_test_get_local_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_local_model_pub_s +{ + uint16_t elem_index; + uint16_t appkey_index; + uint16_t vendor_id; + uint16_t model_id; + uint16_t pub_address; + uint8_t ttl; + uint8_t period; + uint8_t retrans; + uint8_t credentials; +}); + +typedef struct sl_btmesh_cmd_test_set_local_model_pub_s sl_btmesh_cmd_test_set_local_model_pub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_local_model_pub_va_s +{ + uint16_t elem_index; + uint16_t appkey_index; + uint16_t vendor_id; + uint16_t model_id; + uint8_t ttl; + uint8_t period; + uint8_t retrans; + uint8_t credentials; + uint8array pub_address; +}); + +typedef struct sl_btmesh_cmd_test_set_local_model_pub_va_s sl_btmesh_cmd_test_set_local_model_pub_va_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_get_local_model_pub_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_test_get_local_model_pub_s sl_btmesh_cmd_test_get_local_model_pub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_local_heartbeat_subscription_s +{ + uint16_t subscription_source; + uint16_t subscription_destination; + uint8_t period_log; +}); + +typedef struct sl_btmesh_cmd_test_set_local_heartbeat_subscription_s sl_btmesh_cmd_test_set_local_heartbeat_subscription_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_local_heartbeat_publication_s +{ + uint16_t publication_address; + uint8_t count_log; + uint8_t period_log; + uint8_t ttl; + uint16_t features; + uint16_t publication_netkey_index; +}); + +typedef struct sl_btmesh_cmd_test_set_local_heartbeat_publication_s sl_btmesh_cmd_test_set_local_heartbeat_publication_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_local_config_s +{ + uint16_t id; + uint16_t netkey_index; + uint8array value; +}); + +typedef struct sl_btmesh_cmd_test_set_local_config_s sl_btmesh_cmd_test_set_local_config_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_get_local_config_s +{ + uint16_t id; + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_test_get_local_config_s sl_btmesh_cmd_test_get_local_config_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_add_local_key_s +{ + uint8_t key_type; + aes_key_128 key; + uint16_t key_index; + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_test_add_local_key_s sl_btmesh_cmd_test_add_local_key_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_remove_local_key_s +{ + uint8_t key_type; + uint16_t key_index; +}); + +typedef struct sl_btmesh_cmd_test_remove_local_key_s sl_btmesh_cmd_test_remove_local_key_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_update_local_key_s +{ + uint8_t key_type; + aes_key_128 key; + uint16_t key_index; +}); + +typedef struct sl_btmesh_cmd_test_update_local_key_s sl_btmesh_cmd_test_update_local_key_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_sar_config_s +{ + uint32_t incomplete_timer_ms; + uint32_t pending_ack_base_ms; + uint32_t pending_ack_mul_ms; + uint32_t wait_for_ack_base_ms; + uint32_t wait_for_ack_mul_ms; + uint8_t max_send_rounds; +}); + +typedef struct sl_btmesh_cmd_test_set_sar_config_s sl_btmesh_cmd_test_set_sar_config_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_adv_bearer_state_s +{ + uint8_t state; +}); + +typedef struct sl_btmesh_cmd_test_set_adv_bearer_state_s sl_btmesh_cmd_test_set_adv_bearer_state_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_prov_get_device_key_s +{ + uint16_t address; +}); + +typedef struct sl_btmesh_cmd_test_prov_get_device_key_s sl_btmesh_cmd_test_prov_get_device_key_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_prov_prepare_key_refresh_s +{ + aes_key_128 net_key; + uint8array app_keys; +}); + +typedef struct sl_btmesh_cmd_test_prov_prepare_key_refresh_s sl_btmesh_cmd_test_prov_prepare_key_refresh_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_cancel_segmented_tx_s +{ + uint16_t src_addr; + uint16_t dst_addr; +}); + +typedef struct sl_btmesh_cmd_test_cancel_segmented_tx_s sl_btmesh_cmd_test_cancel_segmented_tx_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_iv_index_s +{ + uint32_t iv_index; +}); + +typedef struct sl_btmesh_cmd_test_set_iv_index_s sl_btmesh_cmd_test_set_iv_index_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_element_seqnum_s +{ + uint16_t elem_index; + uint32_t seqnum; +}); + +typedef struct sl_btmesh_cmd_test_set_element_seqnum_s sl_btmesh_cmd_test_set_element_seqnum_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_model_option_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint8_t option; + uint32_t value; +}); + +typedef struct sl_btmesh_cmd_test_set_model_option_s sl_btmesh_cmd_test_set_model_option_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_get_local_model_app_bindings_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_test_get_local_model_app_bindings_s sl_btmesh_cmd_test_get_local_model_app_bindings_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_get_replay_protection_list_entry_s +{ + uint16_t address; +}); + +typedef struct sl_btmesh_cmd_test_get_replay_protection_list_entry_s sl_btmesh_cmd_test_get_replay_protection_list_entry_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_clear_replay_protection_list_entry_s +{ + uint16_t address; +}); + +typedef struct sl_btmesh_cmd_test_clear_replay_protection_list_entry_s sl_btmesh_cmd_test_clear_replay_protection_list_entry_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_replay_protection_list_diagnostics_s +{ + uint8_t enable; +}); + +typedef struct sl_btmesh_cmd_test_set_replay_protection_list_diagnostics_s sl_btmesh_cmd_test_set_replay_protection_list_diagnostics_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_get_model_option_s +{ + uint16_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint8_t option; +}); + +typedef struct sl_btmesh_cmd_test_get_model_option_s sl_btmesh_cmd_test_get_model_option_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_default_ttl_s +{ + uint8_t set_value; +}); + +typedef struct sl_btmesh_cmd_test_set_default_ttl_s sl_btmesh_cmd_test_set_default_ttl_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_gatt_proxy_s +{ + uint8_t set_value; +}); + +typedef struct sl_btmesh_cmd_test_set_gatt_proxy_s sl_btmesh_cmd_test_set_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_get_identity_s +{ + uint16_t get_netkey_index; +}); + +typedef struct sl_btmesh_cmd_test_get_identity_s sl_btmesh_cmd_test_get_identity_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_identity_s +{ + uint16_t set_netkey_index; + uint8_t set_value; +}); + +typedef struct sl_btmesh_cmd_test_set_identity_s sl_btmesh_cmd_test_set_identity_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_friend_s +{ + uint8_t set_value; +}); + +typedef struct sl_btmesh_cmd_test_set_friend_s sl_btmesh_cmd_test_set_friend_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_beacon_s +{ + uint8_t set_value; +}); + +typedef struct sl_btmesh_cmd_test_set_beacon_s sl_btmesh_cmd_test_set_beacon_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_get_private_identity_s +{ + uint16_t get_netkey_index; +}); + +typedef struct sl_btmesh_cmd_test_get_private_identity_s sl_btmesh_cmd_test_get_private_identity_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_private_identity_s +{ + uint16_t set_netkey_index; + uint8_t set_value; +}); + +typedef struct sl_btmesh_cmd_test_set_private_identity_s sl_btmesh_cmd_test_set_private_identity_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_adv_provisioning_bearer_timing_s +{ + uint16_t pbadv_interval_ms; + uint16_t pbadv_variation_ms; +}); + +typedef struct sl_btmesh_cmd_test_set_adv_provisioning_bearer_timing_s sl_btmesh_cmd_test_set_adv_provisioning_bearer_timing_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_update_keyrefresh_phase_s +{ + uint16_t network_key_index; +}); + +typedef struct sl_btmesh_cmd_test_update_keyrefresh_phase_s sl_btmesh_cmd_test_update_keyrefresh_phase_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_adv_params_s +{ + uint16_t adv_interval_min; + uint16_t adv_interval_max; + uint8_t adv_repeat_packets; + uint8_t adv_channel_map; +}); + +typedef struct sl_btmesh_cmd_test_set_adv_params_s sl_btmesh_cmd_test_set_adv_params_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_set_scan_params_s +{ + uint16_t scan_interval; + uint16_t scan_window; +}); + +typedef struct sl_btmesh_cmd_test_set_scan_params_s sl_btmesh_cmd_test_set_scan_params_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_test_adv_use_random_address_s +{ + uint8_t address_type; +}); + +typedef struct sl_btmesh_cmd_test_adv_use_random_address_s sl_btmesh_cmd_test_adv_use_random_address_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lpn_establish_friendship_s +{ + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_lpn_establish_friendship_s sl_btmesh_cmd_lpn_establish_friendship_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lpn_poll_s +{ + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_lpn_poll_s sl_btmesh_cmd_lpn_poll_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lpn_terminate_friendship_s +{ + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_lpn_terminate_friendship_s sl_btmesh_cmd_lpn_terminate_friendship_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lpn_config_s +{ + uint8_t setting_id; + uint32_t value; +}); + +typedef struct sl_btmesh_cmd_lpn_config_s sl_btmesh_cmd_lpn_config_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_cancel_request_s +{ + uint32_t handle; +}); + +typedef struct sl_btmesh_cmd_config_client_cancel_request_s sl_btmesh_cmd_config_client_cancel_request_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_request_status_s +{ + uint32_t handle; +}); + +typedef struct sl_btmesh_cmd_config_client_get_request_status_s sl_btmesh_cmd_config_client_get_request_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_default_timeout_s +{ + uint32_t timeout_ms; + uint32_t lpn_timeout_ms; +}); + +typedef struct sl_btmesh_cmd_config_client_set_default_timeout_s sl_btmesh_cmd_config_client_set_default_timeout_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_add_netkey_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_config_client_add_netkey_s sl_btmesh_cmd_config_client_add_netkey_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_remove_netkey_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_config_client_remove_netkey_s sl_btmesh_cmd_config_client_remove_netkey_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_list_netkeys_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_config_client_list_netkeys_s sl_btmesh_cmd_config_client_list_netkeys_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_add_appkey_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t appkey_index; + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_config_client_add_appkey_s sl_btmesh_cmd_config_client_add_appkey_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_remove_appkey_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t appkey_index; + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_config_client_remove_appkey_s sl_btmesh_cmd_config_client_remove_appkey_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_list_appkeys_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_config_client_list_appkeys_s sl_btmesh_cmd_config_client_list_appkeys_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_bind_model_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_config_client_bind_model_s sl_btmesh_cmd_config_client_bind_model_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_unbind_model_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_config_client_unbind_model_s sl_btmesh_cmd_config_client_unbind_model_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_list_bindings_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_config_client_list_bindings_s sl_btmesh_cmd_config_client_list_bindings_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_model_pub_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_config_client_get_model_pub_s sl_btmesh_cmd_config_client_get_model_pub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_model_pub_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint16_t address; + uint16_t appkey_index; + uint8_t credentials; + uint8_t ttl; + uint32_t period_ms; + uint8_t retransmit_count; + uint16_t retransmit_interval_ms; +}); + +typedef struct sl_btmesh_cmd_config_client_set_model_pub_s sl_btmesh_cmd_config_client_set_model_pub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_model_pub_va_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uuid_128 address; + uint16_t appkey_index; + uint8_t credentials; + uint8_t ttl; + uint32_t period_ms; + uint8_t retransmit_count; + uint16_t retransmit_interval_ms; +}); + +typedef struct sl_btmesh_cmd_config_client_set_model_pub_va_s sl_btmesh_cmd_config_client_set_model_pub_va_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_add_model_sub_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint16_t sub_address; +}); + +typedef struct sl_btmesh_cmd_config_client_add_model_sub_s sl_btmesh_cmd_config_client_add_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_add_model_sub_va_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uuid_128 sub_address; +}); + +typedef struct sl_btmesh_cmd_config_client_add_model_sub_va_s sl_btmesh_cmd_config_client_add_model_sub_va_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_remove_model_sub_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint16_t sub_address; +}); + +typedef struct sl_btmesh_cmd_config_client_remove_model_sub_s sl_btmesh_cmd_config_client_remove_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_remove_model_sub_va_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uuid_128 sub_address; +}); + +typedef struct sl_btmesh_cmd_config_client_remove_model_sub_va_s sl_btmesh_cmd_config_client_remove_model_sub_va_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_model_sub_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint16_t sub_address; +}); + +typedef struct sl_btmesh_cmd_config_client_set_model_sub_s sl_btmesh_cmd_config_client_set_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_model_sub_va_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uuid_128 sub_address; +}); + +typedef struct sl_btmesh_cmd_config_client_set_model_sub_va_s sl_btmesh_cmd_config_client_set_model_sub_va_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_clear_model_sub_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_config_client_clear_model_sub_s sl_btmesh_cmd_config_client_clear_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_list_subs_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_config_client_list_subs_s sl_btmesh_cmd_config_client_list_subs_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_heartbeat_pub_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_config_client_get_heartbeat_pub_s sl_btmesh_cmd_config_client_get_heartbeat_pub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_heartbeat_pub_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t destination_address; + uint16_t netkey_index; + uint8_t count_log; + uint8_t period_log; + uint8_t ttl; + uint16_t features; +}); + +typedef struct sl_btmesh_cmd_config_client_set_heartbeat_pub_s sl_btmesh_cmd_config_client_set_heartbeat_pub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_heartbeat_sub_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_config_client_get_heartbeat_sub_s sl_btmesh_cmd_config_client_get_heartbeat_sub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_heartbeat_sub_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t source_address; + uint16_t destination_address; + uint8_t period_log; +}); + +typedef struct sl_btmesh_cmd_config_client_set_heartbeat_sub_s sl_btmesh_cmd_config_client_set_heartbeat_sub_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_beacon_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_config_client_get_beacon_s sl_btmesh_cmd_config_client_get_beacon_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_beacon_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t value; +}); + +typedef struct sl_btmesh_cmd_config_client_set_beacon_s sl_btmesh_cmd_config_client_set_beacon_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_default_ttl_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_config_client_get_default_ttl_s sl_btmesh_cmd_config_client_get_default_ttl_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_default_ttl_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t value; +}); + +typedef struct sl_btmesh_cmd_config_client_set_default_ttl_s sl_btmesh_cmd_config_client_set_default_ttl_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_gatt_proxy_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_config_client_get_gatt_proxy_s sl_btmesh_cmd_config_client_get_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_gatt_proxy_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t value; +}); + +typedef struct sl_btmesh_cmd_config_client_set_gatt_proxy_s sl_btmesh_cmd_config_client_set_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_relay_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_config_client_get_relay_s sl_btmesh_cmd_config_client_get_relay_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_relay_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t value; + uint8_t retransmit_count; + uint16_t retransmit_interval_ms; +}); + +typedef struct sl_btmesh_cmd_config_client_set_relay_s sl_btmesh_cmd_config_client_set_relay_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_network_transmit_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_config_client_get_network_transmit_s sl_btmesh_cmd_config_client_get_network_transmit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_network_transmit_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t transmit_count; + uint16_t transmit_interval_ms; +}); + +typedef struct sl_btmesh_cmd_config_client_set_network_transmit_s sl_btmesh_cmd_config_client_set_network_transmit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_identity_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_config_client_get_identity_s sl_btmesh_cmd_config_client_get_identity_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_identity_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t netkey_index; + uint8_t value; +}); + +typedef struct sl_btmesh_cmd_config_client_set_identity_s sl_btmesh_cmd_config_client_set_identity_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_friend_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_config_client_get_friend_s sl_btmesh_cmd_config_client_get_friend_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_friend_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t value; +}); + +typedef struct sl_btmesh_cmd_config_client_set_friend_s sl_btmesh_cmd_config_client_set_friend_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_key_refresh_phase_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_config_client_get_key_refresh_phase_s sl_btmesh_cmd_config_client_get_key_refresh_phase_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_lpn_polltimeout_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t lpn_address; +}); + +typedef struct sl_btmesh_cmd_config_client_get_lpn_polltimeout_s sl_btmesh_cmd_config_client_get_lpn_polltimeout_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_get_dcd_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t page; +}); + +typedef struct sl_btmesh_cmd_config_client_get_dcd_s sl_btmesh_cmd_config_client_get_dcd_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_reset_node_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_config_client_reset_node_s sl_btmesh_cmd_config_client_reset_node_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_config_client_set_request_timeout_for_node_s +{ + uint16_t lpn_address; + uint16_t timeout_ms; +}); + +typedef struct sl_btmesh_cmd_config_client_set_request_timeout_for_node_s sl_btmesh_cmd_config_client_set_request_timeout_for_node_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_init_s +{ + uint16_t elem_index; + uint16_t max_servers; + uint16_t max_blocks; + uint16_t max_chunks_per_block; +}); + +typedef struct sl_btmesh_cmd_mbt_client_init_s sl_btmesh_cmd_mbt_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_setup_s +{ + uint16_t elem_index; + sl_bt_uuid_64_t blob_id; + uint32_t blob_size; + uint16_t appkey_index; + uint8_t ttl; + uint16_t timeout_base; + uint8_t supported_transfer_modes; + uint16_t group_address; + uuid_128 virtual_address; + uint16_t multicast_threshold; + uint8array servers; +}); + +typedef struct sl_btmesh_cmd_mbt_client_setup_s sl_btmesh_cmd_mbt_client_setup_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_query_information_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_mbt_client_query_information_s sl_btmesh_cmd_mbt_client_query_information_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_get_server_status_s +{ + uint16_t elem_index; + uint16_t server_index; +}); + +typedef struct sl_btmesh_cmd_mbt_client_get_server_status_s sl_btmesh_cmd_mbt_client_get_server_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_add_server_s +{ + uint16_t elem_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_mbt_client_add_server_s sl_btmesh_cmd_mbt_client_add_server_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_start_transfer_s +{ + uint16_t elem_index; + uint8_t block_size_log; + uint8_t transfer_mode; +}); + +typedef struct sl_btmesh_cmd_mbt_client_start_transfer_s sl_btmesh_cmd_mbt_client_start_transfer_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_start_block_s +{ + uint16_t elem_index; + uint16_t chunk_size; +}); + +typedef struct sl_btmesh_cmd_mbt_client_start_block_s sl_btmesh_cmd_mbt_client_start_block_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_send_chunk_request_rsp_s +{ + uint16_t elem_index; + uint8array data; +}); + +typedef struct sl_btmesh_cmd_mbt_client_send_chunk_request_rsp_s sl_btmesh_cmd_mbt_client_send_chunk_request_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_query_block_status_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_mbt_client_query_block_status_s sl_btmesh_cmd_mbt_client_query_block_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_get_status_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_mbt_client_get_status_s sl_btmesh_cmd_mbt_client_get_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_get_transfer_status_s +{ + uint16_t elem_index; + uint16_t server_address; + uuid_128 virtual_address; + uint16_t appkey_index; + uint8_t ttl; +}); + +typedef struct sl_btmesh_cmd_mbt_client_get_transfer_status_s sl_btmesh_cmd_mbt_client_get_transfer_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_cancel_transfer_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_mbt_client_cancel_transfer_s sl_btmesh_cmd_mbt_client_cancel_transfer_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_client_abort_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_mbt_client_abort_s sl_btmesh_cmd_mbt_client_abort_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_server_init_s +{ + uint16_t elem_index; + uint8_t min_block_size_log; + uint8_t max_block_size_log; + uint16_t max_chunks_per_block; + uint16_t max_chunk_size; + uint32_t max_blob_size; + uint8_t supported_transfer_modes; + uint16_t pull_mode_chunks_to_request; + uint16_t pull_mode_retry_interval_ms; + uint16_t pull_mode_retry_count; +}); + +typedef struct sl_btmesh_cmd_mbt_server_init_s sl_btmesh_cmd_mbt_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_server_start_s +{ + uint16_t elem_index; + sl_bt_uuid_64_t blob_id; + uint16_t timeout_10s; + uint8_t ttl; +}); + +typedef struct sl_btmesh_cmd_mbt_server_start_s sl_btmesh_cmd_mbt_server_start_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_server_get_transfer_status_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_mbt_server_get_transfer_status_s sl_btmesh_cmd_mbt_server_get_transfer_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_server_transfer_complete_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_mbt_server_transfer_complete_s sl_btmesh_cmd_mbt_server_transfer_complete_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_server_abort_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_mbt_server_abort_s sl_btmesh_cmd_mbt_server_abort_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_server_set_pull_mode_parameters_s +{ + uint16_t elem_index; + uint16_t pull_mode_retry_interval_ms; + uint16_t pull_mode_retry_count; +}); + +typedef struct sl_btmesh_cmd_mbt_server_set_pull_mode_parameters_s sl_btmesh_cmd_mbt_server_set_pull_mode_parameters_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_mbt_server_transfer_start_rsp_s +{ + uint16_t elem_index; + uint8_t status; +}); + +typedef struct sl_btmesh_cmd_mbt_server_transfer_start_rsp_s sl_btmesh_cmd_mbt_server_transfer_start_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_server_init_s +{ + uint16_t elem_index; + uint8array descriptors; +}); + +typedef struct sl_btmesh_cmd_sensor_server_init_s sl_btmesh_cmd_sensor_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_server_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_sensor_server_deinit_s sl_btmesh_cmd_sensor_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_server_send_descriptor_status_s +{ + uint16_t client_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint8array descriptors; +}); + +typedef struct sl_btmesh_cmd_sensor_server_send_descriptor_status_s sl_btmesh_cmd_sensor_server_send_descriptor_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_server_send_status_s +{ + uint16_t client_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint8array sensor_data; +}); + +typedef struct sl_btmesh_cmd_sensor_server_send_status_s sl_btmesh_cmd_sensor_server_send_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_server_send_column_status_s +{ + uint16_t client_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; + uint8array sensor_data; +}); + +typedef struct sl_btmesh_cmd_sensor_server_send_column_status_s sl_btmesh_cmd_sensor_server_send_column_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_server_send_series_status_s +{ + uint16_t client_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; + uint8array sensor_data; +}); + +typedef struct sl_btmesh_cmd_sensor_server_send_series_status_s sl_btmesh_cmd_sensor_server_send_series_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_setup_server_send_cadence_status_s +{ + uint16_t client_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; + uint8array params; +}); + +typedef struct sl_btmesh_cmd_sensor_setup_server_send_cadence_status_s sl_btmesh_cmd_sensor_setup_server_send_cadence_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_setup_server_send_settings_status_s +{ + uint16_t client_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; + uint8array setting_ids; +}); + +typedef struct sl_btmesh_cmd_sensor_setup_server_send_settings_status_s sl_btmesh_cmd_sensor_setup_server_send_settings_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_setup_server_send_setting_status_s +{ + uint16_t client_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; + uint16_t setting_id; + uint8array raw_value; +}); + +typedef struct sl_btmesh_cmd_sensor_setup_server_send_setting_status_s sl_btmesh_cmd_sensor_setup_server_send_setting_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_client_get_descriptor_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; +}); + +typedef struct sl_btmesh_cmd_sensor_client_get_descriptor_s sl_btmesh_cmd_sensor_client_get_descriptor_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_client_get_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; +}); + +typedef struct sl_btmesh_cmd_sensor_client_get_s sl_btmesh_cmd_sensor_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_client_get_column_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; + uint8array column_id; +}); + +typedef struct sl_btmesh_cmd_sensor_client_get_column_s sl_btmesh_cmd_sensor_client_get_column_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_client_get_series_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; + uint8array column_ids; +}); + +typedef struct sl_btmesh_cmd_sensor_client_get_series_s sl_btmesh_cmd_sensor_client_get_series_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_client_get_cadence_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; +}); + +typedef struct sl_btmesh_cmd_sensor_client_get_cadence_s sl_btmesh_cmd_sensor_client_get_cadence_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_client_set_cadence_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; + uint8array params; +}); + +typedef struct sl_btmesh_cmd_sensor_client_set_cadence_s sl_btmesh_cmd_sensor_client_set_cadence_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_client_get_settings_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; +}); + +typedef struct sl_btmesh_cmd_sensor_client_get_settings_s sl_btmesh_cmd_sensor_client_get_settings_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_client_get_setting_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; + uint16_t setting_id; +}); + +typedef struct sl_btmesh_cmd_sensor_client_get_setting_s sl_btmesh_cmd_sensor_client_get_setting_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sensor_client_set_setting_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; + uint16_t setting_id; + uint8array raw_value; +}); + +typedef struct sl_btmesh_cmd_sensor_client_set_setting_s sl_btmesh_cmd_sensor_client_set_setting_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_client_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_update_client_init_s sl_btmesh_cmd_fw_update_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_client_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_update_client_deinit_s sl_btmesh_cmd_fw_update_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_client_get_info_s +{ + uint16_t elem_index; + uint16_t dst; + uuid_128 virtual_address; + uint16_t appkey_index; + uint8_t ttl; + uint8_t first_index; + uint8_t max_entries; +}); + +typedef struct sl_btmesh_cmd_fw_update_client_get_info_s sl_btmesh_cmd_fw_update_client_get_info_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_client_get_update_s +{ + uint16_t elem_index; + uint16_t dst; + uuid_128 virtual_address; + uint16_t appkey_index; + uint8_t ttl; +}); + +typedef struct sl_btmesh_cmd_fw_update_client_get_update_s sl_btmesh_cmd_fw_update_client_get_update_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_client_start_update_s +{ + uint16_t elem_index; + uint16_t dst; + uuid_128 virtual_address; + uint16_t appkey_index; + uint8_t ttl; + uint8_t update_ttl; + uint16_t update_timeout_base; + sl_bt_uuid_64_t blob_id; + uint8_t fw_index; + uint8array metadata; +}); + +typedef struct sl_btmesh_cmd_fw_update_client_start_update_s sl_btmesh_cmd_fw_update_client_start_update_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_client_cancel_update_s +{ + uint16_t elem_index; + uint16_t dst; + uuid_128 virtual_address; + uint16_t appkey_index; + uint8_t ttl; +}); + +typedef struct sl_btmesh_cmd_fw_update_client_cancel_update_s sl_btmesh_cmd_fw_update_client_cancel_update_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_client_apply_update_s +{ + uint16_t elem_index; + uint16_t dst; + uuid_128 virtual_address; + uint16_t appkey_index; + uint8_t ttl; +}); + +typedef struct sl_btmesh_cmd_fw_update_client_apply_update_s sl_btmesh_cmd_fw_update_client_apply_update_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_client_check_metadata_s +{ + uint16_t elem_index; + uint16_t dst; + uuid_128 virtual_address; + uint16_t appkey_index; + uint8_t ttl; + uint8_t fw_index; + uint8array metadata; +}); + +typedef struct sl_btmesh_cmd_fw_update_client_check_metadata_s sl_btmesh_cmd_fw_update_client_check_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_client_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_lc_client_init_s sl_btmesh_cmd_lc_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_client_get_mode_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_lc_client_get_mode_s sl_btmesh_cmd_lc_client_get_mode_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_client_set_mode_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint8_t mode; +}); + +typedef struct sl_btmesh_cmd_lc_client_set_mode_s sl_btmesh_cmd_lc_client_set_mode_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_client_get_om_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_lc_client_get_om_s sl_btmesh_cmd_lc_client_get_om_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_client_set_om_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint8_t mode; +}); + +typedef struct sl_btmesh_cmd_lc_client_set_om_s sl_btmesh_cmd_lc_client_set_om_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_client_get_light_onoff_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_lc_client_get_light_onoff_s sl_btmesh_cmd_lc_client_get_light_onoff_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_client_set_light_onoff_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint8_t target_state; + uint8_t tid; + uint32_t transition_time_ms; + uint16_t message_delay_ms; +}); + +typedef struct sl_btmesh_cmd_lc_client_set_light_onoff_s sl_btmesh_cmd_lc_client_set_light_onoff_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_client_get_property_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint16_t property_id; +}); + +typedef struct sl_btmesh_cmd_lc_client_get_property_s sl_btmesh_cmd_lc_client_get_property_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_client_set_property_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint16_t property_id; + uint8array params; +}); + +typedef struct sl_btmesh_cmd_lc_client_set_property_s sl_btmesh_cmd_lc_client_set_property_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_server_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_lc_server_init_s sl_btmesh_cmd_lc_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_server_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_lc_server_deinit_s sl_btmesh_cmd_lc_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_server_update_mode_s +{ + uint16_t elem_index; + uint8_t mode; +}); + +typedef struct sl_btmesh_cmd_lc_server_update_mode_s sl_btmesh_cmd_lc_server_update_mode_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_server_update_om_s +{ + uint16_t elem_index; + uint8_t om; +}); + +typedef struct sl_btmesh_cmd_lc_server_update_om_s sl_btmesh_cmd_lc_server_update_om_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_server_update_light_onoff_s +{ + uint16_t elem_index; + uint8_t light_onoff; + uint32_t transition_time_ms; +}); + +typedef struct sl_btmesh_cmd_lc_server_update_light_onoff_s sl_btmesh_cmd_lc_server_update_light_onoff_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_server_init_all_properties_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_lc_server_init_all_properties_s sl_btmesh_cmd_lc_server_init_all_properties_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_server_set_publish_mask_s +{ + uint16_t elem_index; + uint16_t status_type; + uint8_t value; +}); + +typedef struct sl_btmesh_cmd_lc_server_set_publish_mask_s sl_btmesh_cmd_lc_server_set_publish_mask_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_server_set_regulator_interval_s +{ + uint16_t elem_index; + uint8_t value; +}); + +typedef struct sl_btmesh_cmd_lc_server_set_regulator_interval_s sl_btmesh_cmd_lc_server_set_regulator_interval_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_server_set_event_mask_s +{ + uint16_t elem_index; + uint16_t event_type; + uint8_t value; +}); + +typedef struct sl_btmesh_cmd_lc_server_set_event_mask_s sl_btmesh_cmd_lc_server_set_event_mask_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_server_get_lc_state_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_lc_server_get_lc_state_s sl_btmesh_cmd_lc_server_get_lc_state_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lc_setup_server_update_property_s +{ + uint16_t elem_index; + uint16_t property_id; + uint8array params; +}); + +typedef struct sl_btmesh_cmd_lc_setup_server_update_property_s sl_btmesh_cmd_lc_setup_server_update_property_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scene_client_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_scene_client_init_s sl_btmesh_cmd_scene_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scene_client_get_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_scene_client_get_s sl_btmesh_cmd_scene_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scene_client_get_register_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_scene_client_get_register_s sl_btmesh_cmd_scene_client_get_register_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scene_client_recall_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t selected_scene; + uint16_t appkey_index; + uint8_t flags; + uint8_t tid; + uint32_t transition_time_ms; + uint16_t delay_ms; +}); + +typedef struct sl_btmesh_cmd_scene_client_recall_s sl_btmesh_cmd_scene_client_recall_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scene_client_store_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t selected_scene; + uint16_t appkey_index; + uint8_t flags; +}); + +typedef struct sl_btmesh_cmd_scene_client_store_s sl_btmesh_cmd_scene_client_store_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scene_client_delete_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t selected_scene; + uint16_t appkey_index; + uint8_t flags; +}); + +typedef struct sl_btmesh_cmd_scene_client_delete_s sl_btmesh_cmd_scene_client_delete_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scene_server_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_scene_server_init_s sl_btmesh_cmd_scene_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scene_server_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_scene_server_deinit_s sl_btmesh_cmd_scene_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scene_server_reset_register_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_scene_server_reset_register_s sl_btmesh_cmd_scene_server_reset_register_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scene_setup_server_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_scene_setup_server_init_s sl_btmesh_cmd_scene_setup_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scheduler_client_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_scheduler_client_init_s sl_btmesh_cmd_scheduler_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scheduler_client_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_scheduler_client_deinit_s sl_btmesh_cmd_scheduler_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scheduler_client_get_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_scheduler_client_get_s sl_btmesh_cmd_scheduler_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scheduler_client_get_action_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t index; +}); + +typedef struct sl_btmesh_cmd_scheduler_client_get_action_s sl_btmesh_cmd_scheduler_client_get_action_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scheduler_client_set_action_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t flags; + uint8_t index; + uint8_t year; + uint16_t month; + uint8_t day; + uint8_t hour; + uint8_t minute; + uint8_t second; + uint8_t day_of_week; + uint8_t action; + uint32_t transition_time_ms; + uint16_t scene_number; +}); + +typedef struct sl_btmesh_cmd_scheduler_client_set_action_s sl_btmesh_cmd_scheduler_client_set_action_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scheduler_server_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_scheduler_server_init_s sl_btmesh_cmd_scheduler_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scheduler_server_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_scheduler_server_deinit_s sl_btmesh_cmd_scheduler_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scheduler_server_get_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_scheduler_server_get_s sl_btmesh_cmd_scheduler_server_get_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scheduler_server_get_action_s +{ + uint16_t elem_index; + uint8_t index; +}); + +typedef struct sl_btmesh_cmd_scheduler_server_get_action_s sl_btmesh_cmd_scheduler_server_get_action_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_scheduler_server_set_action_s +{ + uint16_t elem_index; + uint8_t index; + uint8_t year; + uint16_t month; + uint8_t day; + uint8_t hour; + uint8_t minute; + uint8_t second; + uint8_t day_of_week; + uint8_t action; + uint32_t transition_time_ms; + uint16_t scene_number; +}); + +typedef struct sl_btmesh_cmd_scheduler_server_set_action_s sl_btmesh_cmd_scheduler_server_set_action_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_server_init_s +{ + uint16_t elem_index; + uint8_t num_installed_fw; + uint8_t max_metadata_len; +}); + +typedef struct sl_btmesh_cmd_fw_update_server_init_s sl_btmesh_cmd_fw_update_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_server_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_update_server_deinit_s sl_btmesh_cmd_fw_update_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_server_check_fw_metadata_rsp_s +{ + uint16_t elem_index; + uint8_t response_type; + uint8_t additional_information; + uint8_t fw_index; +}); + +typedef struct sl_btmesh_cmd_fw_update_server_check_fw_metadata_rsp_s sl_btmesh_cmd_fw_update_server_check_fw_metadata_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_server_update_start_rsp_s +{ + uint16_t elem_index; + uint8_t response_type; + uint8_t additional_information; +}); + +typedef struct sl_btmesh_cmd_fw_update_server_update_start_rsp_s sl_btmesh_cmd_fw_update_server_update_start_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_server_verify_fw_rsp_s +{ + uint16_t elem_index; + uint8_t accept; +}); + +typedef struct sl_btmesh_cmd_fw_update_server_verify_fw_rsp_s sl_btmesh_cmd_fw_update_server_verify_fw_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_update_server_distributor_self_update_rsp_s +{ + uint16_t elem_index; + uint8_t response_type; + uint8_t additional_information; +}); + +typedef struct sl_btmesh_cmd_fw_update_server_distributor_self_update_rsp_s sl_btmesh_cmd_fw_update_server_distributor_self_update_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_time_server_init_s sl_btmesh_cmd_time_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_time_server_deinit_s sl_btmesh_cmd_time_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_get_time_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_time_server_get_time_s sl_btmesh_cmd_time_server_get_time_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_set_time_s +{ + uint16_t elem_index; + uint64_t tai_seconds; + uint8_t subsecond; + uint8_t uncertainty; + uint8_t time_authority; + int16_t time_zone_offset; + int32_t tai_utc_delta; +}); + +typedef struct sl_btmesh_cmd_time_server_set_time_s sl_btmesh_cmd_time_server_set_time_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_get_time_zone_offset_new_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_time_server_get_time_zone_offset_new_s sl_btmesh_cmd_time_server_get_time_zone_offset_new_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_set_time_zone_offset_new_s +{ + uint16_t elem_index; + int16_t new_offset; + uint64_t tai_of_zone_change; +}); + +typedef struct sl_btmesh_cmd_time_server_set_time_zone_offset_new_s sl_btmesh_cmd_time_server_set_time_zone_offset_new_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_get_tai_utc_delta_new_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_time_server_get_tai_utc_delta_new_s sl_btmesh_cmd_time_server_get_tai_utc_delta_new_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_set_tai_utc_delta_new_s +{ + uint16_t elem_index; + int32_t new_delta; + uint64_t tai_of_delta_change; +}); + +typedef struct sl_btmesh_cmd_time_server_set_tai_utc_delta_new_s sl_btmesh_cmd_time_server_set_tai_utc_delta_new_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_get_time_role_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_time_server_get_time_role_s sl_btmesh_cmd_time_server_get_time_role_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_set_time_role_s +{ + uint16_t elem_index; + uint8_t time_role; +}); + +typedef struct sl_btmesh_cmd_time_server_set_time_role_s sl_btmesh_cmd_time_server_set_time_role_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_get_datetime_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_time_server_get_datetime_s sl_btmesh_cmd_time_server_get_datetime_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_publish_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_time_server_publish_s sl_btmesh_cmd_time_server_publish_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_server_status_s +{ + uint16_t destination_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_time_server_status_s sl_btmesh_cmd_time_server_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_client_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_time_client_init_s sl_btmesh_cmd_time_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_client_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_time_client_deinit_s sl_btmesh_cmd_time_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_client_get_time_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_time_client_get_time_s sl_btmesh_cmd_time_client_get_time_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_client_set_time_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint64_t tai_seconds; + uint8_t subsecond; + uint8_t uncertainty; + uint8_t time_authority; + int32_t tai_utc_delta; + int16_t time_zone_offset; +}); + +typedef struct sl_btmesh_cmd_time_client_set_time_s sl_btmesh_cmd_time_client_set_time_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_client_get_time_zone_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_time_client_get_time_zone_s sl_btmesh_cmd_time_client_get_time_zone_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_client_set_time_zone_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + int16_t time_zone_offset_new; + uint64_t tai_of_zone_change; +}); + +typedef struct sl_btmesh_cmd_time_client_set_time_zone_s sl_btmesh_cmd_time_client_set_time_zone_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_client_get_tai_utc_delta_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_time_client_get_tai_utc_delta_s sl_btmesh_cmd_time_client_get_tai_utc_delta_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_client_set_tai_utc_delta_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + int32_t tai_utc_delta_new; + uint64_t tai_of_delta_change; +}); + +typedef struct sl_btmesh_cmd_time_client_set_tai_utc_delta_s sl_btmesh_cmd_time_client_set_tai_utc_delta_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_client_get_time_role_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; +}); + +typedef struct sl_btmesh_cmd_time_client_get_time_role_s sl_btmesh_cmd_time_client_get_time_role_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_time_client_set_time_role_s +{ + uint16_t server_address; + uint16_t elem_index; + uint16_t appkey_index; + uint8_t time_role; +}); + +typedef struct sl_btmesh_cmd_time_client_set_time_role_s sl_btmesh_cmd_time_client_set_time_role_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_init_s +{ + uint16_t elem_index; + uint16_t max_node_list_size; + uint16_t max_fw_entries; + uint32_t max_fw_size; + uint32_t total_store_size; + uint16_t multicast_threshold; + uint8array oob_supported_uri_scheme_names; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_init_s sl_btmesh_cmd_fw_dist_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_deinit_s sl_btmesh_cmd_fw_dist_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_upload_start_rsp_s +{ + uint16_t elem_index; + uint8_t status; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_upload_start_rsp_s sl_btmesh_cmd_fw_dist_server_upload_start_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_execute_distribution_step_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_execute_distribution_step_s sl_btmesh_cmd_fw_dist_server_execute_distribution_step_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_upload_oob_start_rsp_s +{ + uint16_t elem_index; + uint8_t status_code; + uint8array fwid; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_upload_oob_start_rsp_s sl_btmesh_cmd_fw_dist_server_upload_oob_start_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_set_upload_oob_metadata_s +{ + uint16_t elem_index; + uint8array metadata; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_set_upload_oob_metadata_s sl_btmesh_cmd_fw_dist_server_set_upload_oob_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_set_upload_oob_image_size_s +{ + uint16_t elem_index; + uint32_t size; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_set_upload_oob_image_size_s sl_btmesh_cmd_fw_dist_server_set_upload_oob_image_size_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_set_upload_oob_progress_s +{ + uint16_t elem_index; + uint8_t error; + uint8_t progress; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_set_upload_oob_progress_s sl_btmesh_cmd_fw_dist_server_set_upload_oob_progress_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_get_node_status_by_index_s +{ + uint16_t elem_index; + uint16_t entry_index; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_get_node_status_by_index_s sl_btmesh_cmd_fw_dist_server_get_node_status_by_index_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_get_node_status_by_address_s +{ + uint16_t elem_index; + uint16_t node_address; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_get_node_status_by_address_s sl_btmesh_cmd_fw_dist_server_get_node_status_by_address_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_delete_rsp_s +{ + uint16_t elem_index; + uint16_t status; + uint8array fwid; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_delete_rsp_s sl_btmesh_cmd_fw_dist_server_delete_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_dist_start_rsp_s +{ + uint16_t elem_index; + uint16_t status; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_dist_start_rsp_s sl_btmesh_cmd_fw_dist_server_dist_start_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_set_multicast_threshold_s +{ + uint16_t elem_index; + uint16_t multicast_threshold; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_set_multicast_threshold_s sl_btmesh_cmd_fw_dist_server_set_multicast_threshold_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_delete_all_rsp_s +{ + uint16_t elem_index; + uint16_t status; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_delete_all_rsp_s sl_btmesh_cmd_fw_dist_server_delete_all_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_server_resume_rsp_s +{ + uint16_t elem_index; + uint16_t status; +}); + +typedef struct sl_btmesh_cmd_fw_dist_server_resume_rsp_s sl_btmesh_cmd_fw_dist_server_resume_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_init_s sl_btmesh_cmd_fw_dist_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_deinit_s sl_btmesh_cmd_fw_dist_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_setup_s +{ + uint16_t elem_index; + uint16_t appkey_index; + uint8_t ttl; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_setup_s sl_btmesh_cmd_fw_dist_client_setup_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_setup_upload_s +{ + uint16_t elem_index; + uint16_t server_address; + uint8_t ttl; + uint16_t timeout_base; + sl_bt_uuid_64_t blob_id; + uint32_t size; + uint8array fwid; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_setup_upload_s sl_btmesh_cmd_fw_dist_client_setup_upload_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_set_upload_metadata_s +{ + uint16_t elem_index; + uint8array metadata; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_set_upload_metadata_s sl_btmesh_cmd_fw_dist_client_set_upload_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_get_receivers_s +{ + uint16_t elem_index; + uint16_t dst; + uint16_t start_index; + uint16_t max_entries; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_get_receivers_s sl_btmesh_cmd_fw_dist_client_get_receivers_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_get_s +{ + uint16_t elem_index; + uint16_t dst; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_get_s sl_btmesh_cmd_fw_dist_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_start_distribution_s +{ + uint16_t elem_index; + uint16_t dst; + uint8_t dist_appkey_index; + uint8_t dist_ttl; + uint16_t dist_timeout_base; + uint8_t transfer_mode; + uint8_t update_policy; + uint16_t fw_list_index; + uint16_t group_address; + uuid_128 virtual_address; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_start_distribution_s sl_btmesh_cmd_fw_dist_client_start_distribution_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_cancel_distribution_s +{ + uint16_t elem_index; + uint16_t dst; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_cancel_distribution_s sl_btmesh_cmd_fw_dist_client_cancel_distribution_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_apply_distribution_s +{ + uint16_t elem_index; + uint16_t dst; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_apply_distribution_s sl_btmesh_cmd_fw_dist_client_apply_distribution_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_suspend_distribution_s +{ + uint16_t elem_index; + uint16_t dst; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_suspend_distribution_s sl_btmesh_cmd_fw_dist_client_suspend_distribution_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_add_receivers_s +{ + uint16_t elem_index; + uint16_t dst; + uint8array nodes; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_add_receivers_s sl_btmesh_cmd_fw_dist_client_add_receivers_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_delete_all_receivers_s +{ + uint16_t elem_index; + uint16_t dst; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_delete_all_receivers_s sl_btmesh_cmd_fw_dist_client_delete_all_receivers_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_get_capabilities_s +{ + uint16_t elem_index; + uint16_t dst; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_get_capabilities_s sl_btmesh_cmd_fw_dist_client_get_capabilities_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_get_upload_s +{ + uint16_t elem_index; + uint16_t dst; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_get_upload_s sl_btmesh_cmd_fw_dist_client_get_upload_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_start_upload_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_start_upload_s sl_btmesh_cmd_fw_dist_client_start_upload_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_cancel_upload_s +{ + uint16_t elem_index; + uint16_t dst; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_cancel_upload_s sl_btmesh_cmd_fw_dist_client_cancel_upload_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_get_fw_s +{ + uint16_t elem_index; + uint16_t dst; + uint8array fwid; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_get_fw_s sl_btmesh_cmd_fw_dist_client_get_fw_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_get_fw_by_index_s +{ + uint16_t elem_index; + uint16_t dst; + uint16_t index; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_get_fw_by_index_s sl_btmesh_cmd_fw_dist_client_get_fw_by_index_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_delete_fw_s +{ + uint16_t elem_index; + uint16_t dst; + uint8array fwid; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_delete_fw_s sl_btmesh_cmd_fw_dist_client_delete_fw_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_delete_all_fw_s +{ + uint16_t elem_index; + uint16_t dst; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_delete_all_fw_s sl_btmesh_cmd_fw_dist_client_delete_all_fw_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_prepare_oob_upload_s +{ + uint16_t elem_index; + uint8array fwid; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_prepare_oob_upload_s sl_btmesh_cmd_fw_dist_client_prepare_oob_upload_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_start_oob_upload_s +{ + uint16_t elem_index; + uint16_t dst; + uint16_t appkey_index; + uint8_t ttl; + uint8array uri; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_start_oob_upload_s sl_btmesh_cmd_fw_dist_client_start_oob_upload_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_suspend_upload_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_suspend_upload_s sl_btmesh_cmd_fw_dist_client_suspend_upload_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_dist_client_resume_upload_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_dist_client_resume_upload_s sl_btmesh_cmd_fw_dist_client_resume_upload_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_remote_provisioning_client_get_scan_capabilities_s +{ + uint16_t enc_netkey_index; + uint16_t server; + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_remote_provisioning_client_get_scan_capabilities_s sl_btmesh_cmd_remote_provisioning_client_get_scan_capabilities_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_remote_provisioning_client_start_scan_s +{ + uint16_t enc_netkey_index; + uint16_t server; + uint16_t elem_index; + uint8_t item_limit; + uint8_t timeout_sec; + uint8_t single_scan; + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_remote_provisioning_client_start_scan_s sl_btmesh_cmd_remote_provisioning_client_start_scan_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_remote_provisioning_client_get_scan_status_s +{ + uint16_t enc_netkey_index; + uint16_t server; + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_remote_provisioning_client_get_scan_status_s sl_btmesh_cmd_remote_provisioning_client_get_scan_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_remote_provisioning_client_stop_scan_s +{ + uint16_t enc_netkey_index; + uint16_t server; + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_remote_provisioning_client_stop_scan_s sl_btmesh_cmd_remote_provisioning_client_stop_scan_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_remote_provisioning_client_start_extended_scan_s +{ + uint16_t enc_netkey_index; + uint16_t server; + uint16_t elem_index; + uint8_t timeout_sec; + uint8_t mode; + uuid_128 uuid; + uint8array ad_types; +}); + +typedef struct sl_btmesh_cmd_remote_provisioning_client_start_extended_scan_s sl_btmesh_cmd_remote_provisioning_client_start_extended_scan_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_remote_provisioning_client_open_link_s +{ + uint16_t enc_netkey_index; + uint16_t server; + uint16_t elem_index; + uint8_t timeout_sec; + uint8_t dkri; + uuid_128 uuid; +}); + +typedef struct sl_btmesh_cmd_remote_provisioning_client_open_link_s sl_btmesh_cmd_remote_provisioning_client_open_link_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_remote_provisioning_client_get_link_status_s +{ + uint16_t enc_netkey_index; + uint16_t server; + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_remote_provisioning_client_get_link_status_s sl_btmesh_cmd_remote_provisioning_client_get_link_status_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_remote_provisioning_client_close_link_s +{ + uint16_t enc_netkey_index; + uint16_t server; + uint16_t elem_index; + uint8_t reason; +}); + +typedef struct sl_btmesh_cmd_remote_provisioning_client_close_link_s sl_btmesh_cmd_remote_provisioning_client_close_link_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_remote_provisioning_server_open_link_s +{ + uint8_t connection; +}); + +typedef struct sl_btmesh_cmd_remote_provisioning_server_open_link_s sl_btmesh_cmd_remote_provisioning_server_open_link_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_remote_provisioning_server_set_default_bearer_s +{ + uint8_t bearer; +}); + +typedef struct sl_btmesh_cmd_remote_provisioning_server_set_default_bearer_s sl_btmesh_cmd_remote_provisioning_server_set_default_bearer_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_init_s +{ + uint16_t elem_index; + uint16_t max_node_list_size; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_init_s sl_btmesh_cmd_fw_standalone_updater_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_deinit_s sl_btmesh_cmd_fw_standalone_updater_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_setup_s +{ + uint16_t elem_index; + uint32_t fw_size; + sl_bt_uuid_64_t blob_id; + uint8array fwid; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_setup_s sl_btmesh_cmd_fw_standalone_updater_setup_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_set_metadata_s +{ + uint16_t elem_index; + uint8array metadata; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_set_metadata_s sl_btmesh_cmd_fw_standalone_updater_set_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_set_multicast_threshold_s +{ + uint16_t elem_index; + uint16_t multicast_threshold; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_set_multicast_threshold_s sl_btmesh_cmd_fw_standalone_updater_set_multicast_threshold_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_add_receiver_s +{ + uint16_t elem_index; + uint16_t address; + uint8_t fw_index; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_add_receiver_s sl_btmesh_cmd_fw_standalone_updater_add_receiver_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_delete_all_receivers_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_delete_all_receivers_s sl_btmesh_cmd_fw_standalone_updater_delete_all_receivers_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_start_s +{ + uint16_t elem_index; + uint16_t dist_appkey_index; + uint8_t dist_ttl; + uint16_t dist_timeout_base; + uint8_t transfer_mode; + uint16_t group_address; + uuid_128 virtual_address; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_start_s sl_btmesh_cmd_fw_standalone_updater_start_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_execute_distribution_step_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_execute_distribution_step_s sl_btmesh_cmd_fw_standalone_updater_execute_distribution_step_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_apply_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_apply_s sl_btmesh_cmd_fw_standalone_updater_apply_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_get_state_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_get_state_s sl_btmesh_cmd_fw_standalone_updater_get_state_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_index_s +{ + uint16_t elem_index; + uint16_t entry_index; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_index_s sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_index_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_address_s +{ + uint16_t elem_index; + uint16_t node_address; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_address_s sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_address_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_fw_standalone_updater_cancel_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_fw_standalone_updater_cancel_s sl_btmesh_cmd_fw_standalone_updater_cancel_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_ncp_fw_list_init_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_ncp_fw_list_init_s sl_btmesh_cmd_ncp_fw_list_init_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_ncp_fw_list_deinit_s +{ + uint16_t elem_index; +}); + +typedef struct sl_btmesh_cmd_ncp_fw_list_deinit_s sl_btmesh_cmd_ncp_fw_list_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_ncp_fw_list_get_fw_info_by_index_s +{ + uint16_t elem_index; + uint16_t index; +}); + +typedef struct sl_btmesh_cmd_ncp_fw_list_get_fw_info_by_index_s sl_btmesh_cmd_ncp_fw_list_get_fw_info_by_index_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_ncp_fw_list_get_fw_metadata_by_index_s +{ + uint16_t elem_index; + uint16_t index; +}); + +typedef struct sl_btmesh_cmd_ncp_fw_list_get_fw_metadata_by_index_s sl_btmesh_cmd_ncp_fw_list_get_fw_metadata_by_index_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_ncp_fw_list_add_fw_s +{ + uint16_t elem_index; + uint32_t size; + sl_bt_uuid_64_t blob_id; + uint8array fwid; +}); + +typedef struct sl_btmesh_cmd_ncp_fw_list_add_fw_s sl_btmesh_cmd_ncp_fw_list_add_fw_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_ncp_fw_list_set_fw_metadata_s +{ + uint16_t elem_index; + uint16_t fw_list_index; + uint8array metadata; +}); + +typedef struct sl_btmesh_cmd_ncp_fw_list_set_fw_metadata_s sl_btmesh_cmd_ncp_fw_list_set_fw_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sar_config_client_get_sar_transmitter_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_sar_config_client_get_sar_transmitter_s sl_btmesh_cmd_sar_config_client_get_sar_transmitter_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sar_config_client_set_sar_transmitter_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t segment_interval_step; + uint8_t unicast_retrans_count; + uint8_t unicast_retrans_wo_progress_count; + uint16_t unicast_retrans_interval_step; + uint16_t unicast_retrans_interval_increment; + uint8_t multicast_retrans_count; + uint16_t multicast_retrans_interval_step; +}); + +typedef struct sl_btmesh_cmd_sar_config_client_set_sar_transmitter_s sl_btmesh_cmd_sar_config_client_set_sar_transmitter_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sar_config_client_get_sar_receiver_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_sar_config_client_get_sar_receiver_s sl_btmesh_cmd_sar_config_client_get_sar_receiver_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sar_config_client_set_sar_receiver_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t segments_threshold; + uint8_t ack_delay_increment; + uint32_t discard_timeout; + uint8_t segment_interval_step; + uint8_t ack_retrans_count; +}); + +typedef struct sl_btmesh_cmd_sar_config_client_set_sar_receiver_s sl_btmesh_cmd_sar_config_client_set_sar_receiver_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sar_config_server_set_sar_transmitter_s +{ + uint8_t segment_interval_step; + uint8_t unicast_retrans_count; + uint8_t unicast_retrans_wo_progress_count; + uint16_t unicast_retrans_interval_step; + uint16_t unicast_retrans_interval_increment; + uint8_t multicast_retrans_count; + uint16_t multicast_retrans_interval_step; +}); + +typedef struct sl_btmesh_cmd_sar_config_server_set_sar_transmitter_s sl_btmesh_cmd_sar_config_server_set_sar_transmitter_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_sar_config_server_set_sar_receiver_s +{ + uint8_t segments_threshold; + uint8_t ack_delay_increment; + uint32_t discard_timeout; + uint8_t segment_interval_step; + uint8_t ack_retrans_count; +}); + +typedef struct sl_btmesh_cmd_sar_config_server_set_sar_receiver_s sl_btmesh_cmd_sar_config_server_set_sar_receiver_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_private_beacon_client_get_beacon_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_private_beacon_client_get_beacon_s sl_btmesh_cmd_private_beacon_client_get_beacon_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_private_beacon_client_set_beacon_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t state; + uint16_t random_update_steps; +}); + +typedef struct sl_btmesh_cmd_private_beacon_client_set_beacon_s sl_btmesh_cmd_private_beacon_client_set_beacon_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_private_beacon_client_get_gatt_proxy_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_private_beacon_client_get_gatt_proxy_s sl_btmesh_cmd_private_beacon_client_get_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_private_beacon_client_set_gatt_proxy_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t state; +}); + +typedef struct sl_btmesh_cmd_private_beacon_client_set_gatt_proxy_s sl_btmesh_cmd_private_beacon_client_set_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_private_beacon_client_get_identity_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t netkey_index; +}); + +typedef struct sl_btmesh_cmd_private_beacon_client_get_identity_s sl_btmesh_cmd_private_beacon_client_get_identity_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_private_beacon_client_set_identity_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint16_t netkey_index; + uint8_t state; +}); + +typedef struct sl_btmesh_cmd_private_beacon_client_set_identity_s sl_btmesh_cmd_private_beacon_client_set_identity_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lcd_client_get_composition_data_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t page_number; + uint16_t offset; +}); + +typedef struct sl_btmesh_cmd_lcd_client_get_composition_data_s sl_btmesh_cmd_lcd_client_get_composition_data_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_lcd_client_get_metadata_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t page_number; + uint16_t offset; +}); + +typedef struct sl_btmesh_cmd_lcd_client_get_metadata_s sl_btmesh_cmd_lcd_client_get_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; +}); + +typedef struct sl_btmesh_cmd_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_s sl_btmesh_cmd_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_s +{ + uint16_t enc_netkey_index; + uint16_t server_address; + uint8_t value; +}); + +typedef struct sl_btmesh_cmd_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_s sl_btmesh_cmd_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_solicitation_config_client_clear_items_s +{ + uint16_t dst; + uint16_t appkey_index; + uint16_t range_start; + uint8_t length_present; + uint8_t range_length; + uint8_t response_required; +}); + +typedef struct sl_btmesh_cmd_solicitation_config_client_clear_items_s sl_btmesh_cmd_solicitation_config_client_clear_items_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_silabs_config_server_set_tx_s +{ + uint8_t phy; + uint32_t options; +}); + +typedef struct sl_btmesh_cmd_silabs_config_server_set_tx_s sl_btmesh_cmd_silabs_config_server_set_tx_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_silabs_config_server_set_model_enable_s +{ + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; + uint16_t value; +}); + +typedef struct sl_btmesh_cmd_silabs_config_server_set_model_enable_s sl_btmesh_cmd_silabs_config_server_set_model_enable_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_silabs_config_server_get_model_enable_s +{ + uint8_t elem_index; + uint16_t vendor_id; + uint16_t model_id; +}); + +typedef struct sl_btmesh_cmd_silabs_config_server_get_model_enable_s sl_btmesh_cmd_silabs_config_server_get_model_enable_t; + + +PACKSTRUCT( struct sl_btmesh_cmd_silabs_config_server_set_network_pdu_s +{ + uint16_t max_size; +}); + +typedef struct sl_btmesh_cmd_silabs_config_server_set_network_pdu_s sl_btmesh_cmd_silabs_config_server_set_network_pdu_t; + + + + +PACKSTRUCT( struct sl_btmesh_rsp_node_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_init_s sl_btmesh_rsp_node_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_exportable_keys_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_exportable_keys_s sl_btmesh_rsp_node_set_exportable_keys_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_start_unprov_beaconing_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_start_unprov_beaconing_s sl_btmesh_rsp_node_start_unprov_beaconing_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_stop_unprov_beaconing_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_stop_unprov_beaconing_s sl_btmesh_rsp_node_stop_unprov_beaconing_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_rssi_s +{ + uint16_t result; + int8_t rssi; +}); + +typedef struct sl_btmesh_rsp_node_get_rssi_s sl_btmesh_rsp_node_get_rssi_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_send_input_oob_request_response_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_send_input_oob_request_response_s sl_btmesh_rsp_node_send_input_oob_request_response_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_uuid_s +{ + uint16_t result; + uuid_128 uuid; +}); + +typedef struct sl_btmesh_rsp_node_get_uuid_s sl_btmesh_rsp_node_get_uuid_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_provisioning_data_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_provisioning_data_s sl_btmesh_rsp_node_set_provisioning_data_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_init_oob_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_init_oob_s sl_btmesh_rsp_node_init_oob_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_ivrecovery_mode_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_ivrecovery_mode_s sl_btmesh_rsp_node_set_ivrecovery_mode_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_ivrecovery_mode_s +{ + uint16_t result; + uint8_t mode; +}); + +typedef struct sl_btmesh_rsp_node_get_ivrecovery_mode_s sl_btmesh_rsp_node_get_ivrecovery_mode_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_statistics_s +{ + uint16_t result; + uint8array statistics; +}); + +typedef struct sl_btmesh_rsp_node_get_statistics_s sl_btmesh_rsp_node_get_statistics_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_clear_statistics_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_clear_statistics_s sl_btmesh_rsp_node_clear_statistics_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_net_relay_delay_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_net_relay_delay_s sl_btmesh_rsp_node_set_net_relay_delay_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_net_relay_delay_s +{ + uint16_t result; + uint8_t min_ms; + uint8_t max_ms; +}); + +typedef struct sl_btmesh_rsp_node_get_net_relay_delay_s sl_btmesh_rsp_node_get_net_relay_delay_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_ivupdate_state_s +{ + uint16_t result; + uint32_t iv_index; + uint8_t state; +}); + +typedef struct sl_btmesh_rsp_node_get_ivupdate_state_s sl_btmesh_rsp_node_get_ivupdate_state_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_request_ivupdate_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_request_ivupdate_s sl_btmesh_rsp_node_request_ivupdate_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_seq_remaining_s +{ + uint16_t result; + uint32_t count; +}); + +typedef struct sl_btmesh_rsp_node_get_seq_remaining_s sl_btmesh_rsp_node_get_seq_remaining_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_save_replay_protection_list_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_save_replay_protection_list_s sl_btmesh_rsp_node_save_replay_protection_list_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_uuid_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_uuid_s sl_btmesh_rsp_node_set_uuid_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_replay_protection_list_status_s +{ + uint16_t result; + uint16_t total_entries; + uint16_t unsaved_entries; +}); + +typedef struct sl_btmesh_rsp_node_get_replay_protection_list_status_s sl_btmesh_rsp_node_get_replay_protection_list_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_element_address_s +{ + uint16_t result; + uint16_t address; +}); + +typedef struct sl_btmesh_rsp_node_get_element_address_s sl_btmesh_rsp_node_get_element_address_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_send_static_oob_request_response_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_send_static_oob_request_response_s sl_btmesh_rsp_node_send_static_oob_request_response_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_reset_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_reset_s sl_btmesh_rsp_node_reset_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_beacon_reporting_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_beacon_reporting_s sl_btmesh_rsp_node_set_beacon_reporting_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_iv_update_age_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_iv_update_age_s sl_btmesh_rsp_node_set_iv_update_age_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_key_count_s +{ + uint16_t result; + uint32_t count; +}); + +typedef struct sl_btmesh_rsp_node_get_key_count_s sl_btmesh_rsp_node_get_key_count_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_key_s +{ + uint16_t result; + uint16_t id; + uint16_t netkey_index; + aes_key_128 key; +}); + +typedef struct sl_btmesh_rsp_node_get_key_s sl_btmesh_rsp_node_get_key_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_networks_s +{ + uint16_t result; + uint8array networks; +}); + +typedef struct sl_btmesh_rsp_node_get_networks_s sl_btmesh_rsp_node_get_networks_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_element_seqnum_s +{ + uint16_t result; + uint32_t seqnum; +}); + +typedef struct sl_btmesh_rsp_node_get_element_seqnum_s sl_btmesh_rsp_node_get_element_seqnum_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_model_option_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_model_option_s sl_btmesh_rsp_node_set_model_option_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_local_dcd_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_get_local_dcd_s sl_btmesh_rsp_node_get_local_dcd_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_power_off_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_power_off_s sl_btmesh_rsp_node_power_off_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_adv_phy_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_adv_phy_s sl_btmesh_rsp_node_set_adv_phy_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_adv_phy_s +{ + uint16_t result; + uint8_t phy; +}); + +typedef struct sl_btmesh_rsp_node_get_adv_phy_s sl_btmesh_rsp_node_get_adv_phy_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_provisioning_algorithms_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_provisioning_algorithms_s sl_btmesh_rsp_node_set_provisioning_algorithms_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_init_provisioning_records_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_init_provisioning_records_s sl_btmesh_rsp_node_init_provisioning_records_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_unprov_beaconing_adv_interval_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_unprov_beaconing_adv_interval_s sl_btmesh_rsp_node_set_unprov_beaconing_adv_interval_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_proxy_service_adv_interval_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_proxy_service_adv_interval_s sl_btmesh_rsp_node_set_proxy_service_adv_interval_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_provisioning_service_adv_interval_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_provisioning_service_adv_interval_s sl_btmesh_rsp_node_set_provisioning_service_adv_interval_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_local_model_metadata_page_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_get_local_model_metadata_page_s sl_btmesh_rsp_node_get_local_model_metadata_page_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_save_proxy_solicitation_rpl_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_save_proxy_solicitation_rpl_s sl_btmesh_rsp_node_save_proxy_solicitation_rpl_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_proxy_solicitation_rpl_status_s +{ + uint16_t result; + uint16_t total_entries; + uint16_t unsaved_entries; +}); + +typedef struct sl_btmesh_rsp_node_get_proxy_solicitation_rpl_status_s sl_btmesh_rsp_node_get_proxy_solicitation_rpl_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_set_oob_uri_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_node_set_oob_uri_s sl_btmesh_rsp_node_set_oob_uri_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_node_get_oob_uri_s +{ + uint16_t result; + uint8array uri; +}); + +typedef struct sl_btmesh_rsp_node_get_oob_uri_s sl_btmesh_rsp_node_get_oob_uri_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_init_s sl_btmesh_rsp_prov_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_scan_unprov_beacons_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_scan_unprov_beacons_s sl_btmesh_rsp_prov_scan_unprov_beacons_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_create_provisioning_session_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_create_provisioning_session_s sl_btmesh_rsp_prov_create_provisioning_session_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_set_provisioning_suspend_event_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_set_provisioning_suspend_event_s sl_btmesh_rsp_prov_set_provisioning_suspend_event_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_provision_adv_device_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_provision_adv_device_s sl_btmesh_rsp_prov_provision_adv_device_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_provision_gatt_device_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_provision_gatt_device_s sl_btmesh_rsp_prov_provision_gatt_device_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_provision_remote_device_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_provision_remote_device_s sl_btmesh_rsp_prov_provision_remote_device_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_continue_provisioning_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_continue_provisioning_s sl_btmesh_rsp_prov_continue_provisioning_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_abort_provisioning_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_abort_provisioning_s sl_btmesh_rsp_prov_abort_provisioning_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_set_device_address_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_set_device_address_s sl_btmesh_rsp_prov_set_device_address_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_create_network_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_create_network_s sl_btmesh_rsp_prov_create_network_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_create_appkey_s +{ + uint16_t result; + uint8array application_key; +}); + +typedef struct sl_btmesh_rsp_prov_create_appkey_s sl_btmesh_rsp_prov_create_appkey_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_send_oob_pkey_response_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_send_oob_pkey_response_s sl_btmesh_rsp_prov_send_oob_pkey_response_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_send_oob_auth_response_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_send_oob_auth_response_s sl_btmesh_rsp_prov_send_oob_auth_response_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_set_oob_requirements_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_set_oob_requirements_s sl_btmesh_rsp_prov_set_oob_requirements_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_start_key_refresh_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_start_key_refresh_s sl_btmesh_rsp_prov_start_key_refresh_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_get_key_refresh_exclusion_s +{ + uint16_t result; + uint8_t status; +}); + +typedef struct sl_btmesh_rsp_prov_get_key_refresh_exclusion_s sl_btmesh_rsp_prov_get_key_refresh_exclusion_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_set_key_refresh_exclusion_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_set_key_refresh_exclusion_s sl_btmesh_rsp_prov_set_key_refresh_exclusion_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_set_key_refresh_failure_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_set_key_refresh_failure_s sl_btmesh_rsp_prov_set_key_refresh_failure_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_phase_timeout_get_s +{ + uint16_t result; + uint32_t phase_timeout_s; +}); + +typedef struct sl_btmesh_rsp_prov_phase_timeout_get_s sl_btmesh_rsp_prov_phase_timeout_get_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_phase_timeout_set_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_phase_timeout_set_s sl_btmesh_rsp_prov_phase_timeout_set_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_get_ddb_entry_s +{ + uint16_t result; + aes_key_128 device_key; + uint16_t netkey_index; + uint16_t address; + uint8_t elements; +}); + +typedef struct sl_btmesh_rsp_prov_get_ddb_entry_s sl_btmesh_rsp_prov_get_ddb_entry_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_delete_ddb_entry_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_delete_ddb_entry_s sl_btmesh_rsp_prov_delete_ddb_entry_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_add_ddb_entry_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_add_ddb_entry_s sl_btmesh_rsp_prov_add_ddb_entry_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_list_ddb_entries_s +{ + uint16_t result; + uint16_t count; +}); + +typedef struct sl_btmesh_rsp_prov_list_ddb_entries_s sl_btmesh_rsp_prov_list_ddb_entries_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_initialize_network_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_initialize_network_s sl_btmesh_rsp_prov_initialize_network_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_get_key_refresh_appkey_exclusion_s +{ + uint16_t result; + uint8_t status; +}); + +typedef struct sl_btmesh_rsp_prov_get_key_refresh_appkey_exclusion_s sl_btmesh_rsp_prov_get_key_refresh_appkey_exclusion_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_set_key_refresh_appkey_exclusion_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_set_key_refresh_appkey_exclusion_s sl_btmesh_rsp_prov_set_key_refresh_appkey_exclusion_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_stop_scan_unprov_beacons_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_stop_scan_unprov_beacons_s sl_btmesh_rsp_prov_stop_scan_unprov_beacons_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_update_device_netkey_index_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_update_device_netkey_index_s sl_btmesh_rsp_prov_update_device_netkey_index_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_suspend_key_refresh_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_suspend_key_refresh_s sl_btmesh_rsp_prov_suspend_key_refresh_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_resume_key_refresh_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_resume_key_refresh_s sl_btmesh_rsp_prov_resume_key_refresh_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_get_key_refresh_phase_s +{ + uint16_t result; + uint8_t phase; +}); + +typedef struct sl_btmesh_rsp_prov_get_key_refresh_phase_s sl_btmesh_rsp_prov_get_key_refresh_phase_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_start_key_refresh_from_phase_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_start_key_refresh_from_phase_s sl_btmesh_rsp_prov_start_key_refresh_from_phase_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_flush_key_refresh_state_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_flush_key_refresh_state_s sl_btmesh_rsp_prov_flush_key_refresh_state_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_test_identity_s +{ + uint16_t result; + uint8_t match; +}); + +typedef struct sl_btmesh_rsp_prov_test_identity_s sl_btmesh_rsp_prov_test_identity_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_get_provisioning_records_list_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_get_provisioning_records_list_s sl_btmesh_rsp_prov_get_provisioning_records_list_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_get_provisioning_record_data_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_get_provisioning_record_data_s sl_btmesh_rsp_prov_get_provisioning_record_data_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_prov_init_provisioning_records_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_prov_init_provisioning_records_s sl_btmesh_rsp_prov_init_provisioning_records_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_proxy_connect_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_proxy_connect_s sl_btmesh_rsp_proxy_connect_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_proxy_disconnect_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_proxy_disconnect_s sl_btmesh_rsp_proxy_disconnect_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_proxy_set_filter_type_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_proxy_set_filter_type_s sl_btmesh_rsp_proxy_set_filter_type_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_proxy_allow_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_proxy_allow_s sl_btmesh_rsp_proxy_allow_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_proxy_deny_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_proxy_deny_s sl_btmesh_rsp_proxy_deny_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_proxy_optimisation_toggle_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_proxy_optimisation_toggle_s sl_btmesh_rsp_proxy_optimisation_toggle_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_proxy_send_solicitation_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_proxy_send_solicitation_s sl_btmesh_rsp_proxy_send_solicitation_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_client_init_s sl_btmesh_rsp_silabs_config_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_client_set_tx_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_client_set_tx_s sl_btmesh_rsp_silabs_config_client_set_tx_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_client_get_tx_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_client_get_tx_s sl_btmesh_rsp_silabs_config_client_get_tx_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_client_set_model_enable_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_client_set_model_enable_s sl_btmesh_rsp_silabs_config_client_set_model_enable_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_client_get_model_enable_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_client_get_model_enable_s sl_btmesh_rsp_silabs_config_client_get_model_enable_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_client_set_network_pdu_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_client_set_network_pdu_s sl_btmesh_rsp_silabs_config_client_set_network_pdu_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_client_get_network_pdu_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_client_get_network_pdu_s sl_btmesh_rsp_silabs_config_client_get_network_pdu_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_client_deinit_s sl_btmesh_rsp_silabs_config_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_vendor_model_send_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_vendor_model_send_s sl_btmesh_rsp_vendor_model_send_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_vendor_model_set_publication_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_vendor_model_set_publication_s sl_btmesh_rsp_vendor_model_set_publication_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_vendor_model_clear_publication_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_vendor_model_clear_publication_s sl_btmesh_rsp_vendor_model_clear_publication_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_vendor_model_publish_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_vendor_model_publish_s sl_btmesh_rsp_vendor_model_publish_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_vendor_model_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_vendor_model_init_s sl_btmesh_rsp_vendor_model_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_vendor_model_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_vendor_model_deinit_s sl_btmesh_rsp_vendor_model_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_vendor_model_send_tracked_s +{ + uint16_t result; + uint16_t handle; +}); + +typedef struct sl_btmesh_rsp_vendor_model_send_tracked_s sl_btmesh_rsp_vendor_model_send_tracked_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_vendor_model_set_publication_tracked_s +{ + uint16_t result; + uint16_t handle; +}); + +typedef struct sl_btmesh_rsp_vendor_model_set_publication_tracked_s sl_btmesh_rsp_vendor_model_set_publication_tracked_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_client_init_s sl_btmesh_rsp_health_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_client_deinit_s sl_btmesh_rsp_health_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_client_get_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_client_get_s sl_btmesh_rsp_health_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_client_clear_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_client_clear_s sl_btmesh_rsp_health_client_clear_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_client_test_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_client_test_s sl_btmesh_rsp_health_client_test_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_client_get_period_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_client_get_period_s sl_btmesh_rsp_health_client_get_period_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_client_set_period_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_client_set_period_s sl_btmesh_rsp_health_client_set_period_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_client_get_attention_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_client_get_attention_s sl_btmesh_rsp_health_client_get_attention_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_client_set_attention_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_client_set_attention_s sl_btmesh_rsp_health_client_set_attention_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_server_set_fault_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_server_set_fault_s sl_btmesh_rsp_health_server_set_fault_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_server_clear_fault_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_server_clear_fault_s sl_btmesh_rsp_health_server_clear_fault_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_health_server_send_test_response_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_health_server_send_test_response_s sl_btmesh_rsp_health_server_send_test_response_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_get_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_get_s sl_btmesh_rsp_generic_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_set_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_set_s sl_btmesh_rsp_generic_client_set_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_publish_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_publish_s sl_btmesh_rsp_generic_client_publish_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_get_params_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_get_params_s sl_btmesh_rsp_generic_client_get_params_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_s sl_btmesh_rsp_generic_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_common_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_common_s sl_btmesh_rsp_generic_client_init_common_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_on_off_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_on_off_s sl_btmesh_rsp_generic_client_init_on_off_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_level_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_level_s sl_btmesh_rsp_generic_client_init_level_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_default_transition_time_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_default_transition_time_s sl_btmesh_rsp_generic_client_init_default_transition_time_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_power_on_off_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_power_on_off_s sl_btmesh_rsp_generic_client_init_power_on_off_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_power_level_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_power_level_s sl_btmesh_rsp_generic_client_init_power_level_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_battery_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_battery_s sl_btmesh_rsp_generic_client_init_battery_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_location_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_location_s sl_btmesh_rsp_generic_client_init_location_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_property_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_property_s sl_btmesh_rsp_generic_client_init_property_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_lightness_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_lightness_s sl_btmesh_rsp_generic_client_init_lightness_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_ctl_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_ctl_s sl_btmesh_rsp_generic_client_init_ctl_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_client_init_hsl_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_client_init_hsl_s sl_btmesh_rsp_generic_client_init_hsl_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_respond_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_respond_s sl_btmesh_rsp_generic_server_respond_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_update_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_update_s sl_btmesh_rsp_generic_server_update_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_publish_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_publish_s sl_btmesh_rsp_generic_server_publish_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_s sl_btmesh_rsp_generic_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_common_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_common_s sl_btmesh_rsp_generic_server_init_common_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_on_off_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_on_off_s sl_btmesh_rsp_generic_server_init_on_off_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_level_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_level_s sl_btmesh_rsp_generic_server_init_level_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_default_transition_time_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_default_transition_time_s sl_btmesh_rsp_generic_server_init_default_transition_time_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_power_on_off_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_power_on_off_s sl_btmesh_rsp_generic_server_init_power_on_off_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_power_level_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_power_level_s sl_btmesh_rsp_generic_server_init_power_level_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_battery_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_battery_s sl_btmesh_rsp_generic_server_init_battery_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_location_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_location_s sl_btmesh_rsp_generic_server_init_location_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_property_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_property_s sl_btmesh_rsp_generic_server_init_property_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_lightness_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_lightness_s sl_btmesh_rsp_generic_server_init_lightness_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_ctl_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_ctl_s sl_btmesh_rsp_generic_server_init_ctl_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_init_hsl_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_generic_server_init_hsl_s sl_btmesh_rsp_generic_server_init_hsl_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_generic_server_get_cached_state_s +{ + uint16_t result; + uint32_t remaining_ms; + uint8array parameters; +}); + +typedef struct sl_btmesh_rsp_generic_server_get_cached_state_s sl_btmesh_rsp_generic_server_get_cached_state_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_nettx_s +{ + uint16_t result; + uint8_t count; + uint8_t interval; +}); + +typedef struct sl_btmesh_rsp_test_get_nettx_s sl_btmesh_rsp_test_get_nettx_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_nettx_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_nettx_s sl_btmesh_rsp_test_set_nettx_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_relay_s +{ + uint16_t result; + uint8_t enabled; + uint8_t count; + uint8_t interval; +}); + +typedef struct sl_btmesh_rsp_test_get_relay_s sl_btmesh_rsp_test_get_relay_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_relay_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_relay_s sl_btmesh_rsp_test_set_relay_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_adv_scan_params_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_adv_scan_params_s sl_btmesh_rsp_test_set_adv_scan_params_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_ivupdate_test_mode_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_ivupdate_test_mode_s sl_btmesh_rsp_test_set_ivupdate_test_mode_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_ivupdate_test_mode_s +{ + uint16_t result; + uint8_t mode; +}); + +typedef struct sl_btmesh_rsp_test_get_ivupdate_test_mode_s sl_btmesh_rsp_test_get_ivupdate_test_mode_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_segment_send_delay_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_segment_send_delay_s sl_btmesh_rsp_test_set_segment_send_delay_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_ivupdate_state_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_ivupdate_state_s sl_btmesh_rsp_test_set_ivupdate_state_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_send_beacons_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_send_beacons_s sl_btmesh_rsp_test_send_beacons_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_bind_local_model_app_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_bind_local_model_app_s sl_btmesh_rsp_test_bind_local_model_app_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_unbind_local_model_app_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_unbind_local_model_app_s sl_btmesh_rsp_test_unbind_local_model_app_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_add_local_model_sub_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_add_local_model_sub_s sl_btmesh_rsp_test_add_local_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_remove_local_model_sub_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_remove_local_model_sub_s sl_btmesh_rsp_test_remove_local_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_add_local_model_sub_va_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_add_local_model_sub_va_s sl_btmesh_rsp_test_add_local_model_sub_va_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_remove_local_model_sub_va_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_remove_local_model_sub_va_s sl_btmesh_rsp_test_remove_local_model_sub_va_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_local_model_sub_s +{ + uint16_t result; + uint8array addresses; +}); + +typedef struct sl_btmesh_rsp_test_get_local_model_sub_s sl_btmesh_rsp_test_get_local_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_local_model_pub_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_local_model_pub_s sl_btmesh_rsp_test_set_local_model_pub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_local_model_pub_va_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_local_model_pub_va_s sl_btmesh_rsp_test_set_local_model_pub_va_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_local_model_pub_s +{ + uint16_t result; + uint16_t appkey_index; + uint16_t pub_address; + uint8_t ttl; + uint8_t period; + uint8_t retrans; + uint8_t credentials; +}); + +typedef struct sl_btmesh_rsp_test_get_local_model_pub_s sl_btmesh_rsp_test_get_local_model_pub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_local_heartbeat_subscription_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_local_heartbeat_subscription_s sl_btmesh_rsp_test_set_local_heartbeat_subscription_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_local_heartbeat_subscription_s +{ + uint16_t result; + uint16_t count; + uint8_t hop_min; + uint8_t hop_max; +}); + +typedef struct sl_btmesh_rsp_test_get_local_heartbeat_subscription_s sl_btmesh_rsp_test_get_local_heartbeat_subscription_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_local_heartbeat_publication_s +{ + uint16_t result; + uint16_t publication_address; + uint8_t count; + uint8_t period_log; + uint8_t ttl; + uint16_t features; + uint16_t publication_netkey_index; +}); + +typedef struct sl_btmesh_rsp_test_get_local_heartbeat_publication_s sl_btmesh_rsp_test_get_local_heartbeat_publication_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_local_heartbeat_publication_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_local_heartbeat_publication_s sl_btmesh_rsp_test_set_local_heartbeat_publication_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_local_config_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_local_config_s sl_btmesh_rsp_test_set_local_config_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_local_config_s +{ + uint16_t result; + uint8array data; +}); + +typedef struct sl_btmesh_rsp_test_get_local_config_s sl_btmesh_rsp_test_get_local_config_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_add_local_key_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_add_local_key_s sl_btmesh_rsp_test_add_local_key_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_remove_local_key_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_remove_local_key_s sl_btmesh_rsp_test_remove_local_key_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_update_local_key_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_update_local_key_s sl_btmesh_rsp_test_update_local_key_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_sar_config_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_sar_config_s sl_btmesh_rsp_test_set_sar_config_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_adv_bearer_state_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_adv_bearer_state_s sl_btmesh_rsp_test_set_adv_bearer_state_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_prov_get_device_key_s +{ + uint16_t result; + aes_key_128 device_key; +}); + +typedef struct sl_btmesh_rsp_test_prov_get_device_key_s sl_btmesh_rsp_test_prov_get_device_key_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_prov_prepare_key_refresh_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_prov_prepare_key_refresh_s sl_btmesh_rsp_test_prov_prepare_key_refresh_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_cancel_segmented_tx_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_cancel_segmented_tx_s sl_btmesh_rsp_test_cancel_segmented_tx_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_iv_index_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_iv_index_s sl_btmesh_rsp_test_set_iv_index_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_element_seqnum_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_element_seqnum_s sl_btmesh_rsp_test_set_element_seqnum_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_model_option_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_model_option_s sl_btmesh_rsp_test_set_model_option_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_local_model_app_bindings_s +{ + uint16_t result; + uint8array appkeys; +}); + +typedef struct sl_btmesh_rsp_test_get_local_model_app_bindings_s sl_btmesh_rsp_test_get_local_model_app_bindings_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_replay_protection_list_entry_s +{ + uint16_t result; + uint32_t seq; + uint32_t seq_ivindex; +}); + +typedef struct sl_btmesh_rsp_test_get_replay_protection_list_entry_s sl_btmesh_rsp_test_get_replay_protection_list_entry_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_clear_replay_protection_list_entry_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_clear_replay_protection_list_entry_s sl_btmesh_rsp_test_clear_replay_protection_list_entry_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_replay_protection_list_diagnostics_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_replay_protection_list_diagnostics_s sl_btmesh_rsp_test_set_replay_protection_list_diagnostics_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_model_option_s +{ + uint16_t result; + uint32_t value; +}); + +typedef struct sl_btmesh_rsp_test_get_model_option_s sl_btmesh_rsp_test_get_model_option_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_default_ttl_s +{ + uint16_t result; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_get_default_ttl_s sl_btmesh_rsp_test_get_default_ttl_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_default_ttl_s +{ + uint16_t result; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_set_default_ttl_s sl_btmesh_rsp_test_set_default_ttl_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_gatt_proxy_s +{ + uint16_t result; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_get_gatt_proxy_s sl_btmesh_rsp_test_get_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_gatt_proxy_s +{ + uint16_t result; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_set_gatt_proxy_s sl_btmesh_rsp_test_set_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_identity_s +{ + uint16_t result; + uint16_t netkey_index; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_get_identity_s sl_btmesh_rsp_test_get_identity_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_identity_s +{ + uint16_t result; + uint16_t netkey_index; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_set_identity_s sl_btmesh_rsp_test_set_identity_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_friend_s +{ + uint16_t result; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_get_friend_s sl_btmesh_rsp_test_get_friend_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_friend_s +{ + uint16_t result; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_set_friend_s sl_btmesh_rsp_test_set_friend_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_beacon_s +{ + uint16_t result; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_get_beacon_s sl_btmesh_rsp_test_get_beacon_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_beacon_s +{ + uint16_t result; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_set_beacon_s sl_btmesh_rsp_test_set_beacon_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_get_private_identity_s +{ + uint16_t result; + uint16_t netkey_index; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_get_private_identity_s sl_btmesh_rsp_test_get_private_identity_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_private_identity_s +{ + uint16_t result; + uint16_t netkey_index; + uint8_t value; +}); + +typedef struct sl_btmesh_rsp_test_set_private_identity_s sl_btmesh_rsp_test_set_private_identity_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_adv_provisioning_bearer_timing_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_adv_provisioning_bearer_timing_s sl_btmesh_rsp_test_set_adv_provisioning_bearer_timing_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_update_keyrefresh_phase_s +{ + uint16_t result; + uint8_t phase; +}); + +typedef struct sl_btmesh_rsp_test_update_keyrefresh_phase_s sl_btmesh_rsp_test_update_keyrefresh_phase_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_send_private_beacons_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_send_private_beacons_s sl_btmesh_rsp_test_send_private_beacons_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_adv_params_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_adv_params_s sl_btmesh_rsp_test_set_adv_params_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_set_scan_params_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_set_scan_params_s sl_btmesh_rsp_test_set_scan_params_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_test_adv_use_random_address_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_test_adv_use_random_address_s sl_btmesh_rsp_test_adv_use_random_address_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lpn_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lpn_init_s sl_btmesh_rsp_lpn_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lpn_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lpn_deinit_s sl_btmesh_rsp_lpn_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lpn_establish_friendship_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lpn_establish_friendship_s sl_btmesh_rsp_lpn_establish_friendship_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lpn_poll_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lpn_poll_s sl_btmesh_rsp_lpn_poll_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lpn_terminate_friendship_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lpn_terminate_friendship_s sl_btmesh_rsp_lpn_terminate_friendship_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lpn_config_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lpn_config_s sl_btmesh_rsp_lpn_config_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_friend_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_friend_init_s sl_btmesh_rsp_friend_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_friend_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_friend_deinit_s sl_btmesh_rsp_friend_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_cancel_request_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_config_client_cancel_request_s sl_btmesh_rsp_config_client_cancel_request_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_request_status_s +{ + uint16_t result; + uint16_t server_address; + uint16_t opcode; + uint32_t age_ms; + uint32_t remaining_ms; + uint8_t friend_acked; +}); + +typedef struct sl_btmesh_rsp_config_client_get_request_status_s sl_btmesh_rsp_config_client_get_request_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_default_timeout_s +{ + uint16_t result; + uint32_t timeout_ms; + uint32_t lpn_timeout_ms; +}); + +typedef struct sl_btmesh_rsp_config_client_get_default_timeout_s sl_btmesh_rsp_config_client_get_default_timeout_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_default_timeout_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_config_client_set_default_timeout_s sl_btmesh_rsp_config_client_set_default_timeout_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_add_netkey_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_add_netkey_s sl_btmesh_rsp_config_client_add_netkey_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_remove_netkey_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_remove_netkey_s sl_btmesh_rsp_config_client_remove_netkey_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_list_netkeys_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_list_netkeys_s sl_btmesh_rsp_config_client_list_netkeys_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_add_appkey_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_add_appkey_s sl_btmesh_rsp_config_client_add_appkey_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_remove_appkey_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_remove_appkey_s sl_btmesh_rsp_config_client_remove_appkey_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_list_appkeys_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_list_appkeys_s sl_btmesh_rsp_config_client_list_appkeys_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_bind_model_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_bind_model_s sl_btmesh_rsp_config_client_bind_model_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_unbind_model_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_unbind_model_s sl_btmesh_rsp_config_client_unbind_model_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_list_bindings_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_list_bindings_s sl_btmesh_rsp_config_client_list_bindings_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_model_pub_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_model_pub_s sl_btmesh_rsp_config_client_get_model_pub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_model_pub_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_model_pub_s sl_btmesh_rsp_config_client_set_model_pub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_model_pub_va_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_model_pub_va_s sl_btmesh_rsp_config_client_set_model_pub_va_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_add_model_sub_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_add_model_sub_s sl_btmesh_rsp_config_client_add_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_add_model_sub_va_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_add_model_sub_va_s sl_btmesh_rsp_config_client_add_model_sub_va_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_remove_model_sub_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_remove_model_sub_s sl_btmesh_rsp_config_client_remove_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_remove_model_sub_va_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_remove_model_sub_va_s sl_btmesh_rsp_config_client_remove_model_sub_va_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_model_sub_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_model_sub_s sl_btmesh_rsp_config_client_set_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_model_sub_va_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_model_sub_va_s sl_btmesh_rsp_config_client_set_model_sub_va_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_clear_model_sub_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_clear_model_sub_s sl_btmesh_rsp_config_client_clear_model_sub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_list_subs_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_list_subs_s sl_btmesh_rsp_config_client_list_subs_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_heartbeat_pub_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_heartbeat_pub_s sl_btmesh_rsp_config_client_get_heartbeat_pub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_heartbeat_pub_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_heartbeat_pub_s sl_btmesh_rsp_config_client_set_heartbeat_pub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_heartbeat_sub_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_heartbeat_sub_s sl_btmesh_rsp_config_client_get_heartbeat_sub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_heartbeat_sub_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_heartbeat_sub_s sl_btmesh_rsp_config_client_set_heartbeat_sub_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_beacon_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_beacon_s sl_btmesh_rsp_config_client_get_beacon_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_beacon_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_beacon_s sl_btmesh_rsp_config_client_set_beacon_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_default_ttl_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_default_ttl_s sl_btmesh_rsp_config_client_get_default_ttl_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_default_ttl_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_default_ttl_s sl_btmesh_rsp_config_client_set_default_ttl_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_gatt_proxy_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_gatt_proxy_s sl_btmesh_rsp_config_client_get_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_gatt_proxy_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_gatt_proxy_s sl_btmesh_rsp_config_client_set_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_relay_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_relay_s sl_btmesh_rsp_config_client_get_relay_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_relay_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_relay_s sl_btmesh_rsp_config_client_set_relay_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_network_transmit_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_network_transmit_s sl_btmesh_rsp_config_client_get_network_transmit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_network_transmit_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_network_transmit_s sl_btmesh_rsp_config_client_set_network_transmit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_identity_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_identity_s sl_btmesh_rsp_config_client_get_identity_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_identity_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_identity_s sl_btmesh_rsp_config_client_set_identity_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_friend_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_friend_s sl_btmesh_rsp_config_client_get_friend_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_friend_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_set_friend_s sl_btmesh_rsp_config_client_set_friend_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_key_refresh_phase_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_key_refresh_phase_s sl_btmesh_rsp_config_client_get_key_refresh_phase_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_lpn_polltimeout_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_lpn_polltimeout_s sl_btmesh_rsp_config_client_get_lpn_polltimeout_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_get_dcd_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_get_dcd_s sl_btmesh_rsp_config_client_get_dcd_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_reset_node_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_config_client_reset_node_s sl_btmesh_rsp_config_client_reset_node_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_config_client_set_request_timeout_for_node_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_config_client_set_request_timeout_for_node_s sl_btmesh_rsp_config_client_set_request_timeout_for_node_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_client_init_s sl_btmesh_rsp_mbt_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_setup_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_client_setup_s sl_btmesh_rsp_mbt_client_setup_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_query_information_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_client_query_information_s sl_btmesh_rsp_mbt_client_query_information_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_get_server_status_s +{ + uint16_t result; + uint16_t server_address; + uint8_t current_procedure_status; + uint16_t rx_blocks; + uint16_t rx_chunks; +}); + +typedef struct sl_btmesh_rsp_mbt_client_get_server_status_s sl_btmesh_rsp_mbt_client_get_server_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_add_server_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_client_add_server_s sl_btmesh_rsp_mbt_client_add_server_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_start_transfer_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_client_start_transfer_s sl_btmesh_rsp_mbt_client_start_transfer_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_start_block_s +{ + uint16_t result; + uint16_t block_number; + uint32_t block_size; +}); + +typedef struct sl_btmesh_rsp_mbt_client_start_block_s sl_btmesh_rsp_mbt_client_start_block_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_send_chunk_request_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_client_send_chunk_request_rsp_s sl_btmesh_rsp_mbt_client_send_chunk_request_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_query_block_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_client_query_block_status_s sl_btmesh_rsp_mbt_client_query_block_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_get_status_s +{ + uint16_t result; + uint8_t state; + uint16_t total_blocks; + uint16_t total_chunks; +}); + +typedef struct sl_btmesh_rsp_mbt_client_get_status_s sl_btmesh_rsp_mbt_client_get_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_get_transfer_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_client_get_transfer_status_s sl_btmesh_rsp_mbt_client_get_transfer_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_cancel_transfer_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_client_cancel_transfer_s sl_btmesh_rsp_mbt_client_cancel_transfer_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_client_abort_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_client_abort_s sl_btmesh_rsp_mbt_client_abort_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_server_init_s sl_btmesh_rsp_mbt_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_server_start_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_server_start_s sl_btmesh_rsp_mbt_server_start_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_server_get_transfer_status_s +{ + uint16_t result; + uint8_t state; + sl_bt_uuid_64_t blob_id; + uint32_t blob_size; + uint16_t block_number; + uint8array blocks_missing_mask; +}); + +typedef struct sl_btmesh_rsp_mbt_server_get_transfer_status_s sl_btmesh_rsp_mbt_server_get_transfer_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_server_transfer_complete_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_server_transfer_complete_s sl_btmesh_rsp_mbt_server_transfer_complete_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_server_abort_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_server_abort_s sl_btmesh_rsp_mbt_server_abort_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_server_set_pull_mode_parameters_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_server_set_pull_mode_parameters_s sl_btmesh_rsp_mbt_server_set_pull_mode_parameters_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_mbt_server_transfer_start_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_mbt_server_transfer_start_rsp_s sl_btmesh_rsp_mbt_server_transfer_start_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_server_init_s sl_btmesh_rsp_sensor_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_server_deinit_s sl_btmesh_rsp_sensor_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_server_send_descriptor_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_server_send_descriptor_status_s sl_btmesh_rsp_sensor_server_send_descriptor_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_server_send_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_server_send_status_s sl_btmesh_rsp_sensor_server_send_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_server_send_column_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_server_send_column_status_s sl_btmesh_rsp_sensor_server_send_column_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_server_send_series_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_server_send_series_status_s sl_btmesh_rsp_sensor_server_send_series_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_setup_server_send_cadence_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_setup_server_send_cadence_status_s sl_btmesh_rsp_sensor_setup_server_send_cadence_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_setup_server_send_settings_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_setup_server_send_settings_status_s sl_btmesh_rsp_sensor_setup_server_send_settings_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_setup_server_send_setting_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_setup_server_send_setting_status_s sl_btmesh_rsp_sensor_setup_server_send_setting_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_client_init_s sl_btmesh_rsp_sensor_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_client_deinit_s sl_btmesh_rsp_sensor_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_client_get_descriptor_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_client_get_descriptor_s sl_btmesh_rsp_sensor_client_get_descriptor_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_client_get_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_client_get_s sl_btmesh_rsp_sensor_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_client_get_column_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_client_get_column_s sl_btmesh_rsp_sensor_client_get_column_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_client_get_series_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_client_get_series_s sl_btmesh_rsp_sensor_client_get_series_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_client_get_cadence_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_client_get_cadence_s sl_btmesh_rsp_sensor_client_get_cadence_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_client_set_cadence_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_client_set_cadence_s sl_btmesh_rsp_sensor_client_set_cadence_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_client_get_settings_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_client_get_settings_s sl_btmesh_rsp_sensor_client_get_settings_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_client_get_setting_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_client_get_setting_s sl_btmesh_rsp_sensor_client_get_setting_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sensor_client_set_setting_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sensor_client_set_setting_s sl_btmesh_rsp_sensor_client_set_setting_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_client_init_s sl_btmesh_rsp_fw_update_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_client_deinit_s sl_btmesh_rsp_fw_update_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_client_get_info_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_client_get_info_s sl_btmesh_rsp_fw_update_client_get_info_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_client_get_update_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_client_get_update_s sl_btmesh_rsp_fw_update_client_get_update_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_client_start_update_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_client_start_update_s sl_btmesh_rsp_fw_update_client_start_update_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_client_cancel_update_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_client_cancel_update_s sl_btmesh_rsp_fw_update_client_cancel_update_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_client_apply_update_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_client_apply_update_s sl_btmesh_rsp_fw_update_client_apply_update_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_client_check_metadata_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_client_check_metadata_s sl_btmesh_rsp_fw_update_client_check_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_client_init_s sl_btmesh_rsp_lc_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_client_get_mode_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_client_get_mode_s sl_btmesh_rsp_lc_client_get_mode_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_client_set_mode_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_client_set_mode_s sl_btmesh_rsp_lc_client_set_mode_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_client_get_om_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_client_get_om_s sl_btmesh_rsp_lc_client_get_om_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_client_set_om_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_client_set_om_s sl_btmesh_rsp_lc_client_set_om_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_client_get_light_onoff_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_client_get_light_onoff_s sl_btmesh_rsp_lc_client_get_light_onoff_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_client_set_light_onoff_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_client_set_light_onoff_s sl_btmesh_rsp_lc_client_set_light_onoff_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_client_get_property_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_client_get_property_s sl_btmesh_rsp_lc_client_get_property_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_client_set_property_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_client_set_property_s sl_btmesh_rsp_lc_client_set_property_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_server_init_s sl_btmesh_rsp_lc_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_server_deinit_s sl_btmesh_rsp_lc_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_server_update_mode_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_server_update_mode_s sl_btmesh_rsp_lc_server_update_mode_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_server_update_om_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_server_update_om_s sl_btmesh_rsp_lc_server_update_om_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_server_update_light_onoff_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_server_update_light_onoff_s sl_btmesh_rsp_lc_server_update_light_onoff_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_server_init_all_properties_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_server_init_all_properties_s sl_btmesh_rsp_lc_server_init_all_properties_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_server_set_publish_mask_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_server_set_publish_mask_s sl_btmesh_rsp_lc_server_set_publish_mask_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_server_set_regulator_interval_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_server_set_regulator_interval_s sl_btmesh_rsp_lc_server_set_regulator_interval_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_server_set_event_mask_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_server_set_event_mask_s sl_btmesh_rsp_lc_server_set_event_mask_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_server_get_lc_state_s +{ + uint16_t result; + uint8_t state; + uint32_t transition_time; +}); + +typedef struct sl_btmesh_rsp_lc_server_get_lc_state_s sl_btmesh_rsp_lc_server_get_lc_state_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lc_setup_server_update_property_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lc_setup_server_update_property_s sl_btmesh_rsp_lc_setup_server_update_property_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scene_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scene_client_init_s sl_btmesh_rsp_scene_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scene_client_get_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scene_client_get_s sl_btmesh_rsp_scene_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scene_client_get_register_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scene_client_get_register_s sl_btmesh_rsp_scene_client_get_register_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scene_client_recall_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scene_client_recall_s sl_btmesh_rsp_scene_client_recall_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scene_client_store_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scene_client_store_s sl_btmesh_rsp_scene_client_store_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scene_client_delete_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scene_client_delete_s sl_btmesh_rsp_scene_client_delete_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scene_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scene_server_init_s sl_btmesh_rsp_scene_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scene_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scene_server_deinit_s sl_btmesh_rsp_scene_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scene_server_reset_register_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scene_server_reset_register_s sl_btmesh_rsp_scene_server_reset_register_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scene_server_enable_compact_recall_events_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scene_server_enable_compact_recall_events_s sl_btmesh_rsp_scene_server_enable_compact_recall_events_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scene_setup_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scene_setup_server_init_s sl_btmesh_rsp_scene_setup_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scheduler_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scheduler_client_init_s sl_btmesh_rsp_scheduler_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scheduler_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scheduler_client_deinit_s sl_btmesh_rsp_scheduler_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scheduler_client_get_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scheduler_client_get_s sl_btmesh_rsp_scheduler_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scheduler_client_get_action_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scheduler_client_get_action_s sl_btmesh_rsp_scheduler_client_get_action_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scheduler_client_set_action_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scheduler_client_set_action_s sl_btmesh_rsp_scheduler_client_set_action_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scheduler_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scheduler_server_init_s sl_btmesh_rsp_scheduler_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scheduler_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scheduler_server_deinit_s sl_btmesh_rsp_scheduler_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scheduler_server_get_s +{ + uint16_t result; + uint16_t status; +}); + +typedef struct sl_btmesh_rsp_scheduler_server_get_s sl_btmesh_rsp_scheduler_server_get_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scheduler_server_get_action_s +{ + uint16_t result; + uint8_t index_; + uint8_t year; + uint16_t month; + uint8_t day; + uint8_t hour; + uint8_t minute; + uint8_t second; + uint8_t day_of_week; + uint8_t action; + uint32_t transition_time_ms; + uint16_t scene_number; +}); + +typedef struct sl_btmesh_rsp_scheduler_server_get_action_s sl_btmesh_rsp_scheduler_server_get_action_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_scheduler_server_set_action_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_scheduler_server_set_action_s sl_btmesh_rsp_scheduler_server_set_action_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_server_init_s sl_btmesh_rsp_fw_update_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_server_deinit_s sl_btmesh_rsp_fw_update_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_server_check_fw_metadata_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_server_check_fw_metadata_rsp_s sl_btmesh_rsp_fw_update_server_check_fw_metadata_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_server_update_start_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_server_update_start_rsp_s sl_btmesh_rsp_fw_update_server_update_start_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_server_verify_fw_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_server_verify_fw_rsp_s sl_btmesh_rsp_fw_update_server_verify_fw_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_update_server_distributor_self_update_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_update_server_distributor_self_update_rsp_s sl_btmesh_rsp_fw_update_server_distributor_self_update_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_server_init_s sl_btmesh_rsp_time_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_server_deinit_s sl_btmesh_rsp_time_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_get_time_s +{ + uint16_t result; + uint64_t tai_seconds; + uint8_t subsecond; + uint8_t uncertainty; + uint8_t time_authority; + int16_t time_zone_offset; + int32_t tai_utc_delta; +}); + +typedef struct sl_btmesh_rsp_time_server_get_time_s sl_btmesh_rsp_time_server_get_time_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_set_time_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_server_set_time_s sl_btmesh_rsp_time_server_set_time_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_get_time_zone_offset_new_s +{ + uint16_t result; + int16_t new_offset; + uint64_t tai_of_zone_change; +}); + +typedef struct sl_btmesh_rsp_time_server_get_time_zone_offset_new_s sl_btmesh_rsp_time_server_get_time_zone_offset_new_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_set_time_zone_offset_new_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_server_set_time_zone_offset_new_s sl_btmesh_rsp_time_server_set_time_zone_offset_new_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_get_tai_utc_delta_new_s +{ + uint16_t result; + int32_t new_delta; + uint64_t tai_of_delta_change; +}); + +typedef struct sl_btmesh_rsp_time_server_get_tai_utc_delta_new_s sl_btmesh_rsp_time_server_get_tai_utc_delta_new_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_set_tai_utc_delta_new_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_server_set_tai_utc_delta_new_s sl_btmesh_rsp_time_server_set_tai_utc_delta_new_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_get_time_role_s +{ + uint16_t result; + uint8_t time_role; +}); + +typedef struct sl_btmesh_rsp_time_server_get_time_role_s sl_btmesh_rsp_time_server_get_time_role_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_set_time_role_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_server_set_time_role_s sl_btmesh_rsp_time_server_set_time_role_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_get_datetime_s +{ + uint16_t result; + uint16_t year; + uint8_t month; + uint8_t day; + uint8_t hour; + uint8_t min; + uint8_t sec; + uint16_t ms; + int16_t timezone; + uint8_t day_of_week; +}); + +typedef struct sl_btmesh_rsp_time_server_get_datetime_s sl_btmesh_rsp_time_server_get_datetime_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_publish_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_server_publish_s sl_btmesh_rsp_time_server_publish_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_server_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_server_status_s sl_btmesh_rsp_time_server_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_client_init_s sl_btmesh_rsp_time_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_client_deinit_s sl_btmesh_rsp_time_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_client_get_time_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_client_get_time_s sl_btmesh_rsp_time_client_get_time_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_client_set_time_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_client_set_time_s sl_btmesh_rsp_time_client_set_time_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_client_get_time_zone_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_client_get_time_zone_s sl_btmesh_rsp_time_client_get_time_zone_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_client_set_time_zone_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_client_set_time_zone_s sl_btmesh_rsp_time_client_set_time_zone_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_client_get_tai_utc_delta_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_client_get_tai_utc_delta_s sl_btmesh_rsp_time_client_get_tai_utc_delta_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_client_set_tai_utc_delta_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_client_set_tai_utc_delta_s sl_btmesh_rsp_time_client_set_tai_utc_delta_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_client_get_time_role_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_client_get_time_role_s sl_btmesh_rsp_time_client_get_time_role_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_time_client_set_time_role_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_time_client_set_time_role_s sl_btmesh_rsp_time_client_set_time_role_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_init_s sl_btmesh_rsp_fw_dist_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_deinit_s sl_btmesh_rsp_fw_dist_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_upload_start_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_upload_start_rsp_s sl_btmesh_rsp_fw_dist_server_upload_start_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_execute_distribution_step_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_execute_distribution_step_s sl_btmesh_rsp_fw_dist_server_execute_distribution_step_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_upload_oob_start_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_upload_oob_start_rsp_s sl_btmesh_rsp_fw_dist_server_upload_oob_start_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_set_upload_oob_metadata_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_set_upload_oob_metadata_s sl_btmesh_rsp_fw_dist_server_set_upload_oob_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_set_upload_oob_image_size_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_set_upload_oob_image_size_s sl_btmesh_rsp_fw_dist_server_set_upload_oob_image_size_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_set_upload_oob_progress_s +{ + uint16_t result; + uint16_t fw_list_index; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_set_upload_oob_progress_s sl_btmesh_rsp_fw_dist_server_set_upload_oob_progress_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_get_node_status_by_index_s +{ + uint16_t result; + uint16_t address; + uint8_t retrieved_phase; + uint8_t update_server_status; + uint8_t mbt_server_status; + uint8_t transfer_progress; + uint8_t fw_index; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_get_node_status_by_index_s sl_btmesh_rsp_fw_dist_server_get_node_status_by_index_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_get_node_status_by_address_s +{ + uint16_t result; + uint16_t address; + uint8_t retrieved_phase; + uint8_t update_server_status; + uint8_t mbt_server_status; + uint8_t transfer_progress; + uint8_t fw_index; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_get_node_status_by_address_s sl_btmesh_rsp_fw_dist_server_get_node_status_by_address_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_delete_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_delete_rsp_s sl_btmesh_rsp_fw_dist_server_delete_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_dist_start_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_dist_start_rsp_s sl_btmesh_rsp_fw_dist_server_dist_start_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_set_multicast_threshold_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_set_multicast_threshold_s sl_btmesh_rsp_fw_dist_server_set_multicast_threshold_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_delete_all_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_delete_all_rsp_s sl_btmesh_rsp_fw_dist_server_delete_all_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_server_resume_rsp_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_server_resume_rsp_s sl_btmesh_rsp_fw_dist_server_resume_rsp_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_init_s sl_btmesh_rsp_fw_dist_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_deinit_s sl_btmesh_rsp_fw_dist_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_setup_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_setup_s sl_btmesh_rsp_fw_dist_client_setup_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_setup_upload_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_setup_upload_s sl_btmesh_rsp_fw_dist_client_setup_upload_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_set_upload_metadata_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_set_upload_metadata_s sl_btmesh_rsp_fw_dist_client_set_upload_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_get_receivers_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_get_receivers_s sl_btmesh_rsp_fw_dist_client_get_receivers_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_get_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_get_s sl_btmesh_rsp_fw_dist_client_get_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_start_distribution_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_start_distribution_s sl_btmesh_rsp_fw_dist_client_start_distribution_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_cancel_distribution_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_cancel_distribution_s sl_btmesh_rsp_fw_dist_client_cancel_distribution_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_apply_distribution_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_apply_distribution_s sl_btmesh_rsp_fw_dist_client_apply_distribution_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_suspend_distribution_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_suspend_distribution_s sl_btmesh_rsp_fw_dist_client_suspend_distribution_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_add_receivers_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_add_receivers_s sl_btmesh_rsp_fw_dist_client_add_receivers_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_delete_all_receivers_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_delete_all_receivers_s sl_btmesh_rsp_fw_dist_client_delete_all_receivers_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_get_capabilities_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_get_capabilities_s sl_btmesh_rsp_fw_dist_client_get_capabilities_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_get_upload_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_get_upload_s sl_btmesh_rsp_fw_dist_client_get_upload_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_start_upload_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_start_upload_s sl_btmesh_rsp_fw_dist_client_start_upload_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_cancel_upload_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_cancel_upload_s sl_btmesh_rsp_fw_dist_client_cancel_upload_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_get_fw_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_get_fw_s sl_btmesh_rsp_fw_dist_client_get_fw_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_get_fw_by_index_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_get_fw_by_index_s sl_btmesh_rsp_fw_dist_client_get_fw_by_index_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_delete_fw_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_delete_fw_s sl_btmesh_rsp_fw_dist_client_delete_fw_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_delete_all_fw_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_delete_all_fw_s sl_btmesh_rsp_fw_dist_client_delete_all_fw_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_prepare_oob_upload_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_prepare_oob_upload_s sl_btmesh_rsp_fw_dist_client_prepare_oob_upload_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_start_oob_upload_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_start_oob_upload_s sl_btmesh_rsp_fw_dist_client_start_oob_upload_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_suspend_upload_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_suspend_upload_s sl_btmesh_rsp_fw_dist_client_suspend_upload_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_dist_client_resume_upload_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_dist_client_resume_upload_s sl_btmesh_rsp_fw_dist_client_resume_upload_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_client_init_s sl_btmesh_rsp_remote_provisioning_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_client_get_scan_capabilities_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_client_get_scan_capabilities_s sl_btmesh_rsp_remote_provisioning_client_get_scan_capabilities_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_client_start_scan_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_client_start_scan_s sl_btmesh_rsp_remote_provisioning_client_start_scan_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_client_get_scan_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_client_get_scan_status_s sl_btmesh_rsp_remote_provisioning_client_get_scan_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_client_stop_scan_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_client_stop_scan_s sl_btmesh_rsp_remote_provisioning_client_stop_scan_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_client_start_extended_scan_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_client_start_extended_scan_s sl_btmesh_rsp_remote_provisioning_client_start_extended_scan_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_client_open_link_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_client_open_link_s sl_btmesh_rsp_remote_provisioning_client_open_link_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_client_get_link_status_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_client_get_link_status_s sl_btmesh_rsp_remote_provisioning_client_get_link_status_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_client_close_link_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_client_close_link_s sl_btmesh_rsp_remote_provisioning_client_close_link_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_server_init_s sl_btmesh_rsp_remote_provisioning_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_server_open_link_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_server_open_link_s sl_btmesh_rsp_remote_provisioning_server_open_link_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_remote_provisioning_server_set_default_bearer_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_remote_provisioning_server_set_default_bearer_s sl_btmesh_rsp_remote_provisioning_server_set_default_bearer_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_init_s sl_btmesh_rsp_fw_standalone_updater_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_deinit_s sl_btmesh_rsp_fw_standalone_updater_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_setup_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_setup_s sl_btmesh_rsp_fw_standalone_updater_setup_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_set_metadata_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_set_metadata_s sl_btmesh_rsp_fw_standalone_updater_set_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_set_multicast_threshold_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_set_multicast_threshold_s sl_btmesh_rsp_fw_standalone_updater_set_multicast_threshold_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_add_receiver_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_add_receiver_s sl_btmesh_rsp_fw_standalone_updater_add_receiver_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_delete_all_receivers_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_delete_all_receivers_s sl_btmesh_rsp_fw_standalone_updater_delete_all_receivers_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_start_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_start_s sl_btmesh_rsp_fw_standalone_updater_start_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_execute_distribution_step_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_execute_distribution_step_s sl_btmesh_rsp_fw_standalone_updater_execute_distribution_step_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_apply_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_apply_s sl_btmesh_rsp_fw_standalone_updater_apply_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_get_state_s +{ + uint16_t result; + uint8_t state; + uint16_t total_nodes; + uint16_t num_active_nodes; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_get_state_s sl_btmesh_rsp_fw_standalone_updater_get_state_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_get_node_status_by_index_s +{ + uint16_t result; + uint16_t address; + uint8_t retrieved_phase; + uint8_t update_server_status; + uint8_t mbt_server_status; + uint8_t transfer_progress; + uint8_t fw_index; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_get_node_status_by_index_s sl_btmesh_rsp_fw_standalone_updater_get_node_status_by_index_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_get_node_status_by_address_s +{ + uint16_t result; + uint16_t address; + uint8_t retrieved_phase; + uint8_t update_server_status; + uint8_t mbt_server_status; + uint8_t transfer_progress; + uint8_t fw_index; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_get_node_status_by_address_s sl_btmesh_rsp_fw_standalone_updater_get_node_status_by_address_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_fw_standalone_updater_cancel_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_fw_standalone_updater_cancel_s sl_btmesh_rsp_fw_standalone_updater_cancel_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_migration_migrate_keys_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_migration_migrate_keys_s sl_btmesh_rsp_migration_migrate_keys_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_migration_migrate_ddb_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_migration_migrate_ddb_s sl_btmesh_rsp_migration_migrate_ddb_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_ncp_fw_list_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_ncp_fw_list_init_s sl_btmesh_rsp_ncp_fw_list_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_ncp_fw_list_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_ncp_fw_list_deinit_s sl_btmesh_rsp_ncp_fw_list_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_ncp_fw_list_get_fw_info_by_index_s +{ + uint16_t result; + uint32_t size; + sl_bt_uuid_64_t blob_id; + uint8array fwid; +}); + +typedef struct sl_btmesh_rsp_ncp_fw_list_get_fw_info_by_index_s sl_btmesh_rsp_ncp_fw_list_get_fw_info_by_index_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_ncp_fw_list_get_fw_metadata_by_index_s +{ + uint16_t result; + uint8array metadata; +}); + +typedef struct sl_btmesh_rsp_ncp_fw_list_get_fw_metadata_by_index_s sl_btmesh_rsp_ncp_fw_list_get_fw_metadata_by_index_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_ncp_fw_list_add_fw_s +{ + uint16_t result; + uint16_t fw_list_index; +}); + +typedef struct sl_btmesh_rsp_ncp_fw_list_add_fw_s sl_btmesh_rsp_ncp_fw_list_add_fw_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_ncp_fw_list_set_fw_metadata_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_ncp_fw_list_set_fw_metadata_s sl_btmesh_rsp_ncp_fw_list_set_fw_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sar_config_client_init_s sl_btmesh_rsp_sar_config_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sar_config_client_deinit_s sl_btmesh_rsp_sar_config_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_client_get_sar_transmitter_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_sar_config_client_get_sar_transmitter_s sl_btmesh_rsp_sar_config_client_get_sar_transmitter_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_client_set_sar_transmitter_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_sar_config_client_set_sar_transmitter_s sl_btmesh_rsp_sar_config_client_set_sar_transmitter_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_client_get_sar_receiver_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_sar_config_client_get_sar_receiver_s sl_btmesh_rsp_sar_config_client_get_sar_receiver_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_client_set_sar_receiver_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_sar_config_client_set_sar_receiver_s sl_btmesh_rsp_sar_config_client_set_sar_receiver_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sar_config_server_init_s sl_btmesh_rsp_sar_config_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sar_config_server_deinit_s sl_btmesh_rsp_sar_config_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_server_get_sar_transmitter_s +{ + uint16_t result; + uint8_t segment_interval_step; + uint8_t unicast_retrans_count; + uint8_t unicast_retrans_wo_progress_count; + uint16_t unicast_retrans_interval_step; + uint16_t unicast_retrans_interval_increment; + uint8_t multicast_retrans_count; + uint16_t multicast_retrans_interval_step; +}); + +typedef struct sl_btmesh_rsp_sar_config_server_get_sar_transmitter_s sl_btmesh_rsp_sar_config_server_get_sar_transmitter_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_server_set_sar_transmitter_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sar_config_server_set_sar_transmitter_s sl_btmesh_rsp_sar_config_server_set_sar_transmitter_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_server_get_sar_receiver_s +{ + uint16_t result; + uint8_t segments_threshold; + uint8_t ack_delay_increment; + uint32_t discard_timeout; + uint8_t segment_interval_step; + uint8_t ack_retrans_count; +}); + +typedef struct sl_btmesh_rsp_sar_config_server_get_sar_receiver_s sl_btmesh_rsp_sar_config_server_get_sar_receiver_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_sar_config_server_set_sar_receiver_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_sar_config_server_set_sar_receiver_s sl_btmesh_rsp_sar_config_server_set_sar_receiver_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_private_beacon_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_private_beacon_client_init_s sl_btmesh_rsp_private_beacon_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_private_beacon_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_private_beacon_client_deinit_s sl_btmesh_rsp_private_beacon_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_private_beacon_client_get_beacon_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_private_beacon_client_get_beacon_s sl_btmesh_rsp_private_beacon_client_get_beacon_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_private_beacon_client_set_beacon_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_private_beacon_client_set_beacon_s sl_btmesh_rsp_private_beacon_client_set_beacon_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_private_beacon_client_get_gatt_proxy_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_private_beacon_client_get_gatt_proxy_s sl_btmesh_rsp_private_beacon_client_get_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_private_beacon_client_set_gatt_proxy_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_private_beacon_client_set_gatt_proxy_s sl_btmesh_rsp_private_beacon_client_set_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_private_beacon_client_get_identity_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_private_beacon_client_get_identity_s sl_btmesh_rsp_private_beacon_client_get_identity_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_private_beacon_client_set_identity_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_private_beacon_client_set_identity_s sl_btmesh_rsp_private_beacon_client_set_identity_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_private_beacon_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_private_beacon_server_init_s sl_btmesh_rsp_private_beacon_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_private_beacon_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_private_beacon_server_deinit_s sl_btmesh_rsp_private_beacon_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lcd_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lcd_client_init_s sl_btmesh_rsp_lcd_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lcd_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lcd_client_deinit_s sl_btmesh_rsp_lcd_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lcd_client_get_composition_data_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_lcd_client_get_composition_data_s sl_btmesh_rsp_lcd_client_get_composition_data_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lcd_client_get_metadata_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_lcd_client_get_metadata_s sl_btmesh_rsp_lcd_client_get_metadata_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lcd_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lcd_server_init_s sl_btmesh_rsp_lcd_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_lcd_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_lcd_server_deinit_s sl_btmesh_rsp_lcd_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_on_demand_private_proxy_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_on_demand_private_proxy_client_init_s sl_btmesh_rsp_on_demand_private_proxy_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_on_demand_private_proxy_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_on_demand_private_proxy_client_deinit_s sl_btmesh_rsp_on_demand_private_proxy_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_s sl_btmesh_rsp_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_s +{ + uint16_t result; + uint32_t handle; +}); + +typedef struct sl_btmesh_rsp_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_s sl_btmesh_rsp_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_solicitation_config_client_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_solicitation_config_client_init_s sl_btmesh_rsp_solicitation_config_client_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_solicitation_config_client_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_solicitation_config_client_deinit_s sl_btmesh_rsp_solicitation_config_client_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_solicitation_config_client_clear_items_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_solicitation_config_client_clear_items_s sl_btmesh_rsp_solicitation_config_client_clear_items_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_on_demand_private_proxy_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_on_demand_private_proxy_server_init_s sl_btmesh_rsp_on_demand_private_proxy_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_on_demand_private_proxy_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_on_demand_private_proxy_server_deinit_s sl_btmesh_rsp_on_demand_private_proxy_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_server_init_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_server_init_s sl_btmesh_rsp_silabs_config_server_init_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_server_deinit_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_server_deinit_s sl_btmesh_rsp_silabs_config_server_deinit_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_server_set_tx_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_server_set_tx_s sl_btmesh_rsp_silabs_config_server_set_tx_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_server_get_tx_s +{ + uint16_t result; + uint8_t phy; + uint32_t options; +}); + +typedef struct sl_btmesh_rsp_silabs_config_server_get_tx_s sl_btmesh_rsp_silabs_config_server_get_tx_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_server_set_model_enable_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_server_set_model_enable_s sl_btmesh_rsp_silabs_config_server_set_model_enable_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_server_get_model_enable_s +{ + uint16_t result; + uint16_t value; +}); + +typedef struct sl_btmesh_rsp_silabs_config_server_get_model_enable_s sl_btmesh_rsp_silabs_config_server_get_model_enable_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_server_set_network_pdu_s +{ + uint16_t result; +}); + +typedef struct sl_btmesh_rsp_silabs_config_server_set_network_pdu_s sl_btmesh_rsp_silabs_config_server_set_network_pdu_t; + + +PACKSTRUCT( struct sl_btmesh_rsp_silabs_config_server_get_network_pdu_s +{ + uint16_t result; + uint16_t max_size; +}); + +typedef struct sl_btmesh_rsp_silabs_config_server_get_network_pdu_s sl_btmesh_rsp_silabs_config_server_get_network_pdu_t; + + + +PACKSTRUCT( struct sl_btmesh_packet { + uint32_t header; + union { + uint8_t handle; + sl_bt_rsp_error_t rsp_error; + sl_btmesh_cmd_node_start_unprov_beaconing_t cmd_node_start_unprov_beaconing; + sl_btmesh_cmd_node_send_input_oob_request_response_t cmd_node_send_input_oob_request_response; + sl_btmesh_cmd_node_set_provisioning_data_t cmd_node_set_provisioning_data; + sl_btmesh_cmd_node_init_oob_t cmd_node_init_oob; + sl_btmesh_cmd_node_set_ivrecovery_mode_t cmd_node_set_ivrecovery_mode; + sl_btmesh_cmd_node_set_net_relay_delay_t cmd_node_set_net_relay_delay; + sl_btmesh_cmd_node_get_seq_remaining_t cmd_node_get_seq_remaining; + sl_btmesh_cmd_node_set_uuid_t cmd_node_set_uuid; + sl_btmesh_cmd_node_get_element_address_t cmd_node_get_element_address; + sl_btmesh_cmd_node_send_static_oob_request_response_t cmd_node_send_static_oob_request_response; + sl_btmesh_cmd_node_set_beacon_reporting_t cmd_node_set_beacon_reporting; + sl_btmesh_cmd_node_set_iv_update_age_t cmd_node_set_iv_update_age; + sl_btmesh_cmd_node_get_key_count_t cmd_node_get_key_count; + sl_btmesh_cmd_node_get_key_t cmd_node_get_key; + sl_btmesh_cmd_node_get_element_seqnum_t cmd_node_get_element_seqnum; + sl_btmesh_cmd_node_set_model_option_t cmd_node_set_model_option; + sl_btmesh_cmd_node_get_local_dcd_t cmd_node_get_local_dcd; + sl_btmesh_cmd_node_set_adv_phy_t cmd_node_set_adv_phy; + sl_btmesh_cmd_node_set_provisioning_algorithms_t cmd_node_set_provisioning_algorithms; + sl_btmesh_cmd_node_set_unprov_beaconing_adv_interval_t cmd_node_set_unprov_beaconing_adv_interval; + sl_btmesh_cmd_node_set_proxy_service_adv_interval_t cmd_node_set_proxy_service_adv_interval; + sl_btmesh_cmd_node_set_provisioning_service_adv_interval_t cmd_node_set_provisioning_service_adv_interval; + sl_btmesh_cmd_node_get_local_model_metadata_page_t cmd_node_get_local_model_metadata_page; + sl_btmesh_cmd_node_set_oob_uri_t cmd_node_set_oob_uri; + sl_btmesh_cmd_prov_create_provisioning_session_t cmd_prov_create_provisioning_session; + sl_btmesh_cmd_prov_set_provisioning_suspend_event_t cmd_prov_set_provisioning_suspend_event; + sl_btmesh_cmd_prov_provision_adv_device_t cmd_prov_provision_adv_device; + sl_btmesh_cmd_prov_provision_gatt_device_t cmd_prov_provision_gatt_device; + sl_btmesh_cmd_prov_provision_remote_device_t cmd_prov_provision_remote_device; + sl_btmesh_cmd_prov_continue_provisioning_t cmd_prov_continue_provisioning; + sl_btmesh_cmd_prov_abort_provisioning_t cmd_prov_abort_provisioning; + sl_btmesh_cmd_prov_set_device_address_t cmd_prov_set_device_address; + sl_btmesh_cmd_prov_create_network_t cmd_prov_create_network; + sl_btmesh_cmd_prov_create_appkey_t cmd_prov_create_appkey; + sl_btmesh_cmd_prov_send_oob_pkey_response_t cmd_prov_send_oob_pkey_response; + sl_btmesh_cmd_prov_send_oob_auth_response_t cmd_prov_send_oob_auth_response; + sl_btmesh_cmd_prov_set_oob_requirements_t cmd_prov_set_oob_requirements; + sl_btmesh_cmd_prov_start_key_refresh_t cmd_prov_start_key_refresh; + sl_btmesh_cmd_prov_get_key_refresh_exclusion_t cmd_prov_get_key_refresh_exclusion; + sl_btmesh_cmd_prov_set_key_refresh_exclusion_t cmd_prov_set_key_refresh_exclusion; + sl_btmesh_cmd_prov_set_key_refresh_failure_t cmd_prov_set_key_refresh_failure; + sl_btmesh_cmd_prov_phase_timeout_set_t cmd_prov_phase_timeout_set; + sl_btmesh_cmd_prov_get_ddb_entry_t cmd_prov_get_ddb_entry; + sl_btmesh_cmd_prov_delete_ddb_entry_t cmd_prov_delete_ddb_entry; + sl_btmesh_cmd_prov_add_ddb_entry_t cmd_prov_add_ddb_entry; + sl_btmesh_cmd_prov_initialize_network_t cmd_prov_initialize_network; + sl_btmesh_cmd_prov_get_key_refresh_appkey_exclusion_t cmd_prov_get_key_refresh_appkey_exclusion; + sl_btmesh_cmd_prov_set_key_refresh_appkey_exclusion_t cmd_prov_set_key_refresh_appkey_exclusion; + sl_btmesh_cmd_prov_update_device_netkey_index_t cmd_prov_update_device_netkey_index; + sl_btmesh_cmd_prov_suspend_key_refresh_t cmd_prov_suspend_key_refresh; + sl_btmesh_cmd_prov_resume_key_refresh_t cmd_prov_resume_key_refresh; + sl_btmesh_cmd_prov_get_key_refresh_phase_t cmd_prov_get_key_refresh_phase; + sl_btmesh_cmd_prov_start_key_refresh_from_phase_t cmd_prov_start_key_refresh_from_phase; + sl_btmesh_cmd_prov_flush_key_refresh_state_t cmd_prov_flush_key_refresh_state; + sl_btmesh_cmd_prov_test_identity_t cmd_prov_test_identity; + sl_btmesh_cmd_prov_get_provisioning_records_list_t cmd_prov_get_provisioning_records_list; + sl_btmesh_cmd_prov_get_provisioning_record_data_t cmd_prov_get_provisioning_record_data; + sl_btmesh_cmd_proxy_connect_t cmd_proxy_connect; + sl_btmesh_cmd_proxy_disconnect_t cmd_proxy_disconnect; + sl_btmesh_cmd_proxy_set_filter_type_t cmd_proxy_set_filter_type; + sl_btmesh_cmd_proxy_allow_t cmd_proxy_allow; + sl_btmesh_cmd_proxy_deny_t cmd_proxy_deny; + sl_btmesh_cmd_proxy_optimisation_toggle_t cmd_proxy_optimisation_toggle; + sl_btmesh_cmd_proxy_send_solicitation_t cmd_proxy_send_solicitation; + sl_btmesh_cmd_silabs_config_client_set_tx_t cmd_silabs_config_client_set_tx; + sl_btmesh_cmd_silabs_config_client_get_tx_t cmd_silabs_config_client_get_tx; + sl_btmesh_cmd_silabs_config_client_set_model_enable_t cmd_silabs_config_client_set_model_enable; + sl_btmesh_cmd_silabs_config_client_get_model_enable_t cmd_silabs_config_client_get_model_enable; + sl_btmesh_cmd_silabs_config_client_set_network_pdu_t cmd_silabs_config_client_set_network_pdu; + sl_btmesh_cmd_silabs_config_client_get_network_pdu_t cmd_silabs_config_client_get_network_pdu; + sl_btmesh_cmd_vendor_model_send_t cmd_vendor_model_send; + sl_btmesh_cmd_vendor_model_set_publication_t cmd_vendor_model_set_publication; + sl_btmesh_cmd_vendor_model_clear_publication_t cmd_vendor_model_clear_publication; + sl_btmesh_cmd_vendor_model_publish_t cmd_vendor_model_publish; + sl_btmesh_cmd_vendor_model_init_t cmd_vendor_model_init; + sl_btmesh_cmd_vendor_model_deinit_t cmd_vendor_model_deinit; + sl_btmesh_cmd_vendor_model_send_tracked_t cmd_vendor_model_send_tracked; + sl_btmesh_cmd_vendor_model_set_publication_tracked_t cmd_vendor_model_set_publication_tracked; + sl_btmesh_cmd_health_client_get_t cmd_health_client_get; + sl_btmesh_cmd_health_client_clear_t cmd_health_client_clear; + sl_btmesh_cmd_health_client_test_t cmd_health_client_test; + sl_btmesh_cmd_health_client_get_period_t cmd_health_client_get_period; + sl_btmesh_cmd_health_client_set_period_t cmd_health_client_set_period; + sl_btmesh_cmd_health_client_get_attention_t cmd_health_client_get_attention; + sl_btmesh_cmd_health_client_set_attention_t cmd_health_client_set_attention; + sl_btmesh_cmd_health_server_set_fault_t cmd_health_server_set_fault; + sl_btmesh_cmd_health_server_clear_fault_t cmd_health_server_clear_fault; + sl_btmesh_cmd_health_server_send_test_response_t cmd_health_server_send_test_response; + sl_btmesh_cmd_generic_client_get_t cmd_generic_client_get; + sl_btmesh_cmd_generic_client_set_t cmd_generic_client_set; + sl_btmesh_cmd_generic_client_publish_t cmd_generic_client_publish; + sl_btmesh_cmd_generic_client_get_params_t cmd_generic_client_get_params; + sl_btmesh_cmd_generic_server_respond_t cmd_generic_server_respond; + sl_btmesh_cmd_generic_server_update_t cmd_generic_server_update; + sl_btmesh_cmd_generic_server_publish_t cmd_generic_server_publish; + sl_btmesh_cmd_generic_server_get_cached_state_t cmd_generic_server_get_cached_state; + sl_btmesh_cmd_test_set_nettx_t cmd_test_set_nettx; + sl_btmesh_cmd_test_set_relay_t cmd_test_set_relay; + sl_btmesh_cmd_test_set_adv_scan_params_t cmd_test_set_adv_scan_params; + sl_btmesh_cmd_test_set_ivupdate_test_mode_t cmd_test_set_ivupdate_test_mode; + sl_btmesh_cmd_test_set_segment_send_delay_t cmd_test_set_segment_send_delay; + sl_btmesh_cmd_test_set_ivupdate_state_t cmd_test_set_ivupdate_state; + sl_btmesh_cmd_test_bind_local_model_app_t cmd_test_bind_local_model_app; + sl_btmesh_cmd_test_unbind_local_model_app_t cmd_test_unbind_local_model_app; + sl_btmesh_cmd_test_add_local_model_sub_t cmd_test_add_local_model_sub; + sl_btmesh_cmd_test_remove_local_model_sub_t cmd_test_remove_local_model_sub; + sl_btmesh_cmd_test_add_local_model_sub_va_t cmd_test_add_local_model_sub_va; + sl_btmesh_cmd_test_remove_local_model_sub_va_t cmd_test_remove_local_model_sub_va; + sl_btmesh_cmd_test_get_local_model_sub_t cmd_test_get_local_model_sub; + sl_btmesh_cmd_test_set_local_model_pub_t cmd_test_set_local_model_pub; + sl_btmesh_cmd_test_set_local_model_pub_va_t cmd_test_set_local_model_pub_va; + sl_btmesh_cmd_test_get_local_model_pub_t cmd_test_get_local_model_pub; + sl_btmesh_cmd_test_set_local_heartbeat_subscription_t cmd_test_set_local_heartbeat_subscription; + sl_btmesh_cmd_test_set_local_heartbeat_publication_t cmd_test_set_local_heartbeat_publication; + sl_btmesh_cmd_test_set_local_config_t cmd_test_set_local_config; + sl_btmesh_cmd_test_get_local_config_t cmd_test_get_local_config; + sl_btmesh_cmd_test_add_local_key_t cmd_test_add_local_key; + sl_btmesh_cmd_test_remove_local_key_t cmd_test_remove_local_key; + sl_btmesh_cmd_test_update_local_key_t cmd_test_update_local_key; + sl_btmesh_cmd_test_set_sar_config_t cmd_test_set_sar_config; + sl_btmesh_cmd_test_set_adv_bearer_state_t cmd_test_set_adv_bearer_state; + sl_btmesh_cmd_test_prov_get_device_key_t cmd_test_prov_get_device_key; + sl_btmesh_cmd_test_prov_prepare_key_refresh_t cmd_test_prov_prepare_key_refresh; + sl_btmesh_cmd_test_cancel_segmented_tx_t cmd_test_cancel_segmented_tx; + sl_btmesh_cmd_test_set_iv_index_t cmd_test_set_iv_index; + sl_btmesh_cmd_test_set_element_seqnum_t cmd_test_set_element_seqnum; + sl_btmesh_cmd_test_set_model_option_t cmd_test_set_model_option; + sl_btmesh_cmd_test_get_local_model_app_bindings_t cmd_test_get_local_model_app_bindings; + sl_btmesh_cmd_test_get_replay_protection_list_entry_t cmd_test_get_replay_protection_list_entry; + sl_btmesh_cmd_test_clear_replay_protection_list_entry_t cmd_test_clear_replay_protection_list_entry; + sl_btmesh_cmd_test_set_replay_protection_list_diagnostics_t cmd_test_set_replay_protection_list_diagnostics; + sl_btmesh_cmd_test_get_model_option_t cmd_test_get_model_option; + sl_btmesh_cmd_test_set_default_ttl_t cmd_test_set_default_ttl; + sl_btmesh_cmd_test_set_gatt_proxy_t cmd_test_set_gatt_proxy; + sl_btmesh_cmd_test_get_identity_t cmd_test_get_identity; + sl_btmesh_cmd_test_set_identity_t cmd_test_set_identity; + sl_btmesh_cmd_test_set_friend_t cmd_test_set_friend; + sl_btmesh_cmd_test_set_beacon_t cmd_test_set_beacon; + sl_btmesh_cmd_test_get_private_identity_t cmd_test_get_private_identity; + sl_btmesh_cmd_test_set_private_identity_t cmd_test_set_private_identity; + sl_btmesh_cmd_test_set_adv_provisioning_bearer_timing_t cmd_test_set_adv_provisioning_bearer_timing; + sl_btmesh_cmd_test_update_keyrefresh_phase_t cmd_test_update_keyrefresh_phase; + sl_btmesh_cmd_test_set_adv_params_t cmd_test_set_adv_params; + sl_btmesh_cmd_test_set_scan_params_t cmd_test_set_scan_params; + sl_btmesh_cmd_test_adv_use_random_address_t cmd_test_adv_use_random_address; + sl_btmesh_cmd_lpn_establish_friendship_t cmd_lpn_establish_friendship; + sl_btmesh_cmd_lpn_poll_t cmd_lpn_poll; + sl_btmesh_cmd_lpn_terminate_friendship_t cmd_lpn_terminate_friendship; + sl_btmesh_cmd_lpn_config_t cmd_lpn_config; + sl_btmesh_cmd_config_client_cancel_request_t cmd_config_client_cancel_request; + sl_btmesh_cmd_config_client_get_request_status_t cmd_config_client_get_request_status; + sl_btmesh_cmd_config_client_set_default_timeout_t cmd_config_client_set_default_timeout; + sl_btmesh_cmd_config_client_add_netkey_t cmd_config_client_add_netkey; + sl_btmesh_cmd_config_client_remove_netkey_t cmd_config_client_remove_netkey; + sl_btmesh_cmd_config_client_list_netkeys_t cmd_config_client_list_netkeys; + sl_btmesh_cmd_config_client_add_appkey_t cmd_config_client_add_appkey; + sl_btmesh_cmd_config_client_remove_appkey_t cmd_config_client_remove_appkey; + sl_btmesh_cmd_config_client_list_appkeys_t cmd_config_client_list_appkeys; + sl_btmesh_cmd_config_client_bind_model_t cmd_config_client_bind_model; + sl_btmesh_cmd_config_client_unbind_model_t cmd_config_client_unbind_model; + sl_btmesh_cmd_config_client_list_bindings_t cmd_config_client_list_bindings; + sl_btmesh_cmd_config_client_get_model_pub_t cmd_config_client_get_model_pub; + sl_btmesh_cmd_config_client_set_model_pub_t cmd_config_client_set_model_pub; + sl_btmesh_cmd_config_client_set_model_pub_va_t cmd_config_client_set_model_pub_va; + sl_btmesh_cmd_config_client_add_model_sub_t cmd_config_client_add_model_sub; + sl_btmesh_cmd_config_client_add_model_sub_va_t cmd_config_client_add_model_sub_va; + sl_btmesh_cmd_config_client_remove_model_sub_t cmd_config_client_remove_model_sub; + sl_btmesh_cmd_config_client_remove_model_sub_va_t cmd_config_client_remove_model_sub_va; + sl_btmesh_cmd_config_client_set_model_sub_t cmd_config_client_set_model_sub; + sl_btmesh_cmd_config_client_set_model_sub_va_t cmd_config_client_set_model_sub_va; + sl_btmesh_cmd_config_client_clear_model_sub_t cmd_config_client_clear_model_sub; + sl_btmesh_cmd_config_client_list_subs_t cmd_config_client_list_subs; + sl_btmesh_cmd_config_client_get_heartbeat_pub_t cmd_config_client_get_heartbeat_pub; + sl_btmesh_cmd_config_client_set_heartbeat_pub_t cmd_config_client_set_heartbeat_pub; + sl_btmesh_cmd_config_client_get_heartbeat_sub_t cmd_config_client_get_heartbeat_sub; + sl_btmesh_cmd_config_client_set_heartbeat_sub_t cmd_config_client_set_heartbeat_sub; + sl_btmesh_cmd_config_client_get_beacon_t cmd_config_client_get_beacon; + sl_btmesh_cmd_config_client_set_beacon_t cmd_config_client_set_beacon; + sl_btmesh_cmd_config_client_get_default_ttl_t cmd_config_client_get_default_ttl; + sl_btmesh_cmd_config_client_set_default_ttl_t cmd_config_client_set_default_ttl; + sl_btmesh_cmd_config_client_get_gatt_proxy_t cmd_config_client_get_gatt_proxy; + sl_btmesh_cmd_config_client_set_gatt_proxy_t cmd_config_client_set_gatt_proxy; + sl_btmesh_cmd_config_client_get_relay_t cmd_config_client_get_relay; + sl_btmesh_cmd_config_client_set_relay_t cmd_config_client_set_relay; + sl_btmesh_cmd_config_client_get_network_transmit_t cmd_config_client_get_network_transmit; + sl_btmesh_cmd_config_client_set_network_transmit_t cmd_config_client_set_network_transmit; + sl_btmesh_cmd_config_client_get_identity_t cmd_config_client_get_identity; + sl_btmesh_cmd_config_client_set_identity_t cmd_config_client_set_identity; + sl_btmesh_cmd_config_client_get_friend_t cmd_config_client_get_friend; + sl_btmesh_cmd_config_client_set_friend_t cmd_config_client_set_friend; + sl_btmesh_cmd_config_client_get_key_refresh_phase_t cmd_config_client_get_key_refresh_phase; + sl_btmesh_cmd_config_client_get_lpn_polltimeout_t cmd_config_client_get_lpn_polltimeout; + sl_btmesh_cmd_config_client_get_dcd_t cmd_config_client_get_dcd; + sl_btmesh_cmd_config_client_reset_node_t cmd_config_client_reset_node; + sl_btmesh_cmd_config_client_set_request_timeout_for_node_t cmd_config_client_set_request_timeout_for_node; + sl_btmesh_cmd_mbt_client_init_t cmd_mbt_client_init; + sl_btmesh_cmd_mbt_client_setup_t cmd_mbt_client_setup; + sl_btmesh_cmd_mbt_client_query_information_t cmd_mbt_client_query_information; + sl_btmesh_cmd_mbt_client_get_server_status_t cmd_mbt_client_get_server_status; + sl_btmesh_cmd_mbt_client_add_server_t cmd_mbt_client_add_server; + sl_btmesh_cmd_mbt_client_start_transfer_t cmd_mbt_client_start_transfer; + sl_btmesh_cmd_mbt_client_start_block_t cmd_mbt_client_start_block; + sl_btmesh_cmd_mbt_client_send_chunk_request_rsp_t cmd_mbt_client_send_chunk_request_rsp; + sl_btmesh_cmd_mbt_client_query_block_status_t cmd_mbt_client_query_block_status; + sl_btmesh_cmd_mbt_client_get_status_t cmd_mbt_client_get_status; + sl_btmesh_cmd_mbt_client_get_transfer_status_t cmd_mbt_client_get_transfer_status; + sl_btmesh_cmd_mbt_client_cancel_transfer_t cmd_mbt_client_cancel_transfer; + sl_btmesh_cmd_mbt_client_abort_t cmd_mbt_client_abort; + sl_btmesh_cmd_mbt_server_init_t cmd_mbt_server_init; + sl_btmesh_cmd_mbt_server_start_t cmd_mbt_server_start; + sl_btmesh_cmd_mbt_server_get_transfer_status_t cmd_mbt_server_get_transfer_status; + sl_btmesh_cmd_mbt_server_transfer_complete_t cmd_mbt_server_transfer_complete; + sl_btmesh_cmd_mbt_server_abort_t cmd_mbt_server_abort; + sl_btmesh_cmd_mbt_server_set_pull_mode_parameters_t cmd_mbt_server_set_pull_mode_parameters; + sl_btmesh_cmd_mbt_server_transfer_start_rsp_t cmd_mbt_server_transfer_start_rsp; + sl_btmesh_cmd_sensor_server_init_t cmd_sensor_server_init; + sl_btmesh_cmd_sensor_server_deinit_t cmd_sensor_server_deinit; + sl_btmesh_cmd_sensor_server_send_descriptor_status_t cmd_sensor_server_send_descriptor_status; + sl_btmesh_cmd_sensor_server_send_status_t cmd_sensor_server_send_status; + sl_btmesh_cmd_sensor_server_send_column_status_t cmd_sensor_server_send_column_status; + sl_btmesh_cmd_sensor_server_send_series_status_t cmd_sensor_server_send_series_status; + sl_btmesh_cmd_sensor_setup_server_send_cadence_status_t cmd_sensor_setup_server_send_cadence_status; + sl_btmesh_cmd_sensor_setup_server_send_settings_status_t cmd_sensor_setup_server_send_settings_status; + sl_btmesh_cmd_sensor_setup_server_send_setting_status_t cmd_sensor_setup_server_send_setting_status; + sl_btmesh_cmd_sensor_client_get_descriptor_t cmd_sensor_client_get_descriptor; + sl_btmesh_cmd_sensor_client_get_t cmd_sensor_client_get; + sl_btmesh_cmd_sensor_client_get_column_t cmd_sensor_client_get_column; + sl_btmesh_cmd_sensor_client_get_series_t cmd_sensor_client_get_series; + sl_btmesh_cmd_sensor_client_get_cadence_t cmd_sensor_client_get_cadence; + sl_btmesh_cmd_sensor_client_set_cadence_t cmd_sensor_client_set_cadence; + sl_btmesh_cmd_sensor_client_get_settings_t cmd_sensor_client_get_settings; + sl_btmesh_cmd_sensor_client_get_setting_t cmd_sensor_client_get_setting; + sl_btmesh_cmd_sensor_client_set_setting_t cmd_sensor_client_set_setting; + sl_btmesh_cmd_fw_update_client_init_t cmd_fw_update_client_init; + sl_btmesh_cmd_fw_update_client_deinit_t cmd_fw_update_client_deinit; + sl_btmesh_cmd_fw_update_client_get_info_t cmd_fw_update_client_get_info; + sl_btmesh_cmd_fw_update_client_get_update_t cmd_fw_update_client_get_update; + sl_btmesh_cmd_fw_update_client_start_update_t cmd_fw_update_client_start_update; + sl_btmesh_cmd_fw_update_client_cancel_update_t cmd_fw_update_client_cancel_update; + sl_btmesh_cmd_fw_update_client_apply_update_t cmd_fw_update_client_apply_update; + sl_btmesh_cmd_fw_update_client_check_metadata_t cmd_fw_update_client_check_metadata; + sl_btmesh_cmd_lc_client_init_t cmd_lc_client_init; + sl_btmesh_cmd_lc_client_get_mode_t cmd_lc_client_get_mode; + sl_btmesh_cmd_lc_client_set_mode_t cmd_lc_client_set_mode; + sl_btmesh_cmd_lc_client_get_om_t cmd_lc_client_get_om; + sl_btmesh_cmd_lc_client_set_om_t cmd_lc_client_set_om; + sl_btmesh_cmd_lc_client_get_light_onoff_t cmd_lc_client_get_light_onoff; + sl_btmesh_cmd_lc_client_set_light_onoff_t cmd_lc_client_set_light_onoff; + sl_btmesh_cmd_lc_client_get_property_t cmd_lc_client_get_property; + sl_btmesh_cmd_lc_client_set_property_t cmd_lc_client_set_property; + sl_btmesh_cmd_lc_server_init_t cmd_lc_server_init; + sl_btmesh_cmd_lc_server_deinit_t cmd_lc_server_deinit; + sl_btmesh_cmd_lc_server_update_mode_t cmd_lc_server_update_mode; + sl_btmesh_cmd_lc_server_update_om_t cmd_lc_server_update_om; + sl_btmesh_cmd_lc_server_update_light_onoff_t cmd_lc_server_update_light_onoff; + sl_btmesh_cmd_lc_server_init_all_properties_t cmd_lc_server_init_all_properties; + sl_btmesh_cmd_lc_server_set_publish_mask_t cmd_lc_server_set_publish_mask; + sl_btmesh_cmd_lc_server_set_regulator_interval_t cmd_lc_server_set_regulator_interval; + sl_btmesh_cmd_lc_server_set_event_mask_t cmd_lc_server_set_event_mask; + sl_btmesh_cmd_lc_server_get_lc_state_t cmd_lc_server_get_lc_state; + sl_btmesh_cmd_lc_setup_server_update_property_t cmd_lc_setup_server_update_property; + sl_btmesh_cmd_scene_client_init_t cmd_scene_client_init; + sl_btmesh_cmd_scene_client_get_t cmd_scene_client_get; + sl_btmesh_cmd_scene_client_get_register_t cmd_scene_client_get_register; + sl_btmesh_cmd_scene_client_recall_t cmd_scene_client_recall; + sl_btmesh_cmd_scene_client_store_t cmd_scene_client_store; + sl_btmesh_cmd_scene_client_delete_t cmd_scene_client_delete; + sl_btmesh_cmd_scene_server_init_t cmd_scene_server_init; + sl_btmesh_cmd_scene_server_deinit_t cmd_scene_server_deinit; + sl_btmesh_cmd_scene_server_reset_register_t cmd_scene_server_reset_register; + sl_btmesh_cmd_scene_setup_server_init_t cmd_scene_setup_server_init; + sl_btmesh_cmd_scheduler_client_init_t cmd_scheduler_client_init; + sl_btmesh_cmd_scheduler_client_deinit_t cmd_scheduler_client_deinit; + sl_btmesh_cmd_scheduler_client_get_t cmd_scheduler_client_get; + sl_btmesh_cmd_scheduler_client_get_action_t cmd_scheduler_client_get_action; + sl_btmesh_cmd_scheduler_client_set_action_t cmd_scheduler_client_set_action; + sl_btmesh_cmd_scheduler_server_init_t cmd_scheduler_server_init; + sl_btmesh_cmd_scheduler_server_deinit_t cmd_scheduler_server_deinit; + sl_btmesh_cmd_scheduler_server_get_t cmd_scheduler_server_get; + sl_btmesh_cmd_scheduler_server_get_action_t cmd_scheduler_server_get_action; + sl_btmesh_cmd_scheduler_server_set_action_t cmd_scheduler_server_set_action; + sl_btmesh_cmd_fw_update_server_init_t cmd_fw_update_server_init; + sl_btmesh_cmd_fw_update_server_deinit_t cmd_fw_update_server_deinit; + sl_btmesh_cmd_fw_update_server_check_fw_metadata_rsp_t cmd_fw_update_server_check_fw_metadata_rsp; + sl_btmesh_cmd_fw_update_server_update_start_rsp_t cmd_fw_update_server_update_start_rsp; + sl_btmesh_cmd_fw_update_server_verify_fw_rsp_t cmd_fw_update_server_verify_fw_rsp; + sl_btmesh_cmd_fw_update_server_distributor_self_update_rsp_t cmd_fw_update_server_distributor_self_update_rsp; + sl_btmesh_cmd_time_server_init_t cmd_time_server_init; + sl_btmesh_cmd_time_server_deinit_t cmd_time_server_deinit; + sl_btmesh_cmd_time_server_get_time_t cmd_time_server_get_time; + sl_btmesh_cmd_time_server_set_time_t cmd_time_server_set_time; + sl_btmesh_cmd_time_server_get_time_zone_offset_new_t cmd_time_server_get_time_zone_offset_new; + sl_btmesh_cmd_time_server_set_time_zone_offset_new_t cmd_time_server_set_time_zone_offset_new; + sl_btmesh_cmd_time_server_get_tai_utc_delta_new_t cmd_time_server_get_tai_utc_delta_new; + sl_btmesh_cmd_time_server_set_tai_utc_delta_new_t cmd_time_server_set_tai_utc_delta_new; + sl_btmesh_cmd_time_server_get_time_role_t cmd_time_server_get_time_role; + sl_btmesh_cmd_time_server_set_time_role_t cmd_time_server_set_time_role; + sl_btmesh_cmd_time_server_get_datetime_t cmd_time_server_get_datetime; + sl_btmesh_cmd_time_server_publish_t cmd_time_server_publish; + sl_btmesh_cmd_time_server_status_t cmd_time_server_status; + sl_btmesh_cmd_time_client_init_t cmd_time_client_init; + sl_btmesh_cmd_time_client_deinit_t cmd_time_client_deinit; + sl_btmesh_cmd_time_client_get_time_t cmd_time_client_get_time; + sl_btmesh_cmd_time_client_set_time_t cmd_time_client_set_time; + sl_btmesh_cmd_time_client_get_time_zone_t cmd_time_client_get_time_zone; + sl_btmesh_cmd_time_client_set_time_zone_t cmd_time_client_set_time_zone; + sl_btmesh_cmd_time_client_get_tai_utc_delta_t cmd_time_client_get_tai_utc_delta; + sl_btmesh_cmd_time_client_set_tai_utc_delta_t cmd_time_client_set_tai_utc_delta; + sl_btmesh_cmd_time_client_get_time_role_t cmd_time_client_get_time_role; + sl_btmesh_cmd_time_client_set_time_role_t cmd_time_client_set_time_role; + sl_btmesh_cmd_fw_dist_server_init_t cmd_fw_dist_server_init; + sl_btmesh_cmd_fw_dist_server_deinit_t cmd_fw_dist_server_deinit; + sl_btmesh_cmd_fw_dist_server_upload_start_rsp_t cmd_fw_dist_server_upload_start_rsp; + sl_btmesh_cmd_fw_dist_server_execute_distribution_step_t cmd_fw_dist_server_execute_distribution_step; + sl_btmesh_cmd_fw_dist_server_upload_oob_start_rsp_t cmd_fw_dist_server_upload_oob_start_rsp; + sl_btmesh_cmd_fw_dist_server_set_upload_oob_metadata_t cmd_fw_dist_server_set_upload_oob_metadata; + sl_btmesh_cmd_fw_dist_server_set_upload_oob_image_size_t cmd_fw_dist_server_set_upload_oob_image_size; + sl_btmesh_cmd_fw_dist_server_set_upload_oob_progress_t cmd_fw_dist_server_set_upload_oob_progress; + sl_btmesh_cmd_fw_dist_server_get_node_status_by_index_t cmd_fw_dist_server_get_node_status_by_index; + sl_btmesh_cmd_fw_dist_server_get_node_status_by_address_t cmd_fw_dist_server_get_node_status_by_address; + sl_btmesh_cmd_fw_dist_server_delete_rsp_t cmd_fw_dist_server_delete_rsp; + sl_btmesh_cmd_fw_dist_server_dist_start_rsp_t cmd_fw_dist_server_dist_start_rsp; + sl_btmesh_cmd_fw_dist_server_set_multicast_threshold_t cmd_fw_dist_server_set_multicast_threshold; + sl_btmesh_cmd_fw_dist_server_delete_all_rsp_t cmd_fw_dist_server_delete_all_rsp; + sl_btmesh_cmd_fw_dist_server_resume_rsp_t cmd_fw_dist_server_resume_rsp; + sl_btmesh_cmd_fw_dist_client_init_t cmd_fw_dist_client_init; + sl_btmesh_cmd_fw_dist_client_deinit_t cmd_fw_dist_client_deinit; + sl_btmesh_cmd_fw_dist_client_setup_t cmd_fw_dist_client_setup; + sl_btmesh_cmd_fw_dist_client_setup_upload_t cmd_fw_dist_client_setup_upload; + sl_btmesh_cmd_fw_dist_client_set_upload_metadata_t cmd_fw_dist_client_set_upload_metadata; + sl_btmesh_cmd_fw_dist_client_get_receivers_t cmd_fw_dist_client_get_receivers; + sl_btmesh_cmd_fw_dist_client_get_t cmd_fw_dist_client_get; + sl_btmesh_cmd_fw_dist_client_start_distribution_t cmd_fw_dist_client_start_distribution; + sl_btmesh_cmd_fw_dist_client_cancel_distribution_t cmd_fw_dist_client_cancel_distribution; + sl_btmesh_cmd_fw_dist_client_apply_distribution_t cmd_fw_dist_client_apply_distribution; + sl_btmesh_cmd_fw_dist_client_suspend_distribution_t cmd_fw_dist_client_suspend_distribution; + sl_btmesh_cmd_fw_dist_client_add_receivers_t cmd_fw_dist_client_add_receivers; + sl_btmesh_cmd_fw_dist_client_delete_all_receivers_t cmd_fw_dist_client_delete_all_receivers; + sl_btmesh_cmd_fw_dist_client_get_capabilities_t cmd_fw_dist_client_get_capabilities; + sl_btmesh_cmd_fw_dist_client_get_upload_t cmd_fw_dist_client_get_upload; + sl_btmesh_cmd_fw_dist_client_start_upload_t cmd_fw_dist_client_start_upload; + sl_btmesh_cmd_fw_dist_client_cancel_upload_t cmd_fw_dist_client_cancel_upload; + sl_btmesh_cmd_fw_dist_client_get_fw_t cmd_fw_dist_client_get_fw; + sl_btmesh_cmd_fw_dist_client_get_fw_by_index_t cmd_fw_dist_client_get_fw_by_index; + sl_btmesh_cmd_fw_dist_client_delete_fw_t cmd_fw_dist_client_delete_fw; + sl_btmesh_cmd_fw_dist_client_delete_all_fw_t cmd_fw_dist_client_delete_all_fw; + sl_btmesh_cmd_fw_dist_client_prepare_oob_upload_t cmd_fw_dist_client_prepare_oob_upload; + sl_btmesh_cmd_fw_dist_client_start_oob_upload_t cmd_fw_dist_client_start_oob_upload; + sl_btmesh_cmd_fw_dist_client_suspend_upload_t cmd_fw_dist_client_suspend_upload; + sl_btmesh_cmd_fw_dist_client_resume_upload_t cmd_fw_dist_client_resume_upload; + sl_btmesh_cmd_remote_provisioning_client_get_scan_capabilities_t cmd_remote_provisioning_client_get_scan_capabilities; + sl_btmesh_cmd_remote_provisioning_client_start_scan_t cmd_remote_provisioning_client_start_scan; + sl_btmesh_cmd_remote_provisioning_client_get_scan_status_t cmd_remote_provisioning_client_get_scan_status; + sl_btmesh_cmd_remote_provisioning_client_stop_scan_t cmd_remote_provisioning_client_stop_scan; + sl_btmesh_cmd_remote_provisioning_client_start_extended_scan_t cmd_remote_provisioning_client_start_extended_scan; + sl_btmesh_cmd_remote_provisioning_client_open_link_t cmd_remote_provisioning_client_open_link; + sl_btmesh_cmd_remote_provisioning_client_get_link_status_t cmd_remote_provisioning_client_get_link_status; + sl_btmesh_cmd_remote_provisioning_client_close_link_t cmd_remote_provisioning_client_close_link; + sl_btmesh_cmd_remote_provisioning_server_open_link_t cmd_remote_provisioning_server_open_link; + sl_btmesh_cmd_remote_provisioning_server_set_default_bearer_t cmd_remote_provisioning_server_set_default_bearer; + sl_btmesh_cmd_fw_standalone_updater_init_t cmd_fw_standalone_updater_init; + sl_btmesh_cmd_fw_standalone_updater_deinit_t cmd_fw_standalone_updater_deinit; + sl_btmesh_cmd_fw_standalone_updater_setup_t cmd_fw_standalone_updater_setup; + sl_btmesh_cmd_fw_standalone_updater_set_metadata_t cmd_fw_standalone_updater_set_metadata; + sl_btmesh_cmd_fw_standalone_updater_set_multicast_threshold_t cmd_fw_standalone_updater_set_multicast_threshold; + sl_btmesh_cmd_fw_standalone_updater_add_receiver_t cmd_fw_standalone_updater_add_receiver; + sl_btmesh_cmd_fw_standalone_updater_delete_all_receivers_t cmd_fw_standalone_updater_delete_all_receivers; + sl_btmesh_cmd_fw_standalone_updater_start_t cmd_fw_standalone_updater_start; + sl_btmesh_cmd_fw_standalone_updater_execute_distribution_step_t cmd_fw_standalone_updater_execute_distribution_step; + sl_btmesh_cmd_fw_standalone_updater_apply_t cmd_fw_standalone_updater_apply; + sl_btmesh_cmd_fw_standalone_updater_get_state_t cmd_fw_standalone_updater_get_state; + sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_index_t cmd_fw_standalone_updater_get_node_status_by_index; + sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_address_t cmd_fw_standalone_updater_get_node_status_by_address; + sl_btmesh_cmd_fw_standalone_updater_cancel_t cmd_fw_standalone_updater_cancel; + sl_btmesh_cmd_ncp_fw_list_init_t cmd_ncp_fw_list_init; + sl_btmesh_cmd_ncp_fw_list_deinit_t cmd_ncp_fw_list_deinit; + sl_btmesh_cmd_ncp_fw_list_get_fw_info_by_index_t cmd_ncp_fw_list_get_fw_info_by_index; + sl_btmesh_cmd_ncp_fw_list_get_fw_metadata_by_index_t cmd_ncp_fw_list_get_fw_metadata_by_index; + sl_btmesh_cmd_ncp_fw_list_add_fw_t cmd_ncp_fw_list_add_fw; + sl_btmesh_cmd_ncp_fw_list_set_fw_metadata_t cmd_ncp_fw_list_set_fw_metadata; + sl_btmesh_cmd_sar_config_client_get_sar_transmitter_t cmd_sar_config_client_get_sar_transmitter; + sl_btmesh_cmd_sar_config_client_set_sar_transmitter_t cmd_sar_config_client_set_sar_transmitter; + sl_btmesh_cmd_sar_config_client_get_sar_receiver_t cmd_sar_config_client_get_sar_receiver; + sl_btmesh_cmd_sar_config_client_set_sar_receiver_t cmd_sar_config_client_set_sar_receiver; + sl_btmesh_cmd_sar_config_server_set_sar_transmitter_t cmd_sar_config_server_set_sar_transmitter; + sl_btmesh_cmd_sar_config_server_set_sar_receiver_t cmd_sar_config_server_set_sar_receiver; + sl_btmesh_cmd_private_beacon_client_get_beacon_t cmd_private_beacon_client_get_beacon; + sl_btmesh_cmd_private_beacon_client_set_beacon_t cmd_private_beacon_client_set_beacon; + sl_btmesh_cmd_private_beacon_client_get_gatt_proxy_t cmd_private_beacon_client_get_gatt_proxy; + sl_btmesh_cmd_private_beacon_client_set_gatt_proxy_t cmd_private_beacon_client_set_gatt_proxy; + sl_btmesh_cmd_private_beacon_client_get_identity_t cmd_private_beacon_client_get_identity; + sl_btmesh_cmd_private_beacon_client_set_identity_t cmd_private_beacon_client_set_identity; + sl_btmesh_cmd_lcd_client_get_composition_data_t cmd_lcd_client_get_composition_data; + sl_btmesh_cmd_lcd_client_get_metadata_t cmd_lcd_client_get_metadata; + sl_btmesh_cmd_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_t cmd_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy; + sl_btmesh_cmd_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_t cmd_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy; + sl_btmesh_cmd_solicitation_config_client_clear_items_t cmd_solicitation_config_client_clear_items; + sl_btmesh_cmd_silabs_config_server_set_tx_t cmd_silabs_config_server_set_tx; + sl_btmesh_cmd_silabs_config_server_set_model_enable_t cmd_silabs_config_server_set_model_enable; + sl_btmesh_cmd_silabs_config_server_get_model_enable_t cmd_silabs_config_server_get_model_enable; + sl_btmesh_cmd_silabs_config_server_set_network_pdu_t cmd_silabs_config_server_set_network_pdu; + sl_btmesh_rsp_node_init_t rsp_node_init; + sl_btmesh_rsp_node_set_exportable_keys_t rsp_node_set_exportable_keys; + sl_btmesh_rsp_node_start_unprov_beaconing_t rsp_node_start_unprov_beaconing; + sl_btmesh_rsp_node_stop_unprov_beaconing_t rsp_node_stop_unprov_beaconing; + sl_btmesh_rsp_node_get_rssi_t rsp_node_get_rssi; + sl_btmesh_rsp_node_send_input_oob_request_response_t rsp_node_send_input_oob_request_response; + sl_btmesh_rsp_node_get_uuid_t rsp_node_get_uuid; + sl_btmesh_rsp_node_set_provisioning_data_t rsp_node_set_provisioning_data; + sl_btmesh_rsp_node_init_oob_t rsp_node_init_oob; + sl_btmesh_rsp_node_set_ivrecovery_mode_t rsp_node_set_ivrecovery_mode; + sl_btmesh_rsp_node_get_ivrecovery_mode_t rsp_node_get_ivrecovery_mode; + sl_btmesh_rsp_node_get_statistics_t rsp_node_get_statistics; + sl_btmesh_rsp_node_clear_statistics_t rsp_node_clear_statistics; + sl_btmesh_rsp_node_set_net_relay_delay_t rsp_node_set_net_relay_delay; + sl_btmesh_rsp_node_get_net_relay_delay_t rsp_node_get_net_relay_delay; + sl_btmesh_rsp_node_get_ivupdate_state_t rsp_node_get_ivupdate_state; + sl_btmesh_rsp_node_request_ivupdate_t rsp_node_request_ivupdate; + sl_btmesh_rsp_node_get_seq_remaining_t rsp_node_get_seq_remaining; + sl_btmesh_rsp_node_save_replay_protection_list_t rsp_node_save_replay_protection_list; + sl_btmesh_rsp_node_set_uuid_t rsp_node_set_uuid; + sl_btmesh_rsp_node_get_replay_protection_list_status_t rsp_node_get_replay_protection_list_status; + sl_btmesh_rsp_node_get_element_address_t rsp_node_get_element_address; + sl_btmesh_rsp_node_send_static_oob_request_response_t rsp_node_send_static_oob_request_response; + sl_btmesh_rsp_node_reset_t rsp_node_reset; + sl_btmesh_rsp_node_set_beacon_reporting_t rsp_node_set_beacon_reporting; + sl_btmesh_rsp_node_set_iv_update_age_t rsp_node_set_iv_update_age; + sl_btmesh_rsp_node_get_key_count_t rsp_node_get_key_count; + sl_btmesh_rsp_node_get_key_t rsp_node_get_key; + sl_btmesh_rsp_node_get_networks_t rsp_node_get_networks; + sl_btmesh_rsp_node_get_element_seqnum_t rsp_node_get_element_seqnum; + sl_btmesh_rsp_node_set_model_option_t rsp_node_set_model_option; + sl_btmesh_rsp_node_get_local_dcd_t rsp_node_get_local_dcd; + sl_btmesh_rsp_node_power_off_t rsp_node_power_off; + sl_btmesh_rsp_node_set_adv_phy_t rsp_node_set_adv_phy; + sl_btmesh_rsp_node_get_adv_phy_t rsp_node_get_adv_phy; + sl_btmesh_rsp_node_set_provisioning_algorithms_t rsp_node_set_provisioning_algorithms; + sl_btmesh_rsp_node_init_provisioning_records_t rsp_node_init_provisioning_records; + sl_btmesh_rsp_node_set_unprov_beaconing_adv_interval_t rsp_node_set_unprov_beaconing_adv_interval; + sl_btmesh_rsp_node_set_proxy_service_adv_interval_t rsp_node_set_proxy_service_adv_interval; + sl_btmesh_rsp_node_set_provisioning_service_adv_interval_t rsp_node_set_provisioning_service_adv_interval; + sl_btmesh_rsp_node_get_local_model_metadata_page_t rsp_node_get_local_model_metadata_page; + sl_btmesh_rsp_node_save_proxy_solicitation_rpl_t rsp_node_save_proxy_solicitation_rpl; + sl_btmesh_rsp_node_get_proxy_solicitation_rpl_status_t rsp_node_get_proxy_solicitation_rpl_status; + sl_btmesh_rsp_node_set_oob_uri_t rsp_node_set_oob_uri; + sl_btmesh_rsp_node_get_oob_uri_t rsp_node_get_oob_uri; + sl_btmesh_rsp_prov_init_t rsp_prov_init; + sl_btmesh_rsp_prov_scan_unprov_beacons_t rsp_prov_scan_unprov_beacons; + sl_btmesh_rsp_prov_create_provisioning_session_t rsp_prov_create_provisioning_session; + sl_btmesh_rsp_prov_set_provisioning_suspend_event_t rsp_prov_set_provisioning_suspend_event; + sl_btmesh_rsp_prov_provision_adv_device_t rsp_prov_provision_adv_device; + sl_btmesh_rsp_prov_provision_gatt_device_t rsp_prov_provision_gatt_device; + sl_btmesh_rsp_prov_provision_remote_device_t rsp_prov_provision_remote_device; + sl_btmesh_rsp_prov_continue_provisioning_t rsp_prov_continue_provisioning; + sl_btmesh_rsp_prov_abort_provisioning_t rsp_prov_abort_provisioning; + sl_btmesh_rsp_prov_set_device_address_t rsp_prov_set_device_address; + sl_btmesh_rsp_prov_create_network_t rsp_prov_create_network; + sl_btmesh_rsp_prov_create_appkey_t rsp_prov_create_appkey; + sl_btmesh_rsp_prov_send_oob_pkey_response_t rsp_prov_send_oob_pkey_response; + sl_btmesh_rsp_prov_send_oob_auth_response_t rsp_prov_send_oob_auth_response; + sl_btmesh_rsp_prov_set_oob_requirements_t rsp_prov_set_oob_requirements; + sl_btmesh_rsp_prov_start_key_refresh_t rsp_prov_start_key_refresh; + sl_btmesh_rsp_prov_get_key_refresh_exclusion_t rsp_prov_get_key_refresh_exclusion; + sl_btmesh_rsp_prov_set_key_refresh_exclusion_t rsp_prov_set_key_refresh_exclusion; + sl_btmesh_rsp_prov_set_key_refresh_failure_t rsp_prov_set_key_refresh_failure; + sl_btmesh_rsp_prov_phase_timeout_get_t rsp_prov_phase_timeout_get; + sl_btmesh_rsp_prov_phase_timeout_set_t rsp_prov_phase_timeout_set; + sl_btmesh_rsp_prov_get_ddb_entry_t rsp_prov_get_ddb_entry; + sl_btmesh_rsp_prov_delete_ddb_entry_t rsp_prov_delete_ddb_entry; + sl_btmesh_rsp_prov_add_ddb_entry_t rsp_prov_add_ddb_entry; + sl_btmesh_rsp_prov_list_ddb_entries_t rsp_prov_list_ddb_entries; + sl_btmesh_rsp_prov_initialize_network_t rsp_prov_initialize_network; + sl_btmesh_rsp_prov_get_key_refresh_appkey_exclusion_t rsp_prov_get_key_refresh_appkey_exclusion; + sl_btmesh_rsp_prov_set_key_refresh_appkey_exclusion_t rsp_prov_set_key_refresh_appkey_exclusion; + sl_btmesh_rsp_prov_stop_scan_unprov_beacons_t rsp_prov_stop_scan_unprov_beacons; + sl_btmesh_rsp_prov_update_device_netkey_index_t rsp_prov_update_device_netkey_index; + sl_btmesh_rsp_prov_suspend_key_refresh_t rsp_prov_suspend_key_refresh; + sl_btmesh_rsp_prov_resume_key_refresh_t rsp_prov_resume_key_refresh; + sl_btmesh_rsp_prov_get_key_refresh_phase_t rsp_prov_get_key_refresh_phase; + sl_btmesh_rsp_prov_start_key_refresh_from_phase_t rsp_prov_start_key_refresh_from_phase; + sl_btmesh_rsp_prov_flush_key_refresh_state_t rsp_prov_flush_key_refresh_state; + sl_btmesh_rsp_prov_test_identity_t rsp_prov_test_identity; + sl_btmesh_rsp_prov_get_provisioning_records_list_t rsp_prov_get_provisioning_records_list; + sl_btmesh_rsp_prov_get_provisioning_record_data_t rsp_prov_get_provisioning_record_data; + sl_btmesh_rsp_prov_init_provisioning_records_t rsp_prov_init_provisioning_records; + sl_btmesh_rsp_proxy_connect_t rsp_proxy_connect; + sl_btmesh_rsp_proxy_disconnect_t rsp_proxy_disconnect; + sl_btmesh_rsp_proxy_set_filter_type_t rsp_proxy_set_filter_type; + sl_btmesh_rsp_proxy_allow_t rsp_proxy_allow; + sl_btmesh_rsp_proxy_deny_t rsp_proxy_deny; + sl_btmesh_rsp_proxy_optimisation_toggle_t rsp_proxy_optimisation_toggle; + sl_btmesh_rsp_proxy_send_solicitation_t rsp_proxy_send_solicitation; + sl_btmesh_rsp_silabs_config_client_init_t rsp_silabs_config_client_init; + sl_btmesh_rsp_silabs_config_client_set_tx_t rsp_silabs_config_client_set_tx; + sl_btmesh_rsp_silabs_config_client_get_tx_t rsp_silabs_config_client_get_tx; + sl_btmesh_rsp_silabs_config_client_set_model_enable_t rsp_silabs_config_client_set_model_enable; + sl_btmesh_rsp_silabs_config_client_get_model_enable_t rsp_silabs_config_client_get_model_enable; + sl_btmesh_rsp_silabs_config_client_set_network_pdu_t rsp_silabs_config_client_set_network_pdu; + sl_btmesh_rsp_silabs_config_client_get_network_pdu_t rsp_silabs_config_client_get_network_pdu; + sl_btmesh_rsp_silabs_config_client_deinit_t rsp_silabs_config_client_deinit; + sl_btmesh_rsp_vendor_model_send_t rsp_vendor_model_send; + sl_btmesh_rsp_vendor_model_set_publication_t rsp_vendor_model_set_publication; + sl_btmesh_rsp_vendor_model_clear_publication_t rsp_vendor_model_clear_publication; + sl_btmesh_rsp_vendor_model_publish_t rsp_vendor_model_publish; + sl_btmesh_rsp_vendor_model_init_t rsp_vendor_model_init; + sl_btmesh_rsp_vendor_model_deinit_t rsp_vendor_model_deinit; + sl_btmesh_rsp_vendor_model_send_tracked_t rsp_vendor_model_send_tracked; + sl_btmesh_rsp_vendor_model_set_publication_tracked_t rsp_vendor_model_set_publication_tracked; + sl_btmesh_rsp_health_client_init_t rsp_health_client_init; + sl_btmesh_rsp_health_client_deinit_t rsp_health_client_deinit; + sl_btmesh_rsp_health_client_get_t rsp_health_client_get; + sl_btmesh_rsp_health_client_clear_t rsp_health_client_clear; + sl_btmesh_rsp_health_client_test_t rsp_health_client_test; + sl_btmesh_rsp_health_client_get_period_t rsp_health_client_get_period; + sl_btmesh_rsp_health_client_set_period_t rsp_health_client_set_period; + sl_btmesh_rsp_health_client_get_attention_t rsp_health_client_get_attention; + sl_btmesh_rsp_health_client_set_attention_t rsp_health_client_set_attention; + sl_btmesh_rsp_health_server_set_fault_t rsp_health_server_set_fault; + sl_btmesh_rsp_health_server_clear_fault_t rsp_health_server_clear_fault; + sl_btmesh_rsp_health_server_send_test_response_t rsp_health_server_send_test_response; + sl_btmesh_rsp_generic_client_get_t rsp_generic_client_get; + sl_btmesh_rsp_generic_client_set_t rsp_generic_client_set; + sl_btmesh_rsp_generic_client_publish_t rsp_generic_client_publish; + sl_btmesh_rsp_generic_client_get_params_t rsp_generic_client_get_params; + sl_btmesh_rsp_generic_client_init_t rsp_generic_client_init; + sl_btmesh_rsp_generic_client_init_common_t rsp_generic_client_init_common; + sl_btmesh_rsp_generic_client_init_on_off_t rsp_generic_client_init_on_off; + sl_btmesh_rsp_generic_client_init_level_t rsp_generic_client_init_level; + sl_btmesh_rsp_generic_client_init_default_transition_time_t rsp_generic_client_init_default_transition_time; + sl_btmesh_rsp_generic_client_init_power_on_off_t rsp_generic_client_init_power_on_off; + sl_btmesh_rsp_generic_client_init_power_level_t rsp_generic_client_init_power_level; + sl_btmesh_rsp_generic_client_init_battery_t rsp_generic_client_init_battery; + sl_btmesh_rsp_generic_client_init_location_t rsp_generic_client_init_location; + sl_btmesh_rsp_generic_client_init_property_t rsp_generic_client_init_property; + sl_btmesh_rsp_generic_client_init_lightness_t rsp_generic_client_init_lightness; + sl_btmesh_rsp_generic_client_init_ctl_t rsp_generic_client_init_ctl; + sl_btmesh_rsp_generic_client_init_hsl_t rsp_generic_client_init_hsl; + sl_btmesh_rsp_generic_server_respond_t rsp_generic_server_respond; + sl_btmesh_rsp_generic_server_update_t rsp_generic_server_update; + sl_btmesh_rsp_generic_server_publish_t rsp_generic_server_publish; + sl_btmesh_rsp_generic_server_init_t rsp_generic_server_init; + sl_btmesh_rsp_generic_server_init_common_t rsp_generic_server_init_common; + sl_btmesh_rsp_generic_server_init_on_off_t rsp_generic_server_init_on_off; + sl_btmesh_rsp_generic_server_init_level_t rsp_generic_server_init_level; + sl_btmesh_rsp_generic_server_init_default_transition_time_t rsp_generic_server_init_default_transition_time; + sl_btmesh_rsp_generic_server_init_power_on_off_t rsp_generic_server_init_power_on_off; + sl_btmesh_rsp_generic_server_init_power_level_t rsp_generic_server_init_power_level; + sl_btmesh_rsp_generic_server_init_battery_t rsp_generic_server_init_battery; + sl_btmesh_rsp_generic_server_init_location_t rsp_generic_server_init_location; + sl_btmesh_rsp_generic_server_init_property_t rsp_generic_server_init_property; + sl_btmesh_rsp_generic_server_init_lightness_t rsp_generic_server_init_lightness; + sl_btmesh_rsp_generic_server_init_ctl_t rsp_generic_server_init_ctl; + sl_btmesh_rsp_generic_server_init_hsl_t rsp_generic_server_init_hsl; + sl_btmesh_rsp_generic_server_get_cached_state_t rsp_generic_server_get_cached_state; + sl_btmesh_rsp_test_get_nettx_t rsp_test_get_nettx; + sl_btmesh_rsp_test_set_nettx_t rsp_test_set_nettx; + sl_btmesh_rsp_test_get_relay_t rsp_test_get_relay; + sl_btmesh_rsp_test_set_relay_t rsp_test_set_relay; + sl_btmesh_rsp_test_set_adv_scan_params_t rsp_test_set_adv_scan_params; + sl_btmesh_rsp_test_set_ivupdate_test_mode_t rsp_test_set_ivupdate_test_mode; + sl_btmesh_rsp_test_get_ivupdate_test_mode_t rsp_test_get_ivupdate_test_mode; + sl_btmesh_rsp_test_set_segment_send_delay_t rsp_test_set_segment_send_delay; + sl_btmesh_rsp_test_set_ivupdate_state_t rsp_test_set_ivupdate_state; + sl_btmesh_rsp_test_send_beacons_t rsp_test_send_beacons; + sl_btmesh_rsp_test_bind_local_model_app_t rsp_test_bind_local_model_app; + sl_btmesh_rsp_test_unbind_local_model_app_t rsp_test_unbind_local_model_app; + sl_btmesh_rsp_test_add_local_model_sub_t rsp_test_add_local_model_sub; + sl_btmesh_rsp_test_remove_local_model_sub_t rsp_test_remove_local_model_sub; + sl_btmesh_rsp_test_add_local_model_sub_va_t rsp_test_add_local_model_sub_va; + sl_btmesh_rsp_test_remove_local_model_sub_va_t rsp_test_remove_local_model_sub_va; + sl_btmesh_rsp_test_get_local_model_sub_t rsp_test_get_local_model_sub; + sl_btmesh_rsp_test_set_local_model_pub_t rsp_test_set_local_model_pub; + sl_btmesh_rsp_test_set_local_model_pub_va_t rsp_test_set_local_model_pub_va; + sl_btmesh_rsp_test_get_local_model_pub_t rsp_test_get_local_model_pub; + sl_btmesh_rsp_test_set_local_heartbeat_subscription_t rsp_test_set_local_heartbeat_subscription; + sl_btmesh_rsp_test_get_local_heartbeat_subscription_t rsp_test_get_local_heartbeat_subscription; + sl_btmesh_rsp_test_get_local_heartbeat_publication_t rsp_test_get_local_heartbeat_publication; + sl_btmesh_rsp_test_set_local_heartbeat_publication_t rsp_test_set_local_heartbeat_publication; + sl_btmesh_rsp_test_set_local_config_t rsp_test_set_local_config; + sl_btmesh_rsp_test_get_local_config_t rsp_test_get_local_config; + sl_btmesh_rsp_test_add_local_key_t rsp_test_add_local_key; + sl_btmesh_rsp_test_remove_local_key_t rsp_test_remove_local_key; + sl_btmesh_rsp_test_update_local_key_t rsp_test_update_local_key; + sl_btmesh_rsp_test_set_sar_config_t rsp_test_set_sar_config; + sl_btmesh_rsp_test_set_adv_bearer_state_t rsp_test_set_adv_bearer_state; + sl_btmesh_rsp_test_prov_get_device_key_t rsp_test_prov_get_device_key; + sl_btmesh_rsp_test_prov_prepare_key_refresh_t rsp_test_prov_prepare_key_refresh; + sl_btmesh_rsp_test_cancel_segmented_tx_t rsp_test_cancel_segmented_tx; + sl_btmesh_rsp_test_set_iv_index_t rsp_test_set_iv_index; + sl_btmesh_rsp_test_set_element_seqnum_t rsp_test_set_element_seqnum; + sl_btmesh_rsp_test_set_model_option_t rsp_test_set_model_option; + sl_btmesh_rsp_test_get_local_model_app_bindings_t rsp_test_get_local_model_app_bindings; + sl_btmesh_rsp_test_get_replay_protection_list_entry_t rsp_test_get_replay_protection_list_entry; + sl_btmesh_rsp_test_clear_replay_protection_list_entry_t rsp_test_clear_replay_protection_list_entry; + sl_btmesh_rsp_test_set_replay_protection_list_diagnostics_t rsp_test_set_replay_protection_list_diagnostics; + sl_btmesh_rsp_test_get_model_option_t rsp_test_get_model_option; + sl_btmesh_rsp_test_get_default_ttl_t rsp_test_get_default_ttl; + sl_btmesh_rsp_test_set_default_ttl_t rsp_test_set_default_ttl; + sl_btmesh_rsp_test_get_gatt_proxy_t rsp_test_get_gatt_proxy; + sl_btmesh_rsp_test_set_gatt_proxy_t rsp_test_set_gatt_proxy; + sl_btmesh_rsp_test_get_identity_t rsp_test_get_identity; + sl_btmesh_rsp_test_set_identity_t rsp_test_set_identity; + sl_btmesh_rsp_test_get_friend_t rsp_test_get_friend; + sl_btmesh_rsp_test_set_friend_t rsp_test_set_friend; + sl_btmesh_rsp_test_get_beacon_t rsp_test_get_beacon; + sl_btmesh_rsp_test_set_beacon_t rsp_test_set_beacon; + sl_btmesh_rsp_test_get_private_identity_t rsp_test_get_private_identity; + sl_btmesh_rsp_test_set_private_identity_t rsp_test_set_private_identity; + sl_btmesh_rsp_test_set_adv_provisioning_bearer_timing_t rsp_test_set_adv_provisioning_bearer_timing; + sl_btmesh_rsp_test_update_keyrefresh_phase_t rsp_test_update_keyrefresh_phase; + sl_btmesh_rsp_test_send_private_beacons_t rsp_test_send_private_beacons; + sl_btmesh_rsp_test_set_adv_params_t rsp_test_set_adv_params; + sl_btmesh_rsp_test_set_scan_params_t rsp_test_set_scan_params; + sl_btmesh_rsp_test_adv_use_random_address_t rsp_test_adv_use_random_address; + sl_btmesh_rsp_lpn_init_t rsp_lpn_init; + sl_btmesh_rsp_lpn_deinit_t rsp_lpn_deinit; + sl_btmesh_rsp_lpn_establish_friendship_t rsp_lpn_establish_friendship; + sl_btmesh_rsp_lpn_poll_t rsp_lpn_poll; + sl_btmesh_rsp_lpn_terminate_friendship_t rsp_lpn_terminate_friendship; + sl_btmesh_rsp_lpn_config_t rsp_lpn_config; + sl_btmesh_rsp_friend_init_t rsp_friend_init; + sl_btmesh_rsp_friend_deinit_t rsp_friend_deinit; + sl_btmesh_rsp_config_client_cancel_request_t rsp_config_client_cancel_request; + sl_btmesh_rsp_config_client_get_request_status_t rsp_config_client_get_request_status; + sl_btmesh_rsp_config_client_get_default_timeout_t rsp_config_client_get_default_timeout; + sl_btmesh_rsp_config_client_set_default_timeout_t rsp_config_client_set_default_timeout; + sl_btmesh_rsp_config_client_add_netkey_t rsp_config_client_add_netkey; + sl_btmesh_rsp_config_client_remove_netkey_t rsp_config_client_remove_netkey; + sl_btmesh_rsp_config_client_list_netkeys_t rsp_config_client_list_netkeys; + sl_btmesh_rsp_config_client_add_appkey_t rsp_config_client_add_appkey; + sl_btmesh_rsp_config_client_remove_appkey_t rsp_config_client_remove_appkey; + sl_btmesh_rsp_config_client_list_appkeys_t rsp_config_client_list_appkeys; + sl_btmesh_rsp_config_client_bind_model_t rsp_config_client_bind_model; + sl_btmesh_rsp_config_client_unbind_model_t rsp_config_client_unbind_model; + sl_btmesh_rsp_config_client_list_bindings_t rsp_config_client_list_bindings; + sl_btmesh_rsp_config_client_get_model_pub_t rsp_config_client_get_model_pub; + sl_btmesh_rsp_config_client_set_model_pub_t rsp_config_client_set_model_pub; + sl_btmesh_rsp_config_client_set_model_pub_va_t rsp_config_client_set_model_pub_va; + sl_btmesh_rsp_config_client_add_model_sub_t rsp_config_client_add_model_sub; + sl_btmesh_rsp_config_client_add_model_sub_va_t rsp_config_client_add_model_sub_va; + sl_btmesh_rsp_config_client_remove_model_sub_t rsp_config_client_remove_model_sub; + sl_btmesh_rsp_config_client_remove_model_sub_va_t rsp_config_client_remove_model_sub_va; + sl_btmesh_rsp_config_client_set_model_sub_t rsp_config_client_set_model_sub; + sl_btmesh_rsp_config_client_set_model_sub_va_t rsp_config_client_set_model_sub_va; + sl_btmesh_rsp_config_client_clear_model_sub_t rsp_config_client_clear_model_sub; + sl_btmesh_rsp_config_client_list_subs_t rsp_config_client_list_subs; + sl_btmesh_rsp_config_client_get_heartbeat_pub_t rsp_config_client_get_heartbeat_pub; + sl_btmesh_rsp_config_client_set_heartbeat_pub_t rsp_config_client_set_heartbeat_pub; + sl_btmesh_rsp_config_client_get_heartbeat_sub_t rsp_config_client_get_heartbeat_sub; + sl_btmesh_rsp_config_client_set_heartbeat_sub_t rsp_config_client_set_heartbeat_sub; + sl_btmesh_rsp_config_client_get_beacon_t rsp_config_client_get_beacon; + sl_btmesh_rsp_config_client_set_beacon_t rsp_config_client_set_beacon; + sl_btmesh_rsp_config_client_get_default_ttl_t rsp_config_client_get_default_ttl; + sl_btmesh_rsp_config_client_set_default_ttl_t rsp_config_client_set_default_ttl; + sl_btmesh_rsp_config_client_get_gatt_proxy_t rsp_config_client_get_gatt_proxy; + sl_btmesh_rsp_config_client_set_gatt_proxy_t rsp_config_client_set_gatt_proxy; + sl_btmesh_rsp_config_client_get_relay_t rsp_config_client_get_relay; + sl_btmesh_rsp_config_client_set_relay_t rsp_config_client_set_relay; + sl_btmesh_rsp_config_client_get_network_transmit_t rsp_config_client_get_network_transmit; + sl_btmesh_rsp_config_client_set_network_transmit_t rsp_config_client_set_network_transmit; + sl_btmesh_rsp_config_client_get_identity_t rsp_config_client_get_identity; + sl_btmesh_rsp_config_client_set_identity_t rsp_config_client_set_identity; + sl_btmesh_rsp_config_client_get_friend_t rsp_config_client_get_friend; + sl_btmesh_rsp_config_client_set_friend_t rsp_config_client_set_friend; + sl_btmesh_rsp_config_client_get_key_refresh_phase_t rsp_config_client_get_key_refresh_phase; + sl_btmesh_rsp_config_client_get_lpn_polltimeout_t rsp_config_client_get_lpn_polltimeout; + sl_btmesh_rsp_config_client_get_dcd_t rsp_config_client_get_dcd; + sl_btmesh_rsp_config_client_reset_node_t rsp_config_client_reset_node; + sl_btmesh_rsp_config_client_set_request_timeout_for_node_t rsp_config_client_set_request_timeout_for_node; + sl_btmesh_rsp_mbt_client_init_t rsp_mbt_client_init; + sl_btmesh_rsp_mbt_client_setup_t rsp_mbt_client_setup; + sl_btmesh_rsp_mbt_client_query_information_t rsp_mbt_client_query_information; + sl_btmesh_rsp_mbt_client_get_server_status_t rsp_mbt_client_get_server_status; + sl_btmesh_rsp_mbt_client_add_server_t rsp_mbt_client_add_server; + sl_btmesh_rsp_mbt_client_start_transfer_t rsp_mbt_client_start_transfer; + sl_btmesh_rsp_mbt_client_start_block_t rsp_mbt_client_start_block; + sl_btmesh_rsp_mbt_client_send_chunk_request_rsp_t rsp_mbt_client_send_chunk_request_rsp; + sl_btmesh_rsp_mbt_client_query_block_status_t rsp_mbt_client_query_block_status; + sl_btmesh_rsp_mbt_client_get_status_t rsp_mbt_client_get_status; + sl_btmesh_rsp_mbt_client_get_transfer_status_t rsp_mbt_client_get_transfer_status; + sl_btmesh_rsp_mbt_client_cancel_transfer_t rsp_mbt_client_cancel_transfer; + sl_btmesh_rsp_mbt_client_abort_t rsp_mbt_client_abort; + sl_btmesh_rsp_mbt_server_init_t rsp_mbt_server_init; + sl_btmesh_rsp_mbt_server_start_t rsp_mbt_server_start; + sl_btmesh_rsp_mbt_server_get_transfer_status_t rsp_mbt_server_get_transfer_status; + sl_btmesh_rsp_mbt_server_transfer_complete_t rsp_mbt_server_transfer_complete; + sl_btmesh_rsp_mbt_server_abort_t rsp_mbt_server_abort; + sl_btmesh_rsp_mbt_server_set_pull_mode_parameters_t rsp_mbt_server_set_pull_mode_parameters; + sl_btmesh_rsp_mbt_server_transfer_start_rsp_t rsp_mbt_server_transfer_start_rsp; + sl_btmesh_rsp_sensor_server_init_t rsp_sensor_server_init; + sl_btmesh_rsp_sensor_server_deinit_t rsp_sensor_server_deinit; + sl_btmesh_rsp_sensor_server_send_descriptor_status_t rsp_sensor_server_send_descriptor_status; + sl_btmesh_rsp_sensor_server_send_status_t rsp_sensor_server_send_status; + sl_btmesh_rsp_sensor_server_send_column_status_t rsp_sensor_server_send_column_status; + sl_btmesh_rsp_sensor_server_send_series_status_t rsp_sensor_server_send_series_status; + sl_btmesh_rsp_sensor_setup_server_send_cadence_status_t rsp_sensor_setup_server_send_cadence_status; + sl_btmesh_rsp_sensor_setup_server_send_settings_status_t rsp_sensor_setup_server_send_settings_status; + sl_btmesh_rsp_sensor_setup_server_send_setting_status_t rsp_sensor_setup_server_send_setting_status; + sl_btmesh_rsp_sensor_client_init_t rsp_sensor_client_init; + sl_btmesh_rsp_sensor_client_deinit_t rsp_sensor_client_deinit; + sl_btmesh_rsp_sensor_client_get_descriptor_t rsp_sensor_client_get_descriptor; + sl_btmesh_rsp_sensor_client_get_t rsp_sensor_client_get; + sl_btmesh_rsp_sensor_client_get_column_t rsp_sensor_client_get_column; + sl_btmesh_rsp_sensor_client_get_series_t rsp_sensor_client_get_series; + sl_btmesh_rsp_sensor_client_get_cadence_t rsp_sensor_client_get_cadence; + sl_btmesh_rsp_sensor_client_set_cadence_t rsp_sensor_client_set_cadence; + sl_btmesh_rsp_sensor_client_get_settings_t rsp_sensor_client_get_settings; + sl_btmesh_rsp_sensor_client_get_setting_t rsp_sensor_client_get_setting; + sl_btmesh_rsp_sensor_client_set_setting_t rsp_sensor_client_set_setting; + sl_btmesh_rsp_fw_update_client_init_t rsp_fw_update_client_init; + sl_btmesh_rsp_fw_update_client_deinit_t rsp_fw_update_client_deinit; + sl_btmesh_rsp_fw_update_client_get_info_t rsp_fw_update_client_get_info; + sl_btmesh_rsp_fw_update_client_get_update_t rsp_fw_update_client_get_update; + sl_btmesh_rsp_fw_update_client_start_update_t rsp_fw_update_client_start_update; + sl_btmesh_rsp_fw_update_client_cancel_update_t rsp_fw_update_client_cancel_update; + sl_btmesh_rsp_fw_update_client_apply_update_t rsp_fw_update_client_apply_update; + sl_btmesh_rsp_fw_update_client_check_metadata_t rsp_fw_update_client_check_metadata; + sl_btmesh_rsp_lc_client_init_t rsp_lc_client_init; + sl_btmesh_rsp_lc_client_get_mode_t rsp_lc_client_get_mode; + sl_btmesh_rsp_lc_client_set_mode_t rsp_lc_client_set_mode; + sl_btmesh_rsp_lc_client_get_om_t rsp_lc_client_get_om; + sl_btmesh_rsp_lc_client_set_om_t rsp_lc_client_set_om; + sl_btmesh_rsp_lc_client_get_light_onoff_t rsp_lc_client_get_light_onoff; + sl_btmesh_rsp_lc_client_set_light_onoff_t rsp_lc_client_set_light_onoff; + sl_btmesh_rsp_lc_client_get_property_t rsp_lc_client_get_property; + sl_btmesh_rsp_lc_client_set_property_t rsp_lc_client_set_property; + sl_btmesh_rsp_lc_server_init_t rsp_lc_server_init; + sl_btmesh_rsp_lc_server_deinit_t rsp_lc_server_deinit; + sl_btmesh_rsp_lc_server_update_mode_t rsp_lc_server_update_mode; + sl_btmesh_rsp_lc_server_update_om_t rsp_lc_server_update_om; + sl_btmesh_rsp_lc_server_update_light_onoff_t rsp_lc_server_update_light_onoff; + sl_btmesh_rsp_lc_server_init_all_properties_t rsp_lc_server_init_all_properties; + sl_btmesh_rsp_lc_server_set_publish_mask_t rsp_lc_server_set_publish_mask; + sl_btmesh_rsp_lc_server_set_regulator_interval_t rsp_lc_server_set_regulator_interval; + sl_btmesh_rsp_lc_server_set_event_mask_t rsp_lc_server_set_event_mask; + sl_btmesh_rsp_lc_server_get_lc_state_t rsp_lc_server_get_lc_state; + sl_btmesh_rsp_lc_setup_server_update_property_t rsp_lc_setup_server_update_property; + sl_btmesh_rsp_scene_client_init_t rsp_scene_client_init; + sl_btmesh_rsp_scene_client_get_t rsp_scene_client_get; + sl_btmesh_rsp_scene_client_get_register_t rsp_scene_client_get_register; + sl_btmesh_rsp_scene_client_recall_t rsp_scene_client_recall; + sl_btmesh_rsp_scene_client_store_t rsp_scene_client_store; + sl_btmesh_rsp_scene_client_delete_t rsp_scene_client_delete; + sl_btmesh_rsp_scene_server_init_t rsp_scene_server_init; + sl_btmesh_rsp_scene_server_deinit_t rsp_scene_server_deinit; + sl_btmesh_rsp_scene_server_reset_register_t rsp_scene_server_reset_register; + sl_btmesh_rsp_scene_server_enable_compact_recall_events_t rsp_scene_server_enable_compact_recall_events; + sl_btmesh_rsp_scene_setup_server_init_t rsp_scene_setup_server_init; + sl_btmesh_rsp_scheduler_client_init_t rsp_scheduler_client_init; + sl_btmesh_rsp_scheduler_client_deinit_t rsp_scheduler_client_deinit; + sl_btmesh_rsp_scheduler_client_get_t rsp_scheduler_client_get; + sl_btmesh_rsp_scheduler_client_get_action_t rsp_scheduler_client_get_action; + sl_btmesh_rsp_scheduler_client_set_action_t rsp_scheduler_client_set_action; + sl_btmesh_rsp_scheduler_server_init_t rsp_scheduler_server_init; + sl_btmesh_rsp_scheduler_server_deinit_t rsp_scheduler_server_deinit; + sl_btmesh_rsp_scheduler_server_get_t rsp_scheduler_server_get; + sl_btmesh_rsp_scheduler_server_get_action_t rsp_scheduler_server_get_action; + sl_btmesh_rsp_scheduler_server_set_action_t rsp_scheduler_server_set_action; + sl_btmesh_rsp_fw_update_server_init_t rsp_fw_update_server_init; + sl_btmesh_rsp_fw_update_server_deinit_t rsp_fw_update_server_deinit; + sl_btmesh_rsp_fw_update_server_check_fw_metadata_rsp_t rsp_fw_update_server_check_fw_metadata_rsp; + sl_btmesh_rsp_fw_update_server_update_start_rsp_t rsp_fw_update_server_update_start_rsp; + sl_btmesh_rsp_fw_update_server_verify_fw_rsp_t rsp_fw_update_server_verify_fw_rsp; + sl_btmesh_rsp_fw_update_server_distributor_self_update_rsp_t rsp_fw_update_server_distributor_self_update_rsp; + sl_btmesh_rsp_time_server_init_t rsp_time_server_init; + sl_btmesh_rsp_time_server_deinit_t rsp_time_server_deinit; + sl_btmesh_rsp_time_server_get_time_t rsp_time_server_get_time; + sl_btmesh_rsp_time_server_set_time_t rsp_time_server_set_time; + sl_btmesh_rsp_time_server_get_time_zone_offset_new_t rsp_time_server_get_time_zone_offset_new; + sl_btmesh_rsp_time_server_set_time_zone_offset_new_t rsp_time_server_set_time_zone_offset_new; + sl_btmesh_rsp_time_server_get_tai_utc_delta_new_t rsp_time_server_get_tai_utc_delta_new; + sl_btmesh_rsp_time_server_set_tai_utc_delta_new_t rsp_time_server_set_tai_utc_delta_new; + sl_btmesh_rsp_time_server_get_time_role_t rsp_time_server_get_time_role; + sl_btmesh_rsp_time_server_set_time_role_t rsp_time_server_set_time_role; + sl_btmesh_rsp_time_server_get_datetime_t rsp_time_server_get_datetime; + sl_btmesh_rsp_time_server_publish_t rsp_time_server_publish; + sl_btmesh_rsp_time_server_status_t rsp_time_server_status; + sl_btmesh_rsp_time_client_init_t rsp_time_client_init; + sl_btmesh_rsp_time_client_deinit_t rsp_time_client_deinit; + sl_btmesh_rsp_time_client_get_time_t rsp_time_client_get_time; + sl_btmesh_rsp_time_client_set_time_t rsp_time_client_set_time; + sl_btmesh_rsp_time_client_get_time_zone_t rsp_time_client_get_time_zone; + sl_btmesh_rsp_time_client_set_time_zone_t rsp_time_client_set_time_zone; + sl_btmesh_rsp_time_client_get_tai_utc_delta_t rsp_time_client_get_tai_utc_delta; + sl_btmesh_rsp_time_client_set_tai_utc_delta_t rsp_time_client_set_tai_utc_delta; + sl_btmesh_rsp_time_client_get_time_role_t rsp_time_client_get_time_role; + sl_btmesh_rsp_time_client_set_time_role_t rsp_time_client_set_time_role; + sl_btmesh_rsp_fw_dist_server_init_t rsp_fw_dist_server_init; + sl_btmesh_rsp_fw_dist_server_deinit_t rsp_fw_dist_server_deinit; + sl_btmesh_rsp_fw_dist_server_upload_start_rsp_t rsp_fw_dist_server_upload_start_rsp; + sl_btmesh_rsp_fw_dist_server_execute_distribution_step_t rsp_fw_dist_server_execute_distribution_step; + sl_btmesh_rsp_fw_dist_server_upload_oob_start_rsp_t rsp_fw_dist_server_upload_oob_start_rsp; + sl_btmesh_rsp_fw_dist_server_set_upload_oob_metadata_t rsp_fw_dist_server_set_upload_oob_metadata; + sl_btmesh_rsp_fw_dist_server_set_upload_oob_image_size_t rsp_fw_dist_server_set_upload_oob_image_size; + sl_btmesh_rsp_fw_dist_server_set_upload_oob_progress_t rsp_fw_dist_server_set_upload_oob_progress; + sl_btmesh_rsp_fw_dist_server_get_node_status_by_index_t rsp_fw_dist_server_get_node_status_by_index; + sl_btmesh_rsp_fw_dist_server_get_node_status_by_address_t rsp_fw_dist_server_get_node_status_by_address; + sl_btmesh_rsp_fw_dist_server_delete_rsp_t rsp_fw_dist_server_delete_rsp; + sl_btmesh_rsp_fw_dist_server_dist_start_rsp_t rsp_fw_dist_server_dist_start_rsp; + sl_btmesh_rsp_fw_dist_server_set_multicast_threshold_t rsp_fw_dist_server_set_multicast_threshold; + sl_btmesh_rsp_fw_dist_server_delete_all_rsp_t rsp_fw_dist_server_delete_all_rsp; + sl_btmesh_rsp_fw_dist_server_resume_rsp_t rsp_fw_dist_server_resume_rsp; + sl_btmesh_rsp_fw_dist_client_init_t rsp_fw_dist_client_init; + sl_btmesh_rsp_fw_dist_client_deinit_t rsp_fw_dist_client_deinit; + sl_btmesh_rsp_fw_dist_client_setup_t rsp_fw_dist_client_setup; + sl_btmesh_rsp_fw_dist_client_setup_upload_t rsp_fw_dist_client_setup_upload; + sl_btmesh_rsp_fw_dist_client_set_upload_metadata_t rsp_fw_dist_client_set_upload_metadata; + sl_btmesh_rsp_fw_dist_client_get_receivers_t rsp_fw_dist_client_get_receivers; + sl_btmesh_rsp_fw_dist_client_get_t rsp_fw_dist_client_get; + sl_btmesh_rsp_fw_dist_client_start_distribution_t rsp_fw_dist_client_start_distribution; + sl_btmesh_rsp_fw_dist_client_cancel_distribution_t rsp_fw_dist_client_cancel_distribution; + sl_btmesh_rsp_fw_dist_client_apply_distribution_t rsp_fw_dist_client_apply_distribution; + sl_btmesh_rsp_fw_dist_client_suspend_distribution_t rsp_fw_dist_client_suspend_distribution; + sl_btmesh_rsp_fw_dist_client_add_receivers_t rsp_fw_dist_client_add_receivers; + sl_btmesh_rsp_fw_dist_client_delete_all_receivers_t rsp_fw_dist_client_delete_all_receivers; + sl_btmesh_rsp_fw_dist_client_get_capabilities_t rsp_fw_dist_client_get_capabilities; + sl_btmesh_rsp_fw_dist_client_get_upload_t rsp_fw_dist_client_get_upload; + sl_btmesh_rsp_fw_dist_client_start_upload_t rsp_fw_dist_client_start_upload; + sl_btmesh_rsp_fw_dist_client_cancel_upload_t rsp_fw_dist_client_cancel_upload; + sl_btmesh_rsp_fw_dist_client_get_fw_t rsp_fw_dist_client_get_fw; + sl_btmesh_rsp_fw_dist_client_get_fw_by_index_t rsp_fw_dist_client_get_fw_by_index; + sl_btmesh_rsp_fw_dist_client_delete_fw_t rsp_fw_dist_client_delete_fw; + sl_btmesh_rsp_fw_dist_client_delete_all_fw_t rsp_fw_dist_client_delete_all_fw; + sl_btmesh_rsp_fw_dist_client_prepare_oob_upload_t rsp_fw_dist_client_prepare_oob_upload; + sl_btmesh_rsp_fw_dist_client_start_oob_upload_t rsp_fw_dist_client_start_oob_upload; + sl_btmesh_rsp_fw_dist_client_suspend_upload_t rsp_fw_dist_client_suspend_upload; + sl_btmesh_rsp_fw_dist_client_resume_upload_t rsp_fw_dist_client_resume_upload; + sl_btmesh_rsp_remote_provisioning_client_init_t rsp_remote_provisioning_client_init; + sl_btmesh_rsp_remote_provisioning_client_get_scan_capabilities_t rsp_remote_provisioning_client_get_scan_capabilities; + sl_btmesh_rsp_remote_provisioning_client_start_scan_t rsp_remote_provisioning_client_start_scan; + sl_btmesh_rsp_remote_provisioning_client_get_scan_status_t rsp_remote_provisioning_client_get_scan_status; + sl_btmesh_rsp_remote_provisioning_client_stop_scan_t rsp_remote_provisioning_client_stop_scan; + sl_btmesh_rsp_remote_provisioning_client_start_extended_scan_t rsp_remote_provisioning_client_start_extended_scan; + sl_btmesh_rsp_remote_provisioning_client_open_link_t rsp_remote_provisioning_client_open_link; + sl_btmesh_rsp_remote_provisioning_client_get_link_status_t rsp_remote_provisioning_client_get_link_status; + sl_btmesh_rsp_remote_provisioning_client_close_link_t rsp_remote_provisioning_client_close_link; + sl_btmesh_rsp_remote_provisioning_server_init_t rsp_remote_provisioning_server_init; + sl_btmesh_rsp_remote_provisioning_server_open_link_t rsp_remote_provisioning_server_open_link; + sl_btmesh_rsp_remote_provisioning_server_set_default_bearer_t rsp_remote_provisioning_server_set_default_bearer; + sl_btmesh_rsp_fw_standalone_updater_init_t rsp_fw_standalone_updater_init; + sl_btmesh_rsp_fw_standalone_updater_deinit_t rsp_fw_standalone_updater_deinit; + sl_btmesh_rsp_fw_standalone_updater_setup_t rsp_fw_standalone_updater_setup; + sl_btmesh_rsp_fw_standalone_updater_set_metadata_t rsp_fw_standalone_updater_set_metadata; + sl_btmesh_rsp_fw_standalone_updater_set_multicast_threshold_t rsp_fw_standalone_updater_set_multicast_threshold; + sl_btmesh_rsp_fw_standalone_updater_add_receiver_t rsp_fw_standalone_updater_add_receiver; + sl_btmesh_rsp_fw_standalone_updater_delete_all_receivers_t rsp_fw_standalone_updater_delete_all_receivers; + sl_btmesh_rsp_fw_standalone_updater_start_t rsp_fw_standalone_updater_start; + sl_btmesh_rsp_fw_standalone_updater_execute_distribution_step_t rsp_fw_standalone_updater_execute_distribution_step; + sl_btmesh_rsp_fw_standalone_updater_apply_t rsp_fw_standalone_updater_apply; + sl_btmesh_rsp_fw_standalone_updater_get_state_t rsp_fw_standalone_updater_get_state; + sl_btmesh_rsp_fw_standalone_updater_get_node_status_by_index_t rsp_fw_standalone_updater_get_node_status_by_index; + sl_btmesh_rsp_fw_standalone_updater_get_node_status_by_address_t rsp_fw_standalone_updater_get_node_status_by_address; + sl_btmesh_rsp_fw_standalone_updater_cancel_t rsp_fw_standalone_updater_cancel; + sl_btmesh_rsp_migration_migrate_keys_t rsp_migration_migrate_keys; + sl_btmesh_rsp_migration_migrate_ddb_t rsp_migration_migrate_ddb; + sl_btmesh_rsp_ncp_fw_list_init_t rsp_ncp_fw_list_init; + sl_btmesh_rsp_ncp_fw_list_deinit_t rsp_ncp_fw_list_deinit; + sl_btmesh_rsp_ncp_fw_list_get_fw_info_by_index_t rsp_ncp_fw_list_get_fw_info_by_index; + sl_btmesh_rsp_ncp_fw_list_get_fw_metadata_by_index_t rsp_ncp_fw_list_get_fw_metadata_by_index; + sl_btmesh_rsp_ncp_fw_list_add_fw_t rsp_ncp_fw_list_add_fw; + sl_btmesh_rsp_ncp_fw_list_set_fw_metadata_t rsp_ncp_fw_list_set_fw_metadata; + sl_btmesh_rsp_sar_config_client_init_t rsp_sar_config_client_init; + sl_btmesh_rsp_sar_config_client_deinit_t rsp_sar_config_client_deinit; + sl_btmesh_rsp_sar_config_client_get_sar_transmitter_t rsp_sar_config_client_get_sar_transmitter; + sl_btmesh_rsp_sar_config_client_set_sar_transmitter_t rsp_sar_config_client_set_sar_transmitter; + sl_btmesh_rsp_sar_config_client_get_sar_receiver_t rsp_sar_config_client_get_sar_receiver; + sl_btmesh_rsp_sar_config_client_set_sar_receiver_t rsp_sar_config_client_set_sar_receiver; + sl_btmesh_rsp_sar_config_server_init_t rsp_sar_config_server_init; + sl_btmesh_rsp_sar_config_server_deinit_t rsp_sar_config_server_deinit; + sl_btmesh_rsp_sar_config_server_get_sar_transmitter_t rsp_sar_config_server_get_sar_transmitter; + sl_btmesh_rsp_sar_config_server_set_sar_transmitter_t rsp_sar_config_server_set_sar_transmitter; + sl_btmesh_rsp_sar_config_server_get_sar_receiver_t rsp_sar_config_server_get_sar_receiver; + sl_btmesh_rsp_sar_config_server_set_sar_receiver_t rsp_sar_config_server_set_sar_receiver; + sl_btmesh_rsp_private_beacon_client_init_t rsp_private_beacon_client_init; + sl_btmesh_rsp_private_beacon_client_deinit_t rsp_private_beacon_client_deinit; + sl_btmesh_rsp_private_beacon_client_get_beacon_t rsp_private_beacon_client_get_beacon; + sl_btmesh_rsp_private_beacon_client_set_beacon_t rsp_private_beacon_client_set_beacon; + sl_btmesh_rsp_private_beacon_client_get_gatt_proxy_t rsp_private_beacon_client_get_gatt_proxy; + sl_btmesh_rsp_private_beacon_client_set_gatt_proxy_t rsp_private_beacon_client_set_gatt_proxy; + sl_btmesh_rsp_private_beacon_client_get_identity_t rsp_private_beacon_client_get_identity; + sl_btmesh_rsp_private_beacon_client_set_identity_t rsp_private_beacon_client_set_identity; + sl_btmesh_rsp_private_beacon_server_init_t rsp_private_beacon_server_init; + sl_btmesh_rsp_private_beacon_server_deinit_t rsp_private_beacon_server_deinit; + sl_btmesh_rsp_lcd_client_init_t rsp_lcd_client_init; + sl_btmesh_rsp_lcd_client_deinit_t rsp_lcd_client_deinit; + sl_btmesh_rsp_lcd_client_get_composition_data_t rsp_lcd_client_get_composition_data; + sl_btmesh_rsp_lcd_client_get_metadata_t rsp_lcd_client_get_metadata; + sl_btmesh_rsp_lcd_server_init_t rsp_lcd_server_init; + sl_btmesh_rsp_lcd_server_deinit_t rsp_lcd_server_deinit; + sl_btmesh_rsp_on_demand_private_proxy_client_init_t rsp_on_demand_private_proxy_client_init; + sl_btmesh_rsp_on_demand_private_proxy_client_deinit_t rsp_on_demand_private_proxy_client_deinit; + sl_btmesh_rsp_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_t rsp_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy; + sl_btmesh_rsp_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_t rsp_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy; + sl_btmesh_rsp_solicitation_config_client_init_t rsp_solicitation_config_client_init; + sl_btmesh_rsp_solicitation_config_client_deinit_t rsp_solicitation_config_client_deinit; + sl_btmesh_rsp_solicitation_config_client_clear_items_t rsp_solicitation_config_client_clear_items; + sl_btmesh_rsp_on_demand_private_proxy_server_init_t rsp_on_demand_private_proxy_server_init; + sl_btmesh_rsp_on_demand_private_proxy_server_deinit_t rsp_on_demand_private_proxy_server_deinit; + sl_btmesh_rsp_silabs_config_server_init_t rsp_silabs_config_server_init; + sl_btmesh_rsp_silabs_config_server_deinit_t rsp_silabs_config_server_deinit; + sl_btmesh_rsp_silabs_config_server_set_tx_t rsp_silabs_config_server_set_tx; + sl_btmesh_rsp_silabs_config_server_get_tx_t rsp_silabs_config_server_get_tx; + sl_btmesh_rsp_silabs_config_server_set_model_enable_t rsp_silabs_config_server_set_model_enable; + sl_btmesh_rsp_silabs_config_server_get_model_enable_t rsp_silabs_config_server_get_model_enable; + sl_btmesh_rsp_silabs_config_server_set_network_pdu_t rsp_silabs_config_server_set_network_pdu; + sl_btmesh_rsp_silabs_config_server_get_network_pdu_t rsp_silabs_config_server_get_network_pdu; + sl_btmesh_evt_node_initialized_t evt_node_initialized; + sl_btmesh_evt_node_provisioned_t evt_node_provisioned; + sl_btmesh_evt_node_config_get_t evt_node_config_get; + sl_btmesh_evt_node_config_set_t evt_node_config_set; + sl_btmesh_evt_node_display_output_oob_t evt_node_display_output_oob; + sl_btmesh_evt_node_input_oob_request_t evt_node_input_oob_request; + sl_btmesh_evt_node_provisioning_started_t evt_node_provisioning_started; + sl_btmesh_evt_node_provisioning_failed_t evt_node_provisioning_failed; + sl_btmesh_evt_node_key_added_t evt_node_key_added; + sl_btmesh_evt_node_model_config_changed_t evt_node_model_config_changed; + sl_btmesh_evt_node_ivrecovery_needed_t evt_node_ivrecovery_needed; + sl_btmesh_evt_node_changed_ivupdate_state_t evt_node_changed_ivupdate_state; + sl_btmesh_evt_node_key_removed_t evt_node_key_removed; + sl_btmesh_evt_node_key_updated_t evt_node_key_updated; + sl_btmesh_evt_node_heartbeat_t evt_node_heartbeat; + sl_btmesh_evt_node_heartbeat_start_t evt_node_heartbeat_start; + sl_btmesh_evt_node_heartbeat_stop_t evt_node_heartbeat_stop; + sl_btmesh_evt_node_beacon_received_t evt_node_beacon_received; + sl_btmesh_evt_node_local_dcd_data_t evt_node_local_dcd_data; + sl_btmesh_evt_node_local_dcd_data_end_t evt_node_local_dcd_data_end; + sl_btmesh_evt_node_local_model_metadata_page_t evt_node_local_model_metadata_page; + sl_btmesh_evt_node_local_model_metadata_page_end_t evt_node_local_model_metadata_page_end; + sl_btmesh_evt_node_start_received_t evt_node_start_received; + sl_btmesh_evt_node_address_updated_t evt_node_address_updated; + sl_btmesh_evt_prov_initialized_t evt_prov_initialized; + sl_btmesh_evt_prov_provisioning_suspended_t evt_prov_provisioning_suspended; + sl_btmesh_evt_prov_capabilities_t evt_prov_capabilities; + sl_btmesh_evt_prov_provisioning_failed_t evt_prov_provisioning_failed; + sl_btmesh_evt_prov_device_provisioned_t evt_prov_device_provisioned; + sl_btmesh_evt_prov_unprov_beacon_t evt_prov_unprov_beacon; + sl_btmesh_evt_prov_oob_pkey_request_t evt_prov_oob_pkey_request; + sl_btmesh_evt_prov_oob_auth_request_t evt_prov_oob_auth_request; + sl_btmesh_evt_prov_oob_display_input_t evt_prov_oob_display_input; + sl_btmesh_evt_prov_ddb_list_t evt_prov_ddb_list; + sl_btmesh_evt_prov_uri_t evt_prov_uri; + sl_btmesh_evt_prov_key_refresh_phase_update_t evt_prov_key_refresh_phase_update; + sl_btmesh_evt_prov_key_refresh_node_update_t evt_prov_key_refresh_node_update; + sl_btmesh_evt_prov_key_refresh_complete_t evt_prov_key_refresh_complete; + sl_btmesh_evt_prov_add_ddb_entry_complete_t evt_prov_add_ddb_entry_complete; + sl_btmesh_evt_prov_delete_ddb_entry_complete_t evt_prov_delete_ddb_entry_complete; + sl_btmesh_evt_prov_initialization_failed_t evt_prov_initialization_failed; + sl_btmesh_evt_prov_provisioning_records_list_t evt_prov_provisioning_records_list; + sl_btmesh_evt_prov_provisioning_record_data_t evt_prov_provisioning_record_data; + sl_btmesh_evt_prov_start_sent_t evt_prov_start_sent; + sl_btmesh_evt_proxy_connected_t evt_proxy_connected; + sl_btmesh_evt_proxy_disconnected_t evt_proxy_disconnected; + sl_btmesh_evt_proxy_filter_status_t evt_proxy_filter_status; + sl_btmesh_evt_silabs_config_client_tx_status_t evt_silabs_config_client_tx_status; + sl_btmesh_evt_silabs_config_client_model_status_t evt_silabs_config_client_model_status; + sl_btmesh_evt_silabs_config_client_network_pdu_status_t evt_silabs_config_client_network_pdu_status; + sl_btmesh_evt_vendor_model_receive_t evt_vendor_model_receive; + sl_btmesh_evt_vendor_model_send_complete_t evt_vendor_model_send_complete; + sl_btmesh_evt_health_client_server_status_t evt_health_client_server_status; + sl_btmesh_evt_health_client_server_status_period_t evt_health_client_server_status_period; + sl_btmesh_evt_health_client_server_status_attention_t evt_health_client_server_status_attention; + sl_btmesh_evt_health_server_attention_t evt_health_server_attention; + sl_btmesh_evt_health_server_test_request_t evt_health_server_test_request; + sl_btmesh_evt_generic_client_server_status_t evt_generic_client_server_status; + sl_btmesh_evt_generic_server_client_request_t evt_generic_server_client_request; + sl_btmesh_evt_generic_server_state_changed_t evt_generic_server_state_changed; + sl_btmesh_evt_generic_server_state_recall_t evt_generic_server_state_recall; + sl_btmesh_evt_test_local_heartbeat_subscription_complete_t evt_test_local_heartbeat_subscription_complete; + sl_btmesh_evt_test_replay_protection_list_entry_set_t evt_test_replay_protection_list_entry_set; + sl_btmesh_evt_test_replay_protection_list_entry_cleared_t evt_test_replay_protection_list_entry_cleared; + sl_btmesh_evt_test_replay_protection_list_saved_t evt_test_replay_protection_list_saved; + sl_btmesh_evt_lpn_friendship_established_t evt_lpn_friendship_established; + sl_btmesh_evt_lpn_friendship_failed_t evt_lpn_friendship_failed; + sl_btmesh_evt_lpn_friendship_terminated_t evt_lpn_friendship_terminated; + sl_btmesh_evt_friend_friendship_established_t evt_friend_friendship_established; + sl_btmesh_evt_friend_friendship_terminated_t evt_friend_friendship_terminated; + sl_btmesh_evt_config_client_request_modified_t evt_config_client_request_modified; + sl_btmesh_evt_config_client_netkey_status_t evt_config_client_netkey_status; + sl_btmesh_evt_config_client_netkey_list_t evt_config_client_netkey_list; + sl_btmesh_evt_config_client_netkey_list_end_t evt_config_client_netkey_list_end; + sl_btmesh_evt_config_client_appkey_status_t evt_config_client_appkey_status; + sl_btmesh_evt_config_client_appkey_list_t evt_config_client_appkey_list; + sl_btmesh_evt_config_client_appkey_list_end_t evt_config_client_appkey_list_end; + sl_btmesh_evt_config_client_binding_status_t evt_config_client_binding_status; + sl_btmesh_evt_config_client_bindings_list_t evt_config_client_bindings_list; + sl_btmesh_evt_config_client_bindings_list_end_t evt_config_client_bindings_list_end; + sl_btmesh_evt_config_client_model_pub_status_t evt_config_client_model_pub_status; + sl_btmesh_evt_config_client_model_sub_status_t evt_config_client_model_sub_status; + sl_btmesh_evt_config_client_subs_list_t evt_config_client_subs_list; + sl_btmesh_evt_config_client_subs_list_end_t evt_config_client_subs_list_end; + sl_btmesh_evt_config_client_heartbeat_pub_status_t evt_config_client_heartbeat_pub_status; + sl_btmesh_evt_config_client_heartbeat_sub_status_t evt_config_client_heartbeat_sub_status; + sl_btmesh_evt_config_client_beacon_status_t evt_config_client_beacon_status; + sl_btmesh_evt_config_client_default_ttl_status_t evt_config_client_default_ttl_status; + sl_btmesh_evt_config_client_gatt_proxy_status_t evt_config_client_gatt_proxy_status; + sl_btmesh_evt_config_client_relay_status_t evt_config_client_relay_status; + sl_btmesh_evt_config_client_network_transmit_status_t evt_config_client_network_transmit_status; + sl_btmesh_evt_config_client_identity_status_t evt_config_client_identity_status; + sl_btmesh_evt_config_client_friend_status_t evt_config_client_friend_status; + sl_btmesh_evt_config_client_key_refresh_phase_status_t evt_config_client_key_refresh_phase_status; + sl_btmesh_evt_config_client_lpn_polltimeout_status_t evt_config_client_lpn_polltimeout_status; + sl_btmesh_evt_config_client_dcd_data_t evt_config_client_dcd_data; + sl_btmesh_evt_config_client_dcd_data_end_t evt_config_client_dcd_data_end; + sl_btmesh_evt_config_client_reset_status_t evt_config_client_reset_status; + sl_btmesh_evt_config_client_obo_ack_received_t evt_config_client_obo_ack_received; + sl_btmesh_evt_mbt_client_server_information_status_t evt_mbt_client_server_information_status; + sl_btmesh_evt_mbt_client_query_information_complete_t evt_mbt_client_query_information_complete; + sl_btmesh_evt_mbt_client_server_transfer_status_t evt_mbt_client_server_transfer_status; + sl_btmesh_evt_mbt_client_start_transfer_complete_t evt_mbt_client_start_transfer_complete; + sl_btmesh_evt_mbt_client_server_block_status_t evt_mbt_client_server_block_status; + sl_btmesh_evt_mbt_client_start_block_complete_t evt_mbt_client_start_block_complete; + sl_btmesh_evt_mbt_client_send_chunk_request_t evt_mbt_client_send_chunk_request; + sl_btmesh_evt_mbt_client_server_partial_block_report_t evt_mbt_client_server_partial_block_report; + sl_btmesh_evt_mbt_client_send_chunks_complete_t evt_mbt_client_send_chunks_complete; + sl_btmesh_evt_mbt_client_query_block_status_complete_t evt_mbt_client_query_block_status_complete; + sl_btmesh_evt_mbt_client_tx_complete_t evt_mbt_client_tx_complete; + sl_btmesh_evt_mbt_client_server_failed_t evt_mbt_client_server_failed; + sl_btmesh_evt_mbt_client_transfer_complete_t evt_mbt_client_transfer_complete; + sl_btmesh_evt_mbt_server_state_changed_t evt_mbt_server_state_changed; + sl_btmesh_evt_mbt_server_transfer_start_req_t evt_mbt_server_transfer_start_req; + sl_btmesh_evt_mbt_server_block_start_t evt_mbt_server_block_start; + sl_btmesh_evt_mbt_server_chunk_t evt_mbt_server_chunk; + sl_btmesh_evt_mbt_server_block_complete_t evt_mbt_server_block_complete; + sl_btmesh_evt_mbt_server_transfer_cancel_t evt_mbt_server_transfer_cancel; + sl_btmesh_evt_mbt_server_partial_block_report_tx_complete_t evt_mbt_server_partial_block_report_tx_complete; + sl_btmesh_evt_sensor_server_get_request_t evt_sensor_server_get_request; + sl_btmesh_evt_sensor_server_get_column_request_t evt_sensor_server_get_column_request; + sl_btmesh_evt_sensor_server_get_series_request_t evt_sensor_server_get_series_request; + sl_btmesh_evt_sensor_server_publish_t evt_sensor_server_publish; + sl_btmesh_evt_sensor_setup_server_get_cadence_request_t evt_sensor_setup_server_get_cadence_request; + sl_btmesh_evt_sensor_setup_server_set_cadence_request_t evt_sensor_setup_server_set_cadence_request; + sl_btmesh_evt_sensor_setup_server_get_settings_request_t evt_sensor_setup_server_get_settings_request; + sl_btmesh_evt_sensor_setup_server_get_setting_request_t evt_sensor_setup_server_get_setting_request; + sl_btmesh_evt_sensor_setup_server_set_setting_request_t evt_sensor_setup_server_set_setting_request; + sl_btmesh_evt_sensor_setup_server_publish_t evt_sensor_setup_server_publish; + sl_btmesh_evt_sensor_client_descriptor_status_t evt_sensor_client_descriptor_status; + sl_btmesh_evt_sensor_client_cadence_status_t evt_sensor_client_cadence_status; + sl_btmesh_evt_sensor_client_settings_status_t evt_sensor_client_settings_status; + sl_btmesh_evt_sensor_client_setting_status_t evt_sensor_client_setting_status; + sl_btmesh_evt_sensor_client_status_t evt_sensor_client_status; + sl_btmesh_evt_sensor_client_column_status_t evt_sensor_client_column_status; + sl_btmesh_evt_sensor_client_series_status_t evt_sensor_client_series_status; + sl_btmesh_evt_sensor_client_publish_t evt_sensor_client_publish; + sl_btmesh_evt_fw_update_client_info_status_current_fwid_t evt_fw_update_client_info_status_current_fwid; + sl_btmesh_evt_fw_update_client_info_status_update_uri_t evt_fw_update_client_info_status_update_uri; + sl_btmesh_evt_fw_update_client_update_status_t evt_fw_update_client_update_status; + sl_btmesh_evt_fw_update_client_metadata_status_t evt_fw_update_client_metadata_status; + sl_btmesh_evt_lc_client_mode_status_t evt_lc_client_mode_status; + sl_btmesh_evt_lc_client_om_status_t evt_lc_client_om_status; + sl_btmesh_evt_lc_client_light_onoff_status_t evt_lc_client_light_onoff_status; + sl_btmesh_evt_lc_client_property_status_t evt_lc_client_property_status; + sl_btmesh_evt_lc_server_mode_updated_t evt_lc_server_mode_updated; + sl_btmesh_evt_lc_server_om_updated_t evt_lc_server_om_updated; + sl_btmesh_evt_lc_server_light_onoff_updated_t evt_lc_server_light_onoff_updated; + sl_btmesh_evt_lc_server_occupancy_updated_t evt_lc_server_occupancy_updated; + sl_btmesh_evt_lc_server_ambient_lux_level_updated_t evt_lc_server_ambient_lux_level_updated; + sl_btmesh_evt_lc_server_linear_output_updated_t evt_lc_server_linear_output_updated; + sl_btmesh_evt_lc_server_state_updated_t evt_lc_server_state_updated; + sl_btmesh_evt_lc_server_regulator_debug_info_t evt_lc_server_regulator_debug_info; + sl_btmesh_evt_lc_setup_server_set_property_t evt_lc_setup_server_set_property; + sl_btmesh_evt_scene_client_status_t evt_scene_client_status; + sl_btmesh_evt_scene_client_register_status_t evt_scene_client_register_status; + sl_btmesh_evt_scene_server_get_t evt_scene_server_get; + sl_btmesh_evt_scene_server_register_get_t evt_scene_server_register_get; + sl_btmesh_evt_scene_server_recall_t evt_scene_server_recall; + sl_btmesh_evt_scene_server_publish_t evt_scene_server_publish; + sl_btmesh_evt_scene_server_compact_recall_t evt_scene_server_compact_recall; + sl_btmesh_evt_scene_setup_server_store_t evt_scene_setup_server_store; + sl_btmesh_evt_scene_setup_server_delete_t evt_scene_setup_server_delete; + sl_btmesh_evt_scene_setup_server_publish_t evt_scene_setup_server_publish; + sl_btmesh_evt_scheduler_client_status_t evt_scheduler_client_status; + sl_btmesh_evt_scheduler_client_action_status_t evt_scheduler_client_action_status; + sl_btmesh_evt_scheduler_server_action_changed_t evt_scheduler_server_action_changed; + sl_btmesh_evt_scheduler_server_scene_changed_t evt_scheduler_server_scene_changed; + sl_btmesh_evt_scheduler_server_action_triggered_t evt_scheduler_server_action_triggered; + sl_btmesh_evt_fw_update_server_check_fw_metadata_req_t evt_fw_update_server_check_fw_metadata_req; + sl_btmesh_evt_fw_update_server_update_start_req_t evt_fw_update_server_update_start_req; + sl_btmesh_evt_fw_update_server_verify_fw_req_t evt_fw_update_server_verify_fw_req; + sl_btmesh_evt_fw_update_server_apply_t evt_fw_update_server_apply; + sl_btmesh_evt_fw_update_server_update_cancelled_t evt_fw_update_server_update_cancelled; + sl_btmesh_evt_fw_update_server_distributor_self_update_req_t evt_fw_update_server_distributor_self_update_req; + sl_btmesh_evt_time_server_time_updated_t evt_time_server_time_updated; + sl_btmesh_evt_time_server_time_zone_offset_updated_t evt_time_server_time_zone_offset_updated; + sl_btmesh_evt_time_server_tai_utc_delta_updated_t evt_time_server_tai_utc_delta_updated; + sl_btmesh_evt_time_server_time_role_updated_t evt_time_server_time_role_updated; + sl_btmesh_evt_time_client_time_status_t evt_time_client_time_status; + sl_btmesh_evt_time_client_time_zone_status_t evt_time_client_time_zone_status; + sl_btmesh_evt_time_client_tai_utc_delta_status_t evt_time_client_tai_utc_delta_status; + sl_btmesh_evt_time_client_time_role_status_t evt_time_client_time_role_status; + sl_btmesh_evt_fw_dist_server_nodes_added_t evt_fw_dist_server_nodes_added; + sl_btmesh_evt_fw_dist_server_nodes_deleted_t evt_fw_dist_server_nodes_deleted; + sl_btmesh_evt_fw_dist_server_dist_start_req_t evt_fw_dist_server_dist_start_req; + sl_btmesh_evt_fw_dist_server_dist_cancel_t evt_fw_dist_server_dist_cancel; + sl_btmesh_evt_fw_dist_server_dist_cancel_complete_t evt_fw_dist_server_dist_cancel_complete; + sl_btmesh_evt_fw_dist_server_upload_start_metadata_t evt_fw_dist_server_upload_start_metadata; + sl_btmesh_evt_fw_dist_server_upload_start_req_t evt_fw_dist_server_upload_start_req; + sl_btmesh_evt_fw_dist_server_upload_cancel_t evt_fw_dist_server_upload_cancel; + sl_btmesh_evt_fw_dist_server_dist_state_changed_t evt_fw_dist_server_dist_state_changed; + sl_btmesh_evt_fw_dist_server_node_failed_t evt_fw_dist_server_node_failed; + sl_btmesh_evt_fw_dist_server_upload_complete_metadata_t evt_fw_dist_server_upload_complete_metadata; + sl_btmesh_evt_fw_dist_server_upload_complete_t evt_fw_dist_server_upload_complete; + sl_btmesh_evt_fw_dist_server_upload_failed_t evt_fw_dist_server_upload_failed; + sl_btmesh_evt_fw_dist_server_upload_oob_start_uri_t evt_fw_dist_server_upload_oob_start_uri; + sl_btmesh_evt_fw_dist_server_upload_oob_start_req_t evt_fw_dist_server_upload_oob_start_req; + sl_btmesh_evt_fw_dist_server_fw_delete_req_t evt_fw_dist_server_fw_delete_req; + sl_btmesh_evt_fw_dist_server_fw_delete_all_req_t evt_fw_dist_server_fw_delete_all_req; + sl_btmesh_evt_fw_dist_server_dist_suspend_t evt_fw_dist_server_dist_suspend; + sl_btmesh_evt_fw_dist_server_resume_req_t evt_fw_dist_server_resume_req; + sl_btmesh_evt_fw_dist_client_receivers_status_t evt_fw_dist_client_receivers_status; + sl_btmesh_evt_fw_dist_client_receivers_list_t evt_fw_dist_client_receivers_list; + sl_btmesh_evt_fw_dist_client_receivers_list_end_t evt_fw_dist_client_receivers_list_end; + sl_btmesh_evt_fw_dist_client_capabilities_status_t evt_fw_dist_client_capabilities_status; + sl_btmesh_evt_fw_dist_client_distribution_status_t evt_fw_dist_client_distribution_status; + sl_btmesh_evt_fw_dist_client_upload_status_t evt_fw_dist_client_upload_status; + sl_btmesh_evt_fw_dist_client_fw_status_t evt_fw_dist_client_fw_status; + sl_btmesh_evt_fw_dist_client_upload_complete_t evt_fw_dist_client_upload_complete; + sl_btmesh_evt_fw_dist_client_upload_failed_t evt_fw_dist_client_upload_failed; + sl_btmesh_evt_remote_provisioning_client_scan_capabilities_t evt_remote_provisioning_client_scan_capabilities; + sl_btmesh_evt_remote_provisioning_client_scan_status_t evt_remote_provisioning_client_scan_status; + sl_btmesh_evt_remote_provisioning_client_scan_report_t evt_remote_provisioning_client_scan_report; + sl_btmesh_evt_remote_provisioning_client_extended_scan_report_t evt_remote_provisioning_client_extended_scan_report; + sl_btmesh_evt_remote_provisioning_client_link_status_t evt_remote_provisioning_client_link_status; + sl_btmesh_evt_remote_provisioning_client_link_report_t evt_remote_provisioning_client_link_report; + sl_btmesh_evt_remote_provisioning_server_link_open_request_t evt_remote_provisioning_server_link_open_request; + sl_btmesh_evt_remote_provisioning_server_link_close_request_t evt_remote_provisioning_server_link_close_request; + sl_btmesh_evt_fw_standalone_updater_dist_state_changed_t evt_fw_standalone_updater_dist_state_changed; + sl_btmesh_evt_fw_standalone_updater_node_failed_t evt_fw_standalone_updater_node_failed; + sl_btmesh_evt_ncp_fw_list_fw_deleted_t evt_ncp_fw_list_fw_deleted; + sl_btmesh_evt_ncp_fw_list_fw_all_deleted_t evt_ncp_fw_list_fw_all_deleted; + sl_btmesh_evt_ncp_fw_list_fw_added_t evt_ncp_fw_list_fw_added; + sl_btmesh_evt_sar_config_client_sar_transmitter_status_t evt_sar_config_client_sar_transmitter_status; + sl_btmesh_evt_sar_config_client_sar_receiver_status_t evt_sar_config_client_sar_receiver_status; + sl_btmesh_evt_sar_config_server_sar_transmitter_set_t evt_sar_config_server_sar_transmitter_set; + sl_btmesh_evt_sar_config_server_sar_receiver_set_t evt_sar_config_server_sar_receiver_set; + sl_btmesh_evt_private_beacon_client_beacon_status_t evt_private_beacon_client_beacon_status; + sl_btmesh_evt_private_beacon_client_gatt_proxy_status_t evt_private_beacon_client_gatt_proxy_status; + sl_btmesh_evt_private_beacon_client_identity_status_t evt_private_beacon_client_identity_status; + sl_btmesh_evt_lcd_client_data_header_t evt_lcd_client_data_header; + sl_btmesh_evt_lcd_client_data_t evt_lcd_client_data; + sl_btmesh_evt_lcd_client_data_end_t evt_lcd_client_data_end; + sl_btmesh_evt_on_demand_private_proxy_client_private_gatt_proxy_status_t evt_on_demand_private_proxy_client_private_gatt_proxy_status; + sl_btmesh_evt_solicitation_config_client_items_status_t evt_solicitation_config_client_items_status; + sl_btmesh_evt_silabs_config_server_tx_changed_t evt_silabs_config_server_tx_changed; + sl_btmesh_evt_silabs_config_server_model_option_changed_t evt_silabs_config_server_model_option_changed; + sl_btmesh_evt_silabs_config_server_network_pdu_changed_t evt_silabs_config_server_network_pdu_changed; + uint8_t payload[SL_BGAPI_MAX_PAYLOAD_SIZE]; + } data; +}); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/protocol/bluetooth/lib/EFR32BG12P/GCC/binapploader.o b/protocol/bluetooth/lib/EFR32BG12P/GCC/binapploader.o index 1f719807ac1..fefb9365032 100644 --- a/protocol/bluetooth/lib/EFR32BG12P/GCC/binapploader.o +++ b/protocol/bluetooth/lib/EFR32BG12P/GCC/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec161e615144a9aa8d01e3d2394ae4bbdf013a6fc7b8fc19a497ed3b7db0745b +oid sha256:1543cc997707bca5f8fe8690002d81fdd2c444447477037917c0eb3e96feab76 size 47652 diff --git a/protocol/bluetooth/lib/EFR32BG12P/GCC/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32BG12P/GCC/binapploader_nvm3.o index caca13b43f1..b6cabda39d4 100644 --- a/protocol/bluetooth/lib/EFR32BG12P/GCC/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32BG12P/GCC/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fabb298aad0f4deb7a36d86cd820b724fbbf2b801ed96a687e4ed7ba989e6cc7 +oid sha256:174d9cda705624996ec954a227e83a35c5859babb9333549bb40066d8e3a53eb size 51748 diff --git a/protocol/bluetooth/lib/EFR32BG12P/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbluetooth.a index 4ba303f3ef1..269882df00b 100644 --- a/protocol/bluetooth/lib/EFR32BG12P/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e45010b1a0d4ae89804705999ea23e7eecbfab3629cd22a151f76d58cf21fd5 -size 2685778 +oid sha256:8847e9f9a8595f4f81b21aacffd1b6b3fee3ff9d15673238f24ca0b7260d2204 +size 2688658 diff --git a/protocol/bluetooth/lib/EFR32BG12P/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..da04c56f1c7 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb69cf32534039367eb8b2e3fa5f6fe2f0a113b3e6724249fe4790a184174a41 +size 2049460 diff --git a/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..91f61fbe1af --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ec9b5d5ab24266895b7a9bea904eaba1b806649a2d6c6647ad376bb865a6fc9 +size 7578 diff --git a/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..0ccd760848b --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:704fde679f7d4cb8d588fa1d56ae9e28c19b044aa913e597951c8d20901eb39a +size 7876 diff --git a/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..f77bdd6711f --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c528a8ea30216d86bb32da41dd63b68a66ce0188c3bd014acf8841b527e737fb +size 7482 diff --git a/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..9b7ad3e244c --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9419f94edab05170ed866bf89ae1c5f7370db6875fcc349d1308234905206b4 +size 6782 diff --git a/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..2af7b62e4a2 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb9ba33252963475c9eb4c418457bfbccf3df49dce57ef7fc08a021312513d94 +size 84472 diff --git a/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..1d386a00a95 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e11d4800338b9ada066475cc581b62b622b42a8844164669664a91feee106dca +size 40356 diff --git a/protocol/bluetooth/lib/EFR32BG12P/GCC/libpsstore.a b/protocol/bluetooth/lib/EFR32BG12P/GCC/libpsstore.a index 3f97a6d5a41..de1f3e859ed 100644 --- a/protocol/bluetooth/lib/EFR32BG12P/GCC/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32BG12P/GCC/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e336780cb2ccfd1e85c11c16f1c46997959dd3297eb89a042c287e4d6c258630 +oid sha256:bc104ef97f918fc1703b35c8b31f57f4b18d237c852963814e9ad26cb2d15a73 size 12822 diff --git a/protocol/bluetooth/lib/EFR32BG12P/IAR/binapploader.o b/protocol/bluetooth/lib/EFR32BG12P/IAR/binapploader.o index 1f719807ac1..fefb9365032 100644 --- a/protocol/bluetooth/lib/EFR32BG12P/IAR/binapploader.o +++ b/protocol/bluetooth/lib/EFR32BG12P/IAR/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec161e615144a9aa8d01e3d2394ae4bbdf013a6fc7b8fc19a497ed3b7db0745b +oid sha256:1543cc997707bca5f8fe8690002d81fdd2c444447477037917c0eb3e96feab76 size 47652 diff --git a/protocol/bluetooth/lib/EFR32BG12P/IAR/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32BG12P/IAR/binapploader_nvm3.o index caca13b43f1..b6cabda39d4 100644 --- a/protocol/bluetooth/lib/EFR32BG12P/IAR/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32BG12P/IAR/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fabb298aad0f4deb7a36d86cd820b724fbbf2b801ed96a687e4ed7ba989e6cc7 +oid sha256:174d9cda705624996ec954a227e83a35c5859babb9333549bb40066d8e3a53eb size 51748 diff --git a/protocol/bluetooth/lib/EFR32BG12P/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbluetooth.a index 3a3da080312..14b203068f6 100644 --- a/protocol/bluetooth/lib/EFR32BG12P/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d51229673d1e6f01cfd2842df78fe3f3a661105d3892e12d9ab432b5e808387 -size 6534408 +oid sha256:a8960d6a707a17cdc162498e37cdfcb2cceb11e9791fcc6edfe1eaaaac44c012 +size 6537552 diff --git a/protocol/bluetooth/lib/EFR32BG12P/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..fd3a09c5f7a --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f51e04dc580d5a26843f07f577b9ad1a25e28631f534ae4d8f3a828034afb9de +size 5849912 diff --git a/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..7ef244043a8 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e6dcc4e3e7772dd10b2198446530f2f1f04eacabb4120ed9d275fbc896d49ff +size 23796 diff --git a/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..f250ebe8912 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32fa0ba704b774832a1541f36ee156e4d77a0e4a4abd076fab7e2b03ec440cac +size 24296 diff --git a/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..c8a79c4f048 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1f801441dc0334141fd6d6014d06de33cd2ab1e9446cc30e86c53e3672fec98 +size 23716 diff --git a/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..eb60a854fdb --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bc4df11d065251fa9cca0a0cc6fb7d69673379a30a3588e68552ac3f675e751 +size 19784 diff --git a/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..6e7e3ae37b5 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79e94861c306c8ad07fd813c3adb6e64c2d4e6e9af73872295fc96e26f146295 +size 262058 diff --git a/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..7c7eb4ac242 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG12P/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:88b45ee3c56112cc05cf1b0fa30ebee934e5e7c50bcb515215c2b2c068ddbf1d +size 149412 diff --git a/protocol/bluetooth/lib/EFR32BG12P/IAR/libpsstore.a b/protocol/bluetooth/lib/EFR32BG12P/IAR/libpsstore.a index b963e79aa8b..3b0e5fdc144 100644 --- a/protocol/bluetooth/lib/EFR32BG12P/IAR/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32BG12P/IAR/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dae83fe217e8e05419455653d036f96b37a1afa919d04ebbb059f358fecb3738 +oid sha256:12925fe4f454e29a8e3f55a811d3031adb92709af3cbec1d0f0faf6515a668d3 size 30530 diff --git a/protocol/bluetooth/lib/EFR32BG13P/GCC/binapploader.o b/protocol/bluetooth/lib/EFR32BG13P/GCC/binapploader.o index 62d74765d1f..d4c51baeaf2 100644 --- a/protocol/bluetooth/lib/EFR32BG13P/GCC/binapploader.o +++ b/protocol/bluetooth/lib/EFR32BG13P/GCC/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2902817aed361ec609d7d7966ff6fc2ee256b51e4082f7716b0eedd1d2ea12b4 +oid sha256:4b38e0bb7876d3c5562cb2184ad0b937c70df6a2d2d05a4f26e5dc75862147b1 size 49700 diff --git a/protocol/bluetooth/lib/EFR32BG13P/GCC/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32BG13P/GCC/binapploader_nvm3.o index 720bef836ec..b197adc469d 100644 --- a/protocol/bluetooth/lib/EFR32BG13P/GCC/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32BG13P/GCC/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc9eefa8d4a952a52a113930f71997450875e3574e07be664118d8e16b510dfa +oid sha256:a4fedf260dfc3d6b16997df89fa8d244df4ce200087a8dd50ad975abb8c42332 size 53796 diff --git a/protocol/bluetooth/lib/EFR32BG13P/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbluetooth.a index 9e5e288b733..6845a58628c 100644 --- a/protocol/bluetooth/lib/EFR32BG13P/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc576a58e1ea6eacdee186ee3f9d1c1c7bcc696b0d456207decc3f7e4361aa7b -size 2685778 +oid sha256:c9be0a24e41c5bb8279d36fda3b25034b35b1833bd547ffce59980ee3ce3af00 +size 2688658 diff --git a/protocol/bluetooth/lib/EFR32BG13P/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..364079198c6 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc58e63987e3b69da518768571a91a430b92eb4093e2dc6002c6c677ac6bb336 +size 2049460 diff --git a/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..c1d9e9f7de2 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e54caa9c5f2cea0e5a2d78b990b6b9925450e2691b331a10623f67ea2e42fe7 +size 7578 diff --git a/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..591f0317f61 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69559593a77ffc76d15a244600ce598fc70299ac5703830c7d10f67974fff3c6 +size 7876 diff --git a/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..9335926ea92 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b856b55aadda84fdee9a5854f64eca2aa4873ec170c51190cd1c947c54246a4 +size 7482 diff --git a/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..1698ba346ee --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f61199fe72d5d52ef2f8186d56a4c7db607ee6c4df74498aa174f25060de9fb2 +size 6782 diff --git a/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..20dba7ca28c --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b24fa872be341e47e1e9ddc1ea21ca0dbc13cee52d1db3ee7af9d7f0591459e +size 84472 diff --git a/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..cf2c25376c8 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0324fe4d84c1e5f9466c9e22d3f522f5229f9cb1ead1641b38deaa8062d5f6a0 +size 40356 diff --git a/protocol/bluetooth/lib/EFR32BG13P/GCC/libpsstore.a b/protocol/bluetooth/lib/EFR32BG13P/GCC/libpsstore.a index 9f54d2c0182..7fb4c2bc6e0 100644 --- a/protocol/bluetooth/lib/EFR32BG13P/GCC/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32BG13P/GCC/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f27de5dbead7693cfd731c1bdf3e3c1c5ec54e2c17247b2e6e491bea40690da1 +oid sha256:54521a8c0fabae917d6e4a52edc1df61121a6f3786a62cbc2eccd8a5559a1082 size 12822 diff --git a/protocol/bluetooth/lib/EFR32BG13P/IAR/binapploader.o b/protocol/bluetooth/lib/EFR32BG13P/IAR/binapploader.o index 62d74765d1f..d4c51baeaf2 100644 --- a/protocol/bluetooth/lib/EFR32BG13P/IAR/binapploader.o +++ b/protocol/bluetooth/lib/EFR32BG13P/IAR/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2902817aed361ec609d7d7966ff6fc2ee256b51e4082f7716b0eedd1d2ea12b4 +oid sha256:4b38e0bb7876d3c5562cb2184ad0b937c70df6a2d2d05a4f26e5dc75862147b1 size 49700 diff --git a/protocol/bluetooth/lib/EFR32BG13P/IAR/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32BG13P/IAR/binapploader_nvm3.o index 720bef836ec..b197adc469d 100644 --- a/protocol/bluetooth/lib/EFR32BG13P/IAR/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32BG13P/IAR/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc9eefa8d4a952a52a113930f71997450875e3574e07be664118d8e16b510dfa +oid sha256:a4fedf260dfc3d6b16997df89fa8d244df4ce200087a8dd50ad975abb8c42332 size 53796 diff --git a/protocol/bluetooth/lib/EFR32BG13P/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbluetooth.a index 16420811c99..11e1cafaaf1 100644 --- a/protocol/bluetooth/lib/EFR32BG13P/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3028e28baa9f9eba4471ae6ae96456bb32c2b0ac1eebcd4eeeb1ceb83761f924 -size 6581554 +oid sha256:e18c1ee9a308b5531e31560c245b20b82f906edfb8f42964c506d3485dcb5d8c +size 6584694 diff --git a/protocol/bluetooth/lib/EFR32BG13P/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..0059e564cd9 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a863cacb2f2ff47583637ad1d60ee37b63f2efae3c61c18709ddae6eedab94cb +size 5904064 diff --git a/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..03b4c8eb989 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccad11f713a2facfe7fccc447fa54ef3768df36da6396a00857b3e0a346d25c6 +size 23796 diff --git a/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..720b9b0ec55 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:beafb833b9cccc2b7c2e6acf102385bb5e21d9cce9f17cd896832fa86a4b1383 +size 24296 diff --git a/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..20d9ecdb6dc --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb0aed87165d8717a027f8417566f13da160bea3f80edbac119cce8f80944b9e +size 23716 diff --git a/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..f39e84c308f --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e79b478d8e64843e4d220ec2c146deec6eb8a9abb1362a42be11bb6b964b82ae +size 19784 diff --git a/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..b41ee00cd64 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e01f64a9d8e9211838714b1d3a5a921573e279ee9ec1d91c6397845e38f1dfdc +size 262058 diff --git a/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..09b82291934 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG13P/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6060c35822ff2fe3c3325939ab045fbb30d8e57ece0bfa47b6d288de2ac36c8b +size 149412 diff --git a/protocol/bluetooth/lib/EFR32BG13P/IAR/libpsstore.a b/protocol/bluetooth/lib/EFR32BG13P/IAR/libpsstore.a index 446bb37769b..690688ca0a7 100644 --- a/protocol/bluetooth/lib/EFR32BG13P/IAR/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32BG13P/IAR/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:faa04239dc16d9e67ace101acd0655df68c50180d205cc6df8d27977642820c7 +oid sha256:6e6dd6ef53c1a6169c9ac8350b8e6752f062e4354b8d3051c78b5dd2166f5c21 size 31804 diff --git a/protocol/bluetooth/lib/EFR32BG1B/GCC/binapploader.o b/protocol/bluetooth/lib/EFR32BG1B/GCC/binapploader.o index 8d43e8e6ecc..550afe6764a 100644 --- a/protocol/bluetooth/lib/EFR32BG1B/GCC/binapploader.o +++ b/protocol/bluetooth/lib/EFR32BG1B/GCC/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1d6e62266cefb8dfe5ab028fabaaad13ab0e46aae080afc7629ba881a055dd1 +oid sha256:67001c2ec6841169035b28e752617f8474cb5a3a279b20de05800c82f24dd19b size 43556 diff --git a/protocol/bluetooth/lib/EFR32BG1B/GCC/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32BG1B/GCC/binapploader_nvm3.o index c42b425cbeb..3db16acd545 100644 --- a/protocol/bluetooth/lib/EFR32BG1B/GCC/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32BG1B/GCC/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0ccb968e96ecda160d98fae5b30c42228e47196f11a9388a7d7cf3303aaad92 +oid sha256:eec96e7a832b260188dace04715083b126621e8e0f57b62f494c8d75b0394929 size 47652 diff --git a/protocol/bluetooth/lib/EFR32BG1B/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG1B/GCC/libbluetooth.a index 1f6b6e3e702..ceb5b7b8c16 100644 --- a/protocol/bluetooth/lib/EFR32BG1B/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG1B/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:109b083cbc2cf58cb2fc6b1bd9cde0090fc40168fa408afccabc891264e51662 -size 2571394 +oid sha256:84e28c9aa3fb522635b134fe633d4984c441865802a6866959853335420e5a85 +size 2574274 diff --git a/protocol/bluetooth/lib/EFR32BG1B/GCC/libpsstore.a b/protocol/bluetooth/lib/EFR32BG1B/GCC/libpsstore.a index 2e299c03838..a7851d0efb4 100644 --- a/protocol/bluetooth/lib/EFR32BG1B/GCC/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32BG1B/GCC/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9589023f02e8780ba26ab03572ea6e2b7f38339af72896f93ed969a0bee4f25 +oid sha256:fdbbbb5bc6cebaf8bb01677e01bd01fc0a360763c243a1c606202c8310275330 size 12822 diff --git a/protocol/bluetooth/lib/EFR32BG1B/IAR/binapploader.o b/protocol/bluetooth/lib/EFR32BG1B/IAR/binapploader.o index 8d43e8e6ecc..550afe6764a 100644 --- a/protocol/bluetooth/lib/EFR32BG1B/IAR/binapploader.o +++ b/protocol/bluetooth/lib/EFR32BG1B/IAR/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1d6e62266cefb8dfe5ab028fabaaad13ab0e46aae080afc7629ba881a055dd1 +oid sha256:67001c2ec6841169035b28e752617f8474cb5a3a279b20de05800c82f24dd19b size 43556 diff --git a/protocol/bluetooth/lib/EFR32BG1B/IAR/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32BG1B/IAR/binapploader_nvm3.o index c42b425cbeb..3db16acd545 100644 --- a/protocol/bluetooth/lib/EFR32BG1B/IAR/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32BG1B/IAR/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0ccb968e96ecda160d98fae5b30c42228e47196f11a9388a7d7cf3303aaad92 +oid sha256:eec96e7a832b260188dace04715083b126621e8e0f57b62f494c8d75b0394929 size 47652 diff --git a/protocol/bluetooth/lib/EFR32BG1B/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG1B/IAR/libbluetooth.a index 6013321501b..98271249a37 100644 --- a/protocol/bluetooth/lib/EFR32BG1B/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG1B/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:538db6c9cc07f69703d44a021c0bdb539e94e3d9110091656ee4ecf1b7a2e857 -size 6309058 +oid sha256:7ab43cfece9dcf500a2d710ffef1b623ac46a534551882c19a98c2cbeefbd07d +size 6312204 diff --git a/protocol/bluetooth/lib/EFR32BG1B/IAR/libpsstore.a b/protocol/bluetooth/lib/EFR32BG1B/IAR/libpsstore.a index 4ea34c5bc19..bb9c300d347 100644 --- a/protocol/bluetooth/lib/EFR32BG1B/IAR/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32BG1B/IAR/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a2ce3211b438a08838687ce0547db3cd8021922a149a4f9e2d46bb57002ac43 +oid sha256:abaf8cd7c3342147bac20d5ca1f6964e1e9e2fcf7473741b84929c697f0c1f25 size 31860 diff --git a/protocol/bluetooth/lib/EFR32BG1P/GCC/binapploader.o b/protocol/bluetooth/lib/EFR32BG1P/GCC/binapploader.o index 8d43e8e6ecc..550afe6764a 100644 --- a/protocol/bluetooth/lib/EFR32BG1P/GCC/binapploader.o +++ b/protocol/bluetooth/lib/EFR32BG1P/GCC/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1d6e62266cefb8dfe5ab028fabaaad13ab0e46aae080afc7629ba881a055dd1 +oid sha256:67001c2ec6841169035b28e752617f8474cb5a3a279b20de05800c82f24dd19b size 43556 diff --git a/protocol/bluetooth/lib/EFR32BG1P/GCC/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32BG1P/GCC/binapploader_nvm3.o index c42b425cbeb..3db16acd545 100644 --- a/protocol/bluetooth/lib/EFR32BG1P/GCC/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32BG1P/GCC/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0ccb968e96ecda160d98fae5b30c42228e47196f11a9388a7d7cf3303aaad92 +oid sha256:eec96e7a832b260188dace04715083b126621e8e0f57b62f494c8d75b0394929 size 47652 diff --git a/protocol/bluetooth/lib/EFR32BG1P/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG1P/GCC/libbluetooth.a index c90dd589826..b068ca1714a 100644 --- a/protocol/bluetooth/lib/EFR32BG1P/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG1P/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f847355a004bd232eafe27bc9bbe12d379b2622ce90babf7223a7d36baacc31e -size 2571394 +oid sha256:59717dfae10ddf6d38dd85b0933af9e37266bbf3200cc998939b756864d44241 +size 2574274 diff --git a/protocol/bluetooth/lib/EFR32BG1P/GCC/libpsstore.a b/protocol/bluetooth/lib/EFR32BG1P/GCC/libpsstore.a index 73b0552d514..abcc6d0441a 100644 --- a/protocol/bluetooth/lib/EFR32BG1P/GCC/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32BG1P/GCC/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88ef6faf9cb6eb1f192f3249359a8dc9c252a9d0cd4b5fb8795a48a4381765b2 +oid sha256:a479c1f51da7d3d1fd4462508bdf398fc7b7dc4a1ea375d89e1b5cb49c78b36e size 12822 diff --git a/protocol/bluetooth/lib/EFR32BG1P/IAR/binapploader.o b/protocol/bluetooth/lib/EFR32BG1P/IAR/binapploader.o index 8d43e8e6ecc..550afe6764a 100644 --- a/protocol/bluetooth/lib/EFR32BG1P/IAR/binapploader.o +++ b/protocol/bluetooth/lib/EFR32BG1P/IAR/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1d6e62266cefb8dfe5ab028fabaaad13ab0e46aae080afc7629ba881a055dd1 +oid sha256:67001c2ec6841169035b28e752617f8474cb5a3a279b20de05800c82f24dd19b size 43556 diff --git a/protocol/bluetooth/lib/EFR32BG1P/IAR/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32BG1P/IAR/binapploader_nvm3.o index c42b425cbeb..3db16acd545 100644 --- a/protocol/bluetooth/lib/EFR32BG1P/IAR/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32BG1P/IAR/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0ccb968e96ecda160d98fae5b30c42228e47196f11a9388a7d7cf3303aaad92 +oid sha256:eec96e7a832b260188dace04715083b126621e8e0f57b62f494c8d75b0394929 size 47652 diff --git a/protocol/bluetooth/lib/EFR32BG1P/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG1P/IAR/libbluetooth.a index a26e760a2e7..03c0a4abce0 100644 --- a/protocol/bluetooth/lib/EFR32BG1P/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG1P/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ed77ea9d3f7b769a22b706ee63f6173a3fa95f9cf9dde01ded1562c07872987 -size 6309058 +oid sha256:bc6da5da4443ee87441e1c3b65126ae7c5a97766eebdf7534fd0135a5003e0be +size 6312204 diff --git a/protocol/bluetooth/lib/EFR32BG1P/IAR/libpsstore.a b/protocol/bluetooth/lib/EFR32BG1P/IAR/libpsstore.a index fa42a72977e..c80ae1704e1 100644 --- a/protocol/bluetooth/lib/EFR32BG1P/IAR/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32BG1P/IAR/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb7cbd75940183b962c55fd43b2420b4832270cd8ca3a16140bc2abbb8a8863b +oid sha256:27d15f9e82fce41fbb7e455230aa2c011894b956d81b5c55794fa05daf75f3bb size 31860 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/apploader.s37 b/protocol/bluetooth/lib/EFR32BG21/GCC/apploader.s37 index a92f05b1965..38f0a4b882f 100644 --- a/protocol/bluetooth/lib/EFR32BG21/GCC/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b4ce567cb65e6ecfa9d2b95d1d4c65b4cbe829ab88de843f7b0a9cd139a6fa6 -size 173732 +oid sha256:ea2c309474d2363dad0d6bd571d5393b66f5656a7deacc7616e74919844824c6 +size 173778 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/libapploader.a b/protocol/bluetooth/lib/EFR32BG21/GCC/libapploader.a index ef09ee3b5a6..dd9850cb61c 100644 --- a/protocol/bluetooth/lib/EFR32BG21/GCC/libapploader.a +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27b2c87b42ef77d825563237508344b5354f501a556e75b02345e84444361fdc -size 470394 +oid sha256:aab1a9f18a3c77de04000a734ee8d36b6f7645b73d4916cdad4d6c822940a8dd +size 470586 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG21/GCC/libbluetooth.a index 93aaa48ff47..a88806e32a1 100644 --- a/protocol/bluetooth/lib/EFR32BG21/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c9ae84bcc91dd4c1246980dc43127bd07651f03a406515e6fbc318df4adfaa30 -size 2690452 +oid sha256:20d098b3b6e731d68521052d4c18a042ad820e716c26c1ca4cd1c17220173a8c +size 2693336 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG21/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..2f3faeabd5b --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7434ab01cd3a83aece1ca44c1f0852c8ac32bf77c7c21897732f66195429d918 +size 2066494 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..681967b6c79 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd493661ae934c725d64a241253ab5dfb93e945961f1938de60191bb5417f167 +size 7594 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..2cb20880598 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:272cf57223038434ca5fd9bddb565779442350d262fc8821e414313cb75f1657 +size 7892 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..36812ef8303 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dfab602020127ddca1433fca5dbc01e673fc518a6f3d68eedead65f780d84e2 +size 7498 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..a5e76124217 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b54add567fc9d02689d852d65e461cb2e1693f37f9e1987c779ed7fe9822b6b +size 3306 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..1a247c0483a --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f63b9001528e019e761e5419c772779bd0a0221a55c73e9d52e133cc19ee5b98 +size 1976 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..2aa0e360ec0 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92f99fa8d4fa53af42658adbc44bfa5a403448e88e4280b742d8cbd07500a35b +size 6786 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..6f7c98246a1 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba120cf44e9fa2833d7ac956ec144c2265d282007adde25329da5af654fe14c7 +size 84524 diff --git a/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..c1a6604bba3 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdefcd3d0eaa0db452312737793771483b9d0979378c23bb0610076bda82da3d +size 40392 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/apploader.s37 b/protocol/bluetooth/lib/EFR32BG21/IAR/apploader.s37 index a92f05b1965..38f0a4b882f 100644 --- a/protocol/bluetooth/lib/EFR32BG21/IAR/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b4ce567cb65e6ecfa9d2b95d1d4c65b4cbe829ab88de843f7b0a9cd139a6fa6 -size 173732 +oid sha256:ea2c309474d2363dad0d6bd571d5393b66f5656a7deacc7616e74919844824c6 +size 173778 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/libapploader.a b/protocol/bluetooth/lib/EFR32BG21/IAR/libapploader.a index 1dd02cffb3b..22f80064d99 100644 --- a/protocol/bluetooth/lib/EFR32BG21/IAR/libapploader.a +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f334499d2316fdb50e3b8cc454d17c845f8fdaf7c4b169086b75c53ec687cd9c -size 865536 +oid sha256:295d3fbeca83811ae66d64b8e0e889a3b21d6794bcfec2623cf12bf95a13cd42 +size 865562 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG21/IAR/libbluetooth.a index 2c1dcbb55f3..a2dd18ee223 100644 --- a/protocol/bluetooth/lib/EFR32BG21/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53efc60683d4d273289f690545dcfdf51e4226be0646554357d8881e434122b8 -size 6572826 +oid sha256:5795ec997e1f183aa686ba75acdd58b587dd0aecb14b5485ec865e4268b35b05 +size 6575974 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG21/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..86752599b5d --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4b4b9eb5f9bf25f2d8ca86d987b959a80f536963e8f02982e07ab7205cebe32 +size 5894162 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..aff17fb0500 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed037f542dbea97f23a45c67eb552594a73d6eb0f0d2db8d921cdcdaf543fc6e +size 23834 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..d9d101f4191 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a187f1c16ef715e9bd617ea6c56185b32c3cdf3de3aec0d5ccdccf46ee93f751 +size 24332 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..5dd1a3adac1 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c539200728489f58e155fbd3544b291a23289b15ad6fd9d4e18ed9ce5412d1a8 +size 23754 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..e24ff034b4d --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd30c8ea135cf30ae5557b3be9446af34f6992ffb2ebec6f0968e4bcc44c0adf +size 11396 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..3146fdfcf15 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a22509d1daa2839d63880647b9bb5c67648c94e40410b3484e4300efcb5f834f +size 6668 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..ed06d37e02e --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3cfcda5d58f5395d8eadb695971520d35c86a17f1cea70123d6e4c9d206dc99 +size 19806 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..9a67ddfc332 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f86b9988c77669968201b40d26bbd9bbdf2ea18c92092f94d0835942e5e02b1d +size 263114 diff --git a/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..a3d6c29d60e --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG21/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd9ebb59d73e7ef5632d10a4eb858cdbb056344acd53ff08e6400baec1bada7f +size 145880 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/apploader.s37 b/protocol/bluetooth/lib/EFR32BG22/GCC/apploader.s37 index b69d4e24c58..803d3ad0451 100644 --- a/protocol/bluetooth/lib/EFR32BG22/GCC/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b9a7f985329362aef018f6636192015162f73504fe4fa7ef1c76bdf2df9e26b -size 195014 +oid sha256:e1cd808dee372e8d082ec1d678ad200f361e107520b1347bd3636bf3b2a87d72 +size 195366 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/libapploader.a b/protocol/bluetooth/lib/EFR32BG22/GCC/libapploader.a index ae57e4da666..19697fce2c8 100644 --- a/protocol/bluetooth/lib/EFR32BG22/GCC/libapploader.a +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e51987b3abfeb3ddc35f0de861bcc31de7ec813582bae43c2f77d4ec6b9bf197 -size 477774 +oid sha256:224d2b21a7e3fef95164bf4d45af5d1f548a084b1ac3428b28186c8b16493bf4 +size 477966 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG22/GCC/libbluetooth.a index 607c53de973..2f8fc604fac 100644 --- a/protocol/bluetooth/lib/EFR32BG22/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:387966f6927e5d8c3f05cfa4553f21b10dd253d436308cb2ea7fe79e13d48bc2 -size 2706014 +oid sha256:199f15ed0428da2b60774ab0d5e29865f418e5f182539a07d436a833ef68f963 +size 2708898 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG22/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..daa1a3f4497 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f386c5730aafe86b5221d7bb1eaaf5a5dce1f7fa501136f9f30f21bd0b02231 +size 2065802 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..1b8ceff03bf --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcaacb63f8ec5b060835dc076bc6077c7967b4f0d5c3e348d381bb0ce7ce0bf6 +size 7594 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..1346a6c69ac --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee25563ada16e06274692ad985a73782dece2560297cd79a5e10c71678429d1e +size 7892 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..f312e66ec06 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2ec4355bf7bd8222e2f84f1b79268ba4866e60fe023f9fe406763fe80b19a13 +size 7498 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..5b1ecc7a3ca --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:237bb8b0758c66033822826610d407569a62183da44c9fb26b469bd37f73c68e +size 3306 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..8e7b3da87d5 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:351868147c31e6b9c74fdb87cf4c6b6f76e2a78112c4e39ab2cb4c189c22a9d3 +size 1976 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..6c1c841d826 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff01fa898fca321d1d5e3fdb70c942a30b08f17b8542473ce1ccf8f614e9be9c +size 6786 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..87161a0e2c8 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51c4d4b79380d455dc2f5eee71fe2c0a9e83ff9692f1bf5775d10fd999e48dd8 +size 84524 diff --git a/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..b4241b601a6 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:119c98b4ce8d849333a75058d4e0557f1b8bb581814493e8c4f7c4f425952230 +size 40392 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/apploader.s37 b/protocol/bluetooth/lib/EFR32BG22/IAR/apploader.s37 index b69d4e24c58..803d3ad0451 100644 --- a/protocol/bluetooth/lib/EFR32BG22/IAR/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b9a7f985329362aef018f6636192015162f73504fe4fa7ef1c76bdf2df9e26b -size 195014 +oid sha256:e1cd808dee372e8d082ec1d678ad200f361e107520b1347bd3636bf3b2a87d72 +size 195366 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/libapploader.a b/protocol/bluetooth/lib/EFR32BG22/IAR/libapploader.a index 07150bb930d..37a80c8d84a 100644 --- a/protocol/bluetooth/lib/EFR32BG22/IAR/libapploader.a +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ee001d574322153f6ed018ad81cf21729203000b1d44d2144ebe777d4909ad1 -size 876026 +oid sha256:614e7e50468d43fd68ff91c1137a6e0fc12c831798f1e285b776f0933e3356bd +size 876052 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG22/IAR/libbluetooth.a index 6ccc33e6efe..53b6ed61216 100644 --- a/protocol/bluetooth/lib/EFR32BG22/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0873e09b28ada4436ce5653311fac88de6c19b384587c2bb3caa4b6b7cc9e3e -size 6609398 +oid sha256:03b717054af70b831436aeb69c28dea2fb118cbf80dde646cb9e6a5eb1d66788 +size 6612540 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG22/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..ba0b52b306e --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eef5b40f04241514f283508b15f68fff56dd91ed24bccbe3cfb224c9bcfdb4ca +size 5892232 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..d37f512b0fe --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f57d342c9db81eea8e575bfbd8038f53fcefbfca4fdc711fb15d5138f419a80 +size 23832 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..9727b194092 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d38eb42b61f55fff2266e8ceb080c476d8277024680392c7763955d14a0b7b6 +size 24332 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..1ff8ca726d3 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8064bbd253d4937e14ce1f7c571b67d37ab83f41fe238e998d3b84981c2dec41 +size 23752 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..82ac8ec82cb --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:074322acb820b529e37c6dc637f7e005d48790aefb1a819743d037ae977e8e3c +size 11394 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..2ab4fd1e07b --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2ef8b8d3378fce1a3cdbef01135c03842a259e63fbe18fbe0a518457dd35fcc +size 6668 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..a127ca6139f --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9536eeb9edae851a6edf215acd0de992695749343687ff598ef435700838493a +size 19804 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..40a7e565e56 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9df7f602ed3898a2caa863f734af12b168047c7aa44840cff0372aba9f902824 +size 263108 diff --git a/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..9882bb11a2f --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG22/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:440ad97d5142496762b6a40e4ee71d98622c858aa9d8dc6de0450b42cdb269b3 +size 145878 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/apploader.s37 b/protocol/bluetooth/lib/EFR32BG24/GCC/apploader.s37 index 8b13d06087a..455e0b5bddf 100644 --- a/protocol/bluetooth/lib/EFR32BG24/GCC/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43a48d430dbc07781edc458c2934c984ff4eb488c95397a5ca87858a2425daf9 -size 221516 +oid sha256:fb8223697efe20415378bb3e818b5297907df8744deeb247739b6432138e1f95 +size 221924 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/libapploader.a b/protocol/bluetooth/lib/EFR32BG24/GCC/libapploader.a index 9b5a246204f..21b003c6b70 100644 --- a/protocol/bluetooth/lib/EFR32BG24/GCC/libapploader.a +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe47992f31c2eeb5fc03f0eb3134ed0b4f46edd19cb55ff9c866dd23796cc6a9 -size 485394 +oid sha256:c3fe508fcc2837ed006498295a4dc57d2bd614b5f96271f5404f5279d73f7733 +size 485586 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG24/GCC/libbluetooth.a index b0a6cdae791..1350cbbec2b 100644 --- a/protocol/bluetooth/lib/EFR32BG24/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7f1852de4f54c33829e4435442b4ae884a79c0723c45a6c73385697360ddb25 -size 2706166 +oid sha256:d937228e51b5ece14dbed9f5e72459440fb43fe4b296f97adc453d1d25f6d0fa +size 2709050 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG24/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..1c39d452dfe --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6ae9095ba18cdbd69a7835d48dc7bc5fb10a692338a94a337166777541acbe5 +size 2066494 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..3a948b48f17 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef68abbbb045a8e5a63caa37a078f3bca410486164b74067ec309c4a961e4e95 +size 7594 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..6b4edd92da2 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:03a0b13c61d8d5f525a28ae303afd86e71e704d23c0974017b20b28a5a708c64 +size 7892 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..4393782c473 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3617ea6c7438c4bb1f8c13d88ea4b7173d76ed7c63f3dec2196bb5233e582196 +size 7498 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..cf9495697e6 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53a774d73a4ab7583337ef2942923c28a59dad733756c0b19103813e9053dac4 +size 3306 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..92feea3881f --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:223e0fc61933620f0415e981e83752e568ef9e4614f1cc0de64c872933f28e3d +size 1976 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..a692b340418 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af785637bf0437e693b670ecb34a3e8c430ac0873b79affaf9eb91d697eab65c +size 6786 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..7280f695d55 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c8b9a019baf7fb3bb5ad4b8d859ed0a5736ad7cb8ce4dda11135bb9efd1af14c +size 84524 diff --git a/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..8a2e96ca6a6 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d0ca9918b67929559ce42fd0cbe6a7817bc029c1a617d5802a14ba13013c5aa +size 40392 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/apploader.s37 b/protocol/bluetooth/lib/EFR32BG24/IAR/apploader.s37 index 8b13d06087a..455e0b5bddf 100644 --- a/protocol/bluetooth/lib/EFR32BG24/IAR/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43a48d430dbc07781edc458c2934c984ff4eb488c95397a5ca87858a2425daf9 -size 221516 +oid sha256:fb8223697efe20415378bb3e818b5297907df8744deeb247739b6432138e1f95 +size 221924 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/libapploader.a b/protocol/bluetooth/lib/EFR32BG24/IAR/libapploader.a index 4869770406a..c67195a97d8 100644 --- a/protocol/bluetooth/lib/EFR32BG24/IAR/libapploader.a +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c81d2fe522081d888d3976f2ea2b8514d283d8f8f63c144b31552fc792b3e490 -size 882992 +oid sha256:69bf409db82d5e7dc6fbf7d4ce24fd3cf377f65ce718f71d26e072255e53dcf2 +size 883018 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG24/IAR/libbluetooth.a index 7dd2225853d..54d84cd918c 100644 --- a/protocol/bluetooth/lib/EFR32BG24/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:359faf8d160c2ef5e2a6e9bccddcfbbd9a42c77fecd4fe0814888e9e834d53c2 -size 6610266 +oid sha256:b88ae47752d0c7ba1f7d9dfed5a66a46572350b29742d3a2f860451eba923804 +size 6613414 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG24/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..48157dde329 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46caa8aad018969821565a4df4fa1b3b7fc193994ac3398576e51870257a407c +size 5894162 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..fdb2a6ef842 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a15152f736ae7dd25fafc2a9cc4652184264c0368fa6ce063d5a44289dee8064 +size 23834 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..b8840e71e46 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bd0f206e0d6cbc32ff944fe1433452266db3953cc8fb79ba5b154e0eb2ef32b +size 24332 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..4982a5c1154 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93c3087a50ca79d4357d8748832fed89096f1e50b18698197a28b09ba9501b61 +size 23754 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..2f9b1edf4c4 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:25d5d4e7d756ee183749abdfc9363183d82b3db8b4c5c1a07bd3bec9774d4229 +size 11396 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..6ee3f24eabb --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6f1faa2d54b495e63b16dc6e254062b916ec1b513997640256df511b6ecdf9d +size 6668 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..dada7261d72 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9276933b8dbdbdb8dcb0d346ee8c2e44d867c83033c700503d595c7bd36575ca +size 19806 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..05378eb91d5 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9006a23b26a159b4120e7e4e7617fb5e99f69cc1c5d59f880a819ccecfa01df +size 263114 diff --git a/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..7e9d99101e5 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG24/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30fa6a0e15f30cccf6fb0b6149563f696785370577e69481b2e78a44bef830aa +size 145880 diff --git a/protocol/bluetooth/lib/EFR32BG27/GCC/libapploader.a b/protocol/bluetooth/lib/EFR32BG27/GCC/libapploader.a index 7a6e9f64b2d..62ec5318d69 100644 --- a/protocol/bluetooth/lib/EFR32BG27/GCC/libapploader.a +++ b/protocol/bluetooth/lib/EFR32BG27/GCC/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3fa3da1d4f46dabea2f32b79cff72a62c7c726c3b2a98845c5304c57786963f -size 473382 +oid sha256:834605c31b41d6260be7d727084119112bafca466e114a432ff087a99c269247 +size 473574 diff --git a/protocol/bluetooth/lib/EFR32BG27/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG27/GCC/libbluetooth.a index d952e33fbcf..2b947d59ca7 100644 --- a/protocol/bluetooth/lib/EFR32BG27/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG27/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:589e1a083079560981dcd66d2cd32b16ba21a12c5e550a2c7bbe4b2c1c906609 -size 2705918 +oid sha256:99adf57ec3c63500db66d439ad91d4e59998417520235d23f9d0a39c078523f4 +size 2708802 diff --git a/protocol/bluetooth/lib/EFR32BG27/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG27/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..998bba1e33b --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90bfbb630602b74e8ca08d8e40d9db138142d7964a95d1697cc14e6994ad505e +size 2066338 diff --git a/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..2a3746ea25a --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45e709b5476145e9411d22c811e207f037507cc0f34373ad205e9df0a0d69ac1 +size 7594 diff --git a/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..9e2ec92f739 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d81a23cf85db3682952443837b7d54cd138b19af0c2fa9abc8d69ff3a9b0b40d +size 7892 diff --git a/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..14e99d5672e --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70bab69631dcea699cde26851e247a5b685c2e68b713742c459775d18bd6db4b +size 7498 diff --git a/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..41284606a27 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9175cdddb7c653bff63a64bd47b2579c4137aa82726b746bce430489feb3aee +size 3306 diff --git a/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..cbb7895a51e --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6eb00475f8b12bf870eff8b1467b57f72469c33163734d0393a0e51b8149bfc +size 1976 diff --git a/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..69bc40ab6fb --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97f53a87219eb016bc61ae4b9d31738b4670e4917e7c900bbd1dcffc896d484b +size 6786 diff --git a/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..e9ecb073a3b --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75c3dae64480d38c7b59e71d8c212bf6665ee6640d9836b70b1031c5c8a85480 +size 84524 diff --git a/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..0d4c90f7fa5 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13fd8e8d97a9c0ab88c0f3f006e09566ec9164492e08dc08ef1627aa09678378 +size 40392 diff --git a/protocol/bluetooth/lib/EFR32BG27/IAR/libapploader.a b/protocol/bluetooth/lib/EFR32BG27/IAR/libapploader.a index c3e30fcda1a..ed2718d36ae 100644 --- a/protocol/bluetooth/lib/EFR32BG27/IAR/libapploader.a +++ b/protocol/bluetooth/lib/EFR32BG27/IAR/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ca32ede7806ab1c21d7805634cf91c62cd56dec2b0046b50e4191b15385f714 -size 873594 +oid sha256:679bbce48001da2f0fcb384bc63c3fae4a82c406fcfddbe3712664b2676c5e45 +size 873620 diff --git a/protocol/bluetooth/lib/EFR32BG27/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32BG27/IAR/libbluetooth.a index e0b141f1162..bc19d0ad8f4 100644 --- a/protocol/bluetooth/lib/EFR32BG27/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32BG27/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52823b60ebf53bcc64040f6c276f0d20d0be27a953ef13f54289b996d0a467a6 -size 6609208 +oid sha256:dc70589f07aec8499712abf8aaf4bf806f75065c89b0bedc03e3d2f7f01845f2 +size 6612350 diff --git a/protocol/bluetooth/lib/EFR32BG27/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32BG27/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..62f89fae15c --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e7acc93081d3d6d7d578786991043229cf265146b4041073819839ad58e87a3 +size 5893124 diff --git a/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..ac5e88689da --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2884a7c139a131636f81f38302f9e0bd250237fcd62ffc6f68446aca4ba2e286 +size 23832 diff --git a/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..42f31a0588d --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e44349e7228d337cd8aee48ce20f8bc69d1c5dfaf13d8a569e064143149c2e3a +size 24332 diff --git a/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..a5b873fd0bb --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8596f3e75178abf01b97f1979b1e4e55961aec7b09e8f93a84ec4dbf790d079a +size 23752 diff --git a/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..36578692745 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79e66a571dd002e810743ed71a62fc62c75a1abbad2f1bded9aae1a3067b2450 +size 11394 diff --git a/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..74cb93a9b38 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:650887d280e203bfd0fd8eeffa683c94f3a30f10afa9aa0692a5444384d28a43 +size 6668 diff --git a/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..3e4d9d6685e --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33851ce4374d243ba7a89db7b8e64869524954d4879e642c6fee414dbd8f95b8 +size 19804 diff --git a/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..30250b8e6f8 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:97c08f830c5adf6bc555fb4bf5a08d33446672e776031803397b3ea1d69ce7ef +size 263108 diff --git a/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..ef93156f92e --- /dev/null +++ b/protocol/bluetooth/lib/EFR32BG27/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5e2a5edfca78b4aa634ae3076de61d12df7933dda4d7796d796649552835ff6 +size 145878 diff --git a/protocol/bluetooth/lib/EFR32FG28/GCC/libapploader.a b/protocol/bluetooth/lib/EFR32FG28/GCC/libapploader.a index c013cf955d6..2689b5d1ba8 100644 --- a/protocol/bluetooth/lib/EFR32FG28/GCC/libapploader.a +++ b/protocol/bluetooth/lib/EFR32FG28/GCC/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aef4dd6bc8464db2c16886c0f7f3238221b821135784f4104263bb7c9b0bbbf7 -size 481962 +oid sha256:c818cfbdf1d94babd3320ac0318aa6045a8f58ea1528df5c3b03b5d3798e8392 +size 482154 diff --git a/protocol/bluetooth/lib/EFR32FG28/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32FG28/GCC/libbluetooth.a index 1b17660bd7c..fc3fb248deb 100644 --- a/protocol/bluetooth/lib/EFR32FG28/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32FG28/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15b0b649d3f6e32a50a6b4ea70f4125cc1818774b97505d87383e0a30ff1e834 -size 2691388 +oid sha256:7afad98436507724d9cb67a1c48b8e113e73d8e489bcde7515d59aa3faa8722d +size 2694272 diff --git a/protocol/bluetooth/lib/EFR32FG28/IAR/libapploader.a b/protocol/bluetooth/lib/EFR32FG28/IAR/libapploader.a index 281b0028e97..e1c483cba7b 100644 --- a/protocol/bluetooth/lib/EFR32FG28/IAR/libapploader.a +++ b/protocol/bluetooth/lib/EFR32FG28/IAR/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c08b352f36e06e48ccfbe3f30797705fa997eb04d2c6bc80e1e9f13fb003da0 -size 882234 +oid sha256:6cfa36eb118bb9e7cf89ed3e937ddedbae08898c9a88306821710b63343cf645 +size 882260 diff --git a/protocol/bluetooth/lib/EFR32FG28/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32FG28/IAR/libbluetooth.a index 668db1b9009..e47eeb2d346 100644 --- a/protocol/bluetooth/lib/EFR32FG28/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32FG28/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee533a8b528b5d65167e6c1605d6991753bd6edbeeaec07e2b6f62d5cff8773d -size 6574542 +oid sha256:7775d3cbbb7a65a7322afcdd3dd8b27f4537572e28fba72ae50f83d8d323d398 +size 6577690 diff --git a/protocol/bluetooth/lib/EFR32MG12P/GCC/binapploader.o b/protocol/bluetooth/lib/EFR32MG12P/GCC/binapploader.o index 1f719807ac1..fefb9365032 100644 --- a/protocol/bluetooth/lib/EFR32MG12P/GCC/binapploader.o +++ b/protocol/bluetooth/lib/EFR32MG12P/GCC/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec161e615144a9aa8d01e3d2394ae4bbdf013a6fc7b8fc19a497ed3b7db0745b +oid sha256:1543cc997707bca5f8fe8690002d81fdd2c444447477037917c0eb3e96feab76 size 47652 diff --git a/protocol/bluetooth/lib/EFR32MG12P/GCC/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32MG12P/GCC/binapploader_nvm3.o index caca13b43f1..b6cabda39d4 100644 --- a/protocol/bluetooth/lib/EFR32MG12P/GCC/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32MG12P/GCC/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fabb298aad0f4deb7a36d86cd820b724fbbf2b801ed96a687e4ed7ba989e6cc7 +oid sha256:174d9cda705624996ec954a227e83a35c5859babb9333549bb40066d8e3a53eb size 51748 diff --git a/protocol/bluetooth/lib/EFR32MG12P/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbluetooth.a index ddd0272bef4..e7f65bf00ab 100644 --- a/protocol/bluetooth/lib/EFR32MG12P/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38468186d1fcec679e7065660ab438d53b21c73986460b9fb9c0f49e51e04b96 -size 2685778 +oid sha256:70ca5a5d8a22185440172aedca307a7ddca4f10d912464f1435ef175e9a9153d +size 2688658 diff --git a/protocol/bluetooth/lib/EFR32MG12P/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..28486a4f787 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a3ae0124c6500695c4c8f7d59f9a04ef7bf7dcba067f08ac044cab19ed946c18 +size 2049460 diff --git a/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..42a8404b079 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b93c60cddcc703e033938558e0956c277e73f41de796ada0cff61167d784898f +size 7578 diff --git a/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..1b5adb8bdd6 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:009ca156ae524711ff8b0b53e3a3046b63750294834aaf04f375ca78236fda4c +size 7876 diff --git a/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..928ec0e994f --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bffef849a2fd2b30188d3f8a6955a632ced3d5317d54e84721898e55abc7846 +size 7482 diff --git a/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..c1825cabe08 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96eb505f20f35ffec13bca684320d6f335311f7e6a08bc9f3fe0cc9ee975fff0 +size 6782 diff --git a/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..68ca8a03255 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:019fe89da3c7439e204a212e729939027914b40498f0e651f9ea6ca6989515cc +size 84472 diff --git a/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..f8575577ffb --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37fb14b5c48ddcc1155bb4b1fb1e3178c87d806b89616aa0ed7198f1fd884eab +size 40356 diff --git a/protocol/bluetooth/lib/EFR32MG12P/GCC/libpsstore.a b/protocol/bluetooth/lib/EFR32MG12P/GCC/libpsstore.a index 2eba0a9519e..c26b1fc766a 100644 --- a/protocol/bluetooth/lib/EFR32MG12P/GCC/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32MG12P/GCC/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6b2abdcc5e3a63e979f2cba492cbb3d391a9aa3aef8b8b0c1c462dcf70593e4 +oid sha256:c62579018b1718ae1f245c0cc27b243dc244bd9d6a7ca164344ba3a68f6f37fc size 12822 diff --git a/protocol/bluetooth/lib/EFR32MG12P/IAR/binapploader.o b/protocol/bluetooth/lib/EFR32MG12P/IAR/binapploader.o index 1f719807ac1..fefb9365032 100644 --- a/protocol/bluetooth/lib/EFR32MG12P/IAR/binapploader.o +++ b/protocol/bluetooth/lib/EFR32MG12P/IAR/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec161e615144a9aa8d01e3d2394ae4bbdf013a6fc7b8fc19a497ed3b7db0745b +oid sha256:1543cc997707bca5f8fe8690002d81fdd2c444447477037917c0eb3e96feab76 size 47652 diff --git a/protocol/bluetooth/lib/EFR32MG12P/IAR/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32MG12P/IAR/binapploader_nvm3.o index caca13b43f1..b6cabda39d4 100644 --- a/protocol/bluetooth/lib/EFR32MG12P/IAR/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32MG12P/IAR/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fabb298aad0f4deb7a36d86cd820b724fbbf2b801ed96a687e4ed7ba989e6cc7 +oid sha256:174d9cda705624996ec954a227e83a35c5859babb9333549bb40066d8e3a53eb size 51748 diff --git a/protocol/bluetooth/lib/EFR32MG12P/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbluetooth.a index e993b4d7c38..71377857dae 100644 --- a/protocol/bluetooth/lib/EFR32MG12P/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d63f56e384bf71846d7bdc02d4fc6ebdd5c2a820de7bd5263fdf9c681a30917 -size 6534408 +oid sha256:8b63ac6aa4e2954fe5a9dab3d2aa4479166e1c35e04fbb9cb266accddc579834 +size 6537552 diff --git a/protocol/bluetooth/lib/EFR32MG12P/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..cf0720947e0 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71a55cb1b9847522c3b194e790c811876a69139c7c732568f6ff7b558a70aa48 +size 5849912 diff --git a/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..935c445eadc --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cf560ffd9ffa0c8fe07fb3d3255b1c81498ee9a704311c3fe658cc9d8a83b74 +size 23796 diff --git a/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..bf61c7755cd --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2ed95119c8b2cab74b0a38af7a59e89ed594a928f35f7b4d75e47b83ebf92d0 +size 24296 diff --git a/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..39f5d4c17df --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfb24c543da06c1192d426c8eccb1a915c4e09a47fbd7216ec4b369b74916e1d +size 23716 diff --git a/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..6c2bce493d0 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b720d41b49b772f9a7e187e23fff1bc87b13f8e58a168e9e6aae74ba9f29fdc +size 19784 diff --git a/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..e4d29fa0a75 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2da7a20acb3788994609bdaaea657ffd4480e0657692c3ba4f1f1a8b6c93076 +size 262058 diff --git a/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..5796b98d9c6 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG12P/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ead263e7f69170addba4fa6ad52bc221a9d4ab953bff4d31c2359ea8853a7f02 +size 149412 diff --git a/protocol/bluetooth/lib/EFR32MG12P/IAR/libpsstore.a b/protocol/bluetooth/lib/EFR32MG12P/IAR/libpsstore.a index 38bb065c8fa..6fb8422a589 100644 --- a/protocol/bluetooth/lib/EFR32MG12P/IAR/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32MG12P/IAR/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43cc9fe10f640e298f55bbd2124b145ac154d497abc03d386b29d2810335e14b +oid sha256:38e867b477d9467f649301567f87efac968987a281bf1ff4c26e07ad0a8d553d size 30530 diff --git a/protocol/bluetooth/lib/EFR32MG13P/GCC/binapploader.o b/protocol/bluetooth/lib/EFR32MG13P/GCC/binapploader.o index 62d74765d1f..d4c51baeaf2 100644 --- a/protocol/bluetooth/lib/EFR32MG13P/GCC/binapploader.o +++ b/protocol/bluetooth/lib/EFR32MG13P/GCC/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2902817aed361ec609d7d7966ff6fc2ee256b51e4082f7716b0eedd1d2ea12b4 +oid sha256:4b38e0bb7876d3c5562cb2184ad0b937c70df6a2d2d05a4f26e5dc75862147b1 size 49700 diff --git a/protocol/bluetooth/lib/EFR32MG13P/GCC/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32MG13P/GCC/binapploader_nvm3.o index 720bef836ec..b197adc469d 100644 --- a/protocol/bluetooth/lib/EFR32MG13P/GCC/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32MG13P/GCC/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc9eefa8d4a952a52a113930f71997450875e3574e07be664118d8e16b510dfa +oid sha256:a4fedf260dfc3d6b16997df89fa8d244df4ce200087a8dd50ad975abb8c42332 size 53796 diff --git a/protocol/bluetooth/lib/EFR32MG13P/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbluetooth.a index cd6d3dc214a..15f7da9f9d7 100644 --- a/protocol/bluetooth/lib/EFR32MG13P/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d76c52d3d6ee31e8c0d9ba5bdfb384c37861299e301246a9aeb73b698b97908 -size 2685778 +oid sha256:a32c63ddc65038013a92fafcb97e4048f1feacc0a388e374dcc833b2ecc5e20b +size 2688658 diff --git a/protocol/bluetooth/lib/EFR32MG13P/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..ffb91066cf9 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa6a83b2cb9e598d2069d6cb9e9f96e0d2799ae8868d5a08dff7296a371301ea +size 2049460 diff --git a/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..5be475e2010 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c44f94165ff54edce75bc12771ee32f46c86879dc8ba1e2dedd36216d3ece06 +size 7578 diff --git a/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..24b6dae1e61 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6b6eb9d3dc18f1c7d2a34f90d78f9b1ef5f2af6156c78b3272912b9f56d23c0 +size 7876 diff --git a/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..fc6f6e5818c --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ab6947f26c7f62d9c014bfa6452b4c9ac491daf2f9cf55f88a4d89acf0be4d2 +size 7482 diff --git a/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..6cc5c3e0097 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0ce30598301e7bdbffc57249c53e86537ea1eb75401bfe684250e8c8a3a5aead +size 6782 diff --git a/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..e807fd3ac3a --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd27510049e4a8eb0b05c88de63892e2b81fc1bbe52bf2b3aa3f0e2b6acc8207 +size 84472 diff --git a/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..dcde88cade3 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a96eeae85f49fa467b257087e60dbaecc69867d72868722f69b87da996f8c411 +size 40356 diff --git a/protocol/bluetooth/lib/EFR32MG13P/GCC/libpsstore.a b/protocol/bluetooth/lib/EFR32MG13P/GCC/libpsstore.a index 34e93ffe534..932adf4e064 100644 --- a/protocol/bluetooth/lib/EFR32MG13P/GCC/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32MG13P/GCC/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a91d94dfd83381ca3a3be7ac0b94fc128d88ce4b207375a0393fdd89b449ec58 +oid sha256:7e369d61e3fbc98e87609cc6a3d23c62beac26524f5c615911f0dd69eb8d692b size 12822 diff --git a/protocol/bluetooth/lib/EFR32MG13P/IAR/binapploader.o b/protocol/bluetooth/lib/EFR32MG13P/IAR/binapploader.o index 62d74765d1f..d4c51baeaf2 100644 --- a/protocol/bluetooth/lib/EFR32MG13P/IAR/binapploader.o +++ b/protocol/bluetooth/lib/EFR32MG13P/IAR/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2902817aed361ec609d7d7966ff6fc2ee256b51e4082f7716b0eedd1d2ea12b4 +oid sha256:4b38e0bb7876d3c5562cb2184ad0b937c70df6a2d2d05a4f26e5dc75862147b1 size 49700 diff --git a/protocol/bluetooth/lib/EFR32MG13P/IAR/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32MG13P/IAR/binapploader_nvm3.o index 720bef836ec..b197adc469d 100644 --- a/protocol/bluetooth/lib/EFR32MG13P/IAR/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32MG13P/IAR/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc9eefa8d4a952a52a113930f71997450875e3574e07be664118d8e16b510dfa +oid sha256:a4fedf260dfc3d6b16997df89fa8d244df4ce200087a8dd50ad975abb8c42332 size 53796 diff --git a/protocol/bluetooth/lib/EFR32MG13P/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbluetooth.a index c535cadd73f..78c92b92064 100644 --- a/protocol/bluetooth/lib/EFR32MG13P/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c67f45e15c8231ce3e6c164817be8a374c649d1564a754703afdc64720ce127 -size 6581554 +oid sha256:3a54eff16c2756f630a9090803f6079cc9b1618cc1dfd128800d9c4fbd99efc2 +size 6584694 diff --git a/protocol/bluetooth/lib/EFR32MG13P/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..20c95da16cd --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29b0ad7854cb30b8c7cad75c84eb19bb32d8075b5899555811f730f297635966 +size 5904064 diff --git a/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..f1f51dd79cc --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd3adb3a55ca8a792028cb1be367e0a187a649cf0c351e93b9f923642c971901 +size 23796 diff --git a/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..817ccab584a --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07d5befe180bd55dc0c26290ce33ae3a0b630cc6f474f95f360ab3dc33405fd4 +size 24296 diff --git a/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..ad133db5a8f --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9621dec24c4f59eba2951db4a954aabbb0a050864a55559a7b3fed4e9d863f7e +size 23716 diff --git a/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..9bf70f4fef5 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa823cdae2d29aece5e69fae533d4c45626b3ca9e80c74a748fb7972a1b7323f +size 19784 diff --git a/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..676f56f2464 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3b26633dac0f3c137456e98cfe3edf9f1f3aea8a181c19be202fc5c15fd36ca7 +size 262058 diff --git a/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..cfff759008e --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG13P/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:743fd390bfe7aea61f175c75c317911b85e236aa1d4a9ead6b266de78831b29a +size 149412 diff --git a/protocol/bluetooth/lib/EFR32MG13P/IAR/libpsstore.a b/protocol/bluetooth/lib/EFR32MG13P/IAR/libpsstore.a index bd8b141f19f..3f9a2366b7f 100644 --- a/protocol/bluetooth/lib/EFR32MG13P/IAR/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32MG13P/IAR/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24c7101df36876c0200a10aa659819f23dc3829f8dc5674efe4df97eadb6eba3 +oid sha256:7f5432a278987ed10af03a8426cff9ab77777d2be993d12b3e70a90a92d31204 size 31804 diff --git a/protocol/bluetooth/lib/EFR32MG14P/GCC/binapploader.o b/protocol/bluetooth/lib/EFR32MG14P/GCC/binapploader.o index 82a5add30b7..95a8c708149 100644 --- a/protocol/bluetooth/lib/EFR32MG14P/GCC/binapploader.o +++ b/protocol/bluetooth/lib/EFR32MG14P/GCC/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0315225d91fada9917c1edad51a15b47b8729ad28c0dd554dd10b8ed1796e82f +oid sha256:d1bb132a747f02863749d6493a59885fbf8931d549107856373363a56ff2fe9d size 49700 diff --git a/protocol/bluetooth/lib/EFR32MG14P/GCC/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32MG14P/GCC/binapploader_nvm3.o index 34430dbcfa9..b600df26c82 100644 --- a/protocol/bluetooth/lib/EFR32MG14P/GCC/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32MG14P/GCC/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b84ed4cad958492827f28997833222f63155f23520acd2c840e30c7dd42065c +oid sha256:fc7d67006a5398e86908ac2a2fc33fffbc80a04ca5d0047d122a04c9e329fe2c size 53796 diff --git a/protocol/bluetooth/lib/EFR32MG14P/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG14P/GCC/libbluetooth.a index 49b100dee83..bb00ae9ed72 100644 --- a/protocol/bluetooth/lib/EFR32MG14P/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG14P/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6d23742b427571b8358debc0770743182cf9cd277b9cc65cce45130acaf2ca7 -size 2685698 +oid sha256:71b497ca941a7b53d170fc2637e560c04f9041094c6c7d708949fe439c5d8e37 +size 2688578 diff --git a/protocol/bluetooth/lib/EFR32MG14P/GCC/libpsstore.a b/protocol/bluetooth/lib/EFR32MG14P/GCC/libpsstore.a index 453b7875a53..f48450784f9 100644 --- a/protocol/bluetooth/lib/EFR32MG14P/GCC/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32MG14P/GCC/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44ec60a28b1807f628103fe58f35d1c2a764e26a884f33ac0ae877ecce9b33a0 +oid sha256:5f91d43ad0c48b6cdaea138c639c14d775665974b409e922cf404769e7a28253 size 12822 diff --git a/protocol/bluetooth/lib/EFR32MG14P/IAR/binapploader.o b/protocol/bluetooth/lib/EFR32MG14P/IAR/binapploader.o index 82a5add30b7..95a8c708149 100644 --- a/protocol/bluetooth/lib/EFR32MG14P/IAR/binapploader.o +++ b/protocol/bluetooth/lib/EFR32MG14P/IAR/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0315225d91fada9917c1edad51a15b47b8729ad28c0dd554dd10b8ed1796e82f +oid sha256:d1bb132a747f02863749d6493a59885fbf8931d549107856373363a56ff2fe9d size 49700 diff --git a/protocol/bluetooth/lib/EFR32MG14P/IAR/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32MG14P/IAR/binapploader_nvm3.o index 34430dbcfa9..b600df26c82 100644 --- a/protocol/bluetooth/lib/EFR32MG14P/IAR/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32MG14P/IAR/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b84ed4cad958492827f28997833222f63155f23520acd2c840e30c7dd42065c +oid sha256:fc7d67006a5398e86908ac2a2fc33fffbc80a04ca5d0047d122a04c9e329fe2c size 53796 diff --git a/protocol/bluetooth/lib/EFR32MG14P/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG14P/IAR/libbluetooth.a index ae4e46bb4b7..14dd8c7a4ce 100644 --- a/protocol/bluetooth/lib/EFR32MG14P/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG14P/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba1179a2b712c9009911b75414334aac3c23eda42a4a27aeb338d5aa94cd5ec5 -size 6580170 +oid sha256:c0f48005b9e2c7ccac26ed0f61aee59413ea7597ccad2c99e799f5a3102ca4bf +size 6583310 diff --git a/protocol/bluetooth/lib/EFR32MG14P/IAR/libpsstore.a b/protocol/bluetooth/lib/EFR32MG14P/IAR/libpsstore.a index 448f838e588..137166ee7a2 100644 --- a/protocol/bluetooth/lib/EFR32MG14P/IAR/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32MG14P/IAR/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:287c644801a281102a3bce4cf1d4169c144759ab6bf8c49353889b33de9a3032 +oid sha256:ffb16b64fb5fca83d06e588cb3f478e8322a3da189bab552d05e291a1a46b017 size 31804 diff --git a/protocol/bluetooth/lib/EFR32MG1P/GCC/binapploader.o b/protocol/bluetooth/lib/EFR32MG1P/GCC/binapploader.o index 8d43e8e6ecc..550afe6764a 100644 --- a/protocol/bluetooth/lib/EFR32MG1P/GCC/binapploader.o +++ b/protocol/bluetooth/lib/EFR32MG1P/GCC/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1d6e62266cefb8dfe5ab028fabaaad13ab0e46aae080afc7629ba881a055dd1 +oid sha256:67001c2ec6841169035b28e752617f8474cb5a3a279b20de05800c82f24dd19b size 43556 diff --git a/protocol/bluetooth/lib/EFR32MG1P/GCC/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32MG1P/GCC/binapploader_nvm3.o index c42b425cbeb..3db16acd545 100644 --- a/protocol/bluetooth/lib/EFR32MG1P/GCC/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32MG1P/GCC/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0ccb968e96ecda160d98fae5b30c42228e47196f11a9388a7d7cf3303aaad92 +oid sha256:eec96e7a832b260188dace04715083b126621e8e0f57b62f494c8d75b0394929 size 47652 diff --git a/protocol/bluetooth/lib/EFR32MG1P/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG1P/GCC/libbluetooth.a index 2e5a3d36900..9a188ca69a4 100644 --- a/protocol/bluetooth/lib/EFR32MG1P/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG1P/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a7f883774a8d2c1ec1356b0a6b375aaf7caf9de010203b4924bab262c2f0d05 -size 2571394 +oid sha256:d9854e27d4e5c824c3d6d1a3165b25c9c4795652aa4d29c5b120d23976fd2899 +size 2574274 diff --git a/protocol/bluetooth/lib/EFR32MG1P/GCC/libpsstore.a b/protocol/bluetooth/lib/EFR32MG1P/GCC/libpsstore.a index a787f3c3528..76752459717 100644 --- a/protocol/bluetooth/lib/EFR32MG1P/GCC/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32MG1P/GCC/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:995015a86ad1c8d46e5687ccd5467065ff18600735935c33bf3c28c77836b433 +oid sha256:21242ebdf619cbd3280a3da012fedb3269f359b6734c17b909864a95f03b1bbd size 12822 diff --git a/protocol/bluetooth/lib/EFR32MG1P/IAR/binapploader.o b/protocol/bluetooth/lib/EFR32MG1P/IAR/binapploader.o index 8d43e8e6ecc..550afe6764a 100644 --- a/protocol/bluetooth/lib/EFR32MG1P/IAR/binapploader.o +++ b/protocol/bluetooth/lib/EFR32MG1P/IAR/binapploader.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1d6e62266cefb8dfe5ab028fabaaad13ab0e46aae080afc7629ba881a055dd1 +oid sha256:67001c2ec6841169035b28e752617f8474cb5a3a279b20de05800c82f24dd19b size 43556 diff --git a/protocol/bluetooth/lib/EFR32MG1P/IAR/binapploader_nvm3.o b/protocol/bluetooth/lib/EFR32MG1P/IAR/binapploader_nvm3.o index c42b425cbeb..3db16acd545 100644 --- a/protocol/bluetooth/lib/EFR32MG1P/IAR/binapploader_nvm3.o +++ b/protocol/bluetooth/lib/EFR32MG1P/IAR/binapploader_nvm3.o @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0ccb968e96ecda160d98fae5b30c42228e47196f11a9388a7d7cf3303aaad92 +oid sha256:eec96e7a832b260188dace04715083b126621e8e0f57b62f494c8d75b0394929 size 47652 diff --git a/protocol/bluetooth/lib/EFR32MG1P/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG1P/IAR/libbluetooth.a index 375594105be..f39c490d462 100644 --- a/protocol/bluetooth/lib/EFR32MG1P/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG1P/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15ac2db3cdebe9cf314ed7da19dae61a41c18b9425a21713e9bc77abaa280359 -size 6309058 +oid sha256:04b11398d55e56c40087b349c41075de2d59a2327d82b3e33fd7a5eb52487255 +size 6312204 diff --git a/protocol/bluetooth/lib/EFR32MG1P/IAR/libpsstore.a b/protocol/bluetooth/lib/EFR32MG1P/IAR/libpsstore.a index 1606f1a0f2a..e03946d5695 100644 --- a/protocol/bluetooth/lib/EFR32MG1P/IAR/libpsstore.a +++ b/protocol/bluetooth/lib/EFR32MG1P/IAR/libpsstore.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c0f8b5afde068283a1c4dfbc2074c264dd4a99d23e9d9d46259b0b4e68e61f9 +oid sha256:8b219e974a64fd0641136d85c69111cb9ae743ffe7c696c2cd6f8dba5d6ce28a size 31860 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/apploader.s37 b/protocol/bluetooth/lib/EFR32MG21/GCC/apploader.s37 index a92f05b1965..38f0a4b882f 100644 --- a/protocol/bluetooth/lib/EFR32MG21/GCC/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b4ce567cb65e6ecfa9d2b95d1d4c65b4cbe829ab88de843f7b0a9cd139a6fa6 -size 173732 +oid sha256:ea2c309474d2363dad0d6bd571d5393b66f5656a7deacc7616e74919844824c6 +size 173778 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/libapploader.a b/protocol/bluetooth/lib/EFR32MG21/GCC/libapploader.a index b03de14b8d7..8903d1dd8d8 100644 --- a/protocol/bluetooth/lib/EFR32MG21/GCC/libapploader.a +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8dfb52516d09e7e729790368b3a8563fa92babf9d162a5566e8dd1aa2905a7a3 -size 470394 +oid sha256:6b365097dab29b39ec6dcbf6f4ba2fa5d2d3ca38d6c9bca48fc6a4e7f5397a78 +size 470586 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG21/GCC/libbluetooth.a index 44f3cd2b8cc..48de42dc4dc 100644 --- a/protocol/bluetooth/lib/EFR32MG21/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c36e916ceda456737d43878a47bc12d3297e82871334a6aa9f6ede93ccee23e1 -size 2690452 +oid sha256:f1709ac03f1174b514b9345fac8866fc7de5d4cd74d9e3add9c32470dc72b5cf +size 2693336 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG21/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..92cf86289d3 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a2c8ca2eb8c469cc7c1db5b72743e111a27ffca241234f7615ebfa736ffb04e +size 2066494 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..2b7bae70059 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93ccc44d5bcf03d60ba476ee6d03e568b22d4e1b576b614d30235c352de42fd6 +size 7594 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..ead2c8d9ecf --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a3d685a7ebcc16cb6141207862fc3d29f73fe29f0046e194807554c884931a7 +size 7892 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..4e974a4bb64 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29042dfce950428041f4fbe6568804c8131c918baf74705c9ce7232ba7b7324f +size 7498 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..3304363b8fa --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20e81241eaca2d4d86b5afb1cc54b3b86be956952a33ce95eb5b7526ce018ae1 +size 3306 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..5126361f66d --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76a13273f3160553e31dcfff83ca196a121119a8943d98ff3901f77d731beb39 +size 1976 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..4a9191e6f0f --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7ae094ac1ab38aabede41cfda3c678ceba74163a573370d60f281ec8e7600b6c +size 6786 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..9c61b793042 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d1d3e2b62ea4d00c6918b0ded35372c48828f035140024f0fa40b845c83235d +size 84524 diff --git a/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..fa659adc51a --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23e7e4162c614f44743ca56d122fa91b8f1597bce453784b79a38ec3aef6a48c +size 40392 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/apploader.s37 b/protocol/bluetooth/lib/EFR32MG21/IAR/apploader.s37 index a92f05b1965..38f0a4b882f 100644 --- a/protocol/bluetooth/lib/EFR32MG21/IAR/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b4ce567cb65e6ecfa9d2b95d1d4c65b4cbe829ab88de843f7b0a9cd139a6fa6 -size 173732 +oid sha256:ea2c309474d2363dad0d6bd571d5393b66f5656a7deacc7616e74919844824c6 +size 173778 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/libapploader.a b/protocol/bluetooth/lib/EFR32MG21/IAR/libapploader.a index 0eed37a46ff..22f80064d99 100644 --- a/protocol/bluetooth/lib/EFR32MG21/IAR/libapploader.a +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3b7ed1d1938e330d17099f8e92e81ec0524ddd2e575e95fe9eedc3239bc0c359 -size 865536 +oid sha256:295d3fbeca83811ae66d64b8e0e889a3b21d6794bcfec2623cf12bf95a13cd42 +size 865562 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG21/IAR/libbluetooth.a index b45fc17c89b..88588d75fb8 100644 --- a/protocol/bluetooth/lib/EFR32MG21/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac4c95a7daed7f429496658c2f7d6a19d20c941e4d005eddf064ea24524ca059 -size 6572826 +oid sha256:346eb50aa254932fd7197a177c669662ab96c5fee76634dcbcb7afb38304b491 +size 6575974 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG21/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..330612fea3b --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66d8440723d5f2199b11add8de5cdc3cba59cf034fe2a055a36e2c9499ad58b5 +size 5894162 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..1be9e551c12 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16a65df343042ef38ac174d4f54e9523747dbd60816e02ab8f140f46c025a0b3 +size 23834 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..7910eb9e692 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d5b0415a359bb25a8f7d0b9b463904f0af05737c78cd211394637460e7be346 +size 24332 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..cefa91f66c3 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b94d75038abf93872b53991a8e1ce1d6015740881daa6aca4de84d740494192 +size 23754 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..b9954405bbc --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2466033ff4ab09bd16668367f4883998e98b33753b7f5d4a95a96444438a9064 +size 11396 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..a19c85797e7 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51f9ffa16d803c01d592294632057faa4966dd15cad61ad1aaf99664ccd60576 +size 6668 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..51b03a615f8 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d88e0e1f26ff3495130c18ab8f4e94ff4f8f5e07b8b7c3389f17f9ce9a117ca8 +size 19806 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..71a37332002 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae4fe7fd01aae3935b8bca1dde113f9c8ea26a9ef149c476f5cb5c7580b1adbc +size 263114 diff --git a/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..875b42fe808 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG21/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6e4bf7ca0a76edf20aaadc6c9e76b75de1241d3b794fb35b73748de70141003 +size 145880 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/apploader.s37 b/protocol/bluetooth/lib/EFR32MG22/GCC/apploader.s37 index b69d4e24c58..803d3ad0451 100644 --- a/protocol/bluetooth/lib/EFR32MG22/GCC/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b9a7f985329362aef018f6636192015162f73504fe4fa7ef1c76bdf2df9e26b -size 195014 +oid sha256:e1cd808dee372e8d082ec1d678ad200f361e107520b1347bd3636bf3b2a87d72 +size 195366 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/libapploader.a b/protocol/bluetooth/lib/EFR32MG22/GCC/libapploader.a index 1efe20ef903..8e213b6f2ba 100644 --- a/protocol/bluetooth/lib/EFR32MG22/GCC/libapploader.a +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:26c239b2cec6f4020082eb32c48e4da9cea8cc25fea6f382c6a40783c5a6aa01 -size 477774 +oid sha256:84bb4103159085aeb2e940e02e18e2f5aeff78306ae10e8a10d3cfe461a7fe60 +size 477966 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG22/GCC/libbluetooth.a index 59a135d31e5..45e900aeda4 100644 --- a/protocol/bluetooth/lib/EFR32MG22/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d81d99b5a9eb68bc993d4faab8d667d14642dbe4b1b467aff0d5e6e92c61e401 -size 2706014 +oid sha256:d9d20f725fecec973d243eb87a0d6cdfc9fc80bddb6c49b6d0c7f3e7acf8529e +size 2708898 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG22/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..b99810e6547 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:297bdbe0bca7916d2edf260bc7f0c06861ad4a512ce429c1209c9e4071484d22 +size 2065802 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..76ce6a625da --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3e00eff696c16bf614da20e02d1e8bb552273a2490e5803797e079fe754c11a +size 7594 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..d986d274306 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1705041139d9df973be6efdefe5c4eb889549dd9a8b63fbff8023ea4a9763756 +size 7892 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..83161295917 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c046bc85b99b0c86fc5b81b4387c20ab6092c18a8fb9e74ec52a44f0902ebdb +size 7498 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..905f7a52e55 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d64cc7e806639fe460758144a1928049ac8389bfffe65f342b6a8c2a8ed3a185 +size 3306 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..91e4701ca2b --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:956da39390081669ad3c0dfb28f07d8eb15dc5265fde10ab79eb51fa88ab3416 +size 1976 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..8ecd82c88e1 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e1bd743d3d6db11e12acd51306bece31ed10311eaf4c2ee689a9c6ed5a222eb4 +size 6786 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..5a7d7249a01 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81ff1552412b7c6bc8688b1646f90a55992fa6f38b38e7a985a19470b0812ef3 +size 84524 diff --git a/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..c2c30015036 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8efc30cbbb13ecd9dae8775b34712fc255ec7a089232403ec62a1374c5f33fa +size 40392 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/apploader.s37 b/protocol/bluetooth/lib/EFR32MG22/IAR/apploader.s37 index b69d4e24c58..803d3ad0451 100644 --- a/protocol/bluetooth/lib/EFR32MG22/IAR/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b9a7f985329362aef018f6636192015162f73504fe4fa7ef1c76bdf2df9e26b -size 195014 +oid sha256:e1cd808dee372e8d082ec1d678ad200f361e107520b1347bd3636bf3b2a87d72 +size 195366 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/libapploader.a b/protocol/bluetooth/lib/EFR32MG22/IAR/libapploader.a index 7e16867a7d7..f07e816bae9 100644 --- a/protocol/bluetooth/lib/EFR32MG22/IAR/libapploader.a +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fed9e44806aaa58432dc54fe0cff967897a78847873e1143e3368d9bb4e64c36 -size 876026 +oid sha256:de8ae73025415777d01f51037d39d272ded1d1a402dce6ee4bc4af3fd031ad8b +size 876052 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG22/IAR/libbluetooth.a index 51b9d493682..aea0191363a 100644 --- a/protocol/bluetooth/lib/EFR32MG22/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9016b9e4218a2e294d405743be90ee6e036b56248ac2bd65a0bf2ae7f50fa88 -size 6609398 +oid sha256:87dc3348d2c8ce4c7ef40339e6fd29a17cc3928662df1d1e5ad2b41076bf7876 +size 6612540 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG22/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..40ca6a871b9 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a065ce5e97e60cedb7c763f438c7fd4b171ea4fccb7b51903860f7999f4278f +size 5892232 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..d1a65c13830 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5263b3dc685f083646480b28faaae5dbd6837579c1d9a31e24d5508cc47586c0 +size 23832 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..61488c6edad --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:802c5ac1587684741834f91c9e9ee96adb696b66773e917ab882e9e23fcfacc9 +size 24332 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..63b163d4010 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46c29718b1c334a40362837bb67cde21a0007b5f7c0aa19dd4b880bdd55e9d14 +size 23752 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..2e175995f4b --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b56e09bba56ecef8407f5f654b3016b0362815a48a06c9f1ad489affa593f1e1 +size 11394 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..85c189f587b --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:995b1927a66bf2f5691751a2a7d21a6ea0f27e70b2fcebfa88096d7035bd4ae9 +size 6668 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..88ecde71868 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8108dc22fd220b317c81b901b62def982c41a9d7e867cabcf92498cbe2a73fa9 +size 19804 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..06aff0267ae --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e4c302107a802cac5591c6be05fc66e42151b123e657ddbadef423f867f3168 +size 263108 diff --git a/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..2b52f12f23c --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG22/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6c8bc36a6a954a5e51679fc30ca23395476597305340429a89d9c60f8eafce0 +size 145878 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/apploader.s37 b/protocol/bluetooth/lib/EFR32MG24/GCC/apploader.s37 index 8b13d06087a..455e0b5bddf 100644 --- a/protocol/bluetooth/lib/EFR32MG24/GCC/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43a48d430dbc07781edc458c2934c984ff4eb488c95397a5ca87858a2425daf9 -size 221516 +oid sha256:fb8223697efe20415378bb3e818b5297907df8744deeb247739b6432138e1f95 +size 221924 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/libapploader.a b/protocol/bluetooth/lib/EFR32MG24/GCC/libapploader.a index e47fb9f00b7..aa8503dd54a 100644 --- a/protocol/bluetooth/lib/EFR32MG24/GCC/libapploader.a +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:659c7c627965327f7ad91e8022ceffff0a675c121a5dd2af115235e9bf13c289 -size 485394 +oid sha256:ccacbbd39df84e95ce7dbbdd8250add490d4c4a769960f150389fddec8979909 +size 485586 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth.a index 77de550fb2f..501666b2bee 100644 --- a/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fbcb4da6bc0118f5e61747fc870f6bc66a98a395ae9e14408ebd3a0e5142c4e -size 2706166 +oid sha256:601a4fd1f3a06f34814a99001c5d5577ae5d9135446e4e892316b74ee1124bf5 +size 2709050 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..07cce3e2318 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf447df81b58ee6a50fae479714acc212af1a9220dc339efd43b188f85cdcba5 +size 2066494 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..daa2b6b4d60 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2c1afe34c213c085f71187a695ac8027bf21e5b89a1d851b94b1e389e97d6bc +size 7594 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..d6e509a6e09 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc3bba11955dc2caec574bee9b9f0141f1acf372a7a94a1b7d59b3166bcfc5ab +size 7892 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..21856cdaa39 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b5fd770cda63ec1a3959e380db3576be731b066c3e9894bd755cdb331c578cf +size 7498 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..784679417c7 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a01ccafd53b1f92340da93b50315122e924a145b7da8863f077e5411a535bed0 +size 3306 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..fff3fcc5828 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16c3c62db9adc3020c45bc8692e3a6c2044606d49ef6e6a6784958a7170b1e6d +size 1976 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..365d8a3b8ea --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2a7d9a0a8eb60bacdd143aff59b9880509be7aa3c96a676344773de9b0fc7cc +size 6786 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..e35eababff4 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e66bc579c4f117fc28f47c55bfcd55246753e08c76e06c4d6490357444d9c44 +size 84524 diff --git a/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..67f27bdc3a1 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af6f084cf8dd19955dc80fd6233c82ad19b926b03feb0423e451458b69915e19 +size 40392 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/apploader.s37 b/protocol/bluetooth/lib/EFR32MG24/IAR/apploader.s37 index 8b13d06087a..455e0b5bddf 100644 --- a/protocol/bluetooth/lib/EFR32MG24/IAR/apploader.s37 +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/apploader.s37 @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43a48d430dbc07781edc458c2934c984ff4eb488c95397a5ca87858a2425daf9 -size 221516 +oid sha256:fb8223697efe20415378bb3e818b5297907df8744deeb247739b6432138e1f95 +size 221924 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/libapploader.a b/protocol/bluetooth/lib/EFR32MG24/IAR/libapploader.a index ff3c1746a49..7d7139af3bf 100644 --- a/protocol/bluetooth/lib/EFR32MG24/IAR/libapploader.a +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:318d7dc30db69ec747bb466241fd61af8f26bdecf120fc42bcd5d558c1b1d8f3 -size 882992 +oid sha256:a89aeba6f00654bede6d413f12bec13e0bacdb10e825ce3f1d92bf968c291a21 +size 883018 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG24/IAR/libbluetooth.a index 1f54dc81fc1..ee36cee1460 100644 --- a/protocol/bluetooth/lib/EFR32MG24/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea5c524ccc46fd7afb3999f65109952fd0935da26b9a1a981527fdba5872ac70 -size 6610266 +oid sha256:cacc9c95a0e05738940641ebf21bcc65b3bdca4a1383e4b6869a397f24da5808 +size 6613414 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG24/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..93f60f9a64b --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:81a94cececd4967442d590bb23bffc6afc3944c91bed5861b45679288a0767ab +size 5894162 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..53685cf4ffa --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bf7436bd4bcc4cb44ea66c4106fffcec5f98a7371e96be601de160ed8a73113 +size 23834 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..ae651009f2a --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbd18066a129c86f611421374b8f3e1bf3383d556d10b149d2c9b8120b232cb0 +size 24332 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..48fb32e926a --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93ae43ccc3753e58347d6f2e37d8fbeb85c40bddd342e4665571cfd0c81db4eb +size 23754 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..04a9a9c7d84 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:658d711e587f607f29ef0a6805b0c22571dc2a9a604a062fa3e167d8fbe47cf4 +size 11396 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..41c581b42e4 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68a905bc6095a986e615076e5802e29ab182e66bf61914a38e9fc48d9fdf7783 +size 6668 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..5db02923e09 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:981022ececc5956675e9297b9b45e6675bb6c29982335ff5983d72f0582c7c33 +size 19806 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..7a3c38606b0 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:094ed4e0b2de70b88c550bf332df956340fdf37b6c1c4b5c5a268107bee7b71c +size 263114 diff --git a/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..465837df445 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG24/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ffe8445843a8ef4b75b307e1bc0e843071967f3bf2cdf2f0cf9549ef398b627 +size 145880 diff --git a/protocol/bluetooth/lib/EFR32MG27/GCC/libapploader.a b/protocol/bluetooth/lib/EFR32MG27/GCC/libapploader.a index f326ce5e29f..5ab2f668df1 100644 --- a/protocol/bluetooth/lib/EFR32MG27/GCC/libapploader.a +++ b/protocol/bluetooth/lib/EFR32MG27/GCC/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7125eb315803847416ab82788f5e6b939a7cce0adff71e86f20265f7875135f -size 473382 +oid sha256:ccb332f31475ef47b3a472dff3be70ab6f1d8aa4f6b2be2bb5d72c870bed25fe +size 473574 diff --git a/protocol/bluetooth/lib/EFR32MG27/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG27/GCC/libbluetooth.a index d6adae6927c..7b16cf998de 100644 --- a/protocol/bluetooth/lib/EFR32MG27/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG27/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:603c56c5f167f16b8634322854195b5b16eddf06ef050a12881766a4aeff2900 -size 2705918 +oid sha256:ba856bacb058dc234ea7582d7f6c35b00fad637fd51ed7ecf6debb500bb2e914 +size 2708802 diff --git a/protocol/bluetooth/lib/EFR32MG27/GCC/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG27/GCC/libbluetooth_mesh.a new file mode 100644 index 00000000000..d44a4787f1a --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/GCC/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91006f3d1e0572639f7f6306f78314366c0a7639f992bad20f60100582341d12 +size 2066338 diff --git a/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..ed33d5e560e --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f330b70a7dff33c519a4355bad38b03239c7cfdffd84dc75504d3d4a20b0913 +size 7594 diff --git a/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..0e9569655af --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05caf36c41599c500e13a631fc585a37bf0ede760261c5d16a8c03671be5af69 +size 7892 diff --git a/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..33ba32fc92d --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb45f88ef7ff73a8ee1e0ba4ae2d51f2f0489d657798df55e0065c8641448e66 +size 7498 diff --git a/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..6a4b6ed4f03 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e83554d744588a07fa9b48c986be9077b0b03c36d321bf614e4efd033d5284d +size 3306 diff --git a/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..4c57e54addd --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7119a8a991d217055184e6dab34cda1ff224190c98a42664d74aa170a63bbb0 +size 1976 diff --git a/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..2ec438770bb --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0aadd045ddd69980f6b02a401e46470bdd17be3fdd010c99db1d3c303916b276 +size 6786 diff --git a/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..88109d4c517 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:559d783dd014e04237d93c878c9059db661a4e0347bef9fe749ef7ce3e8a39a2 +size 84524 diff --git a/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..7b0613b15e7 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/GCC/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4129e473d65e18bda2dbb0cd43a180a4631eedb75910f35e80afa6735ba2af3 +size 40392 diff --git a/protocol/bluetooth/lib/EFR32MG27/IAR/libapploader.a b/protocol/bluetooth/lib/EFR32MG27/IAR/libapploader.a index 4a6c1697bf0..7e04349a94b 100644 --- a/protocol/bluetooth/lib/EFR32MG27/IAR/libapploader.a +++ b/protocol/bluetooth/lib/EFR32MG27/IAR/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fc6bc31d4dd9ed66902e7e0d9d0e946601fca6a1802f9342e71b51d94632c27 -size 873594 +oid sha256:a7586b56c4c33e221b1497ce30d137c414b2c6055f01e69a94f0e2a16d1b4d0c +size 873620 diff --git a/protocol/bluetooth/lib/EFR32MG27/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32MG27/IAR/libbluetooth.a index b37825b8d33..5d9005f142c 100644 --- a/protocol/bluetooth/lib/EFR32MG27/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32MG27/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f528629abefd60550b2f8bbe96114d8001133c8c55149867f4ce6c7762429039 -size 6609208 +oid sha256:c5882d84bba868c111d777b9abb09f39564086b3429334cbec114047e9f3eac6 +size 6612350 diff --git a/protocol/bluetooth/lib/EFR32MG27/IAR/libbluetooth_mesh.a b/protocol/bluetooth/lib/EFR32MG27/IAR/libbluetooth_mesh.a new file mode 100644 index 00000000000..d5d141df6e8 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/IAR/libbluetooth_mesh.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd5dceb2213db74fa178253bf7bcca13459e12bfa1621a0addcc7c112c407d44 +size 5893124 diff --git a/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_advertiser_deprecated.a b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_advertiser_deprecated.a new file mode 100644 index 00000000000..5a137e49bb8 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_advertiser_deprecated.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5d97515ac41c354017e0798a3dc879f368188e2d85cc1271ba40106f9a0b868 +size 23832 diff --git a/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_advertiser_extended.a b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_advertiser_extended.a new file mode 100644 index 00000000000..504b39d4db1 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_advertiser_extended.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11350ed8061e275ce3c8d2564e339319ea6cb5daa51b38fa4b124097fc33f854 +size 24332 diff --git a/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_advertiser_legacy.a b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_advertiser_legacy.a new file mode 100644 index 00000000000..3281c1593c8 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_advertiser_legacy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbed2a35dcb54675be89d3d95c59d9b352e0eeba899ca283d75df8750ac7bbbc +size 23752 diff --git a/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_crypto_key_cache.a b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_crypto_key_cache.a new file mode 100644 index 00000000000..f12b8de8f83 --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_crypto_key_cache.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:391162fea58b0af40c3611e896a5668ab9a73cae80291d48f55712f8e628dcfc +size 11394 diff --git a/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_crypto_key_cache_dummy.a b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_crypto_key_cache_dummy.a new file mode 100644 index 00000000000..66a475f0fff --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_crypto_key_cache_dummy.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da7f04c12091f9a3018cf8c51bee35cc1f6a363b8369056c2e908dae8c09dee2 +size 6668 diff --git a/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_dfu_ncp_fw_list.a b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_dfu_ncp_fw_list.a new file mode 100644 index 00000000000..de3e77ec90f --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_dfu_ncp_fw_list.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9df3128c833a09aa77b95c3e29f06d083ac007bc9cd04f0677bed3fa05c4b6a2 +size 19804 diff --git a/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_model_dfu.a b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_model_dfu.a new file mode 100644 index 00000000000..c5b33019a5a --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_model_dfu.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b6cdc506750dc689be50e1223828b8a7fac7e4ea385a5ef68c9e5f46267bfb6 +size 263108 diff --git a/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_model_mbt.a b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_model_mbt.a new file mode 100644 index 00000000000..79083fbf2bf --- /dev/null +++ b/protocol/bluetooth/lib/EFR32MG27/IAR/libbtmesh_model_mbt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:747e29e9117f7ae473000e30e83f459051c4e9e15437ff87cc979a53a03c2423 +size 145878 diff --git a/protocol/bluetooth/lib/EFR32ZG28/GCC/libapploader.a b/protocol/bluetooth/lib/EFR32ZG28/GCC/libapploader.a index 510627793ec..390fb7aa4e2 100644 --- a/protocol/bluetooth/lib/EFR32ZG28/GCC/libapploader.a +++ b/protocol/bluetooth/lib/EFR32ZG28/GCC/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4711b24cd45e31f6c06c558fcf6c4e483d15573113d02f888f95812138daadbf -size 481962 +oid sha256:e02af10ff5feb8d8152c8fd09f5d0b12955f0e12c0c507e5b1d429be2a948c19 +size 482154 diff --git a/protocol/bluetooth/lib/EFR32ZG28/GCC/libbluetooth.a b/protocol/bluetooth/lib/EFR32ZG28/GCC/libbluetooth.a index b149310674c..676ab61ed01 100644 --- a/protocol/bluetooth/lib/EFR32ZG28/GCC/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32ZG28/GCC/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d993ea845d38b4545512790b9909dccfdcdab8f512152208a29df001e839b74c -size 2691388 +oid sha256:dfe78db8cd16b7f2264eca676c0d6a4f1e93bbe7e0058a1b78d23c4367c32aee +size 2694272 diff --git a/protocol/bluetooth/lib/EFR32ZG28/IAR/libapploader.a b/protocol/bluetooth/lib/EFR32ZG28/IAR/libapploader.a index 1cda8b6dc79..b382581306c 100644 --- a/protocol/bluetooth/lib/EFR32ZG28/IAR/libapploader.a +++ b/protocol/bluetooth/lib/EFR32ZG28/IAR/libapploader.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:156f1f9ab96686cc6e5cd3369aa4bb077232fc402f71dac7afae343db633e8bf -size 882234 +oid sha256:5e40ef712719697292bd2bf3f0d72d700da39fd031263c7cd4bb835839cecdb7 +size 882260 diff --git a/protocol/bluetooth/lib/EFR32ZG28/IAR/libbluetooth.a b/protocol/bluetooth/lib/EFR32ZG28/IAR/libbluetooth.a index a3d70cad8e3..0db2dab8a09 100644 --- a/protocol/bluetooth/lib/EFR32ZG28/IAR/libbluetooth.a +++ b/protocol/bluetooth/lib/EFR32ZG28/IAR/libbluetooth.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c65e3a81e6d779d13e1e19f64b9beefe4cd8d838460872eb4631a6aaaebec07 -size 6574542 +oid sha256:fd627f37c926c7509938617d8171dfd2d8114be86a59526acd021d662ae9fce3 +size 6577690 diff --git a/protocol/bluetooth/src/sl_btmesh.c.jinja b/protocol/bluetooth/src/sl_btmesh.c.jinja new file mode 100644 index 00000000000..70c7d9e3a57 --- /dev/null +++ b/protocol/bluetooth/src/sl_btmesh.c.jinja @@ -0,0 +1,87 @@ +{{ autogenerated_c_header }} + +#include +#include "sl_btmesh.h" +#include "sl_component_catalog.h" +{%- for entry in btmesh_stack_init %} +{%- if entry["include"] is string %} +#include "{{ entry["include"] }}" +{%- else %} +{%- for f in entry["include"] %} +#include "{{ f }}" +{%- endfor %} +{%- endif %} +{%- endfor %} +{%- for entry in btmesh_on_event %} +{%- if entry["include"] is string %} +#include "{{ entry["include"] }}" +{%- else %} +{%- for f in entry["include"] %} +#include "{{ f }}" +{%- endfor %} +{%- endif %} +{%- endfor %} + +{%- if bluetooth_api_ncp_host is not defined %} + +/** @brief Table of used BGAPI classes */ +static const struct sli_bgapi_class * const btmesh_class_table[] = +{ +{%- for entry in btmesh_bgapi_class %} + SL_BTMESH_BGAPI_CLASS({{entry["class"]}}), +{%- endfor %} + NULL +}; +{%- endif %} + +void sl_btmesh_init(void) +{ +{%- if bluetooth_api_ncp_host is not defined %} + sl_btmesh_init_classes(btmesh_class_table); +{%- endif %} + {%- for entry in btmesh_stack_init %} + {{ entry["function"] }}(); + {%- endfor %} +} + +SL_WEAK void sl_btmesh_on_event(sl_btmesh_msg_t* evt) +{ + (void)(evt); +} + +void sl_btmesh_process_event(sl_btmesh_msg_t *evt) +{ +{%- for entry in btmesh_on_event %} + {{ entry["function"] }}(evt); +{%- endfor %} + sl_btmesh_on_event(evt); +} + +#if !defined(SL_CATALOG_KERNEL_PRESENT) +// When running in an RTOS, the stack events are processed in a dedicated +// event processing task, and these functions are not used at all. +SL_WEAK bool sl_btmesh_can_process_event(uint32_t len) +{ + (void)(len); + return true; +} + +void sl_btmesh_step(void) +{ + sl_btmesh_msg_t evt; +{% if bluetooth_api_ncp_host is not defined %} + uint32_t event_len = sl_btmesh_event_pending_len(); + // For preventing from data loss, the event will be kept in the stack's queue + // if application cannot process it at the moment. + if ((event_len == 0) || (!sl_btmesh_can_process_event(event_len))) { + return; + } +{% endif %} + // Pop (non-blocking) a Bluetooth stack event from event queue. + sl_status_t status = sl_btmesh_pop_event(&evt); + if(status != SL_STATUS_OK){ + return; + } + sl_btmesh_process_event(&evt); +} +#endif // !defined(SL_CATALOG_KERNEL_PRESENT) diff --git a/protocol/bluetooth/src/sl_btmesh_lib.c b/protocol/bluetooth/src/sl_btmesh_lib.c new file mode 100644 index 00000000000..5eada4b2279 --- /dev/null +++ b/protocol/bluetooth/src/sl_btmesh_lib.c @@ -0,0 +1,440 @@ +/***************************************************************************//** + * @brief Mesh helper library + ******************************************************************************* + * # License + * Copyright 2018 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ + +#include +#include + +#include "sl_btmesh_api.h" + +#include "sl_status.h" +#include "sl_btmesh_generic_model_capi_types.h" +#include "sl_btmesh_lib.h" +#include "sl_btmesh_serdeser.h" +#include "sl_malloc.h" + +/* Enough room for Property ID (2 bytes), access flags (1 byte), and + longest currently defined property characteristic (36 bytes) */ +#define LONGEST_STATE 39 +#define LONGEST_REQUEST 39 + +uint32_t mesh_lib_transition_time_to_ms(uint8_t t) +{ + uint32_t res_ms[4] = { 100, 1000, 10000, 600000 }; + uint32_t unit = (t >> 6) & 0x03; + uint32_t count = t & 0x3f; + return res_ms[unit] * count; +} + +struct reg { + uint16_t model_id; + uint16_t elem_index; + union { + struct { + mesh_lib_generic_server_client_request_cb client_request_cb; + mesh_lib_generic_server_change_cb state_changed_cb; + mesh_lib_generic_server_recall_cb state_recall_cb; + } server; + struct { + mesh_lib_generic_client_server_response_cb server_response_cb; + } client; + }; +}; + +/** + * @brief Struct containing the registry descriptor values + */ +struct registry_s { +/// Pointer to array allocated to store registered handlers + struct reg *entries; +/// Length of the allocated storage + size_t length; +/// Index of the next empty element + size_t index; +/// Allocation increment + size_t increment; +}; +static struct registry_s registry = { .entries = NULL, + .length = 0, + .index = 0, + .increment = 0 }; + +static struct reg *find_reg(uint16_t model_id, uint16_t elem_index) +{ + size_t r; + for (r = 0; r < registry.index; r++) { + if (registry.entries[r].model_id == model_id + && registry.entries[r].elem_index == elem_index) { + return ®istry.entries[r]; + } + } + return NULL; +} + +static struct reg *find_free(void) +{ + struct reg *tmp; + if (registry.index == registry.length) { + // if full and no increment set + if (registry.increment == 0) { + return NULL; + } + // if no empty slot has been found, reallocate + tmp = registry.entries; + registry.entries = sl_realloc(registry.entries, + (registry.length + + registry.increment) + * sizeof(struct reg)); + if (NULL == registry.entries) { + registry.entries = tmp; + return NULL; + } + registry.length += registry.increment; + } + return ®istry.entries[registry.index++]; +} + +sl_status_t mesh_lib_init(size_t initial_num, size_t increment) +{ + registry.length = initial_num; + if (registry.length > 0) { + registry.entries = sl_calloc(registry.length, sizeof(struct reg)); + if (registry.entries == NULL) { + return SL_STATUS_NO_MORE_RESOURCE; + } + } else { + registry.entries = NULL; + } + registry.index = 0; + registry.increment = increment; + return SL_STATUS_OK; +} + +void mesh_lib_deinit(void) +{ + if (registry.entries != NULL) { + sl_free(registry.entries); + registry.entries = NULL; + registry.length = 0; + registry.index = 0; + registry.increment = 0; + } +} + +sl_status_t +mesh_lib_generic_server_register_handler(uint16_t model_id, + uint16_t elem_index, + mesh_lib_generic_server_client_request_cb request, + mesh_lib_generic_server_change_cb change, + mesh_lib_generic_server_recall_cb recall) +{ + struct reg *entry = NULL; + + if ((request == NULL) && (change == NULL) && (recall == NULL)) { + return SL_STATUS_NULL_POINTER; + } + + entry = find_reg(model_id, elem_index); + if (entry != NULL) { + return SL_STATUS_INVALID_STATE; // already exists + } + + entry = find_free(); + if (entry == NULL) { + return SL_STATUS_NO_MORE_RESOURCE; + } + + entry->model_id = model_id; + entry->elem_index = elem_index; + entry->server.client_request_cb = request; + entry->server.state_changed_cb = change; + entry->server.state_recall_cb = recall; + return SL_STATUS_OK; +} + +sl_status_t +mesh_lib_generic_client_register_handler(uint16_t model_id, + uint16_t elem_index, + mesh_lib_generic_client_server_response_cb response) +{ + struct reg *entry = NULL; + + if (response == NULL) { + return SL_STATUS_NULL_POINTER; + } + + entry = find_reg(model_id, elem_index); + if (entry != NULL) { + return SL_STATUS_INVALID_STATE; // already exists + } + + entry = find_free(); + if (entry == NULL) { + return SL_STATUS_NO_MORE_RESOURCE; + } + + entry->model_id = model_id; + entry->elem_index = elem_index; + entry->client.server_response_cb = response; + return SL_STATUS_OK; +} + +void mesh_lib_generic_server_event_handler(sl_btmesh_msg_t *evt) +{ + sl_btmesh_evt_generic_server_client_request_t *req = NULL; + sl_btmesh_evt_generic_server_state_changed_t *chg = NULL; + sl_btmesh_evt_generic_server_state_recall_t *recall = NULL; + struct mesh_generic_request request; + struct mesh_generic_state current; + struct mesh_generic_state target; + int has_target; + struct reg *entry; + + if (evt == NULL) { + return; + } + + switch (SL_BGAPI_MSG_ID(evt->header)) { + case sl_btmesh_evt_generic_server_client_request_id: + req = &(evt->data.evt_generic_server_client_request); + entry = find_reg(req->model_id, req->elem_index); + if (entry != NULL) { + if (mesh_lib_deserialize_request(&request, + (mesh_generic_request_t)req->type, + req->parameters.data, + req->parameters.len) + == SL_STATUS_OK) { + if (entry->server.client_request_cb != NULL) { + (entry->server.client_request_cb)(req->model_id, + req->elem_index, + req->client_address, + req->server_address, + req->appkey_index, + &request, + req->transition_ms, + req->delay_ms, + req->flags); + } + } + } + break; + case sl_btmesh_evt_generic_server_state_changed_id: + chg = &(evt->data.evt_generic_server_state_changed); + entry = find_reg(chg->model_id, chg->elem_index); + if (entry != NULL) { + if (mesh_lib_deserialize_state(¤t, + &target, + &has_target, + (mesh_generic_state_t)chg->type, + chg->parameters.data, + chg->parameters.len) + == SL_STATUS_OK) { + if (entry->server.state_changed_cb != NULL) { + (entry->server.state_changed_cb)(chg->model_id, + chg->elem_index, + ¤t, + has_target ? &target : NULL, + chg->remaining_ms); + } + } + } + break; + case sl_btmesh_evt_generic_server_state_recall_id: + recall = &(evt->data.evt_generic_server_state_recall); + entry = find_reg(recall->model_id, recall->elem_index); + if (entry != NULL) { + if (mesh_lib_deserialize_state(¤t, + &target, + &has_target, + (mesh_generic_state_t)recall->type, + recall->parameters.data, + recall->parameters.len) + == SL_STATUS_OK) { + if (entry->server.state_recall_cb != NULL) { + (entry->server.state_recall_cb)(recall->model_id, + recall->elem_index, + ¤t, + has_target ? &target : NULL, + recall->transition_time_ms); + } + } + } + break; + } +} + +void mesh_lib_generic_client_event_handler(sl_btmesh_msg_t *evt) +{ + sl_btmesh_evt_generic_client_server_status_t *res = NULL; + struct mesh_generic_state current; + struct mesh_generic_state target; + int has_target; + struct reg *entry; + + if (evt == NULL) { + return; + } + + switch (SL_BGAPI_MSG_ID(evt->header)) { + case sl_btmesh_evt_generic_client_server_status_id: + res = &(evt->data.evt_generic_client_server_status); + entry = find_reg(res->model_id, res->elem_index); + if (entry != NULL) { + if (mesh_lib_deserialize_state(¤t, + &target, + &has_target, + (mesh_generic_state_t)res->type, + res->parameters.data, + res->parameters.len) + == SL_STATUS_OK) { + (entry->client.server_response_cb)(res->model_id, + res->elem_index, + res->client_address, + res->server_address, + ¤t, + has_target ? &target : NULL, + res->remaining_ms, + res->flags); + } + } + break; + } +} + +sl_status_t +mesh_lib_generic_server_respond(uint16_t model_id, + uint16_t element_index, + uint16_t client_addr, + uint16_t appkey_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms, + uint8_t response_flags) +{ + uint8_t buf[LONGEST_STATE]; + size_t len; + + if (mesh_lib_serialize_state(current, target, buf, sizeof(buf), &len) != SL_STATUS_OK) { + return SL_STATUS_INVALID_PARAMETER; + } + return sl_btmesh_generic_server_respond(client_addr, + element_index, + model_id, + appkey_index, + remaining_ms, + response_flags, + current->kind, + len, + buf); +} + +sl_status_t +mesh_lib_generic_server_update(uint16_t model_id, + uint16_t element_index, + const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint32_t remaining_ms) +{ + uint8_t buf[LONGEST_STATE]; + size_t len; + + if (mesh_lib_serialize_state(current, target, buf, sizeof(buf), &len) != SL_STATUS_OK) { + return SL_STATUS_INVALID_PARAMETER; + } + return sl_btmesh_generic_server_update(element_index, + model_id, + remaining_ms, + current->kind, + len, + buf); +} + +sl_status_t +mesh_lib_generic_server_publish(uint16_t model_id, + uint16_t element_index, + mesh_generic_state_t kind) +{ + return sl_btmesh_generic_server_publish(element_index, + model_id, + kind); +} + +sl_status_t mesh_lib_generic_client_get(uint16_t model_id, + uint16_t element_index, + uint16_t server_addr, + uint16_t appkey_index, + mesh_generic_state_t kind) +{ + return sl_btmesh_generic_client_get(server_addr, + element_index, + model_id, + appkey_index, + kind); +} + +sl_status_t mesh_lib_generic_client_set(uint16_t model_id, + uint16_t element_index, + uint16_t server_addr, + uint16_t appkey_index, + uint8_t transaction_id, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t flags) +{ + uint8_t buf[LONGEST_REQUEST]; + size_t len; + + if (mesh_lib_serialize_request(request, buf, sizeof(buf), &len) != SL_STATUS_OK) { + return SL_STATUS_INVALID_PARAMETER; + } + return sl_btmesh_generic_client_set(server_addr, + element_index, + model_id, + appkey_index, + transaction_id, + transition_ms, + delay_ms, + flags, + request->kind, + len, + buf); +} + +sl_status_t +mesh_lib_generic_client_publish(uint16_t model_id, + uint16_t element_index, + uint8_t transaction_id, + const struct mesh_generic_request *request, + uint32_t transition_ms, + uint16_t delay_ms, + uint8_t request_flags) +{ + uint8_t buf[LONGEST_REQUEST]; + size_t len; + + if (mesh_lib_serialize_request(request, buf, sizeof(buf), &len) != SL_STATUS_OK) { + return SL_STATUS_INVALID_PARAMETER; + } + return sl_btmesh_generic_client_publish(element_index, + model_id, + transaction_id, + transition_ms, + delay_ms, + request_flags, + request->kind, + len, + buf); +} diff --git a/protocol/bluetooth/src/sl_btmesh_ncp_host.c b/protocol/bluetooth/src/sl_btmesh_ncp_host.c new file mode 100644 index 00000000000..4960f96af05 --- /dev/null +++ b/protocol/bluetooth/src/sl_btmesh_ncp_host.c @@ -0,0 +1,85 @@ +/***************************************************************************//** + * @brief Adaptation layer between host application and SL_BTMESH_API protocol + ******************************************************************************* + * # License + * Copyright 2021 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ + +#include "sl_btmesh_ncp_host.h" +#include "sl_status.h" + +sl_btmesh_msg_t _sl_btmesh_cmd_msg; +sl_btmesh_msg_t _sl_btmesh_rsp_msg; +sl_btmesh_msg_t *sl_btmesh_cmd_msg = &_sl_btmesh_cmd_msg; +sl_btmesh_msg_t *sl_btmesh_rsp_msg = &_sl_btmesh_rsp_msg; +uint8_t _sl_btmesh_queue_buffer[SL_BTMESH_API_QUEUE_LEN * (SL_BGAPI_MSG_HEADER_LEN + SL_BGAPI_MAX_PAYLOAD_SIZE)]; + +bgapi_device_type_queue_t sl_btmesh_api_queue = { + sl_bgapi_dev_type_btmesh, + 0, + 0, + (sl_bt_msg_t *)_sl_btmesh_queue_buffer, + SL_BTMESH_API_QUEUE_LEN +}; + +bool sl_btmesh_event_pending(void) +{ + if (sli_bgapi_device_queue_has_events(&sl_btmesh_api_queue)) {//event is waiting in queue + return true; + } + + //something in uart waiting to be read + if (sl_bt_api_peek && sl_bt_api_peek()) { + return true; + } + + return false; +} + +sl_status_t sl_btmesh_wait_event(sl_btmesh_msg_t* event) +{ + return sli_bgapi_get_event(1, (sl_bt_msg_t*)event, &sl_btmesh_api_queue); +} + +sl_status_t sl_btmesh_pop_event(sl_btmesh_msg_t* event) +{ + return sli_bgapi_get_event(0, (sl_bt_msg_t*)event, &sl_btmesh_api_queue); +} + +/** + * This function will block until a response is found from the data pipe. + * Any events that arrive before the response will be put into their corresponding + * event queues. + */ +sl_btmesh_msg_t* sl_btmesh_wait_response(void) +{ + sl_btmesh_msg_t* p; + while (1) { + p = (sl_btmesh_msg_t*)sli_wait_for_bgapi_message((sl_bt_msg_t*)sl_btmesh_rsp_msg); + if (p) { + return p; + } + } +} + +void sl_btmesh_host_handle_command() +{ + //packet in sl_btmesh_cmd_msg is waiting for output + sl_bt_api_output(SL_BGAPI_MSG_HEADER_LEN + SL_BGAPI_MSG_LEN(sl_btmesh_cmd_msg->header), (uint8_t*)sl_btmesh_cmd_msg); + sl_btmesh_wait_response(); +} + +void sl_btmesh_host_handle_command_noresponse() +{ + //packet in sl_btmesh_cmd_msg is waiting for output + sl_bt_api_output(SL_BGAPI_MSG_HEADER_LEN + SL_BGAPI_MSG_LEN(sl_btmesh_cmd_msg->header), (uint8_t*)sl_btmesh_cmd_msg); +} diff --git a/protocol/bluetooth/src/sl_btmesh_ncp_host_api.c b/protocol/bluetooth/src/sl_btmesh_ncp_host_api.c new file mode 100644 index 00000000000..f55b3702729 --- /dev/null +++ b/protocol/bluetooth/src/sl_btmesh_ncp_host_api.c @@ -0,0 +1,10593 @@ +/***************************************************************************//** + * @brief SL_BT_API commands for NCP host + ******************************************************************************* + * # License + * Copyright 2022 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ + +#include "sl_btmesh_api.h" +#include "sli_btmesh_api.h" + +void sl_btmesh_host_handle_command(); +void sl_btmesh_host_handle_command_noresponse(); +extern sl_btmesh_msg_t *sl_btmesh_cmd_msg; +extern sl_btmesh_msg_t *sl_btmesh_rsp_msg; + +sl_status_t sl_btmesh_node_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_init.result; + +} + +sl_status_t sl_btmesh_node_set_exportable_keys() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_set_exportable_keys_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_exportable_keys.result; + +} + +sl_status_t sl_btmesh_node_start_unprov_beaconing(uint8_t bearer) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_start_unprov_beaconing.bearer=bearer; + + cmd->header=sl_btmesh_cmd_node_start_unprov_beaconing_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_start_unprov_beaconing.result; + +} + +sl_status_t sl_btmesh_node_stop_unprov_beaconing() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_stop_unprov_beaconing_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_stop_unprov_beaconing.result; + +} + +sl_status_t sl_btmesh_node_get_rssi(int8_t *rssi) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_get_rssi_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (rssi) { + *rssi = rsp->data.rsp_node_get_rssi.rssi; + } + return rsp->data.rsp_node_get_rssi.result; + +} + +sl_status_t sl_btmesh_node_send_input_oob_request_response(size_t data_len, + const uint8_t* data) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + if ((1+data_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_node_send_input_oob_request_response.data.len=data_len; + memcpy(cmd->data.cmd_node_send_input_oob_request_response.data.data,data,data_len); + + cmd->header=sl_btmesh_cmd_node_send_input_oob_request_response_id+(((1+data_len)&0xff)<<8)+(((1+data_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_send_input_oob_request_response.result; + +} + +sl_status_t sl_btmesh_node_get_uuid(uuid_128 *uuid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_get_uuid_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (uuid) { + *uuid = rsp->data.rsp_node_get_uuid.uuid; + } + return rsp->data.rsp_node_get_uuid.result; + +} + +sl_status_t sl_btmesh_node_set_provisioning_data(aes_key_128 device_key, + aes_key_128 network_key, + uint16_t netkey_index, + uint32_t iv_index, + uint16_t address, + uint8_t kr_in_progress) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + memcpy(&cmd->data.cmd_node_set_provisioning_data.device_key,&device_key,sizeof(aes_key_128)); + memcpy(&cmd->data.cmd_node_set_provisioning_data.network_key,&network_key,sizeof(aes_key_128)); + cmd->data.cmd_node_set_provisioning_data.netkey_index=netkey_index; + cmd->data.cmd_node_set_provisioning_data.iv_index=iv_index; + cmd->data.cmd_node_set_provisioning_data.address=address; + cmd->data.cmd_node_set_provisioning_data.kr_in_progress=kr_in_progress; + + cmd->header=sl_btmesh_cmd_node_set_provisioning_data_id+(((41)&0xff)<<8)+(((41)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_provisioning_data.result; + +} + +sl_status_t sl_btmesh_node_init_oob(uint8_t public_key, + uint8_t auth_methods, + uint16_t output_actions, + uint8_t output_size, + uint16_t input_actions, + uint8_t input_size, + uint16_t oob_location) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_init_oob.public_key=public_key; + cmd->data.cmd_node_init_oob.auth_methods=auth_methods; + cmd->data.cmd_node_init_oob.output_actions=output_actions; + cmd->data.cmd_node_init_oob.output_size=output_size; + cmd->data.cmd_node_init_oob.input_actions=input_actions; + cmd->data.cmd_node_init_oob.input_size=input_size; + cmd->data.cmd_node_init_oob.oob_location=oob_location; + + cmd->header=sl_btmesh_cmd_node_init_oob_id+(((10)&0xff)<<8)+(((10)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_init_oob.result; + +} + +sl_status_t sl_btmesh_node_set_ivrecovery_mode(uint8_t mode) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_set_ivrecovery_mode.mode=mode; + + cmd->header=sl_btmesh_cmd_node_set_ivrecovery_mode_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_ivrecovery_mode.result; + +} + +sl_status_t sl_btmesh_node_get_ivrecovery_mode(uint8_t *mode) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_get_ivrecovery_mode_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (mode) { + *mode = rsp->data.rsp_node_get_ivrecovery_mode.mode; + } + return rsp->data.rsp_node_get_ivrecovery_mode.result; + +} + +sl_status_t sl_btmesh_node_get_statistics(size_t max_statistics_size, + size_t *statistics_len, + uint8_t *statistics) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_get_statistics_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (statistics_len) { + *statistics_len = rsp->data.rsp_node_get_statistics.statistics.len; + } + if (statistics && (rsp->data.rsp_node_get_statistics.statistics.len <= max_statistics_size)) { + memcpy(statistics,rsp->data.rsp_node_get_statistics.statistics.data,rsp->data.rsp_node_get_statistics.statistics.len); + } + return rsp->data.rsp_node_get_statistics.result; + +} + +sl_status_t sl_btmesh_node_clear_statistics() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_clear_statistics_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_clear_statistics.result; + +} + +sl_status_t sl_btmesh_node_set_net_relay_delay(uint8_t min_ms, uint8_t max_ms) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_set_net_relay_delay.min_ms=min_ms; + cmd->data.cmd_node_set_net_relay_delay.max_ms=max_ms; + + cmd->header=sl_btmesh_cmd_node_set_net_relay_delay_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_net_relay_delay.result; + +} + +sl_status_t sl_btmesh_node_get_net_relay_delay(uint8_t *min_ms, + uint8_t *max_ms) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_get_net_relay_delay_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (min_ms) { + *min_ms = rsp->data.rsp_node_get_net_relay_delay.min_ms; + } + if (max_ms) { + *max_ms = rsp->data.rsp_node_get_net_relay_delay.max_ms; + } + return rsp->data.rsp_node_get_net_relay_delay.result; + +} + +sl_status_t sl_btmesh_node_get_ivupdate_state(uint32_t *iv_index, + uint8_t *state) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_get_ivupdate_state_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (iv_index) { + *iv_index = rsp->data.rsp_node_get_ivupdate_state.iv_index; + } + if (state) { + *state = rsp->data.rsp_node_get_ivupdate_state.state; + } + return rsp->data.rsp_node_get_ivupdate_state.result; + +} + +sl_status_t sl_btmesh_node_request_ivupdate() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_request_ivupdate_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_request_ivupdate.result; + +} + +sl_status_t sl_btmesh_node_get_seq_remaining(uint16_t elem_index, + uint32_t *count) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_get_seq_remaining.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_node_get_seq_remaining_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (count) { + *count = rsp->data.rsp_node_get_seq_remaining.count; + } + return rsp->data.rsp_node_get_seq_remaining.result; + +} + +sl_status_t sl_btmesh_node_save_replay_protection_list() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_save_replay_protection_list_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_save_replay_protection_list.result; + +} + +sl_status_t sl_btmesh_node_set_uuid(uuid_128 uuid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_set_uuid.uuid=uuid; + + cmd->header=sl_btmesh_cmd_node_set_uuid_id+(((16)&0xff)<<8)+(((16)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_uuid.result; + +} + +sl_status_t sl_btmesh_node_get_replay_protection_list_status(uint16_t *total_entries, + uint16_t *unsaved_entries) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_get_replay_protection_list_status_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (total_entries) { + *total_entries = rsp->data.rsp_node_get_replay_protection_list_status.total_entries; + } + if (unsaved_entries) { + *unsaved_entries = rsp->data.rsp_node_get_replay_protection_list_status.unsaved_entries; + } + return rsp->data.rsp_node_get_replay_protection_list_status.result; + +} + +sl_status_t sl_btmesh_node_get_element_address(uint16_t elem_index, + uint16_t *address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_get_element_address.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_node_get_element_address_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (address) { + *address = rsp->data.rsp_node_get_element_address.address; + } + return rsp->data.rsp_node_get_element_address.result; + +} + +sl_status_t sl_btmesh_node_send_static_oob_request_response(size_t data_len, + const uint8_t* data) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + if ((1+data_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_node_send_static_oob_request_response.data.len=data_len; + memcpy(cmd->data.cmd_node_send_static_oob_request_response.data.data,data,data_len); + + cmd->header=sl_btmesh_cmd_node_send_static_oob_request_response_id+(((1+data_len)&0xff)<<8)+(((1+data_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_send_static_oob_request_response.result; + +} + +sl_status_t sl_btmesh_node_reset() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_reset_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_reset.result; + +} + +sl_status_t sl_btmesh_node_set_beacon_reporting(uint8_t report) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_set_beacon_reporting.report=report; + + cmd->header=sl_btmesh_cmd_node_set_beacon_reporting_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_beacon_reporting.result; + +} + +sl_status_t sl_btmesh_node_set_iv_update_age(uint32_t age_sec) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_set_iv_update_age.age_sec=age_sec; + + cmd->header=sl_btmesh_cmd_node_set_iv_update_age_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_iv_update_age.result; + +} + +sl_status_t sl_btmesh_node_get_key_count(uint8_t type, uint32_t *count) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_get_key_count.type=type; + + cmd->header=sl_btmesh_cmd_node_get_key_count_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (count) { + *count = rsp->data.rsp_node_get_key_count.count; + } + return rsp->data.rsp_node_get_key_count.result; + +} + +sl_status_t sl_btmesh_node_get_key(uint8_t type, + uint32_t index, + uint8_t current, + uint16_t *id, + uint16_t *netkey_index, + aes_key_128 *key) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_get_key.type=type; + cmd->data.cmd_node_get_key.index=index; + cmd->data.cmd_node_get_key.current=current; + + cmd->header=sl_btmesh_cmd_node_get_key_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (id) { + *id = rsp->data.rsp_node_get_key.id; + } + if (netkey_index) { + *netkey_index = rsp->data.rsp_node_get_key.netkey_index; + } + if (key) { + memcpy(key,&rsp->data.rsp_node_get_key.key,sizeof(aes_key_128)); + } + return rsp->data.rsp_node_get_key.result; + +} + +sl_status_t sl_btmesh_node_get_networks(size_t max_networks_size, + size_t *networks_len, + uint8_t *networks) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_get_networks_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (networks_len) { + *networks_len = rsp->data.rsp_node_get_networks.networks.len; + } + if (networks && (rsp->data.rsp_node_get_networks.networks.len <= max_networks_size)) { + memcpy(networks,rsp->data.rsp_node_get_networks.networks.data,rsp->data.rsp_node_get_networks.networks.len); + } + return rsp->data.rsp_node_get_networks.result; + +} + +sl_status_t sl_btmesh_node_get_element_seqnum(uint16_t elem_index, + uint32_t *seqnum) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_get_element_seqnum.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_node_get_element_seqnum_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (seqnum) { + *seqnum = rsp->data.rsp_node_get_element_seqnum.seqnum; + } + return rsp->data.rsp_node_get_element_seqnum.result; + +} + +sl_status_t sl_btmesh_node_set_model_option(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t option, + uint32_t value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_set_model_option.elem_index=elem_index; + cmd->data.cmd_node_set_model_option.vendor_id=vendor_id; + cmd->data.cmd_node_set_model_option.model_id=model_id; + cmd->data.cmd_node_set_model_option.option=option; + cmd->data.cmd_node_set_model_option.value=value; + + cmd->header=sl_btmesh_cmd_node_set_model_option_id+(((11)&0xff)<<8)+(((11)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_model_option.result; + +} + +sl_status_t sl_btmesh_node_get_local_dcd(uint8_t page) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_get_local_dcd.page=page; + + cmd->header=sl_btmesh_cmd_node_get_local_dcd_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_get_local_dcd.result; + +} + +sl_status_t sl_btmesh_node_power_off() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_power_off_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_power_off.result; + +} + +sl_status_t sl_btmesh_node_set_adv_phy(uint8_t phy) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_set_adv_phy.phy=phy; + + cmd->header=sl_btmesh_cmd_node_set_adv_phy_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_adv_phy.result; + +} + +sl_status_t sl_btmesh_node_get_adv_phy(uint8_t *phy) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_get_adv_phy_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (phy) { + *phy = rsp->data.rsp_node_get_adv_phy.phy; + } + return rsp->data.rsp_node_get_adv_phy.result; + +} + +sl_status_t sl_btmesh_node_set_provisioning_algorithms(uint16_t algorithms) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_set_provisioning_algorithms.algorithms=algorithms; + + cmd->header=sl_btmesh_cmd_node_set_provisioning_algorithms_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_provisioning_algorithms.result; + +} + +sl_status_t sl_btmesh_node_init_provisioning_records() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_init_provisioning_records_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_init_provisioning_records.result; + +} + +sl_status_t sl_btmesh_node_set_unprov_beaconing_adv_interval(uint16_t adv_interval_min, + uint16_t adv_interval_max) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_set_unprov_beaconing_adv_interval.adv_interval_min=adv_interval_min; + cmd->data.cmd_node_set_unprov_beaconing_adv_interval.adv_interval_max=adv_interval_max; + + cmd->header=sl_btmesh_cmd_node_set_unprov_beaconing_adv_interval_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_unprov_beaconing_adv_interval.result; + +} + +sl_status_t sl_btmesh_node_set_proxy_service_adv_interval(uint16_t adv_interval_min, + uint16_t adv_interval_max) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_set_proxy_service_adv_interval.adv_interval_min=adv_interval_min; + cmd->data.cmd_node_set_proxy_service_adv_interval.adv_interval_max=adv_interval_max; + + cmd->header=sl_btmesh_cmd_node_set_proxy_service_adv_interval_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_proxy_service_adv_interval.result; + +} + +sl_status_t sl_btmesh_node_set_provisioning_service_adv_interval(uint16_t adv_interval_min, + uint16_t adv_interval_max) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_set_provisioning_service_adv_interval.adv_interval_min=adv_interval_min; + cmd->data.cmd_node_set_provisioning_service_adv_interval.adv_interval_max=adv_interval_max; + + cmd->header=sl_btmesh_cmd_node_set_provisioning_service_adv_interval_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_provisioning_service_adv_interval.result; + +} + +sl_status_t sl_btmesh_node_get_local_model_metadata_page(uint8_t page) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_node_get_local_model_metadata_page.page=page; + + cmd->header=sl_btmesh_cmd_node_get_local_model_metadata_page_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_get_local_model_metadata_page.result; + +} + +sl_status_t sl_btmesh_node_save_proxy_solicitation_rpl() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_save_proxy_solicitation_rpl_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_save_proxy_solicitation_rpl.result; + +} + +sl_status_t sl_btmesh_node_get_proxy_solicitation_rpl_status(uint16_t *total_entries, + uint16_t *unsaved_entries) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_get_proxy_solicitation_rpl_status_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (total_entries) { + *total_entries = rsp->data.rsp_node_get_proxy_solicitation_rpl_status.total_entries; + } + if (unsaved_entries) { + *unsaved_entries = rsp->data.rsp_node_get_proxy_solicitation_rpl_status.unsaved_entries; + } + return rsp->data.rsp_node_get_proxy_solicitation_rpl_status.result; + +} + +sl_status_t sl_btmesh_node_set_oob_uri(size_t uri_len, const uint8_t* uri) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + if ((1+uri_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_node_set_oob_uri.uri.len=uri_len; + memcpy(cmd->data.cmd_node_set_oob_uri.uri.data,uri,uri_len); + + cmd->header=sl_btmesh_cmd_node_set_oob_uri_id+(((1+uri_len)&0xff)<<8)+(((1+uri_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_node_set_oob_uri.result; + +} + +sl_status_t sl_btmesh_node_get_oob_uri(size_t max_uri_size, + size_t *uri_len, + uint8_t *uri) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_node_get_oob_uri_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (uri_len) { + *uri_len = rsp->data.rsp_node_get_oob_uri.uri.len; + } + if (uri && (rsp->data.rsp_node_get_oob_uri.uri.len <= max_uri_size)) { + memcpy(uri,rsp->data.rsp_node_get_oob_uri.uri.data,rsp->data.rsp_node_get_oob_uri.uri.len); + } + return rsp->data.rsp_node_get_oob_uri.result; + +} + +sl_status_t sl_btmesh_prov_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_prov_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_init.result; + +} + +sl_status_t sl_btmesh_prov_scan_unprov_beacons() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_prov_scan_unprov_beacons_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_scan_unprov_beacons.result; + +} + +sl_status_t sl_btmesh_prov_create_provisioning_session(uint16_t netkey_index, + uuid_128 uuid, + uint8_t attention_timer_sec) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_create_provisioning_session.netkey_index=netkey_index; + cmd->data.cmd_prov_create_provisioning_session.uuid=uuid; + cmd->data.cmd_prov_create_provisioning_session.attention_timer_sec=attention_timer_sec; + + cmd->header=sl_btmesh_cmd_prov_create_provisioning_session_id+(((19)&0xff)<<8)+(((19)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_create_provisioning_session.result; + +} + +sl_status_t sl_btmesh_prov_set_provisioning_suspend_event(uint8_t status) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_set_provisioning_suspend_event.status=status; + + cmd->header=sl_btmesh_cmd_prov_set_provisioning_suspend_event_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_set_provisioning_suspend_event.result; + +} + +sl_status_t sl_btmesh_prov_provision_adv_device(uuid_128 uuid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_provision_adv_device.uuid=uuid; + + cmd->header=sl_btmesh_cmd_prov_provision_adv_device_id+(((16)&0xff)<<8)+(((16)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_provision_adv_device.result; + +} + +sl_status_t sl_btmesh_prov_provision_gatt_device(uuid_128 uuid, + uint8_t connection) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_provision_gatt_device.uuid=uuid; + cmd->data.cmd_prov_provision_gatt_device.connection=connection; + + cmd->header=sl_btmesh_cmd_prov_provision_gatt_device_id+(((17)&0xff)<<8)+(((17)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_provision_gatt_device.result; + +} + +sl_status_t sl_btmesh_prov_provision_remote_device(uuid_128 uuid, + uint16_t server) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_provision_remote_device.uuid=uuid; + cmd->data.cmd_prov_provision_remote_device.server=server; + + cmd->header=sl_btmesh_cmd_prov_provision_remote_device_id+(((18)&0xff)<<8)+(((18)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_provision_remote_device.result; + +} + +sl_status_t sl_btmesh_prov_continue_provisioning(uuid_128 uuid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_continue_provisioning.uuid=uuid; + + cmd->header=sl_btmesh_cmd_prov_continue_provisioning_id+(((16)&0xff)<<8)+(((16)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_continue_provisioning.result; + +} + +sl_status_t sl_btmesh_prov_abort_provisioning(uuid_128 uuid, uint8_t reason) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_abort_provisioning.uuid=uuid; + cmd->data.cmd_prov_abort_provisioning.reason=reason; + + cmd->header=sl_btmesh_cmd_prov_abort_provisioning_id+(((17)&0xff)<<8)+(((17)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_abort_provisioning.result; + +} + +sl_status_t sl_btmesh_prov_set_device_address(uuid_128 uuid, uint16_t address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_set_device_address.uuid=uuid; + cmd->data.cmd_prov_set_device_address.address=address; + + cmd->header=sl_btmesh_cmd_prov_set_device_address_id+(((18)&0xff)<<8)+(((18)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_set_device_address.result; + +} + +sl_status_t sl_btmesh_prov_create_network(uint16_t netkey_index, + size_t key_len, + const uint8_t* key) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_create_network.netkey_index=netkey_index; + if ((3+key_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_prov_create_network.key.len=key_len; + memcpy(cmd->data.cmd_prov_create_network.key.data,key,key_len); + + cmd->header=sl_btmesh_cmd_prov_create_network_id+(((3+key_len)&0xff)<<8)+(((3+key_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_create_network.result; + +} + +sl_status_t sl_btmesh_prov_create_appkey(uint16_t netkey_index, + uint16_t appkey_index, + size_t key_len, + const uint8_t* key, + size_t max_application_key_size, + size_t *application_key_len, + uint8_t *application_key) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_create_appkey.netkey_index=netkey_index; + cmd->data.cmd_prov_create_appkey.appkey_index=appkey_index; + if ((5+key_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_prov_create_appkey.key.len=key_len; + memcpy(cmd->data.cmd_prov_create_appkey.key.data,key,key_len); + + cmd->header=sl_btmesh_cmd_prov_create_appkey_id+(((5+key_len)&0xff)<<8)+(((5+key_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (application_key_len) { + *application_key_len = rsp->data.rsp_prov_create_appkey.application_key.len; + } + if (application_key && (rsp->data.rsp_prov_create_appkey.application_key.len <= max_application_key_size)) { + memcpy(application_key,rsp->data.rsp_prov_create_appkey.application_key.data,rsp->data.rsp_prov_create_appkey.application_key.len); + } + return rsp->data.rsp_prov_create_appkey.result; + +} + +sl_status_t sl_btmesh_prov_send_oob_pkey_response(uuid_128 uuid, + size_t pkey_len, + const uint8_t* pkey) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_send_oob_pkey_response.uuid=uuid; + if ((17+pkey_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_prov_send_oob_pkey_response.pkey.len=pkey_len; + memcpy(cmd->data.cmd_prov_send_oob_pkey_response.pkey.data,pkey,pkey_len); + + cmd->header=sl_btmesh_cmd_prov_send_oob_pkey_response_id+(((17+pkey_len)&0xff)<<8)+(((17+pkey_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_send_oob_pkey_response.result; + +} + +sl_status_t sl_btmesh_prov_send_oob_auth_response(uuid_128 uuid, + size_t data_len, + const uint8_t* data) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_send_oob_auth_response.uuid=uuid; + if ((17+data_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_prov_send_oob_auth_response.data.len=data_len; + memcpy(cmd->data.cmd_prov_send_oob_auth_response.data.data,data,data_len); + + cmd->header=sl_btmesh_cmd_prov_send_oob_auth_response_id+(((17+data_len)&0xff)<<8)+(((17+data_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_send_oob_auth_response.result; + +} + +sl_status_t sl_btmesh_prov_set_oob_requirements(uuid_128 uuid, + uint8_t public_key, + uint8_t auth_methods, + uint16_t output_actions, + uint16_t input_actions, + uint8_t min_size, + uint8_t max_size) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_set_oob_requirements.uuid=uuid; + cmd->data.cmd_prov_set_oob_requirements.public_key=public_key; + cmd->data.cmd_prov_set_oob_requirements.auth_methods=auth_methods; + cmd->data.cmd_prov_set_oob_requirements.output_actions=output_actions; + cmd->data.cmd_prov_set_oob_requirements.input_actions=input_actions; + cmd->data.cmd_prov_set_oob_requirements.min_size=min_size; + cmd->data.cmd_prov_set_oob_requirements.max_size=max_size; + + cmd->header=sl_btmesh_cmd_prov_set_oob_requirements_id+(((24)&0xff)<<8)+(((24)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_set_oob_requirements.result; + +} + +sl_status_t sl_btmesh_prov_start_key_refresh(uint16_t netkey_index, + uint8_t num_appkeys, + size_t appkey_indices_len, + const uint8_t* appkey_indices) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_start_key_refresh.netkey_index=netkey_index; + cmd->data.cmd_prov_start_key_refresh.num_appkeys=num_appkeys; + if ((4+appkey_indices_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_prov_start_key_refresh.appkey_indices.len=appkey_indices_len; + memcpy(cmd->data.cmd_prov_start_key_refresh.appkey_indices.data,appkey_indices,appkey_indices_len); + + cmd->header=sl_btmesh_cmd_prov_start_key_refresh_id+(((4+appkey_indices_len)&0xff)<<8)+(((4+appkey_indices_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_start_key_refresh.result; + +} + +sl_status_t sl_btmesh_prov_get_key_refresh_exclusion(uint16_t key, + uuid_128 uuid, + uint8_t *status) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_get_key_refresh_exclusion.key=key; + cmd->data.cmd_prov_get_key_refresh_exclusion.uuid=uuid; + + cmd->header=sl_btmesh_cmd_prov_get_key_refresh_exclusion_id+(((18)&0xff)<<8)+(((18)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (status) { + *status = rsp->data.rsp_prov_get_key_refresh_exclusion.status; + } + return rsp->data.rsp_prov_get_key_refresh_exclusion.result; + +} + +sl_status_t sl_btmesh_prov_set_key_refresh_exclusion(uint16_t key, + uint8_t status, + uuid_128 uuid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_set_key_refresh_exclusion.key=key; + cmd->data.cmd_prov_set_key_refresh_exclusion.status=status; + cmd->data.cmd_prov_set_key_refresh_exclusion.uuid=uuid; + + cmd->header=sl_btmesh_cmd_prov_set_key_refresh_exclusion_id+(((19)&0xff)<<8)+(((19)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_set_key_refresh_exclusion.result; + +} + +sl_status_t sl_btmesh_prov_set_key_refresh_failure(uint16_t key, uuid_128 uuid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_set_key_refresh_failure.key=key; + cmd->data.cmd_prov_set_key_refresh_failure.uuid=uuid; + + cmd->header=sl_btmesh_cmd_prov_set_key_refresh_failure_id+(((18)&0xff)<<8)+(((18)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_set_key_refresh_failure.result; + +} + +sl_status_t sl_btmesh_prov_phase_timeout_get(uint32_t *phase_timeout_s) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_prov_phase_timeout_get_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (phase_timeout_s) { + *phase_timeout_s = rsp->data.rsp_prov_phase_timeout_get.phase_timeout_s; + } + return rsp->data.rsp_prov_phase_timeout_get.result; + +} + +sl_status_t sl_btmesh_prov_phase_timeout_set(uint32_t phase_timeout_s) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_phase_timeout_set.phase_timeout_s=phase_timeout_s; + + cmd->header=sl_btmesh_cmd_prov_phase_timeout_set_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_phase_timeout_set.result; + +} + +sl_status_t sl_btmesh_prov_get_ddb_entry(uuid_128 uuid, + aes_key_128 *device_key, + uint16_t *netkey_index, + uint16_t *address, + uint8_t *elements) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_get_ddb_entry.uuid=uuid; + + cmd->header=sl_btmesh_cmd_prov_get_ddb_entry_id+(((16)&0xff)<<8)+(((16)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (device_key) { + memcpy(device_key,&rsp->data.rsp_prov_get_ddb_entry.device_key,sizeof(aes_key_128)); + } + if (netkey_index) { + *netkey_index = rsp->data.rsp_prov_get_ddb_entry.netkey_index; + } + if (address) { + *address = rsp->data.rsp_prov_get_ddb_entry.address; + } + if (elements) { + *elements = rsp->data.rsp_prov_get_ddb_entry.elements; + } + return rsp->data.rsp_prov_get_ddb_entry.result; + +} + +sl_status_t sl_btmesh_prov_delete_ddb_entry(uuid_128 uuid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_delete_ddb_entry.uuid=uuid; + + cmd->header=sl_btmesh_cmd_prov_delete_ddb_entry_id+(((16)&0xff)<<8)+(((16)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_delete_ddb_entry.result; + +} + +sl_status_t sl_btmesh_prov_add_ddb_entry(uuid_128 uuid, + aes_key_128 device_key, + uint16_t netkey_index, + uint16_t address, + uint8_t elements) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_add_ddb_entry.uuid=uuid; + memcpy(&cmd->data.cmd_prov_add_ddb_entry.device_key,&device_key,sizeof(aes_key_128)); + cmd->data.cmd_prov_add_ddb_entry.netkey_index=netkey_index; + cmd->data.cmd_prov_add_ddb_entry.address=address; + cmd->data.cmd_prov_add_ddb_entry.elements=elements; + + cmd->header=sl_btmesh_cmd_prov_add_ddb_entry_id+(((37)&0xff)<<8)+(((37)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_add_ddb_entry.result; + +} + +sl_status_t sl_btmesh_prov_list_ddb_entries(uint16_t *count) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_prov_list_ddb_entries_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (count) { + *count = rsp->data.rsp_prov_list_ddb_entries.count; + } + return rsp->data.rsp_prov_list_ddb_entries.result; + +} + +sl_status_t sl_btmesh_prov_initialize_network(uint16_t address, uint32_t ivi) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_initialize_network.address=address; + cmd->data.cmd_prov_initialize_network.ivi=ivi; + + cmd->header=sl_btmesh_cmd_prov_initialize_network_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_initialize_network.result; + +} + +sl_status_t sl_btmesh_prov_get_key_refresh_appkey_exclusion(uint16_t netkey_index, + uint16_t appkey_index, + uuid_128 uuid, + uint8_t *status) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_get_key_refresh_appkey_exclusion.netkey_index=netkey_index; + cmd->data.cmd_prov_get_key_refresh_appkey_exclusion.appkey_index=appkey_index; + cmd->data.cmd_prov_get_key_refresh_appkey_exclusion.uuid=uuid; + + cmd->header=sl_btmesh_cmd_prov_get_key_refresh_appkey_exclusion_id+(((20)&0xff)<<8)+(((20)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (status) { + *status = rsp->data.rsp_prov_get_key_refresh_appkey_exclusion.status; + } + return rsp->data.rsp_prov_get_key_refresh_appkey_exclusion.result; + +} + +sl_status_t sl_btmesh_prov_set_key_refresh_appkey_exclusion(uint16_t netkey_index, + uint16_t appkey_index, + uint8_t status, + uuid_128 uuid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_set_key_refresh_appkey_exclusion.netkey_index=netkey_index; + cmd->data.cmd_prov_set_key_refresh_appkey_exclusion.appkey_index=appkey_index; + cmd->data.cmd_prov_set_key_refresh_appkey_exclusion.status=status; + cmd->data.cmd_prov_set_key_refresh_appkey_exclusion.uuid=uuid; + + cmd->header=sl_btmesh_cmd_prov_set_key_refresh_appkey_exclusion_id+(((21)&0xff)<<8)+(((21)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_set_key_refresh_appkey_exclusion.result; + +} + +sl_status_t sl_btmesh_prov_stop_scan_unprov_beacons() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_prov_stop_scan_unprov_beacons_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_stop_scan_unprov_beacons.result; + +} + +sl_status_t sl_btmesh_prov_update_device_netkey_index(uuid_128 uuid, + uint16_t netkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_update_device_netkey_index.uuid=uuid; + cmd->data.cmd_prov_update_device_netkey_index.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_prov_update_device_netkey_index_id+(((18)&0xff)<<8)+(((18)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_update_device_netkey_index.result; + +} + +sl_status_t sl_btmesh_prov_suspend_key_refresh(uint16_t netkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_suspend_key_refresh.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_prov_suspend_key_refresh_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_suspend_key_refresh.result; + +} + +sl_status_t sl_btmesh_prov_resume_key_refresh(uint16_t netkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_resume_key_refresh.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_prov_resume_key_refresh_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_resume_key_refresh.result; + +} + +sl_status_t sl_btmesh_prov_get_key_refresh_phase(uint16_t netkey_index, + uint8_t *phase) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_get_key_refresh_phase.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_prov_get_key_refresh_phase_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (phase) { + *phase = rsp->data.rsp_prov_get_key_refresh_phase.phase; + } + return rsp->data.rsp_prov_get_key_refresh_phase.result; + +} + +sl_status_t sl_btmesh_prov_start_key_refresh_from_phase(uint8_t phase, + uint16_t netkey_index, + uint8_t num_appkeys, + size_t appkey_indices_len, + const uint8_t* appkey_indices) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_start_key_refresh_from_phase.phase=phase; + cmd->data.cmd_prov_start_key_refresh_from_phase.netkey_index=netkey_index; + cmd->data.cmd_prov_start_key_refresh_from_phase.num_appkeys=num_appkeys; + if ((5+appkey_indices_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_prov_start_key_refresh_from_phase.appkey_indices.len=appkey_indices_len; + memcpy(cmd->data.cmd_prov_start_key_refresh_from_phase.appkey_indices.data,appkey_indices,appkey_indices_len); + + cmd->header=sl_btmesh_cmd_prov_start_key_refresh_from_phase_id+(((5+appkey_indices_len)&0xff)<<8)+(((5+appkey_indices_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_start_key_refresh_from_phase.result; + +} + +sl_status_t sl_btmesh_prov_flush_key_refresh_state(uint16_t netkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_flush_key_refresh_state.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_prov_flush_key_refresh_state_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_flush_key_refresh_state.result; + +} + +sl_status_t sl_btmesh_prov_test_identity(uint16_t address, + uint16_t netkey_index, + size_t data_len, + const uint8_t* data, + uint8_t *match) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_test_identity.address=address; + cmd->data.cmd_prov_test_identity.netkey_index=netkey_index; + if ((5+data_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_prov_test_identity.data.len=data_len; + memcpy(cmd->data.cmd_prov_test_identity.data.data,data,data_len); + + cmd->header=sl_btmesh_cmd_prov_test_identity_id+(((5+data_len)&0xff)<<8)+(((5+data_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (match) { + *match = rsp->data.rsp_prov_test_identity.match; + } + return rsp->data.rsp_prov_test_identity.result; + +} + +sl_status_t sl_btmesh_prov_get_provisioning_records_list(uuid_128 uuid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_get_provisioning_records_list.uuid=uuid; + + cmd->header=sl_btmesh_cmd_prov_get_provisioning_records_list_id+(((16)&0xff)<<8)+(((16)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_get_provisioning_records_list.result; + +} + +sl_status_t sl_btmesh_prov_get_provisioning_record_data(uuid_128 uuid, + uint16_t record) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_prov_get_provisioning_record_data.uuid=uuid; + cmd->data.cmd_prov_get_provisioning_record_data.record=record; + + cmd->header=sl_btmesh_cmd_prov_get_provisioning_record_data_id+(((18)&0xff)<<8)+(((18)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_get_provisioning_record_data.result; + +} + +sl_status_t sl_btmesh_prov_init_provisioning_records() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_prov_init_provisioning_records_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_prov_init_provisioning_records.result; + +} + +sl_status_t sl_btmesh_proxy_connect(uint8_t connection, uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_proxy_connect.connection=connection; + + cmd->header=sl_btmesh_cmd_proxy_connect_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_proxy_connect.handle; + } + return rsp->data.rsp_proxy_connect.result; + +} + +sl_status_t sl_btmesh_proxy_disconnect(uint32_t handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_proxy_disconnect.handle=handle; + + cmd->header=sl_btmesh_cmd_proxy_disconnect_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_proxy_disconnect.result; + +} + +sl_status_t sl_btmesh_proxy_set_filter_type(uint32_t handle, + uint16_t netkey_index, + uint8_t type) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_proxy_set_filter_type.handle=handle; + cmd->data.cmd_proxy_set_filter_type.netkey_index=netkey_index; + cmd->data.cmd_proxy_set_filter_type.type=type; + + cmd->header=sl_btmesh_cmd_proxy_set_filter_type_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_proxy_set_filter_type.result; + +} + +sl_status_t sl_btmesh_proxy_allow(uint32_t handle, + uint16_t netkey_index, + uint16_t address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_proxy_allow.handle=handle; + cmd->data.cmd_proxy_allow.netkey_index=netkey_index; + cmd->data.cmd_proxy_allow.address=address; + + cmd->header=sl_btmesh_cmd_proxy_allow_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_proxy_allow.result; + +} + +sl_status_t sl_btmesh_proxy_deny(uint32_t handle, + uint16_t netkey_index, + uint16_t address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_proxy_deny.handle=handle; + cmd->data.cmd_proxy_deny.netkey_index=netkey_index; + cmd->data.cmd_proxy_deny.address=address; + + cmd->header=sl_btmesh_cmd_proxy_deny_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_proxy_deny.result; + +} + +sl_status_t sl_btmesh_proxy_optimisation_toggle(uint8_t enable) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_proxy_optimisation_toggle.enable=enable; + + cmd->header=sl_btmesh_cmd_proxy_optimisation_toggle_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_proxy_optimisation_toggle.result; + +} + +sl_status_t sl_btmesh_proxy_send_solicitation(uint8_t enc_netkey_index, + uint16_t elem_index, + uint16_t dst) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_proxy_send_solicitation.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_proxy_send_solicitation.elem_index=elem_index; + cmd->data.cmd_proxy_send_solicitation.dst=dst; + + cmd->header=sl_btmesh_cmd_proxy_send_solicitation_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_proxy_send_solicitation.result; + +} + +sl_status_t sl_btmesh_silabs_config_client_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_silabs_config_client_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_client_init.result; + +} + +sl_status_t sl_btmesh_silabs_config_client_set_tx(uint16_t server_address, + uint16_t appkey_index, + uint8_t tx_phy, + uint32_t tx_options_bitmap) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_silabs_config_client_set_tx.server_address=server_address; + cmd->data.cmd_silabs_config_client_set_tx.appkey_index=appkey_index; + cmd->data.cmd_silabs_config_client_set_tx.tx_phy=tx_phy; + cmd->data.cmd_silabs_config_client_set_tx.tx_options_bitmap=tx_options_bitmap; + + cmd->header=sl_btmesh_cmd_silabs_config_client_set_tx_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_client_set_tx.result; + +} + +sl_status_t sl_btmesh_silabs_config_client_get_tx(uint16_t server_address, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_silabs_config_client_get_tx.server_address=server_address; + cmd->data.cmd_silabs_config_client_get_tx.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_silabs_config_client_get_tx_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_client_get_tx.result; + +} + +sl_status_t sl_btmesh_silabs_config_client_set_model_enable(uint16_t server_address, + uint16_t appkey_index, + uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t enable) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_silabs_config_client_set_model_enable.server_address=server_address; + cmd->data.cmd_silabs_config_client_set_model_enable.appkey_index=appkey_index; + cmd->data.cmd_silabs_config_client_set_model_enable.elem_index=elem_index; + cmd->data.cmd_silabs_config_client_set_model_enable.vendor_id=vendor_id; + cmd->data.cmd_silabs_config_client_set_model_enable.model_id=model_id; + cmd->data.cmd_silabs_config_client_set_model_enable.enable=enable; + + cmd->header=sl_btmesh_cmd_silabs_config_client_set_model_enable_id+(((11)&0xff)<<8)+(((11)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_client_set_model_enable.result; + +} + +sl_status_t sl_btmesh_silabs_config_client_get_model_enable(uint16_t server_address, + uint16_t appkey_index, + uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_silabs_config_client_get_model_enable.server_address=server_address; + cmd->data.cmd_silabs_config_client_get_model_enable.appkey_index=appkey_index; + cmd->data.cmd_silabs_config_client_get_model_enable.elem_index=elem_index; + cmd->data.cmd_silabs_config_client_get_model_enable.vendor_id=vendor_id; + cmd->data.cmd_silabs_config_client_get_model_enable.model_id=model_id; + + cmd->header=sl_btmesh_cmd_silabs_config_client_get_model_enable_id+(((10)&0xff)<<8)+(((10)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_client_get_model_enable.result; + +} + +sl_status_t sl_btmesh_silabs_config_client_set_network_pdu(uint16_t server_address, + uint16_t appkey_index, + uint16_t pdu_max_size) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_silabs_config_client_set_network_pdu.server_address=server_address; + cmd->data.cmd_silabs_config_client_set_network_pdu.appkey_index=appkey_index; + cmd->data.cmd_silabs_config_client_set_network_pdu.pdu_max_size=pdu_max_size; + + cmd->header=sl_btmesh_cmd_silabs_config_client_set_network_pdu_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_client_set_network_pdu.result; + +} + +sl_status_t sl_btmesh_silabs_config_client_get_network_pdu(uint16_t server_address, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_silabs_config_client_get_network_pdu.server_address=server_address; + cmd->data.cmd_silabs_config_client_get_network_pdu.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_silabs_config_client_get_network_pdu_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_client_get_network_pdu.result; + +} + +sl_status_t sl_btmesh_silabs_config_client_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_silabs_config_client_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_client_deinit.result; + +} + +sl_status_t sl_btmesh_vendor_model_send(uint16_t destination_address, + int8_t va_index, + uint16_t appkey_index, + uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t nonrelayed, + uint8_t opcode, + uint8_t final, + size_t payload_len, + const uint8_t* payload) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_vendor_model_send.destination_address=destination_address; + cmd->data.cmd_vendor_model_send.va_index=va_index; + cmd->data.cmd_vendor_model_send.appkey_index=appkey_index; + cmd->data.cmd_vendor_model_send.elem_index=elem_index; + cmd->data.cmd_vendor_model_send.vendor_id=vendor_id; + cmd->data.cmd_vendor_model_send.model_id=model_id; + cmd->data.cmd_vendor_model_send.nonrelayed=nonrelayed; + cmd->data.cmd_vendor_model_send.opcode=opcode; + cmd->data.cmd_vendor_model_send.final=final; + if ((15+payload_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_vendor_model_send.payload.len=payload_len; + memcpy(cmd->data.cmd_vendor_model_send.payload.data,payload,payload_len); + + cmd->header=sl_btmesh_cmd_vendor_model_send_id+(((15+payload_len)&0xff)<<8)+(((15+payload_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_vendor_model_send.result; + +} + +sl_status_t sl_btmesh_vendor_model_set_publication(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t opcode, + uint8_t final, + size_t payload_len, + const uint8_t* payload) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_vendor_model_set_publication.elem_index=elem_index; + cmd->data.cmd_vendor_model_set_publication.vendor_id=vendor_id; + cmd->data.cmd_vendor_model_set_publication.model_id=model_id; + cmd->data.cmd_vendor_model_set_publication.opcode=opcode; + cmd->data.cmd_vendor_model_set_publication.final=final; + if ((9+payload_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_vendor_model_set_publication.payload.len=payload_len; + memcpy(cmd->data.cmd_vendor_model_set_publication.payload.data,payload,payload_len); + + cmd->header=sl_btmesh_cmd_vendor_model_set_publication_id+(((9+payload_len)&0xff)<<8)+(((9+payload_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_vendor_model_set_publication.result; + +} + +sl_status_t sl_btmesh_vendor_model_clear_publication(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_vendor_model_clear_publication.elem_index=elem_index; + cmd->data.cmd_vendor_model_clear_publication.vendor_id=vendor_id; + cmd->data.cmd_vendor_model_clear_publication.model_id=model_id; + + cmd->header=sl_btmesh_cmd_vendor_model_clear_publication_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_vendor_model_clear_publication.result; + +} + +sl_status_t sl_btmesh_vendor_model_publish(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_vendor_model_publish.elem_index=elem_index; + cmd->data.cmd_vendor_model_publish.vendor_id=vendor_id; + cmd->data.cmd_vendor_model_publish.model_id=model_id; + + cmd->header=sl_btmesh_cmd_vendor_model_publish_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_vendor_model_publish.result; + +} + +sl_status_t sl_btmesh_vendor_model_init(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t publish, + size_t opcodes_len, + const uint8_t* opcodes) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_vendor_model_init.elem_index=elem_index; + cmd->data.cmd_vendor_model_init.vendor_id=vendor_id; + cmd->data.cmd_vendor_model_init.model_id=model_id; + cmd->data.cmd_vendor_model_init.publish=publish; + if ((8+opcodes_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_vendor_model_init.opcodes.len=opcodes_len; + memcpy(cmd->data.cmd_vendor_model_init.opcodes.data,opcodes,opcodes_len); + + cmd->header=sl_btmesh_cmd_vendor_model_init_id+(((8+opcodes_len)&0xff)<<8)+(((8+opcodes_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_vendor_model_init.result; + +} + +sl_status_t sl_btmesh_vendor_model_deinit(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_vendor_model_deinit.elem_index=elem_index; + cmd->data.cmd_vendor_model_deinit.vendor_id=vendor_id; + cmd->data.cmd_vendor_model_deinit.model_id=model_id; + + cmd->header=sl_btmesh_cmd_vendor_model_deinit_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_vendor_model_deinit.result; + +} + +sl_status_t sl_btmesh_vendor_model_send_tracked(uint16_t destination_address, + int8_t va_index, + uint16_t appkey_index, + uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t nonrelayed, + uint8_t segment, + uint8_t opcode, + uint8_t final, + size_t payload_len, + const uint8_t* payload, + uint16_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_vendor_model_send_tracked.destination_address=destination_address; + cmd->data.cmd_vendor_model_send_tracked.va_index=va_index; + cmd->data.cmd_vendor_model_send_tracked.appkey_index=appkey_index; + cmd->data.cmd_vendor_model_send_tracked.elem_index=elem_index; + cmd->data.cmd_vendor_model_send_tracked.vendor_id=vendor_id; + cmd->data.cmd_vendor_model_send_tracked.model_id=model_id; + cmd->data.cmd_vendor_model_send_tracked.nonrelayed=nonrelayed; + cmd->data.cmd_vendor_model_send_tracked.segment=segment; + cmd->data.cmd_vendor_model_send_tracked.opcode=opcode; + cmd->data.cmd_vendor_model_send_tracked.final=final; + if ((16+payload_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_vendor_model_send_tracked.payload.len=payload_len; + memcpy(cmd->data.cmd_vendor_model_send_tracked.payload.data,payload,payload_len); + + cmd->header=sl_btmesh_cmd_vendor_model_send_tracked_id+(((16+payload_len)&0xff)<<8)+(((16+payload_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_vendor_model_send_tracked.handle; + } + return rsp->data.rsp_vendor_model_send_tracked.result; + +} + +sl_status_t sl_btmesh_vendor_model_set_publication_tracked(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t segment, + uint8_t opcode, + uint8_t final, + size_t payload_len, + const uint8_t* payload, + uint16_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_vendor_model_set_publication_tracked.elem_index=elem_index; + cmd->data.cmd_vendor_model_set_publication_tracked.vendor_id=vendor_id; + cmd->data.cmd_vendor_model_set_publication_tracked.model_id=model_id; + cmd->data.cmd_vendor_model_set_publication_tracked.segment=segment; + cmd->data.cmd_vendor_model_set_publication_tracked.opcode=opcode; + cmd->data.cmd_vendor_model_set_publication_tracked.final=final; + if ((10+payload_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_vendor_model_set_publication_tracked.payload.len=payload_len; + memcpy(cmd->data.cmd_vendor_model_set_publication_tracked.payload.data,payload,payload_len); + + cmd->header=sl_btmesh_cmd_vendor_model_set_publication_tracked_id+(((10+payload_len)&0xff)<<8)+(((10+payload_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_vendor_model_set_publication_tracked.handle; + } + return rsp->data.rsp_vendor_model_set_publication_tracked.result; + +} + +sl_status_t sl_btmesh_health_client_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_health_client_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_client_init.result; + +} + +sl_status_t sl_btmesh_health_client_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_health_client_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_client_deinit.result; + +} + +sl_status_t sl_btmesh_health_client_get(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_health_client_get.server_address=server_address; + cmd->data.cmd_health_client_get.elem_index=elem_index; + cmd->data.cmd_health_client_get.appkey_index=appkey_index; + cmd->data.cmd_health_client_get.vendor_id=vendor_id; + + cmd->header=sl_btmesh_cmd_health_client_get_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_client_get.result; + +} + +sl_status_t sl_btmesh_health_client_clear(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id, + uint8_t reliable) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_health_client_clear.server_address=server_address; + cmd->data.cmd_health_client_clear.elem_index=elem_index; + cmd->data.cmd_health_client_clear.appkey_index=appkey_index; + cmd->data.cmd_health_client_clear.vendor_id=vendor_id; + cmd->data.cmd_health_client_clear.reliable=reliable; + + cmd->header=sl_btmesh_cmd_health_client_clear_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_client_clear.result; + +} + +sl_status_t sl_btmesh_health_client_test(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t test_id, + uint16_t vendor_id, + uint8_t reliable) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_health_client_test.server_address=server_address; + cmd->data.cmd_health_client_test.elem_index=elem_index; + cmd->data.cmd_health_client_test.appkey_index=appkey_index; + cmd->data.cmd_health_client_test.test_id=test_id; + cmd->data.cmd_health_client_test.vendor_id=vendor_id; + cmd->data.cmd_health_client_test.reliable=reliable; + + cmd->header=sl_btmesh_cmd_health_client_test_id+(((10)&0xff)<<8)+(((10)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_client_test.result; + +} + +sl_status_t sl_btmesh_health_client_get_period(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_health_client_get_period.server_address=server_address; + cmd->data.cmd_health_client_get_period.elem_index=elem_index; + cmd->data.cmd_health_client_get_period.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_health_client_get_period_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_client_get_period.result; + +} + +sl_status_t sl_btmesh_health_client_set_period(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t period, + uint8_t reliable) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_health_client_set_period.server_address=server_address; + cmd->data.cmd_health_client_set_period.elem_index=elem_index; + cmd->data.cmd_health_client_set_period.appkey_index=appkey_index; + cmd->data.cmd_health_client_set_period.period=period; + cmd->data.cmd_health_client_set_period.reliable=reliable; + + cmd->header=sl_btmesh_cmd_health_client_set_period_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_client_set_period.result; + +} + +sl_status_t sl_btmesh_health_client_get_attention(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_health_client_get_attention.server_address=server_address; + cmd->data.cmd_health_client_get_attention.elem_index=elem_index; + cmd->data.cmd_health_client_get_attention.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_health_client_get_attention_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_client_get_attention.result; + +} + +sl_status_t sl_btmesh_health_client_set_attention(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t attention_sec, + uint8_t reliable) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_health_client_set_attention.server_address=server_address; + cmd->data.cmd_health_client_set_attention.elem_index=elem_index; + cmd->data.cmd_health_client_set_attention.appkey_index=appkey_index; + cmd->data.cmd_health_client_set_attention.attention_sec=attention_sec; + cmd->data.cmd_health_client_set_attention.reliable=reliable; + + cmd->header=sl_btmesh_cmd_health_client_set_attention_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_client_set_attention.result; + +} + +sl_status_t sl_btmesh_health_server_set_fault(uint16_t elem_index, uint8_t id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_health_server_set_fault.elem_index=elem_index; + cmd->data.cmd_health_server_set_fault.id=id; + + cmd->header=sl_btmesh_cmd_health_server_set_fault_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_server_set_fault.result; + +} + +sl_status_t sl_btmesh_health_server_clear_fault(uint16_t elem_index, + uint8_t id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_health_server_clear_fault.elem_index=elem_index; + cmd->data.cmd_health_server_clear_fault.id=id; + + cmd->header=sl_btmesh_cmd_health_server_clear_fault_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_server_clear_fault.result; + +} + +sl_status_t sl_btmesh_health_server_send_test_response(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_health_server_send_test_response.client_address=client_address; + cmd->data.cmd_health_server_send_test_response.elem_index=elem_index; + cmd->data.cmd_health_server_send_test_response.appkey_index=appkey_index; + cmd->data.cmd_health_server_send_test_response.vendor_id=vendor_id; + + cmd->header=sl_btmesh_cmd_health_server_send_test_response_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_health_server_send_test_response.result; + +} + +sl_status_t sl_btmesh_generic_client_get(uint16_t server_address, + uint16_t elem_index, + uint16_t model_id, + uint16_t appkey_index, + uint8_t type) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_generic_client_get.server_address=server_address; + cmd->data.cmd_generic_client_get.elem_index=elem_index; + cmd->data.cmd_generic_client_get.model_id=model_id; + cmd->data.cmd_generic_client_get.appkey_index=appkey_index; + cmd->data.cmd_generic_client_get.type=type; + + cmd->header=sl_btmesh_cmd_generic_client_get_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_get.result; + +} + +sl_status_t sl_btmesh_generic_client_set(uint16_t server_address, + uint16_t elem_index, + uint16_t model_id, + uint16_t appkey_index, + uint8_t tid, + uint32_t transition_ms, + uint16_t delay_ms, + uint16_t flags, + uint8_t type, + size_t parameters_len, + const uint8_t* parameters) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_generic_client_set.server_address=server_address; + cmd->data.cmd_generic_client_set.elem_index=elem_index; + cmd->data.cmd_generic_client_set.model_id=model_id; + cmd->data.cmd_generic_client_set.appkey_index=appkey_index; + cmd->data.cmd_generic_client_set.tid=tid; + cmd->data.cmd_generic_client_set.transition_ms=transition_ms; + cmd->data.cmd_generic_client_set.delay_ms=delay_ms; + cmd->data.cmd_generic_client_set.flags=flags; + cmd->data.cmd_generic_client_set.type=type; + if ((19+parameters_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_generic_client_set.parameters.len=parameters_len; + memcpy(cmd->data.cmd_generic_client_set.parameters.data,parameters,parameters_len); + + cmd->header=sl_btmesh_cmd_generic_client_set_id+(((19+parameters_len)&0xff)<<8)+(((19+parameters_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_set.result; + +} + +sl_status_t sl_btmesh_generic_client_publish(uint16_t elem_index, + uint16_t model_id, + uint8_t tid, + uint32_t transition_ms, + uint16_t delay_ms, + uint16_t flags, + uint8_t type, + size_t parameters_len, + const uint8_t* parameters) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_generic_client_publish.elem_index=elem_index; + cmd->data.cmd_generic_client_publish.model_id=model_id; + cmd->data.cmd_generic_client_publish.tid=tid; + cmd->data.cmd_generic_client_publish.transition_ms=transition_ms; + cmd->data.cmd_generic_client_publish.delay_ms=delay_ms; + cmd->data.cmd_generic_client_publish.flags=flags; + cmd->data.cmd_generic_client_publish.type=type; + if ((15+parameters_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_generic_client_publish.parameters.len=parameters_len; + memcpy(cmd->data.cmd_generic_client_publish.parameters.data,parameters,parameters_len); + + cmd->header=sl_btmesh_cmd_generic_client_publish_id+(((15+parameters_len)&0xff)<<8)+(((15+parameters_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_publish.result; + +} + +sl_status_t sl_btmesh_generic_client_get_params(uint16_t server_address, + uint16_t elem_index, + uint16_t model_id, + uint16_t appkey_index, + uint8_t type, + size_t parameters_len, + const uint8_t* parameters) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_generic_client_get_params.server_address=server_address; + cmd->data.cmd_generic_client_get_params.elem_index=elem_index; + cmd->data.cmd_generic_client_get_params.model_id=model_id; + cmd->data.cmd_generic_client_get_params.appkey_index=appkey_index; + cmd->data.cmd_generic_client_get_params.type=type; + if ((10+parameters_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_generic_client_get_params.parameters.len=parameters_len; + memcpy(cmd->data.cmd_generic_client_get_params.parameters.data,parameters,parameters_len); + + cmd->header=sl_btmesh_cmd_generic_client_get_params_id+(((10+parameters_len)&0xff)<<8)+(((10+parameters_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_get_params.result; + +} + +sl_status_t sl_btmesh_generic_client_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init.result; + +} + +sl_status_t sl_btmesh_generic_client_init_common() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_common_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_common.result; + +} + +sl_status_t sl_btmesh_generic_client_init_on_off() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_on_off_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_on_off.result; + +} + +sl_status_t sl_btmesh_generic_client_init_level() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_level_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_level.result; + +} + +sl_status_t sl_btmesh_generic_client_init_default_transition_time() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_default_transition_time_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_default_transition_time.result; + +} + +sl_status_t sl_btmesh_generic_client_init_power_on_off() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_power_on_off_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_power_on_off.result; + +} + +sl_status_t sl_btmesh_generic_client_init_power_level() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_power_level_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_power_level.result; + +} + +sl_status_t sl_btmesh_generic_client_init_battery() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_battery_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_battery.result; + +} + +sl_status_t sl_btmesh_generic_client_init_location() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_location_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_location.result; + +} + +sl_status_t sl_btmesh_generic_client_init_property() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_property_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_property.result; + +} + +sl_status_t sl_btmesh_generic_client_init_lightness() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_lightness_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_lightness.result; + +} + +sl_status_t sl_btmesh_generic_client_init_ctl() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_ctl_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_ctl.result; + +} + +sl_status_t sl_btmesh_generic_client_init_hsl() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_client_init_hsl_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_client_init_hsl.result; + +} + +sl_status_t sl_btmesh_generic_server_respond(uint16_t client_address, + uint16_t elem_index, + uint16_t model_id, + uint16_t appkey_index, + uint32_t remaining_ms, + uint16_t flags, + uint8_t type, + size_t parameters_len, + const uint8_t* parameters) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_generic_server_respond.client_address=client_address; + cmd->data.cmd_generic_server_respond.elem_index=elem_index; + cmd->data.cmd_generic_server_respond.model_id=model_id; + cmd->data.cmd_generic_server_respond.appkey_index=appkey_index; + cmd->data.cmd_generic_server_respond.remaining_ms=remaining_ms; + cmd->data.cmd_generic_server_respond.flags=flags; + cmd->data.cmd_generic_server_respond.type=type; + if ((16+parameters_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_generic_server_respond.parameters.len=parameters_len; + memcpy(cmd->data.cmd_generic_server_respond.parameters.data,parameters,parameters_len); + + cmd->header=sl_btmesh_cmd_generic_server_respond_id+(((16+parameters_len)&0xff)<<8)+(((16+parameters_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_respond.result; + +} + +sl_status_t sl_btmesh_generic_server_update(uint16_t elem_index, + uint16_t model_id, + uint32_t remaining_ms, + uint8_t type, + size_t parameters_len, + const uint8_t* parameters) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_generic_server_update.elem_index=elem_index; + cmd->data.cmd_generic_server_update.model_id=model_id; + cmd->data.cmd_generic_server_update.remaining_ms=remaining_ms; + cmd->data.cmd_generic_server_update.type=type; + if ((10+parameters_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_generic_server_update.parameters.len=parameters_len; + memcpy(cmd->data.cmd_generic_server_update.parameters.data,parameters,parameters_len); + + cmd->header=sl_btmesh_cmd_generic_server_update_id+(((10+parameters_len)&0xff)<<8)+(((10+parameters_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_update.result; + +} + +sl_status_t sl_btmesh_generic_server_publish(uint16_t elem_index, + uint16_t model_id, + uint8_t type) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_generic_server_publish.elem_index=elem_index; + cmd->data.cmd_generic_server_publish.model_id=model_id; + cmd->data.cmd_generic_server_publish.type=type; + + cmd->header=sl_btmesh_cmd_generic_server_publish_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_publish.result; + +} + +sl_status_t sl_btmesh_generic_server_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init.result; + +} + +sl_status_t sl_btmesh_generic_server_init_common() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_common_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_common.result; + +} + +sl_status_t sl_btmesh_generic_server_init_on_off() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_on_off_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_on_off.result; + +} + +sl_status_t sl_btmesh_generic_server_init_level() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_level_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_level.result; + +} + +sl_status_t sl_btmesh_generic_server_init_default_transition_time() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_default_transition_time_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_default_transition_time.result; + +} + +sl_status_t sl_btmesh_generic_server_init_power_on_off() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_power_on_off_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_power_on_off.result; + +} + +sl_status_t sl_btmesh_generic_server_init_power_level() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_power_level_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_power_level.result; + +} + +sl_status_t sl_btmesh_generic_server_init_battery() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_battery_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_battery.result; + +} + +sl_status_t sl_btmesh_generic_server_init_location() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_location_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_location.result; + +} + +sl_status_t sl_btmesh_generic_server_init_property() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_property_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_property.result; + +} + +sl_status_t sl_btmesh_generic_server_init_lightness() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_lightness_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_lightness.result; + +} + +sl_status_t sl_btmesh_generic_server_init_ctl() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_ctl_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_ctl.result; + +} + +sl_status_t sl_btmesh_generic_server_init_hsl() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_generic_server_init_hsl_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_generic_server_init_hsl.result; + +} + +sl_status_t sl_btmesh_generic_server_get_cached_state(uint16_t elem_index, + uint16_t model_id, + uint8_t type, + uint32_t *remaining_ms, + size_t max_parameters_size, + size_t *parameters_len, + uint8_t *parameters) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_generic_server_get_cached_state.elem_index=elem_index; + cmd->data.cmd_generic_server_get_cached_state.model_id=model_id; + cmd->data.cmd_generic_server_get_cached_state.type=type; + + cmd->header=sl_btmesh_cmd_generic_server_get_cached_state_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (remaining_ms) { + *remaining_ms = rsp->data.rsp_generic_server_get_cached_state.remaining_ms; + } + if (parameters_len) { + *parameters_len = rsp->data.rsp_generic_server_get_cached_state.parameters.len; + } + if (parameters && (rsp->data.rsp_generic_server_get_cached_state.parameters.len <= max_parameters_size)) { + memcpy(parameters,rsp->data.rsp_generic_server_get_cached_state.parameters.data,rsp->data.rsp_generic_server_get_cached_state.parameters.len); + } + return rsp->data.rsp_generic_server_get_cached_state.result; + +} + +sl_status_t sl_btmesh_test_get_nettx(uint8_t *count, uint8_t *interval) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_test_get_nettx_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (count) { + *count = rsp->data.rsp_test_get_nettx.count; + } + if (interval) { + *interval = rsp->data.rsp_test_get_nettx.interval; + } + return rsp->data.rsp_test_get_nettx.result; + +} + +sl_status_t sl_btmesh_test_set_nettx(uint8_t count, uint8_t interval) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_nettx.count=count; + cmd->data.cmd_test_set_nettx.interval=interval; + + cmd->header=sl_btmesh_cmd_test_set_nettx_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_nettx.result; + +} + +sl_status_t sl_btmesh_test_get_relay(uint8_t *enabled, + uint8_t *count, + uint8_t *interval) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_test_get_relay_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (enabled) { + *enabled = rsp->data.rsp_test_get_relay.enabled; + } + if (count) { + *count = rsp->data.rsp_test_get_relay.count; + } + if (interval) { + *interval = rsp->data.rsp_test_get_relay.interval; + } + return rsp->data.rsp_test_get_relay.result; + +} + +sl_status_t sl_btmesh_test_set_relay(uint8_t enabled, + uint8_t count, + uint8_t interval) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_relay.enabled=enabled; + cmd->data.cmd_test_set_relay.count=count; + cmd->data.cmd_test_set_relay.interval=interval; + + cmd->header=sl_btmesh_cmd_test_set_relay_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_relay.result; + +} + +SL_BGAPI_DEPRECATED sl_status_t sl_btmesh_test_set_adv_scan_params(uint16_t adv_interval_min, + uint16_t adv_interval_max, + uint8_t adv_repeat_packets, + uint8_t adv_use_random_address, + uint8_t adv_channel_map, + uint16_t scan_interval, + uint16_t scan_window) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_adv_scan_params.adv_interval_min=adv_interval_min; + cmd->data.cmd_test_set_adv_scan_params.adv_interval_max=adv_interval_max; + cmd->data.cmd_test_set_adv_scan_params.adv_repeat_packets=adv_repeat_packets; + cmd->data.cmd_test_set_adv_scan_params.adv_use_random_address=adv_use_random_address; + cmd->data.cmd_test_set_adv_scan_params.adv_channel_map=adv_channel_map; + cmd->data.cmd_test_set_adv_scan_params.scan_interval=scan_interval; + cmd->data.cmd_test_set_adv_scan_params.scan_window=scan_window; + + cmd->header=sl_btmesh_cmd_test_set_adv_scan_params_id+(((11)&0xff)<<8)+(((11)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_adv_scan_params.result; + +} + +sl_status_t sl_btmesh_test_set_ivupdate_test_mode(uint8_t mode) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_ivupdate_test_mode.mode=mode; + + cmd->header=sl_btmesh_cmd_test_set_ivupdate_test_mode_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_ivupdate_test_mode.result; + +} + +sl_status_t sl_btmesh_test_get_ivupdate_test_mode(uint8_t *mode) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_test_get_ivupdate_test_mode_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (mode) { + *mode = rsp->data.rsp_test_get_ivupdate_test_mode.mode; + } + return rsp->data.rsp_test_get_ivupdate_test_mode.result; + +} + +sl_status_t sl_btmesh_test_set_segment_send_delay(uint8_t delay) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_segment_send_delay.delay=delay; + + cmd->header=sl_btmesh_cmd_test_set_segment_send_delay_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_segment_send_delay.result; + +} + +sl_status_t sl_btmesh_test_set_ivupdate_state(uint8_t state) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_ivupdate_state.state=state; + + cmd->header=sl_btmesh_cmd_test_set_ivupdate_state_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_ivupdate_state.result; + +} + +sl_status_t sl_btmesh_test_send_beacons() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_test_send_beacons_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_send_beacons.result; + +} + +sl_status_t sl_btmesh_test_bind_local_model_app(uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id, + uint16_t model_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_bind_local_model_app.elem_index=elem_index; + cmd->data.cmd_test_bind_local_model_app.appkey_index=appkey_index; + cmd->data.cmd_test_bind_local_model_app.vendor_id=vendor_id; + cmd->data.cmd_test_bind_local_model_app.model_id=model_id; + + cmd->header=sl_btmesh_cmd_test_bind_local_model_app_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_bind_local_model_app.result; + +} + +sl_status_t sl_btmesh_test_unbind_local_model_app(uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id, + uint16_t model_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_unbind_local_model_app.elem_index=elem_index; + cmd->data.cmd_test_unbind_local_model_app.appkey_index=appkey_index; + cmd->data.cmd_test_unbind_local_model_app.vendor_id=vendor_id; + cmd->data.cmd_test_unbind_local_model_app.model_id=model_id; + + cmd->header=sl_btmesh_cmd_test_unbind_local_model_app_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_unbind_local_model_app.result; + +} + +sl_status_t sl_btmesh_test_add_local_model_sub(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_add_local_model_sub.elem_index=elem_index; + cmd->data.cmd_test_add_local_model_sub.vendor_id=vendor_id; + cmd->data.cmd_test_add_local_model_sub.model_id=model_id; + cmd->data.cmd_test_add_local_model_sub.sub_address=sub_address; + + cmd->header=sl_btmesh_cmd_test_add_local_model_sub_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_add_local_model_sub.result; + +} + +sl_status_t sl_btmesh_test_remove_local_model_sub(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_remove_local_model_sub.elem_index=elem_index; + cmd->data.cmd_test_remove_local_model_sub.vendor_id=vendor_id; + cmd->data.cmd_test_remove_local_model_sub.model_id=model_id; + cmd->data.cmd_test_remove_local_model_sub.sub_address=sub_address; + + cmd->header=sl_btmesh_cmd_test_remove_local_model_sub_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_remove_local_model_sub.result; + +} + +sl_status_t sl_btmesh_test_add_local_model_sub_va(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + size_t sub_address_len, + const uint8_t* sub_address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_add_local_model_sub_va.elem_index=elem_index; + cmd->data.cmd_test_add_local_model_sub_va.vendor_id=vendor_id; + cmd->data.cmd_test_add_local_model_sub_va.model_id=model_id; + if ((7+sub_address_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_test_add_local_model_sub_va.sub_address.len=sub_address_len; + memcpy(cmd->data.cmd_test_add_local_model_sub_va.sub_address.data,sub_address,sub_address_len); + + cmd->header=sl_btmesh_cmd_test_add_local_model_sub_va_id+(((7+sub_address_len)&0xff)<<8)+(((7+sub_address_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_add_local_model_sub_va.result; + +} + +sl_status_t sl_btmesh_test_remove_local_model_sub_va(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + size_t sub_address_len, + const uint8_t* sub_address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_remove_local_model_sub_va.elem_index=elem_index; + cmd->data.cmd_test_remove_local_model_sub_va.vendor_id=vendor_id; + cmd->data.cmd_test_remove_local_model_sub_va.model_id=model_id; + if ((7+sub_address_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_test_remove_local_model_sub_va.sub_address.len=sub_address_len; + memcpy(cmd->data.cmd_test_remove_local_model_sub_va.sub_address.data,sub_address,sub_address_len); + + cmd->header=sl_btmesh_cmd_test_remove_local_model_sub_va_id+(((7+sub_address_len)&0xff)<<8)+(((7+sub_address_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_remove_local_model_sub_va.result; + +} + +sl_status_t sl_btmesh_test_get_local_model_sub(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + size_t max_addresses_size, + size_t *addresses_len, + uint8_t *addresses) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_get_local_model_sub.elem_index=elem_index; + cmd->data.cmd_test_get_local_model_sub.vendor_id=vendor_id; + cmd->data.cmd_test_get_local_model_sub.model_id=model_id; + + cmd->header=sl_btmesh_cmd_test_get_local_model_sub_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (addresses_len) { + *addresses_len = rsp->data.rsp_test_get_local_model_sub.addresses.len; + } + if (addresses && (rsp->data.rsp_test_get_local_model_sub.addresses.len <= max_addresses_size)) { + memcpy(addresses,rsp->data.rsp_test_get_local_model_sub.addresses.data,rsp->data.rsp_test_get_local_model_sub.addresses.len); + } + return rsp->data.rsp_test_get_local_model_sub.result; + +} + +sl_status_t sl_btmesh_test_set_local_model_pub(uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t pub_address, + uint8_t ttl, + uint8_t period, + uint8_t retrans, + uint8_t credentials) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_local_model_pub.elem_index=elem_index; + cmd->data.cmd_test_set_local_model_pub.appkey_index=appkey_index; + cmd->data.cmd_test_set_local_model_pub.vendor_id=vendor_id; + cmd->data.cmd_test_set_local_model_pub.model_id=model_id; + cmd->data.cmd_test_set_local_model_pub.pub_address=pub_address; + cmd->data.cmd_test_set_local_model_pub.ttl=ttl; + cmd->data.cmd_test_set_local_model_pub.period=period; + cmd->data.cmd_test_set_local_model_pub.retrans=retrans; + cmd->data.cmd_test_set_local_model_pub.credentials=credentials; + + cmd->header=sl_btmesh_cmd_test_set_local_model_pub_id+(((14)&0xff)<<8)+(((14)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_local_model_pub.result; + +} + +sl_status_t sl_btmesh_test_set_local_model_pub_va(uint16_t elem_index, + uint16_t appkey_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t ttl, + uint8_t period, + uint8_t retrans, + uint8_t credentials, + size_t pub_address_len, + const uint8_t* pub_address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_local_model_pub_va.elem_index=elem_index; + cmd->data.cmd_test_set_local_model_pub_va.appkey_index=appkey_index; + cmd->data.cmd_test_set_local_model_pub_va.vendor_id=vendor_id; + cmd->data.cmd_test_set_local_model_pub_va.model_id=model_id; + cmd->data.cmd_test_set_local_model_pub_va.ttl=ttl; + cmd->data.cmd_test_set_local_model_pub_va.period=period; + cmd->data.cmd_test_set_local_model_pub_va.retrans=retrans; + cmd->data.cmd_test_set_local_model_pub_va.credentials=credentials; + if ((13+pub_address_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_test_set_local_model_pub_va.pub_address.len=pub_address_len; + memcpy(cmd->data.cmd_test_set_local_model_pub_va.pub_address.data,pub_address,pub_address_len); + + cmd->header=sl_btmesh_cmd_test_set_local_model_pub_va_id+(((13+pub_address_len)&0xff)<<8)+(((13+pub_address_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_local_model_pub_va.result; + +} + +sl_status_t sl_btmesh_test_get_local_model_pub(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t *appkey_index, + uint16_t *pub_address, + uint8_t *ttl, + uint8_t *period, + uint8_t *retrans, + uint8_t *credentials) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_get_local_model_pub.elem_index=elem_index; + cmd->data.cmd_test_get_local_model_pub.vendor_id=vendor_id; + cmd->data.cmd_test_get_local_model_pub.model_id=model_id; + + cmd->header=sl_btmesh_cmd_test_get_local_model_pub_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (appkey_index) { + *appkey_index = rsp->data.rsp_test_get_local_model_pub.appkey_index; + } + if (pub_address) { + *pub_address = rsp->data.rsp_test_get_local_model_pub.pub_address; + } + if (ttl) { + *ttl = rsp->data.rsp_test_get_local_model_pub.ttl; + } + if (period) { + *period = rsp->data.rsp_test_get_local_model_pub.period; + } + if (retrans) { + *retrans = rsp->data.rsp_test_get_local_model_pub.retrans; + } + if (credentials) { + *credentials = rsp->data.rsp_test_get_local_model_pub.credentials; + } + return rsp->data.rsp_test_get_local_model_pub.result; + +} + +sl_status_t sl_btmesh_test_set_local_heartbeat_subscription(uint16_t subscription_source, + uint16_t subscription_destination, + uint8_t period_log) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_local_heartbeat_subscription.subscription_source=subscription_source; + cmd->data.cmd_test_set_local_heartbeat_subscription.subscription_destination=subscription_destination; + cmd->data.cmd_test_set_local_heartbeat_subscription.period_log=period_log; + + cmd->header=sl_btmesh_cmd_test_set_local_heartbeat_subscription_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_local_heartbeat_subscription.result; + +} + +sl_status_t sl_btmesh_test_get_local_heartbeat_subscription(uint16_t *count, + uint8_t *hop_min, + uint8_t *hop_max) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_test_get_local_heartbeat_subscription_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (count) { + *count = rsp->data.rsp_test_get_local_heartbeat_subscription.count; + } + if (hop_min) { + *hop_min = rsp->data.rsp_test_get_local_heartbeat_subscription.hop_min; + } + if (hop_max) { + *hop_max = rsp->data.rsp_test_get_local_heartbeat_subscription.hop_max; + } + return rsp->data.rsp_test_get_local_heartbeat_subscription.result; + +} + +sl_status_t sl_btmesh_test_get_local_heartbeat_publication(uint16_t *publication_address, + uint8_t *count, + uint8_t *period_log, + uint8_t *ttl, + uint16_t *features, + uint16_t *publication_netkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_test_get_local_heartbeat_publication_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (publication_address) { + *publication_address = rsp->data.rsp_test_get_local_heartbeat_publication.publication_address; + } + if (count) { + *count = rsp->data.rsp_test_get_local_heartbeat_publication.count; + } + if (period_log) { + *period_log = rsp->data.rsp_test_get_local_heartbeat_publication.period_log; + } + if (ttl) { + *ttl = rsp->data.rsp_test_get_local_heartbeat_publication.ttl; + } + if (features) { + *features = rsp->data.rsp_test_get_local_heartbeat_publication.features; + } + if (publication_netkey_index) { + *publication_netkey_index = rsp->data.rsp_test_get_local_heartbeat_publication.publication_netkey_index; + } + return rsp->data.rsp_test_get_local_heartbeat_publication.result; + +} + +sl_status_t sl_btmesh_test_set_local_heartbeat_publication(uint16_t publication_address, + uint8_t count_log, + uint8_t period_log, + uint8_t ttl, + uint16_t features, + uint16_t publication_netkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_local_heartbeat_publication.publication_address=publication_address; + cmd->data.cmd_test_set_local_heartbeat_publication.count_log=count_log; + cmd->data.cmd_test_set_local_heartbeat_publication.period_log=period_log; + cmd->data.cmd_test_set_local_heartbeat_publication.ttl=ttl; + cmd->data.cmd_test_set_local_heartbeat_publication.features=features; + cmd->data.cmd_test_set_local_heartbeat_publication.publication_netkey_index=publication_netkey_index; + + cmd->header=sl_btmesh_cmd_test_set_local_heartbeat_publication_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_local_heartbeat_publication.result; + +} + +SL_BGAPI_DEPRECATED sl_status_t sl_btmesh_test_set_local_config(uint16_t id, + uint16_t netkey_index, + size_t value_len, + const uint8_t* value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_local_config.id=id; + cmd->data.cmd_test_set_local_config.netkey_index=netkey_index; + if ((5+value_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_test_set_local_config.value.len=value_len; + memcpy(cmd->data.cmd_test_set_local_config.value.data,value,value_len); + + cmd->header=sl_btmesh_cmd_test_set_local_config_id+(((5+value_len)&0xff)<<8)+(((5+value_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_local_config.result; + +} + +SL_BGAPI_DEPRECATED sl_status_t sl_btmesh_test_get_local_config(uint16_t id, + uint16_t netkey_index, + size_t max_data_size, + size_t *data_len, + uint8_t *data) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_get_local_config.id=id; + cmd->data.cmd_test_get_local_config.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_test_get_local_config_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (data_len) { + *data_len = rsp->data.rsp_test_get_local_config.data.len; + } + if (data && (rsp->data.rsp_test_get_local_config.data.len <= max_data_size)) { + memcpy(data,rsp->data.rsp_test_get_local_config.data.data,rsp->data.rsp_test_get_local_config.data.len); + } + return rsp->data.rsp_test_get_local_config.result; + +} + +sl_status_t sl_btmesh_test_add_local_key(uint8_t key_type, + aes_key_128 key, + uint16_t key_index, + uint16_t netkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_add_local_key.key_type=key_type; + memcpy(&cmd->data.cmd_test_add_local_key.key,&key,sizeof(aes_key_128)); + cmd->data.cmd_test_add_local_key.key_index=key_index; + cmd->data.cmd_test_add_local_key.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_test_add_local_key_id+(((21)&0xff)<<8)+(((21)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_add_local_key.result; + +} + +sl_status_t sl_btmesh_test_remove_local_key(uint8_t key_type, + uint16_t key_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_remove_local_key.key_type=key_type; + cmd->data.cmd_test_remove_local_key.key_index=key_index; + + cmd->header=sl_btmesh_cmd_test_remove_local_key_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_remove_local_key.result; + +} + +sl_status_t sl_btmesh_test_update_local_key(uint8_t key_type, + aes_key_128 key, + uint16_t key_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_update_local_key.key_type=key_type; + memcpy(&cmd->data.cmd_test_update_local_key.key,&key,sizeof(aes_key_128)); + cmd->data.cmd_test_update_local_key.key_index=key_index; + + cmd->header=sl_btmesh_cmd_test_update_local_key_id+(((19)&0xff)<<8)+(((19)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_update_local_key.result; + +} + +sl_status_t sl_btmesh_test_set_sar_config(uint32_t incomplete_timer_ms, + uint32_t pending_ack_base_ms, + uint32_t pending_ack_mul_ms, + uint32_t wait_for_ack_base_ms, + uint32_t wait_for_ack_mul_ms, + uint8_t max_send_rounds) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_sar_config.incomplete_timer_ms=incomplete_timer_ms; + cmd->data.cmd_test_set_sar_config.pending_ack_base_ms=pending_ack_base_ms; + cmd->data.cmd_test_set_sar_config.pending_ack_mul_ms=pending_ack_mul_ms; + cmd->data.cmd_test_set_sar_config.wait_for_ack_base_ms=wait_for_ack_base_ms; + cmd->data.cmd_test_set_sar_config.wait_for_ack_mul_ms=wait_for_ack_mul_ms; + cmd->data.cmd_test_set_sar_config.max_send_rounds=max_send_rounds; + + cmd->header=sl_btmesh_cmd_test_set_sar_config_id+(((21)&0xff)<<8)+(((21)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_sar_config.result; + +} + +sl_status_t sl_btmesh_test_set_adv_bearer_state(uint8_t state) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_adv_bearer_state.state=state; + + cmd->header=sl_btmesh_cmd_test_set_adv_bearer_state_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_adv_bearer_state.result; + +} + +sl_status_t sl_btmesh_test_prov_get_device_key(uint16_t address, + aes_key_128 *device_key) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_prov_get_device_key.address=address; + + cmd->header=sl_btmesh_cmd_test_prov_get_device_key_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (device_key) { + memcpy(device_key,&rsp->data.rsp_test_prov_get_device_key.device_key,sizeof(aes_key_128)); + } + return rsp->data.rsp_test_prov_get_device_key.result; + +} + +sl_status_t sl_btmesh_test_prov_prepare_key_refresh(aes_key_128 net_key, + size_t app_keys_len, + const uint8_t* app_keys) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + memcpy(&cmd->data.cmd_test_prov_prepare_key_refresh.net_key,&net_key,sizeof(aes_key_128)); + if ((17+app_keys_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_test_prov_prepare_key_refresh.app_keys.len=app_keys_len; + memcpy(cmd->data.cmd_test_prov_prepare_key_refresh.app_keys.data,app_keys,app_keys_len); + + cmd->header=sl_btmesh_cmd_test_prov_prepare_key_refresh_id+(((17+app_keys_len)&0xff)<<8)+(((17+app_keys_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_prov_prepare_key_refresh.result; + +} + +sl_status_t sl_btmesh_test_cancel_segmented_tx(uint16_t src_addr, + uint16_t dst_addr) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_cancel_segmented_tx.src_addr=src_addr; + cmd->data.cmd_test_cancel_segmented_tx.dst_addr=dst_addr; + + cmd->header=sl_btmesh_cmd_test_cancel_segmented_tx_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_cancel_segmented_tx.result; + +} + +sl_status_t sl_btmesh_test_set_iv_index(uint32_t iv_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_iv_index.iv_index=iv_index; + + cmd->header=sl_btmesh_cmd_test_set_iv_index_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_iv_index.result; + +} + +sl_status_t sl_btmesh_test_set_element_seqnum(uint16_t elem_index, + uint32_t seqnum) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_element_seqnum.elem_index=elem_index; + cmd->data.cmd_test_set_element_seqnum.seqnum=seqnum; + + cmd->header=sl_btmesh_cmd_test_set_element_seqnum_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_element_seqnum.result; + +} + +sl_status_t sl_btmesh_test_set_model_option(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t option, + uint32_t value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_model_option.elem_index=elem_index; + cmd->data.cmd_test_set_model_option.vendor_id=vendor_id; + cmd->data.cmd_test_set_model_option.model_id=model_id; + cmd->data.cmd_test_set_model_option.option=option; + cmd->data.cmd_test_set_model_option.value=value; + + cmd->header=sl_btmesh_cmd_test_set_model_option_id+(((11)&0xff)<<8)+(((11)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_model_option.result; + +} + +sl_status_t sl_btmesh_test_get_local_model_app_bindings(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + size_t max_appkeys_size, + size_t *appkeys_len, + uint8_t *appkeys) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_get_local_model_app_bindings.elem_index=elem_index; + cmd->data.cmd_test_get_local_model_app_bindings.vendor_id=vendor_id; + cmd->data.cmd_test_get_local_model_app_bindings.model_id=model_id; + + cmd->header=sl_btmesh_cmd_test_get_local_model_app_bindings_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (appkeys_len) { + *appkeys_len = rsp->data.rsp_test_get_local_model_app_bindings.appkeys.len; + } + if (appkeys && (rsp->data.rsp_test_get_local_model_app_bindings.appkeys.len <= max_appkeys_size)) { + memcpy(appkeys,rsp->data.rsp_test_get_local_model_app_bindings.appkeys.data,rsp->data.rsp_test_get_local_model_app_bindings.appkeys.len); + } + return rsp->data.rsp_test_get_local_model_app_bindings.result; + +} + +sl_status_t sl_btmesh_test_get_replay_protection_list_entry(uint16_t address, + uint32_t *seq, + uint32_t *seq_ivindex) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_get_replay_protection_list_entry.address=address; + + cmd->header=sl_btmesh_cmd_test_get_replay_protection_list_entry_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (seq) { + *seq = rsp->data.rsp_test_get_replay_protection_list_entry.seq; + } + if (seq_ivindex) { + *seq_ivindex = rsp->data.rsp_test_get_replay_protection_list_entry.seq_ivindex; + } + return rsp->data.rsp_test_get_replay_protection_list_entry.result; + +} + +sl_status_t sl_btmesh_test_clear_replay_protection_list_entry(uint16_t address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_clear_replay_protection_list_entry.address=address; + + cmd->header=sl_btmesh_cmd_test_clear_replay_protection_list_entry_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_clear_replay_protection_list_entry.result; + +} + +sl_status_t sl_btmesh_test_set_replay_protection_list_diagnostics(uint8_t enable) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_replay_protection_list_diagnostics.enable=enable; + + cmd->header=sl_btmesh_cmd_test_set_replay_protection_list_diagnostics_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_replay_protection_list_diagnostics.result; + +} + +sl_status_t sl_btmesh_test_get_model_option(uint16_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint8_t option, + uint32_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_get_model_option.elem_index=elem_index; + cmd->data.cmd_test_get_model_option.vendor_id=vendor_id; + cmd->data.cmd_test_get_model_option.model_id=model_id; + cmd->data.cmd_test_get_model_option.option=option; + + cmd->header=sl_btmesh_cmd_test_get_model_option_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (value) { + *value = rsp->data.rsp_test_get_model_option.value; + } + return rsp->data.rsp_test_get_model_option.result; + +} + +sl_status_t sl_btmesh_test_get_default_ttl(uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_test_get_default_ttl_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (value) { + *value = rsp->data.rsp_test_get_default_ttl.value; + } + return rsp->data.rsp_test_get_default_ttl.result; + +} + +sl_status_t sl_btmesh_test_set_default_ttl(uint8_t set_value, uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_default_ttl.set_value=set_value; + + cmd->header=sl_btmesh_cmd_test_set_default_ttl_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (value) { + *value = rsp->data.rsp_test_set_default_ttl.value; + } + return rsp->data.rsp_test_set_default_ttl.result; + +} + +sl_status_t sl_btmesh_test_get_gatt_proxy(uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_test_get_gatt_proxy_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (value) { + *value = rsp->data.rsp_test_get_gatt_proxy.value; + } + return rsp->data.rsp_test_get_gatt_proxy.result; + +} + +sl_status_t sl_btmesh_test_set_gatt_proxy(uint8_t set_value, uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_gatt_proxy.set_value=set_value; + + cmd->header=sl_btmesh_cmd_test_set_gatt_proxy_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (value) { + *value = rsp->data.rsp_test_set_gatt_proxy.value; + } + return rsp->data.rsp_test_set_gatt_proxy.result; + +} + +sl_status_t sl_btmesh_test_get_identity(uint16_t get_netkey_index, + uint16_t *netkey_index, + uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_get_identity.get_netkey_index=get_netkey_index; + + cmd->header=sl_btmesh_cmd_test_get_identity_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (netkey_index) { + *netkey_index = rsp->data.rsp_test_get_identity.netkey_index; + } + if (value) { + *value = rsp->data.rsp_test_get_identity.value; + } + return rsp->data.rsp_test_get_identity.result; + +} + +sl_status_t sl_btmesh_test_set_identity(uint16_t set_netkey_index, + uint8_t set_value, + uint16_t *netkey_index, + uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_identity.set_netkey_index=set_netkey_index; + cmd->data.cmd_test_set_identity.set_value=set_value; + + cmd->header=sl_btmesh_cmd_test_set_identity_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (netkey_index) { + *netkey_index = rsp->data.rsp_test_set_identity.netkey_index; + } + if (value) { + *value = rsp->data.rsp_test_set_identity.value; + } + return rsp->data.rsp_test_set_identity.result; + +} + +sl_status_t sl_btmesh_test_get_friend(uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_test_get_friend_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (value) { + *value = rsp->data.rsp_test_get_friend.value; + } + return rsp->data.rsp_test_get_friend.result; + +} + +sl_status_t sl_btmesh_test_set_friend(uint8_t set_value, uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_friend.set_value=set_value; + + cmd->header=sl_btmesh_cmd_test_set_friend_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (value) { + *value = rsp->data.rsp_test_set_friend.value; + } + return rsp->data.rsp_test_set_friend.result; + +} + +sl_status_t sl_btmesh_test_get_beacon(uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_test_get_beacon_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (value) { + *value = rsp->data.rsp_test_get_beacon.value; + } + return rsp->data.rsp_test_get_beacon.result; + +} + +sl_status_t sl_btmesh_test_set_beacon(uint8_t set_value, uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_beacon.set_value=set_value; + + cmd->header=sl_btmesh_cmd_test_set_beacon_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (value) { + *value = rsp->data.rsp_test_set_beacon.value; + } + return rsp->data.rsp_test_set_beacon.result; + +} + +sl_status_t sl_btmesh_test_get_private_identity(uint16_t get_netkey_index, + uint16_t *netkey_index, + uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_get_private_identity.get_netkey_index=get_netkey_index; + + cmd->header=sl_btmesh_cmd_test_get_private_identity_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (netkey_index) { + *netkey_index = rsp->data.rsp_test_get_private_identity.netkey_index; + } + if (value) { + *value = rsp->data.rsp_test_get_private_identity.value; + } + return rsp->data.rsp_test_get_private_identity.result; + +} + +sl_status_t sl_btmesh_test_set_private_identity(uint16_t set_netkey_index, + uint8_t set_value, + uint16_t *netkey_index, + uint8_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_private_identity.set_netkey_index=set_netkey_index; + cmd->data.cmd_test_set_private_identity.set_value=set_value; + + cmd->header=sl_btmesh_cmd_test_set_private_identity_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (netkey_index) { + *netkey_index = rsp->data.rsp_test_set_private_identity.netkey_index; + } + if (value) { + *value = rsp->data.rsp_test_set_private_identity.value; + } + return rsp->data.rsp_test_set_private_identity.result; + +} + +sl_status_t sl_btmesh_test_set_adv_provisioning_bearer_timing(uint16_t pbadv_interval_ms, + uint16_t pbadv_variation_ms) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_adv_provisioning_bearer_timing.pbadv_interval_ms=pbadv_interval_ms; + cmd->data.cmd_test_set_adv_provisioning_bearer_timing.pbadv_variation_ms=pbadv_variation_ms; + + cmd->header=sl_btmesh_cmd_test_set_adv_provisioning_bearer_timing_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_adv_provisioning_bearer_timing.result; + +} + +sl_status_t sl_btmesh_test_update_keyrefresh_phase(uint16_t network_key_index, + uint8_t *phase) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_update_keyrefresh_phase.network_key_index=network_key_index; + + cmd->header=sl_btmesh_cmd_test_update_keyrefresh_phase_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (phase) { + *phase = rsp->data.rsp_test_update_keyrefresh_phase.phase; + } + return rsp->data.rsp_test_update_keyrefresh_phase.result; + +} + +sl_status_t sl_btmesh_test_send_private_beacons() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_test_send_private_beacons_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_send_private_beacons.result; + +} + +sl_status_t sl_btmesh_test_set_adv_params(uint16_t adv_interval_min, + uint16_t adv_interval_max, + uint8_t adv_repeat_packets, + uint8_t adv_channel_map) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_adv_params.adv_interval_min=adv_interval_min; + cmd->data.cmd_test_set_adv_params.adv_interval_max=adv_interval_max; + cmd->data.cmd_test_set_adv_params.adv_repeat_packets=adv_repeat_packets; + cmd->data.cmd_test_set_adv_params.adv_channel_map=adv_channel_map; + + cmd->header=sl_btmesh_cmd_test_set_adv_params_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_adv_params.result; + +} + +sl_status_t sl_btmesh_test_set_scan_params(uint16_t scan_interval, + uint16_t scan_window) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_set_scan_params.scan_interval=scan_interval; + cmd->data.cmd_test_set_scan_params.scan_window=scan_window; + + cmd->header=sl_btmesh_cmd_test_set_scan_params_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_set_scan_params.result; + +} + +sl_status_t sl_btmesh_test_adv_use_random_address(uint8_t address_type) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_test_adv_use_random_address.address_type=address_type; + + cmd->header=sl_btmesh_cmd_test_adv_use_random_address_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_test_adv_use_random_address.result; + +} + +sl_status_t sl_btmesh_lpn_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_lpn_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lpn_init.result; + +} + +sl_status_t sl_btmesh_lpn_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_lpn_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lpn_deinit.result; + +} + +sl_status_t sl_btmesh_lpn_establish_friendship(uint16_t netkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lpn_establish_friendship.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_lpn_establish_friendship_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lpn_establish_friendship.result; + +} + +sl_status_t sl_btmesh_lpn_poll(uint16_t netkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lpn_poll.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_lpn_poll_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lpn_poll.result; + +} + +sl_status_t sl_btmesh_lpn_terminate_friendship(uint16_t netkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lpn_terminate_friendship.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_lpn_terminate_friendship_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lpn_terminate_friendship.result; + +} + +sl_status_t sl_btmesh_lpn_config(uint8_t setting_id, uint32_t value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lpn_config.setting_id=setting_id; + cmd->data.cmd_lpn_config.value=value; + + cmd->header=sl_btmesh_cmd_lpn_config_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lpn_config.result; + +} + +sl_status_t sl_btmesh_friend_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_friend_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_friend_init.result; + +} + +sl_status_t sl_btmesh_friend_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_friend_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_friend_deinit.result; + +} + +sl_status_t sl_btmesh_config_client_cancel_request(uint32_t handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_cancel_request.handle=handle; + + cmd->header=sl_btmesh_cmd_config_client_cancel_request_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_config_client_cancel_request.result; + +} + +sl_status_t sl_btmesh_config_client_get_request_status(uint32_t handle, + uint16_t *server_address, + uint16_t *opcode, + uint32_t *age_ms, + uint32_t *remaining_ms, + uint8_t *friend_acked) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_request_status.handle=handle; + + cmd->header=sl_btmesh_cmd_config_client_get_request_status_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (server_address) { + *server_address = rsp->data.rsp_config_client_get_request_status.server_address; + } + if (opcode) { + *opcode = rsp->data.rsp_config_client_get_request_status.opcode; + } + if (age_ms) { + *age_ms = rsp->data.rsp_config_client_get_request_status.age_ms; + } + if (remaining_ms) { + *remaining_ms = rsp->data.rsp_config_client_get_request_status.remaining_ms; + } + if (friend_acked) { + *friend_acked = rsp->data.rsp_config_client_get_request_status.friend_acked; + } + return rsp->data.rsp_config_client_get_request_status.result; + +} + +sl_status_t sl_btmesh_config_client_get_default_timeout(uint32_t *timeout_ms, + uint32_t *lpn_timeout_ms) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_config_client_get_default_timeout_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (timeout_ms) { + *timeout_ms = rsp->data.rsp_config_client_get_default_timeout.timeout_ms; + } + if (lpn_timeout_ms) { + *lpn_timeout_ms = rsp->data.rsp_config_client_get_default_timeout.lpn_timeout_ms; + } + return rsp->data.rsp_config_client_get_default_timeout.result; + +} + +sl_status_t sl_btmesh_config_client_set_default_timeout(uint32_t timeout_ms, + uint32_t lpn_timeout_ms) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_default_timeout.timeout_ms=timeout_ms; + cmd->data.cmd_config_client_set_default_timeout.lpn_timeout_ms=lpn_timeout_ms; + + cmd->header=sl_btmesh_cmd_config_client_set_default_timeout_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_config_client_set_default_timeout.result; + +} + +sl_status_t sl_btmesh_config_client_add_netkey(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_add_netkey.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_add_netkey.server_address=server_address; + cmd->data.cmd_config_client_add_netkey.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_config_client_add_netkey_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_add_netkey.handle; + } + return rsp->data.rsp_config_client_add_netkey.result; + +} + +sl_status_t sl_btmesh_config_client_remove_netkey(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_remove_netkey.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_remove_netkey.server_address=server_address; + cmd->data.cmd_config_client_remove_netkey.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_config_client_remove_netkey_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_remove_netkey.handle; + } + return rsp->data.rsp_config_client_remove_netkey.result; + +} + +sl_status_t sl_btmesh_config_client_list_netkeys(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_list_netkeys.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_list_netkeys.server_address=server_address; + + cmd->header=sl_btmesh_cmd_config_client_list_netkeys_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_list_netkeys.handle; + } + return rsp->data.rsp_config_client_list_netkeys.result; + +} + +sl_status_t sl_btmesh_config_client_add_appkey(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t appkey_index, + uint16_t netkey_index, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_add_appkey.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_add_appkey.server_address=server_address; + cmd->data.cmd_config_client_add_appkey.appkey_index=appkey_index; + cmd->data.cmd_config_client_add_appkey.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_config_client_add_appkey_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_add_appkey.handle; + } + return rsp->data.rsp_config_client_add_appkey.result; + +} + +sl_status_t sl_btmesh_config_client_remove_appkey(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t appkey_index, + uint16_t netkey_index, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_remove_appkey.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_remove_appkey.server_address=server_address; + cmd->data.cmd_config_client_remove_appkey.appkey_index=appkey_index; + cmd->data.cmd_config_client_remove_appkey.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_config_client_remove_appkey_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_remove_appkey.handle; + } + return rsp->data.rsp_config_client_remove_appkey.result; + +} + +sl_status_t sl_btmesh_config_client_list_appkeys(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_list_appkeys.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_list_appkeys.server_address=server_address; + cmd->data.cmd_config_client_list_appkeys.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_config_client_list_appkeys_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_list_appkeys.handle; + } + return rsp->data.rsp_config_client_list_appkeys.result; + +} + +sl_status_t sl_btmesh_config_client_bind_model(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t appkey_index, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_bind_model.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_bind_model.server_address=server_address; + cmd->data.cmd_config_client_bind_model.elem_index=elem_index; + cmd->data.cmd_config_client_bind_model.vendor_id=vendor_id; + cmd->data.cmd_config_client_bind_model.model_id=model_id; + cmd->data.cmd_config_client_bind_model.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_config_client_bind_model_id+(((11)&0xff)<<8)+(((11)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_bind_model.handle; + } + return rsp->data.rsp_config_client_bind_model.result; + +} + +sl_status_t sl_btmesh_config_client_unbind_model(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t appkey_index, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_unbind_model.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_unbind_model.server_address=server_address; + cmd->data.cmd_config_client_unbind_model.elem_index=elem_index; + cmd->data.cmd_config_client_unbind_model.vendor_id=vendor_id; + cmd->data.cmd_config_client_unbind_model.model_id=model_id; + cmd->data.cmd_config_client_unbind_model.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_config_client_unbind_model_id+(((11)&0xff)<<8)+(((11)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_unbind_model.handle; + } + return rsp->data.rsp_config_client_unbind_model.result; + +} + +sl_status_t sl_btmesh_config_client_list_bindings(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_list_bindings.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_list_bindings.server_address=server_address; + cmd->data.cmd_config_client_list_bindings.elem_index=elem_index; + cmd->data.cmd_config_client_list_bindings.vendor_id=vendor_id; + cmd->data.cmd_config_client_list_bindings.model_id=model_id; + + cmd->header=sl_btmesh_cmd_config_client_list_bindings_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_list_bindings.handle; + } + return rsp->data.rsp_config_client_list_bindings.result; + +} + +sl_status_t sl_btmesh_config_client_get_model_pub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_model_pub.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_model_pub.server_address=server_address; + cmd->data.cmd_config_client_get_model_pub.elem_index=elem_index; + cmd->data.cmd_config_client_get_model_pub.vendor_id=vendor_id; + cmd->data.cmd_config_client_get_model_pub.model_id=model_id; + + cmd->header=sl_btmesh_cmd_config_client_get_model_pub_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_model_pub.handle; + } + return rsp->data.rsp_config_client_get_model_pub.result; + +} + +sl_status_t sl_btmesh_config_client_set_model_pub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t address, + uint16_t appkey_index, + uint8_t credentials, + uint8_t ttl, + uint32_t period_ms, + uint8_t retransmit_count, + uint16_t retransmit_interval_ms, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_model_pub.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_model_pub.server_address=server_address; + cmd->data.cmd_config_client_set_model_pub.elem_index=elem_index; + cmd->data.cmd_config_client_set_model_pub.vendor_id=vendor_id; + cmd->data.cmd_config_client_set_model_pub.model_id=model_id; + cmd->data.cmd_config_client_set_model_pub.address=address; + cmd->data.cmd_config_client_set_model_pub.appkey_index=appkey_index; + cmd->data.cmd_config_client_set_model_pub.credentials=credentials; + cmd->data.cmd_config_client_set_model_pub.ttl=ttl; + cmd->data.cmd_config_client_set_model_pub.period_ms=period_ms; + cmd->data.cmd_config_client_set_model_pub.retransmit_count=retransmit_count; + cmd->data.cmd_config_client_set_model_pub.retransmit_interval_ms=retransmit_interval_ms; + + cmd->header=sl_btmesh_cmd_config_client_set_model_pub_id+(((22)&0xff)<<8)+(((22)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_model_pub.handle; + } + return rsp->data.rsp_config_client_set_model_pub.result; + +} + +sl_status_t sl_btmesh_config_client_set_model_pub_va(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uuid_128 address, + uint16_t appkey_index, + uint8_t credentials, + uint8_t ttl, + uint32_t period_ms, + uint8_t retransmit_count, + uint16_t retransmit_interval_ms, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_model_pub_va.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_model_pub_va.server_address=server_address; + cmd->data.cmd_config_client_set_model_pub_va.elem_index=elem_index; + cmd->data.cmd_config_client_set_model_pub_va.vendor_id=vendor_id; + cmd->data.cmd_config_client_set_model_pub_va.model_id=model_id; + cmd->data.cmd_config_client_set_model_pub_va.address=address; + cmd->data.cmd_config_client_set_model_pub_va.appkey_index=appkey_index; + cmd->data.cmd_config_client_set_model_pub_va.credentials=credentials; + cmd->data.cmd_config_client_set_model_pub_va.ttl=ttl; + cmd->data.cmd_config_client_set_model_pub_va.period_ms=period_ms; + cmd->data.cmd_config_client_set_model_pub_va.retransmit_count=retransmit_count; + cmd->data.cmd_config_client_set_model_pub_va.retransmit_interval_ms=retransmit_interval_ms; + + cmd->header=sl_btmesh_cmd_config_client_set_model_pub_va_id+(((36)&0xff)<<8)+(((36)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_model_pub_va.handle; + } + return rsp->data.rsp_config_client_set_model_pub_va.result; + +} + +sl_status_t sl_btmesh_config_client_add_model_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_add_model_sub.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_add_model_sub.server_address=server_address; + cmd->data.cmd_config_client_add_model_sub.elem_index=elem_index; + cmd->data.cmd_config_client_add_model_sub.vendor_id=vendor_id; + cmd->data.cmd_config_client_add_model_sub.model_id=model_id; + cmd->data.cmd_config_client_add_model_sub.sub_address=sub_address; + + cmd->header=sl_btmesh_cmd_config_client_add_model_sub_id+(((11)&0xff)<<8)+(((11)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_add_model_sub.handle; + } + return rsp->data.rsp_config_client_add_model_sub.result; + +} + +sl_status_t sl_btmesh_config_client_add_model_sub_va(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uuid_128 sub_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_add_model_sub_va.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_add_model_sub_va.server_address=server_address; + cmd->data.cmd_config_client_add_model_sub_va.elem_index=elem_index; + cmd->data.cmd_config_client_add_model_sub_va.vendor_id=vendor_id; + cmd->data.cmd_config_client_add_model_sub_va.model_id=model_id; + cmd->data.cmd_config_client_add_model_sub_va.sub_address=sub_address; + + cmd->header=sl_btmesh_cmd_config_client_add_model_sub_va_id+(((25)&0xff)<<8)+(((25)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_add_model_sub_va.handle; + } + return rsp->data.rsp_config_client_add_model_sub_va.result; + +} + +sl_status_t sl_btmesh_config_client_remove_model_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_remove_model_sub.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_remove_model_sub.server_address=server_address; + cmd->data.cmd_config_client_remove_model_sub.elem_index=elem_index; + cmd->data.cmd_config_client_remove_model_sub.vendor_id=vendor_id; + cmd->data.cmd_config_client_remove_model_sub.model_id=model_id; + cmd->data.cmd_config_client_remove_model_sub.sub_address=sub_address; + + cmd->header=sl_btmesh_cmd_config_client_remove_model_sub_id+(((11)&0xff)<<8)+(((11)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_remove_model_sub.handle; + } + return rsp->data.rsp_config_client_remove_model_sub.result; + +} + +sl_status_t sl_btmesh_config_client_remove_model_sub_va(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uuid_128 sub_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_remove_model_sub_va.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_remove_model_sub_va.server_address=server_address; + cmd->data.cmd_config_client_remove_model_sub_va.elem_index=elem_index; + cmd->data.cmd_config_client_remove_model_sub_va.vendor_id=vendor_id; + cmd->data.cmd_config_client_remove_model_sub_va.model_id=model_id; + cmd->data.cmd_config_client_remove_model_sub_va.sub_address=sub_address; + + cmd->header=sl_btmesh_cmd_config_client_remove_model_sub_va_id+(((25)&0xff)<<8)+(((25)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_remove_model_sub_va.handle; + } + return rsp->data.rsp_config_client_remove_model_sub_va.result; + +} + +sl_status_t sl_btmesh_config_client_set_model_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t sub_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_model_sub.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_model_sub.server_address=server_address; + cmd->data.cmd_config_client_set_model_sub.elem_index=elem_index; + cmd->data.cmd_config_client_set_model_sub.vendor_id=vendor_id; + cmd->data.cmd_config_client_set_model_sub.model_id=model_id; + cmd->data.cmd_config_client_set_model_sub.sub_address=sub_address; + + cmd->header=sl_btmesh_cmd_config_client_set_model_sub_id+(((11)&0xff)<<8)+(((11)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_model_sub.handle; + } + return rsp->data.rsp_config_client_set_model_sub.result; + +} + +sl_status_t sl_btmesh_config_client_set_model_sub_va(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uuid_128 sub_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_model_sub_va.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_model_sub_va.server_address=server_address; + cmd->data.cmd_config_client_set_model_sub_va.elem_index=elem_index; + cmd->data.cmd_config_client_set_model_sub_va.vendor_id=vendor_id; + cmd->data.cmd_config_client_set_model_sub_va.model_id=model_id; + cmd->data.cmd_config_client_set_model_sub_va.sub_address=sub_address; + + cmd->header=sl_btmesh_cmd_config_client_set_model_sub_va_id+(((25)&0xff)<<8)+(((25)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_model_sub_va.handle; + } + return rsp->data.rsp_config_client_set_model_sub_va.result; + +} + +sl_status_t sl_btmesh_config_client_clear_model_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_clear_model_sub.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_clear_model_sub.server_address=server_address; + cmd->data.cmd_config_client_clear_model_sub.elem_index=elem_index; + cmd->data.cmd_config_client_clear_model_sub.vendor_id=vendor_id; + cmd->data.cmd_config_client_clear_model_sub.model_id=model_id; + + cmd->header=sl_btmesh_cmd_config_client_clear_model_sub_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_clear_model_sub.handle; + } + return rsp->data.rsp_config_client_clear_model_sub.result; + +} + +sl_status_t sl_btmesh_config_client_list_subs(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_list_subs.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_list_subs.server_address=server_address; + cmd->data.cmd_config_client_list_subs.elem_index=elem_index; + cmd->data.cmd_config_client_list_subs.vendor_id=vendor_id; + cmd->data.cmd_config_client_list_subs.model_id=model_id; + + cmd->header=sl_btmesh_cmd_config_client_list_subs_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_list_subs.handle; + } + return rsp->data.rsp_config_client_list_subs.result; + +} + +sl_status_t sl_btmesh_config_client_get_heartbeat_pub(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_heartbeat_pub.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_heartbeat_pub.server_address=server_address; + + cmd->header=sl_btmesh_cmd_config_client_get_heartbeat_pub_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_heartbeat_pub.handle; + } + return rsp->data.rsp_config_client_get_heartbeat_pub.result; + +} + +sl_status_t sl_btmesh_config_client_set_heartbeat_pub(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t destination_address, + uint16_t netkey_index, + uint8_t count_log, + uint8_t period_log, + uint8_t ttl, + uint16_t features, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_heartbeat_pub.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_heartbeat_pub.server_address=server_address; + cmd->data.cmd_config_client_set_heartbeat_pub.destination_address=destination_address; + cmd->data.cmd_config_client_set_heartbeat_pub.netkey_index=netkey_index; + cmd->data.cmd_config_client_set_heartbeat_pub.count_log=count_log; + cmd->data.cmd_config_client_set_heartbeat_pub.period_log=period_log; + cmd->data.cmd_config_client_set_heartbeat_pub.ttl=ttl; + cmd->data.cmd_config_client_set_heartbeat_pub.features=features; + + cmd->header=sl_btmesh_cmd_config_client_set_heartbeat_pub_id+(((13)&0xff)<<8)+(((13)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_heartbeat_pub.handle; + } + return rsp->data.rsp_config_client_set_heartbeat_pub.result; + +} + +sl_status_t sl_btmesh_config_client_get_heartbeat_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_heartbeat_sub.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_heartbeat_sub.server_address=server_address; + + cmd->header=sl_btmesh_cmd_config_client_get_heartbeat_sub_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_heartbeat_sub.handle; + } + return rsp->data.rsp_config_client_get_heartbeat_sub.result; + +} + +sl_status_t sl_btmesh_config_client_set_heartbeat_sub(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t source_address, + uint16_t destination_address, + uint8_t period_log, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_heartbeat_sub.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_heartbeat_sub.server_address=server_address; + cmd->data.cmd_config_client_set_heartbeat_sub.source_address=source_address; + cmd->data.cmd_config_client_set_heartbeat_sub.destination_address=destination_address; + cmd->data.cmd_config_client_set_heartbeat_sub.period_log=period_log; + + cmd->header=sl_btmesh_cmd_config_client_set_heartbeat_sub_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_heartbeat_sub.handle; + } + return rsp->data.rsp_config_client_set_heartbeat_sub.result; + +} + +sl_status_t sl_btmesh_config_client_get_beacon(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_beacon.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_beacon.server_address=server_address; + + cmd->header=sl_btmesh_cmd_config_client_get_beacon_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_beacon.handle; + } + return rsp->data.rsp_config_client_get_beacon.result; + +} + +sl_status_t sl_btmesh_config_client_set_beacon(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_beacon.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_beacon.server_address=server_address; + cmd->data.cmd_config_client_set_beacon.value=value; + + cmd->header=sl_btmesh_cmd_config_client_set_beacon_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_beacon.handle; + } + return rsp->data.rsp_config_client_set_beacon.result; + +} + +sl_status_t sl_btmesh_config_client_get_default_ttl(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_default_ttl.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_default_ttl.server_address=server_address; + + cmd->header=sl_btmesh_cmd_config_client_get_default_ttl_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_default_ttl.handle; + } + return rsp->data.rsp_config_client_get_default_ttl.result; + +} + +sl_status_t sl_btmesh_config_client_set_default_ttl(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_default_ttl.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_default_ttl.server_address=server_address; + cmd->data.cmd_config_client_set_default_ttl.value=value; + + cmd->header=sl_btmesh_cmd_config_client_set_default_ttl_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_default_ttl.handle; + } + return rsp->data.rsp_config_client_set_default_ttl.result; + +} + +sl_status_t sl_btmesh_config_client_get_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_gatt_proxy.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_gatt_proxy.server_address=server_address; + + cmd->header=sl_btmesh_cmd_config_client_get_gatt_proxy_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_gatt_proxy.handle; + } + return rsp->data.rsp_config_client_get_gatt_proxy.result; + +} + +sl_status_t sl_btmesh_config_client_set_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_gatt_proxy.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_gatt_proxy.server_address=server_address; + cmd->data.cmd_config_client_set_gatt_proxy.value=value; + + cmd->header=sl_btmesh_cmd_config_client_set_gatt_proxy_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_gatt_proxy.handle; + } + return rsp->data.rsp_config_client_set_gatt_proxy.result; + +} + +sl_status_t sl_btmesh_config_client_get_relay(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_relay.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_relay.server_address=server_address; + + cmd->header=sl_btmesh_cmd_config_client_get_relay_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_relay.handle; + } + return rsp->data.rsp_config_client_get_relay.result; + +} + +sl_status_t sl_btmesh_config_client_set_relay(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint8_t retransmit_count, + uint16_t retransmit_interval_ms, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_relay.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_relay.server_address=server_address; + cmd->data.cmd_config_client_set_relay.value=value; + cmd->data.cmd_config_client_set_relay.retransmit_count=retransmit_count; + cmd->data.cmd_config_client_set_relay.retransmit_interval_ms=retransmit_interval_ms; + + cmd->header=sl_btmesh_cmd_config_client_set_relay_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_relay.handle; + } + return rsp->data.rsp_config_client_set_relay.result; + +} + +sl_status_t sl_btmesh_config_client_get_network_transmit(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_network_transmit.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_network_transmit.server_address=server_address; + + cmd->header=sl_btmesh_cmd_config_client_get_network_transmit_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_network_transmit.handle; + } + return rsp->data.rsp_config_client_get_network_transmit.result; + +} + +sl_status_t sl_btmesh_config_client_set_network_transmit(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t transmit_count, + uint16_t transmit_interval_ms, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_network_transmit.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_network_transmit.server_address=server_address; + cmd->data.cmd_config_client_set_network_transmit.transmit_count=transmit_count; + cmd->data.cmd_config_client_set_network_transmit.transmit_interval_ms=transmit_interval_ms; + + cmd->header=sl_btmesh_cmd_config_client_set_network_transmit_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_network_transmit.handle; + } + return rsp->data.rsp_config_client_set_network_transmit.result; + +} + +sl_status_t sl_btmesh_config_client_get_identity(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_identity.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_identity.server_address=server_address; + cmd->data.cmd_config_client_get_identity.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_config_client_get_identity_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_identity.handle; + } + return rsp->data.rsp_config_client_get_identity.result; + +} + +sl_status_t sl_btmesh_config_client_set_identity(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint8_t value, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_identity.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_identity.server_address=server_address; + cmd->data.cmd_config_client_set_identity.netkey_index=netkey_index; + cmd->data.cmd_config_client_set_identity.value=value; + + cmd->header=sl_btmesh_cmd_config_client_set_identity_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_identity.handle; + } + return rsp->data.rsp_config_client_set_identity.result; + +} + +sl_status_t sl_btmesh_config_client_get_friend(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_friend.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_friend.server_address=server_address; + + cmd->header=sl_btmesh_cmd_config_client_get_friend_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_friend.handle; + } + return rsp->data.rsp_config_client_get_friend.result; + +} + +sl_status_t sl_btmesh_config_client_set_friend(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_friend.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_set_friend.server_address=server_address; + cmd->data.cmd_config_client_set_friend.value=value; + + cmd->header=sl_btmesh_cmd_config_client_set_friend_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_set_friend.handle; + } + return rsp->data.rsp_config_client_set_friend.result; + +} + +sl_status_t sl_btmesh_config_client_get_key_refresh_phase(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_key_refresh_phase.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_key_refresh_phase.server_address=server_address; + cmd->data.cmd_config_client_get_key_refresh_phase.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_config_client_get_key_refresh_phase_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_key_refresh_phase.handle; + } + return rsp->data.rsp_config_client_get_key_refresh_phase.result; + +} + +sl_status_t sl_btmesh_config_client_get_lpn_polltimeout(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t lpn_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_lpn_polltimeout.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_lpn_polltimeout.server_address=server_address; + cmd->data.cmd_config_client_get_lpn_polltimeout.lpn_address=lpn_address; + + cmd->header=sl_btmesh_cmd_config_client_get_lpn_polltimeout_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_lpn_polltimeout.handle; + } + return rsp->data.rsp_config_client_get_lpn_polltimeout.result; + +} + +sl_status_t sl_btmesh_config_client_get_dcd(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t page, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_get_dcd.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_get_dcd.server_address=server_address; + cmd->data.cmd_config_client_get_dcd.page=page; + + cmd->header=sl_btmesh_cmd_config_client_get_dcd_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_get_dcd.handle; + } + return rsp->data.rsp_config_client_get_dcd.result; + +} + +sl_status_t sl_btmesh_config_client_reset_node(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_reset_node.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_config_client_reset_node.server_address=server_address; + + cmd->header=sl_btmesh_cmd_config_client_reset_node_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_config_client_reset_node.handle; + } + return rsp->data.rsp_config_client_reset_node.result; + +} + +sl_status_t sl_btmesh_config_client_set_request_timeout_for_node(uint16_t lpn_address, + uint16_t timeout_ms) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_config_client_set_request_timeout_for_node.lpn_address=lpn_address; + cmd->data.cmd_config_client_set_request_timeout_for_node.timeout_ms=timeout_ms; + + cmd->header=sl_btmesh_cmd_config_client_set_request_timeout_for_node_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_config_client_set_request_timeout_for_node.result; + +} + +sl_status_t sl_btmesh_mbt_client_init(uint16_t elem_index, + uint16_t max_servers, + uint16_t max_blocks, + uint16_t max_chunks_per_block) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_init.elem_index=elem_index; + cmd->data.cmd_mbt_client_init.max_servers=max_servers; + cmd->data.cmd_mbt_client_init.max_blocks=max_blocks; + cmd->data.cmd_mbt_client_init.max_chunks_per_block=max_chunks_per_block; + + cmd->header=sl_btmesh_cmd_mbt_client_init_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_client_init.result; + +} + +sl_status_t sl_btmesh_mbt_client_setup(uint16_t elem_index, + sl_bt_uuid_64_t blob_id, + uint32_t blob_size, + uint16_t appkey_index, + uint8_t ttl, + uint16_t timeout_base, + uint8_t supported_transfer_modes, + uint16_t group_address, + uuid_128 virtual_address, + uint16_t multicast_threshold, + size_t servers_len, + const uint8_t* servers) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_setup.elem_index=elem_index; + cmd->data.cmd_mbt_client_setup.blob_id=blob_id; + cmd->data.cmd_mbt_client_setup.blob_size=blob_size; + cmd->data.cmd_mbt_client_setup.appkey_index=appkey_index; + cmd->data.cmd_mbt_client_setup.ttl=ttl; + cmd->data.cmd_mbt_client_setup.timeout_base=timeout_base; + cmd->data.cmd_mbt_client_setup.supported_transfer_modes=supported_transfer_modes; + cmd->data.cmd_mbt_client_setup.group_address=group_address; + cmd->data.cmd_mbt_client_setup.virtual_address=virtual_address; + cmd->data.cmd_mbt_client_setup.multicast_threshold=multicast_threshold; + if ((41+servers_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_mbt_client_setup.servers.len=servers_len; + memcpy(cmd->data.cmd_mbt_client_setup.servers.data,servers,servers_len); + + cmd->header=sl_btmesh_cmd_mbt_client_setup_id+(((41+servers_len)&0xff)<<8)+(((41+servers_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_client_setup.result; + +} + +sl_status_t sl_btmesh_mbt_client_query_information(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_query_information.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_mbt_client_query_information_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_client_query_information.result; + +} + +sl_status_t sl_btmesh_mbt_client_get_server_status(uint16_t elem_index, + uint16_t server_index, + uint16_t *server_address, + uint8_t *current_procedure_status, + uint16_t *rx_blocks, + uint16_t *rx_chunks) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_get_server_status.elem_index=elem_index; + cmd->data.cmd_mbt_client_get_server_status.server_index=server_index; + + cmd->header=sl_btmesh_cmd_mbt_client_get_server_status_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (server_address) { + *server_address = rsp->data.rsp_mbt_client_get_server_status.server_address; + } + if (current_procedure_status) { + *current_procedure_status = rsp->data.rsp_mbt_client_get_server_status.current_procedure_status; + } + if (rx_blocks) { + *rx_blocks = rsp->data.rsp_mbt_client_get_server_status.rx_blocks; + } + if (rx_chunks) { + *rx_chunks = rsp->data.rsp_mbt_client_get_server_status.rx_chunks; + } + return rsp->data.rsp_mbt_client_get_server_status.result; + +} + +sl_status_t sl_btmesh_mbt_client_add_server(uint16_t elem_index, + uint16_t server_address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_add_server.elem_index=elem_index; + cmd->data.cmd_mbt_client_add_server.server_address=server_address; + + cmd->header=sl_btmesh_cmd_mbt_client_add_server_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_client_add_server.result; + +} + +sl_status_t sl_btmesh_mbt_client_start_transfer(uint16_t elem_index, + uint8_t block_size_log, + uint8_t transfer_mode) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_start_transfer.elem_index=elem_index; + cmd->data.cmd_mbt_client_start_transfer.block_size_log=block_size_log; + cmd->data.cmd_mbt_client_start_transfer.transfer_mode=transfer_mode; + + cmd->header=sl_btmesh_cmd_mbt_client_start_transfer_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_client_start_transfer.result; + +} + +sl_status_t sl_btmesh_mbt_client_start_block(uint16_t elem_index, + uint16_t chunk_size, + uint16_t *block_number, + uint32_t *block_size) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_start_block.elem_index=elem_index; + cmd->data.cmd_mbt_client_start_block.chunk_size=chunk_size; + + cmd->header=sl_btmesh_cmd_mbt_client_start_block_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (block_number) { + *block_number = rsp->data.rsp_mbt_client_start_block.block_number; + } + if (block_size) { + *block_size = rsp->data.rsp_mbt_client_start_block.block_size; + } + return rsp->data.rsp_mbt_client_start_block.result; + +} + +sl_status_t sl_btmesh_mbt_client_send_chunk_request_rsp(uint16_t elem_index, + size_t data_len, + const uint8_t* data) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_send_chunk_request_rsp.elem_index=elem_index; + if ((3+data_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_mbt_client_send_chunk_request_rsp.data.len=data_len; + memcpy(cmd->data.cmd_mbt_client_send_chunk_request_rsp.data.data,data,data_len); + + cmd->header=sl_btmesh_cmd_mbt_client_send_chunk_request_rsp_id+(((3+data_len)&0xff)<<8)+(((3+data_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_client_send_chunk_request_rsp.result; + +} + +sl_status_t sl_btmesh_mbt_client_query_block_status(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_query_block_status.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_mbt_client_query_block_status_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_client_query_block_status.result; + +} + +sl_status_t sl_btmesh_mbt_client_get_status(uint16_t elem_index, + uint8_t *state, + uint16_t *total_blocks, + uint16_t *total_chunks) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_get_status.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_mbt_client_get_status_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (state) { + *state = rsp->data.rsp_mbt_client_get_status.state; + } + if (total_blocks) { + *total_blocks = rsp->data.rsp_mbt_client_get_status.total_blocks; + } + if (total_chunks) { + *total_chunks = rsp->data.rsp_mbt_client_get_status.total_chunks; + } + return rsp->data.rsp_mbt_client_get_status.result; + +} + +sl_status_t sl_btmesh_mbt_client_get_transfer_status(uint16_t elem_index, + uint16_t server_address, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_get_transfer_status.elem_index=elem_index; + cmd->data.cmd_mbt_client_get_transfer_status.server_address=server_address; + cmd->data.cmd_mbt_client_get_transfer_status.virtual_address=virtual_address; + cmd->data.cmd_mbt_client_get_transfer_status.appkey_index=appkey_index; + cmd->data.cmd_mbt_client_get_transfer_status.ttl=ttl; + + cmd->header=sl_btmesh_cmd_mbt_client_get_transfer_status_id+(((23)&0xff)<<8)+(((23)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_client_get_transfer_status.result; + +} + +sl_status_t sl_btmesh_mbt_client_cancel_transfer(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_cancel_transfer.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_mbt_client_cancel_transfer_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_client_cancel_transfer.result; + +} + +sl_status_t sl_btmesh_mbt_client_abort(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_client_abort.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_mbt_client_abort_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_client_abort.result; + +} + +sl_status_t sl_btmesh_mbt_server_init(uint16_t elem_index, + uint8_t min_block_size_log, + uint8_t max_block_size_log, + uint16_t max_chunks_per_block, + uint16_t max_chunk_size, + uint32_t max_blob_size, + uint8_t supported_transfer_modes, + uint16_t pull_mode_chunks_to_request, + uint16_t pull_mode_retry_interval_ms, + uint16_t pull_mode_retry_count) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_server_init.elem_index=elem_index; + cmd->data.cmd_mbt_server_init.min_block_size_log=min_block_size_log; + cmd->data.cmd_mbt_server_init.max_block_size_log=max_block_size_log; + cmd->data.cmd_mbt_server_init.max_chunks_per_block=max_chunks_per_block; + cmd->data.cmd_mbt_server_init.max_chunk_size=max_chunk_size; + cmd->data.cmd_mbt_server_init.max_blob_size=max_blob_size; + cmd->data.cmd_mbt_server_init.supported_transfer_modes=supported_transfer_modes; + cmd->data.cmd_mbt_server_init.pull_mode_chunks_to_request=pull_mode_chunks_to_request; + cmd->data.cmd_mbt_server_init.pull_mode_retry_interval_ms=pull_mode_retry_interval_ms; + cmd->data.cmd_mbt_server_init.pull_mode_retry_count=pull_mode_retry_count; + + cmd->header=sl_btmesh_cmd_mbt_server_init_id+(((19)&0xff)<<8)+(((19)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_server_init.result; + +} + +sl_status_t sl_btmesh_mbt_server_start(uint16_t elem_index, + sl_bt_uuid_64_t blob_id, + uint16_t timeout_10s, + uint8_t ttl) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_server_start.elem_index=elem_index; + cmd->data.cmd_mbt_server_start.blob_id=blob_id; + cmd->data.cmd_mbt_server_start.timeout_10s=timeout_10s; + cmd->data.cmd_mbt_server_start.ttl=ttl; + + cmd->header=sl_btmesh_cmd_mbt_server_start_id+(((13)&0xff)<<8)+(((13)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_server_start.result; + +} + +sl_status_t sl_btmesh_mbt_server_get_transfer_status(uint16_t elem_index, + uint8_t *state, + sl_bt_uuid_64_t *blob_id, + uint32_t *blob_size, + uint16_t *block_number, + size_t max_blocks_missing_mask_size, + size_t *blocks_missing_mask_len, + uint8_t *blocks_missing_mask) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_server_get_transfer_status.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_mbt_server_get_transfer_status_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (state) { + *state = rsp->data.rsp_mbt_server_get_transfer_status.state; + } + if (blob_id) { + *blob_id = rsp->data.rsp_mbt_server_get_transfer_status.blob_id; + } + if (blob_size) { + *blob_size = rsp->data.rsp_mbt_server_get_transfer_status.blob_size; + } + if (block_number) { + *block_number = rsp->data.rsp_mbt_server_get_transfer_status.block_number; + } + if (blocks_missing_mask_len) { + *blocks_missing_mask_len = rsp->data.rsp_mbt_server_get_transfer_status.blocks_missing_mask.len; + } + if (blocks_missing_mask && (rsp->data.rsp_mbt_server_get_transfer_status.blocks_missing_mask.len <= max_blocks_missing_mask_size)) { + memcpy(blocks_missing_mask,rsp->data.rsp_mbt_server_get_transfer_status.blocks_missing_mask.data,rsp->data.rsp_mbt_server_get_transfer_status.blocks_missing_mask.len); + } + return rsp->data.rsp_mbt_server_get_transfer_status.result; + +} + +sl_status_t sl_btmesh_mbt_server_transfer_complete(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_server_transfer_complete.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_mbt_server_transfer_complete_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_server_transfer_complete.result; + +} + +sl_status_t sl_btmesh_mbt_server_abort(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_server_abort.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_mbt_server_abort_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_server_abort.result; + +} + +sl_status_t sl_btmesh_mbt_server_set_pull_mode_parameters(uint16_t elem_index, + uint16_t pull_mode_retry_interval_ms, + uint16_t pull_mode_retry_count) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_server_set_pull_mode_parameters.elem_index=elem_index; + cmd->data.cmd_mbt_server_set_pull_mode_parameters.pull_mode_retry_interval_ms=pull_mode_retry_interval_ms; + cmd->data.cmd_mbt_server_set_pull_mode_parameters.pull_mode_retry_count=pull_mode_retry_count; + + cmd->header=sl_btmesh_cmd_mbt_server_set_pull_mode_parameters_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_server_set_pull_mode_parameters.result; + +} + +sl_status_t sl_btmesh_mbt_server_transfer_start_rsp(uint16_t elem_index, + uint8_t status) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_mbt_server_transfer_start_rsp.elem_index=elem_index; + cmd->data.cmd_mbt_server_transfer_start_rsp.status=status; + + cmd->header=sl_btmesh_cmd_mbt_server_transfer_start_rsp_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_mbt_server_transfer_start_rsp.result; + +} + +sl_status_t sl_btmesh_sensor_server_init(uint16_t elem_index, + size_t descriptors_len, + const uint8_t* descriptors) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_server_init.elem_index=elem_index; + if ((3+descriptors_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_server_init.descriptors.len=descriptors_len; + memcpy(cmd->data.cmd_sensor_server_init.descriptors.data,descriptors,descriptors_len); + + cmd->header=sl_btmesh_cmd_sensor_server_init_id+(((3+descriptors_len)&0xff)<<8)+(((3+descriptors_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_server_init.result; + +} + +sl_status_t sl_btmesh_sensor_server_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_server_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_sensor_server_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_server_deinit.result; + +} + +sl_status_t sl_btmesh_sensor_server_send_descriptor_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + size_t descriptors_len, + const uint8_t* descriptors) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_server_send_descriptor_status.client_address=client_address; + cmd->data.cmd_sensor_server_send_descriptor_status.elem_index=elem_index; + cmd->data.cmd_sensor_server_send_descriptor_status.appkey_index=appkey_index; + cmd->data.cmd_sensor_server_send_descriptor_status.flags=flags; + if ((8+descriptors_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_server_send_descriptor_status.descriptors.len=descriptors_len; + memcpy(cmd->data.cmd_sensor_server_send_descriptor_status.descriptors.data,descriptors,descriptors_len); + + cmd->header=sl_btmesh_cmd_sensor_server_send_descriptor_status_id+(((8+descriptors_len)&0xff)<<8)+(((8+descriptors_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_server_send_descriptor_status.result; + +} + +sl_status_t sl_btmesh_sensor_server_send_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + size_t sensor_data_len, + const uint8_t* sensor_data) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_server_send_status.client_address=client_address; + cmd->data.cmd_sensor_server_send_status.elem_index=elem_index; + cmd->data.cmd_sensor_server_send_status.appkey_index=appkey_index; + cmd->data.cmd_sensor_server_send_status.flags=flags; + if ((8+sensor_data_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_server_send_status.sensor_data.len=sensor_data_len; + memcpy(cmd->data.cmd_sensor_server_send_status.sensor_data.data,sensor_data,sensor_data_len); + + cmd->header=sl_btmesh_cmd_sensor_server_send_status_id+(((8+sensor_data_len)&0xff)<<8)+(((8+sensor_data_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_server_send_status.result; + +} + +sl_status_t sl_btmesh_sensor_server_send_column_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t sensor_data_len, + const uint8_t* sensor_data) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_server_send_column_status.client_address=client_address; + cmd->data.cmd_sensor_server_send_column_status.elem_index=elem_index; + cmd->data.cmd_sensor_server_send_column_status.appkey_index=appkey_index; + cmd->data.cmd_sensor_server_send_column_status.flags=flags; + cmd->data.cmd_sensor_server_send_column_status.property_id=property_id; + if ((10+sensor_data_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_server_send_column_status.sensor_data.len=sensor_data_len; + memcpy(cmd->data.cmd_sensor_server_send_column_status.sensor_data.data,sensor_data,sensor_data_len); + + cmd->header=sl_btmesh_cmd_sensor_server_send_column_status_id+(((10+sensor_data_len)&0xff)<<8)+(((10+sensor_data_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_server_send_column_status.result; + +} + +sl_status_t sl_btmesh_sensor_server_send_series_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t sensor_data_len, + const uint8_t* sensor_data) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_server_send_series_status.client_address=client_address; + cmd->data.cmd_sensor_server_send_series_status.elem_index=elem_index; + cmd->data.cmd_sensor_server_send_series_status.appkey_index=appkey_index; + cmd->data.cmd_sensor_server_send_series_status.flags=flags; + cmd->data.cmd_sensor_server_send_series_status.property_id=property_id; + if ((10+sensor_data_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_server_send_series_status.sensor_data.len=sensor_data_len; + memcpy(cmd->data.cmd_sensor_server_send_series_status.sensor_data.data,sensor_data,sensor_data_len); + + cmd->header=sl_btmesh_cmd_sensor_server_send_series_status_id+(((10+sensor_data_len)&0xff)<<8)+(((10+sensor_data_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_server_send_series_status.result; + +} + +sl_status_t sl_btmesh_sensor_setup_server_send_cadence_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t params_len, + const uint8_t* params) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_setup_server_send_cadence_status.client_address=client_address; + cmd->data.cmd_sensor_setup_server_send_cadence_status.elem_index=elem_index; + cmd->data.cmd_sensor_setup_server_send_cadence_status.appkey_index=appkey_index; + cmd->data.cmd_sensor_setup_server_send_cadence_status.flags=flags; + cmd->data.cmd_sensor_setup_server_send_cadence_status.property_id=property_id; + if ((10+params_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_setup_server_send_cadence_status.params.len=params_len; + memcpy(cmd->data.cmd_sensor_setup_server_send_cadence_status.params.data,params,params_len); + + cmd->header=sl_btmesh_cmd_sensor_setup_server_send_cadence_status_id+(((10+params_len)&0xff)<<8)+(((10+params_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_setup_server_send_cadence_status.result; + +} + +sl_status_t sl_btmesh_sensor_setup_server_send_settings_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t setting_ids_len, + const uint8_t* setting_ids) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_setup_server_send_settings_status.client_address=client_address; + cmd->data.cmd_sensor_setup_server_send_settings_status.elem_index=elem_index; + cmd->data.cmd_sensor_setup_server_send_settings_status.appkey_index=appkey_index; + cmd->data.cmd_sensor_setup_server_send_settings_status.flags=flags; + cmd->data.cmd_sensor_setup_server_send_settings_status.property_id=property_id; + if ((10+setting_ids_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_setup_server_send_settings_status.setting_ids.len=setting_ids_len; + memcpy(cmd->data.cmd_sensor_setup_server_send_settings_status.setting_ids.data,setting_ids,setting_ids_len); + + cmd->header=sl_btmesh_cmd_sensor_setup_server_send_settings_status_id+(((10+setting_ids_len)&0xff)<<8)+(((10+setting_ids_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_setup_server_send_settings_status.result; + +} + +sl_status_t sl_btmesh_sensor_setup_server_send_setting_status(uint16_t client_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + uint16_t setting_id, + size_t raw_value_len, + const uint8_t* raw_value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_setup_server_send_setting_status.client_address=client_address; + cmd->data.cmd_sensor_setup_server_send_setting_status.elem_index=elem_index; + cmd->data.cmd_sensor_setup_server_send_setting_status.appkey_index=appkey_index; + cmd->data.cmd_sensor_setup_server_send_setting_status.flags=flags; + cmd->data.cmd_sensor_setup_server_send_setting_status.property_id=property_id; + cmd->data.cmd_sensor_setup_server_send_setting_status.setting_id=setting_id; + if ((12+raw_value_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_setup_server_send_setting_status.raw_value.len=raw_value_len; + memcpy(cmd->data.cmd_sensor_setup_server_send_setting_status.raw_value.data,raw_value,raw_value_len); + + cmd->header=sl_btmesh_cmd_sensor_setup_server_send_setting_status_id+(((12+raw_value_len)&0xff)<<8)+(((12+raw_value_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_setup_server_send_setting_status.result; + +} + +sl_status_t sl_btmesh_sensor_client_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_sensor_client_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_client_init.result; + +} + +sl_status_t sl_btmesh_sensor_client_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_sensor_client_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_client_deinit.result; + +} + +sl_status_t sl_btmesh_sensor_client_get_descriptor(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_client_get_descriptor.server_address=server_address; + cmd->data.cmd_sensor_client_get_descriptor.elem_index=elem_index; + cmd->data.cmd_sensor_client_get_descriptor.appkey_index=appkey_index; + cmd->data.cmd_sensor_client_get_descriptor.flags=flags; + cmd->data.cmd_sensor_client_get_descriptor.property_id=property_id; + + cmd->header=sl_btmesh_cmd_sensor_client_get_descriptor_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_client_get_descriptor.result; + +} + +sl_status_t sl_btmesh_sensor_client_get(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_client_get.server_address=server_address; + cmd->data.cmd_sensor_client_get.elem_index=elem_index; + cmd->data.cmd_sensor_client_get.appkey_index=appkey_index; + cmd->data.cmd_sensor_client_get.flags=flags; + cmd->data.cmd_sensor_client_get.property_id=property_id; + + cmd->header=sl_btmesh_cmd_sensor_client_get_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_client_get.result; + +} + +sl_status_t sl_btmesh_sensor_client_get_column(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t column_id_len, + const uint8_t* column_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_client_get_column.server_address=server_address; + cmd->data.cmd_sensor_client_get_column.elem_index=elem_index; + cmd->data.cmd_sensor_client_get_column.appkey_index=appkey_index; + cmd->data.cmd_sensor_client_get_column.flags=flags; + cmd->data.cmd_sensor_client_get_column.property_id=property_id; + if ((10+column_id_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_client_get_column.column_id.len=column_id_len; + memcpy(cmd->data.cmd_sensor_client_get_column.column_id.data,column_id,column_id_len); + + cmd->header=sl_btmesh_cmd_sensor_client_get_column_id+(((10+column_id_len)&0xff)<<8)+(((10+column_id_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_client_get_column.result; + +} + +sl_status_t sl_btmesh_sensor_client_get_series(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t column_ids_len, + const uint8_t* column_ids) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_client_get_series.server_address=server_address; + cmd->data.cmd_sensor_client_get_series.elem_index=elem_index; + cmd->data.cmd_sensor_client_get_series.appkey_index=appkey_index; + cmd->data.cmd_sensor_client_get_series.flags=flags; + cmd->data.cmd_sensor_client_get_series.property_id=property_id; + if ((10+column_ids_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_client_get_series.column_ids.len=column_ids_len; + memcpy(cmd->data.cmd_sensor_client_get_series.column_ids.data,column_ids,column_ids_len); + + cmd->header=sl_btmesh_cmd_sensor_client_get_series_id+(((10+column_ids_len)&0xff)<<8)+(((10+column_ids_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_client_get_series.result; + +} + +sl_status_t sl_btmesh_sensor_client_get_cadence(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_client_get_cadence.server_address=server_address; + cmd->data.cmd_sensor_client_get_cadence.elem_index=elem_index; + cmd->data.cmd_sensor_client_get_cadence.appkey_index=appkey_index; + cmd->data.cmd_sensor_client_get_cadence.flags=flags; + cmd->data.cmd_sensor_client_get_cadence.property_id=property_id; + + cmd->header=sl_btmesh_cmd_sensor_client_get_cadence_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_client_get_cadence.result; + +} + +sl_status_t sl_btmesh_sensor_client_set_cadence(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t params_len, + const uint8_t* params) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_client_set_cadence.server_address=server_address; + cmd->data.cmd_sensor_client_set_cadence.elem_index=elem_index; + cmd->data.cmd_sensor_client_set_cadence.appkey_index=appkey_index; + cmd->data.cmd_sensor_client_set_cadence.flags=flags; + cmd->data.cmd_sensor_client_set_cadence.property_id=property_id; + if ((10+params_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_client_set_cadence.params.len=params_len; + memcpy(cmd->data.cmd_sensor_client_set_cadence.params.data,params,params_len); + + cmd->header=sl_btmesh_cmd_sensor_client_set_cadence_id+(((10+params_len)&0xff)<<8)+(((10+params_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_client_set_cadence.result; + +} + +sl_status_t sl_btmesh_sensor_client_get_settings(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_client_get_settings.server_address=server_address; + cmd->data.cmd_sensor_client_get_settings.elem_index=elem_index; + cmd->data.cmd_sensor_client_get_settings.appkey_index=appkey_index; + cmd->data.cmd_sensor_client_get_settings.flags=flags; + cmd->data.cmd_sensor_client_get_settings.property_id=property_id; + + cmd->header=sl_btmesh_cmd_sensor_client_get_settings_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_client_get_settings.result; + +} + +sl_status_t sl_btmesh_sensor_client_get_setting(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + uint16_t setting_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_client_get_setting.server_address=server_address; + cmd->data.cmd_sensor_client_get_setting.elem_index=elem_index; + cmd->data.cmd_sensor_client_get_setting.appkey_index=appkey_index; + cmd->data.cmd_sensor_client_get_setting.flags=flags; + cmd->data.cmd_sensor_client_get_setting.property_id=property_id; + cmd->data.cmd_sensor_client_get_setting.setting_id=setting_id; + + cmd->header=sl_btmesh_cmd_sensor_client_get_setting_id+(((11)&0xff)<<8)+(((11)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_client_get_setting.result; + +} + +sl_status_t sl_btmesh_sensor_client_set_setting(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + uint16_t setting_id, + size_t raw_value_len, + const uint8_t* raw_value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sensor_client_set_setting.server_address=server_address; + cmd->data.cmd_sensor_client_set_setting.elem_index=elem_index; + cmd->data.cmd_sensor_client_set_setting.appkey_index=appkey_index; + cmd->data.cmd_sensor_client_set_setting.flags=flags; + cmd->data.cmd_sensor_client_set_setting.property_id=property_id; + cmd->data.cmd_sensor_client_set_setting.setting_id=setting_id; + if ((12+raw_value_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_sensor_client_set_setting.raw_value.len=raw_value_len; + memcpy(cmd->data.cmd_sensor_client_set_setting.raw_value.data,raw_value,raw_value_len); + + cmd->header=sl_btmesh_cmd_sensor_client_set_setting_id+(((12+raw_value_len)&0xff)<<8)+(((12+raw_value_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sensor_client_set_setting.result; + +} + +sl_status_t sl_btmesh_fw_update_client_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_client_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_update_client_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_client_init.result; + +} + +sl_status_t sl_btmesh_fw_update_client_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_client_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_update_client_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_client_deinit.result; + +} + +sl_status_t sl_btmesh_fw_update_client_get_info(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl, + uint8_t first_index, + uint8_t max_entries) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_client_get_info.elem_index=elem_index; + cmd->data.cmd_fw_update_client_get_info.dst=dst; + cmd->data.cmd_fw_update_client_get_info.virtual_address=virtual_address; + cmd->data.cmd_fw_update_client_get_info.appkey_index=appkey_index; + cmd->data.cmd_fw_update_client_get_info.ttl=ttl; + cmd->data.cmd_fw_update_client_get_info.first_index=first_index; + cmd->data.cmd_fw_update_client_get_info.max_entries=max_entries; + + cmd->header=sl_btmesh_cmd_fw_update_client_get_info_id+(((25)&0xff)<<8)+(((25)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_client_get_info.result; + +} + +sl_status_t sl_btmesh_fw_update_client_get_update(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_client_get_update.elem_index=elem_index; + cmd->data.cmd_fw_update_client_get_update.dst=dst; + cmd->data.cmd_fw_update_client_get_update.virtual_address=virtual_address; + cmd->data.cmd_fw_update_client_get_update.appkey_index=appkey_index; + cmd->data.cmd_fw_update_client_get_update.ttl=ttl; + + cmd->header=sl_btmesh_cmd_fw_update_client_get_update_id+(((23)&0xff)<<8)+(((23)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_client_get_update.result; + +} + +sl_status_t sl_btmesh_fw_update_client_start_update(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl, + uint8_t update_ttl, + uint16_t update_timeout_base, + sl_bt_uuid_64_t blob_id, + uint8_t fw_index, + size_t metadata_len, + const uint8_t* metadata) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_client_start_update.elem_index=elem_index; + cmd->data.cmd_fw_update_client_start_update.dst=dst; + cmd->data.cmd_fw_update_client_start_update.virtual_address=virtual_address; + cmd->data.cmd_fw_update_client_start_update.appkey_index=appkey_index; + cmd->data.cmd_fw_update_client_start_update.ttl=ttl; + cmd->data.cmd_fw_update_client_start_update.update_ttl=update_ttl; + cmd->data.cmd_fw_update_client_start_update.update_timeout_base=update_timeout_base; + cmd->data.cmd_fw_update_client_start_update.blob_id=blob_id; + cmd->data.cmd_fw_update_client_start_update.fw_index=fw_index; + if ((36+metadata_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_update_client_start_update.metadata.len=metadata_len; + memcpy(cmd->data.cmd_fw_update_client_start_update.metadata.data,metadata,metadata_len); + + cmd->header=sl_btmesh_cmd_fw_update_client_start_update_id+(((36+metadata_len)&0xff)<<8)+(((36+metadata_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_client_start_update.result; + +} + +sl_status_t sl_btmesh_fw_update_client_cancel_update(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_client_cancel_update.elem_index=elem_index; + cmd->data.cmd_fw_update_client_cancel_update.dst=dst; + cmd->data.cmd_fw_update_client_cancel_update.virtual_address=virtual_address; + cmd->data.cmd_fw_update_client_cancel_update.appkey_index=appkey_index; + cmd->data.cmd_fw_update_client_cancel_update.ttl=ttl; + + cmd->header=sl_btmesh_cmd_fw_update_client_cancel_update_id+(((23)&0xff)<<8)+(((23)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_client_cancel_update.result; + +} + +sl_status_t sl_btmesh_fw_update_client_apply_update(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_client_apply_update.elem_index=elem_index; + cmd->data.cmd_fw_update_client_apply_update.dst=dst; + cmd->data.cmd_fw_update_client_apply_update.virtual_address=virtual_address; + cmd->data.cmd_fw_update_client_apply_update.appkey_index=appkey_index; + cmd->data.cmd_fw_update_client_apply_update.ttl=ttl; + + cmd->header=sl_btmesh_cmd_fw_update_client_apply_update_id+(((23)&0xff)<<8)+(((23)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_client_apply_update.result; + +} + +sl_status_t sl_btmesh_fw_update_client_check_metadata(uint16_t elem_index, + uint16_t dst, + uuid_128 virtual_address, + uint16_t appkey_index, + uint8_t ttl, + uint8_t fw_index, + size_t metadata_len, + const uint8_t* metadata) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_client_check_metadata.elem_index=elem_index; + cmd->data.cmd_fw_update_client_check_metadata.dst=dst; + cmd->data.cmd_fw_update_client_check_metadata.virtual_address=virtual_address; + cmd->data.cmd_fw_update_client_check_metadata.appkey_index=appkey_index; + cmd->data.cmd_fw_update_client_check_metadata.ttl=ttl; + cmd->data.cmd_fw_update_client_check_metadata.fw_index=fw_index; + if ((25+metadata_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_update_client_check_metadata.metadata.len=metadata_len; + memcpy(cmd->data.cmd_fw_update_client_check_metadata.metadata.data,metadata,metadata_len); + + cmd->header=sl_btmesh_cmd_fw_update_client_check_metadata_id+(((25+metadata_len)&0xff)<<8)+(((25+metadata_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_client_check_metadata.result; + +} + +sl_status_t sl_btmesh_lc_client_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_client_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_lc_client_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_client_init.result; + +} + +sl_status_t sl_btmesh_lc_client_get_mode(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_client_get_mode.server_address=server_address; + cmd->data.cmd_lc_client_get_mode.elem_index=elem_index; + cmd->data.cmd_lc_client_get_mode.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_lc_client_get_mode_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_client_get_mode.result; + +} + +sl_status_t sl_btmesh_lc_client_set_mode(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint8_t mode) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_client_set_mode.server_address=server_address; + cmd->data.cmd_lc_client_set_mode.elem_index=elem_index; + cmd->data.cmd_lc_client_set_mode.appkey_index=appkey_index; + cmd->data.cmd_lc_client_set_mode.flags=flags; + cmd->data.cmd_lc_client_set_mode.mode=mode; + + cmd->header=sl_btmesh_cmd_lc_client_set_mode_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_client_set_mode.result; + +} + +sl_status_t sl_btmesh_lc_client_get_om(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_client_get_om.server_address=server_address; + cmd->data.cmd_lc_client_get_om.elem_index=elem_index; + cmd->data.cmd_lc_client_get_om.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_lc_client_get_om_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_client_get_om.result; + +} + +sl_status_t sl_btmesh_lc_client_set_om(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint8_t mode) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_client_set_om.server_address=server_address; + cmd->data.cmd_lc_client_set_om.elem_index=elem_index; + cmd->data.cmd_lc_client_set_om.appkey_index=appkey_index; + cmd->data.cmd_lc_client_set_om.flags=flags; + cmd->data.cmd_lc_client_set_om.mode=mode; + + cmd->header=sl_btmesh_cmd_lc_client_set_om_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_client_set_om.result; + +} + +sl_status_t sl_btmesh_lc_client_get_light_onoff(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_client_get_light_onoff.server_address=server_address; + cmd->data.cmd_lc_client_get_light_onoff.elem_index=elem_index; + cmd->data.cmd_lc_client_get_light_onoff.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_lc_client_get_light_onoff_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_client_get_light_onoff.result; + +} + +sl_status_t sl_btmesh_lc_client_set_light_onoff(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint8_t target_state, + uint8_t tid, + uint32_t transition_time_ms, + uint16_t message_delay_ms) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_client_set_light_onoff.server_address=server_address; + cmd->data.cmd_lc_client_set_light_onoff.elem_index=elem_index; + cmd->data.cmd_lc_client_set_light_onoff.appkey_index=appkey_index; + cmd->data.cmd_lc_client_set_light_onoff.flags=flags; + cmd->data.cmd_lc_client_set_light_onoff.target_state=target_state; + cmd->data.cmd_lc_client_set_light_onoff.tid=tid; + cmd->data.cmd_lc_client_set_light_onoff.transition_time_ms=transition_time_ms; + cmd->data.cmd_lc_client_set_light_onoff.message_delay_ms=message_delay_ms; + + cmd->header=sl_btmesh_cmd_lc_client_set_light_onoff_id+(((15)&0xff)<<8)+(((15)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_client_set_light_onoff.result; + +} + +sl_status_t sl_btmesh_lc_client_get_property(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint16_t property_id) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_client_get_property.server_address=server_address; + cmd->data.cmd_lc_client_get_property.elem_index=elem_index; + cmd->data.cmd_lc_client_get_property.appkey_index=appkey_index; + cmd->data.cmd_lc_client_get_property.property_id=property_id; + + cmd->header=sl_btmesh_cmd_lc_client_get_property_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_client_get_property.result; + +} + +sl_status_t sl_btmesh_lc_client_set_property(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint16_t property_id, + size_t params_len, + const uint8_t* params) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_client_set_property.server_address=server_address; + cmd->data.cmd_lc_client_set_property.elem_index=elem_index; + cmd->data.cmd_lc_client_set_property.appkey_index=appkey_index; + cmd->data.cmd_lc_client_set_property.flags=flags; + cmd->data.cmd_lc_client_set_property.property_id=property_id; + if ((10+params_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_lc_client_set_property.params.len=params_len; + memcpy(cmd->data.cmd_lc_client_set_property.params.data,params,params_len); + + cmd->header=sl_btmesh_cmd_lc_client_set_property_id+(((10+params_len)&0xff)<<8)+(((10+params_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_client_set_property.result; + +} + +sl_status_t sl_btmesh_lc_server_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_server_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_lc_server_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_server_init.result; + +} + +sl_status_t sl_btmesh_lc_server_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_server_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_lc_server_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_server_deinit.result; + +} + +sl_status_t sl_btmesh_lc_server_update_mode(uint16_t elem_index, uint8_t mode) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_server_update_mode.elem_index=elem_index; + cmd->data.cmd_lc_server_update_mode.mode=mode; + + cmd->header=sl_btmesh_cmd_lc_server_update_mode_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_server_update_mode.result; + +} + +sl_status_t sl_btmesh_lc_server_update_om(uint16_t elem_index, uint8_t om) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_server_update_om.elem_index=elem_index; + cmd->data.cmd_lc_server_update_om.om=om; + + cmd->header=sl_btmesh_cmd_lc_server_update_om_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_server_update_om.result; + +} + +sl_status_t sl_btmesh_lc_server_update_light_onoff(uint16_t elem_index, + uint8_t light_onoff, + uint32_t transition_time_ms) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_server_update_light_onoff.elem_index=elem_index; + cmd->data.cmd_lc_server_update_light_onoff.light_onoff=light_onoff; + cmd->data.cmd_lc_server_update_light_onoff.transition_time_ms=transition_time_ms; + + cmd->header=sl_btmesh_cmd_lc_server_update_light_onoff_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_server_update_light_onoff.result; + +} + +sl_status_t sl_btmesh_lc_server_init_all_properties(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_server_init_all_properties.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_lc_server_init_all_properties_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_server_init_all_properties.result; + +} + +sl_status_t sl_btmesh_lc_server_set_publish_mask(uint16_t elem_index, + uint16_t status_type, + uint8_t value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_server_set_publish_mask.elem_index=elem_index; + cmd->data.cmd_lc_server_set_publish_mask.status_type=status_type; + cmd->data.cmd_lc_server_set_publish_mask.value=value; + + cmd->header=sl_btmesh_cmd_lc_server_set_publish_mask_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_server_set_publish_mask.result; + +} + +sl_status_t sl_btmesh_lc_server_set_regulator_interval(uint16_t elem_index, + uint8_t value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_server_set_regulator_interval.elem_index=elem_index; + cmd->data.cmd_lc_server_set_regulator_interval.value=value; + + cmd->header=sl_btmesh_cmd_lc_server_set_regulator_interval_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_server_set_regulator_interval.result; + +} + +sl_status_t sl_btmesh_lc_server_set_event_mask(uint16_t elem_index, + uint16_t event_type, + uint8_t value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_server_set_event_mask.elem_index=elem_index; + cmd->data.cmd_lc_server_set_event_mask.event_type=event_type; + cmd->data.cmd_lc_server_set_event_mask.value=value; + + cmd->header=sl_btmesh_cmd_lc_server_set_event_mask_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_server_set_event_mask.result; + +} + +sl_status_t sl_btmesh_lc_server_get_lc_state(uint16_t elem_index, + uint8_t *state, + uint32_t *transition_time) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_server_get_lc_state.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_lc_server_get_lc_state_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (state) { + *state = rsp->data.rsp_lc_server_get_lc_state.state; + } + if (transition_time) { + *transition_time = rsp->data.rsp_lc_server_get_lc_state.transition_time; + } + return rsp->data.rsp_lc_server_get_lc_state.result; + +} + +sl_status_t sl_btmesh_lc_setup_server_update_property(uint16_t elem_index, + uint16_t property_id, + size_t params_len, + const uint8_t* params) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lc_setup_server_update_property.elem_index=elem_index; + cmd->data.cmd_lc_setup_server_update_property.property_id=property_id; + if ((5+params_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_lc_setup_server_update_property.params.len=params_len; + memcpy(cmd->data.cmd_lc_setup_server_update_property.params.data,params,params_len); + + cmd->header=sl_btmesh_cmd_lc_setup_server_update_property_id+(((5+params_len)&0xff)<<8)+(((5+params_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lc_setup_server_update_property.result; + +} + +sl_status_t sl_btmesh_scene_client_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scene_client_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_scene_client_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scene_client_init.result; + +} + +sl_status_t sl_btmesh_scene_client_get(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scene_client_get.server_address=server_address; + cmd->data.cmd_scene_client_get.elem_index=elem_index; + cmd->data.cmd_scene_client_get.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_scene_client_get_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scene_client_get.result; + +} + +sl_status_t sl_btmesh_scene_client_get_register(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scene_client_get_register.server_address=server_address; + cmd->data.cmd_scene_client_get_register.elem_index=elem_index; + cmd->data.cmd_scene_client_get_register.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_scene_client_get_register_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scene_client_get_register.result; + +} + +sl_status_t sl_btmesh_scene_client_recall(uint16_t server_address, + uint16_t elem_index, + uint16_t selected_scene, + uint16_t appkey_index, + uint8_t flags, + uint8_t tid, + uint32_t transition_time_ms, + uint16_t delay_ms) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scene_client_recall.server_address=server_address; + cmd->data.cmd_scene_client_recall.elem_index=elem_index; + cmd->data.cmd_scene_client_recall.selected_scene=selected_scene; + cmd->data.cmd_scene_client_recall.appkey_index=appkey_index; + cmd->data.cmd_scene_client_recall.flags=flags; + cmd->data.cmd_scene_client_recall.tid=tid; + cmd->data.cmd_scene_client_recall.transition_time_ms=transition_time_ms; + cmd->data.cmd_scene_client_recall.delay_ms=delay_ms; + + cmd->header=sl_btmesh_cmd_scene_client_recall_id+(((16)&0xff)<<8)+(((16)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scene_client_recall.result; + +} + +sl_status_t sl_btmesh_scene_client_store(uint16_t server_address, + uint16_t elem_index, + uint16_t selected_scene, + uint16_t appkey_index, + uint8_t flags) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scene_client_store.server_address=server_address; + cmd->data.cmd_scene_client_store.elem_index=elem_index; + cmd->data.cmd_scene_client_store.selected_scene=selected_scene; + cmd->data.cmd_scene_client_store.appkey_index=appkey_index; + cmd->data.cmd_scene_client_store.flags=flags; + + cmd->header=sl_btmesh_cmd_scene_client_store_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scene_client_store.result; + +} + +sl_status_t sl_btmesh_scene_client_delete(uint16_t server_address, + uint16_t elem_index, + uint16_t selected_scene, + uint16_t appkey_index, + uint8_t flags) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scene_client_delete.server_address=server_address; + cmd->data.cmd_scene_client_delete.elem_index=elem_index; + cmd->data.cmd_scene_client_delete.selected_scene=selected_scene; + cmd->data.cmd_scene_client_delete.appkey_index=appkey_index; + cmd->data.cmd_scene_client_delete.flags=flags; + + cmd->header=sl_btmesh_cmd_scene_client_delete_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scene_client_delete.result; + +} + +sl_status_t sl_btmesh_scene_server_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scene_server_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_scene_server_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scene_server_init.result; + +} + +sl_status_t sl_btmesh_scene_server_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scene_server_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_scene_server_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scene_server_deinit.result; + +} + +sl_status_t sl_btmesh_scene_server_reset_register(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scene_server_reset_register.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_scene_server_reset_register_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scene_server_reset_register.result; + +} + +sl_status_t sl_btmesh_scene_server_enable_compact_recall_events() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_scene_server_enable_compact_recall_events_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scene_server_enable_compact_recall_events.result; + +} + +sl_status_t sl_btmesh_scene_setup_server_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scene_setup_server_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_scene_setup_server_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scene_setup_server_init.result; + +} + +sl_status_t sl_btmesh_scheduler_client_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scheduler_client_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_scheduler_client_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scheduler_client_init.result; + +} + +sl_status_t sl_btmesh_scheduler_client_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scheduler_client_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_scheduler_client_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scheduler_client_deinit.result; + +} + +sl_status_t sl_btmesh_scheduler_client_get(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scheduler_client_get.server_address=server_address; + cmd->data.cmd_scheduler_client_get.elem_index=elem_index; + cmd->data.cmd_scheduler_client_get.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_scheduler_client_get_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scheduler_client_get.result; + +} + +sl_status_t sl_btmesh_scheduler_client_get_action(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scheduler_client_get_action.server_address=server_address; + cmd->data.cmd_scheduler_client_get_action.elem_index=elem_index; + cmd->data.cmd_scheduler_client_get_action.appkey_index=appkey_index; + cmd->data.cmd_scheduler_client_get_action.index=index; + + cmd->header=sl_btmesh_cmd_scheduler_client_get_action_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scheduler_client_get_action.result; + +} + +sl_status_t sl_btmesh_scheduler_client_set_action(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t flags, + uint8_t index, + uint8_t year, + uint16_t month, + uint8_t day, + uint8_t hour, + uint8_t minute, + uint8_t second, + uint8_t day_of_week, + uint8_t action, + uint32_t transition_time_ms, + uint16_t scene_number) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scheduler_client_set_action.server_address=server_address; + cmd->data.cmd_scheduler_client_set_action.elem_index=elem_index; + cmd->data.cmd_scheduler_client_set_action.appkey_index=appkey_index; + cmd->data.cmd_scheduler_client_set_action.flags=flags; + cmd->data.cmd_scheduler_client_set_action.index=index; + cmd->data.cmd_scheduler_client_set_action.year=year; + cmd->data.cmd_scheduler_client_set_action.month=month; + cmd->data.cmd_scheduler_client_set_action.day=day; + cmd->data.cmd_scheduler_client_set_action.hour=hour; + cmd->data.cmd_scheduler_client_set_action.minute=minute; + cmd->data.cmd_scheduler_client_set_action.second=second; + cmd->data.cmd_scheduler_client_set_action.day_of_week=day_of_week; + cmd->data.cmd_scheduler_client_set_action.action=action; + cmd->data.cmd_scheduler_client_set_action.transition_time_ms=transition_time_ms; + cmd->data.cmd_scheduler_client_set_action.scene_number=scene_number; + + cmd->header=sl_btmesh_cmd_scheduler_client_set_action_id+(((23)&0xff)<<8)+(((23)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scheduler_client_set_action.result; + +} + +sl_status_t sl_btmesh_scheduler_server_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scheduler_server_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_scheduler_server_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scheduler_server_init.result; + +} + +sl_status_t sl_btmesh_scheduler_server_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scheduler_server_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_scheduler_server_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scheduler_server_deinit.result; + +} + +sl_status_t sl_btmesh_scheduler_server_get(uint16_t elem_index, + uint16_t *status) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scheduler_server_get.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_scheduler_server_get_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (status) { + *status = rsp->data.rsp_scheduler_server_get.status; + } + return rsp->data.rsp_scheduler_server_get.result; + +} + +sl_status_t sl_btmesh_scheduler_server_get_action(uint16_t elem_index, + uint8_t index, + uint8_t *index_, + uint8_t *year, + uint16_t *month, + uint8_t *day, + uint8_t *hour, + uint8_t *minute, + uint8_t *second, + uint8_t *day_of_week, + uint8_t *action, + uint32_t *transition_time_ms, + uint16_t *scene_number) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scheduler_server_get_action.elem_index=elem_index; + cmd->data.cmd_scheduler_server_get_action.index=index; + + cmd->header=sl_btmesh_cmd_scheduler_server_get_action_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (index_) { + *index_ = rsp->data.rsp_scheduler_server_get_action.index_; + } + if (year) { + *year = rsp->data.rsp_scheduler_server_get_action.year; + } + if (month) { + *month = rsp->data.rsp_scheduler_server_get_action.month; + } + if (day) { + *day = rsp->data.rsp_scheduler_server_get_action.day; + } + if (hour) { + *hour = rsp->data.rsp_scheduler_server_get_action.hour; + } + if (minute) { + *minute = rsp->data.rsp_scheduler_server_get_action.minute; + } + if (second) { + *second = rsp->data.rsp_scheduler_server_get_action.second; + } + if (day_of_week) { + *day_of_week = rsp->data.rsp_scheduler_server_get_action.day_of_week; + } + if (action) { + *action = rsp->data.rsp_scheduler_server_get_action.action; + } + if (transition_time_ms) { + *transition_time_ms = rsp->data.rsp_scheduler_server_get_action.transition_time_ms; + } + if (scene_number) { + *scene_number = rsp->data.rsp_scheduler_server_get_action.scene_number; + } + return rsp->data.rsp_scheduler_server_get_action.result; + +} + +sl_status_t sl_btmesh_scheduler_server_set_action(uint16_t elem_index, + uint8_t index, + uint8_t year, + uint16_t month, + uint8_t day, + uint8_t hour, + uint8_t minute, + uint8_t second, + uint8_t day_of_week, + uint8_t action, + uint32_t transition_time_ms, + uint16_t scene_number) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_scheduler_server_set_action.elem_index=elem_index; + cmd->data.cmd_scheduler_server_set_action.index=index; + cmd->data.cmd_scheduler_server_set_action.year=year; + cmd->data.cmd_scheduler_server_set_action.month=month; + cmd->data.cmd_scheduler_server_set_action.day=day; + cmd->data.cmd_scheduler_server_set_action.hour=hour; + cmd->data.cmd_scheduler_server_set_action.minute=minute; + cmd->data.cmd_scheduler_server_set_action.second=second; + cmd->data.cmd_scheduler_server_set_action.day_of_week=day_of_week; + cmd->data.cmd_scheduler_server_set_action.action=action; + cmd->data.cmd_scheduler_server_set_action.transition_time_ms=transition_time_ms; + cmd->data.cmd_scheduler_server_set_action.scene_number=scene_number; + + cmd->header=sl_btmesh_cmd_scheduler_server_set_action_id+(((18)&0xff)<<8)+(((18)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_scheduler_server_set_action.result; + +} + +sl_status_t sl_btmesh_fw_update_server_init(uint16_t elem_index, + uint8_t num_installed_fw, + uint8_t max_metadata_len) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_server_init.elem_index=elem_index; + cmd->data.cmd_fw_update_server_init.num_installed_fw=num_installed_fw; + cmd->data.cmd_fw_update_server_init.max_metadata_len=max_metadata_len; + + cmd->header=sl_btmesh_cmd_fw_update_server_init_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_server_init.result; + +} + +sl_status_t sl_btmesh_fw_update_server_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_server_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_update_server_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_server_deinit.result; + +} + +sl_status_t sl_btmesh_fw_update_server_check_fw_metadata_rsp(uint16_t elem_index, + uint8_t response_type, + uint8_t additional_information, + uint8_t fw_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_server_check_fw_metadata_rsp.elem_index=elem_index; + cmd->data.cmd_fw_update_server_check_fw_metadata_rsp.response_type=response_type; + cmd->data.cmd_fw_update_server_check_fw_metadata_rsp.additional_information=additional_information; + cmd->data.cmd_fw_update_server_check_fw_metadata_rsp.fw_index=fw_index; + + cmd->header=sl_btmesh_cmd_fw_update_server_check_fw_metadata_rsp_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_server_check_fw_metadata_rsp.result; + +} + +sl_status_t sl_btmesh_fw_update_server_update_start_rsp(uint16_t elem_index, + uint8_t response_type, + uint8_t additional_information) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_server_update_start_rsp.elem_index=elem_index; + cmd->data.cmd_fw_update_server_update_start_rsp.response_type=response_type; + cmd->data.cmd_fw_update_server_update_start_rsp.additional_information=additional_information; + + cmd->header=sl_btmesh_cmd_fw_update_server_update_start_rsp_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_server_update_start_rsp.result; + +} + +sl_status_t sl_btmesh_fw_update_server_verify_fw_rsp(uint16_t elem_index, + uint8_t accept) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_server_verify_fw_rsp.elem_index=elem_index; + cmd->data.cmd_fw_update_server_verify_fw_rsp.accept=accept; + + cmd->header=sl_btmesh_cmd_fw_update_server_verify_fw_rsp_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_server_verify_fw_rsp.result; + +} + +sl_status_t sl_btmesh_fw_update_server_distributor_self_update_rsp(uint16_t elem_index, + uint8_t response_type, + uint8_t additional_information) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_update_server_distributor_self_update_rsp.elem_index=elem_index; + cmd->data.cmd_fw_update_server_distributor_self_update_rsp.response_type=response_type; + cmd->data.cmd_fw_update_server_distributor_self_update_rsp.additional_information=additional_information; + + cmd->header=sl_btmesh_cmd_fw_update_server_distributor_self_update_rsp_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_update_server_distributor_self_update_rsp.result; + +} + +sl_status_t sl_btmesh_time_server_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_time_server_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_server_init.result; + +} + +sl_status_t sl_btmesh_time_server_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_time_server_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_server_deinit.result; + +} + +sl_status_t sl_btmesh_time_server_get_time(uint16_t elem_index, + uint64_t *tai_seconds, + uint8_t *subsecond, + uint8_t *uncertainty, + uint8_t *time_authority, + int16_t *time_zone_offset, + int32_t *tai_utc_delta) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_get_time.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_time_server_get_time_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (tai_seconds) { + *tai_seconds = rsp->data.rsp_time_server_get_time.tai_seconds; + } + if (subsecond) { + *subsecond = rsp->data.rsp_time_server_get_time.subsecond; + } + if (uncertainty) { + *uncertainty = rsp->data.rsp_time_server_get_time.uncertainty; + } + if (time_authority) { + *time_authority = rsp->data.rsp_time_server_get_time.time_authority; + } + if (time_zone_offset) { + *time_zone_offset = rsp->data.rsp_time_server_get_time.time_zone_offset; + } + if (tai_utc_delta) { + *tai_utc_delta = rsp->data.rsp_time_server_get_time.tai_utc_delta; + } + return rsp->data.rsp_time_server_get_time.result; + +} + +sl_status_t sl_btmesh_time_server_set_time(uint16_t elem_index, + uint64_t tai_seconds, + uint8_t subsecond, + uint8_t uncertainty, + uint8_t time_authority, + int16_t time_zone_offset, + int32_t tai_utc_delta) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_set_time.elem_index=elem_index; + cmd->data.cmd_time_server_set_time.tai_seconds=tai_seconds; + cmd->data.cmd_time_server_set_time.subsecond=subsecond; + cmd->data.cmd_time_server_set_time.uncertainty=uncertainty; + cmd->data.cmd_time_server_set_time.time_authority=time_authority; + cmd->data.cmd_time_server_set_time.time_zone_offset=time_zone_offset; + cmd->data.cmd_time_server_set_time.tai_utc_delta=tai_utc_delta; + + cmd->header=sl_btmesh_cmd_time_server_set_time_id+(((19)&0xff)<<8)+(((19)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_server_set_time.result; + +} + +sl_status_t sl_btmesh_time_server_get_time_zone_offset_new(uint16_t elem_index, + int16_t *new_offset, + uint64_t *tai_of_zone_change) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_get_time_zone_offset_new.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_time_server_get_time_zone_offset_new_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (new_offset) { + *new_offset = rsp->data.rsp_time_server_get_time_zone_offset_new.new_offset; + } + if (tai_of_zone_change) { + *tai_of_zone_change = rsp->data.rsp_time_server_get_time_zone_offset_new.tai_of_zone_change; + } + return rsp->data.rsp_time_server_get_time_zone_offset_new.result; + +} + +sl_status_t sl_btmesh_time_server_set_time_zone_offset_new(uint16_t elem_index, + int16_t new_offset, + uint64_t tai_of_zone_change) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_set_time_zone_offset_new.elem_index=elem_index; + cmd->data.cmd_time_server_set_time_zone_offset_new.new_offset=new_offset; + cmd->data.cmd_time_server_set_time_zone_offset_new.tai_of_zone_change=tai_of_zone_change; + + cmd->header=sl_btmesh_cmd_time_server_set_time_zone_offset_new_id+(((12)&0xff)<<8)+(((12)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_server_set_time_zone_offset_new.result; + +} + +sl_status_t sl_btmesh_time_server_get_tai_utc_delta_new(uint16_t elem_index, + int32_t *new_delta, + uint64_t *tai_of_delta_change) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_get_tai_utc_delta_new.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_time_server_get_tai_utc_delta_new_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (new_delta) { + *new_delta = rsp->data.rsp_time_server_get_tai_utc_delta_new.new_delta; + } + if (tai_of_delta_change) { + *tai_of_delta_change = rsp->data.rsp_time_server_get_tai_utc_delta_new.tai_of_delta_change; + } + return rsp->data.rsp_time_server_get_tai_utc_delta_new.result; + +} + +sl_status_t sl_btmesh_time_server_set_tai_utc_delta_new(uint16_t elem_index, + int32_t new_delta, + uint64_t tai_of_delta_change) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_set_tai_utc_delta_new.elem_index=elem_index; + cmd->data.cmd_time_server_set_tai_utc_delta_new.new_delta=new_delta; + cmd->data.cmd_time_server_set_tai_utc_delta_new.tai_of_delta_change=tai_of_delta_change; + + cmd->header=sl_btmesh_cmd_time_server_set_tai_utc_delta_new_id+(((14)&0xff)<<8)+(((14)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_server_set_tai_utc_delta_new.result; + +} + +sl_status_t sl_btmesh_time_server_get_time_role(uint16_t elem_index, + uint8_t *time_role) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_get_time_role.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_time_server_get_time_role_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (time_role) { + *time_role = rsp->data.rsp_time_server_get_time_role.time_role; + } + return rsp->data.rsp_time_server_get_time_role.result; + +} + +sl_status_t sl_btmesh_time_server_set_time_role(uint16_t elem_index, + uint8_t time_role) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_set_time_role.elem_index=elem_index; + cmd->data.cmd_time_server_set_time_role.time_role=time_role; + + cmd->header=sl_btmesh_cmd_time_server_set_time_role_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_server_set_time_role.result; + +} + +sl_status_t sl_btmesh_time_server_get_datetime(uint16_t elem_index, + uint16_t *year, + uint8_t *month, + uint8_t *day, + uint8_t *hour, + uint8_t *min, + uint8_t *sec, + uint16_t *ms, + int16_t *timezone, + uint8_t *day_of_week) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_get_datetime.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_time_server_get_datetime_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (year) { + *year = rsp->data.rsp_time_server_get_datetime.year; + } + if (month) { + *month = rsp->data.rsp_time_server_get_datetime.month; + } + if (day) { + *day = rsp->data.rsp_time_server_get_datetime.day; + } + if (hour) { + *hour = rsp->data.rsp_time_server_get_datetime.hour; + } + if (min) { + *min = rsp->data.rsp_time_server_get_datetime.min; + } + if (sec) { + *sec = rsp->data.rsp_time_server_get_datetime.sec; + } + if (ms) { + *ms = rsp->data.rsp_time_server_get_datetime.ms; + } + if (timezone) { + *timezone = rsp->data.rsp_time_server_get_datetime.timezone; + } + if (day_of_week) { + *day_of_week = rsp->data.rsp_time_server_get_datetime.day_of_week; + } + return rsp->data.rsp_time_server_get_datetime.result; + +} + +sl_status_t sl_btmesh_time_server_publish(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_publish.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_time_server_publish_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_server_publish.result; + +} + +sl_status_t sl_btmesh_time_server_status(uint16_t destination_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_server_status.destination_address=destination_address; + cmd->data.cmd_time_server_status.elem_index=elem_index; + cmd->data.cmd_time_server_status.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_time_server_status_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_server_status.result; + +} + +sl_status_t sl_btmesh_time_client_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_client_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_time_client_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_client_init.result; + +} + +sl_status_t sl_btmesh_time_client_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_client_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_time_client_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_client_deinit.result; + +} + +sl_status_t sl_btmesh_time_client_get_time(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_client_get_time.server_address=server_address; + cmd->data.cmd_time_client_get_time.elem_index=elem_index; + cmd->data.cmd_time_client_get_time.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_time_client_get_time_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_client_get_time.result; + +} + +sl_status_t sl_btmesh_time_client_set_time(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint64_t tai_seconds, + uint8_t subsecond, + uint8_t uncertainty, + uint8_t time_authority, + int32_t tai_utc_delta, + int16_t time_zone_offset) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_client_set_time.server_address=server_address; + cmd->data.cmd_time_client_set_time.elem_index=elem_index; + cmd->data.cmd_time_client_set_time.appkey_index=appkey_index; + cmd->data.cmd_time_client_set_time.tai_seconds=tai_seconds; + cmd->data.cmd_time_client_set_time.subsecond=subsecond; + cmd->data.cmd_time_client_set_time.uncertainty=uncertainty; + cmd->data.cmd_time_client_set_time.time_authority=time_authority; + cmd->data.cmd_time_client_set_time.tai_utc_delta=tai_utc_delta; + cmd->data.cmd_time_client_set_time.time_zone_offset=time_zone_offset; + + cmd->header=sl_btmesh_cmd_time_client_set_time_id+(((23)&0xff)<<8)+(((23)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_client_set_time.result; + +} + +sl_status_t sl_btmesh_time_client_get_time_zone(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_client_get_time_zone.server_address=server_address; + cmd->data.cmd_time_client_get_time_zone.elem_index=elem_index; + cmd->data.cmd_time_client_get_time_zone.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_time_client_get_time_zone_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_client_get_time_zone.result; + +} + +sl_status_t sl_btmesh_time_client_set_time_zone(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + int16_t time_zone_offset_new, + uint64_t tai_of_zone_change) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_client_set_time_zone.server_address=server_address; + cmd->data.cmd_time_client_set_time_zone.elem_index=elem_index; + cmd->data.cmd_time_client_set_time_zone.appkey_index=appkey_index; + cmd->data.cmd_time_client_set_time_zone.time_zone_offset_new=time_zone_offset_new; + cmd->data.cmd_time_client_set_time_zone.tai_of_zone_change=tai_of_zone_change; + + cmd->header=sl_btmesh_cmd_time_client_set_time_zone_id+(((16)&0xff)<<8)+(((16)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_client_set_time_zone.result; + +} + +sl_status_t sl_btmesh_time_client_get_tai_utc_delta(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_client_get_tai_utc_delta.server_address=server_address; + cmd->data.cmd_time_client_get_tai_utc_delta.elem_index=elem_index; + cmd->data.cmd_time_client_get_tai_utc_delta.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_time_client_get_tai_utc_delta_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_client_get_tai_utc_delta.result; + +} + +sl_status_t sl_btmesh_time_client_set_tai_utc_delta(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + int32_t tai_utc_delta_new, + uint64_t tai_of_delta_change) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_client_set_tai_utc_delta.server_address=server_address; + cmd->data.cmd_time_client_set_tai_utc_delta.elem_index=elem_index; + cmd->data.cmd_time_client_set_tai_utc_delta.appkey_index=appkey_index; + cmd->data.cmd_time_client_set_tai_utc_delta.tai_utc_delta_new=tai_utc_delta_new; + cmd->data.cmd_time_client_set_tai_utc_delta.tai_of_delta_change=tai_of_delta_change; + + cmd->header=sl_btmesh_cmd_time_client_set_tai_utc_delta_id+(((18)&0xff)<<8)+(((18)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_client_set_tai_utc_delta.result; + +} + +sl_status_t sl_btmesh_time_client_get_time_role(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_client_get_time_role.server_address=server_address; + cmd->data.cmd_time_client_get_time_role.elem_index=elem_index; + cmd->data.cmd_time_client_get_time_role.appkey_index=appkey_index; + + cmd->header=sl_btmesh_cmd_time_client_get_time_role_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_client_get_time_role.result; + +} + +sl_status_t sl_btmesh_time_client_set_time_role(uint16_t server_address, + uint16_t elem_index, + uint16_t appkey_index, + uint8_t time_role) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_time_client_set_time_role.server_address=server_address; + cmd->data.cmd_time_client_set_time_role.elem_index=elem_index; + cmd->data.cmd_time_client_set_time_role.appkey_index=appkey_index; + cmd->data.cmd_time_client_set_time_role.time_role=time_role; + + cmd->header=sl_btmesh_cmd_time_client_set_time_role_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_time_client_set_time_role.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_init(uint16_t elem_index, + uint16_t max_node_list_size, + uint16_t max_fw_entries, + uint32_t max_fw_size, + uint32_t total_store_size, + uint16_t multicast_threshold, + size_t oob_supported_uri_scheme_names_len, + const uint8_t* oob_supported_uri_scheme_names) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_init.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_init.max_node_list_size=max_node_list_size; + cmd->data.cmd_fw_dist_server_init.max_fw_entries=max_fw_entries; + cmd->data.cmd_fw_dist_server_init.max_fw_size=max_fw_size; + cmd->data.cmd_fw_dist_server_init.total_store_size=total_store_size; + cmd->data.cmd_fw_dist_server_init.multicast_threshold=multicast_threshold; + if ((17+oob_supported_uri_scheme_names_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_dist_server_init.oob_supported_uri_scheme_names.len=oob_supported_uri_scheme_names_len; + memcpy(cmd->data.cmd_fw_dist_server_init.oob_supported_uri_scheme_names.data,oob_supported_uri_scheme_names,oob_supported_uri_scheme_names_len); + + cmd->header=sl_btmesh_cmd_fw_dist_server_init_id+(((17+oob_supported_uri_scheme_names_len)&0xff)<<8)+(((17+oob_supported_uri_scheme_names_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_init.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_dist_server_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_deinit.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_upload_start_rsp(uint16_t elem_index, + uint8_t status) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_upload_start_rsp.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_upload_start_rsp.status=status; + + cmd->header=sl_btmesh_cmd_fw_dist_server_upload_start_rsp_id+(((3)&0xff)<<8)+(((3)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_upload_start_rsp.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_execute_distribution_step(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_execute_distribution_step.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_dist_server_execute_distribution_step_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_execute_distribution_step.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_upload_oob_start_rsp(uint16_t elem_index, + uint8_t status_code, + size_t fwid_len, + const uint8_t* fwid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_upload_oob_start_rsp.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_upload_oob_start_rsp.status_code=status_code; + if ((4+fwid_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_dist_server_upload_oob_start_rsp.fwid.len=fwid_len; + memcpy(cmd->data.cmd_fw_dist_server_upload_oob_start_rsp.fwid.data,fwid,fwid_len); + + cmd->header=sl_btmesh_cmd_fw_dist_server_upload_oob_start_rsp_id+(((4+fwid_len)&0xff)<<8)+(((4+fwid_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_upload_oob_start_rsp.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_set_upload_oob_metadata(uint16_t elem_index, + size_t metadata_len, + const uint8_t* metadata) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_set_upload_oob_metadata.elem_index=elem_index; + if ((3+metadata_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_dist_server_set_upload_oob_metadata.metadata.len=metadata_len; + memcpy(cmd->data.cmd_fw_dist_server_set_upload_oob_metadata.metadata.data,metadata,metadata_len); + + cmd->header=sl_btmesh_cmd_fw_dist_server_set_upload_oob_metadata_id+(((3+metadata_len)&0xff)<<8)+(((3+metadata_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_set_upload_oob_metadata.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_set_upload_oob_image_size(uint16_t elem_index, + uint32_t size) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_set_upload_oob_image_size.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_set_upload_oob_image_size.size=size; + + cmd->header=sl_btmesh_cmd_fw_dist_server_set_upload_oob_image_size_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_set_upload_oob_image_size.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_set_upload_oob_progress(uint16_t elem_index, + uint8_t error, + uint8_t progress, + uint16_t *fw_list_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_set_upload_oob_progress.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_set_upload_oob_progress.error=error; + cmd->data.cmd_fw_dist_server_set_upload_oob_progress.progress=progress; + + cmd->header=sl_btmesh_cmd_fw_dist_server_set_upload_oob_progress_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (fw_list_index) { + *fw_list_index = rsp->data.rsp_fw_dist_server_set_upload_oob_progress.fw_list_index; + } + return rsp->data.rsp_fw_dist_server_set_upload_oob_progress.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_get_node_status_by_index(uint16_t elem_index, + uint16_t entry_index, + uint16_t *address, + uint8_t *retrieved_phase, + uint8_t *update_server_status, + uint8_t *mbt_server_status, + uint8_t *transfer_progress, + uint8_t *fw_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_get_node_status_by_index.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_get_node_status_by_index.entry_index=entry_index; + + cmd->header=sl_btmesh_cmd_fw_dist_server_get_node_status_by_index_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (address) { + *address = rsp->data.rsp_fw_dist_server_get_node_status_by_index.address; + } + if (retrieved_phase) { + *retrieved_phase = rsp->data.rsp_fw_dist_server_get_node_status_by_index.retrieved_phase; + } + if (update_server_status) { + *update_server_status = rsp->data.rsp_fw_dist_server_get_node_status_by_index.update_server_status; + } + if (mbt_server_status) { + *mbt_server_status = rsp->data.rsp_fw_dist_server_get_node_status_by_index.mbt_server_status; + } + if (transfer_progress) { + *transfer_progress = rsp->data.rsp_fw_dist_server_get_node_status_by_index.transfer_progress; + } + if (fw_index) { + *fw_index = rsp->data.rsp_fw_dist_server_get_node_status_by_index.fw_index; + } + return rsp->data.rsp_fw_dist_server_get_node_status_by_index.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_get_node_status_by_address(uint16_t elem_index, + uint16_t node_address, + uint16_t *address, + uint8_t *retrieved_phase, + uint8_t *update_server_status, + uint8_t *mbt_server_status, + uint8_t *transfer_progress, + uint8_t *fw_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_get_node_status_by_address.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_get_node_status_by_address.node_address=node_address; + + cmd->header=sl_btmesh_cmd_fw_dist_server_get_node_status_by_address_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (address) { + *address = rsp->data.rsp_fw_dist_server_get_node_status_by_address.address; + } + if (retrieved_phase) { + *retrieved_phase = rsp->data.rsp_fw_dist_server_get_node_status_by_address.retrieved_phase; + } + if (update_server_status) { + *update_server_status = rsp->data.rsp_fw_dist_server_get_node_status_by_address.update_server_status; + } + if (mbt_server_status) { + *mbt_server_status = rsp->data.rsp_fw_dist_server_get_node_status_by_address.mbt_server_status; + } + if (transfer_progress) { + *transfer_progress = rsp->data.rsp_fw_dist_server_get_node_status_by_address.transfer_progress; + } + if (fw_index) { + *fw_index = rsp->data.rsp_fw_dist_server_get_node_status_by_address.fw_index; + } + return rsp->data.rsp_fw_dist_server_get_node_status_by_address.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_delete_rsp(uint16_t elem_index, + uint16_t status, + size_t fwid_len, + const uint8_t* fwid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_delete_rsp.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_delete_rsp.status=status; + if ((5+fwid_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_dist_server_delete_rsp.fwid.len=fwid_len; + memcpy(cmd->data.cmd_fw_dist_server_delete_rsp.fwid.data,fwid,fwid_len); + + cmd->header=sl_btmesh_cmd_fw_dist_server_delete_rsp_id+(((5+fwid_len)&0xff)<<8)+(((5+fwid_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_delete_rsp.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_dist_start_rsp(uint16_t elem_index, + uint16_t status) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_dist_start_rsp.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_dist_start_rsp.status=status; + + cmd->header=sl_btmesh_cmd_fw_dist_server_dist_start_rsp_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_dist_start_rsp.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_set_multicast_threshold(uint16_t elem_index, + uint16_t multicast_threshold) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_set_multicast_threshold.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_set_multicast_threshold.multicast_threshold=multicast_threshold; + + cmd->header=sl_btmesh_cmd_fw_dist_server_set_multicast_threshold_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_set_multicast_threshold.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_delete_all_rsp(uint16_t elem_index, + uint16_t status) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_delete_all_rsp.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_delete_all_rsp.status=status; + + cmd->header=sl_btmesh_cmd_fw_dist_server_delete_all_rsp_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_delete_all_rsp.result; + +} + +sl_status_t sl_btmesh_fw_dist_server_resume_rsp(uint16_t elem_index, + uint16_t status) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_server_resume_rsp.elem_index=elem_index; + cmd->data.cmd_fw_dist_server_resume_rsp.status=status; + + cmd->header=sl_btmesh_cmd_fw_dist_server_resume_rsp_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_server_resume_rsp.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_dist_client_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_init.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_dist_client_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_deinit.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_setup(uint16_t elem_index, + uint16_t appkey_index, + uint8_t ttl) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_setup.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_setup.appkey_index=appkey_index; + cmd->data.cmd_fw_dist_client_setup.ttl=ttl; + + cmd->header=sl_btmesh_cmd_fw_dist_client_setup_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_setup.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_setup_upload(uint16_t elem_index, + uint16_t server_address, + uint8_t ttl, + uint16_t timeout_base, + sl_bt_uuid_64_t blob_id, + uint32_t size, + size_t fwid_len, + const uint8_t* fwid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_setup_upload.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_setup_upload.server_address=server_address; + cmd->data.cmd_fw_dist_client_setup_upload.ttl=ttl; + cmd->data.cmd_fw_dist_client_setup_upload.timeout_base=timeout_base; + cmd->data.cmd_fw_dist_client_setup_upload.blob_id=blob_id; + cmd->data.cmd_fw_dist_client_setup_upload.size=size; + if ((20+fwid_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_dist_client_setup_upload.fwid.len=fwid_len; + memcpy(cmd->data.cmd_fw_dist_client_setup_upload.fwid.data,fwid,fwid_len); + + cmd->header=sl_btmesh_cmd_fw_dist_client_setup_upload_id+(((20+fwid_len)&0xff)<<8)+(((20+fwid_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_setup_upload.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_set_upload_metadata(uint16_t elem_index, + size_t metadata_len, + const uint8_t* metadata) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_set_upload_metadata.elem_index=elem_index; + if ((3+metadata_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_dist_client_set_upload_metadata.metadata.len=metadata_len; + memcpy(cmd->data.cmd_fw_dist_client_set_upload_metadata.metadata.data,metadata,metadata_len); + + cmd->header=sl_btmesh_cmd_fw_dist_client_set_upload_metadata_id+(((3+metadata_len)&0xff)<<8)+(((3+metadata_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_set_upload_metadata.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_get_receivers(uint16_t elem_index, + uint16_t dst, + uint16_t start_index, + uint16_t max_entries) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_get_receivers.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_get_receivers.dst=dst; + cmd->data.cmd_fw_dist_client_get_receivers.start_index=start_index; + cmd->data.cmd_fw_dist_client_get_receivers.max_entries=max_entries; + + cmd->header=sl_btmesh_cmd_fw_dist_client_get_receivers_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_get_receivers.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_get(uint16_t elem_index, uint16_t dst) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_get.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_get.dst=dst; + + cmd->header=sl_btmesh_cmd_fw_dist_client_get_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_get.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_start_distribution(uint16_t elem_index, + uint16_t dst, + uint8_t dist_appkey_index, + uint8_t dist_ttl, + uint16_t dist_timeout_base, + uint8_t transfer_mode, + uint8_t update_policy, + uint16_t fw_list_index, + uint16_t group_address, + uuid_128 virtual_address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_start_distribution.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_start_distribution.dst=dst; + cmd->data.cmd_fw_dist_client_start_distribution.dist_appkey_index=dist_appkey_index; + cmd->data.cmd_fw_dist_client_start_distribution.dist_ttl=dist_ttl; + cmd->data.cmd_fw_dist_client_start_distribution.dist_timeout_base=dist_timeout_base; + cmd->data.cmd_fw_dist_client_start_distribution.transfer_mode=transfer_mode; + cmd->data.cmd_fw_dist_client_start_distribution.update_policy=update_policy; + cmd->data.cmd_fw_dist_client_start_distribution.fw_list_index=fw_list_index; + cmd->data.cmd_fw_dist_client_start_distribution.group_address=group_address; + cmd->data.cmd_fw_dist_client_start_distribution.virtual_address=virtual_address; + + cmd->header=sl_btmesh_cmd_fw_dist_client_start_distribution_id+(((30)&0xff)<<8)+(((30)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_start_distribution.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_cancel_distribution(uint16_t elem_index, + uint16_t dst) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_cancel_distribution.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_cancel_distribution.dst=dst; + + cmd->header=sl_btmesh_cmd_fw_dist_client_cancel_distribution_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_cancel_distribution.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_apply_distribution(uint16_t elem_index, + uint16_t dst) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_apply_distribution.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_apply_distribution.dst=dst; + + cmd->header=sl_btmesh_cmd_fw_dist_client_apply_distribution_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_apply_distribution.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_suspend_distribution(uint16_t elem_index, + uint16_t dst) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_suspend_distribution.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_suspend_distribution.dst=dst; + + cmd->header=sl_btmesh_cmd_fw_dist_client_suspend_distribution_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_suspend_distribution.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_add_receivers(uint16_t elem_index, + uint16_t dst, + size_t nodes_len, + const uint8_t* nodes) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_add_receivers.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_add_receivers.dst=dst; + if ((5+nodes_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_dist_client_add_receivers.nodes.len=nodes_len; + memcpy(cmd->data.cmd_fw_dist_client_add_receivers.nodes.data,nodes,nodes_len); + + cmd->header=sl_btmesh_cmd_fw_dist_client_add_receivers_id+(((5+nodes_len)&0xff)<<8)+(((5+nodes_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_add_receivers.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_delete_all_receivers(uint16_t elem_index, + uint16_t dst) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_delete_all_receivers.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_delete_all_receivers.dst=dst; + + cmd->header=sl_btmesh_cmd_fw_dist_client_delete_all_receivers_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_delete_all_receivers.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_get_capabilities(uint16_t elem_index, + uint16_t dst) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_get_capabilities.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_get_capabilities.dst=dst; + + cmd->header=sl_btmesh_cmd_fw_dist_client_get_capabilities_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_get_capabilities.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_get_upload(uint16_t elem_index, + uint16_t dst) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_get_upload.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_get_upload.dst=dst; + + cmd->header=sl_btmesh_cmd_fw_dist_client_get_upload_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_get_upload.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_start_upload(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_start_upload.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_dist_client_start_upload_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_start_upload.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_cancel_upload(uint16_t elem_index, + uint16_t dst) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_cancel_upload.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_cancel_upload.dst=dst; + + cmd->header=sl_btmesh_cmd_fw_dist_client_cancel_upload_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_cancel_upload.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_get_fw(uint16_t elem_index, + uint16_t dst, + size_t fwid_len, + const uint8_t* fwid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_get_fw.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_get_fw.dst=dst; + if ((5+fwid_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_dist_client_get_fw.fwid.len=fwid_len; + memcpy(cmd->data.cmd_fw_dist_client_get_fw.fwid.data,fwid,fwid_len); + + cmd->header=sl_btmesh_cmd_fw_dist_client_get_fw_id+(((5+fwid_len)&0xff)<<8)+(((5+fwid_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_get_fw.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_get_fw_by_index(uint16_t elem_index, + uint16_t dst, + uint16_t index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_get_fw_by_index.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_get_fw_by_index.dst=dst; + cmd->data.cmd_fw_dist_client_get_fw_by_index.index=index; + + cmd->header=sl_btmesh_cmd_fw_dist_client_get_fw_by_index_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_get_fw_by_index.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_delete_fw(uint16_t elem_index, + uint16_t dst, + size_t fwid_len, + const uint8_t* fwid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_delete_fw.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_delete_fw.dst=dst; + if ((5+fwid_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_dist_client_delete_fw.fwid.len=fwid_len; + memcpy(cmd->data.cmd_fw_dist_client_delete_fw.fwid.data,fwid,fwid_len); + + cmd->header=sl_btmesh_cmd_fw_dist_client_delete_fw_id+(((5+fwid_len)&0xff)<<8)+(((5+fwid_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_delete_fw.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_delete_all_fw(uint16_t elem_index, + uint16_t dst) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_delete_all_fw.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_delete_all_fw.dst=dst; + + cmd->header=sl_btmesh_cmd_fw_dist_client_delete_all_fw_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_delete_all_fw.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_prepare_oob_upload(uint16_t elem_index, + size_t fwid_len, + const uint8_t* fwid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_prepare_oob_upload.elem_index=elem_index; + if ((3+fwid_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_dist_client_prepare_oob_upload.fwid.len=fwid_len; + memcpy(cmd->data.cmd_fw_dist_client_prepare_oob_upload.fwid.data,fwid,fwid_len); + + cmd->header=sl_btmesh_cmd_fw_dist_client_prepare_oob_upload_id+(((3+fwid_len)&0xff)<<8)+(((3+fwid_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_prepare_oob_upload.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_start_oob_upload(uint16_t elem_index, + uint16_t dst, + uint16_t appkey_index, + uint8_t ttl, + size_t uri_len, + const uint8_t* uri) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_start_oob_upload.elem_index=elem_index; + cmd->data.cmd_fw_dist_client_start_oob_upload.dst=dst; + cmd->data.cmd_fw_dist_client_start_oob_upload.appkey_index=appkey_index; + cmd->data.cmd_fw_dist_client_start_oob_upload.ttl=ttl; + if ((8+uri_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_dist_client_start_oob_upload.uri.len=uri_len; + memcpy(cmd->data.cmd_fw_dist_client_start_oob_upload.uri.data,uri,uri_len); + + cmd->header=sl_btmesh_cmd_fw_dist_client_start_oob_upload_id+(((8+uri_len)&0xff)<<8)+(((8+uri_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_start_oob_upload.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_suspend_upload(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_suspend_upload.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_dist_client_suspend_upload_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_suspend_upload.result; + +} + +sl_status_t sl_btmesh_fw_dist_client_resume_upload(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_dist_client_resume_upload.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_dist_client_resume_upload_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_dist_client_resume_upload.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_client_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_remote_provisioning_client_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_client_init.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_client_get_scan_capabilities(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_remote_provisioning_client_get_scan_capabilities.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_remote_provisioning_client_get_scan_capabilities.server=server; + cmd->data.cmd_remote_provisioning_client_get_scan_capabilities.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_remote_provisioning_client_get_scan_capabilities_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_client_get_scan_capabilities.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_client_start_scan(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index, + uint8_t item_limit, + uint8_t timeout_sec, + uint8_t single_scan, + uuid_128 uuid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_remote_provisioning_client_start_scan.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_remote_provisioning_client_start_scan.server=server; + cmd->data.cmd_remote_provisioning_client_start_scan.elem_index=elem_index; + cmd->data.cmd_remote_provisioning_client_start_scan.item_limit=item_limit; + cmd->data.cmd_remote_provisioning_client_start_scan.timeout_sec=timeout_sec; + cmd->data.cmd_remote_provisioning_client_start_scan.single_scan=single_scan; + cmd->data.cmd_remote_provisioning_client_start_scan.uuid=uuid; + + cmd->header=sl_btmesh_cmd_remote_provisioning_client_start_scan_id+(((25)&0xff)<<8)+(((25)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_client_start_scan.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_client_get_scan_status(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_remote_provisioning_client_get_scan_status.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_remote_provisioning_client_get_scan_status.server=server; + cmd->data.cmd_remote_provisioning_client_get_scan_status.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_remote_provisioning_client_get_scan_status_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_client_get_scan_status.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_client_stop_scan(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_remote_provisioning_client_stop_scan.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_remote_provisioning_client_stop_scan.server=server; + cmd->data.cmd_remote_provisioning_client_stop_scan.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_remote_provisioning_client_stop_scan_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_client_stop_scan.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_client_start_extended_scan(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index, + uint8_t timeout_sec, + uint8_t mode, + uuid_128 uuid, + size_t ad_types_len, + const uint8_t* ad_types) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_remote_provisioning_client_start_extended_scan.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_remote_provisioning_client_start_extended_scan.server=server; + cmd->data.cmd_remote_provisioning_client_start_extended_scan.elem_index=elem_index; + cmd->data.cmd_remote_provisioning_client_start_extended_scan.timeout_sec=timeout_sec; + cmd->data.cmd_remote_provisioning_client_start_extended_scan.mode=mode; + cmd->data.cmd_remote_provisioning_client_start_extended_scan.uuid=uuid; + if ((25+ad_types_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_remote_provisioning_client_start_extended_scan.ad_types.len=ad_types_len; + memcpy(cmd->data.cmd_remote_provisioning_client_start_extended_scan.ad_types.data,ad_types,ad_types_len); + + cmd->header=sl_btmesh_cmd_remote_provisioning_client_start_extended_scan_id+(((25+ad_types_len)&0xff)<<8)+(((25+ad_types_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_client_start_extended_scan.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_client_open_link(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index, + uint8_t timeout_sec, + uint8_t dkri, + uuid_128 uuid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_remote_provisioning_client_open_link.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_remote_provisioning_client_open_link.server=server; + cmd->data.cmd_remote_provisioning_client_open_link.elem_index=elem_index; + cmd->data.cmd_remote_provisioning_client_open_link.timeout_sec=timeout_sec; + cmd->data.cmd_remote_provisioning_client_open_link.dkri=dkri; + cmd->data.cmd_remote_provisioning_client_open_link.uuid=uuid; + + cmd->header=sl_btmesh_cmd_remote_provisioning_client_open_link_id+(((24)&0xff)<<8)+(((24)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_client_open_link.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_client_get_link_status(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_remote_provisioning_client_get_link_status.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_remote_provisioning_client_get_link_status.server=server; + cmd->data.cmd_remote_provisioning_client_get_link_status.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_remote_provisioning_client_get_link_status_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_client_get_link_status.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_client_close_link(uint16_t enc_netkey_index, + uint16_t server, + uint16_t elem_index, + uint8_t reason) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_remote_provisioning_client_close_link.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_remote_provisioning_client_close_link.server=server; + cmd->data.cmd_remote_provisioning_client_close_link.elem_index=elem_index; + cmd->data.cmd_remote_provisioning_client_close_link.reason=reason; + + cmd->header=sl_btmesh_cmd_remote_provisioning_client_close_link_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_client_close_link.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_server_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_remote_provisioning_server_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_server_init.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_server_open_link(uint8_t connection) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_remote_provisioning_server_open_link.connection=connection; + + cmd->header=sl_btmesh_cmd_remote_provisioning_server_open_link_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_server_open_link.result; + +} + +sl_status_t sl_btmesh_remote_provisioning_server_set_default_bearer(uint8_t bearer) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_remote_provisioning_server_set_default_bearer.bearer=bearer; + + cmd->header=sl_btmesh_cmd_remote_provisioning_server_set_default_bearer_id+(((1)&0xff)<<8)+(((1)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_remote_provisioning_server_set_default_bearer.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_init(uint16_t elem_index, + uint16_t max_node_list_size) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_init.elem_index=elem_index; + cmd->data.cmd_fw_standalone_updater_init.max_node_list_size=max_node_list_size; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_init_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_standalone_updater_init.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_standalone_updater_deinit.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_setup(uint16_t elem_index, + uint32_t fw_size, + sl_bt_uuid_64_t blob_id, + size_t fwid_len, + const uint8_t* fwid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_setup.elem_index=elem_index; + cmd->data.cmd_fw_standalone_updater_setup.fw_size=fw_size; + cmd->data.cmd_fw_standalone_updater_setup.blob_id=blob_id; + if ((15+fwid_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_standalone_updater_setup.fwid.len=fwid_len; + memcpy(cmd->data.cmd_fw_standalone_updater_setup.fwid.data,fwid,fwid_len); + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_setup_id+(((15+fwid_len)&0xff)<<8)+(((15+fwid_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_standalone_updater_setup.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_set_metadata(uint16_t elem_index, + size_t metadata_len, + const uint8_t* metadata) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_set_metadata.elem_index=elem_index; + if ((3+metadata_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_fw_standalone_updater_set_metadata.metadata.len=metadata_len; + memcpy(cmd->data.cmd_fw_standalone_updater_set_metadata.metadata.data,metadata,metadata_len); + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_set_metadata_id+(((3+metadata_len)&0xff)<<8)+(((3+metadata_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_standalone_updater_set_metadata.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_set_multicast_threshold(uint16_t elem_index, + uint16_t multicast_threshold) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_set_multicast_threshold.elem_index=elem_index; + cmd->data.cmd_fw_standalone_updater_set_multicast_threshold.multicast_threshold=multicast_threshold; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_set_multicast_threshold_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_standalone_updater_set_multicast_threshold.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_add_receiver(uint16_t elem_index, + uint16_t address, + uint8_t fw_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_add_receiver.elem_index=elem_index; + cmd->data.cmd_fw_standalone_updater_add_receiver.address=address; + cmd->data.cmd_fw_standalone_updater_add_receiver.fw_index=fw_index; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_add_receiver_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_standalone_updater_add_receiver.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_delete_all_receivers(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_delete_all_receivers.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_delete_all_receivers_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_standalone_updater_delete_all_receivers.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_start(uint16_t elem_index, + uint16_t dist_appkey_index, + uint8_t dist_ttl, + uint16_t dist_timeout_base, + uint8_t transfer_mode, + uint16_t group_address, + uuid_128 virtual_address) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_start.elem_index=elem_index; + cmd->data.cmd_fw_standalone_updater_start.dist_appkey_index=dist_appkey_index; + cmd->data.cmd_fw_standalone_updater_start.dist_ttl=dist_ttl; + cmd->data.cmd_fw_standalone_updater_start.dist_timeout_base=dist_timeout_base; + cmd->data.cmd_fw_standalone_updater_start.transfer_mode=transfer_mode; + cmd->data.cmd_fw_standalone_updater_start.group_address=group_address; + cmd->data.cmd_fw_standalone_updater_start.virtual_address=virtual_address; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_start_id+(((26)&0xff)<<8)+(((26)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_standalone_updater_start.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_execute_distribution_step(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_execute_distribution_step.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_execute_distribution_step_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_standalone_updater_execute_distribution_step.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_apply(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_apply.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_apply_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_standalone_updater_apply.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_get_state(uint16_t elem_index, + uint8_t *state, + uint16_t *total_nodes, + uint16_t *num_active_nodes) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_get_state.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_get_state_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (state) { + *state = rsp->data.rsp_fw_standalone_updater_get_state.state; + } + if (total_nodes) { + *total_nodes = rsp->data.rsp_fw_standalone_updater_get_state.total_nodes; + } + if (num_active_nodes) { + *num_active_nodes = rsp->data.rsp_fw_standalone_updater_get_state.num_active_nodes; + } + return rsp->data.rsp_fw_standalone_updater_get_state.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_get_node_status_by_index(uint16_t elem_index, + uint16_t entry_index, + uint16_t *address, + uint8_t *retrieved_phase, + uint8_t *update_server_status, + uint8_t *mbt_server_status, + uint8_t *transfer_progress, + uint8_t *fw_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_get_node_status_by_index.elem_index=elem_index; + cmd->data.cmd_fw_standalone_updater_get_node_status_by_index.entry_index=entry_index; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_index_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (address) { + *address = rsp->data.rsp_fw_standalone_updater_get_node_status_by_index.address; + } + if (retrieved_phase) { + *retrieved_phase = rsp->data.rsp_fw_standalone_updater_get_node_status_by_index.retrieved_phase; + } + if (update_server_status) { + *update_server_status = rsp->data.rsp_fw_standalone_updater_get_node_status_by_index.update_server_status; + } + if (mbt_server_status) { + *mbt_server_status = rsp->data.rsp_fw_standalone_updater_get_node_status_by_index.mbt_server_status; + } + if (transfer_progress) { + *transfer_progress = rsp->data.rsp_fw_standalone_updater_get_node_status_by_index.transfer_progress; + } + if (fw_index) { + *fw_index = rsp->data.rsp_fw_standalone_updater_get_node_status_by_index.fw_index; + } + return rsp->data.rsp_fw_standalone_updater_get_node_status_by_index.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_get_node_status_by_address(uint16_t elem_index, + uint16_t node_address, + uint16_t *address, + uint8_t *retrieved_phase, + uint8_t *update_server_status, + uint8_t *mbt_server_status, + uint8_t *transfer_progress, + uint8_t *fw_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_get_node_status_by_address.elem_index=elem_index; + cmd->data.cmd_fw_standalone_updater_get_node_status_by_address.node_address=node_address; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_get_node_status_by_address_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (address) { + *address = rsp->data.rsp_fw_standalone_updater_get_node_status_by_address.address; + } + if (retrieved_phase) { + *retrieved_phase = rsp->data.rsp_fw_standalone_updater_get_node_status_by_address.retrieved_phase; + } + if (update_server_status) { + *update_server_status = rsp->data.rsp_fw_standalone_updater_get_node_status_by_address.update_server_status; + } + if (mbt_server_status) { + *mbt_server_status = rsp->data.rsp_fw_standalone_updater_get_node_status_by_address.mbt_server_status; + } + if (transfer_progress) { + *transfer_progress = rsp->data.rsp_fw_standalone_updater_get_node_status_by_address.transfer_progress; + } + if (fw_index) { + *fw_index = rsp->data.rsp_fw_standalone_updater_get_node_status_by_address.fw_index; + } + return rsp->data.rsp_fw_standalone_updater_get_node_status_by_address.result; + +} + +sl_status_t sl_btmesh_fw_standalone_updater_cancel(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_fw_standalone_updater_cancel.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_fw_standalone_updater_cancel_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_fw_standalone_updater_cancel.result; + +} + +sl_status_t sl_btmesh_migration_migrate_keys() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_migration_migrate_keys_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_migration_migrate_keys.result; + +} + +sl_status_t sl_btmesh_migration_migrate_ddb() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_migration_migrate_ddb_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_migration_migrate_ddb.result; + +} + +sl_status_t sl_btmesh_ncp_fw_list_init(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_ncp_fw_list_init.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_ncp_fw_list_init_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_ncp_fw_list_init.result; + +} + +sl_status_t sl_btmesh_ncp_fw_list_deinit(uint16_t elem_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_ncp_fw_list_deinit.elem_index=elem_index; + + cmd->header=sl_btmesh_cmd_ncp_fw_list_deinit_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_ncp_fw_list_deinit.result; + +} + +sl_status_t sl_btmesh_ncp_fw_list_get_fw_info_by_index(uint16_t elem_index, + uint16_t index, + uint32_t *size, + sl_bt_uuid_64_t *blob_id, + size_t max_fwid_size, + size_t *fwid_len, + uint8_t *fwid) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_ncp_fw_list_get_fw_info_by_index.elem_index=elem_index; + cmd->data.cmd_ncp_fw_list_get_fw_info_by_index.index=index; + + cmd->header=sl_btmesh_cmd_ncp_fw_list_get_fw_info_by_index_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (size) { + *size = rsp->data.rsp_ncp_fw_list_get_fw_info_by_index.size; + } + if (blob_id) { + *blob_id = rsp->data.rsp_ncp_fw_list_get_fw_info_by_index.blob_id; + } + if (fwid_len) { + *fwid_len = rsp->data.rsp_ncp_fw_list_get_fw_info_by_index.fwid.len; + } + if (fwid && (rsp->data.rsp_ncp_fw_list_get_fw_info_by_index.fwid.len <= max_fwid_size)) { + memcpy(fwid,rsp->data.rsp_ncp_fw_list_get_fw_info_by_index.fwid.data,rsp->data.rsp_ncp_fw_list_get_fw_info_by_index.fwid.len); + } + return rsp->data.rsp_ncp_fw_list_get_fw_info_by_index.result; + +} + +sl_status_t sl_btmesh_ncp_fw_list_get_fw_metadata_by_index(uint16_t elem_index, + uint16_t index, + size_t max_metadata_size, + size_t *metadata_len, + uint8_t *metadata) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_ncp_fw_list_get_fw_metadata_by_index.elem_index=elem_index; + cmd->data.cmd_ncp_fw_list_get_fw_metadata_by_index.index=index; + + cmd->header=sl_btmesh_cmd_ncp_fw_list_get_fw_metadata_by_index_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (metadata_len) { + *metadata_len = rsp->data.rsp_ncp_fw_list_get_fw_metadata_by_index.metadata.len; + } + if (metadata && (rsp->data.rsp_ncp_fw_list_get_fw_metadata_by_index.metadata.len <= max_metadata_size)) { + memcpy(metadata,rsp->data.rsp_ncp_fw_list_get_fw_metadata_by_index.metadata.data,rsp->data.rsp_ncp_fw_list_get_fw_metadata_by_index.metadata.len); + } + return rsp->data.rsp_ncp_fw_list_get_fw_metadata_by_index.result; + +} + +sl_status_t sl_btmesh_ncp_fw_list_add_fw(uint16_t elem_index, + uint32_t size, + sl_bt_uuid_64_t blob_id, + size_t fwid_len, + const uint8_t* fwid, + uint16_t *fw_list_index) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_ncp_fw_list_add_fw.elem_index=elem_index; + cmd->data.cmd_ncp_fw_list_add_fw.size=size; + cmd->data.cmd_ncp_fw_list_add_fw.blob_id=blob_id; + if ((15+fwid_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_ncp_fw_list_add_fw.fwid.len=fwid_len; + memcpy(cmd->data.cmd_ncp_fw_list_add_fw.fwid.data,fwid,fwid_len); + + cmd->header=sl_btmesh_cmd_ncp_fw_list_add_fw_id+(((15+fwid_len)&0xff)<<8)+(((15+fwid_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (fw_list_index) { + *fw_list_index = rsp->data.rsp_ncp_fw_list_add_fw.fw_list_index; + } + return rsp->data.rsp_ncp_fw_list_add_fw.result; + +} + +sl_status_t sl_btmesh_ncp_fw_list_set_fw_metadata(uint16_t elem_index, + uint16_t fw_list_index, + size_t metadata_len, + const uint8_t* metadata) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_ncp_fw_list_set_fw_metadata.elem_index=elem_index; + cmd->data.cmd_ncp_fw_list_set_fw_metadata.fw_list_index=fw_list_index; + if ((5+metadata_len) > SL_BGAPI_MAX_PAYLOAD_SIZE ) + { + return SL_STATUS_COMMAND_TOO_LONG; + } + cmd->data.cmd_ncp_fw_list_set_fw_metadata.metadata.len=metadata_len; + memcpy(cmd->data.cmd_ncp_fw_list_set_fw_metadata.metadata.data,metadata,metadata_len); + + cmd->header=sl_btmesh_cmd_ncp_fw_list_set_fw_metadata_id+(((5+metadata_len)&0xff)<<8)+(((5+metadata_len)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_ncp_fw_list_set_fw_metadata.result; + +} + +sl_status_t sl_btmesh_sar_config_client_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_sar_config_client_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sar_config_client_init.result; + +} + +sl_status_t sl_btmesh_sar_config_client_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_sar_config_client_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sar_config_client_deinit.result; + +} + +sl_status_t sl_btmesh_sar_config_client_get_sar_transmitter(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sar_config_client_get_sar_transmitter.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_sar_config_client_get_sar_transmitter.server_address=server_address; + + cmd->header=sl_btmesh_cmd_sar_config_client_get_sar_transmitter_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_sar_config_client_get_sar_transmitter.handle; + } + return rsp->data.rsp_sar_config_client_get_sar_transmitter.result; + +} + +sl_status_t sl_btmesh_sar_config_client_set_sar_transmitter(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t segment_interval_step, + uint8_t unicast_retrans_count, + uint8_t unicast_retrans_wo_progress_count, + uint16_t unicast_retrans_interval_step, + uint16_t unicast_retrans_interval_increment, + uint8_t multicast_retrans_count, + uint16_t multicast_retrans_interval_step, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sar_config_client_set_sar_transmitter.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_sar_config_client_set_sar_transmitter.server_address=server_address; + cmd->data.cmd_sar_config_client_set_sar_transmitter.segment_interval_step=segment_interval_step; + cmd->data.cmd_sar_config_client_set_sar_transmitter.unicast_retrans_count=unicast_retrans_count; + cmd->data.cmd_sar_config_client_set_sar_transmitter.unicast_retrans_wo_progress_count=unicast_retrans_wo_progress_count; + cmd->data.cmd_sar_config_client_set_sar_transmitter.unicast_retrans_interval_step=unicast_retrans_interval_step; + cmd->data.cmd_sar_config_client_set_sar_transmitter.unicast_retrans_interval_increment=unicast_retrans_interval_increment; + cmd->data.cmd_sar_config_client_set_sar_transmitter.multicast_retrans_count=multicast_retrans_count; + cmd->data.cmd_sar_config_client_set_sar_transmitter.multicast_retrans_interval_step=multicast_retrans_interval_step; + + cmd->header=sl_btmesh_cmd_sar_config_client_set_sar_transmitter_id+(((14)&0xff)<<8)+(((14)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_sar_config_client_set_sar_transmitter.handle; + } + return rsp->data.rsp_sar_config_client_set_sar_transmitter.result; + +} + +sl_status_t sl_btmesh_sar_config_client_get_sar_receiver(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sar_config_client_get_sar_receiver.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_sar_config_client_get_sar_receiver.server_address=server_address; + + cmd->header=sl_btmesh_cmd_sar_config_client_get_sar_receiver_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_sar_config_client_get_sar_receiver.handle; + } + return rsp->data.rsp_sar_config_client_get_sar_receiver.result; + +} + +sl_status_t sl_btmesh_sar_config_client_set_sar_receiver(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t segments_threshold, + uint8_t ack_delay_increment, + uint32_t discard_timeout, + uint8_t segment_interval_step, + uint8_t ack_retrans_count, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sar_config_client_set_sar_receiver.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_sar_config_client_set_sar_receiver.server_address=server_address; + cmd->data.cmd_sar_config_client_set_sar_receiver.segments_threshold=segments_threshold; + cmd->data.cmd_sar_config_client_set_sar_receiver.ack_delay_increment=ack_delay_increment; + cmd->data.cmd_sar_config_client_set_sar_receiver.discard_timeout=discard_timeout; + cmd->data.cmd_sar_config_client_set_sar_receiver.segment_interval_step=segment_interval_step; + cmd->data.cmd_sar_config_client_set_sar_receiver.ack_retrans_count=ack_retrans_count; + + cmd->header=sl_btmesh_cmd_sar_config_client_set_sar_receiver_id+(((12)&0xff)<<8)+(((12)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_sar_config_client_set_sar_receiver.handle; + } + return rsp->data.rsp_sar_config_client_set_sar_receiver.result; + +} + +sl_status_t sl_btmesh_sar_config_server_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_sar_config_server_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sar_config_server_init.result; + +} + +sl_status_t sl_btmesh_sar_config_server_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_sar_config_server_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sar_config_server_deinit.result; + +} + +sl_status_t sl_btmesh_sar_config_server_get_sar_transmitter(uint8_t *segment_interval_step, + uint8_t *unicast_retrans_count, + uint8_t *unicast_retrans_wo_progress_count, + uint16_t *unicast_retrans_interval_step, + uint16_t *unicast_retrans_interval_increment, + uint8_t *multicast_retrans_count, + uint16_t *multicast_retrans_interval_step) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_sar_config_server_get_sar_transmitter_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (segment_interval_step) { + *segment_interval_step = rsp->data.rsp_sar_config_server_get_sar_transmitter.segment_interval_step; + } + if (unicast_retrans_count) { + *unicast_retrans_count = rsp->data.rsp_sar_config_server_get_sar_transmitter.unicast_retrans_count; + } + if (unicast_retrans_wo_progress_count) { + *unicast_retrans_wo_progress_count = rsp->data.rsp_sar_config_server_get_sar_transmitter.unicast_retrans_wo_progress_count; + } + if (unicast_retrans_interval_step) { + *unicast_retrans_interval_step = rsp->data.rsp_sar_config_server_get_sar_transmitter.unicast_retrans_interval_step; + } + if (unicast_retrans_interval_increment) { + *unicast_retrans_interval_increment = rsp->data.rsp_sar_config_server_get_sar_transmitter.unicast_retrans_interval_increment; + } + if (multicast_retrans_count) { + *multicast_retrans_count = rsp->data.rsp_sar_config_server_get_sar_transmitter.multicast_retrans_count; + } + if (multicast_retrans_interval_step) { + *multicast_retrans_interval_step = rsp->data.rsp_sar_config_server_get_sar_transmitter.multicast_retrans_interval_step; + } + return rsp->data.rsp_sar_config_server_get_sar_transmitter.result; + +} + +sl_status_t sl_btmesh_sar_config_server_set_sar_transmitter(uint8_t segment_interval_step, + uint8_t unicast_retrans_count, + uint8_t unicast_retrans_wo_progress_count, + uint16_t unicast_retrans_interval_step, + uint16_t unicast_retrans_interval_increment, + uint8_t multicast_retrans_count, + uint16_t multicast_retrans_interval_step) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sar_config_server_set_sar_transmitter.segment_interval_step=segment_interval_step; + cmd->data.cmd_sar_config_server_set_sar_transmitter.unicast_retrans_count=unicast_retrans_count; + cmd->data.cmd_sar_config_server_set_sar_transmitter.unicast_retrans_wo_progress_count=unicast_retrans_wo_progress_count; + cmd->data.cmd_sar_config_server_set_sar_transmitter.unicast_retrans_interval_step=unicast_retrans_interval_step; + cmd->data.cmd_sar_config_server_set_sar_transmitter.unicast_retrans_interval_increment=unicast_retrans_interval_increment; + cmd->data.cmd_sar_config_server_set_sar_transmitter.multicast_retrans_count=multicast_retrans_count; + cmd->data.cmd_sar_config_server_set_sar_transmitter.multicast_retrans_interval_step=multicast_retrans_interval_step; + + cmd->header=sl_btmesh_cmd_sar_config_server_set_sar_transmitter_id+(((10)&0xff)<<8)+(((10)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sar_config_server_set_sar_transmitter.result; + +} + +sl_status_t sl_btmesh_sar_config_server_get_sar_receiver(uint8_t *segments_threshold, + uint8_t *ack_delay_increment, + uint32_t *discard_timeout, + uint8_t *segment_interval_step, + uint8_t *ack_retrans_count) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_sar_config_server_get_sar_receiver_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (segments_threshold) { + *segments_threshold = rsp->data.rsp_sar_config_server_get_sar_receiver.segments_threshold; + } + if (ack_delay_increment) { + *ack_delay_increment = rsp->data.rsp_sar_config_server_get_sar_receiver.ack_delay_increment; + } + if (discard_timeout) { + *discard_timeout = rsp->data.rsp_sar_config_server_get_sar_receiver.discard_timeout; + } + if (segment_interval_step) { + *segment_interval_step = rsp->data.rsp_sar_config_server_get_sar_receiver.segment_interval_step; + } + if (ack_retrans_count) { + *ack_retrans_count = rsp->data.rsp_sar_config_server_get_sar_receiver.ack_retrans_count; + } + return rsp->data.rsp_sar_config_server_get_sar_receiver.result; + +} + +sl_status_t sl_btmesh_sar_config_server_set_sar_receiver(uint8_t segments_threshold, + uint8_t ack_delay_increment, + uint32_t discard_timeout, + uint8_t segment_interval_step, + uint8_t ack_retrans_count) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_sar_config_server_set_sar_receiver.segments_threshold=segments_threshold; + cmd->data.cmd_sar_config_server_set_sar_receiver.ack_delay_increment=ack_delay_increment; + cmd->data.cmd_sar_config_server_set_sar_receiver.discard_timeout=discard_timeout; + cmd->data.cmd_sar_config_server_set_sar_receiver.segment_interval_step=segment_interval_step; + cmd->data.cmd_sar_config_server_set_sar_receiver.ack_retrans_count=ack_retrans_count; + + cmd->header=sl_btmesh_cmd_sar_config_server_set_sar_receiver_id+(((8)&0xff)<<8)+(((8)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_sar_config_server_set_sar_receiver.result; + +} + +sl_status_t sl_btmesh_private_beacon_client_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_private_beacon_client_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_private_beacon_client_init.result; + +} + +sl_status_t sl_btmesh_private_beacon_client_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_private_beacon_client_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_private_beacon_client_deinit.result; + +} + +sl_status_t sl_btmesh_private_beacon_client_get_beacon(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_private_beacon_client_get_beacon.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_private_beacon_client_get_beacon.server_address=server_address; + + cmd->header=sl_btmesh_cmd_private_beacon_client_get_beacon_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_private_beacon_client_get_beacon.handle; + } + return rsp->data.rsp_private_beacon_client_get_beacon.result; + +} + +sl_status_t sl_btmesh_private_beacon_client_set_beacon(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t state, + uint16_t random_update_steps, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_private_beacon_client_set_beacon.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_private_beacon_client_set_beacon.server_address=server_address; + cmd->data.cmd_private_beacon_client_set_beacon.state=state; + cmd->data.cmd_private_beacon_client_set_beacon.random_update_steps=random_update_steps; + + cmd->header=sl_btmesh_cmd_private_beacon_client_set_beacon_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_private_beacon_client_set_beacon.handle; + } + return rsp->data.rsp_private_beacon_client_set_beacon.result; + +} + +sl_status_t sl_btmesh_private_beacon_client_get_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_private_beacon_client_get_gatt_proxy.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_private_beacon_client_get_gatt_proxy.server_address=server_address; + + cmd->header=sl_btmesh_cmd_private_beacon_client_get_gatt_proxy_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_private_beacon_client_get_gatt_proxy.handle; + } + return rsp->data.rsp_private_beacon_client_get_gatt_proxy.result; + +} + +sl_status_t sl_btmesh_private_beacon_client_set_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t state, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_private_beacon_client_set_gatt_proxy.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_private_beacon_client_set_gatt_proxy.server_address=server_address; + cmd->data.cmd_private_beacon_client_set_gatt_proxy.state=state; + + cmd->header=sl_btmesh_cmd_private_beacon_client_set_gatt_proxy_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_private_beacon_client_set_gatt_proxy.handle; + } + return rsp->data.rsp_private_beacon_client_set_gatt_proxy.result; + +} + +sl_status_t sl_btmesh_private_beacon_client_get_identity(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_private_beacon_client_get_identity.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_private_beacon_client_get_identity.server_address=server_address; + cmd->data.cmd_private_beacon_client_get_identity.netkey_index=netkey_index; + + cmd->header=sl_btmesh_cmd_private_beacon_client_get_identity_id+(((6)&0xff)<<8)+(((6)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_private_beacon_client_get_identity.handle; + } + return rsp->data.rsp_private_beacon_client_get_identity.result; + +} + +sl_status_t sl_btmesh_private_beacon_client_set_identity(uint16_t enc_netkey_index, + uint16_t server_address, + uint16_t netkey_index, + uint8_t state, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_private_beacon_client_set_identity.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_private_beacon_client_set_identity.server_address=server_address; + cmd->data.cmd_private_beacon_client_set_identity.netkey_index=netkey_index; + cmd->data.cmd_private_beacon_client_set_identity.state=state; + + cmd->header=sl_btmesh_cmd_private_beacon_client_set_identity_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_private_beacon_client_set_identity.handle; + } + return rsp->data.rsp_private_beacon_client_set_identity.result; + +} + +sl_status_t sl_btmesh_private_beacon_server_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_private_beacon_server_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_private_beacon_server_init.result; + +} + +sl_status_t sl_btmesh_private_beacon_server_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_private_beacon_server_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_private_beacon_server_deinit.result; + +} + +sl_status_t sl_btmesh_lcd_client_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_lcd_client_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lcd_client_init.result; + +} + +sl_status_t sl_btmesh_lcd_client_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_lcd_client_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lcd_client_deinit.result; + +} + +sl_status_t sl_btmesh_lcd_client_get_composition_data(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t page_number, + uint16_t offset, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lcd_client_get_composition_data.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_lcd_client_get_composition_data.server_address=server_address; + cmd->data.cmd_lcd_client_get_composition_data.page_number=page_number; + cmd->data.cmd_lcd_client_get_composition_data.offset=offset; + + cmd->header=sl_btmesh_cmd_lcd_client_get_composition_data_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_lcd_client_get_composition_data.handle; + } + return rsp->data.rsp_lcd_client_get_composition_data.result; + +} + +sl_status_t sl_btmesh_lcd_client_get_metadata(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t page_number, + uint16_t offset, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_lcd_client_get_metadata.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_lcd_client_get_metadata.server_address=server_address; + cmd->data.cmd_lcd_client_get_metadata.page_number=page_number; + cmd->data.cmd_lcd_client_get_metadata.offset=offset; + + cmd->header=sl_btmesh_cmd_lcd_client_get_metadata_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_lcd_client_get_metadata.handle; + } + return rsp->data.rsp_lcd_client_get_metadata.result; + +} + +sl_status_t sl_btmesh_lcd_server_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_lcd_server_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lcd_server_init.result; + +} + +sl_status_t sl_btmesh_lcd_server_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_lcd_server_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_lcd_server_deinit.result; + +} + +sl_status_t sl_btmesh_on_demand_private_proxy_client_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_on_demand_private_proxy_client_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_on_demand_private_proxy_client_init.result; + +} + +sl_status_t sl_btmesh_on_demand_private_proxy_client_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_on_demand_private_proxy_client_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_on_demand_private_proxy_client_deinit.result; + +} + +sl_status_t sl_btmesh_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy.server_address=server_address; + + cmd->header=sl_btmesh_cmd_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy_id+(((4)&0xff)<<8)+(((4)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy.handle; + } + return rsp->data.rsp_on_demand_private_proxy_client_get_on_demand_private_gatt_proxy.result; + +} + +sl_status_t sl_btmesh_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy(uint16_t enc_netkey_index, + uint16_t server_address, + uint8_t value, + uint32_t *handle) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy.enc_netkey_index=enc_netkey_index; + cmd->data.cmd_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy.server_address=server_address; + cmd->data.cmd_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy.value=value; + + cmd->header=sl_btmesh_cmd_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (handle) { + *handle = rsp->data.rsp_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy.handle; + } + return rsp->data.rsp_on_demand_private_proxy_client_set_on_demand_private_gatt_proxy.result; + +} + +sl_status_t sl_btmesh_solicitation_config_client_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_solicitation_config_client_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_solicitation_config_client_init.result; + +} + +sl_status_t sl_btmesh_solicitation_config_client_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_solicitation_config_client_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_solicitation_config_client_deinit.result; + +} + +sl_status_t sl_btmesh_solicitation_config_client_clear_items(uint16_t dst, + uint16_t appkey_index, + uint16_t range_start, + uint8_t length_present, + uint8_t range_length, + uint8_t response_required) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_solicitation_config_client_clear_items.dst=dst; + cmd->data.cmd_solicitation_config_client_clear_items.appkey_index=appkey_index; + cmd->data.cmd_solicitation_config_client_clear_items.range_start=range_start; + cmd->data.cmd_solicitation_config_client_clear_items.length_present=length_present; + cmd->data.cmd_solicitation_config_client_clear_items.range_length=range_length; + cmd->data.cmd_solicitation_config_client_clear_items.response_required=response_required; + + cmd->header=sl_btmesh_cmd_solicitation_config_client_clear_items_id+(((9)&0xff)<<8)+(((9)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_solicitation_config_client_clear_items.result; + +} + +sl_status_t sl_btmesh_on_demand_private_proxy_server_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_on_demand_private_proxy_server_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_on_demand_private_proxy_server_init.result; + +} + +sl_status_t sl_btmesh_on_demand_private_proxy_server_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_on_demand_private_proxy_server_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_on_demand_private_proxy_server_deinit.result; + +} + +sl_status_t sl_btmesh_silabs_config_server_init() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_silabs_config_server_init_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_server_init.result; + +} + +sl_status_t sl_btmesh_silabs_config_server_deinit() { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_silabs_config_server_deinit_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_server_deinit.result; + +} + +sl_status_t sl_btmesh_silabs_config_server_set_tx(uint8_t phy, + uint32_t options) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_silabs_config_server_set_tx.phy=phy; + cmd->data.cmd_silabs_config_server_set_tx.options=options; + + cmd->header=sl_btmesh_cmd_silabs_config_server_set_tx_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_server_set_tx.result; + +} + +sl_status_t sl_btmesh_silabs_config_server_get_tx(uint8_t *phy, + uint32_t *options) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_silabs_config_server_get_tx_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (phy) { + *phy = rsp->data.rsp_silabs_config_server_get_tx.phy; + } + if (options) { + *options = rsp->data.rsp_silabs_config_server_get_tx.options; + } + return rsp->data.rsp_silabs_config_server_get_tx.result; + +} + +sl_status_t sl_btmesh_silabs_config_server_set_model_enable(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_silabs_config_server_set_model_enable.elem_index=elem_index; + cmd->data.cmd_silabs_config_server_set_model_enable.vendor_id=vendor_id; + cmd->data.cmd_silabs_config_server_set_model_enable.model_id=model_id; + cmd->data.cmd_silabs_config_server_set_model_enable.value=value; + + cmd->header=sl_btmesh_cmd_silabs_config_server_set_model_enable_id+(((7)&0xff)<<8)+(((7)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_server_set_model_enable.result; + +} + +sl_status_t sl_btmesh_silabs_config_server_get_model_enable(uint8_t elem_index, + uint16_t vendor_id, + uint16_t model_id, + uint16_t *value) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_silabs_config_server_get_model_enable.elem_index=elem_index; + cmd->data.cmd_silabs_config_server_get_model_enable.vendor_id=vendor_id; + cmd->data.cmd_silabs_config_server_get_model_enable.model_id=model_id; + + cmd->header=sl_btmesh_cmd_silabs_config_server_get_model_enable_id+(((5)&0xff)<<8)+(((5)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (value) { + *value = rsp->data.rsp_silabs_config_server_get_model_enable.value; + } + return rsp->data.rsp_silabs_config_server_get_model_enable.result; + +} + +sl_status_t sl_btmesh_silabs_config_server_set_network_pdu(uint16_t max_size) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + cmd->data.cmd_silabs_config_server_set_network_pdu.max_size=max_size; + + cmd->header=sl_btmesh_cmd_silabs_config_server_set_network_pdu_id+(((2)&0xff)<<8)+(((2)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + return rsp->data.rsp_silabs_config_server_set_network_pdu.result; + +} + +sl_status_t sl_btmesh_silabs_config_server_get_network_pdu(uint16_t *max_size) { + struct sl_btmesh_packet *cmd = (struct sl_btmesh_packet *)sl_btmesh_cmd_msg; + + struct sl_btmesh_packet *rsp = (struct sl_btmesh_packet *)sl_btmesh_rsp_msg; + + + cmd->header=sl_btmesh_cmd_silabs_config_server_get_network_pdu_id+(((0)&0xff)<<8)+(((0)&0x700)>>8); + + + sl_btmesh_host_handle_command(); + if (max_size) { + *max_size = rsp->data.rsp_silabs_config_server_get_network_pdu.max_size; + } + return rsp->data.rsp_silabs_config_server_get_network_pdu.result; + +} diff --git a/protocol/bluetooth/src/sl_btmesh_sensor.c b/protocol/bluetooth/src/sl_btmesh_sensor.c new file mode 100644 index 00000000000..04a2eb5a73a --- /dev/null +++ b/protocol/bluetooth/src/sl_btmesh_sensor.c @@ -0,0 +1,715 @@ +/***************************************************************************//** + * @brief Mesh sensor model helpers + * @version 0.0.1 + ******************************************************************************* + * # License + * Copyright 2018 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ +#include "stdint.h" +#include "math.h" + +/* Select BGAPI flavor */ +#if defined(MESH_LIB_HOST) +#include "gecko_bglib.h" +#include "host_gecko.h" +#else /* MESH_LIB_NATIVE */ +#include "sl_btmesh_api.h" +#endif /* MESH_LIB_NATIVE */ + +#include "sl_btmesh_sensor.h" +#include "sl_btmesh_device_properties.h" +#include "sl_btmesh_sensor_model_capi_types.h" + +/* int 8 */ +static int8_t int8_from_buf(const uint8_t *ptr) +{ + return (int8_t)ptr[0]; +} + +static void int8_to_buf(uint8_t *ptr, int8_t n) +{ + ptr[0] = n & 0xff; +} + +/* uint 8 */ +static uint8_t uint8_from_buf(const uint8_t *ptr) +{ + return (uint8_t)ptr[0]; +} + +static void uint8_to_buf(uint8_t *ptr, uint8_t n) +{ + ptr[0] = n & 0xff; +} + +/* int16 */ +static int16_t int16_from_buf(const uint8_t *ptr) +{ + return ((int16_t)ptr[0]) | ((int16_t)ptr[1] << 8); +} + +static void int16_to_buf(uint8_t *ptr, int16_t n) +{ + ptr[0] = n & 0xff; + ptr[1] = (n >> 8) & 0xff; +} + +/* uint16 */ +static int16_t uint16_from_buf(const uint8_t *ptr) +{ + return ((int16_t)ptr[0]) | ((int16_t)ptr[1] << 8); +} + +static void uint16_to_buf(uint8_t *ptr, uint16_t n) +{ + ptr[0] = n & 0xff; + ptr[1] = (n >> 8) & 0xff; +} + +/* uint 24 */ +static uint32_t uint24_from_buf(const uint8_t *ptr) +{ + return ((uint32_t)ptr[0]) | ((uint32_t)ptr[1] << 8) | ((uint32_t)ptr[2] << 16); +} + +static void uint24_to_buf(uint8_t *ptr, int32_t n) +{ + ptr[0] = n & 0xff; + ptr[1] = (n >> 8) & 0xff; + ptr[2] = (n >> 16) & 0xff; +} + +#if 0 +/* int32 */ +static int32_t int32_from_buf(const uint8_t *ptr) +{ + return + ((int32_t)ptr[0]) + | ((int32_t)ptr[1] << 8) + | ((int32_t)ptr[2] << 16) + | ((int32_t)ptr[3] << 24) + ; +} + +static void int32_to_buf(uint8_t *ptr, int32_t n) +{ + ptr[0] = n & 0xff; + ptr[1] = (n >> 8) & 0xff; + ptr[2] = (n >> 16) & 0xff; + ptr[3] = (n >> 24) & 0xff; +} +#endif +/* uint32 */ +static int32_t uint32_from_buf(const uint8_t *ptr) +{ + return + ((uint32_t)ptr[0]) + | ((uint32_t)ptr[1] << 8) + | ((uint32_t)ptr[2] << 16) + | ((uint32_t)ptr[3] << 24) + ; +} + +static void uint32_to_buf(uint8_t *ptr, uint32_t n) +{ + ptr[0] = n & 0xff; + ptr[1] = (n >> 8) & 0xff; + ptr[2] = (n >> 16) & 0xff; + ptr[3] = (n >> 24) & 0xff; +} + +#if 0 +/* float 32 */ +static float float_from_buf(const uint8_t *ptr) +{ + uint32_t n = + ((uint32_t)ptr[0]) + | ((uint32_t)ptr[1] << 8) + | ((uint32_t)ptr[2] << 16) + | ((uint32_t)ptr[3] << 24); + return (float)n; +} + +static void float_to_buf(uint8_t *ptr, float f) +{ + uint32_t n = (uint32_t)f; + ptr[0] = n & 0xff; + ptr[1] = (n >> 8) & 0xff; + ptr[2] = (n >> 16) & 0xff; + ptr[3] = (n >> 24) & 0xff; +} +#endif + +uint8_t mesh_sensor_data_to_buf(uint16_t property_id, uint8_t *ptr, uint8_t *value) +{ + int ret = 2; // Initial length is the length of the property ID + uint16_to_buf(ptr, property_id); + ptr += 2; + + switch (property_id) { + case PRESENT_AMBIENT_TEMPERATURE: + case PRESENT_INDOOR_AMBIENT_TEMPERATURE: + case PRESENT_OUTDOOR_AMBIENT_TEMPERATURE: + case COLOR_RENDERING_INDEX_R9: + case COLOR_RENDERING_INDEX_RA: + { + uint8_to_buf(ptr++, 1); + int8_to_buf(ptr, *(int8_t*)value); + ret += 2; + } break; + case PRESENCE_DETECTED: + case CHROMATICITY_TOLERANCE: + case INPUT_VOLTAGE_RIPPLE_SPECIFICATION: + case LIGHT_CONTROL_REGULATOR_ACCURACY: + case LUMEN_MAINTENANCE_FACTOR: + case MOTION_SENSED: + case MOTION_THRESHOLD: + case OUTPUT_RIPPLE_VOLTAGE_SPECIFICATION: + case PRESENT_DEVICE_OPERATING_EFFICIENCY: + case PRESENT_INPUT_RIPPLE_VOLTAGE: + case PRESENT_RELATIVE_OUTPUT_RIPPLE_VOLTAGE: + { + uint8_to_buf(ptr++, 1); + uint8_to_buf(ptr++, *(uint8_t*)value); + ret += 2; + } break; + case INITIAL_PLANCKIAN_DISTANCE: + case PRESENT_PLANCKIAN_DISTANCE: + { + uint8_to_buf(ptr++, 2); + int16_to_buf(ptr, *(int16_t*)value); + ret += 3; + } break; + case INITIAL_CORRELATED_COLOR_TEMPERATURE: + case PRESENT_CORRELATED_COLOR_TEMPERATURE: + case PEOPLE_COUNT: + case DEVICE_COUNTRY_OF_ORIGIN: + case PRESENT_INPUT_CURRENT: + case PRESENT_OUTPUT_CURRENT: + case LUMINOUS_EFFICACY: + case INITIAL_LUMINOUS_FLUX: + case PRESENT_LUMINOUS_FLUX: + case CENTER_BEAM_INTENSITY_AT_FULL_POWER: + case LIGHT_CONTROL_LIGHTNESS_ON: + case LIGHT_CONTROL_LIGHTNESS_PROLONG: + case LIGHT_CONTROL_LIGHTNESS_STANDBY: + case PRESENT_DEVICE_OPERATING_TEMPERATURE: + case TIME_SINCE_MOTION_SENSED: + case TIME_SINCE_PRESENCE_DETECTED: + case PRESENT_INPUT_VOLTAGE: + case PRESENT_OUTPUT_VOLTAGE: + { + uint8_to_buf(ptr++, 2); + uint16_to_buf(ptr, *(uint16_t*)value); + ret += 3; + } break; + /** 24-bit values */ + case TOTAL_DEVICE_OFF_ON_CYCLES: + case TOTAL_DEVICE_POWER_ON_CYCLES: + case DEVICE_DATE_OF_MANUFACTURE: + case DEVICE_ENERGY_USE_SINCE_TURN_ON: + case TOTAL_DEVICE_ENERGY_USE: + case DEVICE_RUNTIME_SINCE_TURN_ON: + case DEVICE_RUNTIME_WARRANTY: + case TOTAL_DEVICE_POWER_ON_TIME: + case TOTAL_DEVICE_RUNTIME: + case TOTAL_LIGHT_EXPOSURE_TIME: + case LIGHT_CONTROL_AMBIENT_LUXLEVEL_ON: + case LIGHT_CONTROL_AMBIENT_LUXLEVEL_PROLONG: + case LIGHT_CONTROL_AMBIENT_LUXLEVEL_STANDBY: + case LUMINOUS_ENERGY_SINCE_TURN_ON: + case RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE: + case TOTAL_LUMINOUS_ENERGY: + case LUMINOUS_EXPOSURE: + case PRESENT_DEVICE_INPUT_POWER: + case LIGHT_CONTROL_TIME_FADE: + case LIGHT_CONTROL_TIME_FADE_ON: + case LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO: + case LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL: + case LIGHT_CONTROL_TIME_OCCUPANCY_DELAY: \ + case LIGHT_CONTROL_TIME_PROLONG: + case LIGHT_CONTROL_TIME_RUN_ON: + case PRESENT_AMBIENT_LIGHT_LEVEL: + case PRESENT_ILLUMINANCE: + { + uint8_to_buf(ptr++, 3); + uint24_to_buf(ptr, *(uint32_t*)value); + ret += 4; + } break; + /* 32-bit*/ + case LIGHT_CONTROL_REGULATOR_KID: + case LIGHT_CONTROL_REGULATOR_KIU: + case LIGHT_CONTROL_REGULATOR_KPD: + case LIGHT_CONTROL_REGULATOR_KPU: + { + uint8_to_buf(ptr++, 4); + uint32_to_buf(ptr, *(uint32_t*)value); + ret += 5; + } break; + /* Average Current */ + case AVERAGE_INPUT_CURRENT: + case AVERAGE_OUTPUT_CURRENT: + { + uint8_to_buf(ptr++, 3); + average_current_t *ac = (average_current_t*)value; + uint16_to_buf(ptr, ac->current); + uint8_to_buf(ptr + 2, ac->duration); + ret += 4; + } break; + /* Average Voltage */ + case AVERAGE_INPUT_VOLTAGE: + case AVERAGE_OUTPUT_VOLTAGE: + { + uint8_to_buf(ptr++, 3); + average_voltage_t *av = (average_voltage_t*)value; + uint16_to_buf(ptr, av->voltage); + uint8_to_buf(ptr + 2, av->duration); + ret += 4; + } break; + /* Chromaticity Coordinates */ + case INITIAL_CIE_1931_CHROMATICITY_COORDINATES: + case PRESENT_CIE_1931_CHROMATICITY_COORDINATES: + { + uint8_to_buf(ptr++, 4); + chromaticity_coordinates_t *cc = (chromaticity_coordinates_t*)value; + uint16_to_buf(ptr, cc->x); + uint16_to_buf(ptr + 2, cc->y); + ret += 5; + } break; + /* Electric Current Range */ + case OUTPUT_CURRENT_RANGE: + { + uint8_to_buf(ptr++, 4); + electric_current_range_t *range = (electric_current_range_t*)value; + uint16_to_buf(ptr, range->minimum); + uint16_to_buf(ptr + 2, range->maximum); + ret += 5; + } break; + case INPUT_CURRENT_RANGE_SPECIFICATION: + { + uint8_to_buf(ptr++, 6); + electric_current_specification_t *spec = (electric_current_specification_t*)value; + uint16_to_buf(ptr, spec->minimum); + uint16_to_buf(ptr + 2, spec->typical); + uint16_to_buf(ptr + 4, spec->maximum); + ret += 7; + } break; + case INPUT_CURRENT_STATISTICS: + case OUTPUT_CURRENT_STATISTICS: + { + uint8_to_buf(ptr++, 9); + electric_current_statistics_t *stat = (electric_current_statistics_t*)value; + uint16_to_buf(ptr, stat->current); + uint16_to_buf(ptr + 2, stat->std_deviation); + uint16_to_buf(ptr + 4, stat->minimum); + uint16_to_buf(ptr + 6, stat->maximum); + uint8_to_buf(ptr + 8, stat->sensing_duration); + ret += 10; + } break; + case RELATIVE_DEVICE_ENERGY_USE_IN_A_PERIOD_OF_DAY: + { + uint8_to_buf(ptr++, 4); + energy_in_a_period_of_day_t *e = (energy_in_a_period_of_day_t*)value; + uint16_to_buf(ptr, e->energy); + uint8_to_buf(ptr + 2, e->start_time); + uint8_to_buf(ptr + 3, e->end_time); + ret += 5; + } break; + case DEVICE_OVER_TEMPERATURE_EVENT_STATISTICS: + case DEVICE_UNDER_TEMPERATURE_EVENT_STATISTICS: + case INPUT_OVER_CURRENT_EVENT_STATISTICS: + case INPUT_OVER_RIPPLE_VOLTAGE_EVENT_STATISTICS: + case INPUT_OVER_VOLTAGE_EVENT_STATISTICS: + case INPUT_UNDER_CURRENT_EVENT_STATISTICS: + case INPUT_UNDER_VOLTAGE_EVENT_STATISTICS: + case OPEN_CIRCUIT_EVENT_STATISTICS: + case OVER_OUTPUT_RIPPLE_VOLTAGE_EVENT_STATISTICS: + case SHORT_CIRCUIT_EVENT_STATISTICS: + { + uint8_to_buf(ptr++, 6); + event_statistics_t *stat = (event_statistics_t*)value; + uint16_to_buf(ptr, stat->number_of_events); + uint16_to_buf(ptr + 2, stat->average_event_duration); + uint8_to_buf(ptr + 4, stat->time_since_last_event); + uint8_to_buf(ptr + 5, stat->sensing_duration); + ret += 7; + } break; + case DEVICE_POWER_RANGE_SPECIFICATION: + { + uint8_to_buf(ptr++, 9); + power_specification_t *spec = (power_specification_t*)value; + uint24_to_buf(ptr, spec->minimum_power_value); + uint24_to_buf(ptr + 3, spec->typical_power_value); + uint24_to_buf(ptr + 6, spec->maximum_power_value); + ret += 10; + } break; + case AVERAGE_AMBIENT_TEMPERATURE_IN_A_PERIOD_OF_DAY: + { + uint8_to_buf(ptr++, 3); + temperature_8_in_a_period_of_day_t *t = (temperature_8_in_a_period_of_day_t*)value; + uint8_to_buf(ptr, t->temperature); + uint8_to_buf(ptr + 1, t->start_time); + uint8_to_buf(ptr + 2, t->end_time); + ret += 4; + } break; + case INDOOR_AMBIENT_TEMPERATURE_STATISTICAL_VALUES: + case OUTDOOR_STATISTICAL_VALUES: + { + uint8_to_buf(ptr++, 5); + temperature_8_statistics_t *stat = (temperature_8_statistics_t*)value; + uint8_to_buf(ptr, stat->average); + uint8_to_buf(ptr + 1, stat->standard_deviation_value); + uint8_to_buf(ptr + 2, stat->minimum_value); + uint8_to_buf(ptr + 3, stat->minimum_value); + uint8_to_buf(ptr + 4, stat->sensing_duration); + ret += 6; + } break; + case DEVICE_OPERATING_TEMPERATURE_RANGE_SPECIFICATION: + { + uint8_to_buf(ptr++, 4); + temperature_range_t *r = (temperature_range_t*)value; + uint16_to_buf(ptr, r->minimum); + uint16_to_buf(ptr, r->maximum); + ret += 5; + } break; + case DEVICE_OPERATING_TEMPERATURE_STATISTICAL_VALUES: + { + uint8_to_buf(ptr++, 9); + temperature_statistics_t *stat = (temperature_statistics_t*)value; + uint16_to_buf(ptr, stat->average); + uint16_to_buf(ptr + 2, stat->standard_deviation); + uint16_to_buf(ptr + 4, stat->minimum); + uint16_to_buf(ptr + 6, stat->maximum); + uint8_to_buf(ptr + 8, stat->duration); + ret += 10; + } break; + case INPUT_VOLTAGE_RANGE_SPECIFICATION: + case OUTPUT_VOLTAGE_RANGE: + { + uint8_to_buf(ptr++, 6); + voltage_specification_t *v = (voltage_specification_t*)value; + uint16_to_buf(ptr, v->minimum); + uint16_to_buf(ptr + 2, v->typical); + uint16_to_buf(ptr + 4, v->maximum); + ret += 7; + } break; + case INPUT_VOLTAGE_STATISTICS: + case OUTPUT_VOLTAGE_STATISTICS: + { + uint8_to_buf(ptr++, 9); + voltage_statistics_t *stat = (voltage_statistics_t*)value; + uint16_to_buf(ptr, stat->average); + uint16_to_buf(ptr + 2, stat->standard_deviation); + uint16_to_buf(ptr + 4, stat->minimum); + uint16_to_buf(ptr + 6, stat->maximum); + uint8_to_buf(ptr + 8, stat->duration); + ret += 10; + } break; + default: + // If Property ID has not been recognized, roll back the length and the pointer + ret -= 2; + ptr -= 2; + break; + } + return ret; +} + +mesh_device_property_t mesh_sensor_data_from_buf(uint16_t property_id, const uint8_t *ptr) +{ + mesh_device_property_t property = { 0 }; + switch (property_id) { + case PRESENT_AMBIENT_TEMPERATURE: + case PRESENT_INDOOR_AMBIENT_TEMPERATURE: + case PRESENT_OUTDOOR_AMBIENT_TEMPERATURE: + case COLOR_RENDERING_INDEX_R9: + case COLOR_RENDERING_INDEX_RA: + { + property.int8 = int8_from_buf(ptr); + } break; + case PRESENCE_DETECTED: + case CHROMATICITY_TOLERANCE: + case INPUT_VOLTAGE_RIPPLE_SPECIFICATION: + case LIGHT_CONTROL_REGULATOR_ACCURACY: + case LUMEN_MAINTENANCE_FACTOR: + case MOTION_SENSED: + case MOTION_THRESHOLD: + case OUTPUT_RIPPLE_VOLTAGE_SPECIFICATION: + case PRESENT_DEVICE_OPERATING_EFFICIENCY: + case PRESENT_INPUT_RIPPLE_VOLTAGE: + case PRESENT_RELATIVE_OUTPUT_RIPPLE_VOLTAGE: + { + property.uint8 = uint8_from_buf(ptr); + } break; + case INITIAL_PLANCKIAN_DISTANCE: + case PRESENT_PLANCKIAN_DISTANCE: + { + property.int16 = int16_from_buf(ptr); + } break; + case INITIAL_CORRELATED_COLOR_TEMPERATURE: + case PRESENT_CORRELATED_COLOR_TEMPERATURE: + case PEOPLE_COUNT: + case DEVICE_COUNTRY_OF_ORIGIN: + case PRESENT_INPUT_CURRENT: + case PRESENT_OUTPUT_CURRENT: + case LUMINOUS_EFFICACY: + case INITIAL_LUMINOUS_FLUX: + case PRESENT_LUMINOUS_FLUX: + case CENTER_BEAM_INTENSITY_AT_FULL_POWER: + case LIGHT_CONTROL_LIGHTNESS_ON: + case LIGHT_CONTROL_LIGHTNESS_PROLONG: + case LIGHT_CONTROL_LIGHTNESS_STANDBY: + case PRESENT_DEVICE_OPERATING_TEMPERATURE: + case TIME_SINCE_MOTION_SENSED: + case TIME_SINCE_PRESENCE_DETECTED: + case PRESENT_INPUT_VOLTAGE: + case PRESENT_OUTPUT_VOLTAGE: + { + property.uint16 = uint16_from_buf(ptr); + } break; + /** 24-bit values */ + case TOTAL_DEVICE_OFF_ON_CYCLES: + case TOTAL_DEVICE_POWER_ON_CYCLES: + case DEVICE_DATE_OF_MANUFACTURE: + case DEVICE_ENERGY_USE_SINCE_TURN_ON: + case TOTAL_DEVICE_ENERGY_USE: + case DEVICE_RUNTIME_SINCE_TURN_ON: + case DEVICE_RUNTIME_WARRANTY: + case TOTAL_DEVICE_POWER_ON_TIME: + case TOTAL_DEVICE_RUNTIME: + case TOTAL_LIGHT_EXPOSURE_TIME: + case LIGHT_CONTROL_AMBIENT_LUXLEVEL_ON: + case LIGHT_CONTROL_AMBIENT_LUXLEVEL_PROLONG: + case LIGHT_CONTROL_AMBIENT_LUXLEVEL_STANDBY: + case LUMINOUS_ENERGY_SINCE_TURN_ON: + case RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE: + case TOTAL_LUMINOUS_ENERGY: + case LUMINOUS_EXPOSURE: + case PRESENT_DEVICE_INPUT_POWER: + case LIGHT_CONTROL_TIME_FADE: + case LIGHT_CONTROL_TIME_FADE_ON: + case LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO: + case LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL: + case LIGHT_CONTROL_TIME_OCCUPANCY_DELAY: \ + case LIGHT_CONTROL_TIME_PROLONG: + case LIGHT_CONTROL_TIME_RUN_ON: + case PRESENT_AMBIENT_LIGHT_LEVEL: + case PRESENT_ILLUMINANCE: + { + property.uint32 = uint24_from_buf(ptr); + } break; + /* 32-bit*/ + case LIGHT_CONTROL_REGULATOR_KID: + case LIGHT_CONTROL_REGULATOR_KIU: + case LIGHT_CONTROL_REGULATOR_KPD: + case LIGHT_CONTROL_REGULATOR_KPU: + { + property.uint32 = uint32_from_buf(ptr); + } break; + /* Average Current */ + case AVERAGE_INPUT_CURRENT: + case AVERAGE_OUTPUT_CURRENT: + { + property.average_current.current = uint16_from_buf(ptr); + property.average_current.duration = uint8_from_buf(ptr + 2); + } break; + /* Average Voltage */ + case AVERAGE_INPUT_VOLTAGE: + case AVERAGE_OUTPUT_VOLTAGE: + { + property.average_voltage.voltage = uint16_from_buf(ptr); + property.average_voltage.duration = uint8_from_buf(ptr + 2); + } break; + /* Chromaticity Coordinates */ + case INITIAL_CIE_1931_CHROMATICITY_COORDINATES: + case PRESENT_CIE_1931_CHROMATICITY_COORDINATES: + { + property.chromaticity_coordinates.x = uint16_from_buf(ptr); + property.chromaticity_coordinates.y = uint16_from_buf(ptr + 2); + } break; + /* Electric Current Range */ + case OUTPUT_CURRENT_RANGE: + { + property.electric_current_range.minimum = uint16_from_buf(ptr); + property.electric_current_range.maximum = uint16_from_buf(ptr + 2); + } break; + case INPUT_CURRENT_RANGE_SPECIFICATION: + { + property.electric_current_specification.minimum = uint16_from_buf(ptr); + property.electric_current_specification.typical = uint16_from_buf(ptr + 2); + property.electric_current_specification.maximum = uint16_from_buf(ptr + 4); + } break; + case INPUT_CURRENT_STATISTICS: + case OUTPUT_CURRENT_STATISTICS: + { + property.electric_current_statistics.current = uint16_from_buf(ptr); + property.electric_current_statistics.std_deviation = uint16_from_buf(ptr + 2); + property.electric_current_statistics.minimum = uint16_from_buf(ptr + 4); + property.electric_current_statistics.maximum = uint16_from_buf(ptr + 6); + property.electric_current_statistics.sensing_duration = uint8_from_buf(ptr + 8); + } break; + case RELATIVE_DEVICE_ENERGY_USE_IN_A_PERIOD_OF_DAY: + { + property.energy_in_a_period_of_day.energy = uint16_from_buf(ptr); + property.energy_in_a_period_of_day.start_time = uint8_from_buf(ptr + 2); + property.energy_in_a_period_of_day.end_time = uint8_from_buf(ptr + 3); + } break; + case DEVICE_OVER_TEMPERATURE_EVENT_STATISTICS: + case DEVICE_UNDER_TEMPERATURE_EVENT_STATISTICS: + case INPUT_OVER_CURRENT_EVENT_STATISTICS: + case INPUT_OVER_RIPPLE_VOLTAGE_EVENT_STATISTICS: + case INPUT_OVER_VOLTAGE_EVENT_STATISTICS: + case INPUT_UNDER_CURRENT_EVENT_STATISTICS: + case INPUT_UNDER_VOLTAGE_EVENT_STATISTICS: + case OPEN_CIRCUIT_EVENT_STATISTICS: + case OVER_OUTPUT_RIPPLE_VOLTAGE_EVENT_STATISTICS: + case SHORT_CIRCUIT_EVENT_STATISTICS: + { + property.event_statistics.number_of_events = uint16_from_buf(ptr); + property.event_statistics.average_event_duration = uint16_from_buf(ptr + 2); + property.event_statistics.time_since_last_event = uint8_from_buf(ptr + 4); + property.event_statistics.sensing_duration = uint8_from_buf(ptr + 5); + } break; + case DEVICE_POWER_RANGE_SPECIFICATION: + { + property.power_specification.minimum_power_value = uint24_from_buf(ptr); + property.power_specification.typical_power_value = uint24_from_buf(ptr + 3); + property.power_specification.maximum_power_value = uint24_from_buf(ptr + 6); + } break; + case AVERAGE_AMBIENT_TEMPERATURE_IN_A_PERIOD_OF_DAY: + { + property.temperature_8_in_a_period_of_day.temperature = uint8_from_buf(ptr); + property.temperature_8_in_a_period_of_day.start_time = uint8_from_buf(ptr + 1); + property.temperature_8_in_a_period_of_day.end_time = uint8_from_buf(ptr + 2); + } break; + case INDOOR_AMBIENT_TEMPERATURE_STATISTICAL_VALUES: + case OUTDOOR_STATISTICAL_VALUES: + { + property.temperature_8_statistics.average = uint8_from_buf(ptr); + property.temperature_8_statistics.standard_deviation_value = uint8_from_buf(ptr + 1); + property.temperature_8_statistics.minimum_value = uint8_from_buf(ptr + 2); + property.temperature_8_statistics.maximum_value = uint8_from_buf(ptr + 3); + property.temperature_8_statistics.sensing_duration = uint8_from_buf(ptr + 4); + } break; + case DEVICE_OPERATING_TEMPERATURE_RANGE_SPECIFICATION: + { + property.temperature_range.minimum = uint16_from_buf(ptr); + property.temperature_range.maximum = uint16_from_buf(ptr + 2); + } break; + case DEVICE_OPERATING_TEMPERATURE_STATISTICAL_VALUES: + { + property.temperature_statistics.average = uint16_from_buf(ptr); + property.temperature_statistics.standard_deviation = uint16_from_buf(ptr + 2); + property.temperature_statistics.minimum = uint16_from_buf(ptr + 4); + property.temperature_statistics.maximum = uint16_from_buf(ptr + 6); + property.temperature_statistics.duration = uint8_from_buf(ptr + 8); + } break; + case INPUT_VOLTAGE_RANGE_SPECIFICATION: + case OUTPUT_VOLTAGE_RANGE: + { + property.voltage_specification.minimum = uint16_from_buf(ptr); + property.voltage_specification.typical = uint16_from_buf(ptr + 2); + property.voltage_specification.maximum = uint16_from_buf(ptr + 2); + } break; + case INPUT_VOLTAGE_STATISTICS: + case OUTPUT_VOLTAGE_STATISTICS: + { + property.voltage_statistics.average = uint16_from_buf(ptr); + property.voltage_statistics.standard_deviation = uint16_from_buf(ptr + 2); + property.voltage_statistics.minimum = uint16_from_buf(ptr + 4); + property.voltage_statistics.maximum = uint16_from_buf(ptr + 6); + property.voltage_statistics.duration = uint8_from_buf(ptr + 8); + } break; + default: + break; + } + return property; +} + +sl_status_t mesh_lib_sensor_server_init(uint16_t elem_idx, uint8_t number_of_sensors, const sensor_descriptor_t *descriptors) +{ + uint8_t buf[128]; // temporary buffer allowing maximum 16 sensors for one element + for (int i = 0; i < number_of_sensors; i++) { + sensor_descriptor_t d = descriptors[i]; + uint8_t *ptr = &buf[i * 8]; + + uint16_to_buf(ptr, d.property_id); + uint32_t tolerance = (d.positive_tolerance & 0xfff) | (d.negative_tolerance << 12); + uint24_to_buf(ptr + 2, tolerance); + uint8_to_buf(ptr + 5, d.sampling_function); + uint8_to_buf(ptr + 6, d.measurement_period); + uint8_to_buf(ptr + 7, d.update_interval); + } + sl_btmesh_sensor_server_init(elem_idx, number_of_sensors * 8, buf); + return SL_STATUS_OK; +} + +sl_status_t mesh_lib_sensor_descriptors_from_buf(sensor_descriptor_t *descriptor, uint8_t *buf, int16_t input_len) +{ + // Descriptor array length should be a multiply of 8 + if (input_len & 0x07) { + return SL_STATUS_INVALID_PARAMETER; + } else { + int pos = 0; + int idx = 0; + while (pos < input_len) { + descriptor[idx].property_id = buf[pos] | (buf[pos + 1] << 8); + descriptor[idx].positive_tolerance = buf[pos + 2] | ((buf[pos + 3] & 0x0F) << 8); + descriptor[idx].negative_tolerance = (buf[pos + 3] >> 4) | (buf[pos + 4] << 4); + descriptor[idx].sampling_function = buf[pos + 5]; + descriptor[idx].measurement_period = buf[pos + 6]; + descriptor[idx].measurement_period = buf[pos + 7]; + pos += 8; + idx++; + } + } + return SL_STATUS_OK; +} + +/** + * The following functions are to convert fields for the Sensor Descriptor + * These are highly inefficient due to the fact that they require floating point calculations + * and therefore probable better avoided by just pre-calculating the values since they are constants. + */ + +/** + * Converting Positive and Negative Tolerance + * The formula is: + * Possible Error percentage = 100 * Tolerance value / 4095 + * and + * Tolerance value = Possible Error percentage / 100 * 4095; + */ +uint16_t error_percentage2tolerance_value(float error_percentage) +{ + return (uint16_t)(error_percentage / 100 * 4095); +} + +double tolerance_value2error_percentage(uint16_t tolerance) +{ + return (double)tolerance / 4095 * 100; +} + +/** + * Converting Measurement Period or Update Interval values between seconds and the representation if the standard + * The formula is: + * time period = 1.1 ^ (value - 64) + * and + * descriptor fields' value = (base 1.1 logarithm of time_period_in_seconds ) + 64 + */ +uint32_t time_exp_to_seconds(uint32_t mp) +{ + return (uint32_t)pow((double)1.1, mp - 64); +} + +uint32_t seconds_to_time_exp(uint32_t seconds) +{ + return (uint32_t)(log((double)seconds) / log((double)1.1) + 64); +} diff --git a/protocol/bluetooth/src/sl_btmesh_serdeser.c b/protocol/bluetooth/src/sl_btmesh_serdeser.c new file mode 100644 index 00000000000..674f6fd7e76 --- /dev/null +++ b/protocol/bluetooth/src/sl_btmesh_serdeser.c @@ -0,0 +1,1397 @@ +/***************************************************************************//** + * @brief Mesh generic model data serialization/deserialization functions + ******************************************************************************* + * # License + * Copyright 2018 Silicon Laboratories Inc. www.silabs.com + ******************************************************************************* + * + * The licensor of this software is Silicon Laboratories Inc. Your use of this + * software is governed by the terms of Silicon Labs Master Software License + * Agreement (MSLA) available at + * www.silabs.com/about-us/legal/master-software-license-agreement. This + * software is distributed to you in Source Code format and is governed by the + * sections of the MSLA applicable to Source Code. + * + ******************************************************************************/ + +#include +#include +#include +#include + +#include "sl_btmesh_capi_types.h" +#include "sl_btmesh_generic_model_capi_types.h" +#include "sl_btmesh_serdeser.h" + +static int16_t int16_from_buf(const uint8_t *ptr) +{ + return ((int16_t)ptr[0]) | ((int16_t)ptr[1] << 8); +} + +static void int16_to_buf(uint8_t *ptr, int16_t n) +{ + ptr[0] = n & 0xff; + ptr[1] = (n >> 8) & 0xff; +} + +static uint16_t uint16_from_buf(const uint8_t *ptr) +{ + return ((uint16_t)ptr[0]) | ((uint16_t)ptr[1] << 8); +} + +static void uint16_to_buf(uint8_t *ptr, uint16_t n) +{ + ptr[0] = n & 0xff; + ptr[1] = (n >> 8) & 0xff; +} + +static int32_t int32_from_buf(const uint8_t *ptr) +{ + return + ((int32_t)ptr[0]) + | ((int32_t)ptr[1] << 8) + | ((int32_t)ptr[2] << 16) + | ((int32_t)ptr[3] << 24) + ; +} + +static void int32_to_buf(uint8_t *ptr, int32_t n) +{ + ptr[0] = n & 0xff; + ptr[1] = (n >> 8) & 0xff; + ptr[2] = (n >> 16) & 0xff; + ptr[3] = (n >> 24) & 0xff; +} + +sl_status_t mesh_lib_serialize_request(const struct mesh_generic_request *req, + uint8_t *msg_buf, + size_t msg_len, + size_t *msg_used) +{ + size_t msg_off = 0; + + switch (req->kind) { + case mesh_generic_request_on_off: + if (msg_len < 1) { + return SL_STATUS_INVALID_PARAMETER; + } + msg_buf[msg_off++] = req->on_off; + *msg_used = msg_off; + break; + + case mesh_generic_request_on_power_up: + if (msg_len < 1) { + return SL_STATUS_INVALID_PARAMETER; + } + msg_buf[msg_off++] = req->on_power_up; + *msg_used = msg_off; + break; + + case mesh_generic_request_transition_time: + if (msg_len < 1) { + return SL_STATUS_INVALID_PARAMETER; + } + msg_buf[msg_off++] = req->transition_time; + *msg_used = msg_off; + break; + + case mesh_generic_request_level: + case mesh_generic_request_level_move: + case mesh_generic_request_level_halt: + if (msg_len < 2) { + return SL_STATUS_INVALID_PARAMETER; + } + int16_to_buf(&msg_buf[msg_off], req->level); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_generic_request_level_delta: + if (msg_len < 4) { + return SL_STATUS_INVALID_PARAMETER; + } + int32_to_buf(&msg_buf[msg_off], req->delta); + msg_off += 4; + *msg_used = msg_off; + break; + + case mesh_generic_request_location_global: + if (msg_len < 10) { + return SL_STATUS_INVALID_PARAMETER; + } + int32_to_buf(&msg_buf[msg_off], req->location_global.lat); + msg_off += 4; + int32_to_buf(&msg_buf[msg_off], req->location_global.lon); + msg_off += 4; + int16_to_buf(&msg_buf[msg_off], req->location_global.alt); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_generic_request_location_local: + if (msg_len < 9) { + return SL_STATUS_INVALID_PARAMETER; + } + int16_to_buf(&msg_buf[msg_off], req->location_local.north); + msg_off += 2; + int16_to_buf(&msg_buf[msg_off], req->location_local.east); + msg_off += 2; + int16_to_buf(&msg_buf[msg_off], req->location_local.alt); + msg_off += 2; + msg_buf[msg_off++] = req->location_local.floor; + uint16_to_buf(&msg_buf[msg_off], req->location_local.uncertainty); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_generic_request_power_level: + case mesh_generic_request_power_level_default: + if (msg_len < 2) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], req->power_level); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_generic_request_power_level_range: + if (msg_len < 4) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], req->power_range[0]); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], req->power_range[1]); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_generic_request_property_user: + if (msg_len < 2 + (size_t)req->property.length) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], req->property.id); + msg_off += 2; + memcpy(msg_buf + msg_off, + req->property.buffer + req->property.offset, + req->property.length); + msg_off += req->property.length; + *msg_used = msg_off; + break; + + case mesh_generic_request_property_admin: + if (msg_len < 3 + (size_t)req->property.length) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], req->property.id); + msg_off += 2; + msg_buf[msg_off++] = req->property.access; + memcpy(msg_buf + msg_off, + req->property.buffer + req->property.offset, + req->property.length); + msg_off += req->property.length; + *msg_used = msg_off; + break; + + case mesh_generic_request_property_manuf: + if (msg_len < 3) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], req->property.id); + msg_off += 2; + msg_buf[msg_off++] = req->property.access; + *msg_used = msg_off; + break; + + case mesh_lighting_request_lightness_actual: + case mesh_lighting_request_lightness_linear: + case mesh_lighting_request_lightness_default: + if (msg_len < 2) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], req->lightness); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_request_lightness_range: + if (msg_len < 4) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], req->lightness_range.min); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], req->lightness_range.max); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_request_ctl: + case mesh_lighting_request_ctl_default: + if (msg_len < 6) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], req->ctl.lightness); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], req->ctl.temperature); + msg_off += 2; + int16_to_buf(&msg_buf[msg_off], req->ctl.deltauv); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_request_ctl_temperature: + if (msg_len < 4) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], req->ctl_temperature.temperature); + msg_off += 2; + int16_to_buf(&msg_buf[msg_off], req->ctl_temperature.deltauv); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_request_ctl_temperature_range: + if (msg_len < 4) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], req->ctl_temperature_range.min); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], req->ctl_temperature_range.max); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_request_hsl: + case mesh_lighting_request_hsl_default: + if (msg_len < 6) { + return -1; + } + uint16_to_buf(&msg_buf[msg_off], req->hsl.lightness); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], req->hsl.hue); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], req->hsl.saturation); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_request_hsl_hue: + if (msg_len < 2) { + return -1; + } + uint16_to_buf(&msg_buf[msg_off], req->hsl_hue); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_request_hsl_saturation: + if (msg_len < 2) { + return -1; + } + uint16_to_buf(&msg_buf[msg_off], req->hsl_saturation); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_request_hsl_range: + if (msg_len < 8) { + return -1; + } + uint16_to_buf(&msg_buf[msg_off], req->hsl_range.hue_min); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], req->hsl_range.hue_max); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], req->hsl_range.saturation_min); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], req->hsl_range.saturation_max); + msg_off += 2; + *msg_used = msg_off; + break; + + default: + return SL_STATUS_INVALID_PARAMETER; + } + + return SL_STATUS_OK; +} + +sl_status_t mesh_lib_deserialize_request(struct mesh_generic_request *req, + mesh_generic_request_t kind, + const uint8_t *msg_buf, + size_t msg_len) +{ + size_t msg_off = 0; + + switch (kind) { + case mesh_generic_request_on_off: + if (msg_len - msg_off != 1) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->on_off = msg_buf[msg_off]; + break; + + case mesh_generic_request_on_power_up: + if (msg_len - msg_off != 1) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->on_power_up = msg_buf[msg_off]; + break; + + case mesh_generic_request_transition_time: + if (msg_len - msg_off != 1) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->transition_time = msg_buf[msg_off]; + break; + + case mesh_generic_request_level: + case mesh_generic_request_level_move: + case mesh_generic_request_level_halt: + if (msg_len - msg_off != 2) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->level = int16_from_buf(&msg_buf[msg_off]); + break; + + case mesh_generic_request_level_delta: + if (msg_len - msg_off != 4) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->delta = int32_from_buf(&msg_buf[msg_off]); + break; + + case mesh_generic_request_location_global: + if (msg_len - msg_off != 10) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->location_global.lat = int32_from_buf(&msg_buf[msg_off]); + msg_off += 4; + req->location_global.lon = int32_from_buf(&msg_buf[msg_off]); + msg_off += 4; + req->location_global.alt = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + break; + + case mesh_generic_request_location_local: + if (msg_len - msg_off != 9) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->location_local.north = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + req->location_local.east = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + req->location_local.alt = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + req->location_local.floor = msg_buf[msg_off++]; + req->location_local.uncertainty = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + break; + + case mesh_generic_request_power_level: + case mesh_generic_request_power_level_default: + if (msg_len - msg_off != 2) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->power_level = uint16_from_buf(&msg_buf[msg_off]); + break; + + case mesh_generic_request_power_level_range: + if (msg_len - msg_off != 4) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->power_range[0] = uint16_from_buf(&msg_buf[msg_off]); + req->power_range[1] = uint16_from_buf(&msg_buf[msg_off + 2]); + break; + + case mesh_generic_request_property_user: + if (msg_len - msg_off < 2) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->property.id = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + req->property.buffer = msg_buf; + req->property.offset = msg_off; + req->property.length = msg_len - msg_off; + break; + + case mesh_generic_request_property_admin: + if (msg_len - msg_off < 3) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->property.id = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + req->property.access = msg_buf[msg_off++]; + req->property.buffer = msg_buf; + req->property.offset = msg_off; + req->property.length = msg_len - msg_off; + break; + + case mesh_generic_request_property_manuf: + if (msg_len - msg_off != 3) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->property.id = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + req->property.access = msg_buf[msg_off++]; + req->property.buffer = NULL; + req->property.offset = 0; + req->property.length = 0; + break; + + case mesh_lighting_request_lightness_actual: + case mesh_lighting_request_lightness_linear: + case mesh_lighting_request_lightness_default: + if (msg_len - msg_off != 2) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->lightness = uint16_from_buf(&msg_buf[msg_off]); + break; + + case mesh_lighting_request_lightness_range: + if (msg_len - msg_off != 4) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->lightness_range.min = uint16_from_buf(&msg_buf[msg_off]); + req->lightness_range.max = uint16_from_buf(&msg_buf[msg_off + 2]); + break; + + case mesh_lighting_request_ctl: + case mesh_lighting_request_ctl_default: + if (msg_len - msg_off != 6) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->ctl.lightness = uint16_from_buf(&msg_buf[msg_off]); + req->ctl.temperature = uint16_from_buf(&msg_buf[msg_off + 2]); + req->ctl.deltauv = int16_from_buf(&msg_buf[msg_off + 4]); + break; + + case mesh_lighting_request_ctl_temperature: + if (msg_len - msg_off != 4) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->ctl_temperature.temperature = uint16_from_buf(&msg_buf[msg_off]); + req->ctl_temperature.deltauv = int16_from_buf(&msg_buf[msg_off + 2]); + break; + + case mesh_lighting_request_ctl_temperature_range: + if (msg_len - msg_off != 4) { + return SL_STATUS_INVALID_PARAMETER; + } + req->kind = kind; + req->ctl_temperature_range.min = uint16_from_buf(&msg_buf[msg_off]); + req->ctl_temperature_range.max = uint16_from_buf(&msg_buf[msg_off + 2]); + break; + + case mesh_lighting_request_hsl: + case mesh_lighting_request_hsl_default: + if (msg_len - msg_off != 6) { + return -1; + } + req->kind = kind; + req->hsl.lightness = uint16_from_buf(&msg_buf[msg_off + 0]); + req->hsl.hue = uint16_from_buf(&msg_buf[msg_off + 2]); + req->hsl.saturation = uint16_from_buf(&msg_buf[msg_off + 4]); + break; + + case mesh_lighting_request_hsl_hue: + if (msg_len - msg_off != 2) { + return -1; + } + req->kind = kind; + req->hsl_hue = uint16_from_buf(&msg_buf[msg_off]); + break; + + case mesh_lighting_request_hsl_saturation: + if (msg_len - msg_off != 2) { + return -1; + } + req->kind = kind; + req->hsl_saturation = uint16_from_buf(&msg_buf[msg_off]); + break; + + case mesh_lighting_request_hsl_range: + if (msg_len - msg_off != 8) { + return -1; + } + req->kind = kind; + req->hsl_range.hue_min = uint16_from_buf(&msg_buf[msg_off]); + req->hsl_range.hue_max = uint16_from_buf(&msg_buf[msg_off + 2]); + req->hsl_range.saturation_min = uint16_from_buf(&msg_buf[msg_off + 4]); + req->hsl_range.saturation_max = uint16_from_buf(&msg_buf[msg_off + 6]); + break; + + default: + return SL_STATUS_INVALID_PARAMETER; + } + + return SL_STATUS_OK; +} + +sl_status_t mesh_lib_serialize_state(const struct mesh_generic_state *current, + const struct mesh_generic_state *target, + uint8_t *msg_buf, + size_t msg_len, + size_t *msg_used) +{ + size_t msg_off = 0; + + switch (current->kind) { + case mesh_generic_state_on_off: + if (msg_len < (target ? 2 : 1)) { + return SL_STATUS_INVALID_PARAMETER; + } + msg_buf[msg_off++] = current->on_off.on; + if (target) { + msg_buf[msg_off++] = target->on_off.on; + } + *msg_used = msg_off; + break; + + case mesh_generic_state_on_power_up: + if (msg_len < 1) { + return SL_STATUS_INVALID_PARAMETER; + } + msg_buf[msg_off++] = current->on_power_up.on_power_up; + *msg_used = msg_off; + break; + + case mesh_generic_state_transition_time: + if (msg_len < 1) { + return SL_STATUS_INVALID_PARAMETER; + } + msg_buf[msg_off++] = current->transition_time.time; + *msg_used = msg_off; + break; + + case mesh_generic_state_level: + if (msg_len < (target ? 4 : 2)) { + return SL_STATUS_INVALID_PARAMETER; + } + int16_to_buf(&msg_buf[msg_off], current->level.level); + msg_off += 2; + if (target) { + int16_to_buf(&msg_buf[msg_off], target->level.level); + msg_off += 2; + } + *msg_used = msg_off; + break; + + case mesh_generic_state_location_global: + if (msg_len < 10) { + return SL_STATUS_INVALID_PARAMETER; + } + int32_to_buf(&msg_buf[msg_off], current->location_global.lat); + msg_off += 4; + int32_to_buf(&msg_buf[msg_off], current->location_global.lon); + msg_off += 4; + int16_to_buf(&msg_buf[msg_off], current->location_global.alt); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_generic_state_location_local: + if (msg_len < 9) { + return SL_STATUS_INVALID_PARAMETER; + } + int16_to_buf(&msg_buf[msg_off], current->location_local.north); + msg_off += 2; + int16_to_buf(&msg_buf[msg_off], current->location_local.east); + msg_off += 2; + int16_to_buf(&msg_buf[msg_off], current->location_local.alt); + msg_off += 2; + msg_buf[msg_off++] = current->location_local.floor; + uint16_to_buf(&msg_buf[msg_off], current->location_local.uncertainty); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_generic_state_battery: + if (msg_len < 8) { + return SL_STATUS_INVALID_PARAMETER; + } + msg_buf[msg_off++] = current->battery.level; + memcpy(msg_buf + msg_off, current->battery.discharge_time, 3); + msg_off += 3; + memcpy(msg_buf + msg_off, current->battery.charge_time, 3); + msg_off += 3; + msg_buf[msg_off++] = current->battery.flags; + *msg_used = msg_off; + break; + + case mesh_generic_state_power_level: + if (msg_len < (target ? 4 : 2)) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->power_level.level); + msg_off += 2; + if (target) { + uint16_to_buf(&msg_buf[msg_off], target->power_level.level); + msg_off += 2; + } + *msg_used = msg_off; + break; + + case mesh_generic_state_power_level_last: + if (msg_len < 2) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->power_level_last.level); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_generic_state_power_level_default: + if (msg_len < 2) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->power_level_default.level); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_generic_state_power_level_range: + if (msg_len < 5) { + return SL_STATUS_INVALID_PARAMETER; + } + msg_buf[msg_off++] = current->power_level_range.status; + uint16_to_buf(&msg_buf[msg_off], current->power_level_range.min); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->power_level_range.max); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_generic_state_property_user: + case mesh_generic_state_property_admin: + case mesh_generic_state_property_manuf: + if (msg_len < 3 + (size_t)current->property.length) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->property.id); + msg_off += 2; + msg_buf[msg_off++] = current->property.access; + memcpy(msg_buf + msg_off, + current->property.buffer + current->property.offset, + current->property.length); + msg_off += current->property.length; + *msg_used = msg_off; + break; + + case mesh_generic_state_property_list_user: + case mesh_generic_state_property_list_admin: + case mesh_generic_state_property_list_manuf: + case mesh_generic_state_property_list_client: + if (msg_len < current->property_list.length) { + return SL_STATUS_INVALID_PARAMETER; + } + memcpy(msg_buf + msg_off, + current->property_list.buffer + current->property_list.offset, + current->property_list.length); + msg_off += current->property_list.length; + *msg_used = msg_off; + break; + + case mesh_lighting_state_lightness_actual: + case mesh_lighting_state_lightness_linear: + if (msg_len < (target ? 4 : 2)) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->lightness.level); + msg_off += 2; + if (target) { + uint16_to_buf(&msg_buf[msg_off], target->lightness.level); + msg_off += 2; + } + *msg_used = msg_off; + break; + + case mesh_lighting_state_lightness_last: + case mesh_lighting_state_lightness_default: + if (msg_len < 2) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->lightness.level); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_state_lightness_range_with_status: + if (msg_len < 5) { + return SL_STATUS_INVALID_PARAMETER; + } + msg_buf[msg_off++] = current->lightness_range.status; + //Intentional fallthrough + case mesh_lighting_state_lightness_range: + if (msg_len < 4) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->lightness_range.min); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->lightness_range.max); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_state_ctl: + if (msg_len < (target ? 12 : 6)) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->ctl.lightness); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->ctl.temperature); + msg_off += 2; + int16_to_buf(&msg_buf[msg_off], current->ctl.deltauv); + msg_off += 2; + if (target) { + uint16_to_buf(&msg_buf[msg_off], target->ctl.lightness); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], target->ctl.temperature); + msg_off += 2; + int16_to_buf(&msg_buf[msg_off], target->ctl.deltauv); + msg_off += 2; + } + *msg_used = msg_off; + break; + + case mesh_lighting_state_ctl_temperature: + if (msg_len < (target ? 8 : 4)) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->ctl_temperature.temperature); + msg_off += 2; + int16_to_buf(&msg_buf[msg_off], current->ctl_temperature.deltauv); + msg_off += 2; + if (target) { + uint16_to_buf(&msg_buf[msg_off], target->ctl_temperature.temperature); + msg_off += 2; + int16_to_buf(&msg_buf[msg_off], target->ctl_temperature.deltauv); + msg_off += 2; + } + *msg_used = msg_off; + break; + + case mesh_lighting_state_ctl_lightness_temperature: + if (msg_len < (target ? 8 : 4)) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->ctl_lightness_temperature.lightness); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->ctl_lightness_temperature.temperature); + msg_off += 2; + if (target) { + uint16_to_buf(&msg_buf[msg_off], target->ctl_lightness_temperature.lightness); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], target->ctl_lightness_temperature.temperature); + msg_off += 2; + } + *msg_used = msg_off; + break; + + case mesh_lighting_state_ctl_default: + if (msg_len < 6) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->ctl.lightness); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->ctl.temperature); + msg_off += 2; + int16_to_buf(&msg_buf[msg_off], current->ctl.deltauv); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_state_ctl_temperature_range_with_status: + if (msg_len < 5) { + return SL_STATUS_INVALID_PARAMETER; + } + msg_buf[msg_off++] = current->ctl_temperature_range.status; + //Intentional fallthrough + case mesh_lighting_state_ctl_temperature_range: + if (msg_len < 4) { + return SL_STATUS_INVALID_PARAMETER; + } + uint16_to_buf(&msg_buf[msg_off], current->ctl_temperature_range.min); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->ctl_temperature_range.max); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_state_hsl: + if (msg_len < (target ? 12 : 6)) { + return -1; + } + uint16_to_buf(&msg_buf[msg_off], current->hsl.lightness); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->hsl.hue); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->hsl.saturation); + msg_off += 2; + if (target) { + uint16_to_buf(&msg_buf[msg_off], target->hsl.lightness); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], target->hsl.hue); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], target->hsl.saturation); + msg_off += 2; + } + *msg_used = msg_off; + break; + + case mesh_lighting_state_hsl_target: + case mesh_lighting_state_hsl_default: + if (msg_len < 6) { + return -1; + } + uint16_to_buf(&msg_buf[msg_off], current->hsl.lightness); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->hsl.hue); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->hsl.saturation); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_lighting_state_hsl_hue: + if (msg_len < (target ? 4 : 2)) { + return -1; + } + uint16_to_buf(&msg_buf[msg_off], current->hsl_hue.hue); + msg_off += 2; + if (target) { + uint16_to_buf(&msg_buf[msg_off], target->hsl_hue.hue); + msg_off += 2; + } + *msg_used = msg_off; + break; + + case mesh_lighting_state_hsl_saturation: + if (msg_len < (target ? 4 : 2)) { + return -1; + } + uint16_to_buf(&msg_buf[msg_off], current->hsl_saturation.saturation); + msg_off += 2; + if (target) { + uint16_to_buf(&msg_buf[msg_off], target->hsl_saturation.saturation); + msg_off += 2; + } + *msg_used = msg_off; + break; + + case mesh_lighting_state_hsl_range_with_status: + if (msg_len < 9) { + return -1; + } + msg_buf[msg_off++] = current->hsl_range.status; + //Intentional fallthrough + case mesh_lighting_state_hsl_range: + if (msg_len < 8) { + return -1; + } + uint16_to_buf(&msg_buf[msg_off], current->hsl_range.hue_min); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->hsl_range.hue_max); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->hsl_range.saturation_min); + msg_off += 2; + uint16_to_buf(&msg_buf[msg_off], current->hsl_range.saturation_max); + msg_off += 2; + *msg_used = msg_off; + break; + + case mesh_generic_state_last: + default: + return SL_STATUS_INVALID_PARAMETER; + } + + return SL_STATUS_OK; +} + +sl_status_t mesh_lib_deserialize_state(struct mesh_generic_state *current, + struct mesh_generic_state *target, + int *has_target, + mesh_generic_state_t kind, + const uint8_t *msg_buf, + size_t msg_len) +{ + size_t msg_off = 0; + + switch (kind) { + case mesh_generic_state_on_off: + if (msg_len - msg_off == 1) { + current->kind = kind; + current->on_off.on = msg_buf[msg_off++]; + *has_target = 0; + } else if (msg_len - msg_off == 2) { + current->kind = kind; + current->on_off.on = msg_buf[msg_off++]; + target->kind = kind; + target->on_off.on = msg_buf[msg_off++]; + *has_target = 1; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_generic_state_on_power_up: + if (msg_len - msg_off == 1) { + current->kind = kind; + current->on_power_up.on_power_up = msg_buf[msg_off++]; + *has_target = 0; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_generic_state_transition_time: + if (msg_len - msg_off == 1) { + current->kind = kind; + current->transition_time.time = msg_buf[msg_off++]; + *has_target = 0; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_generic_state_level: + if (msg_len - msg_off == 2) { + current->kind = kind; + current->level.level = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else if (msg_len - msg_off == 4) { + current->kind = kind; + current->level.level = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->kind = kind; + target->level.level = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 1; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_generic_state_location_global: + if (msg_len - msg_off != 10) { + return SL_STATUS_INVALID_PARAMETER; + } + current->kind = kind; + current->location_global.lat = int32_from_buf(&msg_buf[msg_off]); + msg_off += 4; + current->location_global.lon = int32_from_buf(&msg_buf[msg_off]); + msg_off += 4; + current->location_global.alt = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + break; + + case mesh_generic_state_location_local: + if (msg_len - msg_off != 9) { + return SL_STATUS_INVALID_PARAMETER; + } + current->kind = kind; + current->location_local.north = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->location_local.east = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->location_local.alt = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->location_local.floor = msg_buf[msg_off++]; + current->location_local.uncertainty = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + break; + + case mesh_generic_state_battery: + if (msg_len - msg_off != 8) { + return SL_STATUS_INVALID_PARAMETER; + } + current->kind = kind; + current->battery.level = msg_buf[msg_off++]; + memcpy(current->battery.discharge_time, msg_buf + msg_off, 3); + msg_off += 3; + memcpy(current->battery.charge_time, msg_buf + msg_off, 3); + msg_off += 3; + current->battery.flags = msg_buf[msg_off++]; + *has_target = 0; + break; + + case mesh_generic_state_power_level: + if (msg_len - msg_off == 2) { + current->kind = kind; + current->power_level.level = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else if (msg_len - msg_off == 4) { + current->kind = kind; + current->power_level.level = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->kind = kind; + target->power_level.level = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 1; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_generic_state_power_level_last: + if (msg_len - msg_off != 2) { + return SL_STATUS_INVALID_PARAMETER; + } + current->kind = kind; + current->power_level_last.level = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + break; + + case mesh_generic_state_power_level_default: + if (msg_len - msg_off != 2) { + return SL_STATUS_INVALID_PARAMETER; + } + current->kind = kind; + current->power_level_default.level = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + break; + + case mesh_generic_state_power_level_range: + if (msg_len - msg_off != 5) { + return SL_STATUS_INVALID_PARAMETER; + } + current->kind = kind; + current->power_level_range.status = msg_buf[msg_off++]; + current->power_level_range.min = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->power_level_range.max = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + break; + + case mesh_generic_state_property_user: + case mesh_generic_state_property_admin: + case mesh_generic_state_property_manuf: + if (msg_len - msg_off < 3) { + return SL_STATUS_INVALID_PARAMETER; + } + current->kind = kind; + current->property.id = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->property.access = msg_buf[msg_off++]; + current->property.buffer = msg_buf; + current->property.offset = msg_off; + current->property.length = msg_len - msg_off; + *has_target = 0; + break; + + case mesh_generic_state_property_list_user: + case mesh_generic_state_property_list_admin: + case mesh_generic_state_property_list_manuf: + case mesh_generic_state_property_list_client: + if ((msg_len - msg_off) & 0x01) { + return SL_STATUS_INVALID_PARAMETER; + } + current->kind = kind; + current->property_list.buffer = msg_buf; + current->property_list.offset = msg_off; + current->property_list.length = msg_len - msg_off; + *has_target = 0; + break; + + case mesh_lighting_state_lightness_actual: + case mesh_lighting_state_lightness_linear: + if (msg_len - msg_off == 2) { + current->kind = kind; + current->lightness.level = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else if (msg_len - msg_off == 4) { + current->kind = kind; + current->lightness.level = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->kind = kind; + target->lightness.level = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 1; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_lighting_state_lightness_last: + case mesh_lighting_state_lightness_default: + if (msg_len - msg_off == 2) { + current->kind = kind; + current->lightness.level = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_lighting_state_lightness_range_with_status: + if (msg_len - msg_off == 5) { + current->lightness_range.status = msg_buf[msg_off++]; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + //Intentional fallthrough + case mesh_lighting_state_lightness_range: + if (msg_len - msg_off == 4) { + current->kind = kind; + current->lightness_range.min = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->lightness_range.max = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_lighting_state_ctl: + if (msg_len - msg_off == 6) { + current->kind = kind; + current->ctl.lightness = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->ctl.temperature = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->ctl.deltauv = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else if (msg_len - msg_off == 12) { + current->kind = kind; + current->ctl.lightness = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->ctl.temperature = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->ctl.deltauv = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->kind = kind; + target->ctl.lightness = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->ctl.temperature = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->ctl.deltauv = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 1; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_lighting_state_ctl_temperature: + if (msg_len - msg_off == 4) { + current->kind = kind; + current->ctl_temperature.temperature = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->ctl_temperature.deltauv = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else if (msg_len - msg_off == 8) { + current->kind = kind; + current->ctl_temperature.temperature = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->ctl_temperature.deltauv = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->kind = kind; + target->ctl_temperature.temperature = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->ctl_temperature.deltauv = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 1; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_lighting_state_ctl_lightness_temperature: + if (msg_len - msg_off == 4) { + current->kind = kind; + current->ctl_lightness_temperature.lightness = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->ctl_lightness_temperature.temperature = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else if (msg_len - msg_off == 8) { + current->kind = kind; + current->ctl_lightness_temperature.lightness = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->ctl_lightness_temperature.temperature = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->kind = kind; + target->ctl_lightness_temperature.lightness = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->ctl_lightness_temperature.temperature = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 1; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_lighting_state_ctl_default: + if (msg_len - msg_off == 6) { + current->kind = kind; + current->ctl.lightness = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->ctl.temperature = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->ctl.deltauv = int16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_lighting_state_ctl_temperature_range_with_status: + if (msg_len - msg_off == 5) { + current->ctl_temperature_range.status = msg_buf[msg_off++]; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + // Intentional fallthrough + case mesh_lighting_state_ctl_temperature_range: + if (msg_len - msg_off == 4) { + current->kind = kind; + current->ctl_temperature_range.min = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->ctl_temperature_range.max = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else { + return SL_STATUS_INVALID_PARAMETER; + } + break; + + case mesh_lighting_state_hsl: + if (msg_len - msg_off == 6) { + current->kind = kind; + current->hsl.lightness = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->hsl.hue = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->hsl.saturation = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else if (msg_len - msg_off == 12) { + current->kind = kind; + current->hsl.lightness = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->hsl.hue = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->hsl.saturation = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->hsl.lightness = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->hsl.hue = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->hsl.saturation = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 1; + } else { + return -1; + } + break; + + case mesh_lighting_state_hsl_target: + case mesh_lighting_state_hsl_default: + if (msg_len - msg_off == 6) { + current->kind = kind; + current->hsl.lightness = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->hsl.hue = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->hsl.saturation = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else { + return -1; + } + break; + + case mesh_lighting_state_hsl_hue: + if (msg_len - msg_off == 2) { + current->kind = kind; + current->hsl_hue.hue = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else if (msg_len - msg_off == 4) { + current->kind = kind; + current->hsl_hue.hue = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->hsl_hue.hue = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 1; + } else { + return -1; + } + break; + + case mesh_lighting_state_hsl_saturation: + if (msg_len - msg_off == 2) { + current->kind = kind; + current->hsl_saturation.saturation = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else if (msg_len - msg_off == 4) { + current->kind = kind; + current->hsl_saturation.saturation = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + target->hsl_saturation.saturation = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 1; + } else { + return -1; + } + break; + + case mesh_lighting_state_hsl_range_with_status: + if (msg_len - msg_off == 9) { + current->hsl_range.status = msg_buf[msg_off++]; + } else { + return -1; + } + // Intentional fallthrough + case mesh_lighting_state_hsl_range: + if (msg_len - msg_off == 8) { + current->kind = kind; + current->hsl_range.hue_min = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->hsl_range.hue_max = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->hsl_range.saturation_min = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + current->hsl_range.saturation_max = uint16_from_buf(&msg_buf[msg_off]); + msg_off += 2; + *has_target = 0; + } else { + return -1; + } + break; + + case mesh_generic_state_last: + default: + return SL_STATUS_INVALID_PARAMETER; + } + + return SL_STATUS_OK; +} diff --git a/protocol/flex/libs/libconnect-aes-security-library-efr32xg1-gcc.a b/protocol/flex/libs/libconnect-aes-security-library-efr32xg1-gcc.a index 243579b10ce..b13429bc9ba 100644 --- a/protocol/flex/libs/libconnect-aes-security-library-efr32xg1-gcc.a +++ b/protocol/flex/libs/libconnect-aes-security-library-efr32xg1-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9dc6bda6abb5e93fd56807b53002122dda2014771a2917dc4b84f8cdeae3ff55 +oid sha256:1a81f2ecad134e0c6d9ba3de6b1bf0bdbb9befa0e2001e6afe49623d572d24b9 size 70280 diff --git a/protocol/flex/libs/libconnect-aes-security-library-efr32xg1-iar.a b/protocol/flex/libs/libconnect-aes-security-library-efr32xg1-iar.a index ca09c361eb6..187fa7d4116 100644 --- a/protocol/flex/libs/libconnect-aes-security-library-efr32xg1-iar.a +++ b/protocol/flex/libs/libconnect-aes-security-library-efr32xg1-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e1a2710c5d2a7a558f93c7f4beee3322c88ac96e0e57fa57e6e21cd1d0a15f1 +oid sha256:5aa2171bdc9f26619598c4ad5ce6a997602df508d17a59eee80fd9079dcc6234 size 42260 diff --git a/protocol/flex/libs/libconnect-aes-security-library-efr32xg1x-gcc.a b/protocol/flex/libs/libconnect-aes-security-library-efr32xg1x-gcc.a index 1bc20ca3225..13585234deb 100644 --- a/protocol/flex/libs/libconnect-aes-security-library-efr32xg1x-gcc.a +++ b/protocol/flex/libs/libconnect-aes-security-library-efr32xg1x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bdee83a34adfca407cb6c43283991118ecdd2d2e0eec19e7400108d9f366db6a +oid sha256:85aeac372844d52e6c6778065218dc855f0d1a5883cfdf0a4f9b1028e00a88ab size 70280 diff --git a/protocol/flex/libs/libconnect-aes-security-library-efr32xg1x-iar.a b/protocol/flex/libs/libconnect-aes-security-library-efr32xg1x-iar.a index 2fa7ffe4e6e..7cef8d0f42a 100644 --- a/protocol/flex/libs/libconnect-aes-security-library-efr32xg1x-iar.a +++ b/protocol/flex/libs/libconnect-aes-security-library-efr32xg1x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b7830d98010b80f5334cb8be4438d9761df47a64ac5f6369f56cad0e8fcaa1a +oid sha256:045514f14279b155d918ee492001a55f60454fde9c8c82a3c6374a9956d1d9f7 size 42730 diff --git a/protocol/flex/libs/libconnect-aes-security-library-efr32xg2x-gcc.a b/protocol/flex/libs/libconnect-aes-security-library-efr32xg2x-gcc.a index 13b6ba36fd9..d3fba082242 100644 --- a/protocol/flex/libs/libconnect-aes-security-library-efr32xg2x-gcc.a +++ b/protocol/flex/libs/libconnect-aes-security-library-efr32xg2x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:78216286d30c9c563dc3ed8719f343fa433564adaf5ca2060edec1a23a15ad88 +oid sha256:93fa7d89cfea7d64eeb7e2823bca0cb7c645b1e1a90b9a61f1c16ebec1e4bb59 size 70336 diff --git a/protocol/flex/libs/libconnect-aes-security-library-efr32xg2x-iar.a b/protocol/flex/libs/libconnect-aes-security-library-efr32xg2x-iar.a index 65743cc1ee9..19dd1edae40 100644 --- a/protocol/flex/libs/libconnect-aes-security-library-efr32xg2x-iar.a +++ b/protocol/flex/libs/libconnect-aes-security-library-efr32xg2x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06ef0e09b16befabd914f95885d8f25316e58bc29141ae2f374fbdaeba0f7840 +oid sha256:fc674b9323c10fbed379cb7aa78ee0efc76a81c09e98235a22309ee3a7483c52 size 43034 diff --git a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1-gcc.a b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1-gcc.a index dc109d008a0..6c672fa43ed 100644 --- a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1-gcc.a +++ b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:051c72ebf9f728380934b4dad2f978a8f458eb6c09d797f4de038321080cb67c +oid sha256:f6d2efeec649cec9666469af7d048169e897c3fa379386d1d71a2b63f3049ade size 44026 diff --git a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1-iar.a b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1-iar.a index 5c5e85957f6..52e0cc122d3 100644 --- a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1-iar.a +++ b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:40e242ad93c8e763abfda9dfdca02db9742d8eac19e717392951e63d1f4af387 +oid sha256:5755832c4b54909ce51bccfc22bbe00fa819219ae9db28d54fb8e98914e8d98e size 30886 diff --git a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1x-gcc.a b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1x-gcc.a index fc60b4820ca..c07999deed0 100644 --- a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1x-gcc.a +++ b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5d2ee7aceaf3a37f3bf823fc112b8db2e696d83f823f102744a6cd98cc35f77 +oid sha256:7afc96aef331b63b0a22ad9fff9191f3d9374e36881833c58265940c5d0dd45b size 44026 diff --git a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1x-iar.a b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1x-iar.a index 32c87e3a106..a2b99d4cbf6 100644 --- a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1x-iar.a +++ b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg1x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2440128d9907ccd051c871c3f4bcc281c9b7be40d16d50e3be2a71166afdee6 +oid sha256:25dc82979c1ce91a51578a45ddd289873c92ac82cde29044f0ba9116ff5c1c33 size 31106 diff --git a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg2x-gcc.a b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg2x-gcc.a index 09a544c510e..8f4d9c76034 100644 --- a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg2x-gcc.a +++ b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg2x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6c0687402abfdd5de786611225d73d501e1294a4d547a10bcfb0092668a9d02 +oid sha256:732ecd4ed4ec780611c7cf2222fd0c377367085599dc67930dc96095daa6513e size 44054 diff --git a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg2x-iar.a b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg2x-iar.a index 07bcd3b0bb0..1ead17c5dec 100644 --- a/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg2x-iar.a +++ b/protocol/flex/libs/libconnect-frequency-hopping-library-efr32xg2x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:73a9bcc58d39922a3f679f04633ce88025fc2aa71ea525ce31a24e6050e2999d +oid sha256:a284976cdd82b554be080692609d759cc4529ebd451c02a93ae4e5f85c51035c size 30948 diff --git a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1-gcc.a b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1-gcc.a index e6582b76c77..398222ebd70 100644 --- a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1-gcc.a +++ b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53905bfb2b992fdda8b436023437e1722d6c4726d324debfc2c5d2e35863fccd +oid sha256:2730b8ba56cc74fd6e5ca13d4c4fb2b8f173c0eb2dca31205c10bb3a306c2c3b size 12788 diff --git a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1-iar.a b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1-iar.a index 285c6082e5a..44d3b8a8a5d 100644 --- a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1-iar.a +++ b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41a6f9aa048e366b7de5748500cbe40293c9e9950568db1af8b23ac611c2dd58 +oid sha256:a6517cd56c9d49a543dac0a4613aa79b5b52ffc5028464df1176dfcdcb5af397 size 7320 diff --git a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1x-gcc.a b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1x-gcc.a index c105596e980..402d99d376a 100644 --- a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1x-gcc.a +++ b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39920d150466f80994f7e777836b9bba6ff1225e635183cba7d9f0ca093f7400 +oid sha256:8a0cf739a4b136bce7eb9464a477a96d6ffb52701bb8f90d03875440e2bca82d size 12788 diff --git a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1x-iar.a b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1x-iar.a index cbb2ecc010a..89e52cee106 100644 --- a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1x-iar.a +++ b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg1x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0afb04798ec5e81cd1e776144fc96255a1d8be29a308eef200a3af46bff11abe +oid sha256:1ced1b45b6a992de8dce09315185124f33ecbd8408c8c35ef041dfd5b81705ef size 7404 diff --git a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg2x-gcc.a b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg2x-gcc.a index b893b23fc8b..9f60d16c9d2 100644 --- a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg2x-gcc.a +++ b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg2x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a4f6b1dc909dccb5c96b3e9d8e6edbd00d390eabc4fa0e4902d7c411ee56319 +oid sha256:d7abed7e4642274fdcc4a56b10ee2594236ddcee6146212916103a32c965ef0a size 12816 diff --git a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg2x-iar.a b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg2x-iar.a index ef6a073ca1f..345db70f231 100644 --- a/protocol/flex/libs/libconnect-packet-queue-library-efr32xg2x-iar.a +++ b/protocol/flex/libs/libconnect-packet-queue-library-efr32xg2x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:923e0efa9fcb55728abf6b9cb0758d7cdd010330508566d1a7e567adabe18c61 +oid sha256:394b56d85946fd780b9545b400d5e1f195db425f3d638af2652e968cc2d77820 size 7448 diff --git a/protocol/flex/libs/libconnect-parent-support-library-efr32xg1-gcc.a b/protocol/flex/libs/libconnect-parent-support-library-efr32xg1-gcc.a index 5acaa72aeda..14d2a80c931 100644 --- a/protocol/flex/libs/libconnect-parent-support-library-efr32xg1-gcc.a +++ b/protocol/flex/libs/libconnect-parent-support-library-efr32xg1-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18898ea9d624af35c2c39295d4d49d64e6933af60fbf9c52b03a42bd98fd02dd +oid sha256:ed76aaec7caba809c3c7b2494d53e7e1dec2eb5cc36ac888f0a521bf60697e45 size 97790 diff --git a/protocol/flex/libs/libconnect-parent-support-library-efr32xg1-iar.a b/protocol/flex/libs/libconnect-parent-support-library-efr32xg1-iar.a index 9a557ad4725..be7ecf3845a 100644 --- a/protocol/flex/libs/libconnect-parent-support-library-efr32xg1-iar.a +++ b/protocol/flex/libs/libconnect-parent-support-library-efr32xg1-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4592828b234ab53d4ac058a54cea5d12d62744be167921a5c4d9268581bd78a +oid sha256:bab567d11aa348af5056a68698c605e6d78ecbc94c6c86c3049efaa39f0b3520 size 59476 diff --git a/protocol/flex/libs/libconnect-parent-support-library-efr32xg1x-gcc.a b/protocol/flex/libs/libconnect-parent-support-library-efr32xg1x-gcc.a index 44b87f2672f..33f5785a425 100644 --- a/protocol/flex/libs/libconnect-parent-support-library-efr32xg1x-gcc.a +++ b/protocol/flex/libs/libconnect-parent-support-library-efr32xg1x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:94a19c02e0bd80744c79e71c36b052978b3800ff8ff0ba74a9217a9feaebae2e +oid sha256:a90409f5ac49d7d2948aa2114cfbea58ec24caca0c3f5c08845e351d567703d3 size 97790 diff --git a/protocol/flex/libs/libconnect-parent-support-library-efr32xg1x-iar.a b/protocol/flex/libs/libconnect-parent-support-library-efr32xg1x-iar.a index de48e5b71dc..7422287f7b0 100644 --- a/protocol/flex/libs/libconnect-parent-support-library-efr32xg1x-iar.a +++ b/protocol/flex/libs/libconnect-parent-support-library-efr32xg1x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f48b781f5795fe0cd1e1ab145d58fe6ba5dbca536ca3be07c73c41edec4c195b +oid sha256:189af0c04ce3fda56d567a9e62fd3a3d2673aaa1494513f97f4a7e8a03f59199 size 60228 diff --git a/protocol/flex/libs/libconnect-parent-support-library-efr32xg2x-gcc.a b/protocol/flex/libs/libconnect-parent-support-library-efr32xg2x-gcc.a index 97b395582bf..94357aa58a7 100644 --- a/protocol/flex/libs/libconnect-parent-support-library-efr32xg2x-gcc.a +++ b/protocol/flex/libs/libconnect-parent-support-library-efr32xg2x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:790da46f1601aade69e8b0fa82926cc3066ec9991b5b4e4957a1bbaecca8e0fd +oid sha256:b9e0998afe1d03e69eec7f667c5772c30d22083c92a480ab92725a31092d1c9e size 98006 diff --git a/protocol/flex/libs/libconnect-parent-support-library-efr32xg2x-iar.a b/protocol/flex/libs/libconnect-parent-support-library-efr32xg2x-iar.a index fa0896a0c8e..c8aed3fbc33 100644 --- a/protocol/flex/libs/libconnect-parent-support-library-efr32xg2x-iar.a +++ b/protocol/flex/libs/libconnect-parent-support-library-efr32xg2x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb39827207166fe492bf896630e069bf2f42497ac22232a2dd2abb23df059b76 +oid sha256:5789f3b94168bc63943dc4b75c1d219f83ac7b5dead751f57aa75f2edf81355f size 60088 diff --git a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1-gcc.a b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1-gcc.a index ade52a9a0b7..8b0af80a7ed 100644 --- a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1-gcc.a +++ b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:248b4c92bf4fd3e1641fa10396cc319516184a128314d24e85f01f077c9d04ff +oid sha256:b78ffeca49952024f97b1bfce66e1ae5b4e52da298fa645658e7553681f3d031 size 8484 diff --git a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1-iar.a b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1-iar.a index 0e15884b1ae..6a34cdae2e2 100644 --- a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1-iar.a +++ b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1297c2a3eb8ec3a41174cb7fdb96fc24b73edd77d4498260e93d1f4d4cf7fae6 +oid sha256:2dc320ba12f95119d4fc3dffcdad4943dcbc197f9ce60a54ef51506a1a855a4d size 5302 diff --git a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1x-gcc.a b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1x-gcc.a index e7278f0bd65..ea4b858bf77 100644 --- a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1x-gcc.a +++ b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e529bc7b9054f3410952902c051320d4833ba2bc95caac8beaed9d0ffd8469b2 +oid sha256:361fd053aa9c72e4711be427de8a0cd5b432b165216cdb9baf9f1b3418fbac99 size 8484 diff --git a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1x-iar.a b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1x-iar.a index e0270bf5adb..76dcc1e7023 100644 --- a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1x-iar.a +++ b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg1x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:548e7e303e38546fc831abaab7ee3669910fba7e44c19bda8d3c806af0e761d4 +oid sha256:d3816d29590ac772064cd232da0ec07dce7959c9b8cb646cccd127334f9d6cfb size 5386 diff --git a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg2x-gcc.a b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg2x-gcc.a index 3651a5f903a..eb97840e689 100644 --- a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg2x-gcc.a +++ b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg2x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55b041c6f53ce775818077118cfa03124a741ec72c79ad4a06dfcc0b127f9417 +oid sha256:14542bc478be03453ae15286c538a2e09f32aa56cda62ac9c29029d8ef7d03e3 size 8496 diff --git a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg2x-iar.a b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg2x-iar.a index 212edd46758..c3ce6f17dff 100644 --- a/protocol/flex/libs/libconnect-radio-stream-library-efr32xg2x-iar.a +++ b/protocol/flex/libs/libconnect-radio-stream-library-efr32xg2x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5ccab2e37c77a8b74395323c93021b3f2b2912155df352d264ef2a923475d4b0 +oid sha256:e15d6601941ab30f2c2943efd3c5ff9ff6d1a1946370981bd01ba9b956bdc189 size 5430 diff --git a/protocol/flex/libs/libconnect-stack-common-library-efr32xg1-gcc.a b/protocol/flex/libs/libconnect-stack-common-library-efr32xg1-gcc.a index 23843c3d778..05b4d25e257 100644 --- a/protocol/flex/libs/libconnect-stack-common-library-efr32xg1-gcc.a +++ b/protocol/flex/libs/libconnect-stack-common-library-efr32xg1-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e6164a6253d0639de92c673444e219433f9f08e1c177a1d9696ed326325d88f -size 480204 +oid sha256:ba53ef21840f51e483de843251a3408c2d27a5581ec746d5fe7568b9a5098741 +size 480396 diff --git a/protocol/flex/libs/libconnect-stack-common-library-efr32xg1-iar.a b/protocol/flex/libs/libconnect-stack-common-library-efr32xg1-iar.a index cb99b750143..6e6748077f8 100644 --- a/protocol/flex/libs/libconnect-stack-common-library-efr32xg1-iar.a +++ b/protocol/flex/libs/libconnect-stack-common-library-efr32xg1-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe9bddcd4741eba7c2110243530f7d2e4c8c9466707e14ca4ea6c40f56873919 +oid sha256:012d04114be6e313bff9ec3b2c215c154b5e7287793ebd373d4da25d5e2614ea size 351334 diff --git a/protocol/flex/libs/libconnect-stack-common-library-efr32xg1x-gcc.a b/protocol/flex/libs/libconnect-stack-common-library-efr32xg1x-gcc.a index 7928ba5f328..e697aa05f24 100644 --- a/protocol/flex/libs/libconnect-stack-common-library-efr32xg1x-gcc.a +++ b/protocol/flex/libs/libconnect-stack-common-library-efr32xg1x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de2ce324649fd1b7e7dcec5920e9da0952bfc688047457e21d244debd87163cb -size 480188 +oid sha256:6908682d2f4e339e6e7a3f323bc3bfcd5f91704d6d27cb9cf13cc9111ed97684 +size 480380 diff --git a/protocol/flex/libs/libconnect-stack-common-library-efr32xg1x-iar.a b/protocol/flex/libs/libconnect-stack-common-library-efr32xg1x-iar.a index 6171dbc986a..5963f96a93d 100644 --- a/protocol/flex/libs/libconnect-stack-common-library-efr32xg1x-iar.a +++ b/protocol/flex/libs/libconnect-stack-common-library-efr32xg1x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:752e4540a9f955427fcf1e6f90754374187059bcf1ad501aedae2328a8114324 +oid sha256:f5645bef4a54508bae9b39fd83e05255a1c088b5017e7b61f98d9a2b8f99a6fd size 355484 diff --git a/protocol/flex/libs/libconnect-stack-common-library-efr32xg2x-gcc.a b/protocol/flex/libs/libconnect-stack-common-library-efr32xg2x-gcc.a index ccf5629f042..a662b702408 100644 --- a/protocol/flex/libs/libconnect-stack-common-library-efr32xg2x-gcc.a +++ b/protocol/flex/libs/libconnect-stack-common-library-efr32xg2x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bdfc9f642cb60294f762c5e923d5e174391bc24d9d85793231b67d66572f0487 -size 480748 +oid sha256:cc2e5d3d255d534f15d65604839336e7bff298cd0e4b81c5798321e79ce4c17f +size 480948 diff --git a/protocol/flex/libs/libconnect-stack-common-library-efr32xg2x-iar.a b/protocol/flex/libs/libconnect-stack-common-library-efr32xg2x-iar.a index 48c7026df23..97315830372 100644 --- a/protocol/flex/libs/libconnect-stack-common-library-efr32xg2x-iar.a +++ b/protocol/flex/libs/libconnect-stack-common-library-efr32xg2x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7173e6886d4b749725b160a90ef5a9b3c52dc87872f662e433996d411e564d26 +oid sha256:a4de96b2b6aa2e7e359ae6d2d7f76c9ad377c0443ba9d6ebec60741becbeb8f7 size 355782 diff --git a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1-gcc.a b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1-gcc.a index 17da66a6692..6cab9ff08d1 100644 --- a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1-gcc.a +++ b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efe11e851e696ceb9126adf8b56694fe48cc377f1d2120c5a054830826dc9df1 +oid sha256:aad692346b897a68eb7a3e002bf12615039f23e6630ce40b53c15bb687f686cb size 12344 diff --git a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1-iar.a b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1-iar.a index 08c5cecf44e..1c170d5af9b 100644 --- a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1-iar.a +++ b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dcbe13df6227ea41c8db5bb4daeca8cafc0eb0319196d181604602fbf1bb0e81 +oid sha256:848679c832725f225761aa99e5eb021021608e962405b638678f831ef8538e42 size 5090 diff --git a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1x-gcc.a b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1x-gcc.a index c144ce9e7d1..9b6c187171d 100644 --- a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1x-gcc.a +++ b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7510d6940678293063e49be4a201c9037aad8ef1889c398e179847ffe8fe17b +oid sha256:91eea545392608d099e600f7b3e2b89f87b91814bfce8716228d5436f0d59212 size 12344 diff --git a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1x-iar.a b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1x-iar.a index 3d6efe250ef..4f045e2116f 100644 --- a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1x-iar.a +++ b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg1x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e9ebcf28bb86644a9784231812a32a328841f12e33c8db86300aab8d4a3b3815 +oid sha256:fd5e7618500ae65853ff76c41d45f98eed1f3276d04581f59a7c7dae39437340 size 5174 diff --git a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg2x-gcc.a b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg2x-gcc.a index b8fc76167b0..69ff9ae87a4 100644 --- a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg2x-gcc.a +++ b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg2x-gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f61a2e6623e4170935bbf45379131a7c75de99e9225c3500dc964e84768ae5c +oid sha256:4522660539da200e12cc5c10311ad90d43ebf88d9e7369e8bae2c65d804909b3 size 12356 diff --git a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg2x-iar.a b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg2x-iar.a index 568de13fd4e..a350f7d490b 100644 --- a/protocol/flex/libs/libconnect-stack-counters-library-efr32xg2x-iar.a +++ b/protocol/flex/libs/libconnect-stack-counters-library-efr32xg2x-iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84d9a90c84d39bf2ce5c84f8bae76ca7c903aa5f1f4b6bc3c5969beab58c8bdb +oid sha256:1f0e7692d09b429d6cc242fcc79e655e542c3b2140ba0a0b7ba9d6968209bdfd size 5218 diff --git a/protocol/flex/stack/config/config.h b/protocol/flex/stack/config/config.h index ea32c035269..0054c3012af 100644 --- a/protocol/flex/stack/config/config.h +++ b/protocol/flex/stack/config/config.h @@ -63,7 +63,7 @@ /** * @brief Build number of the release. Should be stored on 2 bytes. */ -#define EMBER_BUILD_NUMBER 144 +#define EMBER_BUILD_NUMBER 190 /** * @brief Full version number stored on 2 bytes, with each of the four digits diff --git a/protocol/openthread/config/sl_openthread_generic_config.h b/protocol/openthread/config/sl_openthread_generic_config.h index 06ec5cdc99f..e454d53b6dd 100644 --- a/protocol/openthread/config/sl_openthread_generic_config.h +++ b/protocol/openthread/config/sl_openthread_generic_config.h @@ -68,7 +68,7 @@ #define PACKAGE_NAME "SL-OPENTHREAD" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "SL-OPENTHREAD/2.2.1.0_GitHub-91fa1f455" +#define PACKAGE_STRING "SL-OPENTHREAD/2.2.2.0_GitHub-91fa1f455" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "openthread" @@ -80,13 +80,13 @@ * Note: When adding the label below with OpenThread version, please make * sure it is a valid GitHub version. Avoid merge or local commit hashes. */ -#define PACKAGE_VERSION "2.2.1.0_GitHub-91fa1f455" +#define PACKAGE_VERSION "2.2.2.0_GitHub-91fa1f455" /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Version number of package */ -#define VERSION "2.2.1.0_GitHub-91fa1f455" +#define VERSION "2.2.2.0_GitHub-91fa1f455" /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ diff --git a/protocol/openthread/documentation/release-highlights.txt b/protocol/openthread/documentation/release-highlights.txt index f39d9cf6fd2..213ac5f66f2 100644 --- a/protocol/openthread/documentation/release-highlights.txt +++ b/protocol/openthread/documentation/release-highlights.txt @@ -1,2 +1,2 @@ -Silicon Labs OpenThread SDK 2.2.1.0 +Silicon Labs OpenThread SDK 2.2.2.0 - Includes targeted quality improvements and bug fixes \ No newline at end of file diff --git a/protocol/openthread/esf.properties b/protocol/openthread/esf.properties index 9132d1a96be..2998f57d4d0 100644 --- a/protocol/openthread/esf.properties +++ b/protocol/openthread/esf.properties @@ -11,10 +11,10 @@ # sure it is a valid GitHub version. Avoid merge or local commit hashes. id=com.silabs.sdk.stack.openthread -version=2.2.1.0 +version=2.2.2.0 label=OpenThread SDK description=OpenThread stack support for EFR32 devices -prop.subLabel=OpenThread\\ 2.2.1.0\\ (GitHub-91fa1f455) +prop.subLabel=OpenThread\\ 2.2.2.0\\ (GitHub-91fa1f455) prop.file.docsFile=documentation/slOpenThread_docContent.xml prop.file.templatesFile=openthread_evaluation_templates.xml openthread_internal_templates.xml openthread_production_templates.xml diff --git a/protocol/openthread/libs/libsl_openthread_efr32mg1x_gcc.a b/protocol/openthread/libs/libsl_openthread_efr32mg1x_gcc.a index c4e73ec5877..d61a23ea7f4 100644 --- a/protocol/openthread/libs/libsl_openthread_efr32mg1x_gcc.a +++ b/protocol/openthread/libs/libsl_openthread_efr32mg1x_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5681f7e69d5054d9ccbb578e4db907d990e84d93f577def3bea4eee23705f764 +oid sha256:eced8d79601e93a8f82df9beac7e39eca2246c6ec16ca2228011ca07a35b48a9 size 2736 diff --git a/protocol/openthread/libs/libsl_openthread_efr32mg2x_gcc.a b/protocol/openthread/libs/libsl_openthread_efr32mg2x_gcc.a index e0d0eced5be..43cf3d41fae 100644 --- a/protocol/openthread/libs/libsl_openthread_efr32mg2x_gcc.a +++ b/protocol/openthread/libs/libsl_openthread_efr32mg2x_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f6792af35f3cbbdc499030fcc2b62e7b0d366762a77d461003cce5a2cb5c55e7 +oid sha256:5fd8b43dca990b2ff1bd2d5418dfd48227fdf852bf8e06959733be541ac865df size 2764 diff --git a/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg12_gcc.a b/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg12_gcc.a index 52e16721682..4c60bf65599 100644 --- a/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg12_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg12_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8dad4616ad2396a01b4040096a37101f74586a45908f3e9bfb7241949f061b46 +oid sha256:37056d8c9556bd07828949be3f6f6a46f5cdd0acdabef3d24502f6bf9d9f7bcf size 74503846 diff --git a/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg13_gcc.a b/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg13_gcc.a index d952cd33d1b..b7137fc2b3f 100644 --- a/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg13_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg13_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d74e6329f4ffc2da423a8e6aae816904ce315fd82bbf1b05a80261c2a8e88fc +oid sha256:4edaa1148767897e4289348f3d239f3f82fce267996fb72583e3f336ddf7c236 size 74503842 diff --git a/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg21_gcc.a b/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg21_gcc.a index d8598bae2a2..c5fed5361f1 100644 --- a/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg21_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg21_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9051d75d3742121ad488d268e31d56f42f2910f0163e8fb8c477be704a1ea2a +oid sha256:2cf03629cdad586ad644e5954268cdffb5d7e7df0d842ef3ea73924fcabe437a size 74530598 diff --git a/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg24_gcc.a b/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg24_gcc.a index 38d038db565..5fa8ce81d91 100644 --- a/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg24_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_ftd_coap_efr32mg24_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5ab19d2fd43d42937da659c12bd65fc308a6cf80fc8e47fcbdff06fc333bff4f +oid sha256:078facf3fd91bd7be534338c0186b2ce15c6fa76b270cff53a7956cc55a00510 size 74530598 diff --git a/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg12_gcc.a b/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg12_gcc.a index e826a667a81..5cb47323022 100644 --- a/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg12_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg12_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a01f6a943a078c7c60cd345fa2f5893d9932e2fc491484d2214ece251153b686 +oid sha256:eaf3c53670a086726eb5cbfe835163e8f0035ea1b80d5e6279ce6b8370faca6f size 72870708 diff --git a/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg13_gcc.a b/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg13_gcc.a index 67f9384f7d9..af5427e68bc 100644 --- a/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg13_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg13_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e2df21cb76662d98b2c4539b4e8934c3343a71dab25b0702ed61cc988c23fa9 +oid sha256:0080d7d8308f782f2c9d5b74d03b2aef7e740b86976e3d3a1bf4c9d73fd112f3 size 72870740 diff --git a/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg21_gcc.a b/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg21_gcc.a index 28596d0cf2e..43ccba82021 100644 --- a/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg21_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg21_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64541828354be0834f1bd575e11acbb921d21a067d4745bd54ba90c413101a6e +oid sha256:acd13be917d1ffb2439fc7dfdf9ab9c0f7a6784eabb35e075f888669dff98621 size 72897236 diff --git a/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg24_gcc.a b/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg24_gcc.a index ee2f0b86b51..008ed2a85ef 100644 --- a/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg24_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_ftd_efr32mg24_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a74cacb17379d8d0bace8fb6268794455cc7c4cbad8e9a2b4c2a0d09fa9b53ad +oid sha256:d011e2b3ce4d44d52184ee0a303c81328787cc4f1d626051c1c134db22645806 size 72897236 diff --git a/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg12_gcc.a b/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg12_gcc.a index 7ad3dfbf542..d8e62c79bba 100644 --- a/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg12_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg12_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2768ed6178b0f2fb4ab8156fa1dcdd7822fd4cf0b322489bcffe17336eac343 +oid sha256:7026b549c57d5022d1d45227af3c493398cfd8cbcb8b2707f8d9bfadbba994e0 size 53874612 diff --git a/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg13_gcc.a b/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg13_gcc.a index f2d8a43f472..97d1e38ff00 100644 --- a/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg13_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg13_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a65373546cbe39ec7bdcee886bb62f9bd355aba4f950faac7655ae191139463f +oid sha256:19647fe71d4c5776b48d1bd0b8aa53773c940692fd52803c0a243fce48427eb0 size 53874580 diff --git a/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg21_gcc.a b/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg21_gcc.a index 17eda9d237b..cd996895e92 100644 --- a/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg21_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg21_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64ae0c499212843099f9e0e1ede0faf3865e262623d3dab5910bdc875ebe26e7 +oid sha256:4377b4d238f665030e978756cf720e3112ad76613b2fabcdeeca7ff5f2936a34 size 53894280 diff --git a/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg24_gcc.a b/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg24_gcc.a index cd94542d2ae..3590bd87114 100644 --- a/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg24_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_mtd_coap_efr32mg24_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf89f12d570cbb033488dc4be3ccd7e84c9453e6fead3a832eea4a0374d54d63 +oid sha256:0e8033a6b892176629a58acfd06efc3d9d604855ad61b35988d45ec90bd27f27 size 53894304 diff --git a/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg12_gcc.a b/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg12_gcc.a index c9306988b45..ba0d1e91134 100644 --- a/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg12_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg12_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04d13500dc31c482a4fe3766d3686e36b71c879f70fe60d924dd36795f0fa214 +oid sha256:d0172284b722eb9f8a68175daf6305e2008f32b649f6bdb671da3f2a25170e6b size 52473918 diff --git a/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg13_gcc.a b/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg13_gcc.a index 8fda236753f..e117a17b0e9 100644 --- a/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg13_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg13_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52b340e9f85d453e4a3f0e1f43ca773b38e7721532d012ed6c770f0aa16e99d1 +oid sha256:fc06eeb5c608a44aa026e228699822d1c10d9c4c9943d7e95bb0afe540f6c5f6 size 52473918 diff --git a/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg21_gcc.a b/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg21_gcc.a index b66a5cb2c83..a71dcbed487 100644 --- a/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg21_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg21_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42e120a8634479260ea5cc16aa145acc69026aa1716eaed73cf16a8c77ec2958 +oid sha256:e65838a6605638a0116a1e350bfdf72b53d00dc62ef9f04ed9522014625d9506 size 52493422 diff --git a/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg24_gcc.a b/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg24_gcc.a index d1d060cffbc..efbd28313f8 100644 --- a/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg24_gcc.a +++ b/protocol/openthread/libs/libsl_ot_stack_mtd_efr32mg24_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3310b1f202223784a2b33295395f19d2213dacad14c8001db07bbc9650c0db6 +oid sha256:a6b30657af43c1adbd441cd22779612c90c2b1e74ff407b65eadbb9d86ebc3c5 size 52493390 diff --git a/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg12_gcc.a b/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg12_gcc.a index ba7a22fc983..97b04749189 100644 --- a/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg12_gcc.a +++ b/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg12_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac3024e3dd5d81e69bdb8bc0aa5a8fefaa420465847603b20124f744928017dc -size 550378 +oid sha256:d5b2c43e47758adfc997253be01e0ee2f25931bc6a43d585da78a9f197fa9750 +size 550574 diff --git a/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg13_gcc.a b/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg13_gcc.a index 83fe57af64f..7b023514f18 100644 --- a/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg13_gcc.a +++ b/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg13_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:360cf62d8963453fee69e2173c0cc84b7160605835ae5c4d4d89d98bb9a8f834 -size 550098 +oid sha256:6114f58ebf5f0d099a09df6b358b97c8353816a0f8ff8d217e6d259483dfa56a +size 550294 diff --git a/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg21_gcc.a b/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg21_gcc.a index 8551c8dce4b..e5c3f97a487 100644 --- a/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg21_gcc.a +++ b/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg21_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8599f5cc4c71b6463965b9b9db6c45e7f67b2322f9a0c63f29ab49904078cdd0 -size 558586 +oid sha256:2632689457702942a39c9b13e97673dd20baaae85f043560fccda68b9cf0b7b5 +size 558782 diff --git a/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg24_gcc.a b/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg24_gcc.a index 99fc2206f71..4a63445bc65 100644 --- a/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg24_gcc.a +++ b/protocol/openthread/libs/libsl_platform_ftd_dmp_efr32mg24_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a83869bad9babdb8345a91e5bf7726afe8b025e57d61b54b08f93bfa36116fb -size 558534 +oid sha256:38ae303ea3a5da90cc332a4f02fa24ad8981bfbec05edb1d4e0cea7ef063d980 +size 558730 diff --git a/protocol/openthread/libs/libsl_platform_ftd_efr32mg12_gcc.a b/protocol/openthread/libs/libsl_platform_ftd_efr32mg12_gcc.a index 4c90a75b26d..addd63e2c2c 100644 --- a/protocol/openthread/libs/libsl_platform_ftd_efr32mg12_gcc.a +++ b/protocol/openthread/libs/libsl_platform_ftd_efr32mg12_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:48a7a68eeba6e0af3924677407528d6cf2dc313ec68f21088e66164f62ef62d7 -size 549058 +oid sha256:bbd5c64911cd9605056effd5e88095a34d7b8d130f433c649606c2b34b5a5d77 +size 549254 diff --git a/protocol/openthread/libs/libsl_platform_ftd_efr32mg13_gcc.a b/protocol/openthread/libs/libsl_platform_ftd_efr32mg13_gcc.a index 92d8773bda5..69851dcc7f4 100644 --- a/protocol/openthread/libs/libsl_platform_ftd_efr32mg13_gcc.a +++ b/protocol/openthread/libs/libsl_platform_ftd_efr32mg13_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c4b53778a28a51cb0d991fe3882f3a906ab805d050bd999425713fe3b08dd85 -size 548778 +oid sha256:0b54aa2195663f0c6e0a2c54433c22faf340c86ffe7bcb5e6116a028d50692bf +size 548974 diff --git a/protocol/openthread/libs/libsl_platform_ftd_efr32mg21_gcc.a b/protocol/openthread/libs/libsl_platform_ftd_efr32mg21_gcc.a index 87248faa8f6..acde5e28e3b 100644 --- a/protocol/openthread/libs/libsl_platform_ftd_efr32mg21_gcc.a +++ b/protocol/openthread/libs/libsl_platform_ftd_efr32mg21_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f2c18ca9755e16fdf59e604bfbbe365b37bb6b33acebe76dbfe6da00f06ebede -size 557230 +oid sha256:251d2df32690161981c03e3c4cea2e6eb51b4ff5669ba6ae41ceaf2a9f3969b2 +size 557426 diff --git a/protocol/openthread/libs/libsl_platform_ftd_efr32mg24_gcc.a b/protocol/openthread/libs/libsl_platform_ftd_efr32mg24_gcc.a index 1ae52bb6974..b775df74aab 100644 --- a/protocol/openthread/libs/libsl_platform_ftd_efr32mg24_gcc.a +++ b/protocol/openthread/libs/libsl_platform_ftd_efr32mg24_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e1711df598a38069f2e059d079139153c6eb0b135300c5765d25303f7a55233 -size 557182 +oid sha256:2d8450ca63a07407e761e6ce5b748181e5a61d758f1d32fca9554047e7f8583e +size 557378 diff --git a/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg12_gcc.a b/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg12_gcc.a index 2ac6953cb8b..60144667a27 100644 --- a/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg12_gcc.a +++ b/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg12_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d493091c2031496e8721eb253591fa8b959a59cf2fb886b54a71a18c6fe70916 -size 548424 +oid sha256:3f3fd0aa88b0f34595aefd9cd48578d13779bf3c01673569d27b7b6133e72e6c +size 548620 diff --git a/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg13_gcc.a b/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg13_gcc.a index dbded21779c..d32bef93b8c 100644 --- a/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg13_gcc.a +++ b/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg13_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02b79354e6344d3fe95fba82e3652377b8be9322f249276a3454aa4c29e13610 -size 548144 +oid sha256:7e0b664548feeb7215bebd42ff446c33e2349f4b826675d71757fe3fbe11b408 +size 548340 diff --git a/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg21_gcc.a b/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg21_gcc.a index 20d87cffd26..0f19ed4f526 100644 --- a/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg21_gcc.a +++ b/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg21_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d947fe4c45853b75886c1a086438e78fc6b235e0ab8d39900dc5a43f8900a5d3 -size 556572 +oid sha256:c13caaa471b1f9c77f65f2146ea72e22de7a512b35fce08448175d97afcb0c55 +size 556772 diff --git a/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg24_gcc.a b/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg24_gcc.a index 61d8fc613d6..9c822c044a3 100644 --- a/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg24_gcc.a +++ b/protocol/openthread/libs/libsl_platform_mtd_dmp_efr32mg24_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18ad948fd66891e74d6610f0dc57e0db7843aae75527a32bc4015d514f191d13 -size 556524 +oid sha256:0871d936a0640c569e43e0a32f439a92da593974d658ddc1c03b2494133fd0a1 +size 556720 diff --git a/protocol/openthread/libs/libsl_platform_mtd_efr32mg12_gcc.a b/protocol/openthread/libs/libsl_platform_mtd_efr32mg12_gcc.a index 877aec52e74..a866a34393b 100644 --- a/protocol/openthread/libs/libsl_platform_mtd_efr32mg12_gcc.a +++ b/protocol/openthread/libs/libsl_platform_mtd_efr32mg12_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b03a724c424e0c88740d520ca23864143a8073841d94e7ad19d681a5c31f3fba -size 547096 +oid sha256:342187eaa3e4873dcd600d602e8fdba241ad1db8a676419f6915748f8e2eac05 +size 547292 diff --git a/protocol/openthread/libs/libsl_platform_mtd_efr32mg13_gcc.a b/protocol/openthread/libs/libsl_platform_mtd_efr32mg13_gcc.a index 3a206aded39..853aaee9664 100644 --- a/protocol/openthread/libs/libsl_platform_mtd_efr32mg13_gcc.a +++ b/protocol/openthread/libs/libsl_platform_mtd_efr32mg13_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55560c12501116da44d0dd4da0ad3ae32ddc7a17b48386618c81d894605a14fb -size 546816 +oid sha256:785dedc248df61a724d807fc2c6126f67b03bfb45e210120686d8cd2697b5f40 +size 547012 diff --git a/protocol/openthread/libs/libsl_platform_mtd_efr32mg21_gcc.a b/protocol/openthread/libs/libsl_platform_mtd_efr32mg21_gcc.a index 2b16ae1616b..347c1124f84 100644 --- a/protocol/openthread/libs/libsl_platform_mtd_efr32mg21_gcc.a +++ b/protocol/openthread/libs/libsl_platform_mtd_efr32mg21_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d33d2c9f9c00bd1ef61210b6ebba1de4b2d2494028c68ebf05a9b0d3b16b7cd -size 555220 +oid sha256:054b3b53b0942bfeaf551399dfb6fb6cfbb9e1c8f8a54c5fe9ef64ae706e9bab +size 555416 diff --git a/protocol/openthread/libs/libsl_platform_mtd_efr32mg24_gcc.a b/protocol/openthread/libs/libsl_platform_mtd_efr32mg24_gcc.a index 41bb2c29cfd..52ac417c4c8 100644 --- a/protocol/openthread/libs/libsl_platform_mtd_efr32mg24_gcc.a +++ b/protocol/openthread/libs/libsl_platform_mtd_efr32mg24_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31e6b9c4ae2b29f403f1c14cd4f7ad5d1a995584b10ee552c4fd4a86f2519371 -size 555168 +oid sha256:0b85c07233b4684591546f93e59b32fbb0b5806e54e5a6b1fef434a3c407d6d3 +size 555368 diff --git a/protocol/openthread/openthread_evaluation_demos.xml b/protocol/openthread/openthread_evaluation_demos.xml index cae4e02419f..c350a3ceb98 100644 --- a/protocol/openthread/openthread_evaluation_demos.xml +++ b/protocol/openthread/openthread_evaluation_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 @@ - + diff --git a/protocol/openthread/openthread_production_demos.xml b/protocol/openthread/openthread_production_demos.xml index 4695c755125..653e9d25183 100644 --- a/protocol/openthread/openthread_production_demos.xml +++ b/protocol/openthread/openthread_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 @@ - + @@ -524,7 +524,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -536,7 +536,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -548,7 +548,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -560,7 +560,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -572,7 +572,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -584,7 +584,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -596,7 +596,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -608,7 +608,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -620,7 +620,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -632,7 +632,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -644,7 +644,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -656,7 +656,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -668,7 +668,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -680,7 +680,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -692,7 +692,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -704,7 +704,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -716,7 +716,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -728,7 +728,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -740,7 +740,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -752,7 +752,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -764,7 +764,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -776,7 +776,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -788,7 +788,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -800,7 +800,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -812,7 +812,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -824,7 +824,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -836,7 +836,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -848,7 +848,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -860,7 +860,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -872,7 +872,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -884,7 +884,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -896,7 +896,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -908,7 +908,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -920,7 +920,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -932,7 +932,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -944,7 +944,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -956,7 +956,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -968,7 +968,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -980,7 +980,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -992,7 +992,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1004,7 +1004,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1016,7 +1016,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1028,7 +1028,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1040,7 +1040,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1052,7 +1052,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1064,7 +1064,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1076,7 +1076,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1088,7 +1088,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1100,7 +1100,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1112,7 +1112,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1124,7 +1124,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1136,7 +1136,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1148,7 +1148,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1160,7 +1160,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1172,7 +1172,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1184,7 +1184,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1196,7 +1196,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1208,7 +1208,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1220,7 +1220,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1231,7 +1231,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1242,7 +1242,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1253,7 +1253,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1264,7 +1264,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + @@ -1275,7 +1275,7 @@ It is identical to the ot-ble-dmp application with the exception that support fo - + diff --git a/protocol/openthread/platform-abstraction/efr32/openthread-core-efr32-config.h b/protocol/openthread/platform-abstraction/efr32/openthread-core-efr32-config.h index cd4d87e1f6a..4e41926991a 100644 --- a/protocol/openthread/platform-abstraction/efr32/openthread-core-efr32-config.h +++ b/protocol/openthread/platform-abstraction/efr32/openthread-core-efr32-config.h @@ -397,4 +397,24 @@ #define SL_OPENTHREAD_RADIO_CCA_MODE RAIL_IEEE802154_CCA_MODE_RSSI #endif +/** + * @def SL_OPENTHREAD_RADIO_RX_BUFFER_COUNT + * + * Max number of RX buffers to use in the rdio driver + * + */ +#ifndef SL_OPENTHREAD_RADIO_RX_BUFFER_COUNT +#define SL_OPENTHREAD_RADIO_RX_BUFFER_COUNT 4 +#endif + +/** + * @def SL_ENABLE_MULTI_RX_BUFFER_SUPPORT + * + * Enable Multi buffer Rx feature (experimental) + * + */ +#ifndef SL_ENABLE_MULTI_RX_BUFFER_SUPPORT +#define SL_ENABLE_MULTI_RX_BUFFER_SUPPORT 0 +#endif + #endif // OPENTHREAD_CORE_EFR32_CONFIG_H_ diff --git a/protocol/openthread/platform-abstraction/efr32/platform-band.h b/protocol/openthread/platform-abstraction/efr32/platform-band.h index a73f8d3600f..901407563d5 100644 --- a/protocol/openthread/platform-abstraction/efr32/platform-band.h +++ b/protocol/openthread/platform-abstraction/efr32/platform-band.h @@ -57,6 +57,7 @@ typedef struct efr32RadioCounters { uint32_t mRailPlatTxTriggered; uint32_t mRailPlatRadioReceiveDoneCbCount; + uint32_t mRailPlatRadioReceiveProcessedCount; uint32_t mRailPlatRadioEnergyScanDoneCbCount; uint32_t mRailPlatRadioTxDoneCbCount; uint32_t mRailTxStarted; diff --git a/protocol/openthread/platform-abstraction/efr32/radio.c b/protocol/openthread/platform-abstraction/efr32/radio.c index 5cf9dae6857..042ef5d24ee 100644 --- a/protocol/openthread/platform-abstraction/efr32/radio.c +++ b/protocol/openthread/platform-abstraction/efr32/radio.c @@ -185,6 +185,14 @@ typedef enum ENERGY_SCAN_MODE_ASYNC } energyScanMode; +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT +typedef struct +{ + bool isBufferValid; + uint8_t sReceivePsdu[IEEE802154_MAX_LENGTH]; +} rxBuffer; +#endif + static volatile energyScanStatus sEnergyScanStatus; static volatile int8_t sEnergyScanResultDbm; static energyScanMode sEnergyScanMode; @@ -192,11 +200,20 @@ static energyScanMode sEnergyScanMode; static bool sIsSrcMatchEnabled = false; // Receive +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT +static rxBuffer sReceivePacket[SL_OPENTHREAD_RADIO_RX_BUFFER_COUNT]; +static uint8_t sReceiveAckPsdu[IEEE802154_MAX_LENGTH]; +static otRadioFrame sReceiveFrame[SL_OPENTHREAD_RADIO_RX_BUFFER_COUNT]; +static otRadioFrame sReceiveAckFrame; +static otError sReceiveError; +static uint8_t sReceiveBufferInUse = 0; +#else static uint8_t sReceivePsdu[IEEE802154_MAX_LENGTH]; static uint8_t sReceiveAckPsdu[IEEE802154_MAX_LENGTH]; static otRadioFrame sReceiveFrame; static otRadioFrame sReceiveAckFrame; static otError sReceiveError; +#endif // Transmit static otRadioFrame sTransmitFrame; @@ -204,6 +221,10 @@ static uint8_t sTransmitPsdu[IEEE802154_MAX_LENGTH]; static volatile otError sTransmitError; static volatile bool sTransmitBusy = false; static otRadioFrame *sTxFrame = NULL; +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT +static uint8_t sLastLqi; +static int8_t sLastRssi; +#endif #if OPENTHREAD_CONFIG_MAC_HEADER_IE_SUPPORT static otRadioIeInfo sTransmitIeInfo; @@ -1112,8 +1133,21 @@ void efr32RadioInit(void) status = RAIL_ConfigSleep(gRailHandle, RAIL_SLEEP_CONFIG_TIMERSYNC_ENABLED); assert(status == RAIL_STATUS_NO_ERROR); +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT + memset(&sReceivePacket, 0x00, sizeof(sReceivePacket)); + + sReceiveBufferInUse = 0; + + for(int index = 0; index < SL_OPENTHREAD_RADIO_RX_BUFFER_COUNT; index++) + { + sReceiveFrame[index].mLength = 0; + sReceiveFrame[index].mPsdu = &sReceivePacket[index].sReceivePsdu[0]; + } +#else sReceiveFrame.mLength = 0; sReceiveFrame.mPsdu = sReceivePsdu; +#endif + sReceiveAckFrame.mLength = 0; sReceiveAckFrame.mPsdu = sReceiveAckPsdu; sTransmitFrame.mLength = 0; @@ -1393,7 +1427,11 @@ otError otPlatRadioReceive(otInstance *aInstance, uint8_t aChannel) status = radioSetRx(aChannel); otEXPECT_ACTION(status == RAIL_STATUS_NO_ERROR, error = OT_ERROR_FAILED); +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT + sReceiveFrame[sReceiveBufferInUse].mChannel = aChannel; +#else sReceiveFrame.mChannel = aChannel; +#endif sReceiveAckFrame.mChannel = aChannel; exit: @@ -1423,7 +1461,11 @@ otError otPlatRadioReceiveAt(otInstance *aInstance, uint8_t aChannel, uint32_t a status = radioScheduleRx(aChannel, aStart, aDuration); otEXPECT_ACTION(status == RAIL_STATUS_NO_ERROR, error = OT_ERROR_FAILED); +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT + sReceiveFrame[sReceiveBufferInUse].mChannel = aChannel; +#else sReceiveFrame.mChannel = aChannel; +#endif sReceiveAckFrame.mChannel = aChannel; exit: @@ -1701,7 +1743,11 @@ int8_t otPlatRadioGetRssi(otInstance *aInstance) otError error; uint32_t start; int8_t rssi = OT_RADIO_RSSI_INVALID; +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT + uint8_t aChannel = sReceiveFrame[sReceiveBufferInUse].mChannel; +#else uint8_t aChannel = sReceiveFrame.mChannel; +#endif OT_UNUSED_VARIABLE(aInstance); @@ -2147,10 +2193,17 @@ static bool writeIeee802154EnhancedAck( RAIL_Handle_t aRailHandle, #if OPENTHREAD_CONFIG_MLE_LINK_METRICS_SUBJECT_ENABLE uint8_t linkMetricsData[OT_ENH_PROBING_IE_DATA_MAX_SIZE]; +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT + linkMetricsDataLen = otLinkMetricsEnhAckGenData(&aSrcAddress, + sLastLqi, + sLastRssi, + linkMetricsData); +#else linkMetricsDataLen = otLinkMetricsEnhAckGenData(&aSrcAddress, sReceiveFrame.mInfo.mRxInfo.mLqi, sReceiveFrame.mInfo.mRxInfo.mRssi, linkMetricsData); +#endif if (linkMetricsDataLen > 0) { @@ -2325,6 +2378,150 @@ static void dataRequestCommandCallback(RAIL_Handle_t aRailHandle) } } +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT +static void packetReceivedCallback(RAIL_RxPacketHandle_t packetHandle) +{ + RAIL_RxPacketInfo_t packetInfo; + RAIL_RxPacketDetails_t packetDetails; + uint16_t length; + bool framePendingInAck = false; + bool rxCorrupted = false; + uint8_t iid = 0; + uint8_t *psdu; + + packetHandle = RAIL_GetRxPacketInfo(gRailHandle, packetHandle, &packetInfo); + otEXPECT_ACTION((packetHandle != RAIL_RX_PACKET_HANDLE_INVALID + && packetInfo.packetStatus == RAIL_RX_PACKET_READY_SUCCESS), + rxCorrupted = true); + + otEXPECT_ACTION(validatePacketDetails(packetHandle, &packetDetails, &packetInfo, &length), + rxCorrupted = true); + + otEXPECT_ACTION((skipRxPacketLengthBytes(&packetInfo)) == OT_ERROR_NONE, + rxCorrupted = true); + + uint8_t macFcf = ((packetInfo.firstPortionBytes == 0) + ? packetInfo.lastPortionData[0] + : packetInfo.firstPortionData[0]); + + iid = getIidFromFilterMask(packetInfo.filterMask); + + psdu = (packetDetails.isAck) ? sReceiveAckFrame.mPsdu : sReceivePacket[sReceiveBufferInUse].sReceivePsdu; + + // read packet + RAIL_CopyRxPacket(psdu, &packetInfo); + + if (packetDetails.isAck) + { + otEXPECT_ACTION((length >= IEEE802154_MIN_LENGTH + && (macFcf & IEEE802154_FRAME_TYPE_MASK) + == IEEE802154_FRAME_TYPE_ACK), + rxCorrupted = true); + +#if RADIO_CONFIG_DEBUG_COUNTERS_SUPPORT + sRailDebugCounters.mRailEventAcksReceived++; +#endif + sReceiveAckFrame.mLength = length; + + // Releasing the ACK frames here, ensures that the main thread (processNextRxPacket) + // is not wasting cycles, releasing the ACK frames from the Rx FIFO queue. + RAIL_ReleaseRxPacket(gRailHandle, packetHandle); + + (void) handlePhyStackEvent(SL_RAIL_UTIL_IEEE802154_STACK_EVENT_RX_ENDED, + (uint32_t) isReceivingFrame()); + + if (txWaitingForAck() + && (sReceiveAckFrame.mPsdu[IEEE802154_DSN_OFFSET] == sTransmitFrame.mPsdu[IEEE802154_DSN_OFFSET])) + { + otEXPECT_ACTION(validatePacketTimestamp(&packetDetails, length), rxCorrupted = true); + updateRxFrameDetails(&packetDetails, false, false, iid); + + // Processing the ACK frame in ISR context avoids the Tx state to be messed up, + // in case the Rx FIFO queue gets wiped out in a DMP situation. + sTransmitBusy = false; + sTransmitError = OT_ERROR_NONE; + setInternalFlag(FLAG_WAITING_FOR_ACK, false); + + framePendingInAck = ((macFcf & IEEE802154_FRAME_FLAG_FRAME_PENDING) != 0); + (void) handlePhyStackEvent(SL_RAIL_UTIL_IEEE802154_STACK_EVENT_TX_ACK_RECEIVED, + (uint32_t) framePendingInAck); + + if (txIsDataRequest() && framePendingInAck) { + emPendingData = true; + } + } + // Yield the radio upon receiving an ACK as long as it is not related to + // a data request. + if (!txIsDataRequest()) { + RAIL_YieldRadio(gRailHandle); + } + } + else + { + otEXPECT_ACTION(sPromiscuous || (length >= IEEE802154_MIN_DATA_LENGTH), rxCorrupted = true); + + sReceiveFrame[sReceiveBufferInUse].mLength = length; + sReceiveFrame[sReceiveBufferInUse].mChannel = packetDetails.channel; + + // Check the reserved bits in the MAC header, then clear them. + // If we sent an enhanced ACK, check if it was secured. + bool securedOutgoingEnhancedAck = ((*psdu & IEEE802154_SECURED_OUTGOING_ENHANCED_ACK) != 0); + *psdu &= ~IEEE802154_SECURED_OUTGOING_ENHANCED_ACK; + + // Check whether frame pendinng bit was set in the outgoing ACK. + bool framePendingSetInOutgoingAck = ((*psdu & IEEE802154_FRAME_PENDING_SET_IN_OUTGOING_ACK) != 0); + *psdu &= ~IEEE802154_FRAME_PENDING_SET_IN_OUTGOING_ACK; + + RAIL_ReleaseRxPacket(gRailHandle, packetHandle); + + otEXPECT(validatePacketTimestamp(&packetDetails, length)); + updateRxFrameDetails(&packetDetails, securedOutgoingEnhancedAck, framePendingSetInOutgoingAck, iid); + +#if RADIO_CONFIG_DEBUG_COUNTERS_SUPPORT + sRailDebugCounters.mRailPlatRadioReceiveProcessedCount++; +#endif + + if (macFcf & IEEE802154_FRAME_FLAG_ACK_REQUIRED) { + (void) handlePhyStackEvent((RAIL_IsRxAutoAckPaused(gRailHandle) + ? SL_RAIL_UTIL_IEEE802154_STACK_EVENT_RX_ACK_BLOCKED + : SL_RAIL_UTIL_IEEE802154_STACK_EVENT_RX_ACKING), + (uint32_t) isReceivingFrame()); + setInternalFlag(FLAG_ONGOING_TX_ACK, true); + } + else { + (void) handlePhyStackEvent(SL_RAIL_UTIL_IEEE802154_STACK_EVENT_RX_ENDED, + (uint32_t) isReceivingFrame()); + // We received a frame that does not require an ACK as result of a data + // poll: we yield the radio here. + if (emPendingData) { + RAIL_YieldRadio(gRailHandle); + emPendingData = false; + } + } + } +exit: + if (rxCorrupted) { + (void) handlePhyStackEvent(SL_RAIL_UTIL_IEEE802154_STACK_EVENT_RX_CORRUPTED, + (uint32_t) isReceivingFrame()); + } else { + + if(!packetDetails.isAck) + { + sReceivePacket[sReceiveBufferInUse].isBufferValid = true; + + if (SL_OPENTHREAD_RADIO_RX_BUFFER_COUNT > 1) + { + sReceiveBufferInUse = (sReceiveBufferInUse + 1) % SL_OPENTHREAD_RADIO_RX_BUFFER_COUNT; + } + else + { + sReceiveBufferInUse = 0; + } + } + } +} + +#else static void packetReceivedCallback(RAIL_RxPacketHandle_t packetHandle) { RAIL_RxPacketInfo_t packetInfo; @@ -2426,6 +2623,7 @@ static void packetReceivedCallback(RAIL_RxPacketHandle_t packetHandle) (uint32_t) isReceivingFrame()); } } +#endif static void packetSentCallback(bool isAck) { @@ -2809,6 +3007,25 @@ static void updateRxFrameDetails(RAIL_RxPacketDetails_t *pPacketDetails, sReceiveAckFrame.mInfo.mRxInfo.mTimestamp = pPacketDetails->timeReceived.packetTime + ((uint64_t) railUsTimerWraps << 32); sReceiveAckFrame.mIid = iid; } else { +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT + sReceiveFrame[sReceiveBufferInUse].mInfo.mRxInfo.mRssi = pPacketDetails->rssi; + sReceiveFrame[sReceiveBufferInUse].mInfo.mRxInfo.mLqi = pPacketDetails->lqi; + sReceiveFrame[sReceiveBufferInUse].mInfo.mRxInfo.mTimestamp = pPacketDetails->timeReceived.packetTime + ((uint64_t) railUsTimerWraps << 32); + // Set this flag only when the packet is really acknowledged with a secured enhanced ACK. + sReceiveFrame[sReceiveBufferInUse].mInfo.mRxInfo.mAckedWithSecEnhAck = securedOutgoingEnhancedAck; + // Set this flag only when the packet is really acknowledged with frame pending set. + sReceiveFrame[sReceiveBufferInUse].mInfo.mRxInfo.mAckedWithFramePending = framePendingSetInOutgoingAck; + sReceiveFrame[sReceiveBufferInUse].mIid = iid; + + sLastLqi = pPacketDetails->lqi; + sLastRssi = pPacketDetails->rssi; + +#if OPENTHREAD_CONFIG_THREAD_VERSION >= OT_THREAD_VERSION_1_2 + // Use stored values for these + sReceiveFrame[sReceiveBufferInUse].mInfo.mRxInfo.mAckKeyId = sMacKeys[iid].ackKeyId; + sReceiveFrame[sReceiveBufferInUse].mInfo.mRxInfo.mAckFrameCounter = sMacKeys[iid].ackFrameCounter; +#endif +#else sReceiveFrame.mInfo.mRxInfo.mRssi = pPacketDetails->rssi; sReceiveFrame.mInfo.mRxInfo.mLqi = pPacketDetails->lqi; sReceiveFrame.mInfo.mRxInfo.mTimestamp = pPacketDetails->timeReceived.packetTime + ((uint64_t) railUsTimerWraps << 32); @@ -2822,6 +3039,7 @@ static void updateRxFrameDetails(RAIL_RxPacketDetails_t *pPacketDetails, // Use stored values for these sReceiveFrame.mInfo.mRxInfo.mAckKeyId = sMacKeys[iid].ackKeyId; sReceiveFrame.mInfo.mRxInfo.mAckFrameCounter = sMacKeys[iid].ackFrameCounter; +#endif #endif } } @@ -2847,6 +3065,40 @@ static otError skipRxPacketLengthBytes(RAIL_RxPacketInfo_t *pPacketInfo) return error; } +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT +static void processNextRxPacket(otInstance *aInstance) +{ + // signal MAC layer + for(int index = 0; index < SL_OPENTHREAD_RADIO_RX_BUFFER_COUNT; index++) + { + if(sReceivePacket[index].isBufferValid) + { + sReceiveError = OT_ERROR_NONE; + +#if OPENTHREAD_CONFIG_DIAG_ENABLE + if (otPlatDiagModeGet()) + { + otPlatDiagRadioReceiveDone(aInstance, &sReceiveFrame[index], sReceiveError); + } + else +#endif + { +#if OPENTHREAD_RADIO && OPENTHREAD_CONFIG_MULTIPAN_RCP_ENABLE == 1 && (defined SL_CATALOG_OT_RCP_GP_INTERFACE_PRESENT) + (void) sl_gp_intf_is_gp_pkt(&sReceiveFrame, true); +#endif + otLogInfoPlat("Received %d bytes", sReceiveFrame[index].mLength); + otPlatRadioReceiveDone(aInstance, &sReceiveFrame[index], sReceiveError); +#if RADIO_CONFIG_DEBUG_COUNTERS_SUPPORT + sRailDebugCounters.mRailPlatRadioReceiveDoneCbCount++; +#endif + sReceivePacket[index].isBufferValid = false; + } + } + } + + otSysEventSignalPending(); +} +#else static void processNextRxPacket(otInstance *aInstance) { RAIL_RxPacketHandle_t packetHandle = RAIL_RX_PACKET_HANDLE_INVALID; @@ -2935,6 +3187,7 @@ static void processNextRxPacket(otInstance *aInstance) otSysEventSignalPending(); } } +#endif static void processTxComplete(otInstance *aInstance) { @@ -3013,7 +3266,11 @@ otError setRadioState(otRadioState state) switch (state) { case OT_RADIO_STATE_RECEIVE: +#if SL_ENABLE_MULTI_RX_BUFFER_SUPPORT + otEXPECT_ACTION(radioSetRx(sReceiveFrame[sReceiveBufferInUse].mChannel) == OT_ERROR_NONE, error = OT_ERROR_FAILED); +#else otEXPECT_ACTION(radioSetRx(sReceiveFrame.mChannel) == OT_ERROR_NONE, error = OT_ERROR_FAILED); +#endif break; case OT_RADIO_STATE_SLEEP: radioSetIdle(); diff --git a/protocol/openthread/sample-apps/ot-ncp/rcp-spi-802154-blehci.slcp b/protocol/openthread/sample-apps/ot-ncp/rcp-spi-802154-blehci.slcp index 747f230de09..ad7ab8dbd0e 100644 --- a/protocol/openthread/sample-apps/ot-ncp/rcp-spi-802154-blehci.slcp +++ b/protocol/openthread/sample-apps/ot-ncp/rcp-spi-802154-blehci.slcp @@ -86,6 +86,9 @@ configuration: - name: OPENTHREAD_CONFIG_PLATFORM_KEY_REFERENCES_ENABLE value: 0 +define: + - name: NONCOMPLIANT_ACK_TIMING_WORKAROUND + template_contribution: - name: component_catalog value: bluetooth_ncp diff --git a/protocol/openthread/sample-apps/ot-ncp/rcp-spi-802154.slcp b/protocol/openthread/sample-apps/ot-ncp/rcp-spi-802154.slcp index 2f95ee90458..0dab69184e2 100644 --- a/protocol/openthread/sample-apps/ot-ncp/rcp-spi-802154.slcp +++ b/protocol/openthread/sample-apps/ot-ncp/rcp-spi-802154.slcp @@ -52,6 +52,9 @@ configuration: - name: OPENTHREAD_CONFIG_PLATFORM_KEY_REFERENCES_ENABLE value: 0 +define: + - name: NONCOMPLIANT_ACK_TIMING_WORKAROUND + tag: - prebuilt_demo diff --git a/protocol/openthread/sample-apps/ot-ncp/rcp-uart-802154-blehci.slcp b/protocol/openthread/sample-apps/ot-ncp/rcp-uart-802154-blehci.slcp index d8d49f08f8e..86e8b19f2a5 100644 --- a/protocol/openthread/sample-apps/ot-ncp/rcp-uart-802154-blehci.slcp +++ b/protocol/openthread/sample-apps/ot-ncp/rcp-uart-802154-blehci.slcp @@ -92,6 +92,9 @@ configuration: - name: OPENTHREAD_CONFIG_PLATFORM_KEY_REFERENCES_ENABLE value: 0 +define: + - name: NONCOMPLIANT_ACK_TIMING_WORKAROUND + template_contribution: - name: component_catalog value: bluetooth_ncp diff --git a/protocol/openthread/sample-apps/ot-ncp/rcp-uart-802154.slcp b/protocol/openthread/sample-apps/ot-ncp/rcp-uart-802154.slcp index e40c3d70f2e..2412e5dc254 100644 --- a/protocol/openthread/sample-apps/ot-ncp/rcp-uart-802154.slcp +++ b/protocol/openthread/sample-apps/ot-ncp/rcp-uart-802154.slcp @@ -58,6 +58,9 @@ configuration: - name: OPENTHREAD_CONFIG_PLATFORM_KEY_REFERENCES_ENABLE value: 0 +define: + - name: NONCOMPLIANT_ACK_TIMING_WORKAROUND + tag: - prebuilt_demo diff --git a/protocol/usb/usb.properties b/protocol/usb/usb.properties index 30331597b8d..e97b1686fff 100644 --- a/protocol/usb/usb.properties +++ b/protocol/usb/usb.properties @@ -11,8 +11,8 @@ # sure it is a valid GitHub version. Avoid merge or local commit hashes. id=com.silabs.sdk.stack.usb -version=1.0.0.0 -dependantSdkVersion=4.0.0 +version=1.1.1.0 +dependantSdkVersion=4.2.1 label=USB SDK description=USB stack support for EFM32 and EFR32 devices -prop.subLabel=USB\\ 1.0.0.0 +prop.subLabel=USB\\ 1.1.1.0 diff --git a/protocol/wisun/stack/inc/sl_wisun_version.h b/protocol/wisun/stack/inc/sl_wisun_version.h index 5f648cc53fa..c72c3585470 100644 --- a/protocol/wisun/stack/inc/sl_wisun_version.h +++ b/protocol/wisun/stack/inc/sl_wisun_version.h @@ -40,7 +40,7 @@ #endif #ifndef SL_WISUN_VERSION_PATCH -#define SL_WISUN_VERSION_PATCH 0 +#define SL_WISUN_VERSION_PATCH 1 #endif #define FORMAT_WISUN_STACK_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) diff --git a/protocol/wisun/stack/libwisun_mac_core_efr32xg1x_gcc.a b/protocol/wisun/stack/libwisun_mac_core_efr32xg1x_gcc.a index ebcca3c3459..6a885f49e0e 100644 --- a/protocol/wisun/stack/libwisun_mac_core_efr32xg1x_gcc.a +++ b/protocol/wisun/stack/libwisun_mac_core_efr32xg1x_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e433680d9e4f17c72b6cdf50eb2679c3631c670dcce841e0c5b13924e6be021a -size 1527294 +oid sha256:25ed4a4c7d3a6aff1200449e6e0ede14692b528dd04e5812924349e824810dfa +size 1574930 diff --git a/protocol/wisun/stack/libwisun_mac_core_efr32xg1x_iar.a b/protocol/wisun/stack/libwisun_mac_core_efr32xg1x_iar.a index dbd3e13d2c0..120c67c541b 100644 --- a/protocol/wisun/stack/libwisun_mac_core_efr32xg1x_iar.a +++ b/protocol/wisun/stack/libwisun_mac_core_efr32xg1x_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d95c4dc05a7bfc3a88357ecab7f02cc595a29569c673e2f14a22fc4620001d1 -size 867926 +oid sha256:9bd0934309f1f69dfaa9d1adaaacbd0ef49ab162455ca7da69483e0c86358c3d +size 936686 diff --git a/protocol/wisun/stack/libwisun_mac_core_efr32xg2x_gcc.a b/protocol/wisun/stack/libwisun_mac_core_efr32xg2x_gcc.a index b60ec48b3a5..e91ce9b1c52 100644 --- a/protocol/wisun/stack/libwisun_mac_core_efr32xg2x_gcc.a +++ b/protocol/wisun/stack/libwisun_mac_core_efr32xg2x_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d15795a5d1f9a5d6ae86d5298db82d22a39f84441409bb01ebbca5fc9bc6e57 -size 1594706 +oid sha256:9ba59ceba919078419927b43ea45c1c81b4227175d5d81de1f5c2c8e1cb2ea50 +size 1644106 diff --git a/protocol/wisun/stack/libwisun_mac_core_efr32xg2x_iar.a b/protocol/wisun/stack/libwisun_mac_core_efr32xg2x_iar.a index ca1ff71c8d7..d8767c26f71 100644 --- a/protocol/wisun/stack/libwisun_mac_core_efr32xg2x_iar.a +++ b/protocol/wisun/stack/libwisun_mac_core_efr32xg2x_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b0b55c3e802ea647df12ca3e3b699c4c5124d797721b8933d55656a13990acb -size 902248 +oid sha256:3c2c2507d8eedca45fe571fdc5e70b7e72f826625acc4306a2e06f34a44cd57e +size 977062 diff --git a/protocol/wisun/stack/libwisun_mac_efr32xg1x_gcc.a b/protocol/wisun/stack/libwisun_mac_efr32xg1x_gcc.a index 7e310dbfd35..05a86973f53 100644 --- a/protocol/wisun/stack/libwisun_mac_efr32xg1x_gcc.a +++ b/protocol/wisun/stack/libwisun_mac_efr32xg1x_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61187e27ce1ab47bc3ccc06ff5a51c3df98d72a0ee7f7fe05c807f5363665a05 -size 1574050 +oid sha256:359c0127d80d7868261f222beb8c2fadc01578e002b4735c55e060046a0b7281 +size 1625090 diff --git a/protocol/wisun/stack/libwisun_mac_efr32xg1x_iar.a b/protocol/wisun/stack/libwisun_mac_efr32xg1x_iar.a index bd8042c9b1c..57e91983967 100644 --- a/protocol/wisun/stack/libwisun_mac_efr32xg1x_iar.a +++ b/protocol/wisun/stack/libwisun_mac_efr32xg1x_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a11c0e25cde907e291e1789633236f776dd03f157f14fb94b021a6ed80fbd21a -size 894346 +oid sha256:25c94bc588b2437f7d06bde34de2cfba1fe20208b234cf13364d03c87ab13e0e +size 965722 diff --git a/protocol/wisun/stack/libwisun_mac_efr32xg2x_gcc.a b/protocol/wisun/stack/libwisun_mac_efr32xg2x_gcc.a index 1375508aac7..6605d45bc36 100644 --- a/protocol/wisun/stack/libwisun_mac_efr32xg2x_gcc.a +++ b/protocol/wisun/stack/libwisun_mac_efr32xg2x_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:336b9b1d1c3224921c0459cc4f4344bafc91a6d9870d6a0bef9cfe0a61d5fa07 -size 1642010 +oid sha256:ef2b3d624631f5c9f7fd007609ad48138bc7ada5c5f68a3bce09f2e67e171ffc +size 1694810 diff --git a/protocol/wisun/stack/libwisun_mac_efr32xg2x_iar.a b/protocol/wisun/stack/libwisun_mac_efr32xg2x_iar.a index 687df0fda8a..259ca4aaf30 100644 --- a/protocol/wisun/stack/libwisun_mac_efr32xg2x_iar.a +++ b/protocol/wisun/stack/libwisun_mac_efr32xg2x_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c5f1d49090dcc6b09e2f7a2affb95216843d1ade512909efcf0c6f1a8d28a0f -size 925984 +oid sha256:dd00faed0db4cde9ac91238c59efd41113764b38777b8eb59f29a6ed33673674 +size 1004140 diff --git a/protocol/wisun/stack/libwisun_rcp_efr32xg1x_gcc.a b/protocol/wisun/stack/libwisun_rcp_efr32xg1x_gcc.a index 135e646c00e..f13a54ef7f8 100644 --- a/protocol/wisun/stack/libwisun_rcp_efr32xg1x_gcc.a +++ b/protocol/wisun/stack/libwisun_rcp_efr32xg1x_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d1cef6955bd9ff2168dd8578ac83656d034327b1fe654f36645679bc9ce5315 -size 377628 +oid sha256:e0c7d9d6d83059c9a1ea1286fe08f18b90c9b8b4eff4dfe3035e3774ddcefd91 +size 378984 diff --git a/protocol/wisun/stack/libwisun_rcp_efr32xg1x_iar.a b/protocol/wisun/stack/libwisun_rcp_efr32xg1x_iar.a index 6d7eb60a548..4aa45528217 100644 --- a/protocol/wisun/stack/libwisun_rcp_efr32xg1x_iar.a +++ b/protocol/wisun/stack/libwisun_rcp_efr32xg1x_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e16dc6e7ffdfb3ab6227c5ba8865853054b3d3b21e433a28bfb67d7b9cbf24e -size 338764 +oid sha256:50a1af723c1b8604961028e71289938e08f11cb3696a12e3749e675dadb400bb +size 339412 diff --git a/protocol/wisun/stack/libwisun_rcp_efr32xg2x_gcc.a b/protocol/wisun/stack/libwisun_rcp_efr32xg2x_gcc.a index 3edab830553..c83d31389ea 100644 --- a/protocol/wisun/stack/libwisun_rcp_efr32xg2x_gcc.a +++ b/protocol/wisun/stack/libwisun_rcp_efr32xg2x_gcc.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4063f505bed289009417a93ede6f0b6db73d2961b8a2a3f7e941a57c791e0c05 -size 419758 +oid sha256:f7e765615aca7bb3aed4e619b107e29751b2dc1cfcc59f2e7b5ac99385dc4942 +size 422414 diff --git a/protocol/wisun/stack/libwisun_rcp_efr32xg2x_iar.a b/protocol/wisun/stack/libwisun_rcp_efr32xg2x_iar.a index 0733a1247ed..6cda906fe83 100644 --- a/protocol/wisun/stack/libwisun_rcp_efr32xg2x_iar.a +++ b/protocol/wisun/stack/libwisun_rcp_efr32xg2x_iar.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:108647f953cbbdd841b6dde98de297542d9267fd92acb52b372cf6e788574122 -size 355860 +oid sha256:af49aa3ba22c30dbcfd476dcb3bc029a311129ed9b850afc2b3c44f84e96f54e +size 360424 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_gcc_debug.a b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_gcc_debug.a index 6cabe4992a0..67047c5628c 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_gcc_debug.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_gcc_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cc01d4c3caf0c1a782f5915a92f8de27398cb3bac45757931b052ce27ffb1d9 -size 9822762 +oid sha256:3251caf2f14ac0f1c93f9d85668a981ff6a6b71cc11cf635e82231ccd1373eb6 +size 9823626 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_gcc_release.a b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_gcc_release.a index 1bf40aea424..ad51a583d00 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_gcc_release.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a75e15184ff5a401f97558eeb93b16d5049b0ba4d9d80aafb888fed2789e577c -size 9437586 +oid sha256:61c7eb1182fe612af8866fc413887e8874569eb9b0f58cfd5ee521aec0006e21 +size 9437722 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_iar_debug.a b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_iar_debug.a index 62832a39a4a..a1408747032 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_iar_debug.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_iar_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c8b777bc0987755ce3ddf85b839b38708c0bf834be5791ebd9aa564cf9d86dd -size 4332968 +oid sha256:4bc6272ced589dbbcd4f954bc11f026be5f915b2046cda887f6de25f2436d5ff +size 4333518 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_iar_release.a b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_iar_release.a index 37f9c606b05..b96591d4745 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_iar_release.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_freertos_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c0c0184cf6b89947175d4ee8d20d1b87dc25d0c7f303c52b558b8ee67b55e37 -size 3932998 +oid sha256:c3a0b55622f98015795a0c5289025ded87301543b626a0f4a252ce0f2c4fa96f +size 3933138 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_gcc_debug.a b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_gcc_debug.a index 6e005fd646d..41e03897af9 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_gcc_debug.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_gcc_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9e23d1a6375d1cede83fca9bfea4ecf81d70a3fb21868bb10aae297e08c1007 -size 9822806 +oid sha256:431b7ccceb061df74c63dc995bf8054a81a8f64009e5cda62f25a4ad42afa34f +size 9823670 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_gcc_release.a b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_gcc_release.a index 841a8c3ce2f..813d0a4c108 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_gcc_release.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:da880f197f354d2b6cdd78b620089dd5c41e62e03fce75d4d894156353f47dac -size 9437630 +oid sha256:fff418fbaee317cd7e48bbacabe5fba23a6b30b0927e0317b4450243ac7e1b19 +size 9437766 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_iar_debug.a b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_iar_debug.a index ef4478dd6a1..d96b4939c12 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_iar_debug.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_iar_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9df815e4bc59706f71c47fba3e39176e6bc2110278382669cea5aa27f4a45356 -size 4251526 +oid sha256:a696293e1c8de22d34e32738042fb0f77a531b52c599c454afeb2cb3f314c6f4 +size 4252078 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_iar_release.a b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_iar_release.a index 1ed073cd5dd..108a5f84706 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_iar_release.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg1x_micriumos_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9c02673de14c51c442eacff309f432cd76965d848734b8f68dae56848c118ae -size 3851546 +oid sha256:a394b089a41f8355a5483d8ac312aea9a6c9c43148823b1f66f65836c1a1744c +size 3851686 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_gcc_debug.a b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_gcc_debug.a index fcdf8ad2dcb..ee9e00f0224 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_gcc_debug.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_gcc_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:785483cdae465d0b1af22b47a520a290ee8f10763eb92fbb5714c593292748cd -size 9897558 +oid sha256:f8081074c57e5a96fbf6383ad65721af60ddb149a59d478ecf110ecfe6829878 +size 9898426 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_gcc_release.a b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_gcc_release.a index 9da7d68b42f..a72ffdf9a3d 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_gcc_release.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bdc6aef56d0e7b0352c352511e1c97e44070f03cc5223aae4d710be0fc1764f0 -size 9511266 +oid sha256:c9dafa0632c8f096a6d1c5f277b4517c5b5186d5bd11ee37677124551ed8af2f +size 9511410 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_iar_debug.a b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_iar_debug.a index 87e9fceb993..ee1ddfe9b25 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_iar_debug.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_iar_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eaf2e062b7ab0d6fc0e27ea3d7e03196c9ebb477456b602784a5e845eb8c4fb6 -size 4369080 +oid sha256:e933cbe91765506b1d66d101b8d789b6c7d17400d2bd2d763644be08981ac1f6 +size 4369634 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_iar_release.a b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_iar_release.a index 9fded9604d5..4b0ccaafc84 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_iar_release.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_freertos_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5d6794a21639d58d7edd5847d077130de6cf91ddca2c616f37965e714c1d01d -size 3966076 +oid sha256:e8166f2b526c0d38a284daa1b12fc618e942d1f3597030e22ebb2222bd0c55ba +size 3966216 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_gcc_debug.a b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_gcc_debug.a index a29722d7e35..f58a0d1838e 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_gcc_debug.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_gcc_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:622d90eaa25691554e697c46387d791dc5fdbe5b74fd27885e2733d289457a94 -size 9897602 +oid sha256:55e6fe2dae4001dd7d5f0b05b7c5cfa77acfabd2c98e7fd2823f86aaa96dd4bc +size 9898470 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_gcc_release.a b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_gcc_release.a index e95c1afc268..04e2fae1b89 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_gcc_release.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f1c1ea4eca42b60d1f3be753229cfcbf8b13826ab57ad8273e9d5a47aac6d1f -size 9511310 +oid sha256:58de04af1ee389a978978771bd8f68da6662edb7518758873af26a86c2593285 +size 9511454 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_iar_debug.a b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_iar_debug.a index 84fb002c4e7..167d695da90 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_iar_debug.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_iar_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85362538501ce668cd8a3224d97ef0d686db1a3ee866dae34f16415816b22120 -size 4287178 +oid sha256:0ec6980c9198c3338e7f5f43791e501e4e367379361afdd605614b91418e0b19 +size 4287732 diff --git a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_iar_release.a b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_iar_release.a index 788ffade201..b24f8f63a03 100644 --- a/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_iar_release.a +++ b/protocol/wisun/stack/libwisun_router_core_efr32xg2x_micriumos_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc328b9efcb955076b91776eb60067d9dd68b383beca0bcd8dc0e42c2610a186 -size 3884170 +oid sha256:75e2373f3649498bcb2f712deb180ea066d27f6716d580485afdc3a1998fbb97 +size 3884310 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_gcc_debug.a b/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_gcc_debug.a index 0b911699c9d..2455e02187d 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_gcc_debug.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_gcc_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44ac37896bd1508c20d0e4ff9c7636975ac580b2cb31d697b0010a613ac733de -size 10102216 +oid sha256:ab788fbace223293921dc3444d29baae02cb51b38a68479b24b2b53e40706bf7 +size 10102760 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_gcc_release.a b/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_gcc_release.a index fa89594544a..6bab722a8f7 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_gcc_release.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2b813f516269bf82ff2baddd616b69f39a13cdfc06af2b684bc35569d18c51f -size 9696864 +oid sha256:88b1eef16ef467e28dbc057a48dc41dd53e4cfb4133855c851e2a18f6fe241ca +size 9697056 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_iar_debug.a b/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_iar_debug.a index b78996d5526..603778e36b3 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_iar_debug.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_iar_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6d66313c9eafc8e66cc15beb0743fbe2022a15943f072ca62eeefde7a30df4e -size 4505242 +oid sha256:118ee8df7ab7fe1d00d8f5969a7a5c1f554f4a82217f7a6e07b6be44f198bc9a +size 4505700 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_iar_release.a b/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_iar_release.a index 1ea9db8f2f9..e8baa63d6e7 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_iar_release.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg1x_freertos_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d3d5e78c99429da94b235ce1f1ed97a446ef910e6e5ec5fd07ee694ae65cdd1 -size 4075428 +oid sha256:ddbdf701382e2d75b2a13d3c76b437ad3b4d37f8be84430c7909022914907bc2 +size 4075648 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_gcc_debug.a b/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_gcc_debug.a index 1f8d174524d..0d62b76c115 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_gcc_debug.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_gcc_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:71c323ca1e88e61e554e9fec8ab2c0892e12c8be535a16ede1af12f038185720 -size 10102260 +oid sha256:3963e8deb2e3407941a3061bdb20f502d0c7ca639288b8762b246a1107dc8eac +size 10102804 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_gcc_release.a b/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_gcc_release.a index ec0ee227004..d141d93dee2 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_gcc_release.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83db65cb89df1bef6263bd282839ae15aa8c4d5166dc9a6ab1ff4cd14db489da -size 9696908 +oid sha256:270035f17a0049b6a8013092088610cf95b39c02c3b08a1a31b1bb6cad173b2e +size 9697100 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_iar_debug.a b/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_iar_debug.a index 3fdfc42b65d..2dd5d26b567 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_iar_debug.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_iar_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6405786bd7107111490dc87453a634e9b697372d806b8a5bc30e2d380248252d -size 4422894 +oid sha256:6ead6d0a6597cb41c834e6fc765d43fc7496afffadf249d947059822a10df1a2 +size 4423348 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_iar_release.a b/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_iar_release.a index cc620ee430f..4ea01ce287b 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_iar_release.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg1x_micriumos_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab638c05bd9459f42e9336021e81e9a00233a2231fdb0e886eb5681cbc0aabce -size 3993068 +oid sha256:2be20395925098bd932914806ecfb62888285863718a9e741ee12788b25a6ed6 +size 3993290 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_gcc_debug.a b/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_gcc_debug.a index 4c95d9e4936..543d672ee90 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_gcc_debug.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_gcc_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3b8e52e94ba0acb22c230e878687a63cb8fdddf0602e7db9a8ac6d95ccabdcdf -size 10178316 +oid sha256:90438ea13f5d9c5f68bf5f670d49edf44bb389304d5b6563ccc44e3f412ebfd0 +size 10178864 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_gcc_release.a b/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_gcc_release.a index 84f967fd0ba..50d672885d6 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_gcc_release.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ac8755b040a0ce9098e8aae504049b489bd665d7fa0941d7699d2474e007a60 -size 9771916 +oid sha256:faf4eed248790b04d3c1a689388632395efaafc513467e19b3c9cd62ef8d7e38 +size 9772120 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_iar_debug.a b/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_iar_debug.a index 7c5b658737a..af8c068a1f1 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_iar_debug.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_iar_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e3cf7e4cdf29455d14a445b5d4342a3d54e8f183220e935b702750527d4d14cb -size 4534752 +oid sha256:e23e283c85cf1f691537364b96653602a0e293da9d1c988979b168ede1e00e70 +size 4535400 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_iar_release.a b/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_iar_release.a index b3e53c1d027..6b8994f7326 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_iar_release.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg2x_freertos_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89aba1b06667257a467033dcb0a8cc3b3a431464b3285102b4529be2c4f7a14c -size 4106144 +oid sha256:cf2521e260e029e667cc758be154344e07b71c345c706bd364b2eacc595f6663 +size 4106366 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_gcc_debug.a b/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_gcc_debug.a index 8d5949f54dd..dace497e16c 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_gcc_debug.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_gcc_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42401c89ad014d6e77aecf911f83637fcefb0db6a64679a637f3bf1464c4180c -size 10178360 +oid sha256:b2b4ec12700559c4120bc73ce5a93784873779b979d8c0d8b57da729702413d6 +size 10178908 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_gcc_release.a b/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_gcc_release.a index 15f8c717e42..46e42d9ffc9 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_gcc_release.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_gcc_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be090152c9399f7409d4b78a73478b8efd81800d41498299d6e257e5aff48535 -size 9771960 +oid sha256:f4c6263f89087eec05ebd0c8cbbad1a8e01f9e2998bec0f8c916aa72aadb1617 +size 9772164 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_iar_debug.a b/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_iar_debug.a index d8e025a32db..dbedce989b6 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_iar_debug.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_iar_debug.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:654a80477be9ff145681a16e0eecb3c2f28cc6b8e5930c2bfdbba768b0a4e7dc -size 4451940 +oid sha256:5a3c60da493d302a7435b96effa77e12a69cb0c1a23931814f8db3f3e99a67eb +size 4452590 diff --git a/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_iar_release.a b/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_iar_release.a index c651e140637..0d1b333cfc1 100644 --- a/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_iar_release.a +++ b/protocol/wisun/stack/libwisun_router_efr32xg2x_micriumos_iar_release.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:210c00d874d8b8395ffaca6f11381d834971076f20a4688411ea45b2f43f3c47 -size 4023332 +oid sha256:18a7f1bd6465666b397278d4db0491a38a6945351a1db8b91fe76b1225a864ec +size 4023552 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_EU_size.txt index 0aa279dc2e6..7d68f56fdd4 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2fad8 0x8006000 -_cmd_handlers 0x2e0 0x8035ad8 -_zw_protocol_cmd_handlers 0xe8 0x8035db8 -_zw_protocol_cmd_handlers_lr 0x50 0x8035ea0 -.ARM.exidx 0x8 0x8035ef0 -.copy.table 0xc 0x8035ef8 -.zero.table 0x0 0x8035f04 +.text 0x2f820 0x8006000 +_cmd_handlers 0x2e0 0x8035820 +_zw_protocol_cmd_handlers 0xe8 0x8035b00 +_zw_protocol_cmd_handlers_lr 0x50 0x8035be8 +.ARM.exidx 0x8 0x8035c38 +.copy.table 0xc 0x8035c40 +.zero.table 0x0 0x8035c4c .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4d4 0x20000a08 +.data 0x40c 0x20000600 +.bss 0xa4d4 0x20000a0c .heap 0x5120 0x2000aee0 -.zwave_nvm 0x0 0x8035f04 -.nvm 0xa000 0x8035f04 +.zwave_nvm 0x0 0x8035c4c +.nvm 0xa000 0x8035c4c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28868f 0x0 -.debug_abbrev 0x107e8 0x0 -.debug_loc 0x39182 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x288b83 0x0 +.debug_abbrev 0x107d4 0x0 +.debug_loc 0x395b7 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xa250 0x0 -.debug_line 0x47205 0x0 -.debug_str 0x8beb8 0x0 -Total 0x4006e5 +.debug_ranges 0xa1f8 0x0 +.debug_line 0x47363 0x0 +.debug_str 0x8bfbb 0x0 +Total 0x400f77 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 197388 + 196696 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46812 + 46816 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_US_LR_size.txt index 326ba17b7f1..35256ca8aab 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2fad8 0x8006000 -_cmd_handlers 0x2e0 0x8035ad8 -_zw_protocol_cmd_handlers 0xe8 0x8035db8 -_zw_protocol_cmd_handlers_lr 0x50 0x8035ea0 -.ARM.exidx 0x8 0x8035ef0 -.copy.table 0xc 0x8035ef8 -.zero.table 0x0 0x8035f04 +.text 0x2f820 0x8006000 +_cmd_handlers 0x2e0 0x8035820 +_zw_protocol_cmd_handlers 0xe8 0x8035b00 +_zw_protocol_cmd_handlers_lr 0x50 0x8035be8 +.ARM.exidx 0x8 0x8035c38 +.copy.table 0xc 0x8035c40 +.zero.table 0x0 0x8035c4c .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4d4 0x20000a08 +.data 0x40c 0x20000600 +.bss 0xa4d4 0x20000a0c .heap 0x5120 0x2000aee0 -.zwave_nvm 0x0 0x8035f04 -.nvm 0xa000 0x8035f04 +.zwave_nvm 0x0 0x8035c4c +.nvm 0xa000 0x8035c4c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28868f 0x0 -.debug_abbrev 0x107e8 0x0 -.debug_loc 0x39182 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x288b83 0x0 +.debug_abbrev 0x107d4 0x0 +.debug_loc 0x395b7 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xa250 0x0 -.debug_line 0x47205 0x0 -.debug_str 0x8beae 0x0 -Total 0x4006db +.debug_ranges 0xa1f8 0x0 +.debug_line 0x47363 0x0 +.debug_str 0x8bfb1 0x0 +Total 0x400f6d The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 197388 + 196696 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46812 + 46816 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_US_size.txt index 0aa279dc2e6..7d68f56fdd4 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD2603A_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2fad8 0x8006000 -_cmd_handlers 0x2e0 0x8035ad8 -_zw_protocol_cmd_handlers 0xe8 0x8035db8 -_zw_protocol_cmd_handlers_lr 0x50 0x8035ea0 -.ARM.exidx 0x8 0x8035ef0 -.copy.table 0xc 0x8035ef8 -.zero.table 0x0 0x8035f04 +.text 0x2f820 0x8006000 +_cmd_handlers 0x2e0 0x8035820 +_zw_protocol_cmd_handlers 0xe8 0x8035b00 +_zw_protocol_cmd_handlers_lr 0x50 0x8035be8 +.ARM.exidx 0x8 0x8035c38 +.copy.table 0xc 0x8035c40 +.zero.table 0x0 0x8035c4c .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4d4 0x20000a08 +.data 0x40c 0x20000600 +.bss 0xa4d4 0x20000a0c .heap 0x5120 0x2000aee0 -.zwave_nvm 0x0 0x8035f04 -.nvm 0xa000 0x8035f04 +.zwave_nvm 0x0 0x8035c4c +.nvm 0xa000 0x8035c4c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28868f 0x0 -.debug_abbrev 0x107e8 0x0 -.debug_loc 0x39182 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x288b83 0x0 +.debug_abbrev 0x107d4 0x0 +.debug_loc 0x395b7 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xa250 0x0 -.debug_line 0x47205 0x0 -.debug_str 0x8beb8 0x0 -Total 0x4006e5 +.debug_ranges 0xa1f8 0x0 +.debug_line 0x47363 0x0 +.debug_str 0x8bfbb 0x0 +Total 0x400f77 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 197388 + 196696 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46812 + 46816 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_EU_size.txt index 4fe7e929db4..2bfd38bf8b2 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_EU_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2b4cc 0x0 -_cmd_handlers 0x2e0 0x2b4cc -_zw_protocol_cmd_handlers 0xe8 0x2b7ac -_zw_protocol_cmd_handlers_lr 0x50 0x2b894 -.ARM.exidx 0x8 0x2b8e4 -.copy.table 0xc 0x2b8ec -.zero.table 0x0 0x2b8f8 +.text 0x2b574 0x0 +_cmd_handlers 0x2e0 0x2b574 +_zw_protocol_cmd_handlers 0xe8 0x2b854 +_zw_protocol_cmd_handlers_lr 0x50 0x2b93c +.ARM.exidx 0x8 0x2b98c +.copy.table 0xc 0x2b994 +.zero.table 0x0 0x2b9a0 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7494 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7490 0x200009a0 .heap 0x1d0 0x20007e30 -.zwave_nvm 0x3000 0x2b8f8 -.nvm 0x9000 0x2e8f8 +.zwave_nvm 0x3000 0x2b9a0 +.nvm 0x9000 0x2e9a0 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70c8 0x0 -.debug_info 0x24fe74 0x0 +.debug_frame 0x70d8 0x0 +.debug_info 0x25025e 0x0 .debug_abbrev 0xeef5 0x0 -.debug_loc 0x37e8f 0x0 +.debug_loc 0x3823e 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x9880 0x0 -.debug_line 0x42dcf 0x0 -.debug_str 0x81634 0x0 -Total 0x3ab342 +.debug_ranges 0x98a0 0x0 +.debug_line 0x42f4f 0x0 +.debug_str 0x8171b 0x0 +Total 0x3abe1a The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179348 + 179520 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_US_LR_size.txt index fbfbc7848c7..118b7275743 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_US_LR_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2b4cc 0x0 -_cmd_handlers 0x2e0 0x2b4cc -_zw_protocol_cmd_handlers 0xe8 0x2b7ac -_zw_protocol_cmd_handlers_lr 0x50 0x2b894 -.ARM.exidx 0x8 0x2b8e4 -.copy.table 0xc 0x2b8ec -.zero.table 0x0 0x2b8f8 +.text 0x2b574 0x0 +_cmd_handlers 0x2e0 0x2b574 +_zw_protocol_cmd_handlers 0xe8 0x2b854 +_zw_protocol_cmd_handlers_lr 0x50 0x2b93c +.ARM.exidx 0x8 0x2b98c +.copy.table 0xc 0x2b994 +.zero.table 0x0 0x2b9a0 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7494 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7490 0x200009a0 .heap 0x1d0 0x20007e30 -.zwave_nvm 0x3000 0x2b8f8 -.nvm 0x9000 0x2e8f8 +.zwave_nvm 0x3000 0x2b9a0 +.nvm 0x9000 0x2e9a0 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70c8 0x0 -.debug_info 0x24fe74 0x0 +.debug_frame 0x70d8 0x0 +.debug_info 0x25025e 0x0 .debug_abbrev 0xeef5 0x0 -.debug_loc 0x37e8f 0x0 +.debug_loc 0x3823e 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x9880 0x0 -.debug_line 0x42dcf 0x0 -.debug_str 0x8162a 0x0 -Total 0x3ab338 +.debug_ranges 0x98a0 0x0 +.debug_line 0x42f4f 0x0 +.debug_str 0x81711 0x0 +Total 0x3abe10 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179348 + 179520 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_US_size.txt index 4fe7e929db4..2bfd38bf8b2 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4201A_REGION_US_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2b4cc 0x0 -_cmd_handlers 0x2e0 0x2b4cc -_zw_protocol_cmd_handlers 0xe8 0x2b7ac -_zw_protocol_cmd_handlers_lr 0x50 0x2b894 -.ARM.exidx 0x8 0x2b8e4 -.copy.table 0xc 0x2b8ec -.zero.table 0x0 0x2b8f8 +.text 0x2b574 0x0 +_cmd_handlers 0x2e0 0x2b574 +_zw_protocol_cmd_handlers 0xe8 0x2b854 +_zw_protocol_cmd_handlers_lr 0x50 0x2b93c +.ARM.exidx 0x8 0x2b98c +.copy.table 0xc 0x2b994 +.zero.table 0x0 0x2b9a0 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7494 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7490 0x200009a0 .heap 0x1d0 0x20007e30 -.zwave_nvm 0x3000 0x2b8f8 -.nvm 0x9000 0x2e8f8 +.zwave_nvm 0x3000 0x2b9a0 +.nvm 0x9000 0x2e9a0 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70c8 0x0 -.debug_info 0x24fe74 0x0 +.debug_frame 0x70d8 0x0 +.debug_info 0x25025e 0x0 .debug_abbrev 0xeef5 0x0 -.debug_loc 0x37e8f 0x0 +.debug_loc 0x3823e 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x9880 0x0 -.debug_line 0x42dcf 0x0 -.debug_str 0x81634 0x0 -Total 0x3ab342 +.debug_ranges 0x98a0 0x0 +.debug_line 0x42f4f 0x0 +.debug_str 0x8171b 0x0 +Total 0x3abe1a The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179348 + 179520 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_EU_size.txt index 89596ffc589..92635f0e4aa 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_EU_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2bcfc 0x0 -_cmd_handlers 0x2e0 0x2bcfc -_zw_protocol_cmd_handlers 0xe8 0x2bfdc -_zw_protocol_cmd_handlers_lr 0x50 0x2c0c4 -.ARM.exidx 0x8 0x2c114 -.copy.table 0xc 0x2c11c -.zero.table 0x0 0x2c128 +.text 0x2bd98 0x0 +_cmd_handlers 0x2e0 0x2bd98 +_zw_protocol_cmd_handlers 0xe8 0x2c078 +_zw_protocol_cmd_handlers_lr 0x50 0x2c160 +.ARM.exidx 0x8 0x2c1b0 +.copy.table 0xc 0x2c1b8 +.zero.table 0x0 0x2c1c4 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7a38 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7a34 0x200009a0 .heap 0x7c28 0x200083d8 -.zwave_nvm 0x3000 0x2c128 -.nvm 0x9000 0x2f128 +.zwave_nvm 0x3000 0x2c1c4 +.nvm 0x9000 0x2f1c4 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70dc 0x0 -.debug_info 0x2518a5 0x0 +.debug_frame 0x70e8 0x0 +.debug_info 0x251c73 0x0 .debug_abbrev 0xef4f 0x0 -.debug_loc 0x37c63 0x0 +.debug_loc 0x37fd8 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9858 0x0 -.debug_line 0x42b4e 0x0 -.debug_str 0x82230 0x0 -Total 0x3b5d64 +.debug_ranges 0x9880 0x0 +.debug_line 0x42cc6 0x0 +.debug_str 0x82317 0x0 +Total 0x3b67d6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 181444 + 181604 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_US_LR_size.txt index bb21de02684..62057f16119 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_US_LR_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2bcfc 0x0 -_cmd_handlers 0x2e0 0x2bcfc -_zw_protocol_cmd_handlers 0xe8 0x2bfdc -_zw_protocol_cmd_handlers_lr 0x50 0x2c0c4 -.ARM.exidx 0x8 0x2c114 -.copy.table 0xc 0x2c11c -.zero.table 0x0 0x2c128 +.text 0x2bd98 0x0 +_cmd_handlers 0x2e0 0x2bd98 +_zw_protocol_cmd_handlers 0xe8 0x2c078 +_zw_protocol_cmd_handlers_lr 0x50 0x2c160 +.ARM.exidx 0x8 0x2c1b0 +.copy.table 0xc 0x2c1b8 +.zero.table 0x0 0x2c1c4 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7a38 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7a34 0x200009a0 .heap 0x7c28 0x200083d8 -.zwave_nvm 0x3000 0x2c128 -.nvm 0x9000 0x2f128 +.zwave_nvm 0x3000 0x2c1c4 +.nvm 0x9000 0x2f1c4 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70dc 0x0 -.debug_info 0x2518a5 0x0 +.debug_frame 0x70e8 0x0 +.debug_info 0x251c73 0x0 .debug_abbrev 0xef4f 0x0 -.debug_loc 0x37c63 0x0 +.debug_loc 0x37fd8 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9858 0x0 -.debug_line 0x42b4e 0x0 -.debug_str 0x82226 0x0 -Total 0x3b5d5a +.debug_ranges 0x9880 0x0 +.debug_line 0x42cc6 0x0 +.debug_str 0x8230d 0x0 +Total 0x3b67cc The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 181444 + 181604 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_US_size.txt index 89596ffc589..92635f0e4aa 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4202A_REGION_US_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2bcfc 0x0 -_cmd_handlers 0x2e0 0x2bcfc -_zw_protocol_cmd_handlers 0xe8 0x2bfdc -_zw_protocol_cmd_handlers_lr 0x50 0x2c0c4 -.ARM.exidx 0x8 0x2c114 -.copy.table 0xc 0x2c11c -.zero.table 0x0 0x2c128 +.text 0x2bd98 0x0 +_cmd_handlers 0x2e0 0x2bd98 +_zw_protocol_cmd_handlers 0xe8 0x2c078 +_zw_protocol_cmd_handlers_lr 0x50 0x2c160 +.ARM.exidx 0x8 0x2c1b0 +.copy.table 0xc 0x2c1b8 +.zero.table 0x0 0x2c1c4 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7a38 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7a34 0x200009a0 .heap 0x7c28 0x200083d8 -.zwave_nvm 0x3000 0x2c128 -.nvm 0x9000 0x2f128 +.zwave_nvm 0x3000 0x2c1c4 +.nvm 0x9000 0x2f1c4 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70dc 0x0 -.debug_info 0x2518a5 0x0 +.debug_frame 0x70e8 0x0 +.debug_info 0x251c73 0x0 .debug_abbrev 0xef4f 0x0 -.debug_loc 0x37c63 0x0 +.debug_loc 0x37fd8 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9858 0x0 -.debug_line 0x42b4e 0x0 -.debug_str 0x82230 0x0 -Total 0x3b5d64 +.debug_ranges 0x9880 0x0 +.debug_line 0x42cc6 0x0 +.debug_str 0x82317 0x0 +Total 0x3b67d6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 181444 + 181604 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_EU_size.txt index a5fed5a2cc2..e33cce1cd0f 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2f5e4 0x8006000 -_cmd_handlers 0x2e0 0x80355e4 -_zw_protocol_cmd_handlers 0xe8 0x80358c4 -_zw_protocol_cmd_handlers_lr 0x50 0x80359ac -.ARM.exidx 0x8 0x80359fc -.copy.table 0xc 0x8035a04 -.zero.table 0x0 0x8035a10 +.text 0x2f32c 0x8006000 +_cmd_handlers 0x2e0 0x803532c +_zw_protocol_cmd_handlers 0xe8 0x803560c +_zw_protocol_cmd_handlers_lr 0x50 0x80356f4 +.ARM.exidx 0x8 0x8035744 +.copy.table 0xc 0x803574c +.zero.table 0x0 0x8035758 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4b8 0x20000a08 -.heap 0x5140 0x2000aec0 -.zwave_nvm 0x0 0x8035a10 -.nvm 0xa000 0x8035a10 +.data 0x40c 0x20000600 +.bss 0xa4b8 0x20000a0c +.heap 0x5138 0x2000aec8 +.zwave_nvm 0x0 0x8035758 +.nvm 0xa000 0x8035758 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28a41a 0x0 -.debug_abbrev 0x10a0e 0x0 -.debug_loc 0x392fa 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28a90e 0x0 +.debug_abbrev 0x109fa 0x0 +.debug_loc 0x3973e 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa310 0x0 -.debug_line 0x478fc 0x0 -.debug_str 0x8bd5d 0x0 -Total 0x402932 +.debug_ranges 0xa2b8 0x0 +.debug_line 0x47a5d 0x0 +.debug_str 0x8be60 0x0 +Total 0x4031ce The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 196120 + 195428 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46784 + 46788 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_US_LR_size.txt index e958a4792aa..52f6682a2d8 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2f5e4 0x8006000 -_cmd_handlers 0x2e0 0x80355e4 -_zw_protocol_cmd_handlers 0xe8 0x80358c4 -_zw_protocol_cmd_handlers_lr 0x50 0x80359ac -.ARM.exidx 0x8 0x80359fc -.copy.table 0xc 0x8035a04 -.zero.table 0x0 0x8035a10 +.text 0x2f32c 0x8006000 +_cmd_handlers 0x2e0 0x803532c +_zw_protocol_cmd_handlers 0xe8 0x803560c +_zw_protocol_cmd_handlers_lr 0x50 0x80356f4 +.ARM.exidx 0x8 0x8035744 +.copy.table 0xc 0x803574c +.zero.table 0x0 0x8035758 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4b8 0x20000a08 -.heap 0x5140 0x2000aec0 -.zwave_nvm 0x0 0x8035a10 -.nvm 0xa000 0x8035a10 +.data 0x40c 0x20000600 +.bss 0xa4b8 0x20000a0c +.heap 0x5138 0x2000aec8 +.zwave_nvm 0x0 0x8035758 +.nvm 0xa000 0x8035758 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28a41a 0x0 -.debug_abbrev 0x10a0e 0x0 -.debug_loc 0x392fa 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28a90e 0x0 +.debug_abbrev 0x109fa 0x0 +.debug_loc 0x3973e 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa310 0x0 -.debug_line 0x478fc 0x0 -.debug_str 0x8bd53 0x0 -Total 0x402928 +.debug_ranges 0xa2b8 0x0 +.debug_line 0x47a5d 0x0 +.debug_str 0x8be56 0x0 +Total 0x4031c4 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 196120 + 195428 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46784 + 46788 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_US_size.txt index a5fed5a2cc2..e33cce1cd0f 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204C_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2f5e4 0x8006000 -_cmd_handlers 0x2e0 0x80355e4 -_zw_protocol_cmd_handlers 0xe8 0x80358c4 -_zw_protocol_cmd_handlers_lr 0x50 0x80359ac -.ARM.exidx 0x8 0x80359fc -.copy.table 0xc 0x8035a04 -.zero.table 0x0 0x8035a10 +.text 0x2f32c 0x8006000 +_cmd_handlers 0x2e0 0x803532c +_zw_protocol_cmd_handlers 0xe8 0x803560c +_zw_protocol_cmd_handlers_lr 0x50 0x80356f4 +.ARM.exidx 0x8 0x8035744 +.copy.table 0xc 0x803574c +.zero.table 0x0 0x8035758 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4b8 0x20000a08 -.heap 0x5140 0x2000aec0 -.zwave_nvm 0x0 0x8035a10 -.nvm 0xa000 0x8035a10 +.data 0x40c 0x20000600 +.bss 0xa4b8 0x20000a0c +.heap 0x5138 0x2000aec8 +.zwave_nvm 0x0 0x8035758 +.nvm 0xa000 0x8035758 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28a41a 0x0 -.debug_abbrev 0x10a0e 0x0 -.debug_loc 0x392fa 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28a90e 0x0 +.debug_abbrev 0x109fa 0x0 +.debug_loc 0x3973e 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa310 0x0 -.debug_line 0x478fc 0x0 -.debug_str 0x8bd5d 0x0 -Total 0x402932 +.debug_ranges 0xa2b8 0x0 +.debug_line 0x47a5d 0x0 +.debug_str 0x8be60 0x0 +Total 0x4031ce The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 196120 + 195428 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46784 + 46788 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_EU_size.txt index edc4abe5279..b02469d49d1 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2f61c 0x8006000 -_cmd_handlers 0x2e0 0x803561c -_zw_protocol_cmd_handlers 0xe8 0x80358fc -_zw_protocol_cmd_handlers_lr 0x50 0x80359e4 -.ARM.exidx 0x8 0x8035a34 -.copy.table 0xc 0x8035a3c -.zero.table 0x0 0x8035a48 +.text 0x2f36c 0x8006000 +_cmd_handlers 0x2e0 0x803536c +_zw_protocol_cmd_handlers 0xe8 0x803564c +_zw_protocol_cmd_handlers_lr 0x50 0x8035734 +.ARM.exidx 0x8 0x8035784 +.copy.table 0xc 0x803578c +.zero.table 0x0 0x8035798 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4b8 0x20000a08 -.heap 0x5140 0x2000aec0 -.zwave_nvm 0x0 0x8035a48 -.nvm 0xa000 0x8035a48 +.data 0x40c 0x20000600 +.bss 0xa4b8 0x20000a0c +.heap 0x5138 0x2000aec8 +.zwave_nvm 0x0 0x8035798 +.nvm 0xa000 0x8035798 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28a66e 0x0 -.debug_abbrev 0x10ab2 0x0 -.debug_loc 0x3935f 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28ab62 0x0 +.debug_abbrev 0x10a9e 0x0 +.debug_loc 0x397a3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa348 0x0 -.debug_line 0x47b1a 0x0 -.debug_str 0x8bf30 0x0 -Total 0x4030f0 +.debug_ranges 0xa2f0 0x0 +.debug_line 0x47c7b 0x0 +.debug_str 0x8c033 0x0 +Total 0x403994 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 196176 + 195492 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46784 + 46788 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_US_LR_size.txt index 98edcf82bc4..f08e5929e81 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2f61c 0x8006000 -_cmd_handlers 0x2e0 0x803561c -_zw_protocol_cmd_handlers 0xe8 0x80358fc -_zw_protocol_cmd_handlers_lr 0x50 0x80359e4 -.ARM.exidx 0x8 0x8035a34 -.copy.table 0xc 0x8035a3c -.zero.table 0x0 0x8035a48 +.text 0x2f36c 0x8006000 +_cmd_handlers 0x2e0 0x803536c +_zw_protocol_cmd_handlers 0xe8 0x803564c +_zw_protocol_cmd_handlers_lr 0x50 0x8035734 +.ARM.exidx 0x8 0x8035784 +.copy.table 0xc 0x803578c +.zero.table 0x0 0x8035798 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4b8 0x20000a08 -.heap 0x5140 0x2000aec0 -.zwave_nvm 0x0 0x8035a48 -.nvm 0xa000 0x8035a48 +.data 0x40c 0x20000600 +.bss 0xa4b8 0x20000a0c +.heap 0x5138 0x2000aec8 +.zwave_nvm 0x0 0x8035798 +.nvm 0xa000 0x8035798 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28a66e 0x0 -.debug_abbrev 0x10ab2 0x0 -.debug_loc 0x3935f 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28ab62 0x0 +.debug_abbrev 0x10a9e 0x0 +.debug_loc 0x397a3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa348 0x0 -.debug_line 0x47b1a 0x0 -.debug_str 0x8bf26 0x0 -Total 0x4030e6 +.debug_ranges 0xa2f0 0x0 +.debug_line 0x47c7b 0x0 +.debug_str 0x8c029 0x0 +Total 0x40398a The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 196176 + 195492 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46784 + 46788 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_US_size.txt index edc4abe5279..b02469d49d1 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4204D_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2f61c 0x8006000 -_cmd_handlers 0x2e0 0x803561c -_zw_protocol_cmd_handlers 0xe8 0x80358fc -_zw_protocol_cmd_handlers_lr 0x50 0x80359e4 -.ARM.exidx 0x8 0x8035a34 -.copy.table 0xc 0x8035a3c -.zero.table 0x0 0x8035a48 +.text 0x2f36c 0x8006000 +_cmd_handlers 0x2e0 0x803536c +_zw_protocol_cmd_handlers 0xe8 0x803564c +_zw_protocol_cmd_handlers_lr 0x50 0x8035734 +.ARM.exidx 0x8 0x8035784 +.copy.table 0xc 0x803578c +.zero.table 0x0 0x8035798 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4b8 0x20000a08 -.heap 0x5140 0x2000aec0 -.zwave_nvm 0x0 0x8035a48 -.nvm 0xa000 0x8035a48 +.data 0x40c 0x20000600 +.bss 0xa4b8 0x20000a0c +.heap 0x5138 0x2000aec8 +.zwave_nvm 0x0 0x8035798 +.nvm 0xa000 0x8035798 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28a66e 0x0 -.debug_abbrev 0x10ab2 0x0 -.debug_loc 0x3935f 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28ab62 0x0 +.debug_abbrev 0x10a9e 0x0 +.debug_loc 0x397a3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa348 0x0 -.debug_line 0x47b1a 0x0 -.debug_str 0x8bf30 0x0 -Total 0x4030f0 +.debug_ranges 0xa2f0 0x0 +.debug_line 0x47c7b 0x0 +.debug_str 0x8c033 0x0 +Total 0x403994 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 196176 + 195492 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46784 + 46788 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_EU_size.txt index b8a5219e6f9..c20056eec38 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2fb94 0x8006000 -_cmd_handlers 0x2e0 0x8035b94 -_zw_protocol_cmd_handlers 0xe8 0x8035e74 -_zw_protocol_cmd_handlers_lr 0x50 0x8035f5c -.ARM.exidx 0x8 0x8035fac -.copy.table 0xc 0x8035fb4 -.zero.table 0x0 0x8035fc0 +.text 0x2f8dc 0x8006000 +_cmd_handlers 0x2e0 0x80358dc +_zw_protocol_cmd_handlers 0xe8 0x8035bbc +_zw_protocol_cmd_handlers_lr 0x50 0x8035ca4 +.ARM.exidx 0x8 0x8035cf4 +.copy.table 0xc 0x8035cfc +.zero.table 0x0 0x8035d08 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa344 0x20000a08 +.data 0x40c 0x20000600 +.bss 0xa344 0x20000a0c .heap 0x52b0 0x2000ad50 -.zwave_nvm 0x0 0x8035fc0 -.nvm 0xa000 0x8035fc0 +.zwave_nvm 0x0 0x8035d08 +.nvm 0xa000 0x8035d08 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28aa48 0x0 -.debug_abbrev 0x10b55 0x0 -.debug_loc 0x39341 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28af3c 0x0 +.debug_abbrev 0x10b41 0x0 +.debug_loc 0x39776 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xa350 0x0 -.debug_line 0x47823 0x0 -.debug_str 0x8c2f7 0x0 -Total 0x403be3 +.debug_ranges 0xa2f8 0x0 +.debug_line 0x47981 0x0 +.debug_str 0x8c3fa 0x0 +Total 0x404475 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 197576 + 196884 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46412 + 46416 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_US_LR_size.txt index d123122dc79..75a1fec85a0 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2fb94 0x8006000 -_cmd_handlers 0x2e0 0x8035b94 -_zw_protocol_cmd_handlers 0xe8 0x8035e74 -_zw_protocol_cmd_handlers_lr 0x50 0x8035f5c -.ARM.exidx 0x8 0x8035fac -.copy.table 0xc 0x8035fb4 -.zero.table 0x0 0x8035fc0 +.text 0x2f8dc 0x8006000 +_cmd_handlers 0x2e0 0x80358dc +_zw_protocol_cmd_handlers 0xe8 0x8035bbc +_zw_protocol_cmd_handlers_lr 0x50 0x8035ca4 +.ARM.exidx 0x8 0x8035cf4 +.copy.table 0xc 0x8035cfc +.zero.table 0x0 0x8035d08 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa344 0x20000a08 +.data 0x40c 0x20000600 +.bss 0xa344 0x20000a0c .heap 0x52b0 0x2000ad50 -.zwave_nvm 0x0 0x8035fc0 -.nvm 0xa000 0x8035fc0 +.zwave_nvm 0x0 0x8035d08 +.nvm 0xa000 0x8035d08 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28aa48 0x0 -.debug_abbrev 0x10b55 0x0 -.debug_loc 0x39341 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28af3c 0x0 +.debug_abbrev 0x10b41 0x0 +.debug_loc 0x39776 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xa350 0x0 -.debug_line 0x47823 0x0 -.debug_str 0x8c2ed 0x0 -Total 0x403bd9 +.debug_ranges 0xa2f8 0x0 +.debug_line 0x47981 0x0 +.debug_str 0x8c3f0 0x0 +Total 0x40446b The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 197576 + 196884 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46412 + 46416 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_US_size.txt index b8a5219e6f9..c20056eec38 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205A_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2fb94 0x8006000 -_cmd_handlers 0x2e0 0x8035b94 -_zw_protocol_cmd_handlers 0xe8 0x8035e74 -_zw_protocol_cmd_handlers_lr 0x50 0x8035f5c -.ARM.exidx 0x8 0x8035fac -.copy.table 0xc 0x8035fb4 -.zero.table 0x0 0x8035fc0 +.text 0x2f8dc 0x8006000 +_cmd_handlers 0x2e0 0x80358dc +_zw_protocol_cmd_handlers 0xe8 0x8035bbc +_zw_protocol_cmd_handlers_lr 0x50 0x8035ca4 +.ARM.exidx 0x8 0x8035cf4 +.copy.table 0xc 0x8035cfc +.zero.table 0x0 0x8035d08 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa344 0x20000a08 +.data 0x40c 0x20000600 +.bss 0xa344 0x20000a0c .heap 0x52b0 0x2000ad50 -.zwave_nvm 0x0 0x8035fc0 -.nvm 0xa000 0x8035fc0 +.zwave_nvm 0x0 0x8035d08 +.nvm 0xa000 0x8035d08 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28aa48 0x0 -.debug_abbrev 0x10b55 0x0 -.debug_loc 0x39341 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28af3c 0x0 +.debug_abbrev 0x10b41 0x0 +.debug_loc 0x39776 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xa350 0x0 -.debug_line 0x47823 0x0 -.debug_str 0x8c2f7 0x0 -Total 0x403be3 +.debug_ranges 0xa2f8 0x0 +.debug_line 0x47981 0x0 +.debug_str 0x8c3fa 0x0 +Total 0x404475 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 197576 + 196884 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46412 + 46416 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_EU_size.txt index a79be49e7cf..9b6416acf8a 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2fba4 0x8006000 -_cmd_handlers 0x2e0 0x8035ba4 -_zw_protocol_cmd_handlers 0xe8 0x8035e84 -_zw_protocol_cmd_handlers_lr 0x50 0x8035f6c -.ARM.exidx 0x8 0x8035fbc -.copy.table 0xc 0x8035fc4 -.zero.table 0x0 0x8035fd0 +.text 0x2f8ec 0x8006000 +_cmd_handlers 0x2e0 0x80358ec +_zw_protocol_cmd_handlers 0xe8 0x8035bcc +_zw_protocol_cmd_handlers_lr 0x50 0x8035cb4 +.ARM.exidx 0x8 0x8035d04 +.copy.table 0xc 0x8035d0c +.zero.table 0x0 0x8035d18 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4d4 0x20000a08 +.data 0x40c 0x20000600 +.bss 0xa4d4 0x20000a0c .heap 0x5120 0x2000aee0 -.zwave_nvm 0x0 0x8035fd0 -.nvm 0xa000 0x8035fd0 +.zwave_nvm 0x0 0x8035d18 +.nvm 0xa000 0x8035d18 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28af02 0x0 -.debug_abbrev 0x10b64 0x0 -.debug_loc 0x3934f 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28b3f6 0x0 +.debug_abbrev 0x10b50 0x0 +.debug_loc 0x39784 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xa310 0x0 -.debug_line 0x4785d 0x0 -.debug_str 0x8c433 0x0 -Total 0x404200 +.debug_ranges 0xa2b8 0x0 +.debug_line 0x479be 0x0 +.debug_str 0x8c536 0x0 +Total 0x404a95 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 197592 + 196900 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46812 + 46816 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_US_LR_size.txt index e25c8623d92..f201cb9ad7c 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2fba4 0x8006000 -_cmd_handlers 0x2e0 0x8035ba4 -_zw_protocol_cmd_handlers 0xe8 0x8035e84 -_zw_protocol_cmd_handlers_lr 0x50 0x8035f6c -.ARM.exidx 0x8 0x8035fbc -.copy.table 0xc 0x8035fc4 -.zero.table 0x0 0x8035fd0 +.text 0x2f8ec 0x8006000 +_cmd_handlers 0x2e0 0x80358ec +_zw_protocol_cmd_handlers 0xe8 0x8035bcc +_zw_protocol_cmd_handlers_lr 0x50 0x8035cb4 +.ARM.exidx 0x8 0x8035d04 +.copy.table 0xc 0x8035d0c +.zero.table 0x0 0x8035d18 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4d4 0x20000a08 +.data 0x40c 0x20000600 +.bss 0xa4d4 0x20000a0c .heap 0x5120 0x2000aee0 -.zwave_nvm 0x0 0x8035fd0 -.nvm 0xa000 0x8035fd0 +.zwave_nvm 0x0 0x8035d18 +.nvm 0xa000 0x8035d18 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28af02 0x0 -.debug_abbrev 0x10b64 0x0 -.debug_loc 0x3934f 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28b3f6 0x0 +.debug_abbrev 0x10b50 0x0 +.debug_loc 0x39784 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xa310 0x0 -.debug_line 0x4785d 0x0 -.debug_str 0x8c429 0x0 -Total 0x4041f6 +.debug_ranges 0xa2b8 0x0 +.debug_line 0x479be 0x0 +.debug_str 0x8c52c 0x0 +Total 0x404a8b The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 197592 + 196900 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46812 + 46816 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_US_size.txt index a79be49e7cf..9b6416acf8a 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4205B_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2fba4 0x8006000 -_cmd_handlers 0x2e0 0x8035ba4 -_zw_protocol_cmd_handlers 0xe8 0x8035e84 -_zw_protocol_cmd_handlers_lr 0x50 0x8035f6c -.ARM.exidx 0x8 0x8035fbc -.copy.table 0xc 0x8035fc4 -.zero.table 0x0 0x8035fd0 +.text 0x2f8ec 0x8006000 +_cmd_handlers 0x2e0 0x80358ec +_zw_protocol_cmd_handlers 0xe8 0x8035bcc +_zw_protocol_cmd_handlers_lr 0x50 0x8035cb4 +.ARM.exidx 0x8 0x8035d04 +.copy.table 0xc 0x8035d0c +.zero.table 0x0 0x8035d18 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4d4 0x20000a08 +.data 0x40c 0x20000600 +.bss 0xa4d4 0x20000a0c .heap 0x5120 0x2000aee0 -.zwave_nvm 0x0 0x8035fd0 -.nvm 0xa000 0x8035fd0 +.zwave_nvm 0x0 0x8035d18 +.nvm 0xa000 0x8035d18 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28af02 0x0 -.debug_abbrev 0x10b64 0x0 -.debug_loc 0x3934f 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28b3f6 0x0 +.debug_abbrev 0x10b50 0x0 +.debug_loc 0x39784 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xa310 0x0 -.debug_line 0x4785d 0x0 -.debug_str 0x8c433 0x0 -Total 0x404200 +.debug_ranges 0xa2b8 0x0 +.debug_line 0x479be 0x0 +.debug_str 0x8c536 0x0 +Total 0x404a95 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 197592 + 196900 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46812 + 46816 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_EU_size.txt index c6bc4bc4b76..5dfb8263853 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_EU_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2b444 0x0 -_cmd_handlers 0x2e0 0x2b444 -_zw_protocol_cmd_handlers 0xe8 0x2b724 -_zw_protocol_cmd_handlers_lr 0x50 0x2b80c -.ARM.exidx 0x8 0x2b85c -.copy.table 0xc 0x2b864 -.zero.table 0x0 0x2b870 +.text 0x2b4ec 0x0 +_cmd_handlers 0x2e0 0x2b4ec +_zw_protocol_cmd_handlers 0xe8 0x2b7cc +_zw_protocol_cmd_handlers_lr 0x50 0x2b8b4 +.ARM.exidx 0x8 0x2b904 +.copy.table 0xc 0x2b90c +.zero.table 0x0 0x2b918 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7494 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7490 0x200009a0 .heap 0x1d0 0x20007e30 -.zwave_nvm 0x3000 0x2b870 -.nvm 0x9000 0x2e870 +.zwave_nvm 0x3000 0x2b918 +.nvm 0x9000 0x2e918 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70c8 0x0 -.debug_info 0x24fb58 0x0 +.debug_frame 0x70d8 0x0 +.debug_info 0x24ff42 0x0 .debug_abbrev 0xee4b 0x0 -.debug_loc 0x37c94 0x0 +.debug_loc 0x38043 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x9828 0x0 -.debug_line 0x42bcb 0x0 -.debug_str 0x815a4 0x0 -Total 0x3aaa0d +.debug_ranges 0x9848 0x0 +.debug_line 0x42d4b 0x0 +.debug_str 0x8168b 0x0 +Total 0x3ab4e5 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179212 + 179384 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_US_LR_size.txt index b2a4e7274a8..60f943b7422 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_US_LR_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2b444 0x0 -_cmd_handlers 0x2e0 0x2b444 -_zw_protocol_cmd_handlers 0xe8 0x2b724 -_zw_protocol_cmd_handlers_lr 0x50 0x2b80c -.ARM.exidx 0x8 0x2b85c -.copy.table 0xc 0x2b864 -.zero.table 0x0 0x2b870 +.text 0x2b4ec 0x0 +_cmd_handlers 0x2e0 0x2b4ec +_zw_protocol_cmd_handlers 0xe8 0x2b7cc +_zw_protocol_cmd_handlers_lr 0x50 0x2b8b4 +.ARM.exidx 0x8 0x2b904 +.copy.table 0xc 0x2b90c +.zero.table 0x0 0x2b918 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7494 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7490 0x200009a0 .heap 0x1d0 0x20007e30 -.zwave_nvm 0x3000 0x2b870 -.nvm 0x9000 0x2e870 +.zwave_nvm 0x3000 0x2b918 +.nvm 0x9000 0x2e918 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70c8 0x0 -.debug_info 0x24fb58 0x0 +.debug_frame 0x70d8 0x0 +.debug_info 0x24ff42 0x0 .debug_abbrev 0xee4b 0x0 -.debug_loc 0x37c94 0x0 +.debug_loc 0x38043 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x9828 0x0 -.debug_line 0x42bcb 0x0 -.debug_str 0x8159a 0x0 -Total 0x3aaa03 +.debug_ranges 0x9848 0x0 +.debug_line 0x42d4b 0x0 +.debug_str 0x81681 0x0 +Total 0x3ab4db The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179212 + 179384 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_US_size.txt index c6bc4bc4b76..5dfb8263853 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4206A_REGION_US_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2b444 0x0 -_cmd_handlers 0x2e0 0x2b444 -_zw_protocol_cmd_handlers 0xe8 0x2b724 -_zw_protocol_cmd_handlers_lr 0x50 0x2b80c -.ARM.exidx 0x8 0x2b85c -.copy.table 0xc 0x2b864 -.zero.table 0x0 0x2b870 +.text 0x2b4ec 0x0 +_cmd_handlers 0x2e0 0x2b4ec +_zw_protocol_cmd_handlers 0xe8 0x2b7cc +_zw_protocol_cmd_handlers_lr 0x50 0x2b8b4 +.ARM.exidx 0x8 0x2b904 +.copy.table 0xc 0x2b90c +.zero.table 0x0 0x2b918 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7494 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7490 0x200009a0 .heap 0x1d0 0x20007e30 -.zwave_nvm 0x3000 0x2b870 -.nvm 0x9000 0x2e870 +.zwave_nvm 0x3000 0x2b918 +.nvm 0x9000 0x2e918 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70c8 0x0 -.debug_info 0x24fb58 0x0 +.debug_frame 0x70d8 0x0 +.debug_info 0x24ff42 0x0 .debug_abbrev 0xee4b 0x0 -.debug_loc 0x37c94 0x0 +.debug_loc 0x38043 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x9828 0x0 -.debug_line 0x42bcb 0x0 -.debug_str 0x815a4 0x0 -Total 0x3aaa0d +.debug_ranges 0x9848 0x0 +.debug_line 0x42d4b 0x0 +.debug_str 0x8168b 0x0 +Total 0x3ab4e5 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179212 + 179384 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_EU_size.txt index 89596ffc589..92635f0e4aa 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_EU_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2bcfc 0x0 -_cmd_handlers 0x2e0 0x2bcfc -_zw_protocol_cmd_handlers 0xe8 0x2bfdc -_zw_protocol_cmd_handlers_lr 0x50 0x2c0c4 -.ARM.exidx 0x8 0x2c114 -.copy.table 0xc 0x2c11c -.zero.table 0x0 0x2c128 +.text 0x2bd98 0x0 +_cmd_handlers 0x2e0 0x2bd98 +_zw_protocol_cmd_handlers 0xe8 0x2c078 +_zw_protocol_cmd_handlers_lr 0x50 0x2c160 +.ARM.exidx 0x8 0x2c1b0 +.copy.table 0xc 0x2c1b8 +.zero.table 0x0 0x2c1c4 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7a38 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7a34 0x200009a0 .heap 0x7c28 0x200083d8 -.zwave_nvm 0x3000 0x2c128 -.nvm 0x9000 0x2f128 +.zwave_nvm 0x3000 0x2c1c4 +.nvm 0x9000 0x2f1c4 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70dc 0x0 -.debug_info 0x2518a5 0x0 +.debug_frame 0x70e8 0x0 +.debug_info 0x251c73 0x0 .debug_abbrev 0xef4f 0x0 -.debug_loc 0x37c63 0x0 +.debug_loc 0x37fd8 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9858 0x0 -.debug_line 0x42b4e 0x0 -.debug_str 0x82230 0x0 -Total 0x3b5d64 +.debug_ranges 0x9880 0x0 +.debug_line 0x42cc6 0x0 +.debug_str 0x82317 0x0 +Total 0x3b67d6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 181444 + 181604 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_US_LR_size.txt index bb21de02684..62057f16119 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_US_LR_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2bcfc 0x0 -_cmd_handlers 0x2e0 0x2bcfc -_zw_protocol_cmd_handlers 0xe8 0x2bfdc -_zw_protocol_cmd_handlers_lr 0x50 0x2c0c4 -.ARM.exidx 0x8 0x2c114 -.copy.table 0xc 0x2c11c -.zero.table 0x0 0x2c128 +.text 0x2bd98 0x0 +_cmd_handlers 0x2e0 0x2bd98 +_zw_protocol_cmd_handlers 0xe8 0x2c078 +_zw_protocol_cmd_handlers_lr 0x50 0x2c160 +.ARM.exidx 0x8 0x2c1b0 +.copy.table 0xc 0x2c1b8 +.zero.table 0x0 0x2c1c4 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7a38 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7a34 0x200009a0 .heap 0x7c28 0x200083d8 -.zwave_nvm 0x3000 0x2c128 -.nvm 0x9000 0x2f128 +.zwave_nvm 0x3000 0x2c1c4 +.nvm 0x9000 0x2f1c4 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70dc 0x0 -.debug_info 0x2518a5 0x0 +.debug_frame 0x70e8 0x0 +.debug_info 0x251c73 0x0 .debug_abbrev 0xef4f 0x0 -.debug_loc 0x37c63 0x0 +.debug_loc 0x37fd8 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9858 0x0 -.debug_line 0x42b4e 0x0 -.debug_str 0x82226 0x0 -Total 0x3b5d5a +.debug_ranges 0x9880 0x0 +.debug_line 0x42cc6 0x0 +.debug_str 0x8230d 0x0 +Total 0x3b67cc The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 181444 + 181604 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_US_size.txt index 89596ffc589..92635f0e4aa 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4207A_REGION_US_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2bcfc 0x0 -_cmd_handlers 0x2e0 0x2bcfc -_zw_protocol_cmd_handlers 0xe8 0x2bfdc -_zw_protocol_cmd_handlers_lr 0x50 0x2c0c4 -.ARM.exidx 0x8 0x2c114 -.copy.table 0xc 0x2c11c -.zero.table 0x0 0x2c128 +.text 0x2bd98 0x0 +_cmd_handlers 0x2e0 0x2bd98 +_zw_protocol_cmd_handlers 0xe8 0x2c078 +_zw_protocol_cmd_handlers_lr 0x50 0x2c160 +.ARM.exidx 0x8 0x2c1b0 +.copy.table 0xc 0x2c1b8 +.zero.table 0x0 0x2c1c4 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7a38 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7a34 0x200009a0 .heap 0x7c28 0x200083d8 -.zwave_nvm 0x3000 0x2c128 -.nvm 0x9000 0x2f128 +.zwave_nvm 0x3000 0x2c1c4 +.nvm 0x9000 0x2f1c4 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70dc 0x0 -.debug_info 0x2518a5 0x0 +.debug_frame 0x70e8 0x0 +.debug_info 0x251c73 0x0 .debug_abbrev 0xef4f 0x0 -.debug_loc 0x37c63 0x0 +.debug_loc 0x37fd8 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9858 0x0 -.debug_line 0x42b4e 0x0 -.debug_str 0x82230 0x0 -Total 0x3b5d64 +.debug_ranges 0x9880 0x0 +.debug_line 0x42cc6 0x0 +.debug_str 0x82317 0x0 +Total 0x3b67d6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 181444 + 181604 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_EU_size.txt index c6bc4bc4b76..5dfb8263853 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_EU_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2b444 0x0 -_cmd_handlers 0x2e0 0x2b444 -_zw_protocol_cmd_handlers 0xe8 0x2b724 -_zw_protocol_cmd_handlers_lr 0x50 0x2b80c -.ARM.exidx 0x8 0x2b85c -.copy.table 0xc 0x2b864 -.zero.table 0x0 0x2b870 +.text 0x2b4ec 0x0 +_cmd_handlers 0x2e0 0x2b4ec +_zw_protocol_cmd_handlers 0xe8 0x2b7cc +_zw_protocol_cmd_handlers_lr 0x50 0x2b8b4 +.ARM.exidx 0x8 0x2b904 +.copy.table 0xc 0x2b90c +.zero.table 0x0 0x2b918 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7494 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7490 0x200009a0 .heap 0x1d0 0x20007e30 -.zwave_nvm 0x3000 0x2b870 -.nvm 0x9000 0x2e870 +.zwave_nvm 0x3000 0x2b918 +.nvm 0x9000 0x2e918 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70c8 0x0 -.debug_info 0x24fb58 0x0 +.debug_frame 0x70d8 0x0 +.debug_info 0x24ff42 0x0 .debug_abbrev 0xee4b 0x0 -.debug_loc 0x37c94 0x0 +.debug_loc 0x38043 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x9828 0x0 -.debug_line 0x42bcb 0x0 -.debug_str 0x815a4 0x0 -Total 0x3aaa0d +.debug_ranges 0x9848 0x0 +.debug_line 0x42d4b 0x0 +.debug_str 0x8168b 0x0 +Total 0x3ab4e5 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179212 + 179384 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_US_LR_size.txt index b2a4e7274a8..60f943b7422 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_US_LR_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2b444 0x0 -_cmd_handlers 0x2e0 0x2b444 -_zw_protocol_cmd_handlers 0xe8 0x2b724 -_zw_protocol_cmd_handlers_lr 0x50 0x2b80c -.ARM.exidx 0x8 0x2b85c -.copy.table 0xc 0x2b864 -.zero.table 0x0 0x2b870 +.text 0x2b4ec 0x0 +_cmd_handlers 0x2e0 0x2b4ec +_zw_protocol_cmd_handlers 0xe8 0x2b7cc +_zw_protocol_cmd_handlers_lr 0x50 0x2b8b4 +.ARM.exidx 0x8 0x2b904 +.copy.table 0xc 0x2b90c +.zero.table 0x0 0x2b918 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7494 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7490 0x200009a0 .heap 0x1d0 0x20007e30 -.zwave_nvm 0x3000 0x2b870 -.nvm 0x9000 0x2e870 +.zwave_nvm 0x3000 0x2b918 +.nvm 0x9000 0x2e918 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70c8 0x0 -.debug_info 0x24fb58 0x0 +.debug_frame 0x70d8 0x0 +.debug_info 0x24ff42 0x0 .debug_abbrev 0xee4b 0x0 -.debug_loc 0x37c94 0x0 +.debug_loc 0x38043 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x9828 0x0 -.debug_line 0x42bcb 0x0 -.debug_str 0x8159a 0x0 -Total 0x3aaa03 +.debug_ranges 0x9848 0x0 +.debug_line 0x42d4b 0x0 +.debug_str 0x81681 0x0 +Total 0x3ab4db The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179212 + 179384 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_US_size.txt index c6bc4bc4b76..5dfb8263853 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4208A_REGION_US_size.txt @@ -5,35 +5,35 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2b444 0x0 -_cmd_handlers 0x2e0 0x2b444 -_zw_protocol_cmd_handlers 0xe8 0x2b724 -_zw_protocol_cmd_handlers_lr 0x50 0x2b80c -.ARM.exidx 0x8 0x2b85c -.copy.table 0xc 0x2b864 -.zero.table 0x0 0x2b870 +.text 0x2b4ec 0x0 +_cmd_handlers 0x2e0 0x2b4ec +_zw_protocol_cmd_handlers 0xe8 0x2b7cc +_zw_protocol_cmd_handlers_lr 0x50 0x2b8b4 +.ARM.exidx 0x8 0x2b904 +.copy.table 0xc 0x2b90c +.zero.table 0x0 0x2b918 .stack 0x600 0x20000000 -.data 0x39c 0x20000600 -.bss 0x7494 0x2000099c +.data 0x3a0 0x20000600 +.bss 0x7490 0x200009a0 .heap 0x1d0 0x20007e30 -.zwave_nvm 0x3000 0x2b870 -.nvm 0x9000 0x2e870 +.zwave_nvm 0x3000 0x2b918 +.nvm 0x9000 0x2e918 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x70c8 0x0 -.debug_info 0x24fb58 0x0 +.debug_frame 0x70d8 0x0 +.debug_info 0x24ff42 0x0 .debug_abbrev 0xee4b 0x0 -.debug_loc 0x37c94 0x0 +.debug_loc 0x38043 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x9828 0x0 -.debug_line 0x42bcb 0x0 -.debug_str 0x815a4 0x0 -Total 0x3aaa0d +.debug_ranges 0x9848 0x0 +.debug_line 0x42d4b 0x0 +.debug_str 0x8168b 0x0 +Total 0x3ab4e5 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179212 + 179384 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4210A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4210A_REGION_US_LR_size.txt index 9df9644815c..5733bf97977 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4210A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4210A_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2f624 0x8006000 -_cmd_handlers 0x2e0 0x8035624 -_zw_protocol_cmd_handlers 0xe8 0x8035904 -_zw_protocol_cmd_handlers_lr 0x50 0x80359ec -.ARM.exidx 0x8 0x8035a3c -.copy.table 0xc 0x8035a44 -.zero.table 0x0 0x8035a50 +.text 0x2f36c 0x8006000 +_cmd_handlers 0x2e0 0x803536c +_zw_protocol_cmd_handlers 0xe8 0x803564c +_zw_protocol_cmd_handlers_lr 0x50 0x8035734 +.ARM.exidx 0x8 0x8035784 +.copy.table 0xc 0x803578c +.zero.table 0x0 0x8035798 .stack 0x600 0x20000000 -.data 0x408 0x20000600 -.bss 0xa4b8 0x20000a08 -.heap 0x5140 0x2000aec0 -.zwave_nvm 0x0 0x8035a50 -.nvm 0xa000 0x8035a50 +.data 0x40c 0x20000600 +.bss 0xa4b8 0x20000a0c +.heap 0x5138 0x2000aec8 +.zwave_nvm 0x0 0x8035798 +.nvm 0xa000 0x8035798 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x7360 0x0 -.debug_info 0x28a672 0x0 -.debug_abbrev 0x10ab2 0x0 -.debug_loc 0x3935f 0x0 +.debug_frame 0x7388 0x0 +.debug_info 0x28ab66 0x0 +.debug_abbrev 0x10a9e 0x0 +.debug_loc 0x397a3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa300 0x0 -.debug_line 0x47b07 0x0 -.debug_str 0x8bf26 0x0 -Total 0x403097 +.debug_ranges 0xa2a8 0x0 +.debug_line 0x47c66 0x0 +.debug_str 0x8c029 0x0 +Total 0x403931 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 196184 + 195492 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46784 + 46788 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_EU_size.txt index 234ece9f21b..dabcba46b04 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2f55c 0x8006000 -_cmd_handlers 0x2e0 0x803555c -_zw_protocol_cmd_handlers 0xe8 0x803583c -_zw_protocol_cmd_handlers_lr 0x50 0x8035924 -.ARM.exidx 0x8 0x8035974 -.copy.table 0xc 0x803597c -.zero.table 0x0 0x8035988 +.text 0x2f6c8 0x8006000 +_cmd_handlers 0x2e0 0x80356c8 +_zw_protocol_cmd_handlers 0xe8 0x80359a8 +_zw_protocol_cmd_handlers_lr 0x50 0x8035a90 +.ARM.exidx 0x8 0x8035ae0 +.copy.table 0xc 0x8035ae8 +.zero.table 0x0 0x8035af4 .stack 0x600 0x20000000 -.data 0x404 0x20000600 -.bss 0xa438 0x20000a04 +.data 0x408 0x20000600 +.bss 0xa438 0x20000a08 .heap 0x351c0 0x2000ae40 -.zwave_nvm 0x0 0x8035988 -.nvm 0xa000 0x8035988 +.zwave_nvm 0x0 0x8035af4 +.nvm 0xa000 0x8035af4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x731c 0x0 -.debug_info 0x2894ef 0x0 -.debug_abbrev 0x10973 0x0 -.debug_loc 0x391cc 0x0 +.debug_frame 0x7344 0x0 +.debug_info 0x2899e3 0x0 +.debug_abbrev 0x1095f 0x0 +.debug_loc 0x395f2 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa2f0 0x0 -.debug_line 0x475a4 0x0 -.debug_str 0x8c1a5 0x0 -Total 0x43183e +.debug_ranges 0xa298 0x0 +.debug_line 0x4770a 0x0 +.debug_str 0x8c2a8 0x0 +Total 0x4324ed The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 195980 + 196348 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46652 + 46656 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_US_LR_size.txt index a5f141ba3e9..89db0573254 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2f55c 0x8006000 -_cmd_handlers 0x2e0 0x803555c -_zw_protocol_cmd_handlers 0xe8 0x803583c -_zw_protocol_cmd_handlers_lr 0x50 0x8035924 -.ARM.exidx 0x8 0x8035974 -.copy.table 0xc 0x803597c -.zero.table 0x0 0x8035988 +.text 0x2f6c8 0x8006000 +_cmd_handlers 0x2e0 0x80356c8 +_zw_protocol_cmd_handlers 0xe8 0x80359a8 +_zw_protocol_cmd_handlers_lr 0x50 0x8035a90 +.ARM.exidx 0x8 0x8035ae0 +.copy.table 0xc 0x8035ae8 +.zero.table 0x0 0x8035af4 .stack 0x600 0x20000000 -.data 0x404 0x20000600 -.bss 0xa438 0x20000a04 +.data 0x408 0x20000600 +.bss 0xa438 0x20000a08 .heap 0x351c0 0x2000ae40 -.zwave_nvm 0x0 0x8035988 -.nvm 0xa000 0x8035988 +.zwave_nvm 0x0 0x8035af4 +.nvm 0xa000 0x8035af4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x731c 0x0 -.debug_info 0x2894ef 0x0 -.debug_abbrev 0x10973 0x0 -.debug_loc 0x391cc 0x0 +.debug_frame 0x7344 0x0 +.debug_info 0x2899e3 0x0 +.debug_abbrev 0x1095f 0x0 +.debug_loc 0x395f2 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa2f0 0x0 -.debug_line 0x475a4 0x0 -.debug_str 0x8c19b 0x0 -Total 0x431834 +.debug_ranges 0xa298 0x0 +.debug_line 0x4770a 0x0 +.debug_str 0x8c29e 0x0 +Total 0x4324e3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 195980 + 196348 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46652 + 46656 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_US_size.txt index 234ece9f21b..dabcba46b04 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4400B_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2f55c 0x8006000 -_cmd_handlers 0x2e0 0x803555c -_zw_protocol_cmd_handlers 0xe8 0x803583c -_zw_protocol_cmd_handlers_lr 0x50 0x8035924 -.ARM.exidx 0x8 0x8035974 -.copy.table 0xc 0x803597c -.zero.table 0x0 0x8035988 +.text 0x2f6c8 0x8006000 +_cmd_handlers 0x2e0 0x80356c8 +_zw_protocol_cmd_handlers 0xe8 0x80359a8 +_zw_protocol_cmd_handlers_lr 0x50 0x8035a90 +.ARM.exidx 0x8 0x8035ae0 +.copy.table 0xc 0x8035ae8 +.zero.table 0x0 0x8035af4 .stack 0x600 0x20000000 -.data 0x404 0x20000600 -.bss 0xa438 0x20000a04 +.data 0x408 0x20000600 +.bss 0xa438 0x20000a08 .heap 0x351c0 0x2000ae40 -.zwave_nvm 0x0 0x8035988 -.nvm 0xa000 0x8035988 +.zwave_nvm 0x0 0x8035af4 +.nvm 0xa000 0x8035af4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x731c 0x0 -.debug_info 0x2894ef 0x0 -.debug_abbrev 0x10973 0x0 -.debug_loc 0x391cc 0x0 +.debug_frame 0x7344 0x0 +.debug_info 0x2899e3 0x0 +.debug_abbrev 0x1095f 0x0 +.debug_loc 0x395f2 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa2f0 0x0 -.debug_line 0x475a4 0x0 -.debug_str 0x8c1a5 0x0 -Total 0x43183e +.debug_ranges 0xa298 0x0 +.debug_line 0x4770a 0x0 +.debug_str 0x8c2a8 0x0 +Total 0x4324ed The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 195980 + 196348 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46652 + 46656 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4401B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4401B_REGION_US_LR_size.txt index 94edffe42bb..f3c851714f9 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4401B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_controller_BRD4401B_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_controller.out : section size addr -.text 0x2f55c 0x8006000 -_cmd_handlers 0x2e0 0x803555c -_zw_protocol_cmd_handlers 0xe8 0x803583c -_zw_protocol_cmd_handlers_lr 0x50 0x8035924 -.ARM.exidx 0x8 0x8035974 -.copy.table 0xc 0x803597c -.zero.table 0x0 0x8035988 +.text 0x2f6c8 0x8006000 +_cmd_handlers 0x2e0 0x80356c8 +_zw_protocol_cmd_handlers 0xe8 0x80359a8 +_zw_protocol_cmd_handlers_lr 0x50 0x8035a90 +.ARM.exidx 0x8 0x8035ae0 +.copy.table 0xc 0x8035ae8 +.zero.table 0x0 0x8035af4 .stack 0x600 0x20000000 -.data 0x404 0x20000600 -.bss 0xa438 0x20000a04 +.data 0x408 0x20000600 +.bss 0xa438 0x20000a08 .heap 0x351c0 0x2000ae40 -.zwave_nvm 0x0 0x8035988 -.nvm 0xa000 0x8035988 +.zwave_nvm 0x0 0x8035af4 +.nvm 0xa000 0x8035af4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x731c 0x0 -.debug_info 0x2894f3 0x0 -.debug_abbrev 0x10973 0x0 -.debug_loc 0x391cc 0x0 +.debug_frame 0x7344 0x0 +.debug_info 0x2899e7 0x0 +.debug_abbrev 0x1095f 0x0 +.debug_loc 0x395f2 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa2b0 0x0 -.debug_line 0x47592 0x0 -.debug_str 0x8c19b 0x0 -Total 0x4317e6 +.debug_ranges 0xa258 0x0 +.debug_line 0x476f8 0x0 +.debug_str 0x8c29e 0x0 +Total 0x432495 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 195980 + 196348 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46652 + 46656 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_EU_size.txt index f48a08de09a..7931f93a164 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x290fc 0x0 -_cmd_handlers 0x1b8 0x290fc -_zw_protocol_cmd_handlers 0x70 0x292b4 -_zw_protocol_cmd_handlers_lr 0x30 0x29324 -.ARM.exidx 0x8 0x29354 -.copy.table 0xc 0x2935c -.zero.table 0x0 0x29368 +.text 0x29250 0x0 +_cmd_handlers 0x1b8 0x29250 +_zw_protocol_cmd_handlers 0x70 0x29408 +_zw_protocol_cmd_handlers_lr 0x30 0x29478 +.ARM.exidx 0x8 0x294a8 +.copy.table 0xc 0x294b0 +.zero.table 0x0 0x294bc .stack 0x1000 0x20000000 -.data 0x3ac 0x20001000 -.bss 0xa72c 0x200013ac -.heap 0x4528 0x2000bad8 -.zwave_nvm 0x3000 0x29368 -.nvm 0x9000 0x2c368 +.data 0x3b0 0x20001000 +.bss 0xa72c 0x200013b0 +.heap 0x4520 0x2000bae0 +.zwave_nvm 0x3000 0x294bc +.nvm 0x9000 0x2c4bc .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x62d0 0x0 -.debug_info 0x39d130 0x0 -.debug_abbrev 0x1102d 0x0 -.debug_loc 0x36510 0x0 +.debug_frame 0x6334 0x0 +.debug_info 0x39d481 0x0 +.debug_abbrev 0x1100a 0x0 +.debug_loc 0x36708 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x8b28 0x0 -.debug_line 0x42001 0x0 -.debug_str 0x83891 0x0 -Total 0x4fe196 +.debug_ranges 0x8ae8 0x0 +.debug_line 0x4214a 0x0 +.debug_str 0x839dd 0x0 +Total 0x4feac5 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 169748 + 170092 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49880 + 49884 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_US_LR_size.txt index 4a70f9a7391..85e3c3682e0 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x290fc 0x0 -_cmd_handlers 0x1b8 0x290fc -_zw_protocol_cmd_handlers 0x70 0x292b4 -_zw_protocol_cmd_handlers_lr 0x30 0x29324 -.ARM.exidx 0x8 0x29354 -.copy.table 0xc 0x2935c -.zero.table 0x0 0x29368 +.text 0x29250 0x0 +_cmd_handlers 0x1b8 0x29250 +_zw_protocol_cmd_handlers 0x70 0x29408 +_zw_protocol_cmd_handlers_lr 0x30 0x29478 +.ARM.exidx 0x8 0x294a8 +.copy.table 0xc 0x294b0 +.zero.table 0x0 0x294bc .stack 0x1000 0x20000000 -.data 0x3ac 0x20001000 -.bss 0xa72c 0x200013ac -.heap 0x4528 0x2000bad8 -.zwave_nvm 0x3000 0x29368 -.nvm 0x9000 0x2c368 +.data 0x3b0 0x20001000 +.bss 0xa72c 0x200013b0 +.heap 0x4520 0x2000bae0 +.zwave_nvm 0x3000 0x294bc +.nvm 0x9000 0x2c4bc .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x62d0 0x0 -.debug_info 0x39d130 0x0 -.debug_abbrev 0x1102d 0x0 -.debug_loc 0x36510 0x0 +.debug_frame 0x6334 0x0 +.debug_info 0x39d481 0x0 +.debug_abbrev 0x1100a 0x0 +.debug_loc 0x36708 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x8b28 0x0 -.debug_line 0x42001 0x0 -.debug_str 0x83887 0x0 -Total 0x4fe18c +.debug_ranges 0x8ae8 0x0 +.debug_line 0x4214a 0x0 +.debug_str 0x839d3 0x0 +Total 0x4feabb The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 169748 + 170092 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49880 + 49884 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_US_size.txt index f48a08de09a..7931f93a164 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4202A_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x290fc 0x0 -_cmd_handlers 0x1b8 0x290fc -_zw_protocol_cmd_handlers 0x70 0x292b4 -_zw_protocol_cmd_handlers_lr 0x30 0x29324 -.ARM.exidx 0x8 0x29354 -.copy.table 0xc 0x2935c -.zero.table 0x0 0x29368 +.text 0x29250 0x0 +_cmd_handlers 0x1b8 0x29250 +_zw_protocol_cmd_handlers 0x70 0x29408 +_zw_protocol_cmd_handlers_lr 0x30 0x29478 +.ARM.exidx 0x8 0x294a8 +.copy.table 0xc 0x294b0 +.zero.table 0x0 0x294bc .stack 0x1000 0x20000000 -.data 0x3ac 0x20001000 -.bss 0xa72c 0x200013ac -.heap 0x4528 0x2000bad8 -.zwave_nvm 0x3000 0x29368 -.nvm 0x9000 0x2c368 +.data 0x3b0 0x20001000 +.bss 0xa72c 0x200013b0 +.heap 0x4520 0x2000bae0 +.zwave_nvm 0x3000 0x294bc +.nvm 0x9000 0x2c4bc .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x62d0 0x0 -.debug_info 0x39d130 0x0 -.debug_abbrev 0x1102d 0x0 -.debug_loc 0x36510 0x0 +.debug_frame 0x6334 0x0 +.debug_info 0x39d481 0x0 +.debug_abbrev 0x1100a 0x0 +.debug_loc 0x36708 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x8b28 0x0 -.debug_line 0x42001 0x0 -.debug_str 0x83891 0x0 -Total 0x4fe196 +.debug_ranges 0x8ae8 0x0 +.debug_line 0x4214a 0x0 +.debug_str 0x839dd 0x0 +Total 0x4feac5 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 169748 + 170092 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49880 + 49884 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_EU_size.txt index 037eb4cd337..7b51fe72103 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2eae4 0x8006000 -_cmd_handlers 0x1b8 0x8034ae4 -_zw_protocol_cmd_handlers 0x70 0x8034c9c -_zw_protocol_cmd_handlers_lr 0x30 0x8034d0c -.ARM.exidx 0x8 0x8034d3c -.copy.table 0xc 0x8034d44 -.zero.table 0x0 0x8034d50 +.text 0x2e8ec 0x8006000 +_cmd_handlers 0x1b8 0x80348ec +_zw_protocol_cmd_handlers 0x70 0x8034aa4 +_zw_protocol_cmd_handlers_lr 0x30 0x8034b14 +.ARM.exidx 0x8 0x8034b44 +.copy.table 0xc 0x8034b4c +.zero.table 0x0 0x8034b58 .stack 0x1000 0x20000000 -.data 0x494 0x20001000 -.bss 0xb178 0x20001494 -.heap 0x39f0 0x2000c610 -.zwave_nvm 0x0 0x8034d50 -.nvm 0x8000 0x8034d50 +.data 0x498 0x20001000 +.bss 0xb170 0x20001498 +.heap 0x39f8 0x2000c608 +.zwave_nvm 0x0 0x8034b58 +.nvm 0x8000 0x8034b58 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6970 0x0 -.debug_info 0x3e28da 0x0 -.debug_abbrev 0x13dcf 0x0 -.debug_loc 0x41334 0x0 +.debug_frame 0x69f0 0x0 +.debug_info 0x3e2d43 0x0 +.debug_abbrev 0x13dd3 0x0 +.debug_loc 0x41737 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xa4f0 0x0 -.debug_line 0x4b9b6 0x0 -.debug_str 0x8eb56 0x0 -Total 0x569bcc +.debug_line 0x4bb11 0x0 +.debug_str 0x8ec80 0x0 +Total 0x56a54d The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192996 + 192496 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52748 + 52744 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_US_LR_size.txt index 9f576a005ca..25a92d5724e 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2eae4 0x8006000 -_cmd_handlers 0x1b8 0x8034ae4 -_zw_protocol_cmd_handlers 0x70 0x8034c9c -_zw_protocol_cmd_handlers_lr 0x30 0x8034d0c -.ARM.exidx 0x8 0x8034d3c -.copy.table 0xc 0x8034d44 -.zero.table 0x0 0x8034d50 +.text 0x2e8ec 0x8006000 +_cmd_handlers 0x1b8 0x80348ec +_zw_protocol_cmd_handlers 0x70 0x8034aa4 +_zw_protocol_cmd_handlers_lr 0x30 0x8034b14 +.ARM.exidx 0x8 0x8034b44 +.copy.table 0xc 0x8034b4c +.zero.table 0x0 0x8034b58 .stack 0x1000 0x20000000 -.data 0x494 0x20001000 -.bss 0xb178 0x20001494 -.heap 0x39f0 0x2000c610 -.zwave_nvm 0x0 0x8034d50 -.nvm 0x8000 0x8034d50 +.data 0x498 0x20001000 +.bss 0xb170 0x20001498 +.heap 0x39f8 0x2000c608 +.zwave_nvm 0x0 0x8034b58 +.nvm 0x8000 0x8034b58 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6970 0x0 -.debug_info 0x3e28da 0x0 -.debug_abbrev 0x13dcf 0x0 -.debug_loc 0x41334 0x0 +.debug_frame 0x69f0 0x0 +.debug_info 0x3e2d43 0x0 +.debug_abbrev 0x13dd3 0x0 +.debug_loc 0x41737 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xa4f0 0x0 -.debug_line 0x4b9b6 0x0 -.debug_str 0x8eb4c 0x0 -Total 0x569bc2 +.debug_line 0x4bb11 0x0 +.debug_str 0x8ec76 0x0 +Total 0x56a543 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192996 + 192496 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52748 + 52744 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_US_size.txt index 037eb4cd337..7b51fe72103 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204C_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2eae4 0x8006000 -_cmd_handlers 0x1b8 0x8034ae4 -_zw_protocol_cmd_handlers 0x70 0x8034c9c -_zw_protocol_cmd_handlers_lr 0x30 0x8034d0c -.ARM.exidx 0x8 0x8034d3c -.copy.table 0xc 0x8034d44 -.zero.table 0x0 0x8034d50 +.text 0x2e8ec 0x8006000 +_cmd_handlers 0x1b8 0x80348ec +_zw_protocol_cmd_handlers 0x70 0x8034aa4 +_zw_protocol_cmd_handlers_lr 0x30 0x8034b14 +.ARM.exidx 0x8 0x8034b44 +.copy.table 0xc 0x8034b4c +.zero.table 0x0 0x8034b58 .stack 0x1000 0x20000000 -.data 0x494 0x20001000 -.bss 0xb178 0x20001494 -.heap 0x39f0 0x2000c610 -.zwave_nvm 0x0 0x8034d50 -.nvm 0x8000 0x8034d50 +.data 0x498 0x20001000 +.bss 0xb170 0x20001498 +.heap 0x39f8 0x2000c608 +.zwave_nvm 0x0 0x8034b58 +.nvm 0x8000 0x8034b58 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6970 0x0 -.debug_info 0x3e28da 0x0 -.debug_abbrev 0x13dcf 0x0 -.debug_loc 0x41334 0x0 +.debug_frame 0x69f0 0x0 +.debug_info 0x3e2d43 0x0 +.debug_abbrev 0x13dd3 0x0 +.debug_loc 0x41737 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xa4f0 0x0 -.debug_line 0x4b9b6 0x0 -.debug_str 0x8eb56 0x0 -Total 0x569bcc +.debug_line 0x4bb11 0x0 +.debug_str 0x8ec80 0x0 +Total 0x56a54d The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192996 + 192496 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52748 + 52744 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_EU_size.txt index 4edaf8021f0..a80773ebb50 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2eb14 0x8006000 -_cmd_handlers 0x1b8 0x8034b14 -_zw_protocol_cmd_handlers 0x70 0x8034ccc -_zw_protocol_cmd_handlers_lr 0x30 0x8034d3c -.ARM.exidx 0x8 0x8034d6c -.copy.table 0xc 0x8034d74 -.zero.table 0x0 0x8034d80 +.text 0x2e914 0x8006000 +_cmd_handlers 0x1b8 0x8034914 +_zw_protocol_cmd_handlers 0x70 0x8034acc +_zw_protocol_cmd_handlers_lr 0x30 0x8034b3c +.ARM.exidx 0x8 0x8034b6c +.copy.table 0xc 0x8034b74 +.zero.table 0x0 0x8034b80 .stack 0x1000 0x20000000 -.data 0x494 0x20001000 -.bss 0xb178 0x20001494 -.heap 0x39f0 0x2000c610 -.zwave_nvm 0x0 0x8034d80 -.nvm 0x8000 0x8034d80 +.data 0x498 0x20001000 +.bss 0xb170 0x20001498 +.heap 0x39f8 0x2000c608 +.zwave_nvm 0x0 0x8034b80 +.nvm 0x8000 0x8034b80 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6970 0x0 -.debug_info 0x3e2b29 0x0 -.debug_abbrev 0x13e73 0x0 -.debug_loc 0x41399 0x0 +.debug_frame 0x69f0 0x0 +.debug_info 0x3e2f8b 0x0 +.debug_abbrev 0x13e77 0x0 +.debug_loc 0x41770 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xa518 0x0 -.debug_line 0x4bba5 0x0 -.debug_str 0x8ed29 0x0 -Total 0x56a33e +.debug_line 0x4bd27 0x0 +.debug_str 0x8ee53 0x0 +Total 0x56acab The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 193044 + 192536 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52748 + 52744 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_US_LR_size.txt index 6358a446ece..d27570bb03f 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2eb14 0x8006000 -_cmd_handlers 0x1b8 0x8034b14 -_zw_protocol_cmd_handlers 0x70 0x8034ccc -_zw_protocol_cmd_handlers_lr 0x30 0x8034d3c -.ARM.exidx 0x8 0x8034d6c -.copy.table 0xc 0x8034d74 -.zero.table 0x0 0x8034d80 +.text 0x2e914 0x8006000 +_cmd_handlers 0x1b8 0x8034914 +_zw_protocol_cmd_handlers 0x70 0x8034acc +_zw_protocol_cmd_handlers_lr 0x30 0x8034b3c +.ARM.exidx 0x8 0x8034b6c +.copy.table 0xc 0x8034b74 +.zero.table 0x0 0x8034b80 .stack 0x1000 0x20000000 -.data 0x494 0x20001000 -.bss 0xb178 0x20001494 -.heap 0x39f0 0x2000c610 -.zwave_nvm 0x0 0x8034d80 -.nvm 0x8000 0x8034d80 +.data 0x498 0x20001000 +.bss 0xb170 0x20001498 +.heap 0x39f8 0x2000c608 +.zwave_nvm 0x0 0x8034b80 +.nvm 0x8000 0x8034b80 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6970 0x0 -.debug_info 0x3e2b29 0x0 -.debug_abbrev 0x13e73 0x0 -.debug_loc 0x41399 0x0 +.debug_frame 0x69f0 0x0 +.debug_info 0x3e2f8b 0x0 +.debug_abbrev 0x13e77 0x0 +.debug_loc 0x41770 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xa518 0x0 -.debug_line 0x4bba5 0x0 -.debug_str 0x8ed1f 0x0 -Total 0x56a334 +.debug_line 0x4bd27 0x0 +.debug_str 0x8ee49 0x0 +Total 0x56aca1 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 193044 + 192536 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52748 + 52744 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_US_size.txt index 4edaf8021f0..a80773ebb50 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4204D_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2eb14 0x8006000 -_cmd_handlers 0x1b8 0x8034b14 -_zw_protocol_cmd_handlers 0x70 0x8034ccc -_zw_protocol_cmd_handlers_lr 0x30 0x8034d3c -.ARM.exidx 0x8 0x8034d6c -.copy.table 0xc 0x8034d74 -.zero.table 0x0 0x8034d80 +.text 0x2e914 0x8006000 +_cmd_handlers 0x1b8 0x8034914 +_zw_protocol_cmd_handlers 0x70 0x8034acc +_zw_protocol_cmd_handlers_lr 0x30 0x8034b3c +.ARM.exidx 0x8 0x8034b6c +.copy.table 0xc 0x8034b74 +.zero.table 0x0 0x8034b80 .stack 0x1000 0x20000000 -.data 0x494 0x20001000 -.bss 0xb178 0x20001494 -.heap 0x39f0 0x2000c610 -.zwave_nvm 0x0 0x8034d80 -.nvm 0x8000 0x8034d80 +.data 0x498 0x20001000 +.bss 0xb170 0x20001498 +.heap 0x39f8 0x2000c608 +.zwave_nvm 0x0 0x8034b80 +.nvm 0x8000 0x8034b80 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6970 0x0 -.debug_info 0x3e2b29 0x0 -.debug_abbrev 0x13e73 0x0 -.debug_loc 0x41399 0x0 +.debug_frame 0x69f0 0x0 +.debug_info 0x3e2f8b 0x0 +.debug_abbrev 0x13e77 0x0 +.debug_loc 0x41770 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xa518 0x0 -.debug_line 0x4bba5 0x0 -.debug_str 0x8ed29 0x0 -Total 0x56a33e +.debug_line 0x4bd27 0x0 +.debug_str 0x8ee53 0x0 +Total 0x56acab The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 193044 + 192536 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52748 + 52744 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_EU_size.txt index 811ca74eef7..44e0236ae02 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2e75c 0x8006000 -_cmd_handlers 0x1b8 0x803475c -_zw_protocol_cmd_handlers 0x70 0x8034914 -_zw_protocol_cmd_handlers_lr 0x30 0x8034984 -.ARM.exidx 0x8 0x80349b4 -.copy.table 0xc 0x80349bc -.zero.table 0x0 0x80349c8 +.text 0x2e5a4 0x8006000 +_cmd_handlers 0x1b8 0x80345a4 +_zw_protocol_cmd_handlers 0x70 0x803475c +_zw_protocol_cmd_handlers_lr 0x30 0x80347cc +.ARM.exidx 0x8 0x80347fc +.copy.table 0xc 0x8034804 +.zero.table 0x0 0x8034810 .stack 0x1000 0x20000000 -.data 0x498 0x20001000 -.bss 0xaffc 0x20001498 -.heap 0x3b68 0x2000c498 -.zwave_nvm 0x0 0x80349c8 -.nvm 0x8000 0x80349c8 +.data 0x49c 0x20001000 +.bss 0xb004 0x2000149c +.heap 0x3b60 0x2000c4a0 +.zwave_nvm 0x0 0x8034810 +.nvm 0x8000 0x8034810 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x67dc 0x0 -.debug_info 0x3e088d 0x0 -.debug_abbrev 0x139eb 0x0 -.debug_loc 0x410e3 0x0 +.debug_frame 0x685c 0x0 +.debug_info 0x3e0c9c 0x0 +.debug_abbrev 0x13a00 0x0 +.debug_loc 0x41474 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0xa168 0x0 -.debug_line 0x4a2bc 0x0 -.debug_str 0x8ebb4 0x0 -Total 0x565632 +.debug_ranges 0xa0e0 0x0 +.debug_line 0x4a477 0x0 +.debug_str 0x8ecde 0x0 +Total 0x565f10 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192096 + 191660 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52372 + 52384 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_US_LR_size.txt index 73ec22e4474..4ac582454f7 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2e75c 0x8006000 -_cmd_handlers 0x1b8 0x803475c -_zw_protocol_cmd_handlers 0x70 0x8034914 -_zw_protocol_cmd_handlers_lr 0x30 0x8034984 -.ARM.exidx 0x8 0x80349b4 -.copy.table 0xc 0x80349bc -.zero.table 0x0 0x80349c8 +.text 0x2e5a4 0x8006000 +_cmd_handlers 0x1b8 0x80345a4 +_zw_protocol_cmd_handlers 0x70 0x803475c +_zw_protocol_cmd_handlers_lr 0x30 0x80347cc +.ARM.exidx 0x8 0x80347fc +.copy.table 0xc 0x8034804 +.zero.table 0x0 0x8034810 .stack 0x1000 0x20000000 -.data 0x498 0x20001000 -.bss 0xaffc 0x20001498 -.heap 0x3b68 0x2000c498 -.zwave_nvm 0x0 0x80349c8 -.nvm 0x8000 0x80349c8 +.data 0x49c 0x20001000 +.bss 0xb004 0x2000149c +.heap 0x3b60 0x2000c4a0 +.zwave_nvm 0x0 0x8034810 +.nvm 0x8000 0x8034810 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x67dc 0x0 -.debug_info 0x3e088d 0x0 -.debug_abbrev 0x139eb 0x0 -.debug_loc 0x410e3 0x0 +.debug_frame 0x685c 0x0 +.debug_info 0x3e0c9c 0x0 +.debug_abbrev 0x13a00 0x0 +.debug_loc 0x41474 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0xa168 0x0 -.debug_line 0x4a2bc 0x0 -.debug_str 0x8ebaa 0x0 -Total 0x565628 +.debug_ranges 0xa0e0 0x0 +.debug_line 0x4a477 0x0 +.debug_str 0x8ecd4 0x0 +Total 0x565f06 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192096 + 191660 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52372 + 52384 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_US_size.txt index 811ca74eef7..44e0236ae02 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205A_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2e75c 0x8006000 -_cmd_handlers 0x1b8 0x803475c -_zw_protocol_cmd_handlers 0x70 0x8034914 -_zw_protocol_cmd_handlers_lr 0x30 0x8034984 -.ARM.exidx 0x8 0x80349b4 -.copy.table 0xc 0x80349bc -.zero.table 0x0 0x80349c8 +.text 0x2e5a4 0x8006000 +_cmd_handlers 0x1b8 0x80345a4 +_zw_protocol_cmd_handlers 0x70 0x803475c +_zw_protocol_cmd_handlers_lr 0x30 0x80347cc +.ARM.exidx 0x8 0x80347fc +.copy.table 0xc 0x8034804 +.zero.table 0x0 0x8034810 .stack 0x1000 0x20000000 -.data 0x498 0x20001000 -.bss 0xaffc 0x20001498 -.heap 0x3b68 0x2000c498 -.zwave_nvm 0x0 0x80349c8 -.nvm 0x8000 0x80349c8 +.data 0x49c 0x20001000 +.bss 0xb004 0x2000149c +.heap 0x3b60 0x2000c4a0 +.zwave_nvm 0x0 0x8034810 +.nvm 0x8000 0x8034810 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x67dc 0x0 -.debug_info 0x3e088d 0x0 -.debug_abbrev 0x139eb 0x0 -.debug_loc 0x410e3 0x0 +.debug_frame 0x685c 0x0 +.debug_info 0x3e0c9c 0x0 +.debug_abbrev 0x13a00 0x0 +.debug_loc 0x41474 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0xa168 0x0 -.debug_line 0x4a2bc 0x0 -.debug_str 0x8ebb4 0x0 -Total 0x565632 +.debug_ranges 0xa0e0 0x0 +.debug_line 0x4a477 0x0 +.debug_str 0x8ecde 0x0 +Total 0x565f10 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192096 + 191660 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52372 + 52384 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_EU_size.txt index 6e061bce712..62fd54e7eaf 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2f0a0 0x8006000 -_cmd_handlers 0x1b8 0x80350a0 -_zw_protocol_cmd_handlers 0x70 0x8035258 -_zw_protocol_cmd_handlers_lr 0x30 0x80352c8 -.ARM.exidx 0x8 0x80352f8 -.copy.table 0xc 0x8035300 -.zero.table 0x0 0x803530c +.text 0x2eeb0 0x8006000 +_cmd_handlers 0x1b8 0x8034eb0 +_zw_protocol_cmd_handlers 0x70 0x8035068 +_zw_protocol_cmd_handlers_lr 0x30 0x80350d8 +.ARM.exidx 0x8 0x8035108 +.copy.table 0xc 0x8035110 +.zero.table 0x0 0x803511c .stack 0x1000 0x20000000 -.data 0x494 0x20001000 -.bss 0xb194 0x20001494 +.data 0x498 0x20001000 +.bss 0xb18c 0x20001498 .heap 0x39d8 0x2000c628 -.zwave_nvm 0x0 0x803530c -.nvm 0x8000 0x803530c +.zwave_nvm 0x0 0x803511c +.nvm 0x8000 0x803511c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6970 0x0 -.debug_info 0x3e33c2 0x0 -.debug_abbrev 0x13f25 0x0 -.debug_loc 0x41392 0x0 +.debug_frame 0x69f0 0x0 +.debug_info 0x3e382b 0x0 +.debug_abbrev 0x13f29 0x0 +.debug_loc 0x41792 0x0 .debug_aranges 0x100 0x0 .debug_ranges 0xa4f0 0x0 -.debug_line 0x4b90e 0x0 -.debug_str 0x8f22c 0x0 -Total 0x56b49e +.debug_line 0x4ba69 0x0 +.debug_str 0x8f356 0x0 +Total 0x56be1c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 194464 + 193972 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52776 + 52772 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_US_LR_size.txt index d77e8e2939f..882eb29a800 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2f0a0 0x8006000 -_cmd_handlers 0x1b8 0x80350a0 -_zw_protocol_cmd_handlers 0x70 0x8035258 -_zw_protocol_cmd_handlers_lr 0x30 0x80352c8 -.ARM.exidx 0x8 0x80352f8 -.copy.table 0xc 0x8035300 -.zero.table 0x0 0x803530c +.text 0x2eeb0 0x8006000 +_cmd_handlers 0x1b8 0x8034eb0 +_zw_protocol_cmd_handlers 0x70 0x8035068 +_zw_protocol_cmd_handlers_lr 0x30 0x80350d8 +.ARM.exidx 0x8 0x8035108 +.copy.table 0xc 0x8035110 +.zero.table 0x0 0x803511c .stack 0x1000 0x20000000 -.data 0x494 0x20001000 -.bss 0xb194 0x20001494 +.data 0x498 0x20001000 +.bss 0xb18c 0x20001498 .heap 0x39d8 0x2000c628 -.zwave_nvm 0x0 0x803530c -.nvm 0x8000 0x803530c +.zwave_nvm 0x0 0x803511c +.nvm 0x8000 0x803511c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6970 0x0 -.debug_info 0x3e33c2 0x0 -.debug_abbrev 0x13f25 0x0 -.debug_loc 0x41392 0x0 +.debug_frame 0x69f0 0x0 +.debug_info 0x3e382b 0x0 +.debug_abbrev 0x13f29 0x0 +.debug_loc 0x41792 0x0 .debug_aranges 0x100 0x0 .debug_ranges 0xa4f0 0x0 -.debug_line 0x4b90e 0x0 -.debug_str 0x8f222 0x0 -Total 0x56b494 +.debug_line 0x4ba69 0x0 +.debug_str 0x8f34c 0x0 +Total 0x56be12 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 194464 + 193972 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52776 + 52772 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_US_size.txt index 6e061bce712..62fd54e7eaf 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4205B_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2f0a0 0x8006000 -_cmd_handlers 0x1b8 0x80350a0 -_zw_protocol_cmd_handlers 0x70 0x8035258 -_zw_protocol_cmd_handlers_lr 0x30 0x80352c8 -.ARM.exidx 0x8 0x80352f8 -.copy.table 0xc 0x8035300 -.zero.table 0x0 0x803530c +.text 0x2eeb0 0x8006000 +_cmd_handlers 0x1b8 0x8034eb0 +_zw_protocol_cmd_handlers 0x70 0x8035068 +_zw_protocol_cmd_handlers_lr 0x30 0x80350d8 +.ARM.exidx 0x8 0x8035108 +.copy.table 0xc 0x8035110 +.zero.table 0x0 0x803511c .stack 0x1000 0x20000000 -.data 0x494 0x20001000 -.bss 0xb194 0x20001494 +.data 0x498 0x20001000 +.bss 0xb18c 0x20001498 .heap 0x39d8 0x2000c628 -.zwave_nvm 0x0 0x803530c -.nvm 0x8000 0x803530c +.zwave_nvm 0x0 0x803511c +.nvm 0x8000 0x803511c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6970 0x0 -.debug_info 0x3e33c2 0x0 -.debug_abbrev 0x13f25 0x0 -.debug_loc 0x41392 0x0 +.debug_frame 0x69f0 0x0 +.debug_info 0x3e382b 0x0 +.debug_abbrev 0x13f29 0x0 +.debug_loc 0x41792 0x0 .debug_aranges 0x100 0x0 .debug_ranges 0xa4f0 0x0 -.debug_line 0x4b90e 0x0 -.debug_str 0x8f22c 0x0 -Total 0x56b49e +.debug_line 0x4ba69 0x0 +.debug_str 0x8f356 0x0 +Total 0x56be1c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 194464 + 193972 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52776 + 52772 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_EU_size.txt index f48a08de09a..7931f93a164 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x290fc 0x0 -_cmd_handlers 0x1b8 0x290fc -_zw_protocol_cmd_handlers 0x70 0x292b4 -_zw_protocol_cmd_handlers_lr 0x30 0x29324 -.ARM.exidx 0x8 0x29354 -.copy.table 0xc 0x2935c -.zero.table 0x0 0x29368 +.text 0x29250 0x0 +_cmd_handlers 0x1b8 0x29250 +_zw_protocol_cmd_handlers 0x70 0x29408 +_zw_protocol_cmd_handlers_lr 0x30 0x29478 +.ARM.exidx 0x8 0x294a8 +.copy.table 0xc 0x294b0 +.zero.table 0x0 0x294bc .stack 0x1000 0x20000000 -.data 0x3ac 0x20001000 -.bss 0xa72c 0x200013ac -.heap 0x4528 0x2000bad8 -.zwave_nvm 0x3000 0x29368 -.nvm 0x9000 0x2c368 +.data 0x3b0 0x20001000 +.bss 0xa72c 0x200013b0 +.heap 0x4520 0x2000bae0 +.zwave_nvm 0x3000 0x294bc +.nvm 0x9000 0x2c4bc .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x62d0 0x0 -.debug_info 0x39d130 0x0 -.debug_abbrev 0x1102d 0x0 -.debug_loc 0x36510 0x0 +.debug_frame 0x6334 0x0 +.debug_info 0x39d481 0x0 +.debug_abbrev 0x1100a 0x0 +.debug_loc 0x36708 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x8b28 0x0 -.debug_line 0x42001 0x0 -.debug_str 0x83891 0x0 -Total 0x4fe196 +.debug_ranges 0x8ae8 0x0 +.debug_line 0x4214a 0x0 +.debug_str 0x839dd 0x0 +Total 0x4feac5 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 169748 + 170092 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49880 + 49884 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_US_LR_size.txt index 4a70f9a7391..85e3c3682e0 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x290fc 0x0 -_cmd_handlers 0x1b8 0x290fc -_zw_protocol_cmd_handlers 0x70 0x292b4 -_zw_protocol_cmd_handlers_lr 0x30 0x29324 -.ARM.exidx 0x8 0x29354 -.copy.table 0xc 0x2935c -.zero.table 0x0 0x29368 +.text 0x29250 0x0 +_cmd_handlers 0x1b8 0x29250 +_zw_protocol_cmd_handlers 0x70 0x29408 +_zw_protocol_cmd_handlers_lr 0x30 0x29478 +.ARM.exidx 0x8 0x294a8 +.copy.table 0xc 0x294b0 +.zero.table 0x0 0x294bc .stack 0x1000 0x20000000 -.data 0x3ac 0x20001000 -.bss 0xa72c 0x200013ac -.heap 0x4528 0x2000bad8 -.zwave_nvm 0x3000 0x29368 -.nvm 0x9000 0x2c368 +.data 0x3b0 0x20001000 +.bss 0xa72c 0x200013b0 +.heap 0x4520 0x2000bae0 +.zwave_nvm 0x3000 0x294bc +.nvm 0x9000 0x2c4bc .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x62d0 0x0 -.debug_info 0x39d130 0x0 -.debug_abbrev 0x1102d 0x0 -.debug_loc 0x36510 0x0 +.debug_frame 0x6334 0x0 +.debug_info 0x39d481 0x0 +.debug_abbrev 0x1100a 0x0 +.debug_loc 0x36708 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x8b28 0x0 -.debug_line 0x42001 0x0 -.debug_str 0x83887 0x0 -Total 0x4fe18c +.debug_ranges 0x8ae8 0x0 +.debug_line 0x4214a 0x0 +.debug_str 0x839d3 0x0 +Total 0x4feabb The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 169748 + 170092 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49880 + 49884 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_US_size.txt index f48a08de09a..7931f93a164 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4207A_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x290fc 0x0 -_cmd_handlers 0x1b8 0x290fc -_zw_protocol_cmd_handlers 0x70 0x292b4 -_zw_protocol_cmd_handlers_lr 0x30 0x29324 -.ARM.exidx 0x8 0x29354 -.copy.table 0xc 0x2935c -.zero.table 0x0 0x29368 +.text 0x29250 0x0 +_cmd_handlers 0x1b8 0x29250 +_zw_protocol_cmd_handlers 0x70 0x29408 +_zw_protocol_cmd_handlers_lr 0x30 0x29478 +.ARM.exidx 0x8 0x294a8 +.copy.table 0xc 0x294b0 +.zero.table 0x0 0x294bc .stack 0x1000 0x20000000 -.data 0x3ac 0x20001000 -.bss 0xa72c 0x200013ac -.heap 0x4528 0x2000bad8 -.zwave_nvm 0x3000 0x29368 -.nvm 0x9000 0x2c368 +.data 0x3b0 0x20001000 +.bss 0xa72c 0x200013b0 +.heap 0x4520 0x2000bae0 +.zwave_nvm 0x3000 0x294bc +.nvm 0x9000 0x2c4bc .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x62d0 0x0 -.debug_info 0x39d130 0x0 -.debug_abbrev 0x1102d 0x0 -.debug_loc 0x36510 0x0 +.debug_frame 0x6334 0x0 +.debug_info 0x39d481 0x0 +.debug_abbrev 0x1100a 0x0 +.debug_loc 0x36708 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x8b28 0x0 -.debug_line 0x42001 0x0 -.debug_str 0x83891 0x0 -Total 0x4fe196 +.debug_ranges 0x8ae8 0x0 +.debug_line 0x4214a 0x0 +.debug_str 0x839dd 0x0 +Total 0x4feac5 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 169748 + 170092 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49880 + 49884 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4209A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4209A_REGION_US_LR_size.txt index 14a1866a2b8..fb6154d7a1d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4209A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4209A_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x28f84 0x0 -_cmd_handlers 0x1b8 0x28f84 -_zw_protocol_cmd_handlers 0x70 0x2913c -_zw_protocol_cmd_handlers_lr 0x30 0x291ac -.ARM.exidx 0x8 0x291dc -.copy.table 0xc 0x291e4 -.zero.table 0x0 0x291f0 +.text 0x290d8 0x0 +_cmd_handlers 0x1b8 0x290d8 +_zw_protocol_cmd_handlers 0x70 0x29290 +_zw_protocol_cmd_handlers_lr 0x30 0x29300 +.ARM.exidx 0x8 0x29330 +.copy.table 0xc 0x29338 +.zero.table 0x0 0x29344 .stack 0x1000 0x20000000 -.data 0x3ac 0x20001000 -.bss 0xa710 0x200013ac +.data 0x3b0 0x20001000 +.bss 0xa710 0x200013b0 .heap 0x4540 0x2000bac0 -.zwave_nvm 0x3000 0x291f0 -.nvm 0x9000 0x2c1f0 +.zwave_nvm 0x3000 0x29344 +.nvm 0x9000 0x2c344 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x62f0 0x0 -.debug_info 0x39d863 0x0 -.debug_abbrev 0x11188 0x0 -.debug_loc 0x369c8 0x0 +.debug_frame 0x6354 0x0 +.debug_info 0x39dbb4 0x0 +.debug_abbrev 0x11165 0x0 +.debug_loc 0x36bc0 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x8d50 0x0 -.debug_line 0x42936 0x0 -.debug_str 0x83418 0x0 -Total 0x4ff434 +.debug_ranges 0x8d10 0x0 +.debug_line 0x42a7b 0x0 +.debug_str 0x83564 0x0 +Total 0x4ffd67 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 169372 + 169716 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49852 + 49856 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4210A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4210A_REGION_US_LR_size.txt index eaa271bdd94..be76c30ac5d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4210A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4210A_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2eb14 0x8006000 -_cmd_handlers 0x1b8 0x8034b14 -_zw_protocol_cmd_handlers 0x70 0x8034ccc -_zw_protocol_cmd_handlers_lr 0x30 0x8034d3c -.ARM.exidx 0x8 0x8034d6c -.copy.table 0xc 0x8034d74 -.zero.table 0x0 0x8034d80 +.text 0x2e914 0x8006000 +_cmd_handlers 0x1b8 0x8034914 +_zw_protocol_cmd_handlers 0x70 0x8034acc +_zw_protocol_cmd_handlers_lr 0x30 0x8034b3c +.ARM.exidx 0x8 0x8034b6c +.copy.table 0xc 0x8034b74 +.zero.table 0x0 0x8034b80 .stack 0x1000 0x20000000 -.data 0x494 0x20001000 -.bss 0xb178 0x20001494 -.heap 0x39f0 0x2000c610 -.zwave_nvm 0x0 0x8034d80 -.nvm 0x8000 0x8034d80 +.data 0x498 0x20001000 +.bss 0xb170 0x20001498 +.heap 0x39f8 0x2000c608 +.zwave_nvm 0x0 0x8034b80 +.nvm 0x8000 0x8034b80 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6970 0x0 -.debug_info 0x3e2b2d 0x0 -.debug_abbrev 0x13e73 0x0 -.debug_loc 0x41399 0x0 +.debug_frame 0x69f0 0x0 +.debug_info 0x3e2f8f 0x0 +.debug_abbrev 0x13e77 0x0 +.debug_loc 0x41770 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xa4d0 0x0 -.debug_line 0x4bb92 0x0 -.debug_str 0x8ed1f 0x0 -Total 0x56a2dd +.debug_line 0x4bd14 0x0 +.debug_str 0x8ee49 0x0 +Total 0x56ac4a The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 193044 + 192536 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52748 + 52744 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_EU_size.txt index 4026cf48bf6..5350bf872f3 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2ea54 0x8006000 -_cmd_handlers 0x1b8 0x8034a54 -_zw_protocol_cmd_handlers 0x70 0x8034c0c -_zw_protocol_cmd_handlers_lr 0x30 0x8034c7c -.ARM.exidx 0x8 0x8034cac -.copy.table 0xc 0x8034cb4 -.zero.table 0x0 0x8034cc0 +.text 0x2eca0 0x8006000 +_cmd_handlers 0x1b8 0x8034ca0 +_zw_protocol_cmd_handlers 0x70 0x8034e58 +_zw_protocol_cmd_handlers_lr 0x30 0x8034ec8 +.ARM.exidx 0x8 0x8034ef8 +.copy.table 0xc 0x8034f00 +.zero.table 0x0 0x8034f0c .stack 0x1000 0x20000000 -.data 0x490 0x20001000 -.bss 0xb0e8 0x20001490 -.heap 0x33a88 0x2000c578 -.zwave_nvm 0x0 0x8034cc0 -.nvm 0x8000 0x8034cc0 +.data 0x494 0x20001000 +.bss 0xb0f0 0x20001494 +.heap 0x33a78 0x2000c588 +.zwave_nvm 0x0 0x8034f0c +.nvm 0x8000 0x8034f0c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x691c 0x0 -.debug_info 0x3e1a3f 0x0 -.debug_abbrev 0x13d23 0x0 -.debug_loc 0x4118f 0x0 +.debug_frame 0x69a0 0x0 +.debug_info 0x3e1e0f 0x0 +.debug_abbrev 0x13d27 0x0 +.debug_loc 0x41450 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa6a0 0x0 -.debug_line 0x4b735 0x0 -.debug_str 0x8ef9d 0x0 -Total 0x598d76 +.debug_ranges 0xa658 0x0 +.debug_line 0x4b922 0x0 +.debug_str 0x8f0c7 0x0 +Total 0x5999a6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192848 + 193440 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52600 + 52612 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_US_LR_size.txt index 9de0ad659bd..265c3e39e18 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2ea54 0x8006000 -_cmd_handlers 0x1b8 0x8034a54 -_zw_protocol_cmd_handlers 0x70 0x8034c0c -_zw_protocol_cmd_handlers_lr 0x30 0x8034c7c -.ARM.exidx 0x8 0x8034cac -.copy.table 0xc 0x8034cb4 -.zero.table 0x0 0x8034cc0 +.text 0x2eca0 0x8006000 +_cmd_handlers 0x1b8 0x8034ca0 +_zw_protocol_cmd_handlers 0x70 0x8034e58 +_zw_protocol_cmd_handlers_lr 0x30 0x8034ec8 +.ARM.exidx 0x8 0x8034ef8 +.copy.table 0xc 0x8034f00 +.zero.table 0x0 0x8034f0c .stack 0x1000 0x20000000 -.data 0x490 0x20001000 -.bss 0xb0e8 0x20001490 -.heap 0x33a88 0x2000c578 -.zwave_nvm 0x0 0x8034cc0 -.nvm 0x8000 0x8034cc0 +.data 0x494 0x20001000 +.bss 0xb0f0 0x20001494 +.heap 0x33a78 0x2000c588 +.zwave_nvm 0x0 0x8034f0c +.nvm 0x8000 0x8034f0c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x691c 0x0 -.debug_info 0x3e1a3f 0x0 -.debug_abbrev 0x13d23 0x0 -.debug_loc 0x4118f 0x0 +.debug_frame 0x69a0 0x0 +.debug_info 0x3e1e0f 0x0 +.debug_abbrev 0x13d27 0x0 +.debug_loc 0x41450 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa6a0 0x0 -.debug_line 0x4b735 0x0 -.debug_str 0x8ef93 0x0 -Total 0x598d6c +.debug_ranges 0xa658 0x0 +.debug_line 0x4b922 0x0 +.debug_str 0x8f0bd 0x0 +Total 0x59999c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192848 + 193440 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52600 + 52612 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_US_size.txt index 4026cf48bf6..5350bf872f3 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4400B_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2ea54 0x8006000 -_cmd_handlers 0x1b8 0x8034a54 -_zw_protocol_cmd_handlers 0x70 0x8034c0c -_zw_protocol_cmd_handlers_lr 0x30 0x8034c7c -.ARM.exidx 0x8 0x8034cac -.copy.table 0xc 0x8034cb4 -.zero.table 0x0 0x8034cc0 +.text 0x2eca0 0x8006000 +_cmd_handlers 0x1b8 0x8034ca0 +_zw_protocol_cmd_handlers 0x70 0x8034e58 +_zw_protocol_cmd_handlers_lr 0x30 0x8034ec8 +.ARM.exidx 0x8 0x8034ef8 +.copy.table 0xc 0x8034f00 +.zero.table 0x0 0x8034f0c .stack 0x1000 0x20000000 -.data 0x490 0x20001000 -.bss 0xb0e8 0x20001490 -.heap 0x33a88 0x2000c578 -.zwave_nvm 0x0 0x8034cc0 -.nvm 0x8000 0x8034cc0 +.data 0x494 0x20001000 +.bss 0xb0f0 0x20001494 +.heap 0x33a78 0x2000c588 +.zwave_nvm 0x0 0x8034f0c +.nvm 0x8000 0x8034f0c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x691c 0x0 -.debug_info 0x3e1a3f 0x0 -.debug_abbrev 0x13d23 0x0 -.debug_loc 0x4118f 0x0 +.debug_frame 0x69a0 0x0 +.debug_info 0x3e1e0f 0x0 +.debug_abbrev 0x13d27 0x0 +.debug_loc 0x41450 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa6a0 0x0 -.debug_line 0x4b735 0x0 -.debug_str 0x8ef9d 0x0 -Total 0x598d76 +.debug_ranges 0xa658 0x0 +.debug_line 0x4b922 0x0 +.debug_str 0x8f0c7 0x0 +Total 0x5999a6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192848 + 193440 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52600 + 52612 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4401B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4401B_REGION_US_LR_size.txt index eb01d7cc41c..3fb536bf5f6 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4401B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_serial_api_end_device_BRD4401B_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_serial_api_end_device.out : section size addr -.text 0x2ea54 0x8006000 -_cmd_handlers 0x1b8 0x8034a54 -_zw_protocol_cmd_handlers 0x70 0x8034c0c -_zw_protocol_cmd_handlers_lr 0x30 0x8034c7c -.ARM.exidx 0x8 0x8034cac -.copy.table 0xc 0x8034cb4 -.zero.table 0x0 0x8034cc0 +.text 0x2ec98 0x8006000 +_cmd_handlers 0x1b8 0x8034c98 +_zw_protocol_cmd_handlers 0x70 0x8034e50 +_zw_protocol_cmd_handlers_lr 0x30 0x8034ec0 +.ARM.exidx 0x8 0x8034ef0 +.copy.table 0xc 0x8034ef8 +.zero.table 0x0 0x8034f04 .stack 0x1000 0x20000000 -.data 0x490 0x20001000 -.bss 0xb0e8 0x20001490 -.heap 0x33a88 0x2000c578 -.zwave_nvm 0x0 0x8034cc0 -.nvm 0x8000 0x8034cc0 +.data 0x494 0x20001000 +.bss 0xb0f0 0x20001494 +.heap 0x33a78 0x2000c588 +.zwave_nvm 0x0 0x8034f04 +.nvm 0x8000 0x8034f04 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x691c 0x0 -.debug_info 0x3e1a43 0x0 -.debug_abbrev 0x13d23 0x0 -.debug_loc 0x4118f 0x0 +.debug_frame 0x69a0 0x0 +.debug_info 0x3e1e0e 0x0 +.debug_abbrev 0x13d27 0x0 +.debug_loc 0x41477 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xa660 0x0 -.debug_line 0x4b723 0x0 -.debug_str 0x8ef93 0x0 -Total 0x598d1e +.debug_ranges 0xa618 0x0 +.debug_line 0x4b90a 0x0 +.debug_str 0x8f0bd 0x0 +Total 0x599962 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192848 + 193432 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 52600 + 52612 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_EU_size.txt index e6bbd2d615d..2860e360d25 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x289d0 0x0 -_cc_handlers_v3 0x18c 0x289d0 -_zw_protocol_cmd_handlers 0x70 0x28b5c -_zw_protocol_cmd_handlers_lr 0x30 0x28bcc -.ARM.exidx 0x8 0x28bfc -.copy.table 0xc 0x28c04 -.zero.table 0x0 0x28c10 +.text 0x28adc 0x0 +_cc_handlers_v3 0x18c 0x28adc +_zw_protocol_cmd_handlers 0x70 0x28c68 +_zw_protocol_cmd_handlers_lr 0x30 0x28cd8 +.ARM.exidx 0x8 0x28d08 +.copy.table 0xc 0x28d10 +.zero.table 0x0 0x28d1c .stack 0x1000 0x20000000 .data 0x3d0 0x20001000 -.bss 0x9988 0x200013d0 -.heap 0x52a8 0x2000ad58 -.internal_storage 0x3a000 0x28c10 -.zwave_nvm 0x3000 0x62c10 -.nvm 0x9000 0x65c10 +.bss 0x9980 0x200013d0 +.heap 0x52b0 0x2000ad50 +.internal_storage 0x3a000 0x28d1c +.zwave_nvm 0x3000 0x62d1c +.nvm 0x9000 0x65d1c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x5e8c 0x0 -.debug_info 0xb1ebb8 0x0 -.debug_abbrev 0x12d64 0x0 -.debug_loc 0x37efc 0x0 +.debug_frame 0x5ed8 0x0 +.debug_info 0xb1ef1b 0x0 +.debug_abbrev 0x12d41 0x0 +.debug_loc 0x38297 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x90a0 0x0 -.debug_line 0x45b1c 0x0 -.debug_str 0x834d6 0x0 -Total 0xcc047d +.debug_ranges 0x9098 0x0 +.debug_line 0x45c47 0x0 +.debug_str 0x83628 0x0 +Total 0xcc0f25 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 167904 + 168172 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46424 + 46416 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_US_LR_size.txt index 7b4e3cc9baf..cf5ffe63476 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x289d0 0x0 -_cc_handlers_v3 0x18c 0x289d0 -_zw_protocol_cmd_handlers 0x70 0x28b5c -_zw_protocol_cmd_handlers_lr 0x30 0x28bcc -.ARM.exidx 0x8 0x28bfc -.copy.table 0xc 0x28c04 -.zero.table 0x0 0x28c10 +.text 0x28adc 0x0 +_cc_handlers_v3 0x18c 0x28adc +_zw_protocol_cmd_handlers 0x70 0x28c68 +_zw_protocol_cmd_handlers_lr 0x30 0x28cd8 +.ARM.exidx 0x8 0x28d08 +.copy.table 0xc 0x28d10 +.zero.table 0x0 0x28d1c .stack 0x1000 0x20000000 .data 0x3d0 0x20001000 -.bss 0x9988 0x200013d0 -.heap 0x52a8 0x2000ad58 -.internal_storage 0x3a000 0x28c10 -.zwave_nvm 0x3000 0x62c10 -.nvm 0x9000 0x65c10 +.bss 0x9980 0x200013d0 +.heap 0x52b0 0x2000ad50 +.internal_storage 0x3a000 0x28d1c +.zwave_nvm 0x3000 0x62d1c +.nvm 0x9000 0x65d1c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x5e8c 0x0 -.debug_info 0xb1ebb8 0x0 -.debug_abbrev 0x12d64 0x0 -.debug_loc 0x37efc 0x0 +.debug_frame 0x5ed8 0x0 +.debug_info 0xb1ef1b 0x0 +.debug_abbrev 0x12d41 0x0 +.debug_loc 0x38297 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x90a0 0x0 -.debug_line 0x45b1c 0x0 -.debug_str 0x834cc 0x0 -Total 0xcc0473 +.debug_ranges 0x9098 0x0 +.debug_line 0x45c47 0x0 +.debug_str 0x8361e 0x0 +Total 0xcc0f1b The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 167904 + 168172 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46424 + 46416 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_US_size.txt index e6bbd2d615d..2860e360d25 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4202A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x289d0 0x0 -_cc_handlers_v3 0x18c 0x289d0 -_zw_protocol_cmd_handlers 0x70 0x28b5c -_zw_protocol_cmd_handlers_lr 0x30 0x28bcc -.ARM.exidx 0x8 0x28bfc -.copy.table 0xc 0x28c04 -.zero.table 0x0 0x28c10 +.text 0x28adc 0x0 +_cc_handlers_v3 0x18c 0x28adc +_zw_protocol_cmd_handlers 0x70 0x28c68 +_zw_protocol_cmd_handlers_lr 0x30 0x28cd8 +.ARM.exidx 0x8 0x28d08 +.copy.table 0xc 0x28d10 +.zero.table 0x0 0x28d1c .stack 0x1000 0x20000000 .data 0x3d0 0x20001000 -.bss 0x9988 0x200013d0 -.heap 0x52a8 0x2000ad58 -.internal_storage 0x3a000 0x28c10 -.zwave_nvm 0x3000 0x62c10 -.nvm 0x9000 0x65c10 +.bss 0x9980 0x200013d0 +.heap 0x52b0 0x2000ad50 +.internal_storage 0x3a000 0x28d1c +.zwave_nvm 0x3000 0x62d1c +.nvm 0x9000 0x65d1c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x5e8c 0x0 -.debug_info 0xb1ebb8 0x0 -.debug_abbrev 0x12d64 0x0 -.debug_loc 0x37efc 0x0 +.debug_frame 0x5ed8 0x0 +.debug_info 0xb1ef1b 0x0 +.debug_abbrev 0x12d41 0x0 +.debug_loc 0x38297 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x90a0 0x0 -.debug_line 0x45b1c 0x0 -.debug_str 0x834d6 0x0 -Total 0xcc047d +.debug_ranges 0x9098 0x0 +.debug_line 0x45c47 0x0 +.debug_str 0x83628 0x0 +Total 0xcc0f25 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 167904 + 168172 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46424 + 46416 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_EU_size.txt index e7fda810d6a..00e5bf33aa9 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e4dc 0x8006000 -_cc_handlers_v3 0x18c 0x80344dc -_zw_protocol_cmd_handlers 0x70 0x8034668 -_zw_protocol_cmd_handlers_lr 0x30 0x80346d8 -.ARM.exidx 0x8 0x8034708 -.copy.table 0xc 0x8034710 -.zero.table 0x0 0x803471c +.text 0x2e2fc 0x8006000 +_cc_handlers_v3 0x18c 0x80342fc +_zw_protocol_cmd_handlers 0x70 0x8034488 +_zw_protocol_cmd_handlers_lr 0x30 0x80344f8 +.ARM.exidx 0x8 0x8034528 +.copy.table 0xc 0x8034530 +.zero.table 0x0 0x803453c .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa358 0x20001424 -.heap 0x4880 0x2000b780 -.internal_storage 0x30000 0x803471c -.zwave_nvm 0x0 0x806471c -.nvm 0x8000 0x806471c +.bss 0xa364 0x20001424 +.heap 0x4878 0x2000b788 +.internal_storage 0x30000 0x803453c +.zwave_nvm 0x0 0x806453c +.nvm 0x8000 0x806453c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6748 0x0 -.debug_info 0xb5d2f7 0x0 -.debug_abbrev 0x158dd 0x0 -.debug_loc 0x42f41 0x0 +.debug_frame 0x67a4 0x0 +.debug_info 0xb5d7b0 0x0 +.debug_abbrev 0x158e1 0x0 +.debug_loc 0x43307 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xab68 0x0 -.debug_line 0x4f7c1 0x0 -.debug_str 0x8e80e 0x0 -Total 0xd1b5e3 +.debug_ranges 0xab40 0x0 +.debug_line 0x4f993 0x0 +.debug_str 0x8e93e 0x0 +Total 0xd1bfc0 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 191296 + 190816 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49020 + 49032 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_US_LR_size.txt index 4c1bbc6eca7..9c73062594c 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e4dc 0x8006000 -_cc_handlers_v3 0x18c 0x80344dc -_zw_protocol_cmd_handlers 0x70 0x8034668 -_zw_protocol_cmd_handlers_lr 0x30 0x80346d8 -.ARM.exidx 0x8 0x8034708 -.copy.table 0xc 0x8034710 -.zero.table 0x0 0x803471c +.text 0x2e2fc 0x8006000 +_cc_handlers_v3 0x18c 0x80342fc +_zw_protocol_cmd_handlers 0x70 0x8034488 +_zw_protocol_cmd_handlers_lr 0x30 0x80344f8 +.ARM.exidx 0x8 0x8034528 +.copy.table 0xc 0x8034530 +.zero.table 0x0 0x803453c .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa358 0x20001424 -.heap 0x4880 0x2000b780 -.internal_storage 0x30000 0x803471c -.zwave_nvm 0x0 0x806471c -.nvm 0x8000 0x806471c +.bss 0xa364 0x20001424 +.heap 0x4878 0x2000b788 +.internal_storage 0x30000 0x803453c +.zwave_nvm 0x0 0x806453c +.nvm 0x8000 0x806453c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6748 0x0 -.debug_info 0xb5d2f7 0x0 -.debug_abbrev 0x158dd 0x0 -.debug_loc 0x42f41 0x0 +.debug_frame 0x67a4 0x0 +.debug_info 0xb5d7b0 0x0 +.debug_abbrev 0x158e1 0x0 +.debug_loc 0x43307 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xab68 0x0 -.debug_line 0x4f7c1 0x0 -.debug_str 0x8e804 0x0 -Total 0xd1b5d9 +.debug_ranges 0xab40 0x0 +.debug_line 0x4f993 0x0 +.debug_str 0x8e934 0x0 +Total 0xd1bfb6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 191296 + 190816 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49020 + 49032 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_US_size.txt index e7fda810d6a..00e5bf33aa9 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204C_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e4dc 0x8006000 -_cc_handlers_v3 0x18c 0x80344dc -_zw_protocol_cmd_handlers 0x70 0x8034668 -_zw_protocol_cmd_handlers_lr 0x30 0x80346d8 -.ARM.exidx 0x8 0x8034708 -.copy.table 0xc 0x8034710 -.zero.table 0x0 0x803471c +.text 0x2e2fc 0x8006000 +_cc_handlers_v3 0x18c 0x80342fc +_zw_protocol_cmd_handlers 0x70 0x8034488 +_zw_protocol_cmd_handlers_lr 0x30 0x80344f8 +.ARM.exidx 0x8 0x8034528 +.copy.table 0xc 0x8034530 +.zero.table 0x0 0x803453c .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa358 0x20001424 -.heap 0x4880 0x2000b780 -.internal_storage 0x30000 0x803471c -.zwave_nvm 0x0 0x806471c -.nvm 0x8000 0x806471c +.bss 0xa364 0x20001424 +.heap 0x4878 0x2000b788 +.internal_storage 0x30000 0x803453c +.zwave_nvm 0x0 0x806453c +.nvm 0x8000 0x806453c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6748 0x0 -.debug_info 0xb5d2f7 0x0 -.debug_abbrev 0x158dd 0x0 -.debug_loc 0x42f41 0x0 +.debug_frame 0x67a4 0x0 +.debug_info 0xb5d7b0 0x0 +.debug_abbrev 0x158e1 0x0 +.debug_loc 0x43307 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xab68 0x0 -.debug_line 0x4f7c1 0x0 -.debug_str 0x8e80e 0x0 -Total 0xd1b5e3 +.debug_ranges 0xab40 0x0 +.debug_line 0x4f993 0x0 +.debug_str 0x8e93e 0x0 +Total 0xd1bfc0 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 191296 + 190816 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49020 + 49032 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_EU_size.txt index f46446129f8..8284182341d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e51c 0x8006000 -_cc_handlers_v3 0x18c 0x803451c -_zw_protocol_cmd_handlers 0x70 0x80346a8 -_zw_protocol_cmd_handlers_lr 0x30 0x8034718 -.ARM.exidx 0x8 0x8034748 -.copy.table 0xc 0x8034750 -.zero.table 0x0 0x803475c +.text 0x2e33c 0x8006000 +_cc_handlers_v3 0x18c 0x803433c +_zw_protocol_cmd_handlers 0x70 0x80344c8 +_zw_protocol_cmd_handlers_lr 0x30 0x8034538 +.ARM.exidx 0x8 0x8034568 +.copy.table 0xc 0x8034570 +.zero.table 0x0 0x803457c .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa358 0x20001424 -.heap 0x4880 0x2000b780 -.internal_storage 0x30000 0x803475c -.zwave_nvm 0x0 0x806475c -.nvm 0x8000 0x806475c +.bss 0xa364 0x20001424 +.heap 0x4878 0x2000b788 +.internal_storage 0x30000 0x803457c +.zwave_nvm 0x0 0x806457c +.nvm 0x8000 0x806457c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6748 0x0 -.debug_info 0xb5d545 0x0 -.debug_abbrev 0x15981 0x0 -.debug_loc 0x42fa6 0x0 +.debug_frame 0x67a4 0x0 +.debug_info 0xb5da04 0x0 +.debug_abbrev 0x15985 0x0 +.debug_loc 0x4336c 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xab40 0x0 -.debug_line 0x4f9a5 0x0 -.debug_str 0x8e9e1 0x0 -Total 0xd1bd09 +.debug_ranges 0xab68 0x0 +.debug_line 0x4fbb7 0x0 +.debug_str 0x8eb11 0x0 +Total 0xd1c77c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 191360 + 190880 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49020 + 49032 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_US_LR_size.txt index 5bb48bd0ba1..7851f9ed91f 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e51c 0x8006000 -_cc_handlers_v3 0x18c 0x803451c -_zw_protocol_cmd_handlers 0x70 0x80346a8 -_zw_protocol_cmd_handlers_lr 0x30 0x8034718 -.ARM.exidx 0x8 0x8034748 -.copy.table 0xc 0x8034750 -.zero.table 0x0 0x803475c +.text 0x2e33c 0x8006000 +_cc_handlers_v3 0x18c 0x803433c +_zw_protocol_cmd_handlers 0x70 0x80344c8 +_zw_protocol_cmd_handlers_lr 0x30 0x8034538 +.ARM.exidx 0x8 0x8034568 +.copy.table 0xc 0x8034570 +.zero.table 0x0 0x803457c .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa358 0x20001424 -.heap 0x4880 0x2000b780 -.internal_storage 0x30000 0x803475c -.zwave_nvm 0x0 0x806475c -.nvm 0x8000 0x806475c +.bss 0xa364 0x20001424 +.heap 0x4878 0x2000b788 +.internal_storage 0x30000 0x803457c +.zwave_nvm 0x0 0x806457c +.nvm 0x8000 0x806457c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6748 0x0 -.debug_info 0xb5d545 0x0 -.debug_abbrev 0x15981 0x0 -.debug_loc 0x42fa6 0x0 +.debug_frame 0x67a4 0x0 +.debug_info 0xb5da04 0x0 +.debug_abbrev 0x15985 0x0 +.debug_loc 0x4336c 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xab40 0x0 -.debug_line 0x4f9a5 0x0 -.debug_str 0x8e9d7 0x0 -Total 0xd1bcff +.debug_ranges 0xab68 0x0 +.debug_line 0x4fbb7 0x0 +.debug_str 0x8eb07 0x0 +Total 0xd1c772 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 191360 + 190880 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49020 + 49032 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_US_size.txt index f46446129f8..8284182341d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4204D_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e51c 0x8006000 -_cc_handlers_v3 0x18c 0x803451c -_zw_protocol_cmd_handlers 0x70 0x80346a8 -_zw_protocol_cmd_handlers_lr 0x30 0x8034718 -.ARM.exidx 0x8 0x8034748 -.copy.table 0xc 0x8034750 -.zero.table 0x0 0x803475c +.text 0x2e33c 0x8006000 +_cc_handlers_v3 0x18c 0x803433c +_zw_protocol_cmd_handlers 0x70 0x80344c8 +_zw_protocol_cmd_handlers_lr 0x30 0x8034538 +.ARM.exidx 0x8 0x8034568 +.copy.table 0xc 0x8034570 +.zero.table 0x0 0x803457c .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa358 0x20001424 -.heap 0x4880 0x2000b780 -.internal_storage 0x30000 0x803475c -.zwave_nvm 0x0 0x806475c -.nvm 0x8000 0x806475c +.bss 0xa364 0x20001424 +.heap 0x4878 0x2000b788 +.internal_storage 0x30000 0x803457c +.zwave_nvm 0x0 0x806457c +.nvm 0x8000 0x806457c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6748 0x0 -.debug_info 0xb5d545 0x0 -.debug_abbrev 0x15981 0x0 -.debug_loc 0x42fa6 0x0 +.debug_frame 0x67a4 0x0 +.debug_info 0xb5da04 0x0 +.debug_abbrev 0x15985 0x0 +.debug_loc 0x4336c 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xab40 0x0 -.debug_line 0x4f9a5 0x0 -.debug_str 0x8e9e1 0x0 -Total 0xd1bd09 +.debug_ranges 0xab68 0x0 +.debug_line 0x4fbb7 0x0 +.debug_str 0x8eb11 0x0 +Total 0xd1c77c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 191360 + 190880 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49020 + 49032 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_EU_size.txt index e0e9ac8b8cd..638f5bef0ed 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e168 0x8006000 -_cc_handlers_v3 0x18c 0x8034168 -_zw_protocol_cmd_handlers 0x70 0x80342f4 -_zw_protocol_cmd_handlers_lr 0x30 0x8034364 -.ARM.exidx 0x8 0x8034394 -.copy.table 0xc 0x803439c -.zero.table 0x0 0x80343a8 +.text 0x2df40 0x8006000 +_cc_handlers_v3 0x18c 0x8033f40 +_zw_protocol_cmd_handlers 0x70 0x80340cc +_zw_protocol_cmd_handlers_lr 0x30 0x803413c +.ARM.exidx 0x8 0x803416c +.copy.table 0xc 0x8034174 +.zero.table 0x0 0x8034180 .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa1fc 0x20001424 -.heap 0x49e0 0x2000b620 -.internal_storage 0x30000 0x80343a8 -.zwave_nvm 0x0 0x80643a8 -.nvm 0x8000 0x80643a8 +.bss 0xa208 0x20001424 +.heap 0x49d0 0x2000b630 +.internal_storage 0x30000 0x8034180 +.zwave_nvm 0x0 0x8064180 +.nvm 0x8000 0x8064180 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x65b8 0x0 -.debug_info 0xb5b496 0x0 -.debug_abbrev 0x15760 0x0 -.debug_loc 0x4211d 0x0 +.debug_frame 0x6614 0x0 +.debug_info 0xb5b926 0x0 +.debug_abbrev 0x15775 0x0 +.debug_loc 0x4249e 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xabf8 0x0 -.debug_line 0x4f0e5 0x0 -.debug_str 0x8e8c0 0x0 -Total 0xd17d8f +.debug_ranges 0xabd0 0x0 +.debug_line 0x4f2d3 0x0 +.debug_str 0x8e9f0 0x0 +Total 0xd186db The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 190412 + 189860 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48672 + 48684 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_US_LR_size.txt index 184abc0d588..f74df4dec39 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e168 0x8006000 -_cc_handlers_v3 0x18c 0x8034168 -_zw_protocol_cmd_handlers 0x70 0x80342f4 -_zw_protocol_cmd_handlers_lr 0x30 0x8034364 -.ARM.exidx 0x8 0x8034394 -.copy.table 0xc 0x803439c -.zero.table 0x0 0x80343a8 +.text 0x2df40 0x8006000 +_cc_handlers_v3 0x18c 0x8033f40 +_zw_protocol_cmd_handlers 0x70 0x80340cc +_zw_protocol_cmd_handlers_lr 0x30 0x803413c +.ARM.exidx 0x8 0x803416c +.copy.table 0xc 0x8034174 +.zero.table 0x0 0x8034180 .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa1fc 0x20001424 -.heap 0x49e0 0x2000b620 -.internal_storage 0x30000 0x80343a8 -.zwave_nvm 0x0 0x80643a8 -.nvm 0x8000 0x80643a8 +.bss 0xa208 0x20001424 +.heap 0x49d0 0x2000b630 +.internal_storage 0x30000 0x8034180 +.zwave_nvm 0x0 0x8064180 +.nvm 0x8000 0x8064180 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x65b8 0x0 -.debug_info 0xb5b496 0x0 -.debug_abbrev 0x15760 0x0 -.debug_loc 0x4211d 0x0 +.debug_frame 0x6614 0x0 +.debug_info 0xb5b926 0x0 +.debug_abbrev 0x15775 0x0 +.debug_loc 0x4249e 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xabf8 0x0 -.debug_line 0x4f0e5 0x0 -.debug_str 0x8e8b6 0x0 -Total 0xd17d85 +.debug_ranges 0xabd0 0x0 +.debug_line 0x4f2d3 0x0 +.debug_str 0x8e9e6 0x0 +Total 0xd186d1 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 190412 + 189860 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48672 + 48684 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_US_size.txt index e0e9ac8b8cd..638f5bef0ed 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e168 0x8006000 -_cc_handlers_v3 0x18c 0x8034168 -_zw_protocol_cmd_handlers 0x70 0x80342f4 -_zw_protocol_cmd_handlers_lr 0x30 0x8034364 -.ARM.exidx 0x8 0x8034394 -.copy.table 0xc 0x803439c -.zero.table 0x0 0x80343a8 +.text 0x2df40 0x8006000 +_cc_handlers_v3 0x18c 0x8033f40 +_zw_protocol_cmd_handlers 0x70 0x80340cc +_zw_protocol_cmd_handlers_lr 0x30 0x803413c +.ARM.exidx 0x8 0x803416c +.copy.table 0xc 0x8034174 +.zero.table 0x0 0x8034180 .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa1fc 0x20001424 -.heap 0x49e0 0x2000b620 -.internal_storage 0x30000 0x80343a8 -.zwave_nvm 0x0 0x80643a8 -.nvm 0x8000 0x80643a8 +.bss 0xa208 0x20001424 +.heap 0x49d0 0x2000b630 +.internal_storage 0x30000 0x8034180 +.zwave_nvm 0x0 0x8064180 +.nvm 0x8000 0x8064180 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x65b8 0x0 -.debug_info 0xb5b496 0x0 -.debug_abbrev 0x15760 0x0 -.debug_loc 0x4211d 0x0 +.debug_frame 0x6614 0x0 +.debug_info 0xb5b926 0x0 +.debug_abbrev 0x15775 0x0 +.debug_loc 0x4249e 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xabf8 0x0 -.debug_line 0x4f0e5 0x0 -.debug_str 0x8e8c0 0x0 -Total 0xd17d8f +.debug_ranges 0xabd0 0x0 +.debug_line 0x4f2d3 0x0 +.debug_str 0x8e9f0 0x0 +Total 0xd186db The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 190412 + 189860 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48672 + 48684 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_EU_size.txt index 6e3788a1105..1c99dec79d6 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2eaa0 0x8006000 -_cc_handlers_v3 0x18c 0x8034aa0 -_zw_protocol_cmd_handlers 0x70 0x8034c2c -_zw_protocol_cmd_handlers_lr 0x30 0x8034c9c -.ARM.exidx 0x8 0x8034ccc -.copy.table 0xc 0x8034cd4 -.zero.table 0x0 0x8034ce0 +.text 0x2e8c0 0x8006000 +_cc_handlers_v3 0x18c 0x80348c0 +_zw_protocol_cmd_handlers 0x70 0x8034a4c +_zw_protocol_cmd_handlers_lr 0x30 0x8034abc +.ARM.exidx 0x8 0x8034aec +.copy.table 0xc 0x8034af4 +.zero.table 0x0 0x8034b00 .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa374 0x20001424 -.heap 0x4868 0x2000b798 -.internal_storage 0x30000 0x8034ce0 -.zwave_nvm 0x0 0x8064ce0 -.nvm 0x8000 0x8064ce0 +.bss 0xa380 0x20001424 +.heap 0x4858 0x2000b7a8 +.internal_storage 0x30000 0x8034b00 +.zwave_nvm 0x0 0x8064b00 +.nvm 0x8000 0x8064b00 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6748 0x0 -.debug_info 0xb5ddd7 0x0 -.debug_abbrev 0x15a33 0x0 -.debug_loc 0x42f90 0x0 +.debug_frame 0x67a4 0x0 +.debug_info 0xb5e290 0x0 +.debug_abbrev 0x15a37 0x0 +.debug_loc 0x4336d 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xab98 0x0 -.debug_line 0x4f767 0x0 -.debug_str 0x8eee4 0x0 -Total 0xd1cf24 +.debug_ranges 0xab70 0x0 +.debug_line 0x4f938 0x0 +.debug_str 0x8f014 0x0 +Total 0xd1d90f The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192772 + 192292 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49048 + 49060 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_US_LR_size.txt index 7a1307cfd7a..33a6b40a8fd 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2eaa0 0x8006000 -_cc_handlers_v3 0x18c 0x8034aa0 -_zw_protocol_cmd_handlers 0x70 0x8034c2c -_zw_protocol_cmd_handlers_lr 0x30 0x8034c9c -.ARM.exidx 0x8 0x8034ccc -.copy.table 0xc 0x8034cd4 -.zero.table 0x0 0x8034ce0 +.text 0x2e8c0 0x8006000 +_cc_handlers_v3 0x18c 0x80348c0 +_zw_protocol_cmd_handlers 0x70 0x8034a4c +_zw_protocol_cmd_handlers_lr 0x30 0x8034abc +.ARM.exidx 0x8 0x8034aec +.copy.table 0xc 0x8034af4 +.zero.table 0x0 0x8034b00 .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa374 0x20001424 -.heap 0x4868 0x2000b798 -.internal_storage 0x30000 0x8034ce0 -.zwave_nvm 0x0 0x8064ce0 -.nvm 0x8000 0x8064ce0 +.bss 0xa380 0x20001424 +.heap 0x4858 0x2000b7a8 +.internal_storage 0x30000 0x8034b00 +.zwave_nvm 0x0 0x8064b00 +.nvm 0x8000 0x8064b00 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6748 0x0 -.debug_info 0xb5ddd7 0x0 -.debug_abbrev 0x15a33 0x0 -.debug_loc 0x42f90 0x0 +.debug_frame 0x67a4 0x0 +.debug_info 0xb5e290 0x0 +.debug_abbrev 0x15a37 0x0 +.debug_loc 0x4336d 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xab98 0x0 -.debug_line 0x4f767 0x0 -.debug_str 0x8eeda 0x0 -Total 0xd1cf1a +.debug_ranges 0xab70 0x0 +.debug_line 0x4f938 0x0 +.debug_str 0x8f00a 0x0 +Total 0xd1d905 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192772 + 192292 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49048 + 49060 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_US_size.txt index 6e3788a1105..1c99dec79d6 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4205B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2eaa0 0x8006000 -_cc_handlers_v3 0x18c 0x8034aa0 -_zw_protocol_cmd_handlers 0x70 0x8034c2c -_zw_protocol_cmd_handlers_lr 0x30 0x8034c9c -.ARM.exidx 0x8 0x8034ccc -.copy.table 0xc 0x8034cd4 -.zero.table 0x0 0x8034ce0 +.text 0x2e8c0 0x8006000 +_cc_handlers_v3 0x18c 0x80348c0 +_zw_protocol_cmd_handlers 0x70 0x8034a4c +_zw_protocol_cmd_handlers_lr 0x30 0x8034abc +.ARM.exidx 0x8 0x8034aec +.copy.table 0xc 0x8034af4 +.zero.table 0x0 0x8034b00 .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa374 0x20001424 -.heap 0x4868 0x2000b798 -.internal_storage 0x30000 0x8034ce0 -.zwave_nvm 0x0 0x8064ce0 -.nvm 0x8000 0x8064ce0 +.bss 0xa380 0x20001424 +.heap 0x4858 0x2000b7a8 +.internal_storage 0x30000 0x8034b00 +.zwave_nvm 0x0 0x8064b00 +.nvm 0x8000 0x8064b00 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6748 0x0 -.debug_info 0xb5ddd7 0x0 -.debug_abbrev 0x15a33 0x0 -.debug_loc 0x42f90 0x0 +.debug_frame 0x67a4 0x0 +.debug_info 0xb5e290 0x0 +.debug_abbrev 0x15a37 0x0 +.debug_loc 0x4336d 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xab98 0x0 -.debug_line 0x4f767 0x0 -.debug_str 0x8eee4 0x0 -Total 0xd1cf24 +.debug_ranges 0xab70 0x0 +.debug_line 0x4f938 0x0 +.debug_str 0x8f014 0x0 +Total 0xd1d90f The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 192772 + 192292 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49048 + 49060 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_EU_size.txt index e6bbd2d615d..2860e360d25 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x289d0 0x0 -_cc_handlers_v3 0x18c 0x289d0 -_zw_protocol_cmd_handlers 0x70 0x28b5c -_zw_protocol_cmd_handlers_lr 0x30 0x28bcc -.ARM.exidx 0x8 0x28bfc -.copy.table 0xc 0x28c04 -.zero.table 0x0 0x28c10 +.text 0x28adc 0x0 +_cc_handlers_v3 0x18c 0x28adc +_zw_protocol_cmd_handlers 0x70 0x28c68 +_zw_protocol_cmd_handlers_lr 0x30 0x28cd8 +.ARM.exidx 0x8 0x28d08 +.copy.table 0xc 0x28d10 +.zero.table 0x0 0x28d1c .stack 0x1000 0x20000000 .data 0x3d0 0x20001000 -.bss 0x9988 0x200013d0 -.heap 0x52a8 0x2000ad58 -.internal_storage 0x3a000 0x28c10 -.zwave_nvm 0x3000 0x62c10 -.nvm 0x9000 0x65c10 +.bss 0x9980 0x200013d0 +.heap 0x52b0 0x2000ad50 +.internal_storage 0x3a000 0x28d1c +.zwave_nvm 0x3000 0x62d1c +.nvm 0x9000 0x65d1c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x5e8c 0x0 -.debug_info 0xb1ebb8 0x0 -.debug_abbrev 0x12d64 0x0 -.debug_loc 0x37efc 0x0 +.debug_frame 0x5ed8 0x0 +.debug_info 0xb1ef1b 0x0 +.debug_abbrev 0x12d41 0x0 +.debug_loc 0x38297 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x90a0 0x0 -.debug_line 0x45b1c 0x0 -.debug_str 0x834d6 0x0 -Total 0xcc047d +.debug_ranges 0x9098 0x0 +.debug_line 0x45c47 0x0 +.debug_str 0x83628 0x0 +Total 0xcc0f25 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 167904 + 168172 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46424 + 46416 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_US_LR_size.txt index 7b4e3cc9baf..cf5ffe63476 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x289d0 0x0 -_cc_handlers_v3 0x18c 0x289d0 -_zw_protocol_cmd_handlers 0x70 0x28b5c -_zw_protocol_cmd_handlers_lr 0x30 0x28bcc -.ARM.exidx 0x8 0x28bfc -.copy.table 0xc 0x28c04 -.zero.table 0x0 0x28c10 +.text 0x28adc 0x0 +_cc_handlers_v3 0x18c 0x28adc +_zw_protocol_cmd_handlers 0x70 0x28c68 +_zw_protocol_cmd_handlers_lr 0x30 0x28cd8 +.ARM.exidx 0x8 0x28d08 +.copy.table 0xc 0x28d10 +.zero.table 0x0 0x28d1c .stack 0x1000 0x20000000 .data 0x3d0 0x20001000 -.bss 0x9988 0x200013d0 -.heap 0x52a8 0x2000ad58 -.internal_storage 0x3a000 0x28c10 -.zwave_nvm 0x3000 0x62c10 -.nvm 0x9000 0x65c10 +.bss 0x9980 0x200013d0 +.heap 0x52b0 0x2000ad50 +.internal_storage 0x3a000 0x28d1c +.zwave_nvm 0x3000 0x62d1c +.nvm 0x9000 0x65d1c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x5e8c 0x0 -.debug_info 0xb1ebb8 0x0 -.debug_abbrev 0x12d64 0x0 -.debug_loc 0x37efc 0x0 +.debug_frame 0x5ed8 0x0 +.debug_info 0xb1ef1b 0x0 +.debug_abbrev 0x12d41 0x0 +.debug_loc 0x38297 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x90a0 0x0 -.debug_line 0x45b1c 0x0 -.debug_str 0x834cc 0x0 -Total 0xcc0473 +.debug_ranges 0x9098 0x0 +.debug_line 0x45c47 0x0 +.debug_str 0x8361e 0x0 +Total 0xcc0f1b The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 167904 + 168172 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46424 + 46416 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_US_size.txt index e6bbd2d615d..2860e360d25 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4207A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x289d0 0x0 -_cc_handlers_v3 0x18c 0x289d0 -_zw_protocol_cmd_handlers 0x70 0x28b5c -_zw_protocol_cmd_handlers_lr 0x30 0x28bcc -.ARM.exidx 0x8 0x28bfc -.copy.table 0xc 0x28c04 -.zero.table 0x0 0x28c10 +.text 0x28adc 0x0 +_cc_handlers_v3 0x18c 0x28adc +_zw_protocol_cmd_handlers 0x70 0x28c68 +_zw_protocol_cmd_handlers_lr 0x30 0x28cd8 +.ARM.exidx 0x8 0x28d08 +.copy.table 0xc 0x28d10 +.zero.table 0x0 0x28d1c .stack 0x1000 0x20000000 .data 0x3d0 0x20001000 -.bss 0x9988 0x200013d0 -.heap 0x52a8 0x2000ad58 -.internal_storage 0x3a000 0x28c10 -.zwave_nvm 0x3000 0x62c10 -.nvm 0x9000 0x65c10 +.bss 0x9980 0x200013d0 +.heap 0x52b0 0x2000ad50 +.internal_storage 0x3a000 0x28d1c +.zwave_nvm 0x3000 0x62d1c +.nvm 0x9000 0x65d1c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x5e8c 0x0 -.debug_info 0xb1ebb8 0x0 -.debug_abbrev 0x12d64 0x0 -.debug_loc 0x37efc 0x0 +.debug_frame 0x5ed8 0x0 +.debug_info 0xb1ef1b 0x0 +.debug_abbrev 0x12d41 0x0 +.debug_loc 0x38297 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x90a0 0x0 -.debug_line 0x45b1c 0x0 -.debug_str 0x834d6 0x0 -Total 0xcc047d +.debug_ranges 0x9098 0x0 +.debug_line 0x45c47 0x0 +.debug_str 0x83628 0x0 +Total 0xcc0f25 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 167904 + 168172 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46424 + 46416 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4209A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4209A_REGION_US_LR_size.txt index 93ad0425cee..15d6d924a9c 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4209A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4209A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x28898 0x0 -_cc_handlers_v3 0x18c 0x28898 -_zw_protocol_cmd_handlers 0x70 0x28a24 -_zw_protocol_cmd_handlers_lr 0x30 0x28a94 -.ARM.exidx 0x8 0x28ac4 -.copy.table 0xc 0x28acc -.zero.table 0x0 0x28ad8 +.text 0x289a4 0x0 +_cc_handlers_v3 0x18c 0x289a4 +_zw_protocol_cmd_handlers 0x70 0x28b30 +_zw_protocol_cmd_handlers_lr 0x30 0x28ba0 +.ARM.exidx 0x8 0x28bd0 +.copy.table 0xc 0x28bd8 +.zero.table 0x0 0x28be4 .stack 0x1000 0x20000000 .data 0x3d0 0x20001000 -.bss 0x996c 0x200013d0 -.heap 0x52c0 0x2000ad40 -.internal_storage 0x3a000 0x28ad8 -.zwave_nvm 0x3000 0x62ad8 -.nvm 0x9000 0x65ad8 +.bss 0x9964 0x200013d0 +.heap 0x52c8 0x2000ad38 +.internal_storage 0x3a000 0x28be4 +.zwave_nvm 0x3000 0x62be4 +.nvm 0x9000 0x65be4 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x5eac 0x0 -.debug_info 0xb20037 0x0 -.debug_abbrev 0x13009 0x0 -.debug_loc 0x383b4 0x0 +.debug_frame 0x5ef8 0x0 +.debug_info 0xb2039a 0x0 +.debug_abbrev 0x12fe6 0x0 +.debug_loc 0x38751 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x92d8 0x0 -.debug_line 0x46462 0x0 -.debug_str 0x837fa 0x0 -Total 0xcc2daf +.debug_ranges 0x92d0 0x0 +.debug_line 0x4658d 0x0 +.debug_str 0x8394c 0x0 +Total 0xcc3859 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 167592 + 167860 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 46396 + 46388 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4210A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4210A_REGION_US_LR_size.txt index 88700e4ab01..3ee57d7e798 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4210A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4210A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e51c 0x8006000 -_cc_handlers_v3 0x18c 0x803451c -_zw_protocol_cmd_handlers 0x70 0x80346a8 -_zw_protocol_cmd_handlers_lr 0x30 0x8034718 -.ARM.exidx 0x8 0x8034748 -.copy.table 0xc 0x8034750 -.zero.table 0x0 0x803475c +.text 0x2e33c 0x8006000 +_cc_handlers_v3 0x18c 0x803433c +_zw_protocol_cmd_handlers 0x70 0x80344c8 +_zw_protocol_cmd_handlers_lr 0x30 0x8034538 +.ARM.exidx 0x8 0x8034568 +.copy.table 0xc 0x8034570 +.zero.table 0x0 0x803457c .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa358 0x20001424 -.heap 0x4880 0x2000b780 -.internal_storage 0x30000 0x803475c -.zwave_nvm 0x0 0x806475c -.nvm 0x8000 0x806475c +.bss 0xa364 0x20001424 +.heap 0x4878 0x2000b788 +.internal_storage 0x30000 0x803457c +.zwave_nvm 0x0 0x806457c +.nvm 0x8000 0x806457c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6748 0x0 -.debug_info 0xb5d549 0x0 -.debug_abbrev 0x15981 0x0 -.debug_loc 0x42fa6 0x0 +.debug_frame 0x67a4 0x0 +.debug_info 0xb5da08 0x0 +.debug_abbrev 0x15985 0x0 +.debug_loc 0x4336c 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xaaf8 0x0 -.debug_line 0x4f996 0x0 -.debug_str 0x8e9d7 0x0 -Total 0xd1bcac +.debug_ranges 0xab20 0x0 +.debug_line 0x4fba8 0x0 +.debug_str 0x8eb07 0x0 +Total 0xd1c71f The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 191360 + 190880 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 49020 + 49032 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_EU_size.txt index 01fd52536cb..3c4f6fb3456 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e434 0x8006000 -_cc_handlers_v3 0x18c 0x8034434 -_zw_protocol_cmd_handlers 0x70 0x80345c0 -_zw_protocol_cmd_handlers_lr 0x30 0x8034630 -.ARM.exidx 0x8 0x8034660 -.copy.table 0xc 0x8034668 -.zero.table 0x0 0x8034674 +.text 0x2e690 0x8006000 +_cc_handlers_v3 0x18c 0x8034690 +_zw_protocol_cmd_handlers 0x70 0x803481c +_zw_protocol_cmd_handlers_lr 0x30 0x803488c +.ARM.exidx 0x8 0x80348bc +.copy.table 0xc 0x80348c4 +.zero.table 0x0 0x80348d0 .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa2d8 0x20001424 -.heap 0x34900 0x2000b700 -.internal_storage 0x30000 0x8034674 -.zwave_nvm 0x0 0x8064674 -.nvm 0x8000 0x8064674 +.bss 0xa2e4 0x20001424 +.heap 0x348f8 0x2000b708 +.internal_storage 0x30000 0x80348d0 +.zwave_nvm 0x0 0x80648d0 +.nvm 0x8000 0x80648d0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x66f0 0x0 -.debug_info 0xb5c3c6 0x0 -.debug_abbrev 0x15831 0x0 -.debug_loc 0x42d3c 0x0 +.debug_frame 0x674c 0x0 +.debug_info 0xb5c885 0x0 +.debug_abbrev 0x15835 0x0 +.debug_loc 0x43102 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xaa60 0x0 -.debug_line 0x4f3d9 0x0 -.debug_str 0x8e97f 0x0 -Total 0xd49f82 +.debug_ranges 0xaa88 0x0 +.debug_line 0x4f5e8 0x0 +.debug_str 0x8eaaf 0x0 +Total 0xd4ae2e The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 191128 + 191732 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48892 + 48904 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_US_LR_size.txt index c4346d3a924..910f4caa110 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e434 0x8006000 -_cc_handlers_v3 0x18c 0x8034434 -_zw_protocol_cmd_handlers 0x70 0x80345c0 -_zw_protocol_cmd_handlers_lr 0x30 0x8034630 -.ARM.exidx 0x8 0x8034660 -.copy.table 0xc 0x8034668 -.zero.table 0x0 0x8034674 +.text 0x2e690 0x8006000 +_cc_handlers_v3 0x18c 0x8034690 +_zw_protocol_cmd_handlers 0x70 0x803481c +_zw_protocol_cmd_handlers_lr 0x30 0x803488c +.ARM.exidx 0x8 0x80348bc +.copy.table 0xc 0x80348c4 +.zero.table 0x0 0x80348d0 .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa2d8 0x20001424 -.heap 0x34900 0x2000b700 -.internal_storage 0x30000 0x8034674 -.zwave_nvm 0x0 0x8064674 -.nvm 0x8000 0x8064674 +.bss 0xa2e4 0x20001424 +.heap 0x348f8 0x2000b708 +.internal_storage 0x30000 0x80348d0 +.zwave_nvm 0x0 0x80648d0 +.nvm 0x8000 0x80648d0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x66f0 0x0 -.debug_info 0xb5c3c6 0x0 -.debug_abbrev 0x15831 0x0 -.debug_loc 0x42d3c 0x0 +.debug_frame 0x674c 0x0 +.debug_info 0xb5c885 0x0 +.debug_abbrev 0x15835 0x0 +.debug_loc 0x43102 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xaa60 0x0 -.debug_line 0x4f3d9 0x0 -.debug_str 0x8e975 0x0 -Total 0xd49f78 +.debug_ranges 0xaa88 0x0 +.debug_line 0x4f5e8 0x0 +.debug_str 0x8eaa5 0x0 +Total 0xd4ae24 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 191128 + 191732 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48892 + 48904 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_US_size.txt index 01fd52536cb..3c4f6fb3456 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4400B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e434 0x8006000 -_cc_handlers_v3 0x18c 0x8034434 -_zw_protocol_cmd_handlers 0x70 0x80345c0 -_zw_protocol_cmd_handlers_lr 0x30 0x8034630 -.ARM.exidx 0x8 0x8034660 -.copy.table 0xc 0x8034668 -.zero.table 0x0 0x8034674 +.text 0x2e690 0x8006000 +_cc_handlers_v3 0x18c 0x8034690 +_zw_protocol_cmd_handlers 0x70 0x803481c +_zw_protocol_cmd_handlers_lr 0x30 0x803488c +.ARM.exidx 0x8 0x80348bc +.copy.table 0xc 0x80348c4 +.zero.table 0x0 0x80348d0 .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa2d8 0x20001424 -.heap 0x34900 0x2000b700 -.internal_storage 0x30000 0x8034674 -.zwave_nvm 0x0 0x8064674 -.nvm 0x8000 0x8064674 +.bss 0xa2e4 0x20001424 +.heap 0x348f8 0x2000b708 +.internal_storage 0x30000 0x80348d0 +.zwave_nvm 0x0 0x80648d0 +.nvm 0x8000 0x80648d0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x66f0 0x0 -.debug_info 0xb5c3c6 0x0 -.debug_abbrev 0x15831 0x0 -.debug_loc 0x42d3c 0x0 +.debug_frame 0x674c 0x0 +.debug_info 0xb5c885 0x0 +.debug_abbrev 0x15835 0x0 +.debug_loc 0x43102 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xaa60 0x0 -.debug_line 0x4f3d9 0x0 -.debug_str 0x8e97f 0x0 -Total 0xd49f82 +.debug_ranges 0xaa88 0x0 +.debug_line 0x4f5e8 0x0 +.debug_str 0x8eaaf 0x0 +Total 0xd4ae2e The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 191128 + 191732 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48892 + 48904 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4401B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4401B_REGION_US_LR_size.txt index f32ea8c513b..37399a4d0df 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4401B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_ncp_zniffer_pti_BRD4401B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_ncp_zniffer_pti.out : section size addr -.text 0x2e434 0x8006000 -_cc_handlers_v3 0x18c 0x8034434 -_zw_protocol_cmd_handlers 0x70 0x80345c0 -_zw_protocol_cmd_handlers_lr 0x30 0x8034630 -.ARM.exidx 0x8 0x8034660 -.copy.table 0xc 0x8034668 -.zero.table 0x0 0x8034674 +.text 0x2e690 0x8006000 +_cc_handlers_v3 0x18c 0x8034690 +_zw_protocol_cmd_handlers 0x70 0x803481c +_zw_protocol_cmd_handlers_lr 0x30 0x803488c +.ARM.exidx 0x8 0x80348bc +.copy.table 0xc 0x80348c4 +.zero.table 0x0 0x80348d0 .stack 0x1000 0x20000000 .data 0x424 0x20001000 -.bss 0xa2d8 0x20001424 -.heap 0x34900 0x2000b700 -.internal_storage 0x30000 0x8034674 -.zwave_nvm 0x0 0x8064674 -.nvm 0x8000 0x8064674 +.bss 0xa2e4 0x20001424 +.heap 0x348f8 0x2000b708 +.internal_storage 0x30000 0x80348d0 +.zwave_nvm 0x0 0x80648d0 +.nvm 0x8000 0x80648d0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x66f0 0x0 -.debug_info 0xb5c3ca 0x0 -.debug_abbrev 0x15831 0x0 -.debug_loc 0x42d3c 0x0 +.debug_frame 0x674c 0x0 +.debug_info 0xb5c889 0x0 +.debug_abbrev 0x15835 0x0 +.debug_loc 0x43102 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xaa20 0x0 -.debug_line 0x4f3c7 0x0 -.debug_str 0x8e975 0x0 -Total 0xd49f2a +.debug_ranges 0xaa48 0x0 +.debug_line 0x4f5d6 0x0 +.debug_str 0x8eaa5 0x0 +Total 0xd4add6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 191128 + 191732 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48892 + 48904 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_EU_size.txt index 80a98b45197..49d1bcf2ff6 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x2b4e8 0x0 -_cc_handlers_v3 0x240 0x2b4e8 -_zw_protocol_cmd_handlers 0x70 0x2b728 -_zw_protocol_cmd_handlers_lr 0x30 0x2b798 -.ARM.exidx 0x8 0x2b7c8 -.copy.table 0xc 0x2b7d0 -.zero.table 0x0 0x2b7dc +.text 0x2b64c 0x0 +_cc_handlers_v3 0x240 0x2b64c +_zw_protocol_cmd_handlers 0x70 0x2b88c +_zw_protocol_cmd_handlers_lr 0x30 0x2b8fc +.ARM.exidx 0x8 0x2b92c +.copy.table 0xc 0x2b934 +.zero.table 0x0 0x2b940 .stack 0x1000 0x20000000 -.data 0x3e4 0x20001000 -.bss 0xa060 0x200013e4 -.heap 0x4bb8 0x2000b448 -.internal_storage 0x3a000 0x2b7dc -.zwave_nvm 0x3000 0x657dc -.nvm 0x9000 0x687dc +.data 0x3e8 0x20001000 +.bss 0xa058 0x200013e8 +.heap 0x4bc0 0x2000b440 +.internal_storage 0x3a000 0x2b940 +.zwave_nvm 0x3000 0x65940 +.nvm 0x9000 0x68940 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6608 0x0 -.debug_info 0xd267d0 0x0 -.debug_abbrev 0x14683 0x0 -.debug_loc 0x3b5ec 0x0 +.debug_frame 0x6658 0x0 +.debug_info 0xd26bb6 0x0 +.debug_abbrev 0x14660 0x0 +.debug_loc 0x3b86d 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0x9f80 0x0 -.debug_line 0x4bf78 0x0 -.debug_str 0x877b4 0x0 -Total 0xedba22 +.debug_ranges 0x9f58 0x0 +.debug_line 0x4c102 0x0 +.debug_str 0x87917 0x0 +Total 0xedc4e3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179136 + 179496 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48196 + 48192 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_US_LR_size.txt index f65276ba280..bd782266b1a 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x2b4e8 0x0 -_cc_handlers_v3 0x240 0x2b4e8 -_zw_protocol_cmd_handlers 0x70 0x2b728 -_zw_protocol_cmd_handlers_lr 0x30 0x2b798 -.ARM.exidx 0x8 0x2b7c8 -.copy.table 0xc 0x2b7d0 -.zero.table 0x0 0x2b7dc +.text 0x2b64c 0x0 +_cc_handlers_v3 0x240 0x2b64c +_zw_protocol_cmd_handlers 0x70 0x2b88c +_zw_protocol_cmd_handlers_lr 0x30 0x2b8fc +.ARM.exidx 0x8 0x2b92c +.copy.table 0xc 0x2b934 +.zero.table 0x0 0x2b940 .stack 0x1000 0x20000000 -.data 0x3e4 0x20001000 -.bss 0xa060 0x200013e4 -.heap 0x4bb8 0x2000b448 -.internal_storage 0x3a000 0x2b7dc -.zwave_nvm 0x3000 0x657dc -.nvm 0x9000 0x687dc +.data 0x3e8 0x20001000 +.bss 0xa058 0x200013e8 +.heap 0x4bc0 0x2000b440 +.internal_storage 0x3a000 0x2b940 +.zwave_nvm 0x3000 0x65940 +.nvm 0x9000 0x68940 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6608 0x0 -.debug_info 0xd267d0 0x0 -.debug_abbrev 0x14683 0x0 -.debug_loc 0x3b5ec 0x0 +.debug_frame 0x6658 0x0 +.debug_info 0xd26bb6 0x0 +.debug_abbrev 0x14660 0x0 +.debug_loc 0x3b86d 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0x9f80 0x0 -.debug_line 0x4bf78 0x0 -.debug_str 0x877aa 0x0 -Total 0xedba18 +.debug_ranges 0x9f58 0x0 +.debug_line 0x4c102 0x0 +.debug_str 0x8790d 0x0 +Total 0xedc4d9 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179136 + 179496 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48196 + 48192 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_US_size.txt index 80a98b45197..49d1bcf2ff6 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4202A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x2b4e8 0x0 -_cc_handlers_v3 0x240 0x2b4e8 -_zw_protocol_cmd_handlers 0x70 0x2b728 -_zw_protocol_cmd_handlers_lr 0x30 0x2b798 -.ARM.exidx 0x8 0x2b7c8 -.copy.table 0xc 0x2b7d0 -.zero.table 0x0 0x2b7dc +.text 0x2b64c 0x0 +_cc_handlers_v3 0x240 0x2b64c +_zw_protocol_cmd_handlers 0x70 0x2b88c +_zw_protocol_cmd_handlers_lr 0x30 0x2b8fc +.ARM.exidx 0x8 0x2b92c +.copy.table 0xc 0x2b934 +.zero.table 0x0 0x2b940 .stack 0x1000 0x20000000 -.data 0x3e4 0x20001000 -.bss 0xa060 0x200013e4 -.heap 0x4bb8 0x2000b448 -.internal_storage 0x3a000 0x2b7dc -.zwave_nvm 0x3000 0x657dc -.nvm 0x9000 0x687dc +.data 0x3e8 0x20001000 +.bss 0xa058 0x200013e8 +.heap 0x4bc0 0x2000b440 +.internal_storage 0x3a000 0x2b940 +.zwave_nvm 0x3000 0x65940 +.nvm 0x9000 0x68940 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6608 0x0 -.debug_info 0xd267d0 0x0 -.debug_abbrev 0x14683 0x0 -.debug_loc 0x3b5ec 0x0 +.debug_frame 0x6658 0x0 +.debug_info 0xd26bb6 0x0 +.debug_abbrev 0x14660 0x0 +.debug_loc 0x3b86d 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0x9f80 0x0 -.debug_line 0x4bf78 0x0 -.debug_str 0x877b4 0x0 -Total 0xedba22 +.debug_ranges 0x9f58 0x0 +.debug_line 0x4c102 0x0 +.debug_str 0x87917 0x0 +Total 0xedc4e3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179136 + 179496 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48196 + 48192 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_EU_size.txt index d0495380785..c6668a50660 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x313a0 0x8006000 -_cc_handlers_v3 0x240 0x80373a0 -_zw_protocol_cmd_handlers 0x70 0x80375e0 -_zw_protocol_cmd_handlers_lr 0x30 0x8037650 -.ARM.exidx 0x8 0x8037680 -.copy.table 0xc 0x8037688 -.zero.table 0x0 0x8037694 +.text 0x31198 0x8006000 +_cc_handlers_v3 0x240 0x8037198 +_zw_protocol_cmd_handlers 0x70 0x80373d8 +_zw_protocol_cmd_handlers_lr 0x30 0x8037448 +.ARM.exidx 0x8 0x8037478 +.copy.table 0xc 0x8037480 +.zero.table 0x0 0x803748c .stack 0x1000 0x20000000 -.data 0x4d4 0x20001000 -.bss 0xaac8 0x200014d4 +.data 0x4d8 0x20001000 +.bss 0xaac8 0x200014d8 .heap 0x4060 0x2000bfa0 -.internal_storage 0x30000 0x8037694 -.zwave_nvm 0x0 0x8067694 -.nvm 0x8000 0x8067694 +.internal_storage 0x30000 0x803748c +.zwave_nvm 0x0 0x806748c +.nvm 0x8000 0x806748c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f70 0x0 -.debug_info 0xd65f37 0x0 -.debug_abbrev 0x16fb9 0x0 -.debug_loc 0x48205 0x0 +.debug_frame 0x6fc4 0x0 +.debug_info 0xd66475 0x0 +.debug_abbrev 0x16fbd 0x0 +.debug_loc 0x4855a 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb800 0x0 -.debug_line 0x55648 0x0 -.debug_str 0x92134 0x0 -Total 0xf387a8 +.debug_ranges 0xb838 0x0 +.debug_line 0x55864 0x0 +.debug_str 0x92275 0x0 +Total 0xf39224 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203624 + 203108 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51100 + 51104 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_US_LR_size.txt index 63792c409c3..e8af1927632 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x313a0 0x8006000 -_cc_handlers_v3 0x240 0x80373a0 -_zw_protocol_cmd_handlers 0x70 0x80375e0 -_zw_protocol_cmd_handlers_lr 0x30 0x8037650 -.ARM.exidx 0x8 0x8037680 -.copy.table 0xc 0x8037688 -.zero.table 0x0 0x8037694 +.text 0x31198 0x8006000 +_cc_handlers_v3 0x240 0x8037198 +_zw_protocol_cmd_handlers 0x70 0x80373d8 +_zw_protocol_cmd_handlers_lr 0x30 0x8037448 +.ARM.exidx 0x8 0x8037478 +.copy.table 0xc 0x8037480 +.zero.table 0x0 0x803748c .stack 0x1000 0x20000000 -.data 0x4d4 0x20001000 -.bss 0xaac8 0x200014d4 +.data 0x4d8 0x20001000 +.bss 0xaac8 0x200014d8 .heap 0x4060 0x2000bfa0 -.internal_storage 0x30000 0x8037694 -.zwave_nvm 0x0 0x8067694 -.nvm 0x8000 0x8067694 +.internal_storage 0x30000 0x803748c +.zwave_nvm 0x0 0x806748c +.nvm 0x8000 0x806748c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f70 0x0 -.debug_info 0xd65f37 0x0 -.debug_abbrev 0x16fb9 0x0 -.debug_loc 0x48205 0x0 +.debug_frame 0x6fc4 0x0 +.debug_info 0xd66475 0x0 +.debug_abbrev 0x16fbd 0x0 +.debug_loc 0x4855a 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb800 0x0 -.debug_line 0x55648 0x0 -.debug_str 0x9212a 0x0 -Total 0xf3879e +.debug_ranges 0xb838 0x0 +.debug_line 0x55864 0x0 +.debug_str 0x9226b 0x0 +Total 0xf3921a The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203624 + 203108 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51100 + 51104 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_US_size.txt index d0495380785..c6668a50660 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204C_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x313a0 0x8006000 -_cc_handlers_v3 0x240 0x80373a0 -_zw_protocol_cmd_handlers 0x70 0x80375e0 -_zw_protocol_cmd_handlers_lr 0x30 0x8037650 -.ARM.exidx 0x8 0x8037680 -.copy.table 0xc 0x8037688 -.zero.table 0x0 0x8037694 +.text 0x31198 0x8006000 +_cc_handlers_v3 0x240 0x8037198 +_zw_protocol_cmd_handlers 0x70 0x80373d8 +_zw_protocol_cmd_handlers_lr 0x30 0x8037448 +.ARM.exidx 0x8 0x8037478 +.copy.table 0xc 0x8037480 +.zero.table 0x0 0x803748c .stack 0x1000 0x20000000 -.data 0x4d4 0x20001000 -.bss 0xaac8 0x200014d4 +.data 0x4d8 0x20001000 +.bss 0xaac8 0x200014d8 .heap 0x4060 0x2000bfa0 -.internal_storage 0x30000 0x8037694 -.zwave_nvm 0x0 0x8067694 -.nvm 0x8000 0x8067694 +.internal_storage 0x30000 0x803748c +.zwave_nvm 0x0 0x806748c +.nvm 0x8000 0x806748c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f70 0x0 -.debug_info 0xd65f37 0x0 -.debug_abbrev 0x16fb9 0x0 -.debug_loc 0x48205 0x0 +.debug_frame 0x6fc4 0x0 +.debug_info 0xd66475 0x0 +.debug_abbrev 0x16fbd 0x0 +.debug_loc 0x4855a 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb800 0x0 -.debug_line 0x55648 0x0 -.debug_str 0x92134 0x0 -Total 0xf387a8 +.debug_ranges 0xb838 0x0 +.debug_line 0x55864 0x0 +.debug_str 0x92275 0x0 +Total 0xf39224 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203624 + 203108 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51100 + 51104 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_EU_size.txt index 9c3b08f7aba..625ca5157cf 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x313e0 0x8006000 -_cc_handlers_v3 0x240 0x80373e0 -_zw_protocol_cmd_handlers 0x70 0x8037620 -_zw_protocol_cmd_handlers_lr 0x30 0x8037690 -.ARM.exidx 0x8 0x80376c0 -.copy.table 0xc 0x80376c8 -.zero.table 0x0 0x80376d4 +.text 0x311d0 0x8006000 +_cc_handlers_v3 0x240 0x80371d0 +_zw_protocol_cmd_handlers 0x70 0x8037410 +_zw_protocol_cmd_handlers_lr 0x30 0x8037480 +.ARM.exidx 0x8 0x80374b0 +.copy.table 0xc 0x80374b8 +.zero.table 0x0 0x80374c4 .stack 0x1000 0x20000000 -.data 0x4d4 0x20001000 -.bss 0xaac8 0x200014d4 +.data 0x4d8 0x20001000 +.bss 0xaac8 0x200014d8 .heap 0x4060 0x2000bfa0 -.internal_storage 0x30000 0x80376d4 -.zwave_nvm 0x0 0x80676d4 -.nvm 0x8000 0x80676d4 +.internal_storage 0x30000 0x80374c4 +.zwave_nvm 0x0 0x80674c4 +.nvm 0x8000 0x80674c4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f70 0x0 -.debug_info 0xd6618b 0x0 -.debug_abbrev 0x1705d 0x0 -.debug_loc 0x4826a 0x0 +.debug_frame 0x6fc4 0x0 +.debug_info 0xd666c9 0x0 +.debug_abbrev 0x17061 0x0 +.debug_loc 0x485bf 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb828 0x0 -.debug_line 0x55867 0x0 -.debug_str 0x92307 0x0 -Total 0xf38f5f +.debug_ranges 0xb860 0x0 +.debug_line 0x55aa3 0x0 +.debug_str 0x92448 0x0 +Total 0xf399f3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203688 + 203164 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51100 + 51104 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_US_LR_size.txt index c241a9790c9..101ede52270 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x313e0 0x8006000 -_cc_handlers_v3 0x240 0x80373e0 -_zw_protocol_cmd_handlers 0x70 0x8037620 -_zw_protocol_cmd_handlers_lr 0x30 0x8037690 -.ARM.exidx 0x8 0x80376c0 -.copy.table 0xc 0x80376c8 -.zero.table 0x0 0x80376d4 +.text 0x311d0 0x8006000 +_cc_handlers_v3 0x240 0x80371d0 +_zw_protocol_cmd_handlers 0x70 0x8037410 +_zw_protocol_cmd_handlers_lr 0x30 0x8037480 +.ARM.exidx 0x8 0x80374b0 +.copy.table 0xc 0x80374b8 +.zero.table 0x0 0x80374c4 .stack 0x1000 0x20000000 -.data 0x4d4 0x20001000 -.bss 0xaac8 0x200014d4 +.data 0x4d8 0x20001000 +.bss 0xaac8 0x200014d8 .heap 0x4060 0x2000bfa0 -.internal_storage 0x30000 0x80376d4 -.zwave_nvm 0x0 0x80676d4 -.nvm 0x8000 0x80676d4 +.internal_storage 0x30000 0x80374c4 +.zwave_nvm 0x0 0x80674c4 +.nvm 0x8000 0x80674c4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f70 0x0 -.debug_info 0xd6618b 0x0 -.debug_abbrev 0x1705d 0x0 -.debug_loc 0x4826a 0x0 +.debug_frame 0x6fc4 0x0 +.debug_info 0xd666c9 0x0 +.debug_abbrev 0x17061 0x0 +.debug_loc 0x485bf 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb828 0x0 -.debug_line 0x55867 0x0 -.debug_str 0x922fd 0x0 -Total 0xf38f55 +.debug_ranges 0xb860 0x0 +.debug_line 0x55aa3 0x0 +.debug_str 0x9243e 0x0 +Total 0xf399e9 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203688 + 203164 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51100 + 51104 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_US_size.txt index 9c3b08f7aba..625ca5157cf 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4204D_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x313e0 0x8006000 -_cc_handlers_v3 0x240 0x80373e0 -_zw_protocol_cmd_handlers 0x70 0x8037620 -_zw_protocol_cmd_handlers_lr 0x30 0x8037690 -.ARM.exidx 0x8 0x80376c0 -.copy.table 0xc 0x80376c8 -.zero.table 0x0 0x80376d4 +.text 0x311d0 0x8006000 +_cc_handlers_v3 0x240 0x80371d0 +_zw_protocol_cmd_handlers 0x70 0x8037410 +_zw_protocol_cmd_handlers_lr 0x30 0x8037480 +.ARM.exidx 0x8 0x80374b0 +.copy.table 0xc 0x80374b8 +.zero.table 0x0 0x80374c4 .stack 0x1000 0x20000000 -.data 0x4d4 0x20001000 -.bss 0xaac8 0x200014d4 +.data 0x4d8 0x20001000 +.bss 0xaac8 0x200014d8 .heap 0x4060 0x2000bfa0 -.internal_storage 0x30000 0x80376d4 -.zwave_nvm 0x0 0x80676d4 -.nvm 0x8000 0x80676d4 +.internal_storage 0x30000 0x80374c4 +.zwave_nvm 0x0 0x80674c4 +.nvm 0x8000 0x80674c4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f70 0x0 -.debug_info 0xd6618b 0x0 -.debug_abbrev 0x1705d 0x0 -.debug_loc 0x4826a 0x0 +.debug_frame 0x6fc4 0x0 +.debug_info 0xd666c9 0x0 +.debug_abbrev 0x17061 0x0 +.debug_loc 0x485bf 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb828 0x0 -.debug_line 0x55867 0x0 -.debug_str 0x92307 0x0 -Total 0xf38f5f +.debug_ranges 0xb860 0x0 +.debug_line 0x55aa3 0x0 +.debug_str 0x92448 0x0 +Total 0xf399f3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203688 + 203164 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51100 + 51104 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_EU_size.txt index f72115d921e..caa3a594e5a 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x30fb4 0x8006000 -_cc_handlers_v3 0x240 0x8036fb4 -_zw_protocol_cmd_handlers 0x70 0x80371f4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037264 -.ARM.exidx 0x8 0x8037294 -.copy.table 0xc 0x803729c -.zero.table 0x0 0x80372a8 +.text 0x30dec 0x8006000 +_cc_handlers_v3 0x240 0x8036dec +_zw_protocol_cmd_handlers 0x70 0x803702c +_zw_protocol_cmd_handlers_lr 0x30 0x803709c +.ARM.exidx 0x8 0x80370cc +.copy.table 0xc 0x80370d4 +.zero.table 0x0 0x80370e0 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xa968 0x200014d8 -.heap 0x41c0 0x2000be40 -.internal_storage 0x30000 0x80372a8 -.zwave_nvm 0x0 0x80672a8 -.nvm 0x8000 0x80672a8 +.data 0x4dc 0x20001000 +.bss 0xa970 0x200014dc +.heap 0x41b0 0x2000be50 +.internal_storage 0x30000 0x80370e0 +.zwave_nvm 0x0 0x80670e0 +.nvm 0x8000 0x80670e0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6de0 0x0 -.debug_info 0xd63e50 0x0 -.debug_abbrev 0x16eca 0x0 -.debug_loc 0x474ca 0x0 +.debug_frame 0x6e38 0x0 +.debug_info 0xd64383 0x0 +.debug_abbrev 0x16edf 0x0 +.debug_loc 0x47851 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb888 0x0 -.debug_line 0x54ba8 0x0 -.debug_str 0x921ae 0x0 -Total 0xf349c9 +.debug_ranges 0xb8b8 0x0 +.debug_line 0x54df4 0x0 +.debug_str 0x922ef 0x0 +Total 0xf354e1 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202624 + 202172 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50752 + 50764 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_US_LR_size.txt index 848eae7c130..4587f7bd2fc 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x30fb4 0x8006000 -_cc_handlers_v3 0x240 0x8036fb4 -_zw_protocol_cmd_handlers 0x70 0x80371f4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037264 -.ARM.exidx 0x8 0x8037294 -.copy.table 0xc 0x803729c -.zero.table 0x0 0x80372a8 +.text 0x30dec 0x8006000 +_cc_handlers_v3 0x240 0x8036dec +_zw_protocol_cmd_handlers 0x70 0x803702c +_zw_protocol_cmd_handlers_lr 0x30 0x803709c +.ARM.exidx 0x8 0x80370cc +.copy.table 0xc 0x80370d4 +.zero.table 0x0 0x80370e0 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xa968 0x200014d8 -.heap 0x41c0 0x2000be40 -.internal_storage 0x30000 0x80372a8 -.zwave_nvm 0x0 0x80672a8 -.nvm 0x8000 0x80672a8 +.data 0x4dc 0x20001000 +.bss 0xa970 0x200014dc +.heap 0x41b0 0x2000be50 +.internal_storage 0x30000 0x80370e0 +.zwave_nvm 0x0 0x80670e0 +.nvm 0x8000 0x80670e0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6de0 0x0 -.debug_info 0xd63e50 0x0 -.debug_abbrev 0x16eca 0x0 -.debug_loc 0x474ca 0x0 +.debug_frame 0x6e38 0x0 +.debug_info 0xd64383 0x0 +.debug_abbrev 0x16edf 0x0 +.debug_loc 0x47851 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb888 0x0 -.debug_line 0x54ba8 0x0 -.debug_str 0x921a4 0x0 -Total 0xf349bf +.debug_ranges 0xb8b8 0x0 +.debug_line 0x54df4 0x0 +.debug_str 0x922e5 0x0 +Total 0xf354d7 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202624 + 202172 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50752 + 50764 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_US_size.txt index f72115d921e..caa3a594e5a 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x30fb4 0x8006000 -_cc_handlers_v3 0x240 0x8036fb4 -_zw_protocol_cmd_handlers 0x70 0x80371f4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037264 -.ARM.exidx 0x8 0x8037294 -.copy.table 0xc 0x803729c -.zero.table 0x0 0x80372a8 +.text 0x30dec 0x8006000 +_cc_handlers_v3 0x240 0x8036dec +_zw_protocol_cmd_handlers 0x70 0x803702c +_zw_protocol_cmd_handlers_lr 0x30 0x803709c +.ARM.exidx 0x8 0x80370cc +.copy.table 0xc 0x80370d4 +.zero.table 0x0 0x80370e0 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xa968 0x200014d8 -.heap 0x41c0 0x2000be40 -.internal_storage 0x30000 0x80372a8 -.zwave_nvm 0x0 0x80672a8 -.nvm 0x8000 0x80672a8 +.data 0x4dc 0x20001000 +.bss 0xa970 0x200014dc +.heap 0x41b0 0x2000be50 +.internal_storage 0x30000 0x80370e0 +.zwave_nvm 0x0 0x80670e0 +.nvm 0x8000 0x80670e0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6de0 0x0 -.debug_info 0xd63e50 0x0 -.debug_abbrev 0x16eca 0x0 -.debug_loc 0x474ca 0x0 +.debug_frame 0x6e38 0x0 +.debug_info 0xd64383 0x0 +.debug_abbrev 0x16edf 0x0 +.debug_loc 0x47851 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb888 0x0 -.debug_line 0x54ba8 0x0 -.debug_str 0x921ae 0x0 -Total 0xf349c9 +.debug_ranges 0xb8b8 0x0 +.debug_line 0x54df4 0x0 +.debug_str 0x922ef 0x0 +Total 0xf354e1 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202624 + 202172 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50752 + 50764 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_EU_size.txt index 7113b9ea7f8..759fdbc3894 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x31974 0x8006000 -_cc_handlers_v3 0x240 0x8037974 -_zw_protocol_cmd_handlers 0x70 0x8037bb4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037c24 -.ARM.exidx 0x8 0x8037c54 -.copy.table 0xc 0x8037c5c -.zero.table 0x0 0x8037c68 +.text 0x3176c 0x8006000 +_cc_handlers_v3 0x240 0x803776c +_zw_protocol_cmd_handlers 0x70 0x80379ac +_zw_protocol_cmd_handlers_lr 0x30 0x8037a1c +.ARM.exidx 0x8 0x8037a4c +.copy.table 0xc 0x8037a54 +.zero.table 0x0 0x8037a60 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xaae0 0x200014d8 -.heap 0x4048 0x2000bfb8 -.internal_storage 0x30000 0x8037c68 -.zwave_nvm 0x0 0x8067c68 -.nvm 0x8000 0x8067c68 +.data 0x4dc 0x20001000 +.bss 0xaae8 0x200014dc +.heap 0x4038 0x2000bfc8 +.internal_storage 0x30000 0x8037a60 +.zwave_nvm 0x0 0x8067a60 +.nvm 0x8000 0x8067a60 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f70 0x0 -.debug_info 0xd66a1f 0x0 -.debug_abbrev 0x1710f 0x0 -.debug_loc 0x4824a 0x0 +.debug_frame 0x6fc4 0x0 +.debug_info 0xd66f5d 0x0 +.debug_abbrev 0x17113 0x0 +.debug_loc 0x485aa 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb800 0x0 -.debug_line 0x555cc 0x0 -.debug_str 0x92802 0x0 -Total 0xf3a09d +.debug_ranges 0xb838 0x0 +.debug_line 0x557e9 0x0 +.debug_str 0x92943 0x0 +Total 0xf3ab1d The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 205120 + 204604 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51128 + 51140 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_US_LR_size.txt index 14c6856ca19..ea826d46a37 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x31974 0x8006000 -_cc_handlers_v3 0x240 0x8037974 -_zw_protocol_cmd_handlers 0x70 0x8037bb4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037c24 -.ARM.exidx 0x8 0x8037c54 -.copy.table 0xc 0x8037c5c -.zero.table 0x0 0x8037c68 +.text 0x3176c 0x8006000 +_cc_handlers_v3 0x240 0x803776c +_zw_protocol_cmd_handlers 0x70 0x80379ac +_zw_protocol_cmd_handlers_lr 0x30 0x8037a1c +.ARM.exidx 0x8 0x8037a4c +.copy.table 0xc 0x8037a54 +.zero.table 0x0 0x8037a60 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xaae0 0x200014d8 -.heap 0x4048 0x2000bfb8 -.internal_storage 0x30000 0x8037c68 -.zwave_nvm 0x0 0x8067c68 -.nvm 0x8000 0x8067c68 +.data 0x4dc 0x20001000 +.bss 0xaae8 0x200014dc +.heap 0x4038 0x2000bfc8 +.internal_storage 0x30000 0x8037a60 +.zwave_nvm 0x0 0x8067a60 +.nvm 0x8000 0x8067a60 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f70 0x0 -.debug_info 0xd66a1f 0x0 -.debug_abbrev 0x1710f 0x0 -.debug_loc 0x4824a 0x0 +.debug_frame 0x6fc4 0x0 +.debug_info 0xd66f5d 0x0 +.debug_abbrev 0x17113 0x0 +.debug_loc 0x485aa 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb800 0x0 -.debug_line 0x555cc 0x0 -.debug_str 0x927f8 0x0 -Total 0xf3a093 +.debug_ranges 0xb838 0x0 +.debug_line 0x557e9 0x0 +.debug_str 0x92939 0x0 +Total 0xf3ab13 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 205120 + 204604 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51128 + 51140 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_US_size.txt index 7113b9ea7f8..759fdbc3894 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4205B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x31974 0x8006000 -_cc_handlers_v3 0x240 0x8037974 -_zw_protocol_cmd_handlers 0x70 0x8037bb4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037c24 -.ARM.exidx 0x8 0x8037c54 -.copy.table 0xc 0x8037c5c -.zero.table 0x0 0x8037c68 +.text 0x3176c 0x8006000 +_cc_handlers_v3 0x240 0x803776c +_zw_protocol_cmd_handlers 0x70 0x80379ac +_zw_protocol_cmd_handlers_lr 0x30 0x8037a1c +.ARM.exidx 0x8 0x8037a4c +.copy.table 0xc 0x8037a54 +.zero.table 0x0 0x8037a60 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xaae0 0x200014d8 -.heap 0x4048 0x2000bfb8 -.internal_storage 0x30000 0x8037c68 -.zwave_nvm 0x0 0x8067c68 -.nvm 0x8000 0x8067c68 +.data 0x4dc 0x20001000 +.bss 0xaae8 0x200014dc +.heap 0x4038 0x2000bfc8 +.internal_storage 0x30000 0x8037a60 +.zwave_nvm 0x0 0x8067a60 +.nvm 0x8000 0x8067a60 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f70 0x0 -.debug_info 0xd66a1f 0x0 -.debug_abbrev 0x1710f 0x0 -.debug_loc 0x4824a 0x0 +.debug_frame 0x6fc4 0x0 +.debug_info 0xd66f5d 0x0 +.debug_abbrev 0x17113 0x0 +.debug_loc 0x485aa 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb800 0x0 -.debug_line 0x555cc 0x0 -.debug_str 0x92802 0x0 -Total 0xf3a09d +.debug_ranges 0xb838 0x0 +.debug_line 0x557e9 0x0 +.debug_str 0x92943 0x0 +Total 0xf3ab1d The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 205120 + 204604 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51128 + 51140 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_EU_size.txt index 80a98b45197..49d1bcf2ff6 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x2b4e8 0x0 -_cc_handlers_v3 0x240 0x2b4e8 -_zw_protocol_cmd_handlers 0x70 0x2b728 -_zw_protocol_cmd_handlers_lr 0x30 0x2b798 -.ARM.exidx 0x8 0x2b7c8 -.copy.table 0xc 0x2b7d0 -.zero.table 0x0 0x2b7dc +.text 0x2b64c 0x0 +_cc_handlers_v3 0x240 0x2b64c +_zw_protocol_cmd_handlers 0x70 0x2b88c +_zw_protocol_cmd_handlers_lr 0x30 0x2b8fc +.ARM.exidx 0x8 0x2b92c +.copy.table 0xc 0x2b934 +.zero.table 0x0 0x2b940 .stack 0x1000 0x20000000 -.data 0x3e4 0x20001000 -.bss 0xa060 0x200013e4 -.heap 0x4bb8 0x2000b448 -.internal_storage 0x3a000 0x2b7dc -.zwave_nvm 0x3000 0x657dc -.nvm 0x9000 0x687dc +.data 0x3e8 0x20001000 +.bss 0xa058 0x200013e8 +.heap 0x4bc0 0x2000b440 +.internal_storage 0x3a000 0x2b940 +.zwave_nvm 0x3000 0x65940 +.nvm 0x9000 0x68940 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6608 0x0 -.debug_info 0xd267d0 0x0 -.debug_abbrev 0x14683 0x0 -.debug_loc 0x3b5ec 0x0 +.debug_frame 0x6658 0x0 +.debug_info 0xd26bb6 0x0 +.debug_abbrev 0x14660 0x0 +.debug_loc 0x3b86d 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0x9f80 0x0 -.debug_line 0x4bf78 0x0 -.debug_str 0x877b4 0x0 -Total 0xedba22 +.debug_ranges 0x9f58 0x0 +.debug_line 0x4c102 0x0 +.debug_str 0x87917 0x0 +Total 0xedc4e3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179136 + 179496 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48196 + 48192 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_US_LR_size.txt index f65276ba280..bd782266b1a 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x2b4e8 0x0 -_cc_handlers_v3 0x240 0x2b4e8 -_zw_protocol_cmd_handlers 0x70 0x2b728 -_zw_protocol_cmd_handlers_lr 0x30 0x2b798 -.ARM.exidx 0x8 0x2b7c8 -.copy.table 0xc 0x2b7d0 -.zero.table 0x0 0x2b7dc +.text 0x2b64c 0x0 +_cc_handlers_v3 0x240 0x2b64c +_zw_protocol_cmd_handlers 0x70 0x2b88c +_zw_protocol_cmd_handlers_lr 0x30 0x2b8fc +.ARM.exidx 0x8 0x2b92c +.copy.table 0xc 0x2b934 +.zero.table 0x0 0x2b940 .stack 0x1000 0x20000000 -.data 0x3e4 0x20001000 -.bss 0xa060 0x200013e4 -.heap 0x4bb8 0x2000b448 -.internal_storage 0x3a000 0x2b7dc -.zwave_nvm 0x3000 0x657dc -.nvm 0x9000 0x687dc +.data 0x3e8 0x20001000 +.bss 0xa058 0x200013e8 +.heap 0x4bc0 0x2000b440 +.internal_storage 0x3a000 0x2b940 +.zwave_nvm 0x3000 0x65940 +.nvm 0x9000 0x68940 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6608 0x0 -.debug_info 0xd267d0 0x0 -.debug_abbrev 0x14683 0x0 -.debug_loc 0x3b5ec 0x0 +.debug_frame 0x6658 0x0 +.debug_info 0xd26bb6 0x0 +.debug_abbrev 0x14660 0x0 +.debug_loc 0x3b86d 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0x9f80 0x0 -.debug_line 0x4bf78 0x0 -.debug_str 0x877aa 0x0 -Total 0xedba18 +.debug_ranges 0x9f58 0x0 +.debug_line 0x4c102 0x0 +.debug_str 0x8790d 0x0 +Total 0xedc4d9 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179136 + 179496 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48196 + 48192 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_US_size.txt index 80a98b45197..49d1bcf2ff6 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4207A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x2b4e8 0x0 -_cc_handlers_v3 0x240 0x2b4e8 -_zw_protocol_cmd_handlers 0x70 0x2b728 -_zw_protocol_cmd_handlers_lr 0x30 0x2b798 -.ARM.exidx 0x8 0x2b7c8 -.copy.table 0xc 0x2b7d0 -.zero.table 0x0 0x2b7dc +.text 0x2b64c 0x0 +_cc_handlers_v3 0x240 0x2b64c +_zw_protocol_cmd_handlers 0x70 0x2b88c +_zw_protocol_cmd_handlers_lr 0x30 0x2b8fc +.ARM.exidx 0x8 0x2b92c +.copy.table 0xc 0x2b934 +.zero.table 0x0 0x2b940 .stack 0x1000 0x20000000 -.data 0x3e4 0x20001000 -.bss 0xa060 0x200013e4 -.heap 0x4bb8 0x2000b448 -.internal_storage 0x3a000 0x2b7dc -.zwave_nvm 0x3000 0x657dc -.nvm 0x9000 0x687dc +.data 0x3e8 0x20001000 +.bss 0xa058 0x200013e8 +.heap 0x4bc0 0x2000b440 +.internal_storage 0x3a000 0x2b940 +.zwave_nvm 0x3000 0x65940 +.nvm 0x9000 0x68940 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6608 0x0 -.debug_info 0xd267d0 0x0 -.debug_abbrev 0x14683 0x0 -.debug_loc 0x3b5ec 0x0 +.debug_frame 0x6658 0x0 +.debug_info 0xd26bb6 0x0 +.debug_abbrev 0x14660 0x0 +.debug_loc 0x3b86d 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0x9f80 0x0 -.debug_line 0x4bf78 0x0 -.debug_str 0x877b4 0x0 -Total 0xedba22 +.debug_ranges 0x9f58 0x0 +.debug_line 0x4c102 0x0 +.debug_str 0x87917 0x0 +Total 0xedc4e3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179136 + 179496 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48196 + 48192 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4209A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4209A_REGION_US_LR_size.txt index d88991e2402..9bbac61fead 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4209A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4209A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x2b3a8 0x0 -_cc_handlers_v3 0x240 0x2b3a8 -_zw_protocol_cmd_handlers 0x70 0x2b5e8 -_zw_protocol_cmd_handlers_lr 0x30 0x2b658 -.ARM.exidx 0x8 0x2b688 -.copy.table 0xc 0x2b690 -.zero.table 0x0 0x2b69c +.text 0x2b50c 0x0 +_cc_handlers_v3 0x240 0x2b50c +_zw_protocol_cmd_handlers 0x70 0x2b74c +_zw_protocol_cmd_handlers_lr 0x30 0x2b7bc +.ARM.exidx 0x8 0x2b7ec +.copy.table 0xc 0x2b7f4 +.zero.table 0x0 0x2b800 .stack 0x1000 0x20000000 -.data 0x3e4 0x20001000 -.bss 0xa044 0x200013e4 +.data 0x3e8 0x20001000 +.bss 0xa03c 0x200013e8 .heap 0x4bd8 0x2000b428 -.internal_storage 0x3a000 0x2b69c -.zwave_nvm 0x3000 0x6569c -.nvm 0x9000 0x6869c +.internal_storage 0x3a000 0x2b800 +.zwave_nvm 0x3000 0x65800 +.nvm 0x9000 0x68800 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6628 0x0 -.debug_info 0xd27c56 0x0 -.debug_abbrev 0x14928 0x0 -.debug_loc 0x3ba95 0x0 +.debug_frame 0x6678 0x0 +.debug_info 0xd2803c 0x0 +.debug_abbrev 0x14905 0x0 +.debug_loc 0x3bd34 0x0 .debug_aranges 0xb0 0x0 -.debug_ranges 0xa1f0 0x0 -.debug_line 0x4c88f 0x0 -.debug_str 0x87ad2 0x0 -Total 0xede34f +.debug_ranges 0xa1c8 0x0 +.debug_line 0x4ca1a 0x0 +.debug_str 0x87c35 0x0 +Total 0xedee27 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 178816 + 179176 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48168 + 48164 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4210A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4210A_REGION_US_LR_size.txt index fca03c70512..99abd117a18 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4210A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4210A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x313e0 0x8006000 -_cc_handlers_v3 0x240 0x80373e0 -_zw_protocol_cmd_handlers 0x70 0x8037620 -_zw_protocol_cmd_handlers_lr 0x30 0x8037690 -.ARM.exidx 0x8 0x80376c0 -.copy.table 0xc 0x80376c8 -.zero.table 0x0 0x80376d4 +.text 0x311d0 0x8006000 +_cc_handlers_v3 0x240 0x80371d0 +_zw_protocol_cmd_handlers 0x70 0x8037410 +_zw_protocol_cmd_handlers_lr 0x30 0x8037480 +.ARM.exidx 0x8 0x80374b0 +.copy.table 0xc 0x80374b8 +.zero.table 0x0 0x80374c4 .stack 0x1000 0x20000000 -.data 0x4d4 0x20001000 -.bss 0xaac8 0x200014d4 +.data 0x4d8 0x20001000 +.bss 0xaac8 0x200014d8 .heap 0x4060 0x2000bfa0 -.internal_storage 0x30000 0x80376d4 -.zwave_nvm 0x0 0x80676d4 -.nvm 0x8000 0x80676d4 +.internal_storage 0x30000 0x80374c4 +.zwave_nvm 0x0 0x80674c4 +.nvm 0x8000 0x80674c4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f70 0x0 -.debug_info 0xd6618f 0x0 -.debug_abbrev 0x1705d 0x0 -.debug_loc 0x4826a 0x0 +.debug_frame 0x6fc4 0x0 +.debug_info 0xd666cd 0x0 +.debug_abbrev 0x17061 0x0 +.debug_loc 0x485bf 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb7e0 0x0 -.debug_line 0x55854 0x0 -.debug_str 0x922fd 0x0 -Total 0xf38efe +.debug_ranges 0xb818 0x0 +.debug_line 0x55a90 0x0 +.debug_str 0x9243e 0x0 +Total 0xf39992 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203688 + 203164 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51100 + 51104 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_EU_size.txt index e7bff5176d2..a6194e46d8d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x31318 0x8006000 -_cc_handlers_v3 0x240 0x8037318 -_zw_protocol_cmd_handlers 0x70 0x8037558 -_zw_protocol_cmd_handlers_lr 0x30 0x80375c8 -.ARM.exidx 0x8 0x80375f8 -.copy.table 0xc 0x8037600 -.zero.table 0x0 0x803760c +.text 0x31574 0x8006000 +_cc_handlers_v3 0x240 0x8037574 +_zw_protocol_cmd_handlers 0x70 0x80377b4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037824 +.ARM.exidx 0x8 0x8037854 +.copy.table 0xc 0x803785c +.zero.table 0x0 0x8037868 .stack 0x1000 0x20000000 -.data 0x4d0 0x20001000 -.bss 0xaa40 0x200014d0 -.heap 0x340f0 0x2000bf10 -.internal_storage 0x30000 0x803760c -.zwave_nvm 0x0 0x806760c -.nvm 0x8000 0x806760c +.data 0x4d4 0x20001000 +.bss 0xaa48 0x200014d4 +.heap 0x340e0 0x2000bf20 +.internal_storage 0x30000 0x8037868 +.zwave_nvm 0x0 0x8067868 +.nvm 0x8000 0x8067868 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f18 0x0 -.debug_info 0xd65055 0x0 -.debug_abbrev 0x16f0d 0x0 -.debug_loc 0x47f98 0x0 +.debug_frame 0x6f70 0x0 +.debug_info 0xd65595 0x0 +.debug_abbrev 0x16f11 0x0 +.debug_loc 0x4830e 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb758 0x0 -.debug_line 0x5523a 0x0 -.debug_str 0x92305 0x0 -Total 0xf671ec +.debug_ranges 0xb780 0x0 +.debug_line 0x5547c 0x0 +.debug_str 0x92446 0x0 +Total 0xf68101 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203484 + 204092 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50960 + 50972 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_US_LR_size.txt index 313b3d3f814..64d4222eb12 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x31318 0x8006000 -_cc_handlers_v3 0x240 0x8037318 -_zw_protocol_cmd_handlers 0x70 0x8037558 -_zw_protocol_cmd_handlers_lr 0x30 0x80375c8 -.ARM.exidx 0x8 0x80375f8 -.copy.table 0xc 0x8037600 -.zero.table 0x0 0x803760c +.text 0x31574 0x8006000 +_cc_handlers_v3 0x240 0x8037574 +_zw_protocol_cmd_handlers 0x70 0x80377b4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037824 +.ARM.exidx 0x8 0x8037854 +.copy.table 0xc 0x803785c +.zero.table 0x0 0x8037868 .stack 0x1000 0x20000000 -.data 0x4d0 0x20001000 -.bss 0xaa40 0x200014d0 -.heap 0x340f0 0x2000bf10 -.internal_storage 0x30000 0x803760c -.zwave_nvm 0x0 0x806760c -.nvm 0x8000 0x806760c +.data 0x4d4 0x20001000 +.bss 0xaa48 0x200014d4 +.heap 0x340e0 0x2000bf20 +.internal_storage 0x30000 0x8037868 +.zwave_nvm 0x0 0x8067868 +.nvm 0x8000 0x8067868 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f18 0x0 -.debug_info 0xd65055 0x0 -.debug_abbrev 0x16f0d 0x0 -.debug_loc 0x47f98 0x0 +.debug_frame 0x6f70 0x0 +.debug_info 0xd65595 0x0 +.debug_abbrev 0x16f11 0x0 +.debug_loc 0x4830e 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb758 0x0 -.debug_line 0x5523a 0x0 -.debug_str 0x922fb 0x0 -Total 0xf671e2 +.debug_ranges 0xb780 0x0 +.debug_line 0x5547c 0x0 +.debug_str 0x9243c 0x0 +Total 0xf680f7 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203484 + 204092 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50960 + 50972 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_US_size.txt index e7bff5176d2..a6194e46d8d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4400B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x31318 0x8006000 -_cc_handlers_v3 0x240 0x8037318 -_zw_protocol_cmd_handlers 0x70 0x8037558 -_zw_protocol_cmd_handlers_lr 0x30 0x80375c8 -.ARM.exidx 0x8 0x80375f8 -.copy.table 0xc 0x8037600 -.zero.table 0x0 0x803760c +.text 0x31574 0x8006000 +_cc_handlers_v3 0x240 0x8037574 +_zw_protocol_cmd_handlers 0x70 0x80377b4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037824 +.ARM.exidx 0x8 0x8037854 +.copy.table 0xc 0x803785c +.zero.table 0x0 0x8037868 .stack 0x1000 0x20000000 -.data 0x4d0 0x20001000 -.bss 0xaa40 0x200014d0 -.heap 0x340f0 0x2000bf10 -.internal_storage 0x30000 0x803760c -.zwave_nvm 0x0 0x806760c -.nvm 0x8000 0x806760c +.data 0x4d4 0x20001000 +.bss 0xaa48 0x200014d4 +.heap 0x340e0 0x2000bf20 +.internal_storage 0x30000 0x8037868 +.zwave_nvm 0x0 0x8067868 +.nvm 0x8000 0x8067868 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f18 0x0 -.debug_info 0xd65055 0x0 -.debug_abbrev 0x16f0d 0x0 -.debug_loc 0x47f98 0x0 +.debug_frame 0x6f70 0x0 +.debug_info 0xd65595 0x0 +.debug_abbrev 0x16f11 0x0 +.debug_loc 0x4830e 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb758 0x0 -.debug_line 0x5523a 0x0 -.debug_str 0x92305 0x0 -Total 0xf671ec +.debug_ranges 0xb780 0x0 +.debug_line 0x5547c 0x0 +.debug_str 0x92446 0x0 +Total 0xf68101 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203484 + 204092 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50960 + 50972 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4401B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4401B_REGION_US_LR_size.txt index 9439cdb08ab..dddf4541118 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4401B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_door_lock_keypad_BRD4401B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_door_lock_keypad.out : section size addr -.text 0x31318 0x8006000 -_cc_handlers_v3 0x240 0x8037318 -_zw_protocol_cmd_handlers 0x70 0x8037558 -_zw_protocol_cmd_handlers_lr 0x30 0x80375c8 -.ARM.exidx 0x8 0x80375f8 -.copy.table 0xc 0x8037600 -.zero.table 0x0 0x803760c +.text 0x31574 0x8006000 +_cc_handlers_v3 0x240 0x8037574 +_zw_protocol_cmd_handlers 0x70 0x80377b4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037824 +.ARM.exidx 0x8 0x8037854 +.copy.table 0xc 0x803785c +.zero.table 0x0 0x8037868 .stack 0x1000 0x20000000 -.data 0x4d0 0x20001000 -.bss 0xaa40 0x200014d0 -.heap 0x340f0 0x2000bf10 -.internal_storage 0x30000 0x803760c -.zwave_nvm 0x0 0x806760c -.nvm 0x8000 0x806760c +.data 0x4d4 0x20001000 +.bss 0xaa48 0x200014d4 +.heap 0x340e0 0x2000bf20 +.internal_storage 0x30000 0x8037868 +.zwave_nvm 0x0 0x8067868 +.nvm 0x8000 0x8067868 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f18 0x0 -.debug_info 0xd65059 0x0 -.debug_abbrev 0x16f0d 0x0 -.debug_loc 0x47f98 0x0 +.debug_frame 0x6f70 0x0 +.debug_info 0xd65599 0x0 +.debug_abbrev 0x16f11 0x0 +.debug_loc 0x4830e 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb718 0x0 -.debug_line 0x55229 0x0 -.debug_str 0x922fb 0x0 -Total 0xf67195 +.debug_ranges 0xb740 0x0 +.debug_line 0x5546b 0x0 +.debug_str 0x9243c 0x0 +Total 0xf680aa The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203484 + 204092 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50960 + 50972 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_EU_size.txt index c43d48175a1..a516aeeaeb4 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x35a6c 0x0 -_cc_handlers_v3 0x168 0x35a6c -_zw_protocol_cmd_handlers 0xb0 0x35bd4 -_zw_protocol_cmd_handlers_lr 0x50 0x35c84 -.ARM.exidx 0x8 0x35cd4 -.copy.table 0xc 0x35cdc -.zero.table 0x0 0x35ce8 +.text 0x35ae0 0x0 +_cc_handlers_v3 0x168 0x35ae0 +_zw_protocol_cmd_handlers 0xb0 0x35c48 +_zw_protocol_cmd_handlers_lr 0x50 0x35cf8 +.ARM.exidx 0x8 0x35d48 +.copy.table 0xc 0x35d50 +.zero.table 0x0 0x35d5c .stack 0x400 0x20000000 .data 0x430 0x20000400 .bss 0xd5a4 0x20000830 .heap 0x2228 0x2000ddd8 -.zwave_nvm 0x3000 0x35ce8 -.nvm 0x9000 0x38ce8 +.zwave_nvm 0x3000 0x35d5c +.nvm 0x9000 0x38d5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x9318 0x0 -.debug_info 0xa928c4 0x0 -.debug_abbrev 0x1a6b5 0x0 -.debug_loc 0x4c778 0x0 +.debug_frame 0x9308 0x0 +.debug_info 0xa92d23 0x0 +.debug_abbrev 0x1a69b 0x0 +.debug_loc 0x4cb38 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xd4c0 0x0 -.debug_line 0x671a1 0x0 -.debug_str 0xa5030 0x0 +.debug_ranges 0xd4f8 0x0 +.debug_line 0x67358 0x0 +.debug_str 0xa5131 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xc6e17a +Total 0xc6ecd3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 221464 + 221580 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_US_LR_size.txt index 0070afbc975..9db6658955d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x35a6c 0x0 -_cc_handlers_v3 0x168 0x35a6c -_zw_protocol_cmd_handlers 0xb0 0x35bd4 -_zw_protocol_cmd_handlers_lr 0x50 0x35c84 -.ARM.exidx 0x8 0x35cd4 -.copy.table 0xc 0x35cdc -.zero.table 0x0 0x35ce8 +.text 0x35ae0 0x0 +_cc_handlers_v3 0x168 0x35ae0 +_zw_protocol_cmd_handlers 0xb0 0x35c48 +_zw_protocol_cmd_handlers_lr 0x50 0x35cf8 +.ARM.exidx 0x8 0x35d48 +.copy.table 0xc 0x35d50 +.zero.table 0x0 0x35d5c .stack 0x400 0x20000000 .data 0x430 0x20000400 .bss 0xd5a4 0x20000830 .heap 0x2228 0x2000ddd8 -.zwave_nvm 0x3000 0x35ce8 -.nvm 0x9000 0x38ce8 +.zwave_nvm 0x3000 0x35d5c +.nvm 0x9000 0x38d5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x9318 0x0 -.debug_info 0xa928c4 0x0 -.debug_abbrev 0x1a6b5 0x0 -.debug_loc 0x4c778 0x0 +.debug_frame 0x9308 0x0 +.debug_info 0xa92d23 0x0 +.debug_abbrev 0x1a69b 0x0 +.debug_loc 0x4cb38 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xd4c0 0x0 -.debug_line 0x671a1 0x0 -.debug_str 0xa5033 0x0 +.debug_ranges 0xd4f8 0x0 +.debug_line 0x67358 0x0 +.debug_str 0xa5134 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xc6e17d +Total 0xc6ecd6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 221464 + 221580 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_US_size.txt index c43d48175a1..a516aeeaeb4 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4202A_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x35a6c 0x0 -_cc_handlers_v3 0x168 0x35a6c -_zw_protocol_cmd_handlers 0xb0 0x35bd4 -_zw_protocol_cmd_handlers_lr 0x50 0x35c84 -.ARM.exidx 0x8 0x35cd4 -.copy.table 0xc 0x35cdc -.zero.table 0x0 0x35ce8 +.text 0x35ae0 0x0 +_cc_handlers_v3 0x168 0x35ae0 +_zw_protocol_cmd_handlers 0xb0 0x35c48 +_zw_protocol_cmd_handlers_lr 0x50 0x35cf8 +.ARM.exidx 0x8 0x35d48 +.copy.table 0xc 0x35d50 +.zero.table 0x0 0x35d5c .stack 0x400 0x20000000 .data 0x430 0x20000400 .bss 0xd5a4 0x20000830 .heap 0x2228 0x2000ddd8 -.zwave_nvm 0x3000 0x35ce8 -.nvm 0x9000 0x38ce8 +.zwave_nvm 0x3000 0x35d5c +.nvm 0x9000 0x38d5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x9318 0x0 -.debug_info 0xa928c4 0x0 -.debug_abbrev 0x1a6b5 0x0 -.debug_loc 0x4c778 0x0 +.debug_frame 0x9308 0x0 +.debug_info 0xa92d23 0x0 +.debug_abbrev 0x1a69b 0x0 +.debug_loc 0x4cb38 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xd4c0 0x0 -.debug_line 0x671a1 0x0 -.debug_str 0xa5030 0x0 +.debug_ranges 0xd4f8 0x0 +.debug_line 0x67358 0x0 +.debug_str 0xa5131 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xc6e17a +Total 0xc6ecd3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 221464 + 221580 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_EU_size.txt index 74d21be9e30..d8c6eb27a84 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_EU_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x3b740 0x8006000 -_cc_handlers_v3 0x168 0x8041740 -_zw_protocol_cmd_handlers 0xb0 0x80418a8 -_zw_protocol_cmd_handlers_lr 0x50 0x8041958 -.ARM.exidx 0x8 0x80419a8 -.copy.table 0xc 0x80419b0 -.zero.table 0x0 0x80419bc +.text 0x3b468 0x8006000 +_cc_handlers_v3 0x168 0x8041468 +_zw_protocol_cmd_handlers 0xb0 0x80415d0 +_zw_protocol_cmd_handlers_lr 0x50 0x8041680 +.ARM.exidx 0x8 0x80416d0 +.copy.table 0xc 0x80416d8 +.zero.table 0x0 0x80416e4 .stack 0x400 0x20000000 .data 0x494 0x20000400 -.bss 0xde24 0x20000894 -.heap 0x1948 0x2000e6b8 -.zwave_nvm 0x0 0x80419bc -.nvm 0xa000 0x80419bc +.bss 0xde18 0x20000894 +.heap 0x1950 0x2000e6b0 +.zwave_nvm 0x0 0x80416e4 +.nvm 0xa000 0x80416e4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 .debug_frame 0x994c 0x0 -.debug_info 0xad45e7 0x0 -.debug_abbrev 0x1d06d 0x0 -.debug_loc 0x58b80 0x0 +.debug_info 0xad4b4e 0x0 +.debug_abbrev 0x1d082 0x0 +.debug_loc 0x59082 0x0 .debug_aranges 0x120 0x0 -.debug_ranges 0xef68 0x0 -.debug_line 0x701c3 0x0 -.debug_str 0xaf21f 0x0 +.debug_ranges 0xefa0 0x0 +.debug_line 0x7041c 0x0 +.debug_str 0xaf303 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xcd7c4a +Total 0xcd8761 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 245328 + 244600 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 61112 + 61100 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_US_LR_size.txt index 62fa63b5fc6..89a6707bf9c 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_US_LR_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x3b740 0x8006000 -_cc_handlers_v3 0x168 0x8041740 -_zw_protocol_cmd_handlers 0xb0 0x80418a8 -_zw_protocol_cmd_handlers_lr 0x50 0x8041958 -.ARM.exidx 0x8 0x80419a8 -.copy.table 0xc 0x80419b0 -.zero.table 0x0 0x80419bc +.text 0x3b468 0x8006000 +_cc_handlers_v3 0x168 0x8041468 +_zw_protocol_cmd_handlers 0xb0 0x80415d0 +_zw_protocol_cmd_handlers_lr 0x50 0x8041680 +.ARM.exidx 0x8 0x80416d0 +.copy.table 0xc 0x80416d8 +.zero.table 0x0 0x80416e4 .stack 0x400 0x20000000 .data 0x494 0x20000400 -.bss 0xde24 0x20000894 -.heap 0x1948 0x2000e6b8 -.zwave_nvm 0x0 0x80419bc -.nvm 0xa000 0x80419bc +.bss 0xde18 0x20000894 +.heap 0x1950 0x2000e6b0 +.zwave_nvm 0x0 0x80416e4 +.nvm 0xa000 0x80416e4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 .debug_frame 0x994c 0x0 -.debug_info 0xad45e7 0x0 -.debug_abbrev 0x1d06d 0x0 -.debug_loc 0x58b80 0x0 +.debug_info 0xad4b4e 0x0 +.debug_abbrev 0x1d082 0x0 +.debug_loc 0x59082 0x0 .debug_aranges 0x120 0x0 -.debug_ranges 0xef68 0x0 -.debug_line 0x701c3 0x0 -.debug_str 0xaf222 0x0 +.debug_ranges 0xefa0 0x0 +.debug_line 0x7041c 0x0 +.debug_str 0xaf306 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xcd7c4d +Total 0xcd8764 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 245328 + 244600 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 61112 + 61100 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_US_size.txt index 74d21be9e30..d8c6eb27a84 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205A_REGION_US_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x3b740 0x8006000 -_cc_handlers_v3 0x168 0x8041740 -_zw_protocol_cmd_handlers 0xb0 0x80418a8 -_zw_protocol_cmd_handlers_lr 0x50 0x8041958 -.ARM.exidx 0x8 0x80419a8 -.copy.table 0xc 0x80419b0 -.zero.table 0x0 0x80419bc +.text 0x3b468 0x8006000 +_cc_handlers_v3 0x168 0x8041468 +_zw_protocol_cmd_handlers 0xb0 0x80415d0 +_zw_protocol_cmd_handlers_lr 0x50 0x8041680 +.ARM.exidx 0x8 0x80416d0 +.copy.table 0xc 0x80416d8 +.zero.table 0x0 0x80416e4 .stack 0x400 0x20000000 .data 0x494 0x20000400 -.bss 0xde24 0x20000894 -.heap 0x1948 0x2000e6b8 -.zwave_nvm 0x0 0x80419bc -.nvm 0xa000 0x80419bc +.bss 0xde18 0x20000894 +.heap 0x1950 0x2000e6b0 +.zwave_nvm 0x0 0x80416e4 +.nvm 0xa000 0x80416e4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 .debug_frame 0x994c 0x0 -.debug_info 0xad45e7 0x0 -.debug_abbrev 0x1d06d 0x0 -.debug_loc 0x58b80 0x0 +.debug_info 0xad4b4e 0x0 +.debug_abbrev 0x1d082 0x0 +.debug_loc 0x59082 0x0 .debug_aranges 0x120 0x0 -.debug_ranges 0xef68 0x0 -.debug_line 0x701c3 0x0 -.debug_str 0xaf21f 0x0 +.debug_ranges 0xefa0 0x0 +.debug_line 0x7041c 0x0 +.debug_str 0xaf303 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xcd7c4a +Total 0xcd8761 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 245328 + 244600 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 61112 + 61100 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_EU_size.txt index 53a3bba55c3..ec725c844c5 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_EU_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x3c38c 0x8006000 -_cc_handlers_v3 0x168 0x804238c -_zw_protocol_cmd_handlers 0xb0 0x80424f4 -_zw_protocol_cmd_handlers_lr 0x50 0x80425a4 -.ARM.exidx 0x8 0x80425f4 -.copy.table 0xc 0x80425fc -.zero.table 0x0 0x8042608 +.text 0x3c094 0x8006000 +_cc_handlers_v3 0x168 0x8042094 +_zw_protocol_cmd_handlers 0xb0 0x80421fc +_zw_protocol_cmd_handlers_lr 0x50 0x80422ac +.ARM.exidx 0x8 0x80422fc +.copy.table 0xc 0x8042304 +.zero.table 0x0 0x8042310 .stack 0x400 0x20000000 .data 0x498 0x20000400 -.bss 0xdf94 0x20000898 -.heap 0x17d0 0x2000e830 -.zwave_nvm 0x0 0x8042608 -.nvm 0xa000 0x8042608 +.bss 0xdf88 0x20000898 +.heap 0x17e0 0x2000e820 +.zwave_nvm 0x0 0x8042310 +.nvm 0xa000 0x8042310 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x9b1c 0x0 -.debug_info 0xad77dc 0x0 -.debug_abbrev 0x1d532 0x0 -.debug_loc 0x5a541 0x0 +.debug_frame 0x9b14 0x0 +.debug_info 0xad7d4c 0x0 +.debug_abbrev 0x1d546 0x0 +.debug_loc 0x5aa2e 0x0 .debug_aranges 0x140 0x0 -.debug_ranges 0xf048 0x0 -.debug_line 0x71dad 0x0 -.debug_str 0xafb64 0x0 +.debug_ranges 0xf080 0x0 +.debug_line 0x7202b 0x0 +.debug_str 0xafc48 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xce010c +Total 0xce0c1b The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 248480 + 247720 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 61484 + 61472 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_US_LR_size.txt index da346789476..32b726764bb 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_US_LR_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x3c38c 0x8006000 -_cc_handlers_v3 0x168 0x804238c -_zw_protocol_cmd_handlers 0xb0 0x80424f4 -_zw_protocol_cmd_handlers_lr 0x50 0x80425a4 -.ARM.exidx 0x8 0x80425f4 -.copy.table 0xc 0x80425fc -.zero.table 0x0 0x8042608 +.text 0x3c094 0x8006000 +_cc_handlers_v3 0x168 0x8042094 +_zw_protocol_cmd_handlers 0xb0 0x80421fc +_zw_protocol_cmd_handlers_lr 0x50 0x80422ac +.ARM.exidx 0x8 0x80422fc +.copy.table 0xc 0x8042304 +.zero.table 0x0 0x8042310 .stack 0x400 0x20000000 .data 0x498 0x20000400 -.bss 0xdf94 0x20000898 -.heap 0x17d0 0x2000e830 -.zwave_nvm 0x0 0x8042608 -.nvm 0xa000 0x8042608 +.bss 0xdf88 0x20000898 +.heap 0x17e0 0x2000e820 +.zwave_nvm 0x0 0x8042310 +.nvm 0xa000 0x8042310 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x9b1c 0x0 -.debug_info 0xad77dc 0x0 -.debug_abbrev 0x1d532 0x0 -.debug_loc 0x5a541 0x0 +.debug_frame 0x9b14 0x0 +.debug_info 0xad7d4c 0x0 +.debug_abbrev 0x1d546 0x0 +.debug_loc 0x5aa2e 0x0 .debug_aranges 0x140 0x0 -.debug_ranges 0xf048 0x0 -.debug_line 0x71dad 0x0 -.debug_str 0xafb67 0x0 +.debug_ranges 0xf080 0x0 +.debug_line 0x7202b 0x0 +.debug_str 0xafc4b 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xce010f +Total 0xce0c1e The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 248480 + 247720 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 61484 + 61472 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_US_size.txt index 53a3bba55c3..ec725c844c5 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4205B_REGION_US_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x3c38c 0x8006000 -_cc_handlers_v3 0x168 0x804238c -_zw_protocol_cmd_handlers 0xb0 0x80424f4 -_zw_protocol_cmd_handlers_lr 0x50 0x80425a4 -.ARM.exidx 0x8 0x80425f4 -.copy.table 0xc 0x80425fc -.zero.table 0x0 0x8042608 +.text 0x3c094 0x8006000 +_cc_handlers_v3 0x168 0x8042094 +_zw_protocol_cmd_handlers 0xb0 0x80421fc +_zw_protocol_cmd_handlers_lr 0x50 0x80422ac +.ARM.exidx 0x8 0x80422fc +.copy.table 0xc 0x8042304 +.zero.table 0x0 0x8042310 .stack 0x400 0x20000000 .data 0x498 0x20000400 -.bss 0xdf94 0x20000898 -.heap 0x17d0 0x2000e830 -.zwave_nvm 0x0 0x8042608 -.nvm 0xa000 0x8042608 +.bss 0xdf88 0x20000898 +.heap 0x17e0 0x2000e820 +.zwave_nvm 0x0 0x8042310 +.nvm 0xa000 0x8042310 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x9b1c 0x0 -.debug_info 0xad77dc 0x0 -.debug_abbrev 0x1d532 0x0 -.debug_loc 0x5a541 0x0 +.debug_frame 0x9b14 0x0 +.debug_info 0xad7d4c 0x0 +.debug_abbrev 0x1d546 0x0 +.debug_loc 0x5aa2e 0x0 .debug_aranges 0x140 0x0 -.debug_ranges 0xf048 0x0 -.debug_line 0x71dad 0x0 -.debug_str 0xafb64 0x0 +.debug_ranges 0xf080 0x0 +.debug_line 0x7202b 0x0 +.debug_str 0xafc48 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xce010c +Total 0xce0c1b The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 248480 + 247720 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 61484 + 61472 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_EU_size.txt index c43d48175a1..a516aeeaeb4 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_EU_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x35a6c 0x0 -_cc_handlers_v3 0x168 0x35a6c -_zw_protocol_cmd_handlers 0xb0 0x35bd4 -_zw_protocol_cmd_handlers_lr 0x50 0x35c84 -.ARM.exidx 0x8 0x35cd4 -.copy.table 0xc 0x35cdc -.zero.table 0x0 0x35ce8 +.text 0x35ae0 0x0 +_cc_handlers_v3 0x168 0x35ae0 +_zw_protocol_cmd_handlers 0xb0 0x35c48 +_zw_protocol_cmd_handlers_lr 0x50 0x35cf8 +.ARM.exidx 0x8 0x35d48 +.copy.table 0xc 0x35d50 +.zero.table 0x0 0x35d5c .stack 0x400 0x20000000 .data 0x430 0x20000400 .bss 0xd5a4 0x20000830 .heap 0x2228 0x2000ddd8 -.zwave_nvm 0x3000 0x35ce8 -.nvm 0x9000 0x38ce8 +.zwave_nvm 0x3000 0x35d5c +.nvm 0x9000 0x38d5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x9318 0x0 -.debug_info 0xa928c4 0x0 -.debug_abbrev 0x1a6b5 0x0 -.debug_loc 0x4c778 0x0 +.debug_frame 0x9308 0x0 +.debug_info 0xa92d23 0x0 +.debug_abbrev 0x1a69b 0x0 +.debug_loc 0x4cb38 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xd4c0 0x0 -.debug_line 0x671a1 0x0 -.debug_str 0xa5030 0x0 +.debug_ranges 0xd4f8 0x0 +.debug_line 0x67358 0x0 +.debug_str 0xa5131 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xc6e17a +Total 0xc6ecd3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 221464 + 221580 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_US_LR_size.txt index 0070afbc975..9db6658955d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_US_LR_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x35a6c 0x0 -_cc_handlers_v3 0x168 0x35a6c -_zw_protocol_cmd_handlers 0xb0 0x35bd4 -_zw_protocol_cmd_handlers_lr 0x50 0x35c84 -.ARM.exidx 0x8 0x35cd4 -.copy.table 0xc 0x35cdc -.zero.table 0x0 0x35ce8 +.text 0x35ae0 0x0 +_cc_handlers_v3 0x168 0x35ae0 +_zw_protocol_cmd_handlers 0xb0 0x35c48 +_zw_protocol_cmd_handlers_lr 0x50 0x35cf8 +.ARM.exidx 0x8 0x35d48 +.copy.table 0xc 0x35d50 +.zero.table 0x0 0x35d5c .stack 0x400 0x20000000 .data 0x430 0x20000400 .bss 0xd5a4 0x20000830 .heap 0x2228 0x2000ddd8 -.zwave_nvm 0x3000 0x35ce8 -.nvm 0x9000 0x38ce8 +.zwave_nvm 0x3000 0x35d5c +.nvm 0x9000 0x38d5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x9318 0x0 -.debug_info 0xa928c4 0x0 -.debug_abbrev 0x1a6b5 0x0 -.debug_loc 0x4c778 0x0 +.debug_frame 0x9308 0x0 +.debug_info 0xa92d23 0x0 +.debug_abbrev 0x1a69b 0x0 +.debug_loc 0x4cb38 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xd4c0 0x0 -.debug_line 0x671a1 0x0 -.debug_str 0xa5033 0x0 +.debug_ranges 0xd4f8 0x0 +.debug_line 0x67358 0x0 +.debug_str 0xa5134 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xc6e17d +Total 0xc6ecd6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 221464 + 221580 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_US_size.txt index c43d48175a1..a516aeeaeb4 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4207A_REGION_US_size.txt @@ -5,37 +5,37 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x35a6c 0x0 -_cc_handlers_v3 0x168 0x35a6c -_zw_protocol_cmd_handlers 0xb0 0x35bd4 -_zw_protocol_cmd_handlers_lr 0x50 0x35c84 -.ARM.exidx 0x8 0x35cd4 -.copy.table 0xc 0x35cdc -.zero.table 0x0 0x35ce8 +.text 0x35ae0 0x0 +_cc_handlers_v3 0x168 0x35ae0 +_zw_protocol_cmd_handlers 0xb0 0x35c48 +_zw_protocol_cmd_handlers_lr 0x50 0x35cf8 +.ARM.exidx 0x8 0x35d48 +.copy.table 0xc 0x35d50 +.zero.table 0x0 0x35d5c .stack 0x400 0x20000000 .data 0x430 0x20000400 .bss 0xd5a4 0x20000830 .heap 0x2228 0x2000ddd8 -.zwave_nvm 0x3000 0x35ce8 -.nvm 0x9000 0x38ce8 +.zwave_nvm 0x3000 0x35d5c +.nvm 0x9000 0x38d5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x9318 0x0 -.debug_info 0xa928c4 0x0 -.debug_abbrev 0x1a6b5 0x0 -.debug_loc 0x4c778 0x0 +.debug_frame 0x9308 0x0 +.debug_info 0xa92d23 0x0 +.debug_abbrev 0x1a69b 0x0 +.debug_loc 0x4cb38 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xd4c0 0x0 -.debug_line 0x671a1 0x0 -.debug_str 0xa5030 0x0 +.debug_ranges 0xd4f8 0x0 +.debug_line 0x67358 0x0 +.debug_str 0xa5131 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xc6e17a +Total 0xc6ecd3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 221464 + 221580 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4210A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4210A_REGION_US_LR_size.txt index 54ae8b70f6f..3cb0fc5da1d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4210A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_key_fob_BRD4210A_REGION_US_LR_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_key_fob.out : section size addr -.text 0x3be0c 0x8006000 -_cc_handlers_v3 0x168 0x8041e0c -_zw_protocol_cmd_handlers 0xb0 0x8041f74 -_zw_protocol_cmd_handlers_lr 0x50 0x8042024 -.ARM.exidx 0x8 0x8042074 -.copy.table 0xc 0x804207c -.zero.table 0x0 0x8042088 +.text 0x3bb14 0x8006000 +_cc_handlers_v3 0x168 0x8041b14 +_zw_protocol_cmd_handlers 0xb0 0x8041c7c +_zw_protocol_cmd_handlers_lr 0x50 0x8041d2c +.ARM.exidx 0x8 0x8041d7c +.copy.table 0xc 0x8041d84 +.zero.table 0x0 0x8041d90 .stack 0x400 0x20000000 .data 0x494 0x20000400 -.bss 0xdf7c 0x20000894 -.heap 0x17f0 0x2000e810 -.zwave_nvm 0x0 0x8042088 -.nvm 0xa000 0x8042088 +.bss 0xdf70 0x20000894 +.heap 0x17f8 0x2000e808 +.zwave_nvm 0x0 0x8041d90 +.nvm 0xa000 0x8041d90 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x9b1c 0x0 -.debug_info 0xad6f4c 0x0 -.debug_abbrev 0x1d480 0x0 -.debug_loc 0x5a572 0x0 +.debug_frame 0x9b14 0x0 +.debug_info 0xad74bc 0x0 +.debug_abbrev 0x1d494 0x0 +.debug_loc 0x5aa34 0x0 .debug_aranges 0xf8 0x0 -.debug_ranges 0xf028 0x0 -.debug_line 0x7207e 0x0 -.debug_str 0xaf664 0x0 +.debug_ranges 0xf060 0x0 +.debug_line 0x722fc 0x0 +.debug_str 0xaf748 0x0 .stab 0xcc 0x0 .stabstr 0x1b9 0x0 -Total 0xcdefe8 +Total 0xcdfac4 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 247068 + 246308 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 40960 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 61456 + 61444 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_EU_size.txt index e0f3b3f282c..2ef9b4e2032 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_EU_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x2b6d4 0x0 -_cc_handlers_v3 0x21c 0x2b6d4 -_zw_protocol_cmd_handlers 0x70 0x2b8f0 -_zw_protocol_cmd_handlers_lr 0x30 0x2b960 -.ARM.exidx 0x8 0x2b990 -.copy.table 0xc 0x2b998 -.zero.table 0x0 0x2b9a4 +.text 0x2b7e8 0x0 +_cc_handlers_v3 0x21c 0x2b7e8 +_zw_protocol_cmd_handlers 0x70 0x2ba04 +_zw_protocol_cmd_handlers_lr 0x30 0x2ba74 +.ARM.exidx 0x8 0x2baa4 +.copy.table 0xc 0x2baac +.zero.table 0x0 0x2bab8 .stack 0x1000 0x20000000 -.data 0x5a4 0x20001000 -.bss 0x9fe4 0x200015a4 +.data 0x5a8 0x20001000 +.bss 0x9fe0 0x200015a8 .heap 0x4a78 0x2000b588 -.internal_storage 0x3a000 0x2b9a4 -.zwave_nvm 0x3000 0x659a4 -.nvm 0x9000 0x689a4 +.internal_storage 0x3a000 0x2bab8 +.zwave_nvm 0x3000 0x65ab8 +.nvm 0x9000 0x68ab8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6690 0x0 -.debug_info 0xcc168a 0x0 -.debug_abbrev 0x14b92 0x0 -.debug_loc 0x3c004 0x0 +.debug_frame 0x66e0 0x0 +.debug_info 0xcc1a00 0x0 +.debug_abbrev 0x14b6f 0x0 +.debug_loc 0x3c264 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0xa3b0 0x0 -.debug_line 0x4d23f 0x0 -.debug_str 0x859c8 0x0 -Total 0xe77362 +.debug_ranges 0xa350 0x0 +.debug_line 0x4d38f 0x0 +.debug_str 0x85b2b 0x0 +Total 0xe77ccc The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 180040 + 180320 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_US_LR_size.txt index feb71e66dba..df6a0c29e05 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_US_LR_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x2b6d4 0x0 -_cc_handlers_v3 0x21c 0x2b6d4 -_zw_protocol_cmd_handlers 0x70 0x2b8f0 -_zw_protocol_cmd_handlers_lr 0x30 0x2b960 -.ARM.exidx 0x8 0x2b990 -.copy.table 0xc 0x2b998 -.zero.table 0x0 0x2b9a4 +.text 0x2b7e8 0x0 +_cc_handlers_v3 0x21c 0x2b7e8 +_zw_protocol_cmd_handlers 0x70 0x2ba04 +_zw_protocol_cmd_handlers_lr 0x30 0x2ba74 +.ARM.exidx 0x8 0x2baa4 +.copy.table 0xc 0x2baac +.zero.table 0x0 0x2bab8 .stack 0x1000 0x20000000 -.data 0x5a4 0x20001000 -.bss 0x9fe4 0x200015a4 +.data 0x5a8 0x20001000 +.bss 0x9fe0 0x200015a8 .heap 0x4a78 0x2000b588 -.internal_storage 0x3a000 0x2b9a4 -.zwave_nvm 0x3000 0x659a4 -.nvm 0x9000 0x689a4 +.internal_storage 0x3a000 0x2bab8 +.zwave_nvm 0x3000 0x65ab8 +.nvm 0x9000 0x68ab8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6690 0x0 -.debug_info 0xcc168a 0x0 -.debug_abbrev 0x14b92 0x0 -.debug_loc 0x3c004 0x0 +.debug_frame 0x66e0 0x0 +.debug_info 0xcc1a00 0x0 +.debug_abbrev 0x14b6f 0x0 +.debug_loc 0x3c264 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0xa3b0 0x0 -.debug_line 0x4d23f 0x0 -.debug_str 0x859be 0x0 -Total 0xe77358 +.debug_ranges 0xa350 0x0 +.debug_line 0x4d38f 0x0 +.debug_str 0x85b21 0x0 +Total 0xe77cc2 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 180040 + 180320 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_US_size.txt index e0f3b3f282c..2ef9b4e2032 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4202A_REGION_US_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x2b6d4 0x0 -_cc_handlers_v3 0x21c 0x2b6d4 -_zw_protocol_cmd_handlers 0x70 0x2b8f0 -_zw_protocol_cmd_handlers_lr 0x30 0x2b960 -.ARM.exidx 0x8 0x2b990 -.copy.table 0xc 0x2b998 -.zero.table 0x0 0x2b9a4 +.text 0x2b7e8 0x0 +_cc_handlers_v3 0x21c 0x2b7e8 +_zw_protocol_cmd_handlers 0x70 0x2ba04 +_zw_protocol_cmd_handlers_lr 0x30 0x2ba74 +.ARM.exidx 0x8 0x2baa4 +.copy.table 0xc 0x2baac +.zero.table 0x0 0x2bab8 .stack 0x1000 0x20000000 -.data 0x5a4 0x20001000 -.bss 0x9fe4 0x200015a4 +.data 0x5a8 0x20001000 +.bss 0x9fe0 0x200015a8 .heap 0x4a78 0x2000b588 -.internal_storage 0x3a000 0x2b9a4 -.zwave_nvm 0x3000 0x659a4 -.nvm 0x9000 0x689a4 +.internal_storage 0x3a000 0x2bab8 +.zwave_nvm 0x3000 0x65ab8 +.nvm 0x9000 0x68ab8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6690 0x0 -.debug_info 0xcc168a 0x0 -.debug_abbrev 0x14b92 0x0 -.debug_loc 0x3c004 0x0 +.debug_frame 0x66e0 0x0 +.debug_info 0xcc1a00 0x0 +.debug_abbrev 0x14b6f 0x0 +.debug_loc 0x3c264 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0xa3b0 0x0 -.debug_line 0x4d23f 0x0 -.debug_str 0x859c8 0x0 -Total 0xe77362 +.debug_ranges 0xa350 0x0 +.debug_line 0x4d38f 0x0 +.debug_str 0x85b2b 0x0 +Total 0xe77ccc The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 180040 + 180320 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_EU_size.txt index f6afc6238e6..c59aa55c563 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x30f88 0x8006000 -_cc_handlers_v3 0x21c 0x8036f88 -_zw_protocol_cmd_handlers 0x70 0x80371a4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037214 -.ARM.exidx 0x8 0x8037244 -.copy.table 0xc 0x803724c -.zero.table 0x0 0x8037258 +.text 0x30d78 0x8006000 +_cc_handlers_v3 0x21c 0x8036d78 +_zw_protocol_cmd_handlers 0x70 0x8036f94 +_zw_protocol_cmd_handlers_lr 0x30 0x8037004 +.ARM.exidx 0x8 0x8037034 +.copy.table 0xc 0x803703c +.zero.table 0x0 0x8037048 .stack 0x1000 0x20000000 -.data 0x698 0x20001000 -.bss 0xa8e4 0x20001698 -.heap 0x4080 0x2000bf80 -.internal_storage 0x30000 0x8037258 -.zwave_nvm 0x0 0x8067258 -.nvm 0x8000 0x8067258 +.data 0x69c 0x20001000 +.bss 0xa8ec 0x2000169c +.heap 0x4078 0x2000bf88 +.internal_storage 0x30000 0x8037048 +.zwave_nvm 0x0 0x8067048 +.nvm 0x8000 0x8067048 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6e34 0x0 -.debug_info 0xd021af 0x0 -.debug_abbrev 0x174bb 0x0 -.debug_loc 0x478cf 0x0 +.debug_frame 0x6e8c 0x0 +.debug_info 0xd02677 0x0 +.debug_abbrev 0x174d0 0x0 +.debug_loc 0x47c64 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb968 0x0 -.debug_line 0x55cec 0x0 -.debug_str 0x9128a 0x0 -Total 0xed3a1e +.debug_ranges 0xb9c8 0x0 +.debug_line 0x55f0d 0x0 +.debug_str 0x913cb 0x0 +Total 0xed449e The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202992 + 202468 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51068 + 51080 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_US_LR_size.txt index 9ac25a57011..69477044649 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x30f88 0x8006000 -_cc_handlers_v3 0x21c 0x8036f88 -_zw_protocol_cmd_handlers 0x70 0x80371a4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037214 -.ARM.exidx 0x8 0x8037244 -.copy.table 0xc 0x803724c -.zero.table 0x0 0x8037258 +.text 0x30d78 0x8006000 +_cc_handlers_v3 0x21c 0x8036d78 +_zw_protocol_cmd_handlers 0x70 0x8036f94 +_zw_protocol_cmd_handlers_lr 0x30 0x8037004 +.ARM.exidx 0x8 0x8037034 +.copy.table 0xc 0x803703c +.zero.table 0x0 0x8037048 .stack 0x1000 0x20000000 -.data 0x698 0x20001000 -.bss 0xa8e4 0x20001698 -.heap 0x4080 0x2000bf80 -.internal_storage 0x30000 0x8037258 -.zwave_nvm 0x0 0x8067258 -.nvm 0x8000 0x8067258 +.data 0x69c 0x20001000 +.bss 0xa8ec 0x2000169c +.heap 0x4078 0x2000bf88 +.internal_storage 0x30000 0x8037048 +.zwave_nvm 0x0 0x8067048 +.nvm 0x8000 0x8067048 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6e34 0x0 -.debug_info 0xd021af 0x0 -.debug_abbrev 0x174bb 0x0 -.debug_loc 0x478cf 0x0 +.debug_frame 0x6e8c 0x0 +.debug_info 0xd02677 0x0 +.debug_abbrev 0x174d0 0x0 +.debug_loc 0x47c64 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb968 0x0 -.debug_line 0x55cec 0x0 -.debug_str 0x91280 0x0 -Total 0xed3a14 +.debug_ranges 0xb9c8 0x0 +.debug_line 0x55f0d 0x0 +.debug_str 0x913c1 0x0 +Total 0xed4494 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202992 + 202468 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51068 + 51080 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_US_size.txt index f6afc6238e6..c59aa55c563 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x30f88 0x8006000 -_cc_handlers_v3 0x21c 0x8036f88 -_zw_protocol_cmd_handlers 0x70 0x80371a4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037214 -.ARM.exidx 0x8 0x8037244 -.copy.table 0xc 0x803724c -.zero.table 0x0 0x8037258 +.text 0x30d78 0x8006000 +_cc_handlers_v3 0x21c 0x8036d78 +_zw_protocol_cmd_handlers 0x70 0x8036f94 +_zw_protocol_cmd_handlers_lr 0x30 0x8037004 +.ARM.exidx 0x8 0x8037034 +.copy.table 0xc 0x803703c +.zero.table 0x0 0x8037048 .stack 0x1000 0x20000000 -.data 0x698 0x20001000 -.bss 0xa8e4 0x20001698 -.heap 0x4080 0x2000bf80 -.internal_storage 0x30000 0x8037258 -.zwave_nvm 0x0 0x8067258 -.nvm 0x8000 0x8067258 +.data 0x69c 0x20001000 +.bss 0xa8ec 0x2000169c +.heap 0x4078 0x2000bf88 +.internal_storage 0x30000 0x8037048 +.zwave_nvm 0x0 0x8067048 +.nvm 0x8000 0x8067048 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6e34 0x0 -.debug_info 0xd021af 0x0 -.debug_abbrev 0x174bb 0x0 -.debug_loc 0x478cf 0x0 +.debug_frame 0x6e8c 0x0 +.debug_info 0xd02677 0x0 +.debug_abbrev 0x174d0 0x0 +.debug_loc 0x47c64 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb968 0x0 -.debug_line 0x55cec 0x0 -.debug_str 0x9128a 0x0 -Total 0xed3a1e +.debug_ranges 0xb9c8 0x0 +.debug_line 0x55f0d 0x0 +.debug_str 0x913cb 0x0 +Total 0xed449e The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202992 + 202468 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51068 + 51080 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_EU_size.txt index f1262b0a123..484c7e84a05 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x318c8 0x8006000 -_cc_handlers_v3 0x21c 0x80378c8 -_zw_protocol_cmd_handlers 0x70 0x8037ae4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037b54 -.ARM.exidx 0x8 0x8037b84 -.copy.table 0xc 0x8037b8c -.zero.table 0x0 0x8037b98 +.text 0x316c8 0x8006000 +_cc_handlers_v3 0x21c 0x80376c8 +_zw_protocol_cmd_handlers 0x70 0x80378e4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037954 +.ARM.exidx 0x8 0x8037984 +.copy.table 0xc 0x803798c +.zero.table 0x0 0x8037998 .stack 0x1000 0x20000000 -.data 0x69c 0x20001000 -.bss 0xaa68 0x2000169c +.data 0x6a0 0x20001000 +.bss 0xaa68 0x200016a0 .heap 0x3ef8 0x2000c108 -.internal_storage 0x30000 0x8037b98 -.zwave_nvm 0x0 0x8067b98 -.nvm 0x8000 0x8067b98 +.internal_storage 0x30000 0x8037998 +.zwave_nvm 0x0 0x8067998 +.nvm 0x8000 0x8067998 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fbc 0x0 -.debug_info 0xd04db4 0x0 -.debug_abbrev 0x176ec 0x0 -.debug_loc 0x485ae 0x0 +.debug_frame 0x7010 0x0 +.debug_info 0xd0529b 0x0 +.debug_abbrev 0x176f0 0x0 +.debug_loc 0x48933 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb8d0 0x0 -.debug_line 0x5666f 0x0 -.debug_str 0x918b9 0x0 -Total 0xed8f15 +.debug_ranges 0xb8f8 0x0 +.debug_line 0x568ed 0x0 +.debug_str 0x919fa 0x0 +Total 0xed99c4 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 205364 + 204856 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51460 + 51464 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_US_LR_size.txt index 6dcdb1a4162..4f04b65d6e9 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x318c8 0x8006000 -_cc_handlers_v3 0x21c 0x80378c8 -_zw_protocol_cmd_handlers 0x70 0x8037ae4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037b54 -.ARM.exidx 0x8 0x8037b84 -.copy.table 0xc 0x8037b8c -.zero.table 0x0 0x8037b98 +.text 0x316c8 0x8006000 +_cc_handlers_v3 0x21c 0x80376c8 +_zw_protocol_cmd_handlers 0x70 0x80378e4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037954 +.ARM.exidx 0x8 0x8037984 +.copy.table 0xc 0x803798c +.zero.table 0x0 0x8037998 .stack 0x1000 0x20000000 -.data 0x69c 0x20001000 -.bss 0xaa68 0x2000169c +.data 0x6a0 0x20001000 +.bss 0xaa68 0x200016a0 .heap 0x3ef8 0x2000c108 -.internal_storage 0x30000 0x8037b98 -.zwave_nvm 0x0 0x8067b98 -.nvm 0x8000 0x8067b98 +.internal_storage 0x30000 0x8037998 +.zwave_nvm 0x0 0x8067998 +.nvm 0x8000 0x8067998 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fbc 0x0 -.debug_info 0xd04db4 0x0 -.debug_abbrev 0x176ec 0x0 -.debug_loc 0x485ae 0x0 +.debug_frame 0x7010 0x0 +.debug_info 0xd0529b 0x0 +.debug_abbrev 0x176f0 0x0 +.debug_loc 0x48933 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb8d0 0x0 -.debug_line 0x5666f 0x0 -.debug_str 0x918af 0x0 -Total 0xed8f0b +.debug_ranges 0xb8f8 0x0 +.debug_line 0x568ed 0x0 +.debug_str 0x919f0 0x0 +Total 0xed99ba The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 205364 + 204856 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51460 + 51464 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_US_size.txt index f1262b0a123..484c7e84a05 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4205B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x318c8 0x8006000 -_cc_handlers_v3 0x21c 0x80378c8 -_zw_protocol_cmd_handlers 0x70 0x8037ae4 -_zw_protocol_cmd_handlers_lr 0x30 0x8037b54 -.ARM.exidx 0x8 0x8037b84 -.copy.table 0xc 0x8037b8c -.zero.table 0x0 0x8037b98 +.text 0x316c8 0x8006000 +_cc_handlers_v3 0x21c 0x80376c8 +_zw_protocol_cmd_handlers 0x70 0x80378e4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037954 +.ARM.exidx 0x8 0x8037984 +.copy.table 0xc 0x803798c +.zero.table 0x0 0x8037998 .stack 0x1000 0x20000000 -.data 0x69c 0x20001000 -.bss 0xaa68 0x2000169c +.data 0x6a0 0x20001000 +.bss 0xaa68 0x200016a0 .heap 0x3ef8 0x2000c108 -.internal_storage 0x30000 0x8037b98 -.zwave_nvm 0x0 0x8067b98 -.nvm 0x8000 0x8067b98 +.internal_storage 0x30000 0x8037998 +.zwave_nvm 0x0 0x8067998 +.nvm 0x8000 0x8067998 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fbc 0x0 -.debug_info 0xd04db4 0x0 -.debug_abbrev 0x176ec 0x0 -.debug_loc 0x485ae 0x0 +.debug_frame 0x7010 0x0 +.debug_info 0xd0529b 0x0 +.debug_abbrev 0x176f0 0x0 +.debug_loc 0x48933 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb8d0 0x0 -.debug_line 0x5666f 0x0 -.debug_str 0x918b9 0x0 -Total 0xed8f15 +.debug_ranges 0xb8f8 0x0 +.debug_line 0x568ed 0x0 +.debug_str 0x919fa 0x0 +Total 0xed99c4 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 205364 + 204856 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51460 + 51464 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_EU_size.txt index e0f3b3f282c..2ef9b4e2032 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_EU_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x2b6d4 0x0 -_cc_handlers_v3 0x21c 0x2b6d4 -_zw_protocol_cmd_handlers 0x70 0x2b8f0 -_zw_protocol_cmd_handlers_lr 0x30 0x2b960 -.ARM.exidx 0x8 0x2b990 -.copy.table 0xc 0x2b998 -.zero.table 0x0 0x2b9a4 +.text 0x2b7e8 0x0 +_cc_handlers_v3 0x21c 0x2b7e8 +_zw_protocol_cmd_handlers 0x70 0x2ba04 +_zw_protocol_cmd_handlers_lr 0x30 0x2ba74 +.ARM.exidx 0x8 0x2baa4 +.copy.table 0xc 0x2baac +.zero.table 0x0 0x2bab8 .stack 0x1000 0x20000000 -.data 0x5a4 0x20001000 -.bss 0x9fe4 0x200015a4 +.data 0x5a8 0x20001000 +.bss 0x9fe0 0x200015a8 .heap 0x4a78 0x2000b588 -.internal_storage 0x3a000 0x2b9a4 -.zwave_nvm 0x3000 0x659a4 -.nvm 0x9000 0x689a4 +.internal_storage 0x3a000 0x2bab8 +.zwave_nvm 0x3000 0x65ab8 +.nvm 0x9000 0x68ab8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6690 0x0 -.debug_info 0xcc168a 0x0 -.debug_abbrev 0x14b92 0x0 -.debug_loc 0x3c004 0x0 +.debug_frame 0x66e0 0x0 +.debug_info 0xcc1a00 0x0 +.debug_abbrev 0x14b6f 0x0 +.debug_loc 0x3c264 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0xa3b0 0x0 -.debug_line 0x4d23f 0x0 -.debug_str 0x859c8 0x0 -Total 0xe77362 +.debug_ranges 0xa350 0x0 +.debug_line 0x4d38f 0x0 +.debug_str 0x85b2b 0x0 +Total 0xe77ccc The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 180040 + 180320 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_US_LR_size.txt index feb71e66dba..df6a0c29e05 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_US_LR_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x2b6d4 0x0 -_cc_handlers_v3 0x21c 0x2b6d4 -_zw_protocol_cmd_handlers 0x70 0x2b8f0 -_zw_protocol_cmd_handlers_lr 0x30 0x2b960 -.ARM.exidx 0x8 0x2b990 -.copy.table 0xc 0x2b998 -.zero.table 0x0 0x2b9a4 +.text 0x2b7e8 0x0 +_cc_handlers_v3 0x21c 0x2b7e8 +_zw_protocol_cmd_handlers 0x70 0x2ba04 +_zw_protocol_cmd_handlers_lr 0x30 0x2ba74 +.ARM.exidx 0x8 0x2baa4 +.copy.table 0xc 0x2baac +.zero.table 0x0 0x2bab8 .stack 0x1000 0x20000000 -.data 0x5a4 0x20001000 -.bss 0x9fe4 0x200015a4 +.data 0x5a8 0x20001000 +.bss 0x9fe0 0x200015a8 .heap 0x4a78 0x2000b588 -.internal_storage 0x3a000 0x2b9a4 -.zwave_nvm 0x3000 0x659a4 -.nvm 0x9000 0x689a4 +.internal_storage 0x3a000 0x2bab8 +.zwave_nvm 0x3000 0x65ab8 +.nvm 0x9000 0x68ab8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6690 0x0 -.debug_info 0xcc168a 0x0 -.debug_abbrev 0x14b92 0x0 -.debug_loc 0x3c004 0x0 +.debug_frame 0x66e0 0x0 +.debug_info 0xcc1a00 0x0 +.debug_abbrev 0x14b6f 0x0 +.debug_loc 0x3c264 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0xa3b0 0x0 -.debug_line 0x4d23f 0x0 -.debug_str 0x859be 0x0 -Total 0xe77358 +.debug_ranges 0xa350 0x0 +.debug_line 0x4d38f 0x0 +.debug_str 0x85b21 0x0 +Total 0xe77cc2 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 180040 + 180320 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_US_size.txt index e0f3b3f282c..2ef9b4e2032 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4207A_REGION_US_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x2b6d4 0x0 -_cc_handlers_v3 0x21c 0x2b6d4 -_zw_protocol_cmd_handlers 0x70 0x2b8f0 -_zw_protocol_cmd_handlers_lr 0x30 0x2b960 -.ARM.exidx 0x8 0x2b990 -.copy.table 0xc 0x2b998 -.zero.table 0x0 0x2b9a4 +.text 0x2b7e8 0x0 +_cc_handlers_v3 0x21c 0x2b7e8 +_zw_protocol_cmd_handlers 0x70 0x2ba04 +_zw_protocol_cmd_handlers_lr 0x30 0x2ba74 +.ARM.exidx 0x8 0x2baa4 +.copy.table 0xc 0x2baac +.zero.table 0x0 0x2bab8 .stack 0x1000 0x20000000 -.data 0x5a4 0x20001000 -.bss 0x9fe4 0x200015a4 +.data 0x5a8 0x20001000 +.bss 0x9fe0 0x200015a8 .heap 0x4a78 0x2000b588 -.internal_storage 0x3a000 0x2b9a4 -.zwave_nvm 0x3000 0x659a4 -.nvm 0x9000 0x689a4 +.internal_storage 0x3a000 0x2bab8 +.zwave_nvm 0x3000 0x65ab8 +.nvm 0x9000 0x68ab8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6690 0x0 -.debug_info 0xcc168a 0x0 -.debug_abbrev 0x14b92 0x0 -.debug_loc 0x3c004 0x0 +.debug_frame 0x66e0 0x0 +.debug_info 0xcc1a00 0x0 +.debug_abbrev 0x14b6f 0x0 +.debug_loc 0x3c264 0x0 .debug_aranges 0xe0 0x0 -.debug_ranges 0xa3b0 0x0 -.debug_line 0x4d23f 0x0 -.debug_str 0x859c8 0x0 -Total 0xe77362 +.debug_ranges 0xa350 0x0 +.debug_line 0x4d38f 0x0 +.debug_str 0x85b2b 0x0 +Total 0xe77ccc The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 180040 + 180320 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4209A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4209A_REGION_US_LR_size.txt index 751f4fa4688..d0e99d47288 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4209A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_led_bulb_BRD4209A_REGION_US_LR_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_led_bulb.out : section size addr -.text 0x2b584 0x0 -_cc_handlers_v3 0x21c 0x2b584 -_zw_protocol_cmd_handlers 0x70 0x2b7a0 -_zw_protocol_cmd_handlers_lr 0x30 0x2b810 -.ARM.exidx 0x8 0x2b840 -.copy.table 0xc 0x2b848 -.zero.table 0x0 0x2b854 +.text 0x2b690 0x0 +_cc_handlers_v3 0x21c 0x2b690 +_zw_protocol_cmd_handlers 0x70 0x2b8ac +_zw_protocol_cmd_handlers_lr 0x30 0x2b91c +.ARM.exidx 0x8 0x2b94c +.copy.table 0xc 0x2b954 +.zero.table 0x0 0x2b960 .stack 0x1000 0x20000000 -.data 0x5a4 0x20001000 -.bss 0x9fc8 0x200015a4 +.data 0x5a8 0x20001000 +.bss 0x9fc4 0x200015a8 .heap 0x4a90 0x2000b570 -.internal_storage 0x3a000 0x2b854 -.zwave_nvm 0x3000 0x65854 -.nvm 0x9000 0x68854 +.internal_storage 0x3a000 0x2b960 +.zwave_nvm 0x3000 0x65960 +.nvm 0x9000 0x68960 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x66b0 0x0 -.debug_info 0xcc2aef 0x0 -.debug_abbrev 0x14e37 0x0 -.debug_loc 0x3c469 0x0 +.debug_frame 0x6700 0x0 +.debug_info 0xcc2e65 0x0 +.debug_abbrev 0x14e14 0x0 +.debug_loc 0x3c6c9 0x0 .debug_aranges 0xb0 0x0 -.debug_ranges 0xa640 0x0 -.debug_line 0x4db5e 0x0 -.debug_str 0x85cec 0x0 -Total 0xe79c40 +.debug_ranges 0xa5e0 0x0 +.debug_line 0x4dcaf 0x0 +.debug_str 0x85e4f 0x0 +Total 0xe7a5a3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179704 + 179976 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_EU_size.txt index 43e5298eeb7..bb4ac9ab429 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x33020 0x8006000 -_cc_handlers_v3 0x240 0x8039020 -_zw_protocol_cmd_handlers 0x70 0x8039260 -_zw_protocol_cmd_handlers_lr 0x30 0x80392d0 -.ARM.exidx 0x8 0x8039300 -.copy.table 0xc 0x8039308 -.zero.table 0x0 0x8039314 +.text 0x32e30 0x8006000 +_cc_handlers_v3 0x240 0x8038e30 +_zw_protocol_cmd_handlers 0x70 0x8039070 +_zw_protocol_cmd_handlers_lr 0x30 0x80390e0 +.ARM.exidx 0x8 0x8039110 +.copy.table 0xc 0x8039118 +.zero.table 0x0 0x8039124 .stack 0x1000 0x20000000 -.data 0x4f4 0x20001000 -.bss 0xab84 0x200014f4 +.data 0x4f8 0x20001000 +.bss 0xab7c 0x200014f8 .heap 0x3f88 0x2000c078 -.internal_storage 0x30000 0x8039314 -.zwave_nvm 0x0 0x8069314 -.nvm 0x8000 0x8069314 +.internal_storage 0x30000 0x8039124 +.zwave_nvm 0x0 0x8069124 +.nvm 0x8000 0x8069124 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd70428 0x0 -.debug_abbrev 0x1807a 0x0 -.debug_loc 0x4d0da 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd7090d 0x0 +.debug_abbrev 0x1807e 0x0 +.debug_loc 0x4d40b 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xbf88 0x0 -.debug_line 0x58ba7 0x0 -.debug_str 0x942e3 0x0 -Total 0xf50b05 +.debug_ranges 0xbf50 0x0 +.debug_line 0x58e28 0x0 +.debug_str 0x9440d 0x0 +Total 0xf514f6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 210952 + 210460 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51320 + 51316 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_US_LR_size.txt index 0b8d377f388..1a4bec7f33d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x33020 0x8006000 -_cc_handlers_v3 0x240 0x8039020 -_zw_protocol_cmd_handlers 0x70 0x8039260 -_zw_protocol_cmd_handlers_lr 0x30 0x80392d0 -.ARM.exidx 0x8 0x8039300 -.copy.table 0xc 0x8039308 -.zero.table 0x0 0x8039314 +.text 0x32e30 0x8006000 +_cc_handlers_v3 0x240 0x8038e30 +_zw_protocol_cmd_handlers 0x70 0x8039070 +_zw_protocol_cmd_handlers_lr 0x30 0x80390e0 +.ARM.exidx 0x8 0x8039110 +.copy.table 0xc 0x8039118 +.zero.table 0x0 0x8039124 .stack 0x1000 0x20000000 -.data 0x4f4 0x20001000 -.bss 0xab84 0x200014f4 +.data 0x4f8 0x20001000 +.bss 0xab7c 0x200014f8 .heap 0x3f88 0x2000c078 -.internal_storage 0x30000 0x8039314 -.zwave_nvm 0x0 0x8069314 -.nvm 0x8000 0x8069314 +.internal_storage 0x30000 0x8039124 +.zwave_nvm 0x0 0x8069124 +.nvm 0x8000 0x8069124 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd70428 0x0 -.debug_abbrev 0x1807a 0x0 -.debug_loc 0x4d0da 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd7090d 0x0 +.debug_abbrev 0x1807e 0x0 +.debug_loc 0x4d40b 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xbf88 0x0 -.debug_line 0x58ba7 0x0 -.debug_str 0x942d9 0x0 -Total 0xf50afb +.debug_ranges 0xbf50 0x0 +.debug_line 0x58e28 0x0 +.debug_str 0x94403 0x0 +Total 0xf514ec The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 210952 + 210460 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51320 + 51316 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_US_size.txt index 43e5298eeb7..bb4ac9ab429 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD2603A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x33020 0x8006000 -_cc_handlers_v3 0x240 0x8039020 -_zw_protocol_cmd_handlers 0x70 0x8039260 -_zw_protocol_cmd_handlers_lr 0x30 0x80392d0 -.ARM.exidx 0x8 0x8039300 -.copy.table 0xc 0x8039308 -.zero.table 0x0 0x8039314 +.text 0x32e30 0x8006000 +_cc_handlers_v3 0x240 0x8038e30 +_zw_protocol_cmd_handlers 0x70 0x8039070 +_zw_protocol_cmd_handlers_lr 0x30 0x80390e0 +.ARM.exidx 0x8 0x8039110 +.copy.table 0xc 0x8039118 +.zero.table 0x0 0x8039124 .stack 0x1000 0x20000000 -.data 0x4f4 0x20001000 -.bss 0xab84 0x200014f4 +.data 0x4f8 0x20001000 +.bss 0xab7c 0x200014f8 .heap 0x3f88 0x2000c078 -.internal_storage 0x30000 0x8039314 -.zwave_nvm 0x0 0x8069314 -.nvm 0x8000 0x8069314 +.internal_storage 0x30000 0x8039124 +.zwave_nvm 0x0 0x8069124 +.nvm 0x8000 0x8069124 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd70428 0x0 -.debug_abbrev 0x1807a 0x0 -.debug_loc 0x4d0da 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd7090d 0x0 +.debug_abbrev 0x1807e 0x0 +.debug_loc 0x4d40b 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xbf88 0x0 -.debug_line 0x58ba7 0x0 -.debug_str 0x942e3 0x0 -Total 0xf50b05 +.debug_ranges 0xbf50 0x0 +.debug_line 0x58e28 0x0 +.debug_str 0x9440d 0x0 +Total 0xf514f6 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 210952 + 210460 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51320 + 51316 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_EU_size.txt index b51313661b2..43b2ca11765 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_EU_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x2ca5c 0x0 -_cc_handlers_v3 0x240 0x2ca5c -_zw_protocol_cmd_handlers 0x70 0x2cc9c -_zw_protocol_cmd_handlers_lr 0x30 0x2cd0c -.ARM.exidx 0x8 0x2cd3c -.copy.table 0xc 0x2cd44 -.zero.table 0x0 0x2cd50 +.text 0x2cb68 0x0 +_cc_handlers_v3 0x240 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cda8 +_zw_protocol_cmd_handlers_lr 0x30 0x2ce18 +.ARM.exidx 0x8 0x2ce48 +.copy.table 0xc 0x2ce50 +.zero.table 0x0 0x2ce5c .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa0ec 0x20001400 +.data 0x404 0x20001000 +.bss 0xa0e8 0x20001404 .heap 0x4b10 0x2000b4f0 -.internal_storage 0x3a000 0x2cd50 -.zwave_nvm 0x3000 0x66d50 -.nvm 0x9000 0x69d50 +.internal_storage 0x3a000 0x2ce5c +.zwave_nvm 0x3000 0x66e5c +.nvm 0x9000 0x69e5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x69a0 0x0 -.debug_info 0xd2fcbd 0x0 -.debug_abbrev 0x155b5 0x0 -.debug_loc 0x40acb 0x0 +.debug_frame 0x69ec 0x0 +.debug_info 0xd30062 0x0 +.debug_abbrev 0x15592 0x0 +.debug_loc 0x40d1b 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa398 0x0 -.debug_line 0x4f278 0x0 -.debug_str 0x89775 0x0 -Total 0xef22e5 +.debug_ranges 0xa388 0x0 +.debug_line 0x4f3c3 0x0 +.debug_str 0x898c1 0x0 +Total 0xef2c96 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184656 + 184928 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_US_LR_size.txt index 47c99cf4c36..deda39b9d9d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_US_LR_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x2ca5c 0x0 -_cc_handlers_v3 0x240 0x2ca5c -_zw_protocol_cmd_handlers 0x70 0x2cc9c -_zw_protocol_cmd_handlers_lr 0x30 0x2cd0c -.ARM.exidx 0x8 0x2cd3c -.copy.table 0xc 0x2cd44 -.zero.table 0x0 0x2cd50 +.text 0x2cb68 0x0 +_cc_handlers_v3 0x240 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cda8 +_zw_protocol_cmd_handlers_lr 0x30 0x2ce18 +.ARM.exidx 0x8 0x2ce48 +.copy.table 0xc 0x2ce50 +.zero.table 0x0 0x2ce5c .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa0ec 0x20001400 +.data 0x404 0x20001000 +.bss 0xa0e8 0x20001404 .heap 0x4b10 0x2000b4f0 -.internal_storage 0x3a000 0x2cd50 -.zwave_nvm 0x3000 0x66d50 -.nvm 0x9000 0x69d50 +.internal_storage 0x3a000 0x2ce5c +.zwave_nvm 0x3000 0x66e5c +.nvm 0x9000 0x69e5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x69a0 0x0 -.debug_info 0xd2fcbd 0x0 -.debug_abbrev 0x155b5 0x0 -.debug_loc 0x40acb 0x0 +.debug_frame 0x69ec 0x0 +.debug_info 0xd30062 0x0 +.debug_abbrev 0x15592 0x0 +.debug_loc 0x40d1b 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa398 0x0 -.debug_line 0x4f278 0x0 -.debug_str 0x8976b 0x0 -Total 0xef22db +.debug_ranges 0xa388 0x0 +.debug_line 0x4f3c3 0x0 +.debug_str 0x898b7 0x0 +Total 0xef2c8c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184656 + 184928 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_US_size.txt index b51313661b2..43b2ca11765 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4202A_REGION_US_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x2ca5c 0x0 -_cc_handlers_v3 0x240 0x2ca5c -_zw_protocol_cmd_handlers 0x70 0x2cc9c -_zw_protocol_cmd_handlers_lr 0x30 0x2cd0c -.ARM.exidx 0x8 0x2cd3c -.copy.table 0xc 0x2cd44 -.zero.table 0x0 0x2cd50 +.text 0x2cb68 0x0 +_cc_handlers_v3 0x240 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cda8 +_zw_protocol_cmd_handlers_lr 0x30 0x2ce18 +.ARM.exidx 0x8 0x2ce48 +.copy.table 0xc 0x2ce50 +.zero.table 0x0 0x2ce5c .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa0ec 0x20001400 +.data 0x404 0x20001000 +.bss 0xa0e8 0x20001404 .heap 0x4b10 0x2000b4f0 -.internal_storage 0x3a000 0x2cd50 -.zwave_nvm 0x3000 0x66d50 -.nvm 0x9000 0x69d50 +.internal_storage 0x3a000 0x2ce5c +.zwave_nvm 0x3000 0x66e5c +.nvm 0x9000 0x69e5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x69a0 0x0 -.debug_info 0xd2fcbd 0x0 -.debug_abbrev 0x155b5 0x0 -.debug_loc 0x40acb 0x0 +.debug_frame 0x69ec 0x0 +.debug_info 0xd30062 0x0 +.debug_abbrev 0x15592 0x0 +.debug_loc 0x40d1b 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa398 0x0 -.debug_line 0x4f278 0x0 -.debug_str 0x89775 0x0 -Total 0xef22e5 +.debug_ranges 0xa388 0x0 +.debug_line 0x4f3c3 0x0 +.debug_str 0x898c1 0x0 +Total 0xef2c96 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184656 + 184928 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_EU_size.txt index a98b94011e5..abac3e28e89 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32b20 0x8006000 -_cc_handlers_v3 0x240 0x8038b20 -_zw_protocol_cmd_handlers 0x70 0x8038d60 -_zw_protocol_cmd_handlers_lr 0x30 0x8038dd0 -.ARM.exidx 0x8 0x8038e00 -.copy.table 0xc 0x8038e08 -.zero.table 0x0 0x8038e14 +.text 0x32938 0x8006000 +_cc_handlers_v3 0x240 0x8038938 +_zw_protocol_cmd_handlers 0x70 0x8038b78 +_zw_protocol_cmd_handlers_lr 0x30 0x8038be8 +.ARM.exidx 0x8 0x8038c18 +.copy.table 0xc 0x8038c20 +.zero.table 0x0 0x8038c2c .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xab64 0x200014f0 +.data 0x4f4 0x20001000 +.bss 0xab64 0x200014f4 .heap 0x3fa8 0x2000c058 -.internal_storage 0x30000 0x8038e14 -.zwave_nvm 0x0 0x8068e14 -.nvm 0x8000 0x8068e14 +.internal_storage 0x30000 0x8038c2c +.zwave_nvm 0x0 0x8068c2c +.nvm 0x8000 0x8068c2c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd71f21 0x0 -.debug_abbrev 0x181b0 0x0 -.debug_loc 0x4d258 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd7241a 0x0 +.debug_abbrev 0x181b4 0x0 +.debug_loc 0x4d5b3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xc0b8 0x0 -.debug_line 0x5915a 0x0 -.debug_str 0x93eea 0x0 -Total 0xf52650 +.debug_ranges 0xc0a0 0x0 +.debug_line 0x593dd 0x0 +.debug_str 0x94014 0x0 +Total 0xf530b1 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 209668 + 209184 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51284 + 51288 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_US_LR_size.txt index 70c901c9ff9..28875e93c6c 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32b20 0x8006000 -_cc_handlers_v3 0x240 0x8038b20 -_zw_protocol_cmd_handlers 0x70 0x8038d60 -_zw_protocol_cmd_handlers_lr 0x30 0x8038dd0 -.ARM.exidx 0x8 0x8038e00 -.copy.table 0xc 0x8038e08 -.zero.table 0x0 0x8038e14 +.text 0x32938 0x8006000 +_cc_handlers_v3 0x240 0x8038938 +_zw_protocol_cmd_handlers 0x70 0x8038b78 +_zw_protocol_cmd_handlers_lr 0x30 0x8038be8 +.ARM.exidx 0x8 0x8038c18 +.copy.table 0xc 0x8038c20 +.zero.table 0x0 0x8038c2c .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xab64 0x200014f0 +.data 0x4f4 0x20001000 +.bss 0xab64 0x200014f4 .heap 0x3fa8 0x2000c058 -.internal_storage 0x30000 0x8038e14 -.zwave_nvm 0x0 0x8068e14 -.nvm 0x8000 0x8068e14 +.internal_storage 0x30000 0x8038c2c +.zwave_nvm 0x0 0x8068c2c +.nvm 0x8000 0x8068c2c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd71f21 0x0 -.debug_abbrev 0x181b0 0x0 -.debug_loc 0x4d258 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd7241a 0x0 +.debug_abbrev 0x181b4 0x0 +.debug_loc 0x4d5b3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xc0b8 0x0 -.debug_line 0x5915a 0x0 -.debug_str 0x93ee0 0x0 -Total 0xf52646 +.debug_ranges 0xc0a0 0x0 +.debug_line 0x593dd 0x0 +.debug_str 0x9400a 0x0 +Total 0xf530a7 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 209668 + 209184 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51284 + 51288 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_US_size.txt index a98b94011e5..abac3e28e89 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204C_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32b20 0x8006000 -_cc_handlers_v3 0x240 0x8038b20 -_zw_protocol_cmd_handlers 0x70 0x8038d60 -_zw_protocol_cmd_handlers_lr 0x30 0x8038dd0 -.ARM.exidx 0x8 0x8038e00 -.copy.table 0xc 0x8038e08 -.zero.table 0x0 0x8038e14 +.text 0x32938 0x8006000 +_cc_handlers_v3 0x240 0x8038938 +_zw_protocol_cmd_handlers 0x70 0x8038b78 +_zw_protocol_cmd_handlers_lr 0x30 0x8038be8 +.ARM.exidx 0x8 0x8038c18 +.copy.table 0xc 0x8038c20 +.zero.table 0x0 0x8038c2c .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xab64 0x200014f0 +.data 0x4f4 0x20001000 +.bss 0xab64 0x200014f4 .heap 0x3fa8 0x2000c058 -.internal_storage 0x30000 0x8038e14 -.zwave_nvm 0x0 0x8068e14 -.nvm 0x8000 0x8068e14 +.internal_storage 0x30000 0x8038c2c +.zwave_nvm 0x0 0x8068c2c +.nvm 0x8000 0x8068c2c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd71f21 0x0 -.debug_abbrev 0x181b0 0x0 -.debug_loc 0x4d258 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd7241a 0x0 +.debug_abbrev 0x181b4 0x0 +.debug_loc 0x4d5b3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xc0b8 0x0 -.debug_line 0x5915a 0x0 -.debug_str 0x93eea 0x0 -Total 0xf52650 +.debug_ranges 0xc0a0 0x0 +.debug_line 0x593dd 0x0 +.debug_str 0x94014 0x0 +Total 0xf530b1 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 209668 + 209184 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51284 + 51288 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_EU_size.txt index 848e886326c..4dbcaa6a330 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32b60 0x8006000 -_cc_handlers_v3 0x240 0x8038b60 -_zw_protocol_cmd_handlers 0x70 0x8038da0 -_zw_protocol_cmd_handlers_lr 0x30 0x8038e10 -.ARM.exidx 0x8 0x8038e40 -.copy.table 0xc 0x8038e48 -.zero.table 0x0 0x8038e54 +.text 0x32970 0x8006000 +_cc_handlers_v3 0x240 0x8038970 +_zw_protocol_cmd_handlers 0x70 0x8038bb0 +_zw_protocol_cmd_handlers_lr 0x30 0x8038c20 +.ARM.exidx 0x8 0x8038c50 +.copy.table 0xc 0x8038c58 +.zero.table 0x0 0x8038c64 .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xab64 0x200014f0 +.data 0x4f4 0x20001000 +.bss 0xab64 0x200014f4 .heap 0x3fa8 0x2000c058 -.internal_storage 0x30000 0x8038e54 -.zwave_nvm 0x0 0x8068e54 -.nvm 0x8000 0x8068e54 +.internal_storage 0x30000 0x8038c64 +.zwave_nvm 0x0 0x8068c64 +.nvm 0x8000 0x8068c64 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd7217d 0x0 -.debug_abbrev 0x18254 0x0 -.debug_loc 0x4d335 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd72674 0x0 +.debug_abbrev 0x18258 0x0 +.debug_loc 0x4d690 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xc0c8 0x0 -.debug_line 0x59379 0x0 -.debug_str 0x940bd 0x0 -Total 0xf52e6f +.debug_ranges 0xc0b0 0x0 +.debug_line 0x595fe 0x0 +.debug_str 0x941e7 0x0 +Total 0xf538c8 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 209732 + 209240 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51284 + 51288 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_US_LR_size.txt index 5b5d9b2ebe1..ecd9089e31d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32b60 0x8006000 -_cc_handlers_v3 0x240 0x8038b60 -_zw_protocol_cmd_handlers 0x70 0x8038da0 -_zw_protocol_cmd_handlers_lr 0x30 0x8038e10 -.ARM.exidx 0x8 0x8038e40 -.copy.table 0xc 0x8038e48 -.zero.table 0x0 0x8038e54 +.text 0x32970 0x8006000 +_cc_handlers_v3 0x240 0x8038970 +_zw_protocol_cmd_handlers 0x70 0x8038bb0 +_zw_protocol_cmd_handlers_lr 0x30 0x8038c20 +.ARM.exidx 0x8 0x8038c50 +.copy.table 0xc 0x8038c58 +.zero.table 0x0 0x8038c64 .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xab64 0x200014f0 +.data 0x4f4 0x20001000 +.bss 0xab64 0x200014f4 .heap 0x3fa8 0x2000c058 -.internal_storage 0x30000 0x8038e54 -.zwave_nvm 0x0 0x8068e54 -.nvm 0x8000 0x8068e54 +.internal_storage 0x30000 0x8038c64 +.zwave_nvm 0x0 0x8068c64 +.nvm 0x8000 0x8068c64 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd7217d 0x0 -.debug_abbrev 0x18254 0x0 -.debug_loc 0x4d335 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd72674 0x0 +.debug_abbrev 0x18258 0x0 +.debug_loc 0x4d690 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xc0c8 0x0 -.debug_line 0x59379 0x0 -.debug_str 0x940b3 0x0 -Total 0xf52e65 +.debug_ranges 0xc0b0 0x0 +.debug_line 0x595fe 0x0 +.debug_str 0x941dd 0x0 +Total 0xf538be The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 209732 + 209240 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51284 + 51288 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_US_size.txt index 848e886326c..4dbcaa6a330 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4204D_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32b60 0x8006000 -_cc_handlers_v3 0x240 0x8038b60 -_zw_protocol_cmd_handlers 0x70 0x8038da0 -_zw_protocol_cmd_handlers_lr 0x30 0x8038e10 -.ARM.exidx 0x8 0x8038e40 -.copy.table 0xc 0x8038e48 -.zero.table 0x0 0x8038e54 +.text 0x32970 0x8006000 +_cc_handlers_v3 0x240 0x8038970 +_zw_protocol_cmd_handlers 0x70 0x8038bb0 +_zw_protocol_cmd_handlers_lr 0x30 0x8038c20 +.ARM.exidx 0x8 0x8038c50 +.copy.table 0xc 0x8038c58 +.zero.table 0x0 0x8038c64 .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xab64 0x200014f0 +.data 0x4f4 0x20001000 +.bss 0xab64 0x200014f4 .heap 0x3fa8 0x2000c058 -.internal_storage 0x30000 0x8038e54 -.zwave_nvm 0x0 0x8068e54 -.nvm 0x8000 0x8068e54 +.internal_storage 0x30000 0x8038c64 +.zwave_nvm 0x0 0x8068c64 +.nvm 0x8000 0x8068c64 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd7217d 0x0 -.debug_abbrev 0x18254 0x0 -.debug_loc 0x4d335 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd72674 0x0 +.debug_abbrev 0x18258 0x0 +.debug_loc 0x4d690 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xc0c8 0x0 -.debug_line 0x59379 0x0 -.debug_str 0x940bd 0x0 -Total 0xf52e6f +.debug_ranges 0xc0b0 0x0 +.debug_line 0x595fe 0x0 +.debug_str 0x941e7 0x0 +Total 0xf538c8 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 209732 + 209240 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51284 + 51288 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_EU_size.txt index 69b65110d06..fa554ec97ec 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_EU_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32714 0x8006000 -_cc_handlers_v3 0x240 0x8038714 -_zw_protocol_cmd_handlers 0x70 0x8038954 -_zw_protocol_cmd_handlers_lr 0x30 0x80389c4 -.ARM.exidx 0x8 0x80389f4 -.copy.table 0xc 0x80389fc -.zero.table 0x0 0x8038a08 +.text 0x32560 0x8006000 +_cc_handlers_v3 0x240 0x8038560 +_zw_protocol_cmd_handlers 0x70 0x80387a0 +_zw_protocol_cmd_handlers_lr 0x30 0x8038810 +.ARM.exidx 0x8 0x8038840 +.copy.table 0xc 0x8038848 +.zero.table 0x0 0x8038854 .stack 0x1000 0x20000000 -.data 0x4f4 0x20001000 -.bss 0xaa08 0x200014f4 +.data 0x4f8 0x20001000 +.bss 0xaa04 0x200014f8 .heap 0x4100 0x2000bf00 -.internal_storage 0x30000 0x8038a08 -.zwave_nvm 0x0 0x8068a08 -.nvm 0x8000 0x8068a08 +.internal_storage 0x30000 0x8038854 +.zwave_nvm 0x0 0x8068854 +.nvm 0x8000 0x8068854 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x714c 0x0 -.debug_info 0xd6fcda 0x0 -.debug_abbrev 0x180bb 0x0 -.debug_loc 0x4c574 0x0 +.debug_frame 0x71b8 0x0 +.debug_info 0xd702eb 0x0 +.debug_abbrev 0x180c7 0x0 +.debug_loc 0x4c7d8 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xc118 0x0 -.debug_line 0x5851a 0x0 -.debug_str 0x93fa4 0x0 -Total 0xf4e5ae +.debug_ranges 0xc1e0 0x0 +.debug_line 0x587fc 0x0 +.debug_str 0x940a0 0x0 +Total 0xf4f18d The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 208636 + 208204 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_US_LR_size.txt index 30eb5db271e..1c6c20fa9ac 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_US_LR_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32714 0x8006000 -_cc_handlers_v3 0x240 0x8038714 -_zw_protocol_cmd_handlers 0x70 0x8038954 -_zw_protocol_cmd_handlers_lr 0x30 0x80389c4 -.ARM.exidx 0x8 0x80389f4 -.copy.table 0xc 0x80389fc -.zero.table 0x0 0x8038a08 +.text 0x32560 0x8006000 +_cc_handlers_v3 0x240 0x8038560 +_zw_protocol_cmd_handlers 0x70 0x80387a0 +_zw_protocol_cmd_handlers_lr 0x30 0x8038810 +.ARM.exidx 0x8 0x8038840 +.copy.table 0xc 0x8038848 +.zero.table 0x0 0x8038854 .stack 0x1000 0x20000000 -.data 0x4f4 0x20001000 -.bss 0xaa08 0x200014f4 +.data 0x4f8 0x20001000 +.bss 0xaa04 0x200014f8 .heap 0x4100 0x2000bf00 -.internal_storage 0x30000 0x8038a08 -.zwave_nvm 0x0 0x8068a08 -.nvm 0x8000 0x8068a08 +.internal_storage 0x30000 0x8038854 +.zwave_nvm 0x0 0x8068854 +.nvm 0x8000 0x8068854 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x714c 0x0 -.debug_info 0xd6fcda 0x0 -.debug_abbrev 0x180bb 0x0 -.debug_loc 0x4c574 0x0 +.debug_frame 0x71b8 0x0 +.debug_info 0xd702eb 0x0 +.debug_abbrev 0x180c7 0x0 +.debug_loc 0x4c7d8 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xc118 0x0 -.debug_line 0x5851a 0x0 -.debug_str 0x93f9a 0x0 -Total 0xf4e5a4 +.debug_ranges 0xc1e0 0x0 +.debug_line 0x587fc 0x0 +.debug_str 0x94096 0x0 +Total 0xf4f183 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 208636 + 208204 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_US_size.txt index 69b65110d06..fa554ec97ec 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205A_REGION_US_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32714 0x8006000 -_cc_handlers_v3 0x240 0x8038714 -_zw_protocol_cmd_handlers 0x70 0x8038954 -_zw_protocol_cmd_handlers_lr 0x30 0x80389c4 -.ARM.exidx 0x8 0x80389f4 -.copy.table 0xc 0x80389fc -.zero.table 0x0 0x8038a08 +.text 0x32560 0x8006000 +_cc_handlers_v3 0x240 0x8038560 +_zw_protocol_cmd_handlers 0x70 0x80387a0 +_zw_protocol_cmd_handlers_lr 0x30 0x8038810 +.ARM.exidx 0x8 0x8038840 +.copy.table 0xc 0x8038848 +.zero.table 0x0 0x8038854 .stack 0x1000 0x20000000 -.data 0x4f4 0x20001000 -.bss 0xaa08 0x200014f4 +.data 0x4f8 0x20001000 +.bss 0xaa04 0x200014f8 .heap 0x4100 0x2000bf00 -.internal_storage 0x30000 0x8038a08 -.zwave_nvm 0x0 0x8068a08 -.nvm 0x8000 0x8068a08 +.internal_storage 0x30000 0x8038854 +.zwave_nvm 0x0 0x8068854 +.nvm 0x8000 0x8068854 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x714c 0x0 -.debug_info 0xd6fcda 0x0 -.debug_abbrev 0x180bb 0x0 -.debug_loc 0x4c574 0x0 +.debug_frame 0x71b8 0x0 +.debug_info 0xd702eb 0x0 +.debug_abbrev 0x180c7 0x0 +.debug_loc 0x4c7d8 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xc118 0x0 -.debug_line 0x5851a 0x0 -.debug_str 0x93fa4 0x0 -Total 0xf4e5ae +.debug_ranges 0xc1e0 0x0 +.debug_line 0x587fc 0x0 +.debug_str 0x940a0 0x0 +Total 0xf4f18d The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 208636 + 208204 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_EU_size.txt index 6d1c16028f2..1374d8a5c2b 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x330ec 0x8006000 -_cc_handlers_v3 0x240 0x80390ec -_zw_protocol_cmd_handlers 0x70 0x803932c -_zw_protocol_cmd_handlers_lr 0x30 0x803939c -.ARM.exidx 0x8 0x80393cc -.copy.table 0xc 0x80393d4 -.zero.table 0x0 0x80393e0 +.text 0x32ef4 0x8006000 +_cc_handlers_v3 0x240 0x8038ef4 +_zw_protocol_cmd_handlers 0x70 0x8039134 +_zw_protocol_cmd_handlers_lr 0x30 0x80391a4 +.ARM.exidx 0x8 0x80391d4 +.copy.table 0xc 0x80391dc +.zero.table 0x0 0x80391e8 .stack 0x1000 0x20000000 -.data 0x4f4 0x20001000 -.bss 0xab84 0x200014f4 +.data 0x4f8 0x20001000 +.bss 0xab7c 0x200014f8 .heap 0x3f88 0x2000c078 -.internal_storage 0x30000 0x80393e0 -.zwave_nvm 0x0 0x80693e0 -.nvm 0x8000 0x80693e0 +.internal_storage 0x30000 0x80391e8 +.zwave_nvm 0x0 0x80691e8 +.nvm 0x8000 0x80691e8 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd72a09 0x0 -.debug_abbrev 0x18306 0x0 -.debug_loc 0x4d29b 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd72f02 0x0 +.debug_abbrev 0x1830a 0x0 +.debug_loc 0x4d5fa 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xc0b8 0x0 -.debug_line 0x590a6 0x0 -.debug_str 0x945c0 0x0 -Total 0xf53f0b +.debug_ranges 0xc0a0 0x0 +.debug_line 0x59328 0x0 +.debug_str 0x946ea 0x0 +Total 0xf54957 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 211156 + 210656 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51320 + 51316 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_US_LR_size.txt index 2c70231523c..56f49556e85 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x330ec 0x8006000 -_cc_handlers_v3 0x240 0x80390ec -_zw_protocol_cmd_handlers 0x70 0x803932c -_zw_protocol_cmd_handlers_lr 0x30 0x803939c -.ARM.exidx 0x8 0x80393cc -.copy.table 0xc 0x80393d4 -.zero.table 0x0 0x80393e0 +.text 0x32ef4 0x8006000 +_cc_handlers_v3 0x240 0x8038ef4 +_zw_protocol_cmd_handlers 0x70 0x8039134 +_zw_protocol_cmd_handlers_lr 0x30 0x80391a4 +.ARM.exidx 0x8 0x80391d4 +.copy.table 0xc 0x80391dc +.zero.table 0x0 0x80391e8 .stack 0x1000 0x20000000 -.data 0x4f4 0x20001000 -.bss 0xab84 0x200014f4 +.data 0x4f8 0x20001000 +.bss 0xab7c 0x200014f8 .heap 0x3f88 0x2000c078 -.internal_storage 0x30000 0x80393e0 -.zwave_nvm 0x0 0x80693e0 -.nvm 0x8000 0x80693e0 +.internal_storage 0x30000 0x80391e8 +.zwave_nvm 0x0 0x80691e8 +.nvm 0x8000 0x80691e8 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd72a09 0x0 -.debug_abbrev 0x18306 0x0 -.debug_loc 0x4d29b 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd72f02 0x0 +.debug_abbrev 0x1830a 0x0 +.debug_loc 0x4d5fa 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xc0b8 0x0 -.debug_line 0x590a6 0x0 -.debug_str 0x945b6 0x0 -Total 0xf53f01 +.debug_ranges 0xc0a0 0x0 +.debug_line 0x59328 0x0 +.debug_str 0x946e0 0x0 +Total 0xf5494d The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 211156 + 210656 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51320 + 51316 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_US_size.txt index 6d1c16028f2..1374d8a5c2b 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4205B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x330ec 0x8006000 -_cc_handlers_v3 0x240 0x80390ec -_zw_protocol_cmd_handlers 0x70 0x803932c -_zw_protocol_cmd_handlers_lr 0x30 0x803939c -.ARM.exidx 0x8 0x80393cc -.copy.table 0xc 0x80393d4 -.zero.table 0x0 0x80393e0 +.text 0x32ef4 0x8006000 +_cc_handlers_v3 0x240 0x8038ef4 +_zw_protocol_cmd_handlers 0x70 0x8039134 +_zw_protocol_cmd_handlers_lr 0x30 0x80391a4 +.ARM.exidx 0x8 0x80391d4 +.copy.table 0xc 0x80391dc +.zero.table 0x0 0x80391e8 .stack 0x1000 0x20000000 -.data 0x4f4 0x20001000 -.bss 0xab84 0x200014f4 +.data 0x4f8 0x20001000 +.bss 0xab7c 0x200014f8 .heap 0x3f88 0x2000c078 -.internal_storage 0x30000 0x80393e0 -.zwave_nvm 0x0 0x80693e0 -.nvm 0x8000 0x80693e0 +.internal_storage 0x30000 0x80391e8 +.zwave_nvm 0x0 0x80691e8 +.nvm 0x8000 0x80691e8 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd72a09 0x0 -.debug_abbrev 0x18306 0x0 -.debug_loc 0x4d29b 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd72f02 0x0 +.debug_abbrev 0x1830a 0x0 +.debug_loc 0x4d5fa 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xc0b8 0x0 -.debug_line 0x590a6 0x0 -.debug_str 0x945c0 0x0 -Total 0xf53f0b +.debug_ranges 0xc0a0 0x0 +.debug_line 0x59328 0x0 +.debug_str 0x946ea 0x0 +Total 0xf54957 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 211156 + 210656 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51320 + 51316 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_EU_size.txt index b51313661b2..43b2ca11765 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_EU_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x2ca5c 0x0 -_cc_handlers_v3 0x240 0x2ca5c -_zw_protocol_cmd_handlers 0x70 0x2cc9c -_zw_protocol_cmd_handlers_lr 0x30 0x2cd0c -.ARM.exidx 0x8 0x2cd3c -.copy.table 0xc 0x2cd44 -.zero.table 0x0 0x2cd50 +.text 0x2cb68 0x0 +_cc_handlers_v3 0x240 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cda8 +_zw_protocol_cmd_handlers_lr 0x30 0x2ce18 +.ARM.exidx 0x8 0x2ce48 +.copy.table 0xc 0x2ce50 +.zero.table 0x0 0x2ce5c .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa0ec 0x20001400 +.data 0x404 0x20001000 +.bss 0xa0e8 0x20001404 .heap 0x4b10 0x2000b4f0 -.internal_storage 0x3a000 0x2cd50 -.zwave_nvm 0x3000 0x66d50 -.nvm 0x9000 0x69d50 +.internal_storage 0x3a000 0x2ce5c +.zwave_nvm 0x3000 0x66e5c +.nvm 0x9000 0x69e5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x69a0 0x0 -.debug_info 0xd2fcbd 0x0 -.debug_abbrev 0x155b5 0x0 -.debug_loc 0x40acb 0x0 +.debug_frame 0x69ec 0x0 +.debug_info 0xd30062 0x0 +.debug_abbrev 0x15592 0x0 +.debug_loc 0x40d1b 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa398 0x0 -.debug_line 0x4f278 0x0 -.debug_str 0x89775 0x0 -Total 0xef22e5 +.debug_ranges 0xa388 0x0 +.debug_line 0x4f3c3 0x0 +.debug_str 0x898c1 0x0 +Total 0xef2c96 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184656 + 184928 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_US_LR_size.txt index 47c99cf4c36..deda39b9d9d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_US_LR_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x2ca5c 0x0 -_cc_handlers_v3 0x240 0x2ca5c -_zw_protocol_cmd_handlers 0x70 0x2cc9c -_zw_protocol_cmd_handlers_lr 0x30 0x2cd0c -.ARM.exidx 0x8 0x2cd3c -.copy.table 0xc 0x2cd44 -.zero.table 0x0 0x2cd50 +.text 0x2cb68 0x0 +_cc_handlers_v3 0x240 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cda8 +_zw_protocol_cmd_handlers_lr 0x30 0x2ce18 +.ARM.exidx 0x8 0x2ce48 +.copy.table 0xc 0x2ce50 +.zero.table 0x0 0x2ce5c .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa0ec 0x20001400 +.data 0x404 0x20001000 +.bss 0xa0e8 0x20001404 .heap 0x4b10 0x2000b4f0 -.internal_storage 0x3a000 0x2cd50 -.zwave_nvm 0x3000 0x66d50 -.nvm 0x9000 0x69d50 +.internal_storage 0x3a000 0x2ce5c +.zwave_nvm 0x3000 0x66e5c +.nvm 0x9000 0x69e5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x69a0 0x0 -.debug_info 0xd2fcbd 0x0 -.debug_abbrev 0x155b5 0x0 -.debug_loc 0x40acb 0x0 +.debug_frame 0x69ec 0x0 +.debug_info 0xd30062 0x0 +.debug_abbrev 0x15592 0x0 +.debug_loc 0x40d1b 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa398 0x0 -.debug_line 0x4f278 0x0 -.debug_str 0x8976b 0x0 -Total 0xef22db +.debug_ranges 0xa388 0x0 +.debug_line 0x4f3c3 0x0 +.debug_str 0x898b7 0x0 +Total 0xef2c8c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184656 + 184928 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_US_size.txt index b51313661b2..43b2ca11765 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4207A_REGION_US_size.txt @@ -5,36 +5,36 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x2ca5c 0x0 -_cc_handlers_v3 0x240 0x2ca5c -_zw_protocol_cmd_handlers 0x70 0x2cc9c -_zw_protocol_cmd_handlers_lr 0x30 0x2cd0c -.ARM.exidx 0x8 0x2cd3c -.copy.table 0xc 0x2cd44 -.zero.table 0x0 0x2cd50 +.text 0x2cb68 0x0 +_cc_handlers_v3 0x240 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cda8 +_zw_protocol_cmd_handlers_lr 0x30 0x2ce18 +.ARM.exidx 0x8 0x2ce48 +.copy.table 0xc 0x2ce50 +.zero.table 0x0 0x2ce5c .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa0ec 0x20001400 +.data 0x404 0x20001000 +.bss 0xa0e8 0x20001404 .heap 0x4b10 0x2000b4f0 -.internal_storage 0x3a000 0x2cd50 -.zwave_nvm 0x3000 0x66d50 -.nvm 0x9000 0x69d50 +.internal_storage 0x3a000 0x2ce5c +.zwave_nvm 0x3000 0x66e5c +.nvm 0x9000 0x69e5c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x69a0 0x0 -.debug_info 0xd2fcbd 0x0 -.debug_abbrev 0x155b5 0x0 -.debug_loc 0x40acb 0x0 +.debug_frame 0x69ec 0x0 +.debug_info 0xd30062 0x0 +.debug_abbrev 0x15592 0x0 +.debug_loc 0x40d1b 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa398 0x0 -.debug_line 0x4f278 0x0 -.debug_str 0x89775 0x0 -Total 0xef22e5 +.debug_ranges 0xa388 0x0 +.debug_line 0x4f3c3 0x0 +.debug_str 0x898c1 0x0 +Total 0xef2c96 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184656 + 184928 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4209A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4209A_REGION_US_LR_size.txt index bd11d1d8276..653bcf341d5 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4209A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4209A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x2c7f0 0x0 -_cc_handlers_v3 0x240 0x2c7f0 -_zw_protocol_cmd_handlers 0x70 0x2ca30 -_zw_protocol_cmd_handlers_lr 0x30 0x2caa0 -.ARM.exidx 0x8 0x2cad0 -.copy.table 0xc 0x2cad8 -.zero.table 0x0 0x2cae4 +.text 0x2c8dc 0x0 +_cc_handlers_v3 0x240 0x2c8dc +_zw_protocol_cmd_handlers 0x70 0x2cb1c +_zw_protocol_cmd_handlers_lr 0x30 0x2cb8c +.ARM.exidx 0x8 0x2cbbc +.copy.table 0xc 0x2cbc4 +.zero.table 0x0 0x2cbd0 .stack 0x1000 0x20000000 -.data 0x3fc 0x20001000 -.bss 0xa0ec 0x200013fc +.data 0x400 0x20001000 +.bss 0xa0e4 0x20001400 .heap 0x4b18 0x2000b4e8 -.internal_storage 0x3a000 0x2cae4 -.zwave_nvm 0x3000 0x66ae4 -.nvm 0x9000 0x69ae4 +.internal_storage 0x3a000 0x2cbd0 +.zwave_nvm 0x3000 0x66bd0 +.nvm 0x9000 0x69bd0 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x69a8 0x0 -.debug_info 0xd30e6b 0x0 -.debug_abbrev 0x15ac4 0x0 -.debug_loc 0x40594 0x0 +.debug_frame 0x69f4 0x0 +.debug_info 0xd31206 0x0 +.debug_abbrev 0x15aa1 0x0 +.debug_loc 0x407f6 0x0 .debug_aranges 0xb0 0x0 -.debug_ranges 0xa790 0x0 -.debug_line 0x50015 0x0 -.debug_str 0x89a33 0x0 -Total 0xef464e +.debug_ranges 0xa7a0 0x0 +.debug_line 0x50162 0x0 +.debug_str 0x89b7f 0x0 +Total 0xef5005 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184032 + 184272 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48360 + 48356 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4210A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4210A_REGION_US_LR_size.txt index ce2109fd5c9..229fca09464 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4210A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4210A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32b70 0x8006000 -_cc_handlers_v3 0x240 0x8038b70 -_zw_protocol_cmd_handlers 0x70 0x8038db0 -_zw_protocol_cmd_handlers_lr 0x30 0x8038e20 -.ARM.exidx 0x8 0x8038e50 -.copy.table 0xc 0x8038e58 -.zero.table 0x0 0x8038e64 +.text 0x32970 0x8006000 +_cc_handlers_v3 0x240 0x8038970 +_zw_protocol_cmd_handlers 0x70 0x8038bb0 +_zw_protocol_cmd_handlers_lr 0x30 0x8038c20 +.ARM.exidx 0x8 0x8038c50 +.copy.table 0xc 0x8038c58 +.zero.table 0x0 0x8038c64 .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xab64 0x200014f0 +.data 0x4f4 0x20001000 +.bss 0xab64 0x200014f4 .heap 0x3fa8 0x2000c058 -.internal_storage 0x30000 0x8038e64 -.zwave_nvm 0x0 0x8068e64 -.nvm 0x8000 0x8068e64 +.internal_storage 0x30000 0x8038c64 +.zwave_nvm 0x0 0x8068c64 +.nvm 0x8000 0x8068c64 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x72e4 0x0 -.debug_info 0xd72181 0x0 -.debug_abbrev 0x18254 0x0 -.debug_loc 0x4d33f 0x0 +.debug_frame 0x733c 0x0 +.debug_info 0xd72678 0x0 +.debug_abbrev 0x18258 0x0 +.debug_loc 0x4d69a 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xc080 0x0 -.debug_line 0x59365 0x0 -.debug_str 0x940b3 0x0 -Total 0xf52e27 +.debug_ranges 0xc068 0x0 +.debug_line 0x595ea 0x0 +.debug_str 0x941dd 0x0 +Total 0xf53870 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 209748 + 209240 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51284 + 51288 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_EU_size.txt index 5fea9723252..1314cf2db52 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32a28 0x8006000 -_cc_handlers_v3 0x240 0x8038a28 -_zw_protocol_cmd_handlers 0x70 0x8038c68 -_zw_protocol_cmd_handlers_lr 0x30 0x8038cd8 -.ARM.exidx 0x8 0x8038d08 -.copy.table 0xc 0x8038d10 -.zero.table 0x0 0x8038d1c +.text 0x32ca8 0x8006000 +_cc_handlers_v3 0x240 0x8038ca8 +_zw_protocol_cmd_handlers 0x70 0x8038ee8 +_zw_protocol_cmd_handlers_lr 0x30 0x8038f58 +.ARM.exidx 0x8 0x8038f88 +.copy.table 0xc 0x8038f90 +.zero.table 0x0 0x8038f9c .stack 0x1000 0x20000000 -.data 0x4ec 0x20001000 -.bss 0xaaec 0x200014ec -.heap 0x34028 0x2000bfd8 -.internal_storage 0x30000 0x8038d1c -.zwave_nvm 0x0 0x8068d1c -.nvm 0x8000 0x8068d1c +.data 0x4f0 0x20001000 +.bss 0xaadc 0x200014f0 +.heap 0x34030 0x2000bfd0 +.internal_storage 0x30000 0x8038f9c +.zwave_nvm 0x0 0x8068f9c +.nvm 0x8000 0x8068f9c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x727c 0x0 -.debug_info 0xd71001 0x0 -.debug_abbrev 0x1810f 0x0 -.debug_loc 0x4d027 0x0 +.debug_frame 0x72e0 0x0 +.debug_info 0xd7151a 0x0 +.debug_abbrev 0x180f9 0x0 +.debug_loc 0x4d3ae 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xc0b0 0x0 -.debug_line 0x58d89 0x0 -.debug_str 0x94149 0x0 -Total 0xf81188 +.debug_ranges 0xc070 0x0 +.debug_line 0x58fd0 0x0 +.debug_str 0x94245 0x0 +Total 0xf81ff5 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 209416 + 210060 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51160 + 51148 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_US_LR_size.txt index 3462c1551d3..27b6662b26f 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32a28 0x8006000 -_cc_handlers_v3 0x240 0x8038a28 -_zw_protocol_cmd_handlers 0x70 0x8038c68 -_zw_protocol_cmd_handlers_lr 0x30 0x8038cd8 -.ARM.exidx 0x8 0x8038d08 -.copy.table 0xc 0x8038d10 -.zero.table 0x0 0x8038d1c +.text 0x32ca8 0x8006000 +_cc_handlers_v3 0x240 0x8038ca8 +_zw_protocol_cmd_handlers 0x70 0x8038ee8 +_zw_protocol_cmd_handlers_lr 0x30 0x8038f58 +.ARM.exidx 0x8 0x8038f88 +.copy.table 0xc 0x8038f90 +.zero.table 0x0 0x8038f9c .stack 0x1000 0x20000000 -.data 0x4ec 0x20001000 -.bss 0xaaec 0x200014ec -.heap 0x34028 0x2000bfd8 -.internal_storage 0x30000 0x8038d1c -.zwave_nvm 0x0 0x8068d1c -.nvm 0x8000 0x8068d1c +.data 0x4f0 0x20001000 +.bss 0xaadc 0x200014f0 +.heap 0x34030 0x2000bfd0 +.internal_storage 0x30000 0x8038f9c +.zwave_nvm 0x0 0x8068f9c +.nvm 0x8000 0x8068f9c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x727c 0x0 -.debug_info 0xd71001 0x0 -.debug_abbrev 0x1810f 0x0 -.debug_loc 0x4d027 0x0 +.debug_frame 0x72e0 0x0 +.debug_info 0xd7151a 0x0 +.debug_abbrev 0x180f9 0x0 +.debug_loc 0x4d3ae 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xc0b0 0x0 -.debug_line 0x58d89 0x0 -.debug_str 0x9413f 0x0 -Total 0xf8117e +.debug_ranges 0xc070 0x0 +.debug_line 0x58fd0 0x0 +.debug_str 0x9423b 0x0 +Total 0xf81feb The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 209416 + 210060 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51160 + 51148 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_US_size.txt index 5fea9723252..1314cf2db52 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4400B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32a28 0x8006000 -_cc_handlers_v3 0x240 0x8038a28 -_zw_protocol_cmd_handlers 0x70 0x8038c68 -_zw_protocol_cmd_handlers_lr 0x30 0x8038cd8 -.ARM.exidx 0x8 0x8038d08 -.copy.table 0xc 0x8038d10 -.zero.table 0x0 0x8038d1c +.text 0x32ca8 0x8006000 +_cc_handlers_v3 0x240 0x8038ca8 +_zw_protocol_cmd_handlers 0x70 0x8038ee8 +_zw_protocol_cmd_handlers_lr 0x30 0x8038f58 +.ARM.exidx 0x8 0x8038f88 +.copy.table 0xc 0x8038f90 +.zero.table 0x0 0x8038f9c .stack 0x1000 0x20000000 -.data 0x4ec 0x20001000 -.bss 0xaaec 0x200014ec -.heap 0x34028 0x2000bfd8 -.internal_storage 0x30000 0x8038d1c -.zwave_nvm 0x0 0x8068d1c -.nvm 0x8000 0x8068d1c +.data 0x4f0 0x20001000 +.bss 0xaadc 0x200014f0 +.heap 0x34030 0x2000bfd0 +.internal_storage 0x30000 0x8038f9c +.zwave_nvm 0x0 0x8068f9c +.nvm 0x8000 0x8068f9c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x727c 0x0 -.debug_info 0xd71001 0x0 -.debug_abbrev 0x1810f 0x0 -.debug_loc 0x4d027 0x0 +.debug_frame 0x72e0 0x0 +.debug_info 0xd7151a 0x0 +.debug_abbrev 0x180f9 0x0 +.debug_loc 0x4d3ae 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xc0b0 0x0 -.debug_line 0x58d89 0x0 -.debug_str 0x94149 0x0 -Total 0xf81188 +.debug_ranges 0xc070 0x0 +.debug_line 0x58fd0 0x0 +.debug_str 0x94245 0x0 +Total 0xf81ff5 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 209416 + 210060 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51160 + 51148 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4401B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4401B_REGION_US_LR_size.txt index 4528ce34f96..83b7d341a8d 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4401B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_multilevel_sensor_BRD4401B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_multilevel_sensor.out : section size addr -.text 0x32a28 0x8006000 -_cc_handlers_v3 0x240 0x8038a28 -_zw_protocol_cmd_handlers 0x70 0x8038c68 -_zw_protocol_cmd_handlers_lr 0x30 0x8038cd8 -.ARM.exidx 0x8 0x8038d08 -.copy.table 0xc 0x8038d10 -.zero.table 0x0 0x8038d1c +.text 0x32ca8 0x8006000 +_cc_handlers_v3 0x240 0x8038ca8 +_zw_protocol_cmd_handlers 0x70 0x8038ee8 +_zw_protocol_cmd_handlers_lr 0x30 0x8038f58 +.ARM.exidx 0x8 0x8038f88 +.copy.table 0xc 0x8038f90 +.zero.table 0x0 0x8038f9c .stack 0x1000 0x20000000 -.data 0x4ec 0x20001000 -.bss 0xaaec 0x200014ec -.heap 0x34028 0x2000bfd8 -.internal_storage 0x30000 0x8038d1c -.zwave_nvm 0x0 0x8068d1c -.nvm 0x8000 0x8068d1c +.data 0x4f0 0x20001000 +.bss 0xaadc 0x200014f0 +.heap 0x34030 0x2000bfd0 +.internal_storage 0x30000 0x8038f9c +.zwave_nvm 0x0 0x8068f9c +.nvm 0x8000 0x8068f9c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x727c 0x0 -.debug_info 0xd71005 0x0 -.debug_abbrev 0x1810f 0x0 -.debug_loc 0x4d027 0x0 +.debug_frame 0x72e0 0x0 +.debug_info 0xd7151e 0x0 +.debug_abbrev 0x180f9 0x0 +.debug_loc 0x4d3ae 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xc070 0x0 -.debug_line 0x58d77 0x0 -.debug_str 0x9413f 0x0 -Total 0xf81130 +.debug_ranges 0xc030 0x0 +.debug_line 0x58fbe 0x0 +.debug_str 0x9423b 0x0 +Total 0xf81f9d The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 209416 + 210060 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51160 + 51148 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_EU_size.txt index db63975e2b0..0991ceb0ed8 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_EU_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x2c7a0 0x0 -_cc_handlers_v3 0x2ac 0x2c7a0 -_zaf_cc_config 0x28 0x2ca4c -_zw_protocol_cmd_handlers 0x70 0x2ca74 -_zw_protocol_cmd_handlers_lr 0x30 0x2cae4 -.ARM.exidx 0x8 0x2cb14 -.copy.table 0xc 0x2cb1c -.zero.table 0x0 0x2cb28 +.text 0x2c8bc 0x0 +_cc_handlers_v3 0x2ac 0x2c8bc +_zaf_cc_config 0x28 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cb90 +_zw_protocol_cmd_handlers_lr 0x30 0x2cc00 +.ARM.exidx 0x8 0x2cc30 +.copy.table 0xc 0x2cc38 +.zero.table 0x0 0x2cc44 .stack 0x1000 0x20000000 -.data 0x580 0x20001000 -.bss 0xa110 0x20001580 +.data 0x584 0x20001000 +.bss 0xa108 0x20001584 .heap 0x4970 0x2000b690 -.internal_storage 0x3a000 0x2cb28 -.zwave_nvm 0x3000 0x66b28 -.nvm 0x9000 0x69b28 +.internal_storage 0x3a000 0x2cc44 +.zwave_nvm 0x3000 0x66c44 +.nvm 0x9000 0x69c44 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6940 0x0 -.debug_info 0xdf6506 0x0 -.debug_abbrev 0x1562b 0x0 -.debug_loc 0x3eb05 0x0 +.debug_frame 0x6990 0x0 +.debug_info 0xdf68d0 0x0 +.debug_abbrev 0x15608 0x0 +.debug_loc 0x3ed70 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa3d8 0x0 -.debug_line 0x4f49f 0x0 -.debug_str 0x8699e 0x0 -Total 0xfb3dea +.debug_ranges 0xa460 0x0 +.debug_line 0x4f5ea 0x0 +.debug_str 0x86b13 0x0 +Total 0xfb48ac The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184488 + 184776 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48784 + 48780 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_US_LR_size.txt index 32cb5f071e2..769e6d90725 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_US_LR_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x2c7a0 0x0 -_cc_handlers_v3 0x2ac 0x2c7a0 -_zaf_cc_config 0x28 0x2ca4c -_zw_protocol_cmd_handlers 0x70 0x2ca74 -_zw_protocol_cmd_handlers_lr 0x30 0x2cae4 -.ARM.exidx 0x8 0x2cb14 -.copy.table 0xc 0x2cb1c -.zero.table 0x0 0x2cb28 +.text 0x2c8bc 0x0 +_cc_handlers_v3 0x2ac 0x2c8bc +_zaf_cc_config 0x28 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cb90 +_zw_protocol_cmd_handlers_lr 0x30 0x2cc00 +.ARM.exidx 0x8 0x2cc30 +.copy.table 0xc 0x2cc38 +.zero.table 0x0 0x2cc44 .stack 0x1000 0x20000000 -.data 0x580 0x20001000 -.bss 0xa110 0x20001580 +.data 0x584 0x20001000 +.bss 0xa108 0x20001584 .heap 0x4970 0x2000b690 -.internal_storage 0x3a000 0x2cb28 -.zwave_nvm 0x3000 0x66b28 -.nvm 0x9000 0x69b28 +.internal_storage 0x3a000 0x2cc44 +.zwave_nvm 0x3000 0x66c44 +.nvm 0x9000 0x69c44 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6940 0x0 -.debug_info 0xdf6506 0x0 -.debug_abbrev 0x1562b 0x0 -.debug_loc 0x3eb05 0x0 +.debug_frame 0x6990 0x0 +.debug_info 0xdf68d0 0x0 +.debug_abbrev 0x15608 0x0 +.debug_loc 0x3ed70 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa3d8 0x0 -.debug_line 0x4f49f 0x0 -.debug_str 0x86994 0x0 -Total 0xfb3de0 +.debug_ranges 0xa460 0x0 +.debug_line 0x4f5ea 0x0 +.debug_str 0x86b09 0x0 +Total 0xfb48a2 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184488 + 184776 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48784 + 48780 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_US_size.txt index db63975e2b0..0991ceb0ed8 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4202A_REGION_US_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x2c7a0 0x0 -_cc_handlers_v3 0x2ac 0x2c7a0 -_zaf_cc_config 0x28 0x2ca4c -_zw_protocol_cmd_handlers 0x70 0x2ca74 -_zw_protocol_cmd_handlers_lr 0x30 0x2cae4 -.ARM.exidx 0x8 0x2cb14 -.copy.table 0xc 0x2cb1c -.zero.table 0x0 0x2cb28 +.text 0x2c8bc 0x0 +_cc_handlers_v3 0x2ac 0x2c8bc +_zaf_cc_config 0x28 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cb90 +_zw_protocol_cmd_handlers_lr 0x30 0x2cc00 +.ARM.exidx 0x8 0x2cc30 +.copy.table 0xc 0x2cc38 +.zero.table 0x0 0x2cc44 .stack 0x1000 0x20000000 -.data 0x580 0x20001000 -.bss 0xa110 0x20001580 +.data 0x584 0x20001000 +.bss 0xa108 0x20001584 .heap 0x4970 0x2000b690 -.internal_storage 0x3a000 0x2cb28 -.zwave_nvm 0x3000 0x66b28 -.nvm 0x9000 0x69b28 +.internal_storage 0x3a000 0x2cc44 +.zwave_nvm 0x3000 0x66c44 +.nvm 0x9000 0x69c44 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6940 0x0 -.debug_info 0xdf6506 0x0 -.debug_abbrev 0x1562b 0x0 -.debug_loc 0x3eb05 0x0 +.debug_frame 0x6990 0x0 +.debug_info 0xdf68d0 0x0 +.debug_abbrev 0x15608 0x0 +.debug_loc 0x3ed70 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa3d8 0x0 -.debug_line 0x4f49f 0x0 -.debug_str 0x8699e 0x0 -Total 0xfb3dea +.debug_ranges 0xa460 0x0 +.debug_line 0x4f5ea 0x0 +.debug_str 0x86b13 0x0 +Total 0xfb48ac The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184488 + 184776 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48784 + 48780 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_EU_size.txt index f55279830ff..48e76a0effb 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_EU_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x320d8 0x8006000 -_cc_handlers_v3 0x2ac 0x80380d8 -_zaf_cc_config 0x28 0x8038384 -_zw_protocol_cmd_handlers 0x70 0x80383ac -_zw_protocol_cmd_handlers_lr 0x30 0x803841c -.ARM.exidx 0x8 0x803844c -.copy.table 0xc 0x8038454 -.zero.table 0x0 0x8038460 +.text 0x31f2c 0x8006000 +_cc_handlers_v3 0x2ac 0x8037f2c +_zaf_cc_config 0x28 0x80381d8 +_zw_protocol_cmd_handlers 0x70 0x8038200 +_zw_protocol_cmd_handlers_lr 0x30 0x8038270 +.ARM.exidx 0x8 0x80382a0 +.copy.table 0xc 0x80382a8 +.zero.table 0x0 0x80382b4 .stack 0x1000 0x20000000 -.data 0x674 0x20001000 -.bss 0xaa1c 0x20001674 -.heap 0x3f70 0x2000c090 -.internal_storage 0x30000 0x8038460 -.zwave_nvm 0x0 0x8068460 -.nvm 0x8000 0x8068460 +.data 0x678 0x20001000 +.bss 0xaa10 0x20001678 +.heap 0x3f78 0x2000c088 +.internal_storage 0x30000 0x80382b4 +.zwave_nvm 0x0 0x80682b4 +.nvm 0x8000 0x80682b4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x70ec 0x0 -.debug_info 0xe3710b 0x0 -.debug_abbrev 0x1817d 0x0 -.debug_loc 0x49e45 0x0 +.debug_frame 0x7158 0x0 +.debug_info 0xe37735 0x0 +.debug_abbrev 0x18189 0x0 +.debug_loc 0x4a185 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xbe68 0x0 -.debug_line 0x584fc 0x0 -.debug_str 0x92041 0x0 -Total 0x1010b3d +.debug_ranges 0xbed0 0x0 +.debug_line 0x587ea 0x0 +.debug_str 0x92166 0x0 +Total 0x10117ee The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 207572 + 207148 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51344 + 51336 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_US_LR_size.txt index 687f51a8c44..dd83d3962b7 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_US_LR_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x320d8 0x8006000 -_cc_handlers_v3 0x2ac 0x80380d8 -_zaf_cc_config 0x28 0x8038384 -_zw_protocol_cmd_handlers 0x70 0x80383ac -_zw_protocol_cmd_handlers_lr 0x30 0x803841c -.ARM.exidx 0x8 0x803844c -.copy.table 0xc 0x8038454 -.zero.table 0x0 0x8038460 +.text 0x31f2c 0x8006000 +_cc_handlers_v3 0x2ac 0x8037f2c +_zaf_cc_config 0x28 0x80381d8 +_zw_protocol_cmd_handlers 0x70 0x8038200 +_zw_protocol_cmd_handlers_lr 0x30 0x8038270 +.ARM.exidx 0x8 0x80382a0 +.copy.table 0xc 0x80382a8 +.zero.table 0x0 0x80382b4 .stack 0x1000 0x20000000 -.data 0x674 0x20001000 -.bss 0xaa1c 0x20001674 -.heap 0x3f70 0x2000c090 -.internal_storage 0x30000 0x8038460 -.zwave_nvm 0x0 0x8068460 -.nvm 0x8000 0x8068460 +.data 0x678 0x20001000 +.bss 0xaa10 0x20001678 +.heap 0x3f78 0x2000c088 +.internal_storage 0x30000 0x80382b4 +.zwave_nvm 0x0 0x80682b4 +.nvm 0x8000 0x80682b4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x70ec 0x0 -.debug_info 0xe3710b 0x0 -.debug_abbrev 0x1817d 0x0 -.debug_loc 0x49e45 0x0 +.debug_frame 0x7158 0x0 +.debug_info 0xe37735 0x0 +.debug_abbrev 0x18189 0x0 +.debug_loc 0x4a185 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xbe68 0x0 -.debug_line 0x584fc 0x0 -.debug_str 0x92037 0x0 -Total 0x1010b33 +.debug_ranges 0xbed0 0x0 +.debug_line 0x587ea 0x0 +.debug_str 0x9215c 0x0 +Total 0x10117e4 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 207572 + 207148 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51344 + 51336 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_US_size.txt index f55279830ff..48e76a0effb 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205A_REGION_US_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x320d8 0x8006000 -_cc_handlers_v3 0x2ac 0x80380d8 -_zaf_cc_config 0x28 0x8038384 -_zw_protocol_cmd_handlers 0x70 0x80383ac -_zw_protocol_cmd_handlers_lr 0x30 0x803841c -.ARM.exidx 0x8 0x803844c -.copy.table 0xc 0x8038454 -.zero.table 0x0 0x8038460 +.text 0x31f2c 0x8006000 +_cc_handlers_v3 0x2ac 0x8037f2c +_zaf_cc_config 0x28 0x80381d8 +_zw_protocol_cmd_handlers 0x70 0x8038200 +_zw_protocol_cmd_handlers_lr 0x30 0x8038270 +.ARM.exidx 0x8 0x80382a0 +.copy.table 0xc 0x80382a8 +.zero.table 0x0 0x80382b4 .stack 0x1000 0x20000000 -.data 0x674 0x20001000 -.bss 0xaa1c 0x20001674 -.heap 0x3f70 0x2000c090 -.internal_storage 0x30000 0x8038460 -.zwave_nvm 0x0 0x8068460 -.nvm 0x8000 0x8068460 +.data 0x678 0x20001000 +.bss 0xaa10 0x20001678 +.heap 0x3f78 0x2000c088 +.internal_storage 0x30000 0x80382b4 +.zwave_nvm 0x0 0x80682b4 +.nvm 0x8000 0x80682b4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x70ec 0x0 -.debug_info 0xe3710b 0x0 -.debug_abbrev 0x1817d 0x0 -.debug_loc 0x49e45 0x0 +.debug_frame 0x7158 0x0 +.debug_info 0xe37735 0x0 +.debug_abbrev 0x18189 0x0 +.debug_loc 0x4a185 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xbe68 0x0 -.debug_line 0x584fc 0x0 -.debug_str 0x92041 0x0 -Total 0x1010b3d +.debug_ranges 0xbed0 0x0 +.debug_line 0x587ea 0x0 +.debug_str 0x92166 0x0 +Total 0x10117ee The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 207572 + 207148 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51344 + 51336 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_EU_size.txt index a3afabd4427..1cb2311bd53 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_EU_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x32ac8 0x8006000 -_cc_handlers_v3 0x2ac 0x8038ac8 -_zaf_cc_config 0x28 0x8038d74 -_zw_protocol_cmd_handlers 0x70 0x8038d9c -_zw_protocol_cmd_handlers_lr 0x30 0x8038e0c -.ARM.exidx 0x8 0x8038e3c -.copy.table 0xc 0x8038e44 -.zero.table 0x0 0x8038e50 +.text 0x32848 0x8006000 +_cc_handlers_v3 0x2ac 0x8038848 +_zaf_cc_config 0x28 0x8038af4 +_zw_protocol_cmd_handlers 0x70 0x8038b1c +_zw_protocol_cmd_handlers_lr 0x30 0x8038b8c +.ARM.exidx 0x8 0x8038bbc +.copy.table 0xc 0x8038bc4 +.zero.table 0x0 0x8038bd0 .stack 0x1000 0x20000000 -.data 0x674 0x20001000 -.bss 0xaba0 0x20001674 -.heap 0x3de8 0x2000c218 -.internal_storage 0x30000 0x8038e50 -.zwave_nvm 0x0 0x8068e50 -.nvm 0x8000 0x8068e50 +.data 0x678 0x20001000 +.bss 0xab88 0x20001678 +.heap 0x3e00 0x2000c200 +.internal_storage 0x30000 0x8038bd0 +.zwave_nvm 0x0 0x8068bd0 +.nvm 0x8000 0x8068bd0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x728c 0x0 -.debug_info 0xe39def 0x0 -.debug_abbrev 0x183d3 0x0 -.debug_loc 0x4aaf7 0x0 +.debug_frame 0x72f0 0x0 +.debug_info 0xe3a343 0x0 +.debug_abbrev 0x183cc 0x0 +.debug_loc 0x4af42 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xbf18 0x0 -.debug_line 0x58fec 0x0 -.debug_str 0x9268b 0x0 -Total 0x101649f +.debug_ranges 0xbdd0 0x0 +.debug_line 0x591af 0x0 +.debug_str 0x927b0 0x0 +Total 0x1016dbf The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 210116 + 209480 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51732 + 51712 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_US_LR_size.txt index 3dc4b53f7d4..a28ead1367c 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_US_LR_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x32ac8 0x8006000 -_cc_handlers_v3 0x2ac 0x8038ac8 -_zaf_cc_config 0x28 0x8038d74 -_zw_protocol_cmd_handlers 0x70 0x8038d9c -_zw_protocol_cmd_handlers_lr 0x30 0x8038e0c -.ARM.exidx 0x8 0x8038e3c -.copy.table 0xc 0x8038e44 -.zero.table 0x0 0x8038e50 +.text 0x32848 0x8006000 +_cc_handlers_v3 0x2ac 0x8038848 +_zaf_cc_config 0x28 0x8038af4 +_zw_protocol_cmd_handlers 0x70 0x8038b1c +_zw_protocol_cmd_handlers_lr 0x30 0x8038b8c +.ARM.exidx 0x8 0x8038bbc +.copy.table 0xc 0x8038bc4 +.zero.table 0x0 0x8038bd0 .stack 0x1000 0x20000000 -.data 0x674 0x20001000 -.bss 0xaba0 0x20001674 -.heap 0x3de8 0x2000c218 -.internal_storage 0x30000 0x8038e50 -.zwave_nvm 0x0 0x8068e50 -.nvm 0x8000 0x8068e50 +.data 0x678 0x20001000 +.bss 0xab88 0x20001678 +.heap 0x3e00 0x2000c200 +.internal_storage 0x30000 0x8038bd0 +.zwave_nvm 0x0 0x8068bd0 +.nvm 0x8000 0x8068bd0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x728c 0x0 -.debug_info 0xe39def 0x0 -.debug_abbrev 0x183d3 0x0 -.debug_loc 0x4aaf7 0x0 +.debug_frame 0x72f0 0x0 +.debug_info 0xe3a343 0x0 +.debug_abbrev 0x183cc 0x0 +.debug_loc 0x4af42 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xbf18 0x0 -.debug_line 0x58fec 0x0 -.debug_str 0x92681 0x0 -Total 0x1016495 +.debug_ranges 0xbdd0 0x0 +.debug_line 0x591af 0x0 +.debug_str 0x927a6 0x0 +Total 0x1016db5 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 210116 + 209480 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51732 + 51712 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_US_size.txt index a3afabd4427..1cb2311bd53 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4205B_REGION_US_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x32ac8 0x8006000 -_cc_handlers_v3 0x2ac 0x8038ac8 -_zaf_cc_config 0x28 0x8038d74 -_zw_protocol_cmd_handlers 0x70 0x8038d9c -_zw_protocol_cmd_handlers_lr 0x30 0x8038e0c -.ARM.exidx 0x8 0x8038e3c -.copy.table 0xc 0x8038e44 -.zero.table 0x0 0x8038e50 +.text 0x32848 0x8006000 +_cc_handlers_v3 0x2ac 0x8038848 +_zaf_cc_config 0x28 0x8038af4 +_zw_protocol_cmd_handlers 0x70 0x8038b1c +_zw_protocol_cmd_handlers_lr 0x30 0x8038b8c +.ARM.exidx 0x8 0x8038bbc +.copy.table 0xc 0x8038bc4 +.zero.table 0x0 0x8038bd0 .stack 0x1000 0x20000000 -.data 0x674 0x20001000 -.bss 0xaba0 0x20001674 -.heap 0x3de8 0x2000c218 -.internal_storage 0x30000 0x8038e50 -.zwave_nvm 0x0 0x8068e50 -.nvm 0x8000 0x8068e50 +.data 0x678 0x20001000 +.bss 0xab88 0x20001678 +.heap 0x3e00 0x2000c200 +.internal_storage 0x30000 0x8038bd0 +.zwave_nvm 0x0 0x8068bd0 +.nvm 0x8000 0x8068bd0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x728c 0x0 -.debug_info 0xe39def 0x0 -.debug_abbrev 0x183d3 0x0 -.debug_loc 0x4aaf7 0x0 +.debug_frame 0x72f0 0x0 +.debug_info 0xe3a343 0x0 +.debug_abbrev 0x183cc 0x0 +.debug_loc 0x4af42 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xbf18 0x0 -.debug_line 0x58fec 0x0 -.debug_str 0x9268b 0x0 -Total 0x101649f +.debug_ranges 0xbdd0 0x0 +.debug_line 0x591af 0x0 +.debug_str 0x927b0 0x0 +Total 0x1016dbf The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 210116 + 209480 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51732 + 51712 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_EU_size.txt index db63975e2b0..0991ceb0ed8 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_EU_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x2c7a0 0x0 -_cc_handlers_v3 0x2ac 0x2c7a0 -_zaf_cc_config 0x28 0x2ca4c -_zw_protocol_cmd_handlers 0x70 0x2ca74 -_zw_protocol_cmd_handlers_lr 0x30 0x2cae4 -.ARM.exidx 0x8 0x2cb14 -.copy.table 0xc 0x2cb1c -.zero.table 0x0 0x2cb28 +.text 0x2c8bc 0x0 +_cc_handlers_v3 0x2ac 0x2c8bc +_zaf_cc_config 0x28 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cb90 +_zw_protocol_cmd_handlers_lr 0x30 0x2cc00 +.ARM.exidx 0x8 0x2cc30 +.copy.table 0xc 0x2cc38 +.zero.table 0x0 0x2cc44 .stack 0x1000 0x20000000 -.data 0x580 0x20001000 -.bss 0xa110 0x20001580 +.data 0x584 0x20001000 +.bss 0xa108 0x20001584 .heap 0x4970 0x2000b690 -.internal_storage 0x3a000 0x2cb28 -.zwave_nvm 0x3000 0x66b28 -.nvm 0x9000 0x69b28 +.internal_storage 0x3a000 0x2cc44 +.zwave_nvm 0x3000 0x66c44 +.nvm 0x9000 0x69c44 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6940 0x0 -.debug_info 0xdf6506 0x0 -.debug_abbrev 0x1562b 0x0 -.debug_loc 0x3eb05 0x0 +.debug_frame 0x6990 0x0 +.debug_info 0xdf68d0 0x0 +.debug_abbrev 0x15608 0x0 +.debug_loc 0x3ed70 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa3d8 0x0 -.debug_line 0x4f49f 0x0 -.debug_str 0x8699e 0x0 -Total 0xfb3dea +.debug_ranges 0xa460 0x0 +.debug_line 0x4f5ea 0x0 +.debug_str 0x86b13 0x0 +Total 0xfb48ac The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184488 + 184776 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48784 + 48780 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_US_LR_size.txt index 32cb5f071e2..769e6d90725 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_US_LR_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x2c7a0 0x0 -_cc_handlers_v3 0x2ac 0x2c7a0 -_zaf_cc_config 0x28 0x2ca4c -_zw_protocol_cmd_handlers 0x70 0x2ca74 -_zw_protocol_cmd_handlers_lr 0x30 0x2cae4 -.ARM.exidx 0x8 0x2cb14 -.copy.table 0xc 0x2cb1c -.zero.table 0x0 0x2cb28 +.text 0x2c8bc 0x0 +_cc_handlers_v3 0x2ac 0x2c8bc +_zaf_cc_config 0x28 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cb90 +_zw_protocol_cmd_handlers_lr 0x30 0x2cc00 +.ARM.exidx 0x8 0x2cc30 +.copy.table 0xc 0x2cc38 +.zero.table 0x0 0x2cc44 .stack 0x1000 0x20000000 -.data 0x580 0x20001000 -.bss 0xa110 0x20001580 +.data 0x584 0x20001000 +.bss 0xa108 0x20001584 .heap 0x4970 0x2000b690 -.internal_storage 0x3a000 0x2cb28 -.zwave_nvm 0x3000 0x66b28 -.nvm 0x9000 0x69b28 +.internal_storage 0x3a000 0x2cc44 +.zwave_nvm 0x3000 0x66c44 +.nvm 0x9000 0x69c44 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6940 0x0 -.debug_info 0xdf6506 0x0 -.debug_abbrev 0x1562b 0x0 -.debug_loc 0x3eb05 0x0 +.debug_frame 0x6990 0x0 +.debug_info 0xdf68d0 0x0 +.debug_abbrev 0x15608 0x0 +.debug_loc 0x3ed70 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa3d8 0x0 -.debug_line 0x4f49f 0x0 -.debug_str 0x86994 0x0 -Total 0xfb3de0 +.debug_ranges 0xa460 0x0 +.debug_line 0x4f5ea 0x0 +.debug_str 0x86b09 0x0 +Total 0xfb48a2 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184488 + 184776 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48784 + 48780 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_US_size.txt index db63975e2b0..0991ceb0ed8 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4207A_REGION_US_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x2c7a0 0x0 -_cc_handlers_v3 0x2ac 0x2c7a0 -_zaf_cc_config 0x28 0x2ca4c -_zw_protocol_cmd_handlers 0x70 0x2ca74 -_zw_protocol_cmd_handlers_lr 0x30 0x2cae4 -.ARM.exidx 0x8 0x2cb14 -.copy.table 0xc 0x2cb1c -.zero.table 0x0 0x2cb28 +.text 0x2c8bc 0x0 +_cc_handlers_v3 0x2ac 0x2c8bc +_zaf_cc_config 0x28 0x2cb68 +_zw_protocol_cmd_handlers 0x70 0x2cb90 +_zw_protocol_cmd_handlers_lr 0x30 0x2cc00 +.ARM.exidx 0x8 0x2cc30 +.copy.table 0xc 0x2cc38 +.zero.table 0x0 0x2cc44 .stack 0x1000 0x20000000 -.data 0x580 0x20001000 -.bss 0xa110 0x20001580 +.data 0x584 0x20001000 +.bss 0xa108 0x20001584 .heap 0x4970 0x2000b690 -.internal_storage 0x3a000 0x2cb28 -.zwave_nvm 0x3000 0x66b28 -.nvm 0x9000 0x69b28 +.internal_storage 0x3a000 0x2cc44 +.zwave_nvm 0x3000 0x66c44 +.nvm 0x9000 0x69c44 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6940 0x0 -.debug_info 0xdf6506 0x0 -.debug_abbrev 0x1562b 0x0 -.debug_loc 0x3eb05 0x0 +.debug_frame 0x6990 0x0 +.debug_info 0xdf68d0 0x0 +.debug_abbrev 0x15608 0x0 +.debug_loc 0x3ed70 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0xa3d8 0x0 -.debug_line 0x4f49f 0x0 -.debug_str 0x8699e 0x0 -Total 0xfb3dea +.debug_ranges 0xa460 0x0 +.debug_line 0x4f5ea 0x0 +.debug_str 0x86b13 0x0 +Total 0xfb48ac The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184488 + 184776 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48784 + 48780 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4209A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4209A_REGION_US_LR_size.txt index c16d17836d2..635e35726e2 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4209A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_power_strip_BRD4209A_REGION_US_LR_size.txt @@ -5,39 +5,39 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_power_strip.out : section size addr -.text 0x2c658 0x0 -_cc_handlers_v3 0x2ac 0x2c658 -_zaf_cc_config 0x28 0x2c904 -_zw_protocol_cmd_handlers 0x70 0x2c92c -_zw_protocol_cmd_handlers_lr 0x30 0x2c99c -.ARM.exidx 0x8 0x2c9cc -.copy.table 0xc 0x2c9d4 -.zero.table 0x0 0x2c9e0 +.text 0x2c77c 0x0 +_cc_handlers_v3 0x2ac 0x2c77c +_zaf_cc_config 0x28 0x2ca28 +_zw_protocol_cmd_handlers 0x70 0x2ca50 +_zw_protocol_cmd_handlers_lr 0x30 0x2cac0 +.ARM.exidx 0x8 0x2caf0 +.copy.table 0xc 0x2caf8 +.zero.table 0x0 0x2cb04 .stack 0x1000 0x20000000 -.data 0x580 0x20001000 -.bss 0xa0f4 0x20001580 -.heap 0x4988 0x2000b678 -.internal_storage 0x3a000 0x2c9e0 -.zwave_nvm 0x3000 0x669e0 -.nvm 0x9000 0x699e0 +.data 0x584 0x20001000 +.bss 0xa0ec 0x20001584 +.heap 0x4990 0x2000b670 +.internal_storage 0x3a000 0x2cb04 +.zwave_nvm 0x3000 0x66b04 +.nvm 0x9000 0x69b04 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x6960 0x0 -.debug_info 0xdf796d 0x0 -.debug_abbrev 0x158d0 0x0 -.debug_loc 0x3ef5c 0x0 +.debug_frame 0x69b0 0x0 +.debug_info 0xdf7d37 0x0 +.debug_abbrev 0x158ad 0x0 +.debug_loc 0x3f1c7 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0xa670 0x0 -.debug_line 0x4fdc4 0x0 -.debug_str 0x86cca 0x0 -Total 0xfb66da +.debug_ranges 0xa6f8 0x0 +.debug_line 0x4ff0c 0x0 +.debug_str 0x86e3f 0x0 +Total 0xfb71a9 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 184160 + 184456 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48756 + 48752 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_EU_size.txt index e6ec9223ccc..3de137d63a8 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x2b740 0x0 -_cc_handlers_v3 0x21c 0x2b740 -_zw_protocol_cmd_handlers 0x70 0x2b95c -_zw_protocol_cmd_handlers_lr 0x30 0x2b9cc -.ARM.exidx 0x8 0x2b9fc -.copy.table 0xc 0x2ba04 -.zero.table 0x0 0x2ba10 +.text 0x2b884 0x0 +_cc_handlers_v3 0x21c 0x2b884 +_zw_protocol_cmd_handlers 0x70 0x2baa0 +_zw_protocol_cmd_handlers_lr 0x30 0x2bb10 +.ARM.exidx 0x8 0x2bb40 +.copy.table 0xc 0x2bb48 +.zero.table 0x0 0x2bb54 .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa020 0x20001400 -.heap 0x4be0 0x2000b420 -.internal_storage 0x3a000 0x2ba10 -.zwave_nvm 0x3000 0x65a10 -.nvm 0x9000 0x68a10 +.data 0x404 0x20001000 +.bss 0xa020 0x20001404 +.heap 0x4bd8 0x2000b428 +.internal_storage 0x3a000 0x2bb54 +.zwave_nvm 0x3000 0x65b54 +.nvm 0x9000 0x68b54 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x662c 0x0 -.debug_info 0xcc4ba1 0x0 -.debug_abbrev 0x14949 0x0 -.debug_loc 0x3c4c5 0x0 +.debug_frame 0x6678 0x0 +.debug_info 0xcc4f3a 0x0 +.debug_abbrev 0x14926 0x0 +.debug_loc 0x3c84a 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9e00 0x0 -.debug_line 0x4c826 0x0 -.debug_str 0x87c68 0x0 -Total 0xe7bdb0 +.debug_ranges 0x9df0 0x0 +.debug_line 0x4c99b 0x0 +.debug_str 0x87db4 0x0 +Total 0xe7c8e8 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179728 + 180056 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48160 + 48164 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_US_LR_size.txt index d49e7e1b263..edf1639fdab 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x2b740 0x0 -_cc_handlers_v3 0x21c 0x2b740 -_zw_protocol_cmd_handlers 0x70 0x2b95c -_zw_protocol_cmd_handlers_lr 0x30 0x2b9cc -.ARM.exidx 0x8 0x2b9fc -.copy.table 0xc 0x2ba04 -.zero.table 0x0 0x2ba10 +.text 0x2b884 0x0 +_cc_handlers_v3 0x21c 0x2b884 +_zw_protocol_cmd_handlers 0x70 0x2baa0 +_zw_protocol_cmd_handlers_lr 0x30 0x2bb10 +.ARM.exidx 0x8 0x2bb40 +.copy.table 0xc 0x2bb48 +.zero.table 0x0 0x2bb54 .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa020 0x20001400 -.heap 0x4be0 0x2000b420 -.internal_storage 0x3a000 0x2ba10 -.zwave_nvm 0x3000 0x65a10 -.nvm 0x9000 0x68a10 +.data 0x404 0x20001000 +.bss 0xa020 0x20001404 +.heap 0x4bd8 0x2000b428 +.internal_storage 0x3a000 0x2bb54 +.zwave_nvm 0x3000 0x65b54 +.nvm 0x9000 0x68b54 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x662c 0x0 -.debug_info 0xcc4ba1 0x0 -.debug_abbrev 0x14949 0x0 -.debug_loc 0x3c4c5 0x0 +.debug_frame 0x6678 0x0 +.debug_info 0xcc4f3a 0x0 +.debug_abbrev 0x14926 0x0 +.debug_loc 0x3c84a 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9e00 0x0 -.debug_line 0x4c826 0x0 -.debug_str 0x87c5e 0x0 -Total 0xe7bda6 +.debug_ranges 0x9df0 0x0 +.debug_line 0x4c99b 0x0 +.debug_str 0x87daa 0x0 +Total 0xe7c8de The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179728 + 180056 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48160 + 48164 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_US_size.txt index e6ec9223ccc..3de137d63a8 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4202A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x2b740 0x0 -_cc_handlers_v3 0x21c 0x2b740 -_zw_protocol_cmd_handlers 0x70 0x2b95c -_zw_protocol_cmd_handlers_lr 0x30 0x2b9cc -.ARM.exidx 0x8 0x2b9fc -.copy.table 0xc 0x2ba04 -.zero.table 0x0 0x2ba10 +.text 0x2b884 0x0 +_cc_handlers_v3 0x21c 0x2b884 +_zw_protocol_cmd_handlers 0x70 0x2baa0 +_zw_protocol_cmd_handlers_lr 0x30 0x2bb10 +.ARM.exidx 0x8 0x2bb40 +.copy.table 0xc 0x2bb48 +.zero.table 0x0 0x2bb54 .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa020 0x20001400 -.heap 0x4be0 0x2000b420 -.internal_storage 0x3a000 0x2ba10 -.zwave_nvm 0x3000 0x65a10 -.nvm 0x9000 0x68a10 +.data 0x404 0x20001000 +.bss 0xa020 0x20001404 +.heap 0x4bd8 0x2000b428 +.internal_storage 0x3a000 0x2bb54 +.zwave_nvm 0x3000 0x65b54 +.nvm 0x9000 0x68b54 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x662c 0x0 -.debug_info 0xcc4ba1 0x0 -.debug_abbrev 0x14949 0x0 -.debug_loc 0x3c4c5 0x0 +.debug_frame 0x6678 0x0 +.debug_info 0xcc4f3a 0x0 +.debug_abbrev 0x14926 0x0 +.debug_loc 0x3c84a 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9e00 0x0 -.debug_line 0x4c826 0x0 -.debug_str 0x87c68 0x0 -Total 0xe7bdb0 +.debug_ranges 0x9df0 0x0 +.debug_line 0x4c99b 0x0 +.debug_str 0x87db4 0x0 +Total 0xe7c8e8 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179728 + 180056 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48160 + 48164 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_EU_size.txt index ab62e61d8b4..0d1677bb914 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x317a0 0x8006000 -_cc_handlers_v3 0x21c 0x80377a0 -_zw_protocol_cmd_handlers 0x70 0x80379bc -_zw_protocol_cmd_handlers_lr 0x30 0x8037a2c -.ARM.exidx 0x8 0x8037a5c -.copy.table 0xc 0x8037a64 -.zero.table 0x0 0x8037a70 +.text 0x315b8 0x8006000 +_cc_handlers_v3 0x21c 0x80375b8 +_zw_protocol_cmd_handlers 0x70 0x80377d4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037844 +.ARM.exidx 0x8 0x8037874 +.copy.table 0xc 0x803787c +.zero.table 0x0 0x8037888 .stack 0x1000 0x20000000 -.data 0x4ec 0x20001000 -.bss 0xaa94 0x200014ec -.heap 0x4080 0x2000bf80 -.internal_storage 0x30000 0x8037a70 -.zwave_nvm 0x0 0x8067a70 -.nvm 0x8000 0x8067a70 +.data 0x4f0 0x20001000 +.bss 0xaa94 0x200014f0 +.heap 0x4078 0x2000bf88 +.internal_storage 0x30000 0x8037888 +.zwave_nvm 0x0 0x8067888 +.nvm 0x8000 0x8067888 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fd8 0x0 -.debug_info 0xd04b3d 0x0 -.debug_abbrev 0x17504 0x0 -.debug_loc 0x48766 0x0 +.debug_frame 0x7030 0x0 +.debug_info 0xd0502c 0x0 +.debug_abbrev 0x17508 0x0 +.debug_loc 0x48af1 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xba78 0x0 -.debug_line 0x56b17 0x0 -.debug_str 0x92549 0x0 -Total 0xed9dfe +.debug_line 0x56d0e 0x0 +.debug_str 0x92673 0x0 +Total 0xeda809 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 204636 + 204152 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51072 + 51076 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_US_LR_size.txt index fd4bbdbfd8f..8c7ac0a7b24 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x317a0 0x8006000 -_cc_handlers_v3 0x21c 0x80377a0 -_zw_protocol_cmd_handlers 0x70 0x80379bc -_zw_protocol_cmd_handlers_lr 0x30 0x8037a2c -.ARM.exidx 0x8 0x8037a5c -.copy.table 0xc 0x8037a64 -.zero.table 0x0 0x8037a70 +.text 0x315b8 0x8006000 +_cc_handlers_v3 0x21c 0x80375b8 +_zw_protocol_cmd_handlers 0x70 0x80377d4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037844 +.ARM.exidx 0x8 0x8037874 +.copy.table 0xc 0x803787c +.zero.table 0x0 0x8037888 .stack 0x1000 0x20000000 -.data 0x4ec 0x20001000 -.bss 0xaa94 0x200014ec -.heap 0x4080 0x2000bf80 -.internal_storage 0x30000 0x8037a70 -.zwave_nvm 0x0 0x8067a70 -.nvm 0x8000 0x8067a70 +.data 0x4f0 0x20001000 +.bss 0xaa94 0x200014f0 +.heap 0x4078 0x2000bf88 +.internal_storage 0x30000 0x8037888 +.zwave_nvm 0x0 0x8067888 +.nvm 0x8000 0x8067888 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fd8 0x0 -.debug_info 0xd04b3d 0x0 -.debug_abbrev 0x17504 0x0 -.debug_loc 0x48766 0x0 +.debug_frame 0x7030 0x0 +.debug_info 0xd0502c 0x0 +.debug_abbrev 0x17508 0x0 +.debug_loc 0x48af1 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xba78 0x0 -.debug_line 0x56b17 0x0 -.debug_str 0x9253f 0x0 -Total 0xed9df4 +.debug_line 0x56d0e 0x0 +.debug_str 0x92669 0x0 +Total 0xeda7ff The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 204636 + 204152 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51072 + 51076 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_US_size.txt index ab62e61d8b4..0d1677bb914 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204C_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x317a0 0x8006000 -_cc_handlers_v3 0x21c 0x80377a0 -_zw_protocol_cmd_handlers 0x70 0x80379bc -_zw_protocol_cmd_handlers_lr 0x30 0x8037a2c -.ARM.exidx 0x8 0x8037a5c -.copy.table 0xc 0x8037a64 -.zero.table 0x0 0x8037a70 +.text 0x315b8 0x8006000 +_cc_handlers_v3 0x21c 0x80375b8 +_zw_protocol_cmd_handlers 0x70 0x80377d4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037844 +.ARM.exidx 0x8 0x8037874 +.copy.table 0xc 0x803787c +.zero.table 0x0 0x8037888 .stack 0x1000 0x20000000 -.data 0x4ec 0x20001000 -.bss 0xaa94 0x200014ec -.heap 0x4080 0x2000bf80 -.internal_storage 0x30000 0x8037a70 -.zwave_nvm 0x0 0x8067a70 -.nvm 0x8000 0x8067a70 +.data 0x4f0 0x20001000 +.bss 0xaa94 0x200014f0 +.heap 0x4078 0x2000bf88 +.internal_storage 0x30000 0x8037888 +.zwave_nvm 0x0 0x8067888 +.nvm 0x8000 0x8067888 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fd8 0x0 -.debug_info 0xd04b3d 0x0 -.debug_abbrev 0x17504 0x0 -.debug_loc 0x48766 0x0 +.debug_frame 0x7030 0x0 +.debug_info 0xd0502c 0x0 +.debug_abbrev 0x17508 0x0 +.debug_loc 0x48af1 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xba78 0x0 -.debug_line 0x56b17 0x0 -.debug_str 0x92549 0x0 -Total 0xed9dfe +.debug_line 0x56d0e 0x0 +.debug_str 0x92673 0x0 +Total 0xeda809 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 204636 + 204152 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51072 + 51076 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_EU_size.txt index 6fe0f800a14..c30753dfb4e 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x317d0 0x8006000 -_cc_handlers_v3 0x21c 0x80377d0 -_zw_protocol_cmd_handlers 0x70 0x80379ec -_zw_protocol_cmd_handlers_lr 0x30 0x8037a5c -.ARM.exidx 0x8 0x8037a8c -.copy.table 0xc 0x8037a94 -.zero.table 0x0 0x8037aa0 +.text 0x315e8 0x8006000 +_cc_handlers_v3 0x21c 0x80375e8 +_zw_protocol_cmd_handlers 0x70 0x8037804 +_zw_protocol_cmd_handlers_lr 0x30 0x8037874 +.ARM.exidx 0x8 0x80378a4 +.copy.table 0xc 0x80378ac +.zero.table 0x0 0x80378b8 .stack 0x1000 0x20000000 -.data 0x4ec 0x20001000 -.bss 0xaa94 0x200014ec -.heap 0x4080 0x2000bf80 -.internal_storage 0x30000 0x8037aa0 -.zwave_nvm 0x0 0x8067aa0 -.nvm 0x8000 0x8067aa0 +.data 0x4f0 0x20001000 +.bss 0xaa94 0x200014f0 +.heap 0x4078 0x2000bf88 +.internal_storage 0x30000 0x80378b8 +.zwave_nvm 0x0 0x80678b8 +.nvm 0x8000 0x80678b8 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fd8 0x0 -.debug_info 0xd04d95 0x0 -.debug_abbrev 0x175a8 0x0 -.debug_loc 0x487d5 0x0 +.debug_frame 0x7030 0x0 +.debug_info 0xd05284 0x0 +.debug_abbrev 0x175ac 0x0 +.debug_loc 0x48b60 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xba30 0x0 -.debug_line 0x56ce9 0x0 -.debug_str 0x9271c 0x0 -Total 0xeda4f6 +.debug_line 0x56edd 0x0 +.debug_str 0x92846 0x0 +Total 0xedaefe The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 204684 + 204200 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51072 + 51076 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_US_LR_size.txt index 797a3a4cce6..dafea332956 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x317d0 0x8006000 -_cc_handlers_v3 0x21c 0x80377d0 -_zw_protocol_cmd_handlers 0x70 0x80379ec -_zw_protocol_cmd_handlers_lr 0x30 0x8037a5c -.ARM.exidx 0x8 0x8037a8c -.copy.table 0xc 0x8037a94 -.zero.table 0x0 0x8037aa0 +.text 0x315e8 0x8006000 +_cc_handlers_v3 0x21c 0x80375e8 +_zw_protocol_cmd_handlers 0x70 0x8037804 +_zw_protocol_cmd_handlers_lr 0x30 0x8037874 +.ARM.exidx 0x8 0x80378a4 +.copy.table 0xc 0x80378ac +.zero.table 0x0 0x80378b8 .stack 0x1000 0x20000000 -.data 0x4ec 0x20001000 -.bss 0xaa94 0x200014ec -.heap 0x4080 0x2000bf80 -.internal_storage 0x30000 0x8037aa0 -.zwave_nvm 0x0 0x8067aa0 -.nvm 0x8000 0x8067aa0 +.data 0x4f0 0x20001000 +.bss 0xaa94 0x200014f0 +.heap 0x4078 0x2000bf88 +.internal_storage 0x30000 0x80378b8 +.zwave_nvm 0x0 0x80678b8 +.nvm 0x8000 0x80678b8 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fd8 0x0 -.debug_info 0xd04d95 0x0 -.debug_abbrev 0x175a8 0x0 -.debug_loc 0x487d5 0x0 +.debug_frame 0x7030 0x0 +.debug_info 0xd05284 0x0 +.debug_abbrev 0x175ac 0x0 +.debug_loc 0x48b60 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xba30 0x0 -.debug_line 0x56ce9 0x0 -.debug_str 0x92712 0x0 -Total 0xeda4ec +.debug_line 0x56edd 0x0 +.debug_str 0x9283c 0x0 +Total 0xedaef4 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 204684 + 204200 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51072 + 51076 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_US_size.txt index 6fe0f800a14..c30753dfb4e 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4204D_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x317d0 0x8006000 -_cc_handlers_v3 0x21c 0x80377d0 -_zw_protocol_cmd_handlers 0x70 0x80379ec -_zw_protocol_cmd_handlers_lr 0x30 0x8037a5c -.ARM.exidx 0x8 0x8037a8c -.copy.table 0xc 0x8037a94 -.zero.table 0x0 0x8037aa0 +.text 0x315e8 0x8006000 +_cc_handlers_v3 0x21c 0x80375e8 +_zw_protocol_cmd_handlers 0x70 0x8037804 +_zw_protocol_cmd_handlers_lr 0x30 0x8037874 +.ARM.exidx 0x8 0x80378a4 +.copy.table 0xc 0x80378ac +.zero.table 0x0 0x80378b8 .stack 0x1000 0x20000000 -.data 0x4ec 0x20001000 -.bss 0xaa94 0x200014ec -.heap 0x4080 0x2000bf80 -.internal_storage 0x30000 0x8037aa0 -.zwave_nvm 0x0 0x8067aa0 -.nvm 0x8000 0x8067aa0 +.data 0x4f0 0x20001000 +.bss 0xaa94 0x200014f0 +.heap 0x4078 0x2000bf88 +.internal_storage 0x30000 0x80378b8 +.zwave_nvm 0x0 0x80678b8 +.nvm 0x8000 0x80678b8 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fd8 0x0 -.debug_info 0xd04d95 0x0 -.debug_abbrev 0x175a8 0x0 -.debug_loc 0x487d5 0x0 +.debug_frame 0x7030 0x0 +.debug_info 0xd05284 0x0 +.debug_abbrev 0x175ac 0x0 +.debug_loc 0x48b60 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xba30 0x0 -.debug_line 0x56ce9 0x0 -.debug_str 0x9271c 0x0 -Total 0xeda4f6 +.debug_line 0x56edd 0x0 +.debug_str 0x92846 0x0 +Total 0xedaefe The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 204684 + 204200 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51072 + 51076 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_EU_size.txt index 9c11d5229d9..429dd728a49 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x313ac 0x8006000 -_cc_handlers_v3 0x21c 0x80373ac -_zw_protocol_cmd_handlers 0x70 0x80375c8 -_zw_protocol_cmd_handlers_lr 0x30 0x8037638 -.ARM.exidx 0x8 0x8037668 -.copy.table 0xc 0x8037670 -.zero.table 0x0 0x803767c +.text 0x311bc 0x8006000 +_cc_handlers_v3 0x21c 0x80371bc +_zw_protocol_cmd_handlers 0x70 0x80373d8 +_zw_protocol_cmd_handlers_lr 0x30 0x8037448 +.ARM.exidx 0x8 0x8037478 +.copy.table 0xc 0x8037480 +.zero.table 0x0 0x803748c .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xa934 0x200014f0 -.heap 0x41d8 0x2000be28 -.internal_storage 0x30000 0x803767c -.zwave_nvm 0x0 0x806767c -.nvm 0x8000 0x806767c +.data 0x4f4 0x20001000 +.bss 0xa93c 0x200014f4 +.heap 0x41d0 0x2000be30 +.internal_storage 0x30000 0x803748c +.zwave_nvm 0x0 0x806748c +.nvm 0x8000 0x806748c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6e48 0x0 -.debug_info 0xd02a57 0x0 -.debug_abbrev 0x17415 0x0 -.debug_loc 0x47a0f 0x0 +.debug_frame 0x6ea0 0x0 +.debug_info 0xd02f40 0x0 +.debug_abbrev 0x1742a 0x0 +.debug_loc 0x47d99 0x0 .debug_aranges 0x100 0x0 .debug_ranges 0xbad8 0x0 -.debug_line 0x5604a 0x0 -.debug_str 0x925c3 0x0 -Total 0xed5f9f +.debug_line 0x56245 0x0 +.debug_str 0x926ed 0x0 +Total 0xed69b8 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203628 + 203136 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50724 + 50736 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_US_LR_size.txt index 84489783297..8cf8865c2ad 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x313ac 0x8006000 -_cc_handlers_v3 0x21c 0x80373ac -_zw_protocol_cmd_handlers 0x70 0x80375c8 -_zw_protocol_cmd_handlers_lr 0x30 0x8037638 -.ARM.exidx 0x8 0x8037668 -.copy.table 0xc 0x8037670 -.zero.table 0x0 0x803767c +.text 0x311bc 0x8006000 +_cc_handlers_v3 0x21c 0x80371bc +_zw_protocol_cmd_handlers 0x70 0x80373d8 +_zw_protocol_cmd_handlers_lr 0x30 0x8037448 +.ARM.exidx 0x8 0x8037478 +.copy.table 0xc 0x8037480 +.zero.table 0x0 0x803748c .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xa934 0x200014f0 -.heap 0x41d8 0x2000be28 -.internal_storage 0x30000 0x803767c -.zwave_nvm 0x0 0x806767c -.nvm 0x8000 0x806767c +.data 0x4f4 0x20001000 +.bss 0xa93c 0x200014f4 +.heap 0x41d0 0x2000be30 +.internal_storage 0x30000 0x803748c +.zwave_nvm 0x0 0x806748c +.nvm 0x8000 0x806748c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6e48 0x0 -.debug_info 0xd02a57 0x0 -.debug_abbrev 0x17415 0x0 -.debug_loc 0x47a0f 0x0 +.debug_frame 0x6ea0 0x0 +.debug_info 0xd02f40 0x0 +.debug_abbrev 0x1742a 0x0 +.debug_loc 0x47d99 0x0 .debug_aranges 0x100 0x0 .debug_ranges 0xbad8 0x0 -.debug_line 0x5604a 0x0 -.debug_str 0x925b9 0x0 -Total 0xed5f95 +.debug_line 0x56245 0x0 +.debug_str 0x926e3 0x0 +Total 0xed69ae The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203628 + 203136 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50724 + 50736 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_US_size.txt index 9c11d5229d9..429dd728a49 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x313ac 0x8006000 -_cc_handlers_v3 0x21c 0x80373ac -_zw_protocol_cmd_handlers 0x70 0x80375c8 -_zw_protocol_cmd_handlers_lr 0x30 0x8037638 -.ARM.exidx 0x8 0x8037668 -.copy.table 0xc 0x8037670 -.zero.table 0x0 0x803767c +.text 0x311bc 0x8006000 +_cc_handlers_v3 0x21c 0x80371bc +_zw_protocol_cmd_handlers 0x70 0x80373d8 +_zw_protocol_cmd_handlers_lr 0x30 0x8037448 +.ARM.exidx 0x8 0x8037478 +.copy.table 0xc 0x8037480 +.zero.table 0x0 0x803748c .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xa934 0x200014f0 -.heap 0x41d8 0x2000be28 -.internal_storage 0x30000 0x803767c -.zwave_nvm 0x0 0x806767c -.nvm 0x8000 0x806767c +.data 0x4f4 0x20001000 +.bss 0xa93c 0x200014f4 +.heap 0x41d0 0x2000be30 +.internal_storage 0x30000 0x803748c +.zwave_nvm 0x0 0x806748c +.nvm 0x8000 0x806748c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6e48 0x0 -.debug_info 0xd02a57 0x0 -.debug_abbrev 0x17415 0x0 -.debug_loc 0x47a0f 0x0 +.debug_frame 0x6ea0 0x0 +.debug_info 0xd02f40 0x0 +.debug_abbrev 0x1742a 0x0 +.debug_loc 0x47d99 0x0 .debug_aranges 0x100 0x0 .debug_ranges 0xbad8 0x0 -.debug_line 0x5604a 0x0 -.debug_str 0x925c3 0x0 -Total 0xed5f9f +.debug_line 0x56245 0x0 +.debug_str 0x926ed 0x0 +Total 0xed69b8 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203628 + 203136 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50724 + 50736 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_EU_size.txt index 42efaf10419..a55d3fb5bef 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x31d64 0x8006000 -_cc_handlers_v3 0x21c 0x8037d64 -_zw_protocol_cmd_handlers 0x70 0x8037f80 -_zw_protocol_cmd_handlers_lr 0x30 0x8037ff0 -.ARM.exidx 0x8 0x8038020 -.copy.table 0xc 0x8038028 -.zero.table 0x0 0x8038034 +.text 0x31b7c 0x8006000 +_cc_handlers_v3 0x21c 0x8037b7c +_zw_protocol_cmd_handlers 0x70 0x8037d98 +_zw_protocol_cmd_handlers_lr 0x30 0x8037e08 +.ARM.exidx 0x8 0x8037e38 +.copy.table 0xc 0x8037e40 +.zero.table 0x0 0x8037e4c .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xaaac 0x200014f0 -.heap 0x4060 0x2000bfa0 -.internal_storage 0x30000 0x8038034 -.zwave_nvm 0x0 0x8068034 -.nvm 0x8000 0x8068034 +.data 0x4f4 0x20001000 +.bss 0xaab4 0x200014f4 +.heap 0x4058 0x2000bfa8 +.internal_storage 0x30000 0x8037e4c +.zwave_nvm 0x0 0x8067e4c +.nvm 0x8000 0x8067e4c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fd8 0x0 -.debug_info 0xd05625 0x0 -.debug_abbrev 0x1765a 0x0 -.debug_loc 0x487c0 0x0 +.debug_frame 0x7030 0x0 +.debug_info 0xd05b14 0x0 +.debug_abbrev 0x1765e 0x0 +.debug_loc 0x48b49 0x0 .debug_aranges 0x100 0x0 .debug_ranges 0xba78 0x0 -.debug_line 0x56a94 0x0 -.debug_str 0x92c17 0x0 -Total 0xedb6e9 +.debug_line 0x56c8c 0x0 +.debug_str 0x92d41 0x0 +Total 0xedc0fb The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 206116 + 205632 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51100 + 51112 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_US_LR_size.txt index 7ed01b78fb5..8d0dbc40166 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x31d64 0x8006000 -_cc_handlers_v3 0x21c 0x8037d64 -_zw_protocol_cmd_handlers 0x70 0x8037f80 -_zw_protocol_cmd_handlers_lr 0x30 0x8037ff0 -.ARM.exidx 0x8 0x8038020 -.copy.table 0xc 0x8038028 -.zero.table 0x0 0x8038034 +.text 0x31b7c 0x8006000 +_cc_handlers_v3 0x21c 0x8037b7c +_zw_protocol_cmd_handlers 0x70 0x8037d98 +_zw_protocol_cmd_handlers_lr 0x30 0x8037e08 +.ARM.exidx 0x8 0x8037e38 +.copy.table 0xc 0x8037e40 +.zero.table 0x0 0x8037e4c .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xaaac 0x200014f0 -.heap 0x4060 0x2000bfa0 -.internal_storage 0x30000 0x8038034 -.zwave_nvm 0x0 0x8068034 -.nvm 0x8000 0x8068034 +.data 0x4f4 0x20001000 +.bss 0xaab4 0x200014f4 +.heap 0x4058 0x2000bfa8 +.internal_storage 0x30000 0x8037e4c +.zwave_nvm 0x0 0x8067e4c +.nvm 0x8000 0x8067e4c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fd8 0x0 -.debug_info 0xd05625 0x0 -.debug_abbrev 0x1765a 0x0 -.debug_loc 0x487c0 0x0 +.debug_frame 0x7030 0x0 +.debug_info 0xd05b14 0x0 +.debug_abbrev 0x1765e 0x0 +.debug_loc 0x48b49 0x0 .debug_aranges 0x100 0x0 .debug_ranges 0xba78 0x0 -.debug_line 0x56a94 0x0 -.debug_str 0x92c0d 0x0 -Total 0xedb6df +.debug_line 0x56c8c 0x0 +.debug_str 0x92d37 0x0 +Total 0xedc0f1 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 206116 + 205632 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51100 + 51112 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_US_size.txt index 42efaf10419..a55d3fb5bef 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4205B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x31d64 0x8006000 -_cc_handlers_v3 0x21c 0x8037d64 -_zw_protocol_cmd_handlers 0x70 0x8037f80 -_zw_protocol_cmd_handlers_lr 0x30 0x8037ff0 -.ARM.exidx 0x8 0x8038020 -.copy.table 0xc 0x8038028 -.zero.table 0x0 0x8038034 +.text 0x31b7c 0x8006000 +_cc_handlers_v3 0x21c 0x8037b7c +_zw_protocol_cmd_handlers 0x70 0x8037d98 +_zw_protocol_cmd_handlers_lr 0x30 0x8037e08 +.ARM.exidx 0x8 0x8037e38 +.copy.table 0xc 0x8037e40 +.zero.table 0x0 0x8037e4c .stack 0x1000 0x20000000 -.data 0x4f0 0x20001000 -.bss 0xaaac 0x200014f0 -.heap 0x4060 0x2000bfa0 -.internal_storage 0x30000 0x8038034 -.zwave_nvm 0x0 0x8068034 -.nvm 0x8000 0x8068034 +.data 0x4f4 0x20001000 +.bss 0xaab4 0x200014f4 +.heap 0x4058 0x2000bfa8 +.internal_storage 0x30000 0x8037e4c +.zwave_nvm 0x0 0x8067e4c +.nvm 0x8000 0x8067e4c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fd8 0x0 -.debug_info 0xd05625 0x0 -.debug_abbrev 0x1765a 0x0 -.debug_loc 0x487c0 0x0 +.debug_frame 0x7030 0x0 +.debug_info 0xd05b14 0x0 +.debug_abbrev 0x1765e 0x0 +.debug_loc 0x48b49 0x0 .debug_aranges 0x100 0x0 .debug_ranges 0xba78 0x0 -.debug_line 0x56a94 0x0 -.debug_str 0x92c17 0x0 -Total 0xedb6e9 +.debug_line 0x56c8c 0x0 +.debug_str 0x92d41 0x0 +Total 0xedc0fb The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 206116 + 205632 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51100 + 51112 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_EU_size.txt index e6ec9223ccc..3de137d63a8 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x2b740 0x0 -_cc_handlers_v3 0x21c 0x2b740 -_zw_protocol_cmd_handlers 0x70 0x2b95c -_zw_protocol_cmd_handlers_lr 0x30 0x2b9cc -.ARM.exidx 0x8 0x2b9fc -.copy.table 0xc 0x2ba04 -.zero.table 0x0 0x2ba10 +.text 0x2b884 0x0 +_cc_handlers_v3 0x21c 0x2b884 +_zw_protocol_cmd_handlers 0x70 0x2baa0 +_zw_protocol_cmd_handlers_lr 0x30 0x2bb10 +.ARM.exidx 0x8 0x2bb40 +.copy.table 0xc 0x2bb48 +.zero.table 0x0 0x2bb54 .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa020 0x20001400 -.heap 0x4be0 0x2000b420 -.internal_storage 0x3a000 0x2ba10 -.zwave_nvm 0x3000 0x65a10 -.nvm 0x9000 0x68a10 +.data 0x404 0x20001000 +.bss 0xa020 0x20001404 +.heap 0x4bd8 0x2000b428 +.internal_storage 0x3a000 0x2bb54 +.zwave_nvm 0x3000 0x65b54 +.nvm 0x9000 0x68b54 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x662c 0x0 -.debug_info 0xcc4ba1 0x0 -.debug_abbrev 0x14949 0x0 -.debug_loc 0x3c4c5 0x0 +.debug_frame 0x6678 0x0 +.debug_info 0xcc4f3a 0x0 +.debug_abbrev 0x14926 0x0 +.debug_loc 0x3c84a 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9e00 0x0 -.debug_line 0x4c826 0x0 -.debug_str 0x87c68 0x0 -Total 0xe7bdb0 +.debug_ranges 0x9df0 0x0 +.debug_line 0x4c99b 0x0 +.debug_str 0x87db4 0x0 +Total 0xe7c8e8 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179728 + 180056 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48160 + 48164 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_US_LR_size.txt index d49e7e1b263..edf1639fdab 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x2b740 0x0 -_cc_handlers_v3 0x21c 0x2b740 -_zw_protocol_cmd_handlers 0x70 0x2b95c -_zw_protocol_cmd_handlers_lr 0x30 0x2b9cc -.ARM.exidx 0x8 0x2b9fc -.copy.table 0xc 0x2ba04 -.zero.table 0x0 0x2ba10 +.text 0x2b884 0x0 +_cc_handlers_v3 0x21c 0x2b884 +_zw_protocol_cmd_handlers 0x70 0x2baa0 +_zw_protocol_cmd_handlers_lr 0x30 0x2bb10 +.ARM.exidx 0x8 0x2bb40 +.copy.table 0xc 0x2bb48 +.zero.table 0x0 0x2bb54 .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa020 0x20001400 -.heap 0x4be0 0x2000b420 -.internal_storage 0x3a000 0x2ba10 -.zwave_nvm 0x3000 0x65a10 -.nvm 0x9000 0x68a10 +.data 0x404 0x20001000 +.bss 0xa020 0x20001404 +.heap 0x4bd8 0x2000b428 +.internal_storage 0x3a000 0x2bb54 +.zwave_nvm 0x3000 0x65b54 +.nvm 0x9000 0x68b54 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x662c 0x0 -.debug_info 0xcc4ba1 0x0 -.debug_abbrev 0x14949 0x0 -.debug_loc 0x3c4c5 0x0 +.debug_frame 0x6678 0x0 +.debug_info 0xcc4f3a 0x0 +.debug_abbrev 0x14926 0x0 +.debug_loc 0x3c84a 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9e00 0x0 -.debug_line 0x4c826 0x0 -.debug_str 0x87c5e 0x0 -Total 0xe7bda6 +.debug_ranges 0x9df0 0x0 +.debug_line 0x4c99b 0x0 +.debug_str 0x87daa 0x0 +Total 0xe7c8de The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179728 + 180056 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48160 + 48164 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_US_size.txt index e6ec9223ccc..3de137d63a8 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4207A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x2b740 0x0 -_cc_handlers_v3 0x21c 0x2b740 -_zw_protocol_cmd_handlers 0x70 0x2b95c -_zw_protocol_cmd_handlers_lr 0x30 0x2b9cc -.ARM.exidx 0x8 0x2b9fc -.copy.table 0xc 0x2ba04 -.zero.table 0x0 0x2ba10 +.text 0x2b884 0x0 +_cc_handlers_v3 0x21c 0x2b884 +_zw_protocol_cmd_handlers 0x70 0x2baa0 +_zw_protocol_cmd_handlers_lr 0x30 0x2bb10 +.ARM.exidx 0x8 0x2bb40 +.copy.table 0xc 0x2bb48 +.zero.table 0x0 0x2bb54 .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa020 0x20001400 -.heap 0x4be0 0x2000b420 -.internal_storage 0x3a000 0x2ba10 -.zwave_nvm 0x3000 0x65a10 -.nvm 0x9000 0x68a10 +.data 0x404 0x20001000 +.bss 0xa020 0x20001404 +.heap 0x4bd8 0x2000b428 +.internal_storage 0x3a000 0x2bb54 +.zwave_nvm 0x3000 0x65b54 +.nvm 0x9000 0x68b54 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x662c 0x0 -.debug_info 0xcc4ba1 0x0 -.debug_abbrev 0x14949 0x0 -.debug_loc 0x3c4c5 0x0 +.debug_frame 0x6678 0x0 +.debug_info 0xcc4f3a 0x0 +.debug_abbrev 0x14926 0x0 +.debug_loc 0x3c84a 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9e00 0x0 -.debug_line 0x4c826 0x0 -.debug_str 0x87c68 0x0 -Total 0xe7bdb0 +.debug_ranges 0x9df0 0x0 +.debug_line 0x4c99b 0x0 +.debug_str 0x87db4 0x0 +Total 0xe7c8e8 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179728 + 180056 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48160 + 48164 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4209A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4209A_REGION_US_LR_size.txt index c5382b3ae41..f5397cfd2a8 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4209A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4209A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x2b608 0x0 -_cc_handlers_v3 0x21c 0x2b608 -_zw_protocol_cmd_handlers 0x70 0x2b824 -_zw_protocol_cmd_handlers_lr 0x30 0x2b894 -.ARM.exidx 0x8 0x2b8c4 -.copy.table 0xc 0x2b8cc -.zero.table 0x0 0x2b8d8 +.text 0x2b74c 0x0 +_cc_handlers_v3 0x21c 0x2b74c +_zw_protocol_cmd_handlers 0x70 0x2b968 +_zw_protocol_cmd_handlers_lr 0x30 0x2b9d8 +.ARM.exidx 0x8 0x2ba08 +.copy.table 0xc 0x2ba10 +.zero.table 0x0 0x2ba1c .stack 0x1000 0x20000000 -.data 0x400 0x20001000 -.bss 0xa004 0x20001400 +.data 0x404 0x20001000 +.bss 0xa004 0x20001404 .heap 0x4bf8 0x2000b408 -.internal_storage 0x3a000 0x2b8d8 -.zwave_nvm 0x3000 0x658d8 -.nvm 0x9000 0x688d8 +.internal_storage 0x3a000 0x2ba1c +.zwave_nvm 0x3000 0x65a1c +.nvm 0x9000 0x68a1c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x664c 0x0 -.debug_info 0xcc601e 0x0 -.debug_abbrev 0x14bee 0x0 -.debug_loc 0x3c97d 0x0 +.debug_frame 0x6698 0x0 +.debug_info 0xcc63b7 0x0 +.debug_abbrev 0x14bcb 0x0 +.debug_loc 0x3ccf3 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0xa070 0x0 -.debug_line 0x4d1a9 0x0 -.debug_str 0x87f86 0x0 -Total 0xe7e74f +.debug_ranges 0xa060 0x0 +.debug_line 0x4d31e 0x0 +.debug_str 0x880d2 0x0 +Total 0xe7f280 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 179416 + 179744 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48132 + 48136 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4210A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4210A_REGION_US_LR_size.txt index 79e7eb8f3d8..a59ea93675a 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4210A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4210A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x317d0 0x8006000 -_cc_handlers_v3 0x21c 0x80377d0 -_zw_protocol_cmd_handlers 0x70 0x80379ec -_zw_protocol_cmd_handlers_lr 0x30 0x8037a5c -.ARM.exidx 0x8 0x8037a8c -.copy.table 0xc 0x8037a94 -.zero.table 0x0 0x8037aa0 +.text 0x315e8 0x8006000 +_cc_handlers_v3 0x21c 0x80375e8 +_zw_protocol_cmd_handlers 0x70 0x8037804 +_zw_protocol_cmd_handlers_lr 0x30 0x8037874 +.ARM.exidx 0x8 0x80378a4 +.copy.table 0xc 0x80378ac +.zero.table 0x0 0x80378b8 .stack 0x1000 0x20000000 -.data 0x4ec 0x20001000 -.bss 0xaa94 0x200014ec -.heap 0x4080 0x2000bf80 -.internal_storage 0x30000 0x8037aa0 -.zwave_nvm 0x0 0x8067aa0 -.nvm 0x8000 0x8067aa0 +.data 0x4f0 0x20001000 +.bss 0xaa94 0x200014f0 +.heap 0x4078 0x2000bf88 +.internal_storage 0x30000 0x80378b8 +.zwave_nvm 0x0 0x80678b8 +.nvm 0x8000 0x80678b8 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6fd8 0x0 -.debug_info 0xd04d99 0x0 -.debug_abbrev 0x175a8 0x0 -.debug_loc 0x487d5 0x0 +.debug_frame 0x7030 0x0 +.debug_info 0xd05288 0x0 +.debug_abbrev 0x175ac 0x0 +.debug_loc 0x48b60 0x0 .debug_aranges 0xb8 0x0 .debug_ranges 0xb9e8 0x0 -.debug_line 0x56cd7 0x0 -.debug_str 0x92712 0x0 -Total 0xeda496 +.debug_line 0x56eca 0x0 +.debug_str 0x9283c 0x0 +Total 0xedae9d The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 204684 + 204200 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51072 + 51076 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_EU_size.txt index 9820f994aa9..09ad22c3088 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x316e0 0x8006000 -_cc_handlers_v3 0x21c 0x80376e0 -_zw_protocol_cmd_handlers 0x70 0x80378fc -_zw_protocol_cmd_handlers_lr 0x30 0x803796c -.ARM.exidx 0x8 0x803799c -.copy.table 0xc 0x80379a4 -.zero.table 0x0 0x80379b0 +.text 0x3193c 0x8006000 +_cc_handlers_v3 0x21c 0x803793c +_zw_protocol_cmd_handlers 0x70 0x8037b58 +_zw_protocol_cmd_handlers_lr 0x30 0x8037bc8 +.ARM.exidx 0x8 0x8037bf8 +.copy.table 0xc 0x8037c00 +.zero.table 0x0 0x8037c0c .stack 0x1000 0x20000000 -.data 0x4e8 0x20001000 -.bss 0xaa10 0x200014e8 -.heap 0x34108 0x2000bef8 -.internal_storage 0x30000 0x80379b0 -.zwave_nvm 0x0 0x80679b0 -.nvm 0x8000 0x80679b0 +.data 0x4ec 0x20001000 +.bss 0xaa18 0x200014ec +.heap 0x340f8 0x2000bf08 +.internal_storage 0x30000 0x8037c0c +.zwave_nvm 0x0 0x8067c0c +.nvm 0x8000 0x8067c0c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f80 0x0 -.debug_info 0xd03c7c 0x0 -.debug_abbrev 0x17458 0x0 -.debug_loc 0x485b8 0x0 +.debug_frame 0x6fd8 0x0 +.debug_info 0xd04171 0x0 +.debug_abbrev 0x1745c 0x0 +.debug_loc 0x4892b 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb9d0 0x0 -.debug_line 0x566fc 0x0 -.debug_str 0x9271a 0x0 -Total 0xf088d9 +.debug_ranges 0xb9e8 0x0 +.debug_line 0x568f3 0x0 +.debug_str 0x92844 0x0 +Total 0xf0972e The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 204440 + 205048 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50936 + 50948 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_US_LR_size.txt index b158b4ca0f4..513b4ba7b55 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x316e0 0x8006000 -_cc_handlers_v3 0x21c 0x80376e0 -_zw_protocol_cmd_handlers 0x70 0x80378fc -_zw_protocol_cmd_handlers_lr 0x30 0x803796c -.ARM.exidx 0x8 0x803799c -.copy.table 0xc 0x80379a4 -.zero.table 0x0 0x80379b0 +.text 0x3193c 0x8006000 +_cc_handlers_v3 0x21c 0x803793c +_zw_protocol_cmd_handlers 0x70 0x8037b58 +_zw_protocol_cmd_handlers_lr 0x30 0x8037bc8 +.ARM.exidx 0x8 0x8037bf8 +.copy.table 0xc 0x8037c00 +.zero.table 0x0 0x8037c0c .stack 0x1000 0x20000000 -.data 0x4e8 0x20001000 -.bss 0xaa10 0x200014e8 -.heap 0x34108 0x2000bef8 -.internal_storage 0x30000 0x80379b0 -.zwave_nvm 0x0 0x80679b0 -.nvm 0x8000 0x80679b0 +.data 0x4ec 0x20001000 +.bss 0xaa18 0x200014ec +.heap 0x340f8 0x2000bf08 +.internal_storage 0x30000 0x8037c0c +.zwave_nvm 0x0 0x8067c0c +.nvm 0x8000 0x8067c0c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f80 0x0 -.debug_info 0xd03c7c 0x0 -.debug_abbrev 0x17458 0x0 -.debug_loc 0x485b8 0x0 +.debug_frame 0x6fd8 0x0 +.debug_info 0xd04171 0x0 +.debug_abbrev 0x1745c 0x0 +.debug_loc 0x4892b 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb9d0 0x0 -.debug_line 0x566fc 0x0 -.debug_str 0x92710 0x0 -Total 0xf088cf +.debug_ranges 0xb9e8 0x0 +.debug_line 0x568f3 0x0 +.debug_str 0x9283a 0x0 +Total 0xf09724 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 204440 + 205048 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50936 + 50948 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_US_size.txt index 9820f994aa9..09ad22c3088 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4400B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x316e0 0x8006000 -_cc_handlers_v3 0x21c 0x80376e0 -_zw_protocol_cmd_handlers 0x70 0x80378fc -_zw_protocol_cmd_handlers_lr 0x30 0x803796c -.ARM.exidx 0x8 0x803799c -.copy.table 0xc 0x80379a4 -.zero.table 0x0 0x80379b0 +.text 0x3193c 0x8006000 +_cc_handlers_v3 0x21c 0x803793c +_zw_protocol_cmd_handlers 0x70 0x8037b58 +_zw_protocol_cmd_handlers_lr 0x30 0x8037bc8 +.ARM.exidx 0x8 0x8037bf8 +.copy.table 0xc 0x8037c00 +.zero.table 0x0 0x8037c0c .stack 0x1000 0x20000000 -.data 0x4e8 0x20001000 -.bss 0xaa10 0x200014e8 -.heap 0x34108 0x2000bef8 -.internal_storage 0x30000 0x80379b0 -.zwave_nvm 0x0 0x80679b0 -.nvm 0x8000 0x80679b0 +.data 0x4ec 0x20001000 +.bss 0xaa18 0x200014ec +.heap 0x340f8 0x2000bf08 +.internal_storage 0x30000 0x8037c0c +.zwave_nvm 0x0 0x8067c0c +.nvm 0x8000 0x8067c0c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f80 0x0 -.debug_info 0xd03c7c 0x0 -.debug_abbrev 0x17458 0x0 -.debug_loc 0x485b8 0x0 +.debug_frame 0x6fd8 0x0 +.debug_info 0xd04171 0x0 +.debug_abbrev 0x1745c 0x0 +.debug_loc 0x4892b 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb9d0 0x0 -.debug_line 0x566fc 0x0 -.debug_str 0x9271a 0x0 -Total 0xf088d9 +.debug_ranges 0xb9e8 0x0 +.debug_line 0x568f3 0x0 +.debug_str 0x92844 0x0 +Total 0xf0972e The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 204440 + 205048 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50936 + 50948 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4401B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4401B_REGION_US_LR_size.txt index 26f106eaf2d..090bf187b2a 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4401B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_sensor_pir_BRD4401B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_sensor_pir.out : section size addr -.text 0x316e0 0x8006000 -_cc_handlers_v3 0x21c 0x80376e0 -_zw_protocol_cmd_handlers 0x70 0x80378fc -_zw_protocol_cmd_handlers_lr 0x30 0x803796c -.ARM.exidx 0x8 0x803799c -.copy.table 0xc 0x80379a4 -.zero.table 0x0 0x80379b0 +.text 0x3193c 0x8006000 +_cc_handlers_v3 0x21c 0x803793c +_zw_protocol_cmd_handlers 0x70 0x8037b58 +_zw_protocol_cmd_handlers_lr 0x30 0x8037bc8 +.ARM.exidx 0x8 0x8037bf8 +.copy.table 0xc 0x8037c00 +.zero.table 0x0 0x8037c0c .stack 0x1000 0x20000000 -.data 0x4e8 0x20001000 -.bss 0xaa10 0x200014e8 -.heap 0x34108 0x2000bef8 -.internal_storage 0x30000 0x80379b0 -.zwave_nvm 0x0 0x80679b0 -.nvm 0x8000 0x80679b0 +.data 0x4ec 0x20001000 +.bss 0xaa18 0x200014ec +.heap 0x340f8 0x2000bf08 +.internal_storage 0x30000 0x8037c0c +.zwave_nvm 0x0 0x8067c0c +.nvm 0x8000 0x8067c0c .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6f80 0x0 -.debug_info 0xd03c80 0x0 -.debug_abbrev 0x17458 0x0 -.debug_loc 0x485b8 0x0 +.debug_frame 0x6fd8 0x0 +.debug_info 0xd04175 0x0 +.debug_abbrev 0x1745c 0x0 +.debug_loc 0x48935 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb990 0x0 -.debug_line 0x566eb 0x0 -.debug_str 0x92710 0x0 -Total 0xf08882 +.debug_ranges 0xb9a8 0x0 +.debug_line 0x568e2 0x0 +.debug_str 0x9283a 0x0 +Total 0xf096e1 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 204440 + 205048 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50936 + 50948 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_EU_size.txt index 131afcec50b..592b47c2dc9 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30d7c 0x8006000 -_cc_handlers_v3 0x1f8 0x8036d7c -_zw_protocol_cmd_handlers 0x70 0x8036f74 -_zw_protocol_cmd_handlers_lr 0x30 0x8036fe4 -.ARM.exidx 0x8 0x8037014 -.copy.table 0xc 0x803701c -.zero.table 0x0 0x8037028 +.text 0x30b64 0x8006000 +_cc_handlers_v3 0x1f8 0x8036b64 +_zw_protocol_cmd_handlers 0x70 0x8036d5c +_zw_protocol_cmd_handlers_lr 0x30 0x8036dcc +.ARM.exidx 0x8 0x8036dfc +.copy.table 0xc 0x8036e04 +.zero.table 0x0 0x8036e10 .stack 0x1000 0x20000000 -.data 0x54c 0x20001000 -.bss 0xa9e8 0x2000154c +.data 0x550 0x20001000 +.bss 0xa9e8 0x20001550 .heap 0x40c8 0x2000bf38 -.internal_storage 0x30000 0x8037028 -.zwave_nvm 0x0 0x8067028 -.nvm 0x8000 0x8067028 +.internal_storage 0x30000 0x8036e10 +.zwave_nvm 0x0 0x8066e10 +.nvm 0x8000 0x8066e10 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d10 0x0 -.debug_info 0xc95a1d 0x0 -.debug_abbrev 0x1664e 0x0 -.debug_loc 0x46cb1 0x0 +.debug_frame 0x6d68 0x0 +.debug_info 0xc95ee6 0x0 +.debug_abbrev 0x16652 0x0 +.debug_loc 0x47036 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb410 0x0 -.debug_line 0x53bc2 0x0 -.debug_str 0x8fe3c 0x0 -Total 0xe619dd +.debug_ranges 0xb430 0x0 +.debug_line 0x53dcf 0x0 +.debug_str 0x8ff7d 0x0 +Total 0xe623e1 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202100 + 201568 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50996 + 51000 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_US_LR_size.txt index cb9fe0decfc..61dea045c75 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30d7c 0x8006000 -_cc_handlers_v3 0x1f8 0x8036d7c -_zw_protocol_cmd_handlers 0x70 0x8036f74 -_zw_protocol_cmd_handlers_lr 0x30 0x8036fe4 -.ARM.exidx 0x8 0x8037014 -.copy.table 0xc 0x803701c -.zero.table 0x0 0x8037028 +.text 0x30b64 0x8006000 +_cc_handlers_v3 0x1f8 0x8036b64 +_zw_protocol_cmd_handlers 0x70 0x8036d5c +_zw_protocol_cmd_handlers_lr 0x30 0x8036dcc +.ARM.exidx 0x8 0x8036dfc +.copy.table 0xc 0x8036e04 +.zero.table 0x0 0x8036e10 .stack 0x1000 0x20000000 -.data 0x54c 0x20001000 -.bss 0xa9e8 0x2000154c +.data 0x550 0x20001000 +.bss 0xa9e8 0x20001550 .heap 0x40c8 0x2000bf38 -.internal_storage 0x30000 0x8037028 -.zwave_nvm 0x0 0x8067028 -.nvm 0x8000 0x8067028 +.internal_storage 0x30000 0x8036e10 +.zwave_nvm 0x0 0x8066e10 +.nvm 0x8000 0x8066e10 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d10 0x0 -.debug_info 0xc95a1d 0x0 -.debug_abbrev 0x1664e 0x0 -.debug_loc 0x46cb1 0x0 +.debug_frame 0x6d68 0x0 +.debug_info 0xc95ee6 0x0 +.debug_abbrev 0x16652 0x0 +.debug_loc 0x47036 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb410 0x0 -.debug_line 0x53bc2 0x0 -.debug_str 0x8fe32 0x0 -Total 0xe619d3 +.debug_ranges 0xb430 0x0 +.debug_line 0x53dcf 0x0 +.debug_str 0x8ff73 0x0 +Total 0xe623d7 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202100 + 201568 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50996 + 51000 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_US_size.txt index 131afcec50b..592b47c2dc9 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD2603A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30d7c 0x8006000 -_cc_handlers_v3 0x1f8 0x8036d7c -_zw_protocol_cmd_handlers 0x70 0x8036f74 -_zw_protocol_cmd_handlers_lr 0x30 0x8036fe4 -.ARM.exidx 0x8 0x8037014 -.copy.table 0xc 0x803701c -.zero.table 0x0 0x8037028 +.text 0x30b64 0x8006000 +_cc_handlers_v3 0x1f8 0x8036b64 +_zw_protocol_cmd_handlers 0x70 0x8036d5c +_zw_protocol_cmd_handlers_lr 0x30 0x8036dcc +.ARM.exidx 0x8 0x8036dfc +.copy.table 0xc 0x8036e04 +.zero.table 0x0 0x8036e10 .stack 0x1000 0x20000000 -.data 0x54c 0x20001000 -.bss 0xa9e8 0x2000154c +.data 0x550 0x20001000 +.bss 0xa9e8 0x20001550 .heap 0x40c8 0x2000bf38 -.internal_storage 0x30000 0x8037028 -.zwave_nvm 0x0 0x8067028 -.nvm 0x8000 0x8067028 +.internal_storage 0x30000 0x8036e10 +.zwave_nvm 0x0 0x8066e10 +.nvm 0x8000 0x8066e10 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d10 0x0 -.debug_info 0xc95a1d 0x0 -.debug_abbrev 0x1664e 0x0 -.debug_loc 0x46cb1 0x0 +.debug_frame 0x6d68 0x0 +.debug_info 0xc95ee6 0x0 +.debug_abbrev 0x16652 0x0 +.debug_loc 0x47036 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb410 0x0 -.debug_line 0x53bc2 0x0 -.debug_str 0x8fe3c 0x0 -Total 0xe619dd +.debug_ranges 0xb430 0x0 +.debug_line 0x53dcf 0x0 +.debug_str 0x8ff7d 0x0 +Total 0xe623e1 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202100 + 201568 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50996 + 51000 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_EU_size.txt index 140b79adc11..c34d09eb6d4 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x2ab10 0x0 -_cc_handlers_v3 0x1f8 0x2ab10 -_zw_protocol_cmd_handlers 0x70 0x2ad08 -_zw_protocol_cmd_handlers_lr 0x30 0x2ad78 -.ARM.exidx 0x8 0x2ada8 -.copy.table 0xc 0x2adb0 -.zero.table 0x0 0x2adbc +.text 0x2ac3c 0x0 +_cc_handlers_v3 0x1f8 0x2ac3c +_zw_protocol_cmd_handlers 0x70 0x2ae34 +_zw_protocol_cmd_handlers_lr 0x30 0x2aea4 +.ARM.exidx 0x8 0x2aed4 +.copy.table 0xc 0x2aedc +.zero.table 0x0 0x2aee8 .stack 0x1000 0x20000000 -.data 0x45c 0x20001000 -.bss 0x9f60 0x2000145c -.heap 0x4c40 0x2000b3c0 -.internal_storage 0x3a000 0x2adbc -.zwave_nvm 0x3000 0x64dbc -.nvm 0x9000 0x67dbc +.data 0x460 0x20001000 +.bss 0x9f58 0x20001460 +.heap 0x4c48 0x2000b3b8 +.internal_storage 0x3a000 0x2aee8 +.zwave_nvm 0x3000 0x64ee8 +.nvm 0x9000 0x67ee8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63a0 0x0 -.debug_info 0xc586ca 0x0 -.debug_abbrev 0x13d50 0x0 -.debug_loc 0x3af7c 0x0 +.debug_frame 0x63ec 0x0 +.debug_info 0xc58a42 0x0 +.debug_abbrev 0x13d2d 0x0 +.debug_loc 0x3b2fa 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9bf0 0x0 -.debug_line 0x4a2d0 0x0 -.debug_str 0x84888 0x0 -Total 0xe06d6d +.debug_ranges 0x9ba8 0x0 +.debug_line 0x4a455 0x0 +.debug_str 0x849eb 0x0 +Total 0xe0785c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 176664 + 176968 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48060 + 48056 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_US_LR_size.txt index 6e8e141efb9..197c71a60e2 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x2ab10 0x0 -_cc_handlers_v3 0x1f8 0x2ab10 -_zw_protocol_cmd_handlers 0x70 0x2ad08 -_zw_protocol_cmd_handlers_lr 0x30 0x2ad78 -.ARM.exidx 0x8 0x2ada8 -.copy.table 0xc 0x2adb0 -.zero.table 0x0 0x2adbc +.text 0x2ac3c 0x0 +_cc_handlers_v3 0x1f8 0x2ac3c +_zw_protocol_cmd_handlers 0x70 0x2ae34 +_zw_protocol_cmd_handlers_lr 0x30 0x2aea4 +.ARM.exidx 0x8 0x2aed4 +.copy.table 0xc 0x2aedc +.zero.table 0x0 0x2aee8 .stack 0x1000 0x20000000 -.data 0x45c 0x20001000 -.bss 0x9f60 0x2000145c -.heap 0x4c40 0x2000b3c0 -.internal_storage 0x3a000 0x2adbc -.zwave_nvm 0x3000 0x64dbc -.nvm 0x9000 0x67dbc +.data 0x460 0x20001000 +.bss 0x9f58 0x20001460 +.heap 0x4c48 0x2000b3b8 +.internal_storage 0x3a000 0x2aee8 +.zwave_nvm 0x3000 0x64ee8 +.nvm 0x9000 0x67ee8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63a0 0x0 -.debug_info 0xc586ca 0x0 -.debug_abbrev 0x13d50 0x0 -.debug_loc 0x3af7c 0x0 +.debug_frame 0x63ec 0x0 +.debug_info 0xc58a42 0x0 +.debug_abbrev 0x13d2d 0x0 +.debug_loc 0x3b2fa 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9bf0 0x0 -.debug_line 0x4a2d0 0x0 -.debug_str 0x8487e 0x0 -Total 0xe06d63 +.debug_ranges 0x9ba8 0x0 +.debug_line 0x4a455 0x0 +.debug_str 0x849e1 0x0 +Total 0xe07852 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 176664 + 176968 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48060 + 48056 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_US_size.txt index 140b79adc11..c34d09eb6d4 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4202A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x2ab10 0x0 -_cc_handlers_v3 0x1f8 0x2ab10 -_zw_protocol_cmd_handlers 0x70 0x2ad08 -_zw_protocol_cmd_handlers_lr 0x30 0x2ad78 -.ARM.exidx 0x8 0x2ada8 -.copy.table 0xc 0x2adb0 -.zero.table 0x0 0x2adbc +.text 0x2ac3c 0x0 +_cc_handlers_v3 0x1f8 0x2ac3c +_zw_protocol_cmd_handlers 0x70 0x2ae34 +_zw_protocol_cmd_handlers_lr 0x30 0x2aea4 +.ARM.exidx 0x8 0x2aed4 +.copy.table 0xc 0x2aedc +.zero.table 0x0 0x2aee8 .stack 0x1000 0x20000000 -.data 0x45c 0x20001000 -.bss 0x9f60 0x2000145c -.heap 0x4c40 0x2000b3c0 -.internal_storage 0x3a000 0x2adbc -.zwave_nvm 0x3000 0x64dbc -.nvm 0x9000 0x67dbc +.data 0x460 0x20001000 +.bss 0x9f58 0x20001460 +.heap 0x4c48 0x2000b3b8 +.internal_storage 0x3a000 0x2aee8 +.zwave_nvm 0x3000 0x64ee8 +.nvm 0x9000 0x67ee8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63a0 0x0 -.debug_info 0xc586ca 0x0 -.debug_abbrev 0x13d50 0x0 -.debug_loc 0x3af7c 0x0 +.debug_frame 0x63ec 0x0 +.debug_info 0xc58a42 0x0 +.debug_abbrev 0x13d2d 0x0 +.debug_loc 0x3b2fa 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9bf0 0x0 -.debug_line 0x4a2d0 0x0 -.debug_str 0x84888 0x0 -Total 0xe06d6d +.debug_ranges 0x9ba8 0x0 +.debug_line 0x4a455 0x0 +.debug_str 0x849eb 0x0 +Total 0xe0785c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 176664 + 176968 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48060 + 48056 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_EU_size.txt index 8c4433dde62..ed7a59a97e3 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30894 0x8006000 -_cc_handlers_v3 0x1f8 0x8036894 -_zw_protocol_cmd_handlers 0x70 0x8036a8c -_zw_protocol_cmd_handlers_lr 0x30 0x8036afc -.ARM.exidx 0x8 0x8036b2c -.copy.table 0xc 0x8036b34 -.zero.table 0x0 0x8036b40 +.text 0x30684 0x8006000 +_cc_handlers_v3 0x1f8 0x8036684 +_zw_protocol_cmd_handlers 0x70 0x803687c +_zw_protocol_cmd_handlers_lr 0x30 0x80368ec +.ARM.exidx 0x8 0x803691c +.copy.table 0xc 0x8036924 +.zero.table 0x0 0x8036930 .stack 0x1000 0x20000000 -.data 0x548 0x20001000 -.bss 0xa9c8 0x20001548 -.heap 0x40f0 0x2000bf10 -.internal_storage 0x30000 0x8036b40 -.zwave_nvm 0x0 0x8066b40 -.nvm 0x8000 0x8066b40 +.data 0x54c 0x20001000 +.bss 0xa9d0 0x2000154c +.heap 0x40e0 0x2000bf20 +.internal_storage 0x30000 0x8036930 +.zwave_nvm 0x0 0x8066930 +.nvm 0x8000 0x8066930 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d18 0x0 -.debug_info 0xc97874 0x0 -.debug_abbrev 0x16874 0x0 -.debug_loc 0x46eea 0x0 +.debug_frame 0x6d70 0x0 +.debug_info 0xc97d3d 0x0 +.debug_abbrev 0x16878 0x0 +.debug_loc 0x4726e 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb580 0x0 -.debug_line 0x54337 0x0 -.debug_str 0x8fcf4 0x0 -Total 0xe63f0c +.debug_ranges 0xb5a0 0x0 +.debug_line 0x54539 0x0 +.debug_str 0x8fe35 0x0 +Total 0xe64904 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200840 + 200316 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50960 + 50972 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_US_LR_size.txt index efe3e199743..967cf67f2f3 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30894 0x8006000 -_cc_handlers_v3 0x1f8 0x8036894 -_zw_protocol_cmd_handlers 0x70 0x8036a8c -_zw_protocol_cmd_handlers_lr 0x30 0x8036afc -.ARM.exidx 0x8 0x8036b2c -.copy.table 0xc 0x8036b34 -.zero.table 0x0 0x8036b40 +.text 0x30684 0x8006000 +_cc_handlers_v3 0x1f8 0x8036684 +_zw_protocol_cmd_handlers 0x70 0x803687c +_zw_protocol_cmd_handlers_lr 0x30 0x80368ec +.ARM.exidx 0x8 0x803691c +.copy.table 0xc 0x8036924 +.zero.table 0x0 0x8036930 .stack 0x1000 0x20000000 -.data 0x548 0x20001000 -.bss 0xa9c8 0x20001548 -.heap 0x40f0 0x2000bf10 -.internal_storage 0x30000 0x8036b40 -.zwave_nvm 0x0 0x8066b40 -.nvm 0x8000 0x8066b40 +.data 0x54c 0x20001000 +.bss 0xa9d0 0x2000154c +.heap 0x40e0 0x2000bf20 +.internal_storage 0x30000 0x8036930 +.zwave_nvm 0x0 0x8066930 +.nvm 0x8000 0x8066930 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d18 0x0 -.debug_info 0xc97874 0x0 -.debug_abbrev 0x16874 0x0 -.debug_loc 0x46eea 0x0 +.debug_frame 0x6d70 0x0 +.debug_info 0xc97d3d 0x0 +.debug_abbrev 0x16878 0x0 +.debug_loc 0x4726e 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb580 0x0 -.debug_line 0x54337 0x0 -.debug_str 0x8fcea 0x0 -Total 0xe63f02 +.debug_ranges 0xb5a0 0x0 +.debug_line 0x54539 0x0 +.debug_str 0x8fe2b 0x0 +Total 0xe648fa The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200840 + 200316 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50960 + 50972 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_US_size.txt index 8c4433dde62..ed7a59a97e3 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204C_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30894 0x8006000 -_cc_handlers_v3 0x1f8 0x8036894 -_zw_protocol_cmd_handlers 0x70 0x8036a8c -_zw_protocol_cmd_handlers_lr 0x30 0x8036afc -.ARM.exidx 0x8 0x8036b2c -.copy.table 0xc 0x8036b34 -.zero.table 0x0 0x8036b40 +.text 0x30684 0x8006000 +_cc_handlers_v3 0x1f8 0x8036684 +_zw_protocol_cmd_handlers 0x70 0x803687c +_zw_protocol_cmd_handlers_lr 0x30 0x80368ec +.ARM.exidx 0x8 0x803691c +.copy.table 0xc 0x8036924 +.zero.table 0x0 0x8036930 .stack 0x1000 0x20000000 -.data 0x548 0x20001000 -.bss 0xa9c8 0x20001548 -.heap 0x40f0 0x2000bf10 -.internal_storage 0x30000 0x8036b40 -.zwave_nvm 0x0 0x8066b40 -.nvm 0x8000 0x8066b40 +.data 0x54c 0x20001000 +.bss 0xa9d0 0x2000154c +.heap 0x40e0 0x2000bf20 +.internal_storage 0x30000 0x8036930 +.zwave_nvm 0x0 0x8066930 +.nvm 0x8000 0x8066930 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d18 0x0 -.debug_info 0xc97874 0x0 -.debug_abbrev 0x16874 0x0 -.debug_loc 0x46eea 0x0 +.debug_frame 0x6d70 0x0 +.debug_info 0xc97d3d 0x0 +.debug_abbrev 0x16878 0x0 +.debug_loc 0x4726e 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb580 0x0 -.debug_line 0x54337 0x0 -.debug_str 0x8fcf4 0x0 -Total 0xe63f0c +.debug_ranges 0xb5a0 0x0 +.debug_line 0x54539 0x0 +.debug_str 0x8fe35 0x0 +Total 0xe64904 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200840 + 200316 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50960 + 50972 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_EU_size.txt index 3b0f63170f3..199298238bf 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x308cc 0x8006000 -_cc_handlers_v3 0x1f8 0x80368cc -_zw_protocol_cmd_handlers 0x70 0x8036ac4 -_zw_protocol_cmd_handlers_lr 0x30 0x8036b34 -.ARM.exidx 0x8 0x8036b64 -.copy.table 0xc 0x8036b6c -.zero.table 0x0 0x8036b78 +.text 0x306bc 0x8006000 +_cc_handlers_v3 0x1f8 0x80366bc +_zw_protocol_cmd_handlers 0x70 0x80368b4 +_zw_protocol_cmd_handlers_lr 0x30 0x8036924 +.ARM.exidx 0x8 0x8036954 +.copy.table 0xc 0x803695c +.zero.table 0x0 0x8036968 .stack 0x1000 0x20000000 -.data 0x548 0x20001000 -.bss 0xa9c8 0x20001548 -.heap 0x40f0 0x2000bf10 -.internal_storage 0x30000 0x8036b78 -.zwave_nvm 0x0 0x8066b78 -.nvm 0x8000 0x8066b78 +.data 0x54c 0x20001000 +.bss 0xa9d0 0x2000154c +.heap 0x40e0 0x2000bf20 +.internal_storage 0x30000 0x8036968 +.zwave_nvm 0x0 0x8066968 +.nvm 0x8000 0x8066968 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d18 0x0 -.debug_info 0xc97ac8 0x0 -.debug_abbrev 0x16918 0x0 -.debug_loc 0x46f59 0x0 +.debug_frame 0x6d70 0x0 +.debug_info 0xc97f91 0x0 +.debug_abbrev 0x1691c 0x0 +.debug_loc 0x472dd 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb5a8 0x0 -.debug_line 0x54557 0x0 -.debug_str 0x8fec7 0x0 -Total 0xe646c6 +.debug_ranges 0xb5c8 0x0 +.debug_line 0x54759 0x0 +.debug_str 0x90008 0x0 +Total 0xe650be The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200896 + 200372 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50960 + 50972 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_US_LR_size.txt index b8920bdb1dd..8bf91a9cf1c 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x308cc 0x8006000 -_cc_handlers_v3 0x1f8 0x80368cc -_zw_protocol_cmd_handlers 0x70 0x8036ac4 -_zw_protocol_cmd_handlers_lr 0x30 0x8036b34 -.ARM.exidx 0x8 0x8036b64 -.copy.table 0xc 0x8036b6c -.zero.table 0x0 0x8036b78 +.text 0x306bc 0x8006000 +_cc_handlers_v3 0x1f8 0x80366bc +_zw_protocol_cmd_handlers 0x70 0x80368b4 +_zw_protocol_cmd_handlers_lr 0x30 0x8036924 +.ARM.exidx 0x8 0x8036954 +.copy.table 0xc 0x803695c +.zero.table 0x0 0x8036968 .stack 0x1000 0x20000000 -.data 0x548 0x20001000 -.bss 0xa9c8 0x20001548 -.heap 0x40f0 0x2000bf10 -.internal_storage 0x30000 0x8036b78 -.zwave_nvm 0x0 0x8066b78 -.nvm 0x8000 0x8066b78 +.data 0x54c 0x20001000 +.bss 0xa9d0 0x2000154c +.heap 0x40e0 0x2000bf20 +.internal_storage 0x30000 0x8036968 +.zwave_nvm 0x0 0x8066968 +.nvm 0x8000 0x8066968 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d18 0x0 -.debug_info 0xc97ac8 0x0 -.debug_abbrev 0x16918 0x0 -.debug_loc 0x46f59 0x0 +.debug_frame 0x6d70 0x0 +.debug_info 0xc97f91 0x0 +.debug_abbrev 0x1691c 0x0 +.debug_loc 0x472dd 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb5a8 0x0 -.debug_line 0x54557 0x0 -.debug_str 0x8febd 0x0 -Total 0xe646bc +.debug_ranges 0xb5c8 0x0 +.debug_line 0x54759 0x0 +.debug_str 0x8fffe 0x0 +Total 0xe650b4 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200896 + 200372 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50960 + 50972 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_US_size.txt index 3b0f63170f3..199298238bf 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4204D_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x308cc 0x8006000 -_cc_handlers_v3 0x1f8 0x80368cc -_zw_protocol_cmd_handlers 0x70 0x8036ac4 -_zw_protocol_cmd_handlers_lr 0x30 0x8036b34 -.ARM.exidx 0x8 0x8036b64 -.copy.table 0xc 0x8036b6c -.zero.table 0x0 0x8036b78 +.text 0x306bc 0x8006000 +_cc_handlers_v3 0x1f8 0x80366bc +_zw_protocol_cmd_handlers 0x70 0x80368b4 +_zw_protocol_cmd_handlers_lr 0x30 0x8036924 +.ARM.exidx 0x8 0x8036954 +.copy.table 0xc 0x803695c +.zero.table 0x0 0x8036968 .stack 0x1000 0x20000000 -.data 0x548 0x20001000 -.bss 0xa9c8 0x20001548 -.heap 0x40f0 0x2000bf10 -.internal_storage 0x30000 0x8036b78 -.zwave_nvm 0x0 0x8066b78 -.nvm 0x8000 0x8066b78 +.data 0x54c 0x20001000 +.bss 0xa9d0 0x2000154c +.heap 0x40e0 0x2000bf20 +.internal_storage 0x30000 0x8036968 +.zwave_nvm 0x0 0x8066968 +.nvm 0x8000 0x8066968 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d18 0x0 -.debug_info 0xc97ac8 0x0 -.debug_abbrev 0x16918 0x0 -.debug_loc 0x46f59 0x0 +.debug_frame 0x6d70 0x0 +.debug_info 0xc97f91 0x0 +.debug_abbrev 0x1691c 0x0 +.debug_loc 0x472dd 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb5a8 0x0 -.debug_line 0x54557 0x0 -.debug_str 0x8fec7 0x0 -Total 0xe646c6 +.debug_ranges 0xb5c8 0x0 +.debug_line 0x54759 0x0 +.debug_str 0x90008 0x0 +Total 0xe650be The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200896 + 200372 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50960 + 50972 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_EU_size.txt index 86c2736fde9..82cc010bd9e 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30498 0x8006000 -_cc_handlers_v3 0x1f8 0x8036498 -_zw_protocol_cmd_handlers 0x70 0x8036690 -_zw_protocol_cmd_handlers_lr 0x30 0x8036700 -.ARM.exidx 0x8 0x8036730 -.copy.table 0xc 0x8036738 -.zero.table 0x0 0x8036744 +.text 0x30288 0x8006000 +_cc_handlers_v3 0x1f8 0x8036288 +_zw_protocol_cmd_handlers 0x70 0x8036480 +_zw_protocol_cmd_handlers_lr 0x30 0x80364f0 +.ARM.exidx 0x8 0x8036520 +.copy.table 0xc 0x8036528 +.zero.table 0x0 0x8036534 .stack 0x1000 0x20000000 -.data 0x54c 0x20001000 -.bss 0xa870 0x2000154c +.data 0x550 0x20001000 +.bss 0xa870 0x20001550 .heap 0x4240 0x2000bdc0 -.internal_storage 0x30000 0x8036744 -.zwave_nvm 0x0 0x8066744 -.nvm 0x8000 0x8066744 +.internal_storage 0x30000 0x8036534 +.zwave_nvm 0x0 0x8066534 +.nvm 0x8000 0x8066534 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6b88 0x0 -.debug_info 0xc9578c 0x0 -.debug_abbrev 0x16785 0x0 -.debug_loc 0x46183 0x0 +.debug_frame 0x6be0 0x0 +.debug_info 0xc95c4f 0x0 +.debug_abbrev 0x1679a 0x0 +.debug_loc 0x46517 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb608 0x0 -.debug_line 0x53895 0x0 -.debug_str 0x8fd76 0x0 -Total 0xe600ee +.debug_ranges 0xb628 0x0 +.debug_line 0x53aa3 0x0 +.debug_str 0x8feb7 0x0 +Total 0xe60b15 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 199824 + 199300 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50620 + 50624 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_US_LR_size.txt index 8c33fc8ec8a..e186c90f5eb 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30498 0x8006000 -_cc_handlers_v3 0x1f8 0x8036498 -_zw_protocol_cmd_handlers 0x70 0x8036690 -_zw_protocol_cmd_handlers_lr 0x30 0x8036700 -.ARM.exidx 0x8 0x8036730 -.copy.table 0xc 0x8036738 -.zero.table 0x0 0x8036744 +.text 0x30288 0x8006000 +_cc_handlers_v3 0x1f8 0x8036288 +_zw_protocol_cmd_handlers 0x70 0x8036480 +_zw_protocol_cmd_handlers_lr 0x30 0x80364f0 +.ARM.exidx 0x8 0x8036520 +.copy.table 0xc 0x8036528 +.zero.table 0x0 0x8036534 .stack 0x1000 0x20000000 -.data 0x54c 0x20001000 -.bss 0xa870 0x2000154c +.data 0x550 0x20001000 +.bss 0xa870 0x20001550 .heap 0x4240 0x2000bdc0 -.internal_storage 0x30000 0x8036744 -.zwave_nvm 0x0 0x8066744 -.nvm 0x8000 0x8066744 +.internal_storage 0x30000 0x8036534 +.zwave_nvm 0x0 0x8066534 +.nvm 0x8000 0x8066534 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6b88 0x0 -.debug_info 0xc9578c 0x0 -.debug_abbrev 0x16785 0x0 -.debug_loc 0x46183 0x0 +.debug_frame 0x6be0 0x0 +.debug_info 0xc95c4f 0x0 +.debug_abbrev 0x1679a 0x0 +.debug_loc 0x46517 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb608 0x0 -.debug_line 0x53895 0x0 -.debug_str 0x8fd6c 0x0 -Total 0xe600e4 +.debug_ranges 0xb628 0x0 +.debug_line 0x53aa3 0x0 +.debug_str 0x8fead 0x0 +Total 0xe60b0b The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 199824 + 199300 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50620 + 50624 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_US_size.txt index 86c2736fde9..82cc010bd9e 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30498 0x8006000 -_cc_handlers_v3 0x1f8 0x8036498 -_zw_protocol_cmd_handlers 0x70 0x8036690 -_zw_protocol_cmd_handlers_lr 0x30 0x8036700 -.ARM.exidx 0x8 0x8036730 -.copy.table 0xc 0x8036738 -.zero.table 0x0 0x8036744 +.text 0x30288 0x8006000 +_cc_handlers_v3 0x1f8 0x8036288 +_zw_protocol_cmd_handlers 0x70 0x8036480 +_zw_protocol_cmd_handlers_lr 0x30 0x80364f0 +.ARM.exidx 0x8 0x8036520 +.copy.table 0xc 0x8036528 +.zero.table 0x0 0x8036534 .stack 0x1000 0x20000000 -.data 0x54c 0x20001000 -.bss 0xa870 0x2000154c +.data 0x550 0x20001000 +.bss 0xa870 0x20001550 .heap 0x4240 0x2000bdc0 -.internal_storage 0x30000 0x8036744 -.zwave_nvm 0x0 0x8066744 -.nvm 0x8000 0x8066744 +.internal_storage 0x30000 0x8036534 +.zwave_nvm 0x0 0x8066534 +.nvm 0x8000 0x8066534 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6b88 0x0 -.debug_info 0xc9578c 0x0 -.debug_abbrev 0x16785 0x0 -.debug_loc 0x46183 0x0 +.debug_frame 0x6be0 0x0 +.debug_info 0xc95c4f 0x0 +.debug_abbrev 0x1679a 0x0 +.debug_loc 0x46517 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb608 0x0 -.debug_line 0x53895 0x0 -.debug_str 0x8fd76 0x0 -Total 0xe600ee +.debug_ranges 0xb628 0x0 +.debug_line 0x53aa3 0x0 +.debug_str 0x8feb7 0x0 +Total 0xe60b15 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 199824 + 199300 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50620 + 50624 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_EU_size.txt index 2fee620ac38..21d73f8cea1 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30e50 0x8006000 -_cc_handlers_v3 0x1f8 0x8036e50 -_zw_protocol_cmd_handlers 0x70 0x8037048 -_zw_protocol_cmd_handlers_lr 0x30 0x80370b8 -.ARM.exidx 0x8 0x80370e8 -.copy.table 0xc 0x80370f0 -.zero.table 0x0 0x80370fc +.text 0x30c50 0x8006000 +_cc_handlers_v3 0x1f8 0x8036c50 +_zw_protocol_cmd_handlers 0x70 0x8036e48 +_zw_protocol_cmd_handlers_lr 0x30 0x8036eb8 +.ARM.exidx 0x8 0x8036ee8 +.copy.table 0xc 0x8036ef0 +.zero.table 0x0 0x8036efc .stack 0x1000 0x20000000 -.data 0x54c 0x20001000 -.bss 0xa9e8 0x2000154c +.data 0x550 0x20001000 +.bss 0xa9e8 0x20001550 .heap 0x40c8 0x2000bf38 -.internal_storage 0x30000 0x80370fc -.zwave_nvm 0x0 0x80670fc -.nvm 0x8000 0x80670fc +.internal_storage 0x30000 0x8036efc +.zwave_nvm 0x0 0x8066efc +.nvm 0x8000 0x8066efc .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d18 0x0 -.debug_info 0xc9835c 0x0 -.debug_abbrev 0x169ca 0x0 -.debug_loc 0x46f44 0x0 +.debug_frame 0x6d70 0x0 +.debug_info 0xc98825 0x0 +.debug_abbrev 0x169ce 0x0 +.debug_loc 0x472c9 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb580 0x0 -.debug_line 0x542ce 0x0 -.debug_str 0x903ca 0x0 -Total 0xe65811 +.debug_ranges 0xb5a0 0x0 +.debug_line 0x544d2 0x0 +.debug_str 0x9050b 0x0 +Total 0xe66224 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202312 + 201804 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50996 + 51000 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_US_LR_size.txt index b845034e531..4ceee19a35c 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30e50 0x8006000 -_cc_handlers_v3 0x1f8 0x8036e50 -_zw_protocol_cmd_handlers 0x70 0x8037048 -_zw_protocol_cmd_handlers_lr 0x30 0x80370b8 -.ARM.exidx 0x8 0x80370e8 -.copy.table 0xc 0x80370f0 -.zero.table 0x0 0x80370fc +.text 0x30c50 0x8006000 +_cc_handlers_v3 0x1f8 0x8036c50 +_zw_protocol_cmd_handlers 0x70 0x8036e48 +_zw_protocol_cmd_handlers_lr 0x30 0x8036eb8 +.ARM.exidx 0x8 0x8036ee8 +.copy.table 0xc 0x8036ef0 +.zero.table 0x0 0x8036efc .stack 0x1000 0x20000000 -.data 0x54c 0x20001000 -.bss 0xa9e8 0x2000154c +.data 0x550 0x20001000 +.bss 0xa9e8 0x20001550 .heap 0x40c8 0x2000bf38 -.internal_storage 0x30000 0x80370fc -.zwave_nvm 0x0 0x80670fc -.nvm 0x8000 0x80670fc +.internal_storage 0x30000 0x8036efc +.zwave_nvm 0x0 0x8066efc +.nvm 0x8000 0x8066efc .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d18 0x0 -.debug_info 0xc9835c 0x0 -.debug_abbrev 0x169ca 0x0 -.debug_loc 0x46f44 0x0 +.debug_frame 0x6d70 0x0 +.debug_info 0xc98825 0x0 +.debug_abbrev 0x169ce 0x0 +.debug_loc 0x472c9 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb580 0x0 -.debug_line 0x542ce 0x0 -.debug_str 0x903c0 0x0 -Total 0xe65807 +.debug_ranges 0xb5a0 0x0 +.debug_line 0x544d2 0x0 +.debug_str 0x90501 0x0 +Total 0xe6621a The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202312 + 201804 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50996 + 51000 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_US_size.txt index 2fee620ac38..21d73f8cea1 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4205B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x30e50 0x8006000 -_cc_handlers_v3 0x1f8 0x8036e50 -_zw_protocol_cmd_handlers 0x70 0x8037048 -_zw_protocol_cmd_handlers_lr 0x30 0x80370b8 -.ARM.exidx 0x8 0x80370e8 -.copy.table 0xc 0x80370f0 -.zero.table 0x0 0x80370fc +.text 0x30c50 0x8006000 +_cc_handlers_v3 0x1f8 0x8036c50 +_zw_protocol_cmd_handlers 0x70 0x8036e48 +_zw_protocol_cmd_handlers_lr 0x30 0x8036eb8 +.ARM.exidx 0x8 0x8036ee8 +.copy.table 0xc 0x8036ef0 +.zero.table 0x0 0x8036efc .stack 0x1000 0x20000000 -.data 0x54c 0x20001000 -.bss 0xa9e8 0x2000154c +.data 0x550 0x20001000 +.bss 0xa9e8 0x20001550 .heap 0x40c8 0x2000bf38 -.internal_storage 0x30000 0x80370fc -.zwave_nvm 0x0 0x80670fc -.nvm 0x8000 0x80670fc +.internal_storage 0x30000 0x8036efc +.zwave_nvm 0x0 0x8066efc +.nvm 0x8000 0x8066efc .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d18 0x0 -.debug_info 0xc9835c 0x0 -.debug_abbrev 0x169ca 0x0 -.debug_loc 0x46f44 0x0 +.debug_frame 0x6d70 0x0 +.debug_info 0xc98825 0x0 +.debug_abbrev 0x169ce 0x0 +.debug_loc 0x472c9 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb580 0x0 -.debug_line 0x542ce 0x0 -.debug_str 0x903ca 0x0 -Total 0xe65811 +.debug_ranges 0xb5a0 0x0 +.debug_line 0x544d2 0x0 +.debug_str 0x9050b 0x0 +Total 0xe66224 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 202312 + 201804 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50996 + 51000 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_EU_size.txt index 140b79adc11..c34d09eb6d4 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x2ab10 0x0 -_cc_handlers_v3 0x1f8 0x2ab10 -_zw_protocol_cmd_handlers 0x70 0x2ad08 -_zw_protocol_cmd_handlers_lr 0x30 0x2ad78 -.ARM.exidx 0x8 0x2ada8 -.copy.table 0xc 0x2adb0 -.zero.table 0x0 0x2adbc +.text 0x2ac3c 0x0 +_cc_handlers_v3 0x1f8 0x2ac3c +_zw_protocol_cmd_handlers 0x70 0x2ae34 +_zw_protocol_cmd_handlers_lr 0x30 0x2aea4 +.ARM.exidx 0x8 0x2aed4 +.copy.table 0xc 0x2aedc +.zero.table 0x0 0x2aee8 .stack 0x1000 0x20000000 -.data 0x45c 0x20001000 -.bss 0x9f60 0x2000145c -.heap 0x4c40 0x2000b3c0 -.internal_storage 0x3a000 0x2adbc -.zwave_nvm 0x3000 0x64dbc -.nvm 0x9000 0x67dbc +.data 0x460 0x20001000 +.bss 0x9f58 0x20001460 +.heap 0x4c48 0x2000b3b8 +.internal_storage 0x3a000 0x2aee8 +.zwave_nvm 0x3000 0x64ee8 +.nvm 0x9000 0x67ee8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63a0 0x0 -.debug_info 0xc586ca 0x0 -.debug_abbrev 0x13d50 0x0 -.debug_loc 0x3af7c 0x0 +.debug_frame 0x63ec 0x0 +.debug_info 0xc58a42 0x0 +.debug_abbrev 0x13d2d 0x0 +.debug_loc 0x3b2fa 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9bf0 0x0 -.debug_line 0x4a2d0 0x0 -.debug_str 0x84888 0x0 -Total 0xe06d6d +.debug_ranges 0x9ba8 0x0 +.debug_line 0x4a455 0x0 +.debug_str 0x849eb 0x0 +Total 0xe0785c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 176664 + 176968 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48060 + 48056 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_US_LR_size.txt index 6e8e141efb9..197c71a60e2 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x2ab10 0x0 -_cc_handlers_v3 0x1f8 0x2ab10 -_zw_protocol_cmd_handlers 0x70 0x2ad08 -_zw_protocol_cmd_handlers_lr 0x30 0x2ad78 -.ARM.exidx 0x8 0x2ada8 -.copy.table 0xc 0x2adb0 -.zero.table 0x0 0x2adbc +.text 0x2ac3c 0x0 +_cc_handlers_v3 0x1f8 0x2ac3c +_zw_protocol_cmd_handlers 0x70 0x2ae34 +_zw_protocol_cmd_handlers_lr 0x30 0x2aea4 +.ARM.exidx 0x8 0x2aed4 +.copy.table 0xc 0x2aedc +.zero.table 0x0 0x2aee8 .stack 0x1000 0x20000000 -.data 0x45c 0x20001000 -.bss 0x9f60 0x2000145c -.heap 0x4c40 0x2000b3c0 -.internal_storage 0x3a000 0x2adbc -.zwave_nvm 0x3000 0x64dbc -.nvm 0x9000 0x67dbc +.data 0x460 0x20001000 +.bss 0x9f58 0x20001460 +.heap 0x4c48 0x2000b3b8 +.internal_storage 0x3a000 0x2aee8 +.zwave_nvm 0x3000 0x64ee8 +.nvm 0x9000 0x67ee8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63a0 0x0 -.debug_info 0xc586ca 0x0 -.debug_abbrev 0x13d50 0x0 -.debug_loc 0x3af7c 0x0 +.debug_frame 0x63ec 0x0 +.debug_info 0xc58a42 0x0 +.debug_abbrev 0x13d2d 0x0 +.debug_loc 0x3b2fa 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9bf0 0x0 -.debug_line 0x4a2d0 0x0 -.debug_str 0x8487e 0x0 -Total 0xe06d63 +.debug_ranges 0x9ba8 0x0 +.debug_line 0x4a455 0x0 +.debug_str 0x849e1 0x0 +Total 0xe07852 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 176664 + 176968 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48060 + 48056 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_US_size.txt index 140b79adc11..c34d09eb6d4 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4207A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x2ab10 0x0 -_cc_handlers_v3 0x1f8 0x2ab10 -_zw_protocol_cmd_handlers 0x70 0x2ad08 -_zw_protocol_cmd_handlers_lr 0x30 0x2ad78 -.ARM.exidx 0x8 0x2ada8 -.copy.table 0xc 0x2adb0 -.zero.table 0x0 0x2adbc +.text 0x2ac3c 0x0 +_cc_handlers_v3 0x1f8 0x2ac3c +_zw_protocol_cmd_handlers 0x70 0x2ae34 +_zw_protocol_cmd_handlers_lr 0x30 0x2aea4 +.ARM.exidx 0x8 0x2aed4 +.copy.table 0xc 0x2aedc +.zero.table 0x0 0x2aee8 .stack 0x1000 0x20000000 -.data 0x45c 0x20001000 -.bss 0x9f60 0x2000145c -.heap 0x4c40 0x2000b3c0 -.internal_storage 0x3a000 0x2adbc -.zwave_nvm 0x3000 0x64dbc -.nvm 0x9000 0x67dbc +.data 0x460 0x20001000 +.bss 0x9f58 0x20001460 +.heap 0x4c48 0x2000b3b8 +.internal_storage 0x3a000 0x2aee8 +.zwave_nvm 0x3000 0x64ee8 +.nvm 0x9000 0x67ee8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63a0 0x0 -.debug_info 0xc586ca 0x0 -.debug_abbrev 0x13d50 0x0 -.debug_loc 0x3af7c 0x0 +.debug_frame 0x63ec 0x0 +.debug_info 0xc58a42 0x0 +.debug_abbrev 0x13d2d 0x0 +.debug_loc 0x3b2fa 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9bf0 0x0 -.debug_line 0x4a2d0 0x0 -.debug_str 0x84888 0x0 -Total 0xe06d6d +.debug_ranges 0x9ba8 0x0 +.debug_line 0x4a455 0x0 +.debug_str 0x849eb 0x0 +Total 0xe0785c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 176664 + 176968 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48060 + 48056 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4209A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4209A_REGION_US_LR_size.txt index 5d304bd7c1c..bfb9c918e63 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4209A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4209A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x2a9e8 0x0 -_cc_handlers_v3 0x1f8 0x2a9e8 -_zw_protocol_cmd_handlers 0x70 0x2abe0 -_zw_protocol_cmd_handlers_lr 0x30 0x2ac50 -.ARM.exidx 0x8 0x2ac80 -.copy.table 0xc 0x2ac88 -.zero.table 0x0 0x2ac94 +.text 0x2ab0c 0x0 +_cc_handlers_v3 0x1f8 0x2ab0c +_zw_protocol_cmd_handlers 0x70 0x2ad04 +_zw_protocol_cmd_handlers_lr 0x30 0x2ad74 +.ARM.exidx 0x8 0x2ada4 +.copy.table 0xc 0x2adac +.zero.table 0x0 0x2adb8 .stack 0x1000 0x20000000 -.data 0x45c 0x20001000 -.bss 0x9f44 0x2000145c +.data 0x460 0x20001000 +.bss 0x9f3c 0x20001460 .heap 0x4c60 0x2000b3a0 -.internal_storage 0x3a000 0x2ac94 -.zwave_nvm 0x3000 0x64c94 -.nvm 0x9000 0x67c94 +.internal_storage 0x3a000 0x2adb8 +.zwave_nvm 0x3000 0x64db8 +.nvm 0x9000 0x67db8 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63c0 0x0 -.debug_info 0xc59b47 0x0 -.debug_abbrev 0x13ff5 0x0 -.debug_loc 0x3b434 0x0 +.debug_frame 0x640c 0x0 +.debug_info 0xc59ebf 0x0 +.debug_abbrev 0x13fd2 0x0 +.debug_loc 0x3b7a3 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x9e60 0x0 -.debug_line 0x4ac25 0x0 -.debug_str 0x84bac 0x0 -Total 0xe096fc +.debug_ranges 0x9e18 0x0 +.debug_line 0x4adab 0x0 +.debug_str 0x84d0f 0x0 +Total 0xe0a1cd The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 176368 + 176664 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48032 + 48028 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4210A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4210A_REGION_US_LR_size.txt index dcc25cfe2a3..36fa0564d31 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4210A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4210A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x308cc 0x8006000 -_cc_handlers_v3 0x1f8 0x80368cc -_zw_protocol_cmd_handlers 0x70 0x8036ac4 -_zw_protocol_cmd_handlers_lr 0x30 0x8036b34 -.ARM.exidx 0x8 0x8036b64 -.copy.table 0xc 0x8036b6c -.zero.table 0x0 0x8036b78 +.text 0x306bc 0x8006000 +_cc_handlers_v3 0x1f8 0x80366bc +_zw_protocol_cmd_handlers 0x70 0x80368b4 +_zw_protocol_cmd_handlers_lr 0x30 0x8036924 +.ARM.exidx 0x8 0x8036954 +.copy.table 0xc 0x803695c +.zero.table 0x0 0x8036968 .stack 0x1000 0x20000000 -.data 0x548 0x20001000 -.bss 0xa9c8 0x20001548 -.heap 0x40f0 0x2000bf10 -.internal_storage 0x30000 0x8036b78 -.zwave_nvm 0x0 0x8066b78 -.nvm 0x8000 0x8066b78 +.data 0x54c 0x20001000 +.bss 0xa9d0 0x2000154c +.heap 0x40e0 0x2000bf20 +.internal_storage 0x30000 0x8036968 +.zwave_nvm 0x0 0x8066968 +.nvm 0x8000 0x8066968 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d18 0x0 -.debug_info 0xc97acc 0x0 -.debug_abbrev 0x16918 0x0 -.debug_loc 0x46f4f 0x0 +.debug_frame 0x6d70 0x0 +.debug_info 0xc97f95 0x0 +.debug_abbrev 0x1691c 0x0 +.debug_loc 0x472d3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb560 0x0 -.debug_line 0x54544 0x0 -.debug_str 0x8febd 0x0 -Total 0xe6465b +.debug_ranges 0xb580 0x0 +.debug_line 0x54747 0x0 +.debug_str 0x8fffe 0x0 +Total 0xe65054 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200896 + 200372 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50960 + 50972 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_EU_size.txt index 0b9e4aa4f23..e1feb41e636 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x3080c 0x8006000 -_cc_handlers_v3 0x1f8 0x803680c -_zw_protocol_cmd_handlers 0x70 0x8036a04 -_zw_protocol_cmd_handlers_lr 0x30 0x8036a74 -.ARM.exidx 0x8 0x8036aa4 -.copy.table 0xc 0x8036aac -.zero.table 0x0 0x8036ab8 +.text 0x30a30 0x8006000 +_cc_handlers_v3 0x1f8 0x8036a30 +_zw_protocol_cmd_handlers 0x70 0x8036c28 +_zw_protocol_cmd_handlers_lr 0x30 0x8036c98 +.ARM.exidx 0x8 0x8036cc8 +.copy.table 0xc 0x8036cd0 +.zero.table 0x0 0x8036cdc .stack 0x1000 0x20000000 -.data 0x544 0x20001000 -.bss 0xa948 0x20001544 +.data 0x548 0x20001000 +.bss 0xa948 0x20001548 .heap 0x34170 0x2000be90 -.internal_storage 0x30000 0x8036ab8 -.zwave_nvm 0x0 0x8066ab8 -.nvm 0x8000 0x8066ab8 +.internal_storage 0x30000 0x8036cdc +.zwave_nvm 0x0 0x8066cdc +.nvm 0x8000 0x8066cdc .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6cc0 0x0 -.debug_info 0xc96951 0x0 -.debug_abbrev 0x167c8 0x0 -.debug_loc 0x46c64 0x0 +.debug_frame 0x6d18 0x0 +.debug_info 0xc96e1d 0x0 +.debug_abbrev 0x167cc 0x0 +.debug_loc 0x46fe3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb4d0 0x0 -.debug_line 0x53f03 0x0 -.debug_str 0x8fe65 0x0 -Total 0xe92860 +.debug_ranges 0xb4e8 0x0 +.debug_line 0x54107 0x0 +.debug_str 0x8ffa6 0x0 +Total 0xe9368c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200700 + 201252 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50828 + 50832 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_US_LR_size.txt index f64c4ec425d..d5e917f7884 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x3080c 0x8006000 -_cc_handlers_v3 0x1f8 0x803680c -_zw_protocol_cmd_handlers 0x70 0x8036a04 -_zw_protocol_cmd_handlers_lr 0x30 0x8036a74 -.ARM.exidx 0x8 0x8036aa4 -.copy.table 0xc 0x8036aac -.zero.table 0x0 0x8036ab8 +.text 0x30a30 0x8006000 +_cc_handlers_v3 0x1f8 0x8036a30 +_zw_protocol_cmd_handlers 0x70 0x8036c28 +_zw_protocol_cmd_handlers_lr 0x30 0x8036c98 +.ARM.exidx 0x8 0x8036cc8 +.copy.table 0xc 0x8036cd0 +.zero.table 0x0 0x8036cdc .stack 0x1000 0x20000000 -.data 0x544 0x20001000 -.bss 0xa948 0x20001544 +.data 0x548 0x20001000 +.bss 0xa948 0x20001548 .heap 0x34170 0x2000be90 -.internal_storage 0x30000 0x8036ab8 -.zwave_nvm 0x0 0x8066ab8 -.nvm 0x8000 0x8066ab8 +.internal_storage 0x30000 0x8036cdc +.zwave_nvm 0x0 0x8066cdc +.nvm 0x8000 0x8066cdc .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6cc0 0x0 -.debug_info 0xc96951 0x0 -.debug_abbrev 0x167c8 0x0 -.debug_loc 0x46c64 0x0 +.debug_frame 0x6d18 0x0 +.debug_info 0xc96e1d 0x0 +.debug_abbrev 0x167cc 0x0 +.debug_loc 0x46fe3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb4d0 0x0 -.debug_line 0x53f03 0x0 -.debug_str 0x8fe5b 0x0 -Total 0xe92856 +.debug_ranges 0xb4e8 0x0 +.debug_line 0x54107 0x0 +.debug_str 0x8ff9c 0x0 +Total 0xe93682 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200700 + 201252 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50828 + 50832 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_US_size.txt index 0b9e4aa4f23..e1feb41e636 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4400B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x3080c 0x8006000 -_cc_handlers_v3 0x1f8 0x803680c -_zw_protocol_cmd_handlers 0x70 0x8036a04 -_zw_protocol_cmd_handlers_lr 0x30 0x8036a74 -.ARM.exidx 0x8 0x8036aa4 -.copy.table 0xc 0x8036aac -.zero.table 0x0 0x8036ab8 +.text 0x30a30 0x8006000 +_cc_handlers_v3 0x1f8 0x8036a30 +_zw_protocol_cmd_handlers 0x70 0x8036c28 +_zw_protocol_cmd_handlers_lr 0x30 0x8036c98 +.ARM.exidx 0x8 0x8036cc8 +.copy.table 0xc 0x8036cd0 +.zero.table 0x0 0x8036cdc .stack 0x1000 0x20000000 -.data 0x544 0x20001000 -.bss 0xa948 0x20001544 +.data 0x548 0x20001000 +.bss 0xa948 0x20001548 .heap 0x34170 0x2000be90 -.internal_storage 0x30000 0x8036ab8 -.zwave_nvm 0x0 0x8066ab8 -.nvm 0x8000 0x8066ab8 +.internal_storage 0x30000 0x8036cdc +.zwave_nvm 0x0 0x8066cdc +.nvm 0x8000 0x8066cdc .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6cc0 0x0 -.debug_info 0xc96951 0x0 -.debug_abbrev 0x167c8 0x0 -.debug_loc 0x46c64 0x0 +.debug_frame 0x6d18 0x0 +.debug_info 0xc96e1d 0x0 +.debug_abbrev 0x167cc 0x0 +.debug_loc 0x46fe3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb4d0 0x0 -.debug_line 0x53f03 0x0 -.debug_str 0x8fe65 0x0 -Total 0xe92860 +.debug_ranges 0xb4e8 0x0 +.debug_line 0x54107 0x0 +.debug_str 0x8ffa6 0x0 +Total 0xe9368c The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200700 + 201252 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50828 + 50832 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4401B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4401B_REGION_US_LR_size.txt index 1f96eea9844..9b9cec0b6e9 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4401B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_switch_on_off_BRD4401B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_switch_on_off.out : section size addr -.text 0x3080c 0x8006000 -_cc_handlers_v3 0x1f8 0x803680c -_zw_protocol_cmd_handlers 0x70 0x8036a04 -_zw_protocol_cmd_handlers_lr 0x30 0x8036a74 -.ARM.exidx 0x8 0x8036aa4 -.copy.table 0xc 0x8036aac -.zero.table 0x0 0x8036ab8 +.text 0x30a30 0x8006000 +_cc_handlers_v3 0x1f8 0x8036a30 +_zw_protocol_cmd_handlers 0x70 0x8036c28 +_zw_protocol_cmd_handlers_lr 0x30 0x8036c98 +.ARM.exidx 0x8 0x8036cc8 +.copy.table 0xc 0x8036cd0 +.zero.table 0x0 0x8036cdc .stack 0x1000 0x20000000 -.data 0x544 0x20001000 -.bss 0xa948 0x20001544 +.data 0x548 0x20001000 +.bss 0xa948 0x20001548 .heap 0x34170 0x2000be90 -.internal_storage 0x30000 0x8036ab8 -.zwave_nvm 0x0 0x8066ab8 -.nvm 0x8000 0x8066ab8 +.internal_storage 0x30000 0x8036cdc +.zwave_nvm 0x0 0x8066cdc +.nvm 0x8000 0x8066cdc .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6cc0 0x0 -.debug_info 0xc96955 0x0 -.debug_abbrev 0x167c8 0x0 -.debug_loc 0x46c64 0x0 +.debug_frame 0x6d18 0x0 +.debug_info 0xc96e21 0x0 +.debug_abbrev 0x167cc 0x0 +.debug_loc 0x46fe3 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb490 0x0 -.debug_line 0x53ef0 0x0 -.debug_str 0x8fe5b 0x0 -Total 0xe92807 +.debug_ranges 0xb4a8 0x0 +.debug_line 0x540f5 0x0 +.debug_str 0x8ff9c 0x0 +Total 0xe93634 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200700 + 201252 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50828 + 50832 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_EU_size.txt index 17b22ac4461..923bbd01967 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x2aef0 0x0 -_cc_handlers_v3 0x1d4 0x2aef0 -_zw_protocol_cmd_handlers 0x70 0x2b0c4 -_zw_protocol_cmd_handlers_lr 0x30 0x2b134 -.ARM.exidx 0x8 0x2b164 -.copy.table 0xc 0x2b16c -.zero.table 0x0 0x2b178 +.text 0x2b014 0x0 +_cc_handlers_v3 0x1d4 0x2b014 +_zw_protocol_cmd_handlers 0x70 0x2b1e8 +_zw_protocol_cmd_handlers_lr 0x30 0x2b258 +.ARM.exidx 0x8 0x2b288 +.copy.table 0xc 0x2b290 +.zero.table 0x0 0x2b29c .stack 0x1000 0x20000000 -.data 0x3ec 0x20001000 -.bss 0xa068 0x200013ec -.heap 0x4ba8 0x2000b458 -.internal_storage 0x3a000 0x2b178 -.zwave_nvm 0x3000 0x65178 -.nvm 0x9000 0x68178 +.data 0x3f0 0x20001000 +.bss 0xa060 0x200013f0 +.heap 0x4bb0 0x2000b450 +.internal_storage 0x3a000 0x2b29c +.zwave_nvm 0x3000 0x6529c +.nvm 0x9000 0x6829c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63c8 0x0 -.debug_info 0xc56564 0x0 -.debug_abbrev 0x13a8e 0x0 -.debug_loc 0x3a9d1 0x0 +.debug_frame 0x6414 0x0 +.debug_info 0xc568dc 0x0 +.debug_abbrev 0x13a6b 0x0 +.debug_loc 0x3ad40 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9908 0x0 -.debug_line 0x4a024 0x0 -.debug_str 0x84c54 0x0 -Total 0xe045b6 +.debug_ranges 0x98c0 0x0 +.debug_line 0x4a19e 0x0 +.debug_str 0x84db7 0x0 +Total 0xe05083 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 177508 + 177804 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48212 + 48208 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_US_LR_size.txt index 6dc3ef4fd29..8b9e845949b 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x2aef0 0x0 -_cc_handlers_v3 0x1d4 0x2aef0 -_zw_protocol_cmd_handlers 0x70 0x2b0c4 -_zw_protocol_cmd_handlers_lr 0x30 0x2b134 -.ARM.exidx 0x8 0x2b164 -.copy.table 0xc 0x2b16c -.zero.table 0x0 0x2b178 +.text 0x2b014 0x0 +_cc_handlers_v3 0x1d4 0x2b014 +_zw_protocol_cmd_handlers 0x70 0x2b1e8 +_zw_protocol_cmd_handlers_lr 0x30 0x2b258 +.ARM.exidx 0x8 0x2b288 +.copy.table 0xc 0x2b290 +.zero.table 0x0 0x2b29c .stack 0x1000 0x20000000 -.data 0x3ec 0x20001000 -.bss 0xa068 0x200013ec -.heap 0x4ba8 0x2000b458 -.internal_storage 0x3a000 0x2b178 -.zwave_nvm 0x3000 0x65178 -.nvm 0x9000 0x68178 +.data 0x3f0 0x20001000 +.bss 0xa060 0x200013f0 +.heap 0x4bb0 0x2000b450 +.internal_storage 0x3a000 0x2b29c +.zwave_nvm 0x3000 0x6529c +.nvm 0x9000 0x6829c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63c8 0x0 -.debug_info 0xc56564 0x0 -.debug_abbrev 0x13a8e 0x0 -.debug_loc 0x3a9d1 0x0 +.debug_frame 0x6414 0x0 +.debug_info 0xc568dc 0x0 +.debug_abbrev 0x13a6b 0x0 +.debug_loc 0x3ad40 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9908 0x0 -.debug_line 0x4a024 0x0 -.debug_str 0x84c4a 0x0 -Total 0xe045ac +.debug_ranges 0x98c0 0x0 +.debug_line 0x4a19e 0x0 +.debug_str 0x84dad 0x0 +Total 0xe05079 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 177508 + 177804 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48212 + 48208 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_US_size.txt index 17b22ac4461..923bbd01967 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4202A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x2aef0 0x0 -_cc_handlers_v3 0x1d4 0x2aef0 -_zw_protocol_cmd_handlers 0x70 0x2b0c4 -_zw_protocol_cmd_handlers_lr 0x30 0x2b134 -.ARM.exidx 0x8 0x2b164 -.copy.table 0xc 0x2b16c -.zero.table 0x0 0x2b178 +.text 0x2b014 0x0 +_cc_handlers_v3 0x1d4 0x2b014 +_zw_protocol_cmd_handlers 0x70 0x2b1e8 +_zw_protocol_cmd_handlers_lr 0x30 0x2b258 +.ARM.exidx 0x8 0x2b288 +.copy.table 0xc 0x2b290 +.zero.table 0x0 0x2b29c .stack 0x1000 0x20000000 -.data 0x3ec 0x20001000 -.bss 0xa068 0x200013ec -.heap 0x4ba8 0x2000b458 -.internal_storage 0x3a000 0x2b178 -.zwave_nvm 0x3000 0x65178 -.nvm 0x9000 0x68178 +.data 0x3f0 0x20001000 +.bss 0xa060 0x200013f0 +.heap 0x4bb0 0x2000b450 +.internal_storage 0x3a000 0x2b29c +.zwave_nvm 0x3000 0x6529c +.nvm 0x9000 0x6829c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63c8 0x0 -.debug_info 0xc56564 0x0 -.debug_abbrev 0x13a8e 0x0 -.debug_loc 0x3a9d1 0x0 +.debug_frame 0x6414 0x0 +.debug_info 0xc568dc 0x0 +.debug_abbrev 0x13a6b 0x0 +.debug_loc 0x3ad40 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9908 0x0 -.debug_line 0x4a024 0x0 -.debug_str 0x84c54 0x0 -Total 0xe045b6 +.debug_ranges 0x98c0 0x0 +.debug_line 0x4a19e 0x0 +.debug_str 0x84db7 0x0 +Total 0xe05083 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 177508 + 177804 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48212 + 48208 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_EU_size.txt index fb1a126b457..76f0b1e2539 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30c5c 0x8006000 -_cc_handlers_v3 0x1d4 0x8036c5c -_zw_protocol_cmd_handlers 0x70 0x8036e30 -_zw_protocol_cmd_handlers_lr 0x30 0x8036ea0 -.ARM.exidx 0x8 0x8036ed0 -.copy.table 0xc 0x8036ed8 -.zero.table 0x0 0x8036ee4 +.text 0x30a5c 0x8006000 +_cc_handlers_v3 0x1d4 0x8036a5c +_zw_protocol_cmd_handlers 0x70 0x8036c30 +_zw_protocol_cmd_handlers_lr 0x30 0x8036ca0 +.ARM.exidx 0x8 0x8036cd0 +.copy.table 0xc 0x8036cd8 +.zero.table 0x0 0x8036ce4 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xaad4 0x200014d8 -.heap 0x4050 0x2000bfb0 -.internal_storage 0x30000 0x8036ee4 -.zwave_nvm 0x0 0x8066ee4 -.nvm 0x8000 0x8066ee4 +.data 0x4dc 0x20001000 +.bss 0xaadc 0x200014dc +.heap 0x4048 0x2000bfb8 +.internal_storage 0x30000 0x8036ce4 +.zwave_nvm 0x0 0x8066ce4 +.nvm 0x8000 0x8066ce4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d4c 0x0 -.debug_info 0xc95732 0x0 -.debug_abbrev 0x165d6 0x0 -.debug_loc 0x4690a 0x0 +.debug_frame 0x6da4 0x0 +.debug_info 0xc95bf7 0x0 +.debug_abbrev 0x165da 0x0 +.debug_loc 0x46c8d 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb2e0 0x0 -.debug_line 0x54098 0x0 -.debug_str 0x900dc 0x0 -Total 0xe617c9 +.debug_ranges 0xb318 0x0 +.debug_line 0x542b4 0x0 +.debug_str 0x9021d 0x0 +Total 0xe62206 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 201660 + 201152 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51116 + 51128 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_US_LR_size.txt index 9dd42068aef..dee2fcb4dc7 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30c5c 0x8006000 -_cc_handlers_v3 0x1d4 0x8036c5c -_zw_protocol_cmd_handlers 0x70 0x8036e30 -_zw_protocol_cmd_handlers_lr 0x30 0x8036ea0 -.ARM.exidx 0x8 0x8036ed0 -.copy.table 0xc 0x8036ed8 -.zero.table 0x0 0x8036ee4 +.text 0x30a5c 0x8006000 +_cc_handlers_v3 0x1d4 0x8036a5c +_zw_protocol_cmd_handlers 0x70 0x8036c30 +_zw_protocol_cmd_handlers_lr 0x30 0x8036ca0 +.ARM.exidx 0x8 0x8036cd0 +.copy.table 0xc 0x8036cd8 +.zero.table 0x0 0x8036ce4 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xaad4 0x200014d8 -.heap 0x4050 0x2000bfb0 -.internal_storage 0x30000 0x8036ee4 -.zwave_nvm 0x0 0x8066ee4 -.nvm 0x8000 0x8066ee4 +.data 0x4dc 0x20001000 +.bss 0xaadc 0x200014dc +.heap 0x4048 0x2000bfb8 +.internal_storage 0x30000 0x8036ce4 +.zwave_nvm 0x0 0x8066ce4 +.nvm 0x8000 0x8066ce4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d4c 0x0 -.debug_info 0xc95732 0x0 -.debug_abbrev 0x165d6 0x0 -.debug_loc 0x4690a 0x0 +.debug_frame 0x6da4 0x0 +.debug_info 0xc95bf7 0x0 +.debug_abbrev 0x165da 0x0 +.debug_loc 0x46c8d 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb2e0 0x0 -.debug_line 0x54098 0x0 -.debug_str 0x900d2 0x0 -Total 0xe617bf +.debug_ranges 0xb318 0x0 +.debug_line 0x542b4 0x0 +.debug_str 0x90213 0x0 +Total 0xe621fc The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 201660 + 201152 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51116 + 51128 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_US_size.txt index fb1a126b457..76f0b1e2539 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204C_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30c5c 0x8006000 -_cc_handlers_v3 0x1d4 0x8036c5c -_zw_protocol_cmd_handlers 0x70 0x8036e30 -_zw_protocol_cmd_handlers_lr 0x30 0x8036ea0 -.ARM.exidx 0x8 0x8036ed0 -.copy.table 0xc 0x8036ed8 -.zero.table 0x0 0x8036ee4 +.text 0x30a5c 0x8006000 +_cc_handlers_v3 0x1d4 0x8036a5c +_zw_protocol_cmd_handlers 0x70 0x8036c30 +_zw_protocol_cmd_handlers_lr 0x30 0x8036ca0 +.ARM.exidx 0x8 0x8036cd0 +.copy.table 0xc 0x8036cd8 +.zero.table 0x0 0x8036ce4 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xaad4 0x200014d8 -.heap 0x4050 0x2000bfb0 -.internal_storage 0x30000 0x8036ee4 -.zwave_nvm 0x0 0x8066ee4 -.nvm 0x8000 0x8066ee4 +.data 0x4dc 0x20001000 +.bss 0xaadc 0x200014dc +.heap 0x4048 0x2000bfb8 +.internal_storage 0x30000 0x8036ce4 +.zwave_nvm 0x0 0x8066ce4 +.nvm 0x8000 0x8066ce4 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d4c 0x0 -.debug_info 0xc95732 0x0 -.debug_abbrev 0x165d6 0x0 -.debug_loc 0x4690a 0x0 +.debug_frame 0x6da4 0x0 +.debug_info 0xc95bf7 0x0 +.debug_abbrev 0x165da 0x0 +.debug_loc 0x46c8d 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb2e0 0x0 -.debug_line 0x54098 0x0 -.debug_str 0x900dc 0x0 -Total 0xe617c9 +.debug_ranges 0xb318 0x0 +.debug_line 0x542b4 0x0 +.debug_str 0x9021d 0x0 +Total 0xe62206 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 201660 + 201152 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51116 + 51128 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_EU_size.txt index 1fe8bf0a6dc..a48f5809158 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30c9c 0x8006000 -_cc_handlers_v3 0x1d4 0x8036c9c -_zw_protocol_cmd_handlers 0x70 0x8036e70 -_zw_protocol_cmd_handlers_lr 0x30 0x8036ee0 -.ARM.exidx 0x8 0x8036f10 -.copy.table 0xc 0x8036f18 -.zero.table 0x0 0x8036f24 +.text 0x30a9c 0x8006000 +_cc_handlers_v3 0x1d4 0x8036a9c +_zw_protocol_cmd_handlers 0x70 0x8036c70 +_zw_protocol_cmd_handlers_lr 0x30 0x8036ce0 +.ARM.exidx 0x8 0x8036d10 +.copy.table 0xc 0x8036d18 +.zero.table 0x0 0x8036d24 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xaad4 0x200014d8 -.heap 0x4050 0x2000bfb0 -.internal_storage 0x30000 0x8036f24 -.zwave_nvm 0x0 0x8066f24 -.nvm 0x8000 0x8066f24 +.data 0x4dc 0x20001000 +.bss 0xaadc 0x200014dc +.heap 0x4048 0x2000bfb8 +.internal_storage 0x30000 0x8036d24 +.zwave_nvm 0x0 0x8066d24 +.nvm 0x8000 0x8066d24 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d4c 0x0 -.debug_info 0xc95986 0x0 -.debug_abbrev 0x1667a 0x0 -.debug_loc 0x46965 0x0 +.debug_frame 0x6da4 0x0 +.debug_info 0xc95e4b 0x0 +.debug_abbrev 0x1667e 0x0 +.debug_loc 0x46cf2 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb308 0x0 -.debug_line 0x542b7 0x0 -.debug_str 0x902af 0x0 -Total 0xe61f76 +.debug_ranges 0xb340 0x0 +.debug_line 0x544d3 0x0 +.debug_str 0x903f0 0x0 +Total 0xe629bd The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 201724 + 201216 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51116 + 51128 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_US_LR_size.txt index 9a232508b24..2441266da0b 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30c9c 0x8006000 -_cc_handlers_v3 0x1d4 0x8036c9c -_zw_protocol_cmd_handlers 0x70 0x8036e70 -_zw_protocol_cmd_handlers_lr 0x30 0x8036ee0 -.ARM.exidx 0x8 0x8036f10 -.copy.table 0xc 0x8036f18 -.zero.table 0x0 0x8036f24 +.text 0x30a9c 0x8006000 +_cc_handlers_v3 0x1d4 0x8036a9c +_zw_protocol_cmd_handlers 0x70 0x8036c70 +_zw_protocol_cmd_handlers_lr 0x30 0x8036ce0 +.ARM.exidx 0x8 0x8036d10 +.copy.table 0xc 0x8036d18 +.zero.table 0x0 0x8036d24 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xaad4 0x200014d8 -.heap 0x4050 0x2000bfb0 -.internal_storage 0x30000 0x8036f24 -.zwave_nvm 0x0 0x8066f24 -.nvm 0x8000 0x8066f24 +.data 0x4dc 0x20001000 +.bss 0xaadc 0x200014dc +.heap 0x4048 0x2000bfb8 +.internal_storage 0x30000 0x8036d24 +.zwave_nvm 0x0 0x8066d24 +.nvm 0x8000 0x8066d24 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d4c 0x0 -.debug_info 0xc95986 0x0 -.debug_abbrev 0x1667a 0x0 -.debug_loc 0x46965 0x0 +.debug_frame 0x6da4 0x0 +.debug_info 0xc95e4b 0x0 +.debug_abbrev 0x1667e 0x0 +.debug_loc 0x46cf2 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb308 0x0 -.debug_line 0x542b7 0x0 -.debug_str 0x902a5 0x0 -Total 0xe61f6c +.debug_ranges 0xb340 0x0 +.debug_line 0x544d3 0x0 +.debug_str 0x903e6 0x0 +Total 0xe629b3 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 201724 + 201216 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51116 + 51128 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_US_size.txt index 1fe8bf0a6dc..a48f5809158 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4204D_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30c9c 0x8006000 -_cc_handlers_v3 0x1d4 0x8036c9c -_zw_protocol_cmd_handlers 0x70 0x8036e70 -_zw_protocol_cmd_handlers_lr 0x30 0x8036ee0 -.ARM.exidx 0x8 0x8036f10 -.copy.table 0xc 0x8036f18 -.zero.table 0x0 0x8036f24 +.text 0x30a9c 0x8006000 +_cc_handlers_v3 0x1d4 0x8036a9c +_zw_protocol_cmd_handlers 0x70 0x8036c70 +_zw_protocol_cmd_handlers_lr 0x30 0x8036ce0 +.ARM.exidx 0x8 0x8036d10 +.copy.table 0xc 0x8036d18 +.zero.table 0x0 0x8036d24 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xaad4 0x200014d8 -.heap 0x4050 0x2000bfb0 -.internal_storage 0x30000 0x8036f24 -.zwave_nvm 0x0 0x8066f24 -.nvm 0x8000 0x8066f24 +.data 0x4dc 0x20001000 +.bss 0xaadc 0x200014dc +.heap 0x4048 0x2000bfb8 +.internal_storage 0x30000 0x8036d24 +.zwave_nvm 0x0 0x8066d24 +.nvm 0x8000 0x8066d24 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d4c 0x0 -.debug_info 0xc95986 0x0 -.debug_abbrev 0x1667a 0x0 -.debug_loc 0x46965 0x0 +.debug_frame 0x6da4 0x0 +.debug_info 0xc95e4b 0x0 +.debug_abbrev 0x1667e 0x0 +.debug_loc 0x46cf2 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb308 0x0 -.debug_line 0x542b7 0x0 -.debug_str 0x902af 0x0 -Total 0xe61f76 +.debug_ranges 0xb340 0x0 +.debug_line 0x544d3 0x0 +.debug_str 0x903f0 0x0 +Total 0xe629bd The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 201724 + 201216 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51116 + 51128 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_EU_size.txt index 6e107f212e3..32346def72f 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30878 0x8006000 -_cc_handlers_v3 0x1d4 0x8036878 -_zw_protocol_cmd_handlers 0x70 0x8036a4c -_zw_protocol_cmd_handlers_lr 0x30 0x8036abc -.ARM.exidx 0x8 0x8036aec -.copy.table 0xc 0x8036af4 -.zero.table 0x0 0x8036b00 +.text 0x30668 0x8006000 +_cc_handlers_v3 0x1d4 0x8036668 +_zw_protocol_cmd_handlers 0x70 0x803683c +_zw_protocol_cmd_handlers_lr 0x30 0x80368ac +.ARM.exidx 0x8 0x80368dc +.copy.table 0xc 0x80368e4 +.zero.table 0x0 0x80368f0 .stack 0x1000 0x20000000 -.data 0x4dc 0x20001000 -.bss 0xa97c 0x200014dc -.heap 0x41a8 0x2000be58 -.internal_storage 0x30000 0x8036b00 -.zwave_nvm 0x0 0x8066b00 -.nvm 0x8000 0x8066b00 +.data 0x4e0 0x20001000 +.bss 0xa97c 0x200014e0 +.heap 0x41a0 0x2000be60 +.internal_storage 0x30000 0x80368f0 +.zwave_nvm 0x0 0x80668f0 +.nvm 0x8000 0x80668f0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6bbc 0x0 -.debug_info 0xc9364a 0x0 -.debug_abbrev 0x164e7 0x0 -.debug_loc 0x45b8d 0x0 +.debug_frame 0x6c14 0x0 +.debug_info 0xc93b09 0x0 +.debug_abbrev 0x164fc 0x0 +.debug_loc 0x45f2c 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb368 0x0 -.debug_line 0x53602 0x0 -.debug_str 0x9015e 0x0 -Total 0xe5d9c1 +.debug_ranges 0xb3a0 0x0 +.debug_line 0x53822 0x0 +.debug_str 0x9029f 0x0 +Total 0xe5e411 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200668 + 200144 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50776 + 50780 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_US_LR_size.txt index b7d5e52efb4..d70135d1bfc 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30878 0x8006000 -_cc_handlers_v3 0x1d4 0x8036878 -_zw_protocol_cmd_handlers 0x70 0x8036a4c -_zw_protocol_cmd_handlers_lr 0x30 0x8036abc -.ARM.exidx 0x8 0x8036aec -.copy.table 0xc 0x8036af4 -.zero.table 0x0 0x8036b00 +.text 0x30668 0x8006000 +_cc_handlers_v3 0x1d4 0x8036668 +_zw_protocol_cmd_handlers 0x70 0x803683c +_zw_protocol_cmd_handlers_lr 0x30 0x80368ac +.ARM.exidx 0x8 0x80368dc +.copy.table 0xc 0x80368e4 +.zero.table 0x0 0x80368f0 .stack 0x1000 0x20000000 -.data 0x4dc 0x20001000 -.bss 0xa97c 0x200014dc -.heap 0x41a8 0x2000be58 -.internal_storage 0x30000 0x8036b00 -.zwave_nvm 0x0 0x8066b00 -.nvm 0x8000 0x8066b00 +.data 0x4e0 0x20001000 +.bss 0xa97c 0x200014e0 +.heap 0x41a0 0x2000be60 +.internal_storage 0x30000 0x80368f0 +.zwave_nvm 0x0 0x80668f0 +.nvm 0x8000 0x80668f0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6bbc 0x0 -.debug_info 0xc9364a 0x0 -.debug_abbrev 0x164e7 0x0 -.debug_loc 0x45b8d 0x0 +.debug_frame 0x6c14 0x0 +.debug_info 0xc93b09 0x0 +.debug_abbrev 0x164fc 0x0 +.debug_loc 0x45f2c 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb368 0x0 -.debug_line 0x53602 0x0 -.debug_str 0x90154 0x0 -Total 0xe5d9b7 +.debug_ranges 0xb3a0 0x0 +.debug_line 0x53822 0x0 +.debug_str 0x90295 0x0 +Total 0xe5e407 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200668 + 200144 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50776 + 50780 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_US_size.txt index 6e107f212e3..32346def72f 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30878 0x8006000 -_cc_handlers_v3 0x1d4 0x8036878 -_zw_protocol_cmd_handlers 0x70 0x8036a4c -_zw_protocol_cmd_handlers_lr 0x30 0x8036abc -.ARM.exidx 0x8 0x8036aec -.copy.table 0xc 0x8036af4 -.zero.table 0x0 0x8036b00 +.text 0x30668 0x8006000 +_cc_handlers_v3 0x1d4 0x8036668 +_zw_protocol_cmd_handlers 0x70 0x803683c +_zw_protocol_cmd_handlers_lr 0x30 0x80368ac +.ARM.exidx 0x8 0x80368dc +.copy.table 0xc 0x80368e4 +.zero.table 0x0 0x80368f0 .stack 0x1000 0x20000000 -.data 0x4dc 0x20001000 -.bss 0xa97c 0x200014dc -.heap 0x41a8 0x2000be58 -.internal_storage 0x30000 0x8036b00 -.zwave_nvm 0x0 0x8066b00 -.nvm 0x8000 0x8066b00 +.data 0x4e0 0x20001000 +.bss 0xa97c 0x200014e0 +.heap 0x41a0 0x2000be60 +.internal_storage 0x30000 0x80368f0 +.zwave_nvm 0x0 0x80668f0 +.nvm 0x8000 0x80668f0 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6bbc 0x0 -.debug_info 0xc9364a 0x0 -.debug_abbrev 0x164e7 0x0 -.debug_loc 0x45b8d 0x0 +.debug_frame 0x6c14 0x0 +.debug_info 0xc93b09 0x0 +.debug_abbrev 0x164fc 0x0 +.debug_loc 0x45f2c 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb368 0x0 -.debug_line 0x53602 0x0 -.debug_str 0x9015e 0x0 -Total 0xe5d9c1 +.debug_ranges 0xb3a0 0x0 +.debug_line 0x53822 0x0 +.debug_str 0x9029f 0x0 +Total 0xe5e411 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 200668 + 200144 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50776 + 50780 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_EU_size.txt index 5d92652f9be..a58eb1240ca 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x31228 0x8006000 -_cc_handlers_v3 0x1d4 0x8037228 -_zw_protocol_cmd_handlers 0x70 0x80373fc -_zw_protocol_cmd_handlers_lr 0x30 0x803746c -.ARM.exidx 0x8 0x803749c -.copy.table 0xc 0x80374a4 -.zero.table 0x0 0x80374b0 +.text 0x31020 0x8006000 +_cc_handlers_v3 0x1d4 0x8037020 +_zw_protocol_cmd_handlers 0x70 0x80371f4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037264 +.ARM.exidx 0x8 0x8037294 +.copy.table 0xc 0x803729c +.zero.table 0x0 0x80372a8 .stack 0x1000 0x20000000 -.data 0x4dc 0x20001000 -.bss 0xaaf4 0x200014dc -.heap 0x4030 0x2000bfd0 -.internal_storage 0x30000 0x80374b0 -.zwave_nvm 0x0 0x80674b0 -.nvm 0x8000 0x80674b0 +.data 0x4e0 0x20001000 +.bss 0xaaf4 0x200014e0 +.heap 0x4028 0x2000bfd8 +.internal_storage 0x30000 0x80372a8 +.zwave_nvm 0x0 0x80672a8 +.nvm 0x8000 0x80672a8 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d4c 0x0 -.debug_info 0xc9621a 0x0 -.debug_abbrev 0x1672c 0x0 -.debug_loc 0x46957 0x0 +.debug_frame 0x6da4 0x0 +.debug_info 0xc966df 0x0 +.debug_abbrev 0x16730 0x0 +.debug_loc 0x46cdd 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb2e0 0x0 -.debug_line 0x54031 0x0 -.debug_str 0x907b2 0x0 -Total 0xe630db +.debug_ranges 0xb318 0x0 +.debug_line 0x5424c 0x0 +.debug_str 0x908f3 0x0 +Total 0xe63b0a The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203148 + 202632 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51152 + 51156 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_US_LR_size.txt index 55574dd362a..fbed5994e9f 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x31228 0x8006000 -_cc_handlers_v3 0x1d4 0x8037228 -_zw_protocol_cmd_handlers 0x70 0x80373fc -_zw_protocol_cmd_handlers_lr 0x30 0x803746c -.ARM.exidx 0x8 0x803749c -.copy.table 0xc 0x80374a4 -.zero.table 0x0 0x80374b0 +.text 0x31020 0x8006000 +_cc_handlers_v3 0x1d4 0x8037020 +_zw_protocol_cmd_handlers 0x70 0x80371f4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037264 +.ARM.exidx 0x8 0x8037294 +.copy.table 0xc 0x803729c +.zero.table 0x0 0x80372a8 .stack 0x1000 0x20000000 -.data 0x4dc 0x20001000 -.bss 0xaaf4 0x200014dc -.heap 0x4030 0x2000bfd0 -.internal_storage 0x30000 0x80374b0 -.zwave_nvm 0x0 0x80674b0 -.nvm 0x8000 0x80674b0 +.data 0x4e0 0x20001000 +.bss 0xaaf4 0x200014e0 +.heap 0x4028 0x2000bfd8 +.internal_storage 0x30000 0x80372a8 +.zwave_nvm 0x0 0x80672a8 +.nvm 0x8000 0x80672a8 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d4c 0x0 -.debug_info 0xc9621a 0x0 -.debug_abbrev 0x1672c 0x0 -.debug_loc 0x46957 0x0 +.debug_frame 0x6da4 0x0 +.debug_info 0xc966df 0x0 +.debug_abbrev 0x16730 0x0 +.debug_loc 0x46cdd 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb2e0 0x0 -.debug_line 0x54031 0x0 -.debug_str 0x907a8 0x0 -Total 0xe630d1 +.debug_ranges 0xb318 0x0 +.debug_line 0x5424c 0x0 +.debug_str 0x908e9 0x0 +Total 0xe63b00 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203148 + 202632 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51152 + 51156 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_US_size.txt index 5d92652f9be..a58eb1240ca 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4205B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x31228 0x8006000 -_cc_handlers_v3 0x1d4 0x8037228 -_zw_protocol_cmd_handlers 0x70 0x80373fc -_zw_protocol_cmd_handlers_lr 0x30 0x803746c -.ARM.exidx 0x8 0x803749c -.copy.table 0xc 0x80374a4 -.zero.table 0x0 0x80374b0 +.text 0x31020 0x8006000 +_cc_handlers_v3 0x1d4 0x8037020 +_zw_protocol_cmd_handlers 0x70 0x80371f4 +_zw_protocol_cmd_handlers_lr 0x30 0x8037264 +.ARM.exidx 0x8 0x8037294 +.copy.table 0xc 0x803729c +.zero.table 0x0 0x80372a8 .stack 0x1000 0x20000000 -.data 0x4dc 0x20001000 -.bss 0xaaf4 0x200014dc -.heap 0x4030 0x2000bfd0 -.internal_storage 0x30000 0x80374b0 -.zwave_nvm 0x0 0x80674b0 -.nvm 0x8000 0x80674b0 +.data 0x4e0 0x20001000 +.bss 0xaaf4 0x200014e0 +.heap 0x4028 0x2000bfd8 +.internal_storage 0x30000 0x80372a8 +.zwave_nvm 0x0 0x80672a8 +.nvm 0x8000 0x80672a8 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d4c 0x0 -.debug_info 0xc9621a 0x0 -.debug_abbrev 0x1672c 0x0 -.debug_loc 0x46957 0x0 +.debug_frame 0x6da4 0x0 +.debug_info 0xc966df 0x0 +.debug_abbrev 0x16730 0x0 +.debug_loc 0x46cdd 0x0 .debug_aranges 0x100 0x0 -.debug_ranges 0xb2e0 0x0 -.debug_line 0x54031 0x0 -.debug_str 0x907b2 0x0 -Total 0xe630db +.debug_ranges 0xb318 0x0 +.debug_line 0x5424c 0x0 +.debug_str 0x908f3 0x0 +Total 0xe63b0a The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 203148 + 202632 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51152 + 51156 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_EU_size.txt index 17b22ac4461..923bbd01967 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x2aef0 0x0 -_cc_handlers_v3 0x1d4 0x2aef0 -_zw_protocol_cmd_handlers 0x70 0x2b0c4 -_zw_protocol_cmd_handlers_lr 0x30 0x2b134 -.ARM.exidx 0x8 0x2b164 -.copy.table 0xc 0x2b16c -.zero.table 0x0 0x2b178 +.text 0x2b014 0x0 +_cc_handlers_v3 0x1d4 0x2b014 +_zw_protocol_cmd_handlers 0x70 0x2b1e8 +_zw_protocol_cmd_handlers_lr 0x30 0x2b258 +.ARM.exidx 0x8 0x2b288 +.copy.table 0xc 0x2b290 +.zero.table 0x0 0x2b29c .stack 0x1000 0x20000000 -.data 0x3ec 0x20001000 -.bss 0xa068 0x200013ec -.heap 0x4ba8 0x2000b458 -.internal_storage 0x3a000 0x2b178 -.zwave_nvm 0x3000 0x65178 -.nvm 0x9000 0x68178 +.data 0x3f0 0x20001000 +.bss 0xa060 0x200013f0 +.heap 0x4bb0 0x2000b450 +.internal_storage 0x3a000 0x2b29c +.zwave_nvm 0x3000 0x6529c +.nvm 0x9000 0x6829c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63c8 0x0 -.debug_info 0xc56564 0x0 -.debug_abbrev 0x13a8e 0x0 -.debug_loc 0x3a9d1 0x0 +.debug_frame 0x6414 0x0 +.debug_info 0xc568dc 0x0 +.debug_abbrev 0x13a6b 0x0 +.debug_loc 0x3ad40 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9908 0x0 -.debug_line 0x4a024 0x0 -.debug_str 0x84c54 0x0 -Total 0xe045b6 +.debug_ranges 0x98c0 0x0 +.debug_line 0x4a19e 0x0 +.debug_str 0x84db7 0x0 +Total 0xe05083 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 177508 + 177804 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48212 + 48208 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_US_LR_size.txt index 6dc3ef4fd29..8b9e845949b 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x2aef0 0x0 -_cc_handlers_v3 0x1d4 0x2aef0 -_zw_protocol_cmd_handlers 0x70 0x2b0c4 -_zw_protocol_cmd_handlers_lr 0x30 0x2b134 -.ARM.exidx 0x8 0x2b164 -.copy.table 0xc 0x2b16c -.zero.table 0x0 0x2b178 +.text 0x2b014 0x0 +_cc_handlers_v3 0x1d4 0x2b014 +_zw_protocol_cmd_handlers 0x70 0x2b1e8 +_zw_protocol_cmd_handlers_lr 0x30 0x2b258 +.ARM.exidx 0x8 0x2b288 +.copy.table 0xc 0x2b290 +.zero.table 0x0 0x2b29c .stack 0x1000 0x20000000 -.data 0x3ec 0x20001000 -.bss 0xa068 0x200013ec -.heap 0x4ba8 0x2000b458 -.internal_storage 0x3a000 0x2b178 -.zwave_nvm 0x3000 0x65178 -.nvm 0x9000 0x68178 +.data 0x3f0 0x20001000 +.bss 0xa060 0x200013f0 +.heap 0x4bb0 0x2000b450 +.internal_storage 0x3a000 0x2b29c +.zwave_nvm 0x3000 0x6529c +.nvm 0x9000 0x6829c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63c8 0x0 -.debug_info 0xc56564 0x0 -.debug_abbrev 0x13a8e 0x0 -.debug_loc 0x3a9d1 0x0 +.debug_frame 0x6414 0x0 +.debug_info 0xc568dc 0x0 +.debug_abbrev 0x13a6b 0x0 +.debug_loc 0x3ad40 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9908 0x0 -.debug_line 0x4a024 0x0 -.debug_str 0x84c4a 0x0 -Total 0xe045ac +.debug_ranges 0x98c0 0x0 +.debug_line 0x4a19e 0x0 +.debug_str 0x84dad 0x0 +Total 0xe05079 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 177508 + 177804 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48212 + 48208 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_US_size.txt index 17b22ac4461..923bbd01967 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4207A_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x2aef0 0x0 -_cc_handlers_v3 0x1d4 0x2aef0 -_zw_protocol_cmd_handlers 0x70 0x2b0c4 -_zw_protocol_cmd_handlers_lr 0x30 0x2b134 -.ARM.exidx 0x8 0x2b164 -.copy.table 0xc 0x2b16c -.zero.table 0x0 0x2b178 +.text 0x2b014 0x0 +_cc_handlers_v3 0x1d4 0x2b014 +_zw_protocol_cmd_handlers 0x70 0x2b1e8 +_zw_protocol_cmd_handlers_lr 0x30 0x2b258 +.ARM.exidx 0x8 0x2b288 +.copy.table 0xc 0x2b290 +.zero.table 0x0 0x2b29c .stack 0x1000 0x20000000 -.data 0x3ec 0x20001000 -.bss 0xa068 0x200013ec -.heap 0x4ba8 0x2000b458 -.internal_storage 0x3a000 0x2b178 -.zwave_nvm 0x3000 0x65178 -.nvm 0x9000 0x68178 +.data 0x3f0 0x20001000 +.bss 0xa060 0x200013f0 +.heap 0x4bb0 0x2000b450 +.internal_storage 0x3a000 0x2b29c +.zwave_nvm 0x3000 0x6529c +.nvm 0x9000 0x6829c .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63c8 0x0 -.debug_info 0xc56564 0x0 -.debug_abbrev 0x13a8e 0x0 -.debug_loc 0x3a9d1 0x0 +.debug_frame 0x6414 0x0 +.debug_info 0xc568dc 0x0 +.debug_abbrev 0x13a6b 0x0 +.debug_loc 0x3ad40 0x0 .debug_aranges 0xc0 0x0 -.debug_ranges 0x9908 0x0 -.debug_line 0x4a024 0x0 -.debug_str 0x84c54 0x0 -Total 0xe045b6 +.debug_ranges 0x98c0 0x0 +.debug_line 0x4a19e 0x0 +.debug_str 0x84db7 0x0 +Total 0xe05083 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 177508 + 177804 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48212 + 48208 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4209A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4209A_REGION_US_LR_size.txt index ea0d9b831e2..564e922daca 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4209A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4209A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x2adc8 0x0 -_cc_handlers_v3 0x1d4 0x2adc8 -_zw_protocol_cmd_handlers 0x70 0x2af9c -_zw_protocol_cmd_handlers_lr 0x30 0x2b00c -.ARM.exidx 0x8 0x2b03c -.copy.table 0xc 0x2b044 -.zero.table 0x0 0x2b050 +.text 0x2aeec 0x0 +_cc_handlers_v3 0x1d4 0x2aeec +_zw_protocol_cmd_handlers 0x70 0x2b0c0 +_zw_protocol_cmd_handlers_lr 0x30 0x2b130 +.ARM.exidx 0x8 0x2b160 +.copy.table 0xc 0x2b168 +.zero.table 0x0 0x2b174 .stack 0x1000 0x20000000 -.data 0x3ec 0x20001000 -.bss 0xa04c 0x200013ec +.data 0x3f0 0x20001000 +.bss 0xa044 0x200013f0 .heap 0x4bc8 0x2000b438 -.internal_storage 0x3a000 0x2b050 -.zwave_nvm 0x3000 0x65050 -.nvm 0x9000 0x68050 +.internal_storage 0x3a000 0x2b174 +.zwave_nvm 0x3000 0x65174 +.nvm 0x9000 0x68174 .ARM.attributes 0x2e 0x0 .comment 0x49 0x0 -.debug_frame 0x63e8 0x0 -.debug_info 0xc579e1 0x0 -.debug_abbrev 0x13d33 0x0 -.debug_loc 0x3ae7a 0x0 +.debug_frame 0x6434 0x0 +.debug_info 0xc57d59 0x0 +.debug_abbrev 0x13d10 0x0 +.debug_loc 0x3b1f8 0x0 .debug_aranges 0x90 0x0 -.debug_ranges 0x9b78 0x0 -.debug_line 0x4a976 0x0 -.debug_str 0x84f78 0x0 -Total 0xe06f33 +.debug_ranges 0x9b30 0x0 +.debug_line 0x4aaef 0x0 +.debug_str 0x850db 0x0 +Total 0xe07a06 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 177212 + 177508 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 49152 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 48184 + 48180 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4210A_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4210A_REGION_US_LR_size.txt index a961343270e..561056b2050 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4210A_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4210A_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30cac 0x8006000 -_cc_handlers_v3 0x1d4 0x8036cac -_zw_protocol_cmd_handlers 0x70 0x8036e80 -_zw_protocol_cmd_handlers_lr 0x30 0x8036ef0 -.ARM.exidx 0x8 0x8036f20 -.copy.table 0xc 0x8036f28 -.zero.table 0x0 0x8036f34 +.text 0x30a9c 0x8006000 +_cc_handlers_v3 0x1d4 0x8036a9c +_zw_protocol_cmd_handlers 0x70 0x8036c70 +_zw_protocol_cmd_handlers_lr 0x30 0x8036ce0 +.ARM.exidx 0x8 0x8036d10 +.copy.table 0xc 0x8036d18 +.zero.table 0x0 0x8036d24 .stack 0x1000 0x20000000 -.data 0x4d8 0x20001000 -.bss 0xaad4 0x200014d8 -.heap 0x4050 0x2000bfb0 -.internal_storage 0x30000 0x8036f34 -.zwave_nvm 0x0 0x8066f34 -.nvm 0x8000 0x8066f34 +.data 0x4dc 0x20001000 +.bss 0xaadc 0x200014dc +.heap 0x4048 0x2000bfb8 +.internal_storage 0x30000 0x8036d24 +.zwave_nvm 0x0 0x8066d24 +.nvm 0x8000 0x8066d24 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6d4c 0x0 -.debug_info 0xc9598a 0x0 -.debug_abbrev 0x1667a 0x0 -.debug_loc 0x4696f 0x0 +.debug_frame 0x6da4 0x0 +.debug_info 0xc95e4f 0x0 +.debug_abbrev 0x1667e 0x0 +.debug_loc 0x46cf2 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb2c0 0x0 -.debug_line 0x542a4 0x0 -.debug_str 0x902a5 0x0 -Total 0xe61f2f +.debug_ranges 0xb2f8 0x0 +.debug_line 0x544c1 0x0 +.debug_str 0x903e6 0x0 +Total 0xe6295d The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 201740 + 201216 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 51116 + 51128 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_EU_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_EU_size.txt index 474e00b5c66..13aa31a3fe6 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_EU_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_EU_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30bd4 0x8006000 -_cc_handlers_v3 0x1d4 0x8036bd4 -_zw_protocol_cmd_handlers 0x70 0x8036da8 -_zw_protocol_cmd_handlers_lr 0x30 0x8036e18 -.ARM.exidx 0x8 0x8036e48 -.copy.table 0xc 0x8036e50 -.zero.table 0x0 0x8036e5c +.text 0x30df8 0x8006000 +_cc_handlers_v3 0x1d4 0x8036df8 +_zw_protocol_cmd_handlers 0x70 0x8036fcc +_zw_protocol_cmd_handlers_lr 0x30 0x803703c +.ARM.exidx 0x8 0x803706c +.copy.table 0xc 0x8037074 +.zero.table 0x0 0x8037080 .stack 0x1000 0x20000000 -.data 0x4d4 0x20001000 -.bss 0xaa54 0x200014d4 -.heap 0x340d8 0x2000bf28 -.internal_storage 0x30000 0x8036e5c -.zwave_nvm 0x0 0x8066e5c -.nvm 0x8000 0x8066e5c +.data 0x4d8 0x20001000 +.bss 0xaa54 0x200014d8 +.heap 0x340d0 0x2000bf30 +.internal_storage 0x30000 0x8037080 +.zwave_nvm 0x0 0x8067080 +.nvm 0x8000 0x8067080 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6cf4 0x0 -.debug_info 0xc9480f 0x0 -.debug_abbrev 0x1652a 0x0 -.debug_loc 0x46676 0x0 +.debug_frame 0x6d4c 0x0 +.debug_info 0xc94cd7 0x0 +.debug_abbrev 0x1652e 0x0 +.debug_loc 0x469f7 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb230 0x0 -.debug_line 0x53c6a 0x0 -.debug_str 0x9024d 0x0 -Total 0xe9011d +.debug_ranges 0xb260 0x0 +.debug_line 0x53e88 0x0 +.debug_str 0x9038e 0x0 +Total 0xe90f71 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 201520 + 202072 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50984 + 50988 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_US_LR_size.txt index 16cfa3aaffc..11bd3351e5c 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30bd4 0x8006000 -_cc_handlers_v3 0x1d4 0x8036bd4 -_zw_protocol_cmd_handlers 0x70 0x8036da8 -_zw_protocol_cmd_handlers_lr 0x30 0x8036e18 -.ARM.exidx 0x8 0x8036e48 -.copy.table 0xc 0x8036e50 -.zero.table 0x0 0x8036e5c +.text 0x30df8 0x8006000 +_cc_handlers_v3 0x1d4 0x8036df8 +_zw_protocol_cmd_handlers 0x70 0x8036fcc +_zw_protocol_cmd_handlers_lr 0x30 0x803703c +.ARM.exidx 0x8 0x803706c +.copy.table 0xc 0x8037074 +.zero.table 0x0 0x8037080 .stack 0x1000 0x20000000 -.data 0x4d4 0x20001000 -.bss 0xaa54 0x200014d4 -.heap 0x340d8 0x2000bf28 -.internal_storage 0x30000 0x8036e5c -.zwave_nvm 0x0 0x8066e5c -.nvm 0x8000 0x8066e5c +.data 0x4d8 0x20001000 +.bss 0xaa54 0x200014d8 +.heap 0x340d0 0x2000bf30 +.internal_storage 0x30000 0x8037080 +.zwave_nvm 0x0 0x8067080 +.nvm 0x8000 0x8067080 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6cf4 0x0 -.debug_info 0xc9480f 0x0 -.debug_abbrev 0x1652a 0x0 -.debug_loc 0x46676 0x0 +.debug_frame 0x6d4c 0x0 +.debug_info 0xc94cd7 0x0 +.debug_abbrev 0x1652e 0x0 +.debug_loc 0x469f7 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb230 0x0 -.debug_line 0x53c6a 0x0 -.debug_str 0x90243 0x0 -Total 0xe90113 +.debug_ranges 0xb260 0x0 +.debug_line 0x53e88 0x0 +.debug_str 0x90384 0x0 +Total 0xe90f67 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 201520 + 202072 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50984 + 50988 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_US_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_US_size.txt index 474e00b5c66..13aa31a3fe6 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_US_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4400B_REGION_US_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30bd4 0x8006000 -_cc_handlers_v3 0x1d4 0x8036bd4 -_zw_protocol_cmd_handlers 0x70 0x8036da8 -_zw_protocol_cmd_handlers_lr 0x30 0x8036e18 -.ARM.exidx 0x8 0x8036e48 -.copy.table 0xc 0x8036e50 -.zero.table 0x0 0x8036e5c +.text 0x30df8 0x8006000 +_cc_handlers_v3 0x1d4 0x8036df8 +_zw_protocol_cmd_handlers 0x70 0x8036fcc +_zw_protocol_cmd_handlers_lr 0x30 0x803703c +.ARM.exidx 0x8 0x803706c +.copy.table 0xc 0x8037074 +.zero.table 0x0 0x8037080 .stack 0x1000 0x20000000 -.data 0x4d4 0x20001000 -.bss 0xaa54 0x200014d4 -.heap 0x340d8 0x2000bf28 -.internal_storage 0x30000 0x8036e5c -.zwave_nvm 0x0 0x8066e5c -.nvm 0x8000 0x8066e5c +.data 0x4d8 0x20001000 +.bss 0xaa54 0x200014d8 +.heap 0x340d0 0x2000bf30 +.internal_storage 0x30000 0x8037080 +.zwave_nvm 0x0 0x8067080 +.nvm 0x8000 0x8067080 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6cf4 0x0 -.debug_info 0xc9480f 0x0 -.debug_abbrev 0x1652a 0x0 -.debug_loc 0x46676 0x0 +.debug_frame 0x6d4c 0x0 +.debug_info 0xc94cd7 0x0 +.debug_abbrev 0x1652e 0x0 +.debug_loc 0x469f7 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb230 0x0 -.debug_line 0x53c6a 0x0 -.debug_str 0x9024d 0x0 -Total 0xe9011d +.debug_ranges 0xb260 0x0 +.debug_line 0x53e88 0x0 +.debug_str 0x9038e 0x0 +Total 0xe90f71 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 201520 + 202072 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50984 + 50988 diff --git a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4401B_REGION_US_LR_size.txt b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4401B_REGION_US_LR_size.txt index b9c7c43f0d2..3c8d815f8c9 100644 --- a/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4401B_REGION_US_LR_size.txt +++ b/protocol/z-wave/Apps/bin/codesize/zwave_soc_wall_controller_BRD4401B_REGION_US_LR_size.txt @@ -5,38 +5,38 @@ The output of the size tool: (e.g. arm-none-ambi-size.exe) zwave_soc_wall_controller.out : section size addr -.text 0x30bd4 0x8006000 -_cc_handlers_v3 0x1d4 0x8036bd4 -_zw_protocol_cmd_handlers 0x70 0x8036da8 -_zw_protocol_cmd_handlers_lr 0x30 0x8036e18 -.ARM.exidx 0x8 0x8036e48 -.copy.table 0xc 0x8036e50 -.zero.table 0x0 0x8036e5c +.text 0x30df8 0x8006000 +_cc_handlers_v3 0x1d4 0x8036df8 +_zw_protocol_cmd_handlers 0x70 0x8036fcc +_zw_protocol_cmd_handlers_lr 0x30 0x803703c +.ARM.exidx 0x8 0x803706c +.copy.table 0xc 0x8037074 +.zero.table 0x0 0x8037080 .stack 0x1000 0x20000000 -.data 0x4d4 0x20001000 -.bss 0xaa54 0x200014d4 -.heap 0x340d8 0x2000bf28 -.internal_storage 0x30000 0x8036e5c -.zwave_nvm 0x0 0x8066e5c -.nvm 0x8000 0x8066e5c +.data 0x4d8 0x20001000 +.bss 0xaa54 0x200014d8 +.heap 0x340d0 0x2000bf30 +.internal_storage 0x30000 0x8037080 +.zwave_nvm 0x0 0x8067080 +.nvm 0x8000 0x8067080 .ARM.attributes 0x36 0x0 .comment 0x49 0x0 -.debug_frame 0x6cf4 0x0 -.debug_info 0xc94813 0x0 -.debug_abbrev 0x1652a 0x0 -.debug_loc 0x46676 0x0 +.debug_frame 0x6d4c 0x0 +.debug_info 0xc94cdb 0x0 +.debug_abbrev 0x1652e 0x0 +.debug_loc 0x469f7 0x0 .debug_aranges 0xb8 0x0 -.debug_ranges 0xb1f0 0x0 -.debug_line 0x53c58 0x0 -.debug_str 0x90243 0x0 -Total 0xe900c5 +.debug_ranges 0xb220 0x0 +.debug_line 0x53e76 0x0 +.debug_str 0x90384 0x0 +Total 0xe90f19 The calculated FLASH and SRAM usage summary: ============================================ FLASH used as program memory: (Including only the sections: .text, .ARM.exidx, .data, _cc_handlers_v3) - 201520 + 202072 FLASH used for storage: (Including only the sections: .zwavenvm, .simee, .nvm, .zwave_nvm) 32768 SRAM usage: (Including only the sections: .data, .bss, .heap (limited to 2048 per sl_memory_config.h), .stack_dummy, .reset_info) - 50984 + 50988 diff --git a/protocol/z-wave/Apps/bin/demos.xml b/protocol/z-wave/Apps/bin/demos.xml index eae3fa52716..69be5ec479f 100644 --- a/protocol/z-wave/Apps/bin/demos.xml +++ b/protocol/z-wave/Apps/bin/demos.xml @@ -7,7 +7,7 @@ - + ota Bootloader for BRD4200A board @@ -16,7 +16,7 @@ - + ota Bootloader for BRD4201C board @@ -25,7 +25,7 @@ - + ota Bootloader for BRD4201D board @@ -34,7 +34,7 @@ - + ota Bootloader for BRD4202A board @@ -43,7 +43,7 @@ - + ota Bootloader for BRD4204A board @@ -52,7 +52,7 @@ - + ota Bootloader for BRD4204B board @@ -61,7 +61,7 @@ - + ota Bootloader for BRD4204C board @@ -70,7 +70,7 @@ - + ota Bootloader for BRD4204D board @@ -79,7 +79,7 @@ - + ota Bootloader for BRD4205A board @@ -88,7 +88,7 @@ - + ota Bootloader for BRD4205B board @@ -97,7 +97,7 @@ - + ota Bootloader for BRD4207A board @@ -106,7 +106,7 @@ - + ota Bootloader for BRD4209A board @@ -115,7 +115,7 @@ - + ota Bootloader for BRD4210A board @@ -124,7 +124,7 @@ - + otw Bootloader for BRD2603A board @@ -133,7 +133,7 @@ - + otw Bootloader for BRD4200A board @@ -142,7 +142,7 @@ - + otw Bootloader for BRD4201A board @@ -151,7 +151,7 @@ - + otw Bootloader for BRD4202A board @@ -160,7 +160,7 @@ - + otw Bootloader for BRD4204A board @@ -169,7 +169,7 @@ - + otw Bootloader for BRD4204B board @@ -178,7 +178,7 @@ - + otw Bootloader for BRD4204C board @@ -187,7 +187,7 @@ - + otw Bootloader for BRD4204D board @@ -196,7 +196,7 @@ - + otw Bootloader for BRD4205A board @@ -205,7 +205,7 @@ - + otw Bootloader for BRD4205B board @@ -214,7 +214,7 @@ - + otw Bootloader for BRD4206A board @@ -223,7 +223,7 @@ - + otw Bootloader for BRD4207A board @@ -232,7 +232,7 @@ - + otw Bootloader for BRD4208A board @@ -241,7 +241,7 @@ - + otw Bootloader for BRD4209A board @@ -250,7 +250,7 @@ - + otw Bootloader for BRD4210A board @@ -259,6 +259,6 @@ - + diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD2603A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD2603A.gbl index 740f0f6ed77..d5329f0f38a 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD2603A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD2603A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1ba1bd6adfd5127d493c37b31293a57cd83ff02ab61b6e097957f8bdb5475ac -size 130936 +oid sha256:ce2cad3e556cae1d85628f5d9bd4020454f80aec795abd1323179185c89c3981 +size 130376 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD2603A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD2603A_v255.gbl index e0b351e3c2b..29149c81461 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD2603A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD2603A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc5230121068094875c03991f108f71d47a935d0569107819b16044389b4f9ae -size 130928 +oid sha256:0cbd47ab1dfa30ec91bd82b235f5349c7a7829532704f5163056357473eb83ce +size 130372 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4201A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4201A.gbl index 3395ba673f8..6d2eee21558 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4201A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4201A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa20f5d20404d4eeabded73556f5dc417d259416a5e07d15b70aa50f2837c1bf -size 161608 +oid sha256:ae82a6f7c896691055204a998bad12a277f5c174e379bedf3407d9596ded86db +size 161624 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4201A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4201A_v255.gbl index 125f13d7fae..1872f02c0d4 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4201A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4201A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8da76b375438a398ca3fd206d2b06c5e8ac1a8eaf49e38bbc4d6615cff256da7 -size 161604 +oid sha256:30d172b744e384d8340ebaa2966082e1f015a980454bb57a4e342d36c327f4ce +size 161620 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4202A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4202A.gbl index b74973a8fdb..43f979c2ff1 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4202A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4202A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f9e08e0fd58cb555f7b50ac7aaff5f022ea6d47c1b3610d385164f6a6ebea36 -size 163548 +oid sha256:4c9e78a0dd346b09a014d5ffc9c43a53c77a2bab22bd49da859febfed9eae831 +size 163732 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4202A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4202A_v255.gbl index cbd72b7de9e..caca1b48d8e 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4202A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4202A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bfbef0b6ca6193a460a9b39e954868b39f43d015019468a1108fb76a242096ad -size 163548 +oid sha256:2511c10cb842b672248174b1cd6c5a02215328ab748cadae2c0063e63b226e34 +size 163732 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204C.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204C.gbl index a3c4a6a45cc..89bf186d7d2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204C.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204C.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d47942d09cf2960ee9dda263a31d37603ad89825eb7f620cd4b5e65209af932f -size 130224 +oid sha256:ce3523976c4c4c7180a2aae09784e3429d7e52f8ee62e59298efb7ce01e8cde7 +size 129684 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204C_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204C_v255.gbl index dd2c8ba703a..76a070c827a 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204C_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204C_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f99c5dd35c9c33a7b6bb837d0112e824307792efe6e057de19737e5b218bd12 -size 130228 +oid sha256:ea400d3c8caab55b199fc027e3ef93e3595b4dcec309e2320416193766b1c32a +size 129684 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204D.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204D.gbl index 91b860038d6..939d7e8f68e 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204D.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204D.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ff9700dff7f959c44abc90f6389658e8a8aa1846f12f9c95e688dbaf5da1896 -size 130240 +oid sha256:21ed12b1d14c0d3f227a8005c28c287c358237df8c7af2816c7eba18e50a5bea +size 129728 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204D_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204D_v255.gbl index 33d25a72e53..527637deb39 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204D_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4204D_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed240c680a9c40464bff5fa4283edb5390d5849bd268553e28b00bfeca71e9da -size 130244 +oid sha256:7ccc3bda0fca22ac2616f9c9095f40e3d8c254d331659059846349ba118fd801 +size 129736 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205A.gbl index 3acf7ea9c33..2fd53582e8d 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce31dd60c0658d82ab68141fe20fdc4d618cf631908d399265c4fb1f4dbb68cb -size 131068 +oid sha256:3766042004e39d28238a1c993d8170670c723026f5cbc55600471afbc58b7396 +size 130552 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205A_v255.gbl index e48274427e7..95067c01169 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7ff1d0bf4ddd35226a804b46b8dc7ebfcd3b2b26ae55c245013b6607d4ab020 -size 131068 +oid sha256:cccbc1910ef7d8308d6f83a2d500b2519758010c1e41de4ae6c463bec98c38ce +size 130556 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205B.gbl index 1d4c125a439..f49234b4f39 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1697d39222e5af1c9d808a05ea7a54ef4fd4fa2d4abafdd7875d58efa983be9e -size 131048 +oid sha256:37dae0b7206cfcc70a5b0ff0c6662fbce9589aa5ddb642c594849bc8c285fa3c +size 130556 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205B_v255.gbl index 7c507c305e1..8b5e6bd88a7 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4205B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1fbfa4e0c405dc5e45631548e3ae982119f5d4bfeb190e6a9c3c0afb1da6eac -size 131048 +oid sha256:3f83854f17beeb3aa5251c9ad5e5ff803e8f2c2c04b321e55d5681f32dab6874 +size 130552 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4206A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4206A.gbl index 5694677ffe2..53b18821704 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4206A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4206A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e28b4096234421d0bc01ad1a74a7f045c694ae5e8f8fa3aec9bddbd9881d867 -size 161576 +oid sha256:001246e36b11185c2acf9d89823f21773fa8e058033adec44aa88c01fcb2c387 +size 161384 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4206A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4206A_v255.gbl index 47e723c1acf..3534056bfde 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4206A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4206A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3366dee6bdcd54b6f4a7dd8c439c81bfb941267d9cfe5c210bf0c0c06881e66c -size 161572 +oid sha256:d85bfc934709bba4c29a45860813489f7a357a4e3ef0b3db80ac5a0daf0985b7 +size 161380 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4207A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4207A.gbl index 1c4de8e34bf..c50e510875e 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4207A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4207A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0c06daf266fd0b2ab8cc24065bb24f051248f42629ce87446282cbaaff7a6a6 -size 163548 +oid sha256:58b321c65521cb0aa024151c562f3f6ccafc10c25fda6e744ea8ed91ef6f6efc +size 163732 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4207A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4207A_v255.gbl index 543294f8927..b6977d0e552 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4207A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4207A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba06540755fa0c28ec5b1395a689633500e6958013718b8a0fcfd8ef8370af98 -size 163548 +oid sha256:47e4abd6e47e5596aa56ed8c13d9189a6c31318147ba965f181440203a4df187 +size 163732 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4208A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4208A.gbl index 207f91b3b68..1aa96eaa584 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4208A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4208A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14186d4c021c5e4e204e9d36742b92b412bbf08d4c8d6278f187783d16c51629 -size 161572 +oid sha256:63d7ceb87ea5f0fb9e89e7ec39301c701fc02e83271f3d364706958e637b0bab +size 161376 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4208A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4208A_v255.gbl index 7c1e09365dd..e3c2f1d2ee2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4208A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4208A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8630e8591273ee32ba26435e9f0057fecfdde55b8f17be51e7a22bd012b08cc2 -size 161568 +oid sha256:912be3b8667268fc7f4920b3d03572887666f0b9e5bc684273a33b9f8168e3ff +size 161372 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4210A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4210A.gbl index 738d5b4fada..7e823c17e5c 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4210A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4210A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9bfb4a97b7b166cc9851a82f2adf1606c6f8784630fec40e5814bc89ef73a18 -size 130240 +oid sha256:036021cbe10db43a9d85eeb6d83477de4cd75a56aff229a783b863d3e899b8c2 +size 129724 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4210A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4210A_v255.gbl index 99cb51f19d9..54f976468c6 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4210A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4210A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49ec3990ab974ea425b905eabc0e8d4c663cdc270b7f9cb2d382efc61712c255 -size 130240 +oid sha256:a57331715acf4cdf3cd87bf385bcb1d1b0d93476480b3669e52b405b85c208b5 +size 129728 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4400B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4400B.gbl index 8132b31ffa4..eb5d80f5a6e 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4400B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4400B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae40783cde1af2114348559644276e4fa3ad55a73a25351f852414c40751f189 -size 130048 +oid sha256:4cec351293ddc0151f1e6ebc086a1be0ef374aed2cdda12cc793b9110c2692b6 +size 130280 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4400B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4400B_v255.gbl index 6637659c245..dd5a151f51d 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4400B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4400B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a080e0f1244fa372d8b5feae82c2f661ffd5593623db5d1b9617e8b47c14b03d -size 130048 +oid sha256:7d5c5227248b2c3a79bce4455393c7ab6f70a67bd681431374c581e3ffbd4fd4 +size 130272 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4401B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4401B.gbl index 656650a3418..78917b4b41d 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4401B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4401B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f9a04540c8d9e0d17c6a6d96a1072cb514bf41e493dfbb3510c09b754ed924d -size 130052 +oid sha256:0700fe5610908d95b7a8f661c3c50e865226a1d3466ac5578112e9eaeaa7faa3 +size 130288 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4401B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4401B_v255.gbl index 8becd542b05..8c7ceac4727 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4401B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_controller_BRD4401B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9abcc40230266fa15f7be39b0c886c34e724d263d309ae4f9db726f3044d7188 -size 130040 +oid sha256:b8b6ac18901a69d1e0ea99d2cf0db268accf5175987909f3020079248546e015 +size 130284 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4202A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4202A.gbl index 00b7f3695cc..8316e164cc3 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4202A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4202A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca4479c05cc70ceabef6911985a59254f9543ef68bb44eb0f40dfdaa83cadca5 -size 153144 +oid sha256:094770cf56e542baa316ec985ebedc5e2d3125f203285e26a86be965760995bd +size 153600 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4202A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4202A_v255.gbl index 958fbe66238..4dda365c167 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4202A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4202A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6939b00f80768bd1bf572f57ec9f75e404381225e494275ce609e4f9050145e1 -size 153144 +oid sha256:919c03ef8da97389d925bf562c9c3bbb7518d2d9c7882a13c2d77331b7b24497 +size 153596 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204C.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204C.gbl index 30d28a870d0..2f97b9126d8 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204C.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204C.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e1d048ea22879002ceded44450f73aef98207173dc529e5ec8840e3fa339e7e -size 129344 +oid sha256:c7d576bda2296f048e24801f226a26e75c7643fadeb22aafa806de5d58b63d62 +size 128944 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204C_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204C_v255.gbl index 2565340a3eb..b753e66433b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204C_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204C_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9a78fe5037d8569471a83ffe19485b1d710187b3fcf6d491c670aa20e7a80e7 -size 129344 +oid sha256:abe243ac70cd9e0c345763069f3ef282f03a9f67b474a31633c66f3e31644d67 +size 128948 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204D.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204D.gbl index 2ccb2bd2e75..cb19c1ec72c 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204D.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204D.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd94ead948ed98aa4e59a9183a24a1d2150c54181ff75dcad8392120d79e34ca -size 129400 +oid sha256:6922b7c0be7ddab1b55a841ee675fce3fd358713e39e7084b254fec796e31328 +size 129000 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204D_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204D_v255.gbl index a1d8e3839f2..bc901ee486e 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204D_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4204D_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f610c07a831a6b25a3dc849ff11d786e30c5f2c99a42fb25da03c1e2ed741b47 -size 129396 +oid sha256:73d36ad116f0a8db64f4704a952ab04125b3427fc0d9752cbb14dabdeb86f86c +size 128992 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205A.gbl index 4fb262eb9be..86d93bf445a 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55d85463bb14f536decf23f14e0cd891e363ec31168724734802a08998e18325 -size 128600 +oid sha256:0563c3f1c9a7f6f9095a46c26cfd8d753c1847ab2ea87c9f993138981bc26854 +size 128208 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205A_v255.gbl index 4a8317ade21..69c107c230b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6cab5861418d1a4217dd63da77a23712dacc4b2b90c220379a269be3ef954d45 -size 128604 +oid sha256:3f73e0b7650f114b2d4b903dda73d6f22089cf8e42f60eba62501c62108c0dd8 +size 128208 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205B.gbl index 86245351f2e..b9e658062e1 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:469054824e25b010e214e78a6a048be6b1c384ce7f75a8ec08d25a2752c20bb3 -size 130208 +oid sha256:798a4f8548e094d43ac6e7cc76638b29d36f751ce89c960d4d2cd92410bdab0f +size 129816 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205B_v255.gbl index 5d898b4eda1..ee21342dd82 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4205B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8324e626d0ab8137667cfab65766e3fe90f2eca395b9d29e21fc4ce06717b9d0 -size 130208 +oid sha256:f8ac5fc4824f7ba2a3f93a3aa4bd826dbc2b88e03aad9d9f9eebdf2d808b677a +size 129808 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4207A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4207A.gbl index cc6a7427afe..3719160b47a 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4207A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4207A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c4a12897c11def164aac661c237443a4bcc98a2c59a213c2fbe747cce918fde -size 153144 +oid sha256:7a3a5a334dc6502239170d6251ea5cd49748b0e0e7030423da3beba462d5dd58 +size 153600 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4207A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4207A_v255.gbl index a0562e028d8..bda94435088 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4207A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4207A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1447a5c66e7998c8ea3d324ef67d4efecca5c23a9f2afbf261f61ec1c95a724 -size 153144 +oid sha256:f14168195c1c94eee0d590078bde53d8ad94a9285f7434be378c9f59cfd5c8d2 +size 153596 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4209A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4209A.gbl index 4d4657652d6..a9dde3dc4bb 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4209A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4209A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c9551ffc4b0b155685d63c95c5aaee610eb7ee63d1ed66c0599a0a1863690e5 -size 152592 +oid sha256:2ed8d37c5f7ac6aed2b81a04bfb0045d80737ad2ebd3c5a8284494845d0a65d1 +size 153076 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4209A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4209A_v255.gbl index 3e6f81c4303..e525d4dc3da 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4209A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4209A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06c85d5cbea483abf6f1d55328be024367655f4989030afc2b64698ed0be3d60 -size 152584 +oid sha256:5a3de7e213b6010864d120ca05396ec0e3564d0691d669ba126b32a41039cf75 +size 153076 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4210A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4210A.gbl index 7b4e7cef6ed..65bcf822816 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4210A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4210A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:523b81b42117520147756234e0b238565b2af6cf98c13e69c9fca57b78d57b21 -size 129412 +oid sha256:722f7335943647ddb8d17507ffa7b0f9fca92855a67afaecbeef66f3caade8aa +size 128980 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4210A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4210A_v255.gbl index b9f6deaf301..d84bde64833 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4210A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4210A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6192c52079c5b9bfc61729e33fc5f3f7ff4561286e0f3e052dbe0dbc602e97f -size 129400 +oid sha256:3a817da25b1b3cfbba42ad2df0e1b582c9b66b4c12579f81b77a44a239185937 +size 128984 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4400B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4400B.gbl index 0d10418d14a..623e511845b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4400B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4400B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6d6d5a2470d0a372f020424eaa4c77c57badab21e28c59889cdfa29e0b96a84 -size 129044 +oid sha256:e16850819bd98fcd8fc5e9d6a583ed55779a3349ebb8dbe9edb59593d4240c20 +size 129512 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4400B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4400B_v255.gbl index f6ef94e8600..8c602a6d74e 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4400B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4400B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4d75db5b5ba79b86cebb7fd0f0bbd8b10f20393a5225c4c331e2f861e754fe3 -size 129048 +oid sha256:03704e8e7f2e359cb049ec74b21ed67206447e922d87a72ccb225c72cf173328 +size 129512 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4401B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4401B.gbl index 8fa4f1a02e3..03fece073d8 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4401B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4401B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b30c8eb74c7adf44fb8b37b6a9c9aecd6eb2edcfd640d5e055168f51fcaaca01 -size 129060 +oid sha256:c029313a4efe5453660bb9aab2342b575a8b4e60234a78f71cb8a2d896736688 +size 129528 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4401B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4401B_v255.gbl index 83d241e8b28..548a88f4cae 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4401B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_serial_api_end_device_BRD4401B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:298911ee756455a240d195e52cf318553cd1714c179b8bac661159ef75052a97 -size 129060 +oid sha256:d097a3ea2c858239eb20268f45bb1037e1c5330553c04166eccb6a1b502ae470 +size 129524 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4202A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4202A.gbl index 9f31dd53155..b7ea54df3e8 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4202A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4202A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:439574188531b21ea06fd508907c5df5425bebaff96f99219eba2062be6e7470 -size 151872 +oid sha256:b4314f3a4a6471674d3d57582d4e49025da786a1f5427ab5943683654d4abc73 +size 152060 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4202A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4202A_v255.gbl index 2405d4b6ab3..f9807635ae0 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4202A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4202A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:022b0ac903cbebd7fd452aae92877bdf37f07e485fff4b79c6c5558471776a14 -size 151868 +oid sha256:ae1331482df696994585c320d3c1bcd95535aa56512a28746513051c3e0e879d +size 152056 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204C.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204C.gbl index 9b014dff08d..0075a082645 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204C.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204C.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db96c49758aa0906d17568a980e484f3fbd96cfbc639bc175d643d8320466a4b -size 128808 +oid sha256:9165824298f551b79f6e5a8465c450f8e359fbf48e7647fe07587333f6e72b55 +size 128404 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204C_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204C_v255.gbl index 0651f12a86e..08956ff1f0d 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204C_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204C_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6c93e5e65069ac6279a90b3f5732dfc431a69df9924446cf3113e1316e3d22d -size 128792 +oid sha256:87328ca0cebe9917108a19f3dc887deeac002c787d56eb096980a2ebe56c73fd +size 128412 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204D.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204D.gbl index ee17d4aac37..51d95b8acd6 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204D.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204D.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3fb9e51a7e8aa0e3c2c058042efc5e67d5531880550c62c18232b21157bc3d9a -size 128844 +oid sha256:1f25cdbb054d5919d9b9c1a4f320678088e79382ae0fdce57e46fbe8916835fb +size 128464 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204D_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204D_v255.gbl index 16f77bec1d0..71b9fe76b57 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204D_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4204D_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:731d62db63bbc6a872d6f4cbe939abbd4ffbfd2a528a5729616da84e113a4d0a -size 128836 +oid sha256:1ed0818a397d999566d64d80e91329ea8709a251384a97254d3d343fdda0e22b +size 128468 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205A.gbl index 81410721221..d0217911ab2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5e4c26aedfa3a06a7a707d5457517397a3e1f0bd0404cef87656f7fc96426d4 -size 128420 +oid sha256:73844fc7c229123048484020100de584161f9016fcf3511831445ffc1542b51a +size 127920 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205A_v255.gbl index 37a4f710abc..a1a39f9204f 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6d7469dcdb7f1816c74bb13db0423518d62508459fce74897d2f1c5f5070616 -size 128420 +oid sha256:e57e447d1b1f7939468b3e390ec8ea451f9c547f2c89361d704bd339cd27549f +size 127924 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205B.gbl index b39e71cb085..73ff384b2ab 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:448eb273c79176d62a3c83c194c51515325206c6279efcc43d5a94f5c36a53e4 -size 129692 +oid sha256:2d708c863f7b1aaee4975d4c77c651706b5f9bf32159366b2e6f763a49c29434 +size 129268 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205B_v255.gbl index 676bb5fb129..a40b47bb0a2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4205B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:212f5fc897182406aa6d884450c065ce266578115ce62ff5aa0ceee124d2f099 -size 129700 +oid sha256:7f8fc9980f4f6da54e6de366799d6a72e444c90396aedd54e330329ab5cd1660 +size 129268 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4207A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4207A.gbl index 64210f07a64..ca47355d87b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4207A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4207A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2cd4d019a4645b99c959d9f4e7e23b432adf71e72d4ff238599e43fb64cc5c61 -size 151872 +oid sha256:c46676cedcc82cc82f2d9415b7d839999ba73661aa36ab4063255459202430c7 +size 152060 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4207A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4207A_v255.gbl index 44304c11e99..746a1208439 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4207A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4207A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:501dfa46ad25cc0f2701d0b829214a29dcfc425a8c0b2a2226c45b3c84b0f6a6 -size 151868 +oid sha256:9a2a3404ab7aa17515a214eb7e920c8a5831f0b282409a5a5e9d37843cb5fcbf +size 152056 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4209A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4209A.gbl index 1869fc740fc..a3bfa029e2f 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4209A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4209A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ceaf8772fcb72862217e84c0c3f09cb6bff0161190ec2905364d74d0bfe8ba46 -size 151488 +oid sha256:a93864a0b7715460a67cbb31286bbb1d41e0dd566674d8189ad940b062ca0b6d +size 151656 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4209A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4209A_v255.gbl index af309b16632..04ff4ab014c 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4209A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4209A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebd83b4f740c8f20d132c6bcd443a7b94341be30ce3d4e0006d58e4e8bf77d21 -size 151484 +oid sha256:47e1e01af00b34cb12610fdb915e5efabc9a362fefcb26bf41749d9883ab2cde +size 151652 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4210A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4210A.gbl index 3f2b74e212c..890fd4b421b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4210A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4210A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:675c039404421baf8b0d8a214476a6d6bb6e1f4d2c337b4a9000d4401c1010cd -size 128872 +oid sha256:ee47113983b39ddf2d9f5df7f1ba0d5befb016f169bd3adc8fc43653a80779a1 +size 128444 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4210A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4210A_v255.gbl index 06a6fa818ee..10189908c2b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4210A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4210A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70968029765d5fc255ec5e0e4398e872ea524dc1c92d57fcbef0494374ad692b -size 128872 +oid sha256:1304c0acdcf9fb0ba09951e57a36a8a8ed1f3e32be23a362cadaa60c81797e45 +size 128444 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4400B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4400B.gbl index 41ea0eb7ad2..a38e88a3e24 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4400B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4400B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fac796495210c534cec439f8065d7ee54775c225e0386f66b505da4c90fdf051 -size 128500 +oid sha256:125669de3e9552af71606aea0bb3cfeeaa7a4b2cd889ae11ea562ae517ea05ac +size 128988 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4400B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4400B_v255.gbl index 0e4fc974635..9ba0cea682b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4400B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4400B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f16bf9071adb0ac46c44bf142665186dba12fffbbb0e169bad48e90e530418c -size 128492 +oid sha256:4920ff863d9a09557fd9a21da3476c807d5dba788ee4c7b598d8efd1a180d4e9 +size 128984 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4401B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4401B.gbl index f24f947ead8..eda7a8a2244 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4401B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4401B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:022f27d2b3074c52ae73809c0ed2ee3ed4f983f11d169035b6538b6053dd1af4 -size 128496 +oid sha256:0c65d28b6fd73f9dc7689f008ec988c2f59cc77f0cbe90cfee26ac66f9e79f63 +size 128992 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4401B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4401B_v255.gbl index e0a694a42de..c43f32b19ae 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4401B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_ncp_zniffer_pti_BRD4401B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e03d5d26147f97a077c4f84e8a614eb81974a4058513d0aee750e29eee156a9e -size 128496 +oid sha256:501be2ad0105946f6e37220497092d988815af76dcd51580892e7b4d0ff092d8 +size 128984 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4202A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4202A.gbl index 69695e47d3a..f4586947929 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4202A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4202A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8119b2789b623b2ef2551ff4802d3efc9b7e3956d20a7ecad428de1bf4776147 -size 162936 +oid sha256:71cf0bbdbea1b4562c938707052ebbb2a0e3d9b62459288eddadd6744cd038f6 +size 163284 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4202A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4202A_v255.gbl index 7f3d441beb4..4d9e1905289 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4202A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4202A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f5b9d1f9b4a111bc02aff8cb7745c2ee966fe9ccdaf20337320e38768779889e -size 162936 +oid sha256:d7c9383d0f69919191c5760882764e098263ac65eabc2c90f48e3ecda99baace +size 163288 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204C.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204C.gbl index c08f70d9a2d..1a4de2f68a5 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204C.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204C.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ad72ccee41efff9b7049bb6e18792863864b4eb3844e82487b533a5a7b8efc1 -size 138000 +oid sha256:9df909aed694a358844911fcad7b6f88104e3fc4a0616e680530c5e0dc3b635e +size 137536 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204C_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204C_v255.gbl index 449168b6c50..f7873cdd590 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204C_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204C_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef84fdbe7b64e9656ec6c81b40cb41bb24e18b9eb48a8dcd01d3f8149323b98e -size 137984 +oid sha256:591914e81db0b90bd6335999a7dbb08d5a4fe396abc27fcf07a871ad00bc51f6 +size 137528 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204D.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204D.gbl index 759af81bfd9..4864bc8354b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204D.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204D.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:621b75ffac6701415f51e28f97ce7d0363d475d605e9bdb906dd23bad32217f4 -size 138028 +oid sha256:2b085d8f75fe2f68d1776b1e6a857db8f94603bd5b0a211c846ff80c6a2c6605 +size 137612 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204D_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204D_v255.gbl index 2c3a992f8c7..a6514a6f278 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204D_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4204D_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5edbb65fbfa4ff1a1dd793857b89226db870694f5171f44af41348ab91bdb62a -size 138028 +oid sha256:833224c15ec94561179f92d80b6253c3c85361a76609233a47766b6636417dcf +size 137604 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205A.gbl index fb1e38743b6..7191e9c6dac 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f35d7e58ece12ae29f47d291348d28a94287e2ce3dadd3d112b1b64abad010ca -size 137316 +oid sha256:3d2dc57ce19940a4399f1c636c0605167f003be9205c609ed6fa78a2bf409262 +size 136956 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205A_v255.gbl index 7d3537f5c85..16ebd7717a6 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8719331b29883ab8c97b844e87b6f0a79a77a1eda26779f8f3319a4b4943709 -size 137316 +oid sha256:f5ca62b0805e0165efbe88c4d5b512c9bf557c954b80bcc403d936730c08a589 +size 136956 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205B.gbl index ed6da402ba1..368709c6ead 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62a970e6453ea9407590d2340bbab4e8517fb166719a3d1627c19980699463a0 -size 138840 +oid sha256:d14ee2066a1884187b94df1c1f3e858b225af07c418b0009aa0e7704c75f864a +size 138432 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205B_v255.gbl index 2dc07edbfae..b55e86b437c 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4205B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2befc14b6fa135eef489442c1da73566e1c80dfb3423fbdf9cc248269bdae57e -size 138852 +oid sha256:2dd0bbdea39facbba3ec05d734cfccbbe079fb1d3a62f4db7549a0cae2b4091a +size 138436 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4207A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4207A.gbl index 37889b6d3d7..3ed2c34f9bd 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4207A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4207A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb8c5864429ada974e1c080b0570b8265644e42df259fd88834da76062c1ca43 -size 162936 +oid sha256:bf433437f1e85dde31371a1b0cad836f25f512a41be0c628738e002e18aaf32e +size 163284 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4207A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4207A_v255.gbl index 3b9326653e2..c161e6cf6a1 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4207A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4207A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9dfa75e29f2f9c3178cfaf3de7d8013219f4ac9f95eaa282429751b0b4f6b143 -size 162936 +oid sha256:7bb4b7d5a159892ccd88d15e02bb9e0fea95656bd59f948411c29fc3db8c84e8 +size 163288 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4209A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4209A.gbl index c2d5347179a..3ae0181c4d1 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4209A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4209A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cfb13cd56adbba717528eab7dc4277758802834984ad1548cdd421b72f47d5f1 -size 162476 +oid sha256:85e3c260f217b257e2265dcb96c710da08174d55c86f452874c8c3d0d6026f75 +size 162944 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4209A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4209A_v255.gbl index 67cb09f3543..b14821c6cf1 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4209A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4209A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2862026b3f43a0d73a1bc673d00bf0c382d306b44de16c0932ef53b89a4a97a1 -size 162468 +oid sha256:65a4867943e1e3cf68e07b1631dc0a8f59c72b78ab4435efd2c59c02198f075a +size 162944 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4210A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4210A.gbl index b0b15105acb..66fbce24909 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4210A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4210A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd3662c25015e573f906427af352149d4997860d4ae09442be9952f874759107 -size 138036 +oid sha256:ac4b81180e58cb741b7dd059ecd4d73f8363c20d18f26a0885588854c1458649 +size 137564 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4210A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4210A_v255.gbl index 2e198384b10..0bc0f57d05a 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4210A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4210A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b77aaec4f141e8676c9d987aa82ee528dbd5ae3d8bf5170ac2987d3dabf4bf4e -size 138036 +oid sha256:1133661b1556da344526476b35725394395c26c588bc8bdcc46ae395614d456f +size 137564 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4400B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4400B.gbl index 48a825f78a7..fb884461b21 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4400B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4400B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2240d5cf18efe685c6914a3b3696362d4f3b78d10c242d4ed48cb89b30c44618 -size 137756 +oid sha256:c3ef8869a73df1c2afeac5e34c14ddc1369e545ce1601cf678acf7b0b2070e86 +size 138156 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4400B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4400B_v255.gbl index ad680ddb666..96ca3d9c828 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4400B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4400B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:025eba0ed41feb447d9b3ecbb2c7622db1e632084d0a74337642015fef39e8c3 -size 137756 +oid sha256:73b0aacdbfb710d2961da17aaf81ed97ffc708558b7b3595d96d929f2ab74492 +size 138152 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4401B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4401B.gbl index fcc0873491d..45323e257f2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4401B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4401B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12be4abbc005b7054cbeca7417f0e92a7ddccdd6e0a7d286df715745f9929661 -size 137748 +oid sha256:d397b701eff4f12311a07772e0f15b30921b6c38359e49623ec3a50d91717c0d +size 138172 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4401B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4401B_v255.gbl index 8cc1ad79967..d95f5b82713 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4401B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_door_lock_keypad_BRD4401B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:494dc9824458672461e621d5789be328d1a9787ecb2e8ddd7e5aec9ddc5776df -size 137740 +oid sha256:4b35e4f67e0b1da9f14f6d470e1b0bbefce09bec8834151991b76fef6f203e14 +size 138180 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4202A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4202A.gbl index 24fa983a985..e389125b0c2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4202A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4202A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f1a70db29046d5f59d5812125f3c34408c1e1e9ca64377538dbe6fbfb4f4896 -size 201240 +oid sha256:d4b6853e245f863e6d6a426d12c2e35867d58ab7bbd7a8b18712256c4f409bb8 +size 201208 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4202A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4202A_v255.gbl index e9d26f10468..0701bc74a32 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4202A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4202A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae222fdc7e4d7e305160f8f64c3ede02454796873138c648f63a2b7a67b9d02b -size 201240 +oid sha256:5f8a685a3c9a9578f081344f51540327e7330f26932e8d413cf7cfe9109bb937 +size 201204 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205A.gbl index a5bb28cdc14..fb28c0d1733 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7dd45035dcedf72b71b6d01f35f3af94d415a9bc0e5abf71af801160d692ad7 -size 166120 +oid sha256:7e55775af85334c8df530e57de39dca5d180db93ff277ce9454985c5d1b5f7da +size 165484 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205A_v255.gbl index acbfe0c1383..5a9b2b1ed4f 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92e4808a57b7933d48ea3bd545260bb38211713eafb7bcf52e77056355fc9ff1 -size 166116 +oid sha256:81d9b8ae84a787eba3fb0a1c48e46386c1db4df5223505d8fb47b15a57057506 +size 165484 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205B.gbl index ec885149c17..4e9e6d3c566 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce792f913aa63d3f82df5a454c684214e2e2332f1a14ccde300c89230f7785b2 -size 168244 +oid sha256:f4337799158d69fe579c9c63c660a0bf350477879533557754994430c68db759 +size 167656 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205B_v255.gbl index b0824e2dac4..928d20662e3 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4205B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3cc2fd28a52e6c63b1a0935cc969b0557a7a8e4dc94283d1e0b295a1ef7b65c9 -size 168244 +oid sha256:3567abebb49be87712f07e9661b5266f2b4069dc1f5388a8b68cbced0970eae9 +size 167656 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4207A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4207A.gbl index eed1b23e8f4..116806ef277 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4207A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4207A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42d1ebd17a7068323978299196f1f787ce988188ba400298cceaf43b8d79530e -size 201240 +oid sha256:76a0225093919dca027aa156af0524e8d414da395d1269b5dec01cac72e27c57 +size 201208 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4207A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4207A_v255.gbl index 1716e09260c..73bf19462bd 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4207A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4207A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c1621b13831adc6c51b3315b8fe319c6df7571d679f6c1471714fbe12421862 -size 201240 +oid sha256:eb5181897e6793c08d56951461946decf354f09c6bb2b38f9a44a04d7277a6b7 +size 201204 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4210A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4210A.gbl index a9c13e1fcf9..629f4b9e5d5 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4210A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4210A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:526aa327c0fad3ac2fae54b7a99e6b765e2279ea7980d9c10e5eca6d7638760d -size 167416 +oid sha256:09e081f02bbe34cb16122e1ce336c148580388aa3dea8e6359d6d5e93629b5b3 +size 166788 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4210A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4210A_v255.gbl index 84840da651b..491aea1c6c3 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4210A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_key_fob_BRD4210A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcc0e52786e5dfddb90d1c6851dfc77595e5df0310580478f4dcc8a10160f764 -size 167416 +oid sha256:15dc8a6b91057dbb12b23e53aff1121d7d55129c91810b5801014cad16721b34 +size 166780 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4202A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4202A.gbl index 54a863b8454..f1c78f6c8fb 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4202A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4202A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e971623454e44d4c2618be255cd2c807ed276e6977e1b76d6cbd7b256b96d306 -size 163344 +oid sha256:f3169183c0b09e573980de6f6f31d0e4f290a07062ec8f0913850bbe28c73174 +size 163552 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4202A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4202A_v255.gbl index 1c03808a571..4f778acefac 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4202A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4202A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:343802b8e070776fc91f17629c4768afa0b595c407638fa8c18e2cd4e2df629e -size 163344 +oid sha256:4ea97d5bcc285445e2ae26f104e32dd2a5982b5353a25e1645fa6ef132bab3b7 +size 163556 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205A.gbl index deb877375cb..257e2de86e1 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c47557cc1756595954bedf480772807c818d4bc117ef5cbe1e07b891185b6abb -size 137072 +oid sha256:fc44412fe264c17317a2753c5f6f9e8802f6e456dc64f7e429fec739558d74a1 +size 136660 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205A_v255.gbl index 2e322b29018..fb83a981dee 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67977f929f2c37149c49485039c7b71f31c02ad95e676dc15b6d7dbae1cd83ed -size 137076 +oid sha256:d9e54d274c9fab72291df559bc62b312a70590964c3da25146eec6db85f7ccc7 +size 136660 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205B.gbl index b684e33a02d..bbeead88c0b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:580811a3e79b5d8486db46f73021ad7a75e04dbf93b7f338eb323b68a299e0be -size 138564 +oid sha256:6a8d7bd028254a84cf4175cd4c91d91754c41bb1b7f487ee29894b355d2a0887 +size 138132 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205B_v255.gbl index f88ab58ee91..4f893fd5a36 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4205B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed0d68203c157d70b1fbaf3699311eedb4eee7cb12bfe989ab71c0503f33cc3b -size 138560 +oid sha256:1e92acb341ba036213ae1728c184f25e6f73a9716d3d682279b87137d495906d +size 138136 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4207A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4207A.gbl index 77641050a56..13d6a4b3fb2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4207A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4207A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:80623c719cf22cec85da44e9ace3c9aa98f725516945ec265e5cc9952128343b -size 163344 +oid sha256:a84a8d2a621cb357ea81f95f6fde4b3b661b78cf2595d3d5c3f6bcace6790d61 +size 163552 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4207A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4207A_v255.gbl index 3a56198b2c4..adce97b71e7 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4207A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4207A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd7dafbf26ef19625223132f75eacaf2cfe48178d67d1693596c3dbe1b5df88e -size 163344 +oid sha256:f0d2920441151e069ed116e88a64ca641074bbcfd1f478bf58b1a15f29c9c2af +size 163556 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4209A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4209A.gbl index 234e0c74ebb..49fe10e3e8d 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4209A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4209A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cd4349b0f0e63684a44071e6335768987a48838feb49a0e9e4289aad7ece649 -size 162960 +oid sha256:cc0618e2b5498cd9b3cac140959cc2872cdd8b3c225b84b1edc59a3ba0f480ff +size 163052 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4209A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4209A_v255.gbl index aaa9d369180..2206ace6eee 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4209A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_led_bulb_BRD4209A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e04b60cf4a0d3c591ef3ceae54b956349b202b277f7faebb6b1bd0e96c5d6edf -size 162960 +oid sha256:925a5f2f9fba81b56a78220f92539d6437140e7c0d3e16a583f521e6dbc7e926 +size 163056 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD2603A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD2603A.gbl index c672175375d..91cf2feb6a1 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD2603A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD2603A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b29d7a87f21a029706b2ac3c65d50b1a260c2d648a0c58d4efaa2dd186f52ce6 -size 142676 +oid sha256:ee8fdce23dcded24227490238af70d6130c105a884b1619fad91b81f0f96f50a +size 142220 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD2603A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD2603A_v255.gbl index 2c60eb75f3a..de72a2ca317 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD2603A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD2603A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:060f6629f3a8b75225fea21916e7beb6c1a816222f37383cfb2e3e9e105b26c6 -size 142672 +oid sha256:162739bd75c0ec3c4838205143c057a36e0344f977705aec0e48eff04fc05195 +size 142216 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4202A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4202A.gbl index d4140a1a23b..c1ed0fd8525 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4202A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4202A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aae5ed069c5bcbe9b946053e420917d1739fa95cebe35aeebb2ce383d7e24c02 -size 168108 +oid sha256:f2a63b746a0a1ba155a619fe137145289236369e7b24882d6523898d0bf00b09 +size 168124 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4202A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4202A_v255.gbl index 698b326ccdd..e59fff949cd 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4202A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4202A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32263e9ba3e9b267d44fa3afe4bea31ff9adfabf66252d778651f5d798090024 -size 168108 +oid sha256:6d927dc33643d9a5e633f472183704eac1ce715dabe7946ce241de69cd0e3181 +size 168124 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204C.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204C.gbl index 8683cfb9dc1..5321c34e6c5 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204C.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204C.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5198b3e92362acdd9c5b2f288dacd8d1084684ea45df6d467343a522b86137c -size 141932 +oid sha256:526be28f4b0558c1aa8cfa02a272a718ca428061ad53fc3810ffa887328249ae +size 141508 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204C_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204C_v255.gbl index 7f185dfe096..ea98b84b9ab 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204C_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204C_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97cccef54482820a1318eab89c757ea063c995e4d3e1a98f2bdba2570184fa9d -size 141932 +oid sha256:8d306e1bd5fa50721e871cf7b4632c7a59ec1e0490cdde5a8c8566023a52134a +size 141508 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204D.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204D.gbl index ac93241b1b8..0145b8a845f 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204D.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204D.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f3a57c041ef22a023f61dc612ff70eb288a64a04cb192895f110d8b5ef3a09f -size 141968 +oid sha256:cccafc1b0a75a89c71526568797a336a82ee6b48dfca48abc075d1030cedc394 +size 141528 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204D_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204D_v255.gbl index deeb34f770f..5a4e4f30e8b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204D_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4204D_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e4cf0db18058271491ee50a1938311ce1c2b6e644bb7c4d2e5a446bae53cd31 -size 141968 +oid sha256:19f880e7d69e7a0c3bec440081444928d20095f3dc9deb1cd3b97bdde26bbc2e +size 141540 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205A.gbl index db6bfb2f4f8..7e762ca7de3 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2f57ce2fbe43462796072aa045f1a4763e2864f6649a8aa98e67598fa913bce -size 141264 +oid sha256:f1ecdfa50585970123dd992e0d2241e8907b10f767e0acd1ada8d54993dc7e72 +size 140820 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205A_v255.gbl index ff10c01a1ea..82e49c747b8 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34170e9c0947ef5e04a3db3ea7e6abfe000df29733f85593c923d94004d3c22d -size 141260 +oid sha256:a3d65ad250d6231202c6c91813ad9cfb8f366e57ebe7f337c580811cd08a10f1 +size 140820 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205B.gbl index 4f1ec3f4ffc..113f1ec9bf8 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d99663ecdc71e85f5e362c7cbe9fc34ea6511958cd6ffa2bbe026c7dad8c8528 -size 142760 +oid sha256:7da4e8b982c79d5e23df600b6d95976a3bc736cbb08da05a4df0215f657694a4 +size 142308 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205B_v255.gbl index b11a518f542..5294fd2f10b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4205B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88b8ff04640b6be04a80273da16b9f2932afc71fed8bcd0a9f572e4b7def0bbf -size 142756 +oid sha256:3358587c4e0f6cfb162d912c201c4e1bbeb2a19aa62436effd3bfa05ee4bf6f3 +size 142312 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4207A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4207A.gbl index 3420add0193..a2f4da2c8e2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4207A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4207A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1128897e37c52b974a443d2cb4ccdd0a2b474c461339af635b8cf672dbb1a36 -size 168108 +oid sha256:143554b93189a4f1376f584a183c1e096a712bab4024dfa1fd69b9874b307f7c +size 168124 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4207A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4207A_v255.gbl index 1c389d113be..d8f87a8aab0 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4207A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4207A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a19292ce5135adae45d9c9e84a72be7b8735f3207a8d7aa61e1090e1cc6b3084 -size 168108 +oid sha256:75fb36cb32a63b885063469ebba85843c765a94bf04985984b9b35e22bcec0ed +size 168124 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4209A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4209A.gbl index df0816039f1..a22808c1b4b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4209A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4209A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04eb2ae8fe0cc5ede718e04a8a0329e862507de48c4f671b3c83688e8145abbb -size 167404 +oid sha256:fdf801305b2910c6f791171279c5adcbe2cb41ca2861b84f7e32861350a15aff +size 167680 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4209A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4209A_v255.gbl index b19a0ea9e03..1c6e2cd4e6d 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4209A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4209A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c63d1ab6ccc3bbbc2312310886f2bc4aa38c57112c2e18d4a0a55b0b9255ddf6 -size 167404 +oid sha256:8ad4f49aa4b73770f1eb1f2095c52afb7b9fba3d21a760790aee619c924930f2 +size 167680 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4210A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4210A.gbl index 1a68ce027c1..fe2445a39e1 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4210A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4210A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5dd53019145cf1ad803213a61eb0c5b955956daf31eac347163c5f26a9d7437c -size 141972 +oid sha256:9b39ee7cd135a7b03025536e9055b49cbbbff855bcc122458d6e823f8f029bd3 +size 141540 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4210A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4210A_v255.gbl index 7d2b3a64598..359c7ba1708 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4210A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4210A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf4c369390e17916d87d9ff3ce15a55243e77861b304256a8d83efabfc9283c0 -size 141972 +oid sha256:e56ead06a75e1a04c9d2e2cf1eeba3cfdcd42bf45b8fbb62843a9b73af519f19 +size 141544 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4400B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4400B.gbl index 77413555d10..108a95f5357 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4400B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4400B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5a314c1e00b4ea3a43d6f8eaf36e0607c2e45a8238e3eb702d0f6840a0b4847 -size 141816 +oid sha256:9fc9aae67294486692d70e6f5f53c146b114d11a3457d32cb69ff3399c13f3cd +size 142204 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4400B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4400B_v255.gbl index 388fcbfd702..c4f271e67eb 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4400B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4400B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de05188e944cd86bf6a41081f39b53c2ae6d618c71f7727faadf0a2b107993d4 -size 141828 +oid sha256:b162d9615da100988e1be8fe91c6e075cd93c77f7a67f9abc8cfe4b13715c3fa +size 142212 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4401B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4401B.gbl index 238ad275d11..6cc1d25dbf5 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4401B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4401B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6b760f7d9e12525ebf86d36a93811bfa8c2fcb2cde1529fe1aef14a0f6b4a9f -size 141808 +oid sha256:6b5a84cbda7d2863f84fefb35092292b17bcb7fb1d6b768f9d1b04283fccb163 +size 142200 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4401B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4401B_v255.gbl index cfafbb79f92..48abf181bd2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4401B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_multilevel_sensor_BRD4401B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb5312a20037c76bc7ea5c6ae4f3dd8dbc55db3d7707d03413c476a0a84147b5 -size 141808 +oid sha256:c0d390c63284e221d2ea0be18d61551d4c1091bee98bd9f683b0ad50dc4b26c3 +size 142204 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4202A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4202A.gbl index eb01bd0e2b1..06816722af2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4202A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4202A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8798adacf9befd1dacc435d7227d8a526e170657122cf078d1949fab420c9675 -size 167292 +oid sha256:69778236c20277f20d73287d40585b8c9f17909c21ae937742326b78e2f30d2e +size 167460 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4202A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4202A_v255.gbl index fb44e035708..320d09ae5fd 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4202A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4202A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b56dadbb1078d520477605aecd8ee2c0d0d9ede81f45e6d43b3d179db182b10 -size 167296 +oid sha256:3eb80953fc32e141ab42bb2495f53b422ed940bdd0f7334b91ff1295e570f4e4 +size 167460 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205A.gbl index 45dfe08a883..d31038b4585 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f57fe96140912ea052c91989ca3cb6ffd68630ed15234c009821b39e7217efb4 -size 139912 +oid sha256:dfc55587e60f05a8b453cf47fbe02acd2c23bfb990192bd11484d42a563e2d9c +size 139528 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205A_v255.gbl index 02778f3346a..5d4ec2cce1f 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c9f588f46d87cc1087262f021566719259ecc416356aaeebc48e536737feb1e -size 139912 +oid sha256:443aa5626739c9ab9b6cade12b848829d4ea1c83cff136009dfa35c970161028 +size 139536 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205B.gbl index f24f780f393..7346070e8ff 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b0a84dd22ca58b485ef0f061e1695cc035835509bd2f522f542870fdb1aa4ff -size 141548 +oid sha256:13947bf71268520236078ba15cc1568564fca0257fb2638fdc4bae1ebc3ab321 +size 140980 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205B_v255.gbl index c2c2110b4f5..900567b15cd 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4205B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:abb606f072c6a7bfaa5a14f77b3a962a8b5933ee1e643f7d17cf51ba6167c297 -size 141556 +oid sha256:120747dcdd5838d9d9163cb1d65865eb0025340f943aa94ddf08881a3d2d16fd +size 140972 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4207A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4207A.gbl index 9ce657646c7..af5470e2406 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4207A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4207A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a55819f5d9836ef29a78fd8cc0b0d1a7b80953fdca4d81e7e51433f01de99cb -size 167292 +oid sha256:eaffecf957d4fa3ddc34f0f7cdf5af20eeeb0742ea81d1e9046b2b2879a7c177 +size 167460 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4207A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4207A_v255.gbl index c663c1ce322..79f4b867727 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4207A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4207A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:163e3a98b7b05448b1359bf6d8625a67baa1e91c3f32a33d03f7794a92968f2e -size 167296 +oid sha256:8040773a80a6788f6abca1ef0db00c89a0c3fb4eeed6919a1da1168dc109bb4b +size 167460 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4209A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4209A.gbl index 6c2e03fc022..5ac28ea7a56 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4209A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4209A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:891966acc67cefecf5f0ebfdb99c00c631f9985bef69d624badf4ab74606bf85 -size 166744 +oid sha256:41474b8cb5fa0022ef6a4e52ef952f29b7a7e513b547ca81963953988a9bbbdd +size 167084 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4209A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4209A_v255.gbl index 6794f9127b9..4f63877107b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4209A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_power_strip_BRD4209A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:194fb80659f05764c7d3307265b2109c7d31916a81c8f41387f300595411cf8f -size 166744 +oid sha256:5cf9203a4312375e4da9a64291d50fe0ad921dc45e47d0418fbb66d07da5c812 +size 167084 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4202A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4202A.gbl index 875b3b15046..40b97587bd7 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4202A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4202A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fef7162507ef6c72a3a499ecae06e2e5320e0e5ba227e210bb312a19f17dc85a -size 163344 +oid sha256:6ab9e7b044146fdfcc4d529162b8d58d94565715597581edb878504b4e88a734 +size 163656 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4202A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4202A_v255.gbl index e37b5fb04aa..10d036e18b8 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4202A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4202A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08d423263886da8681f108844a7b45b681db808cfcc6013c1c89652c322c9092 -size 163344 +oid sha256:a927dc2ac7daf7ec2c756d81922b8d38f1b55fa3c24b90412bd4a7afdfb12542 +size 163656 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204C.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204C.gbl index 712d795cefd..0be0fd08644 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204C.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204C.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:056da1ed9a8323f6e27ba2e9a21e51e7188c64c704e0b9fcc4d4a1a719468d1b -size 138780 +oid sha256:283f54b0beaee8ef8e418c8574825e9b38b4c31643c9f465fe95199aec9bd187 +size 138264 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204C_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204C_v255.gbl index 568b956c4c9..55036a0ae91 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204C_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204C_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd3c3c6c588ced9317e3b6486af092f0f6ab89ec8127f4e65660168fe562ef54 -size 138772 +oid sha256:a7f3d90b0591da072704a13ad268c82b8aaa976c1b7ef00d2ef080b5417dc0f0 +size 138260 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204D.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204D.gbl index 8a4e2f290c7..0cdec3f013e 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204D.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204D.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dcfacc93ec351c2d3d7f0e30c8c239bca2500b67ee7af1b5b1323d7de3028700 -size 138800 +oid sha256:b0b3d15d8655c2a248d045601be05ce79d0dd66eed9ce0a99b62c6b0d3800989 +size 138288 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204D_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204D_v255.gbl index 15c4049c9da..75523a131f0 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204D_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4204D_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc51338087204e33d4016e7b32087dbbd4abd85f3493cfcfd7174e1e05ac1b01 -size 138792 +oid sha256:767aa127111133d4add1b5dfc8bd6fdee0f09b2aae9609052693aa94f56e0499 +size 138288 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205A.gbl index e8722473a21..e7a1e41de72 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6bc36ed4d8e669ecf030b03c8587cc3838064cb94a04ab657d86a38268456247 -size 138096 +oid sha256:098f34b49e78879c5288dc5f03a20d6a2816f0a9d7e7c44cb5194ec276c7e579 +size 137664 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205A_v255.gbl index 1addfde7fb5..72a3e0ca65b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02c708a45359656eb9d137cf34ce7d9823bec7b85a65e627b89b639ed21ec195 -size 138104 +oid sha256:c3d3962d6f6bdeec2de74ae84345777ee42d893f74f565fe03e62d87df5947d6 +size 137668 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205B.gbl index 1d2e63d6caf..3e9b78d231d 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac8cc85cb341db75a947d5bd90dce65dcbadca0048ce403804471cda17e05b54 -size 139600 +oid sha256:c51c5b1ad104e7802f21d3b1a726023a2464fa45a91f6826bb8580d1d8278adb +size 139168 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205B_v255.gbl index 6a259bf66bf..366433b37b4 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4205B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6dd009da5e1bc326bd59783ef7467a920c1271fc179de91670645d48fb31a8a -size 139592 +oid sha256:62b8f4688b309e860e90dcef26be8b866bfb2722eb4b8b5e49eb68be301be6cb +size 139176 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4207A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4207A.gbl index b25d54cbdc7..a7707a274eb 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4207A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4207A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8337cb6881f784858958412e6ef35dcdc8d1fee39e04c490506340681e55aa6 -size 163344 +oid sha256:952cd3c633cd7f7a1c4204f3538672cd7de553c71e856feb926dcfeb94bcf0ac +size 163656 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4207A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4207A_v255.gbl index ba5e65c41f9..bde6795dfd4 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4207A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4207A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea22b78a17fb1c9e6f7d075fd87cd19fe317e0e3411a892ae9c36445bd1c5383 -size 163344 +oid sha256:04ba10f1b6c39c1bbc29c231941337c2757856fca713f6b594ae54112bfd91b3 +size 163656 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4209A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4209A.gbl index b940fa399d9..4c2b5c0612d 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4209A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4209A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a5ebea1b99a11a5efb374b1377f04d10deb967fdb1ac4e73d0cdfa0b0c86397 -size 162908 +oid sha256:21078fa21943f9bfd20831bf55805e5ae4c81f73c79870294b0e046b99309f1f +size 163304 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4209A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4209A_v255.gbl index 2ef387f1b96..17fd9386e09 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4209A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4209A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b272d18335586851851ca10e360391db34504af887cb0f7b5b55e5e6284d1e69 -size 162904 +oid sha256:07a5c9ffe5596efb8de627940ae44bc80b5c377b21ef3eb6dd03fd1807d42b7b +size 163304 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4210A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4210A.gbl index 6100b09f4a2..cbdddadef28 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4210A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4210A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a75dc91a7c35f0e259cdcdac00858bffc3b1d7eb635f1b6be311b403dadd2102 -size 138816 +oid sha256:0bfa96a1d897d02712cbfb1344a2fdb7f8546ebe27b7fcb5f7047401cc11aab3 +size 138308 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4210A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4210A_v255.gbl index ef12ffe96c8..5b49ef37cee 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4210A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4210A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b2deb9093ec50938fa23e7b8919c5ebdc671946c73f2fbf62950e9871ad19e4 -size 138808 +oid sha256:6ba2a8b5cdb65a03f108d11892d5c9bd084696dcd686ba7c1719fccd5d70ead5 +size 138312 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4400B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4400B.gbl index 05a734084be..04c1882b96d 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4400B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4400B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1aa78729db50db920b49815b449078880b6a1dbcfefa63f100ae52999b05c11d -size 138504 +oid sha256:875df6e3f82e71d5da9a1411550f79fad9ae2db172700d5e3f076d3b2a20edc1 +size 138868 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4400B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4400B_v255.gbl index c3f6fcf37ca..846d1fcf047 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4400B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4400B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f009e4748f574c4ea389f3df7ee97b3cfc1466e4ea7d7002182a6e1d84b371af -size 138500 +oid sha256:5eb301fde7202bef55cda4715d75080176364cbb5e9d315ac2d8c0680e363829 +size 138872 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4401B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4401B.gbl index a5b396f768a..748d2a055f2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4401B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4401B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e8308128352e28fdec5806e7dc75f2d9b4520a3a765446fc47e219ed7e8a3a9 -size 138500 +oid sha256:c534f2d85be4bb0e0bc40e20f618f8599aa70fc19b99165cc97514f04a4c31fa +size 138880 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4401B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4401B_v255.gbl index 6421b6b8611..98c873c1fd2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4401B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_sensor_pir_BRD4401B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:670937d7741f898eda89b4663540398cc10b50f773a86b9aa2208b2778014ccb -size 138496 +oid sha256:543f6e3cb3c25be1972e5900436ad34bd9abab4e77e780266c6851f13d3f6caf +size 138880 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD2603A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD2603A.gbl index 4b6e03074ac..4156f4d42ea 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD2603A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD2603A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1d6b2b87183491d9a5031943d3590eab35e3caa083fd8ded8efbc229ebebd58 -size 136748 +oid sha256:806866d5690170a04b743a52b6b42ed619d5d08590996c2c3a0c16ae925cc481 +size 136268 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD2603A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD2603A_v255.gbl index ab076ce024d..da87bc2bb09 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD2603A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD2603A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22b565a5851b2a92215044e8b279ebb4571f23d046443b653cd20eaed7f64fdd -size 136752 +oid sha256:59c34d22ece8a6b46decab2e466e6b232b3f69e2f500f1b98f1d503f39b92d3b +size 136272 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4202A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4202A.gbl index d817fd96ebf..c62be25eea5 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4202A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4202A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de90092d6939de5b5df4d7a776401fec34d830852519bf0d1ea0f3ea4050e3e0 -size 160260 +oid sha256:64a561edf60fada5c39b32c9ea18a8bf6ccf37ee6715bbbf5a907c9baeed1d24 +size 160576 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4202A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4202A_v255.gbl index b223609d52f..7a45014ca2d 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4202A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4202A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c3ae2b4249b4b60e6c20d9a6d4d022d977de3d6c198118de6259f4e0559ecf6 -size 160256 +oid sha256:8d6724a4b2c046acf7330959df9b98aa674963dba896082eb683dd08199284d9 +size 160576 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204C.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204C.gbl index bc211641bc2..7eb7389f6c6 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204C.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204C.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:126f54887d81f3648f8dd3ae0b9fba217c08197061863c3b94334c368098fbe2 -size 136044 +oid sha256:78c7f9c007e646f0f401b53c9913e35c386e4dfc9ef66e9f06fa8cc26cc1daf5 +size 135532 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204C_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204C_v255.gbl index 6e477254f5b..fb2c1d20975 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204C_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204C_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15e1fda176145b2d559722637c119333526a97e6d27a95015009b794d3632cd2 -size 136048 +oid sha256:10ffc9072ddc1839707852e7fcdeac96b284a5332bd9f781d9c8696c20bf1d54 +size 135532 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204D.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204D.gbl index 31a195a1911..6d4ea9712a7 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204D.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204D.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d563298fa3e79242c90cba1a939380ff758815b7f93cf6c21e4724180ad83b20 -size 136084 +oid sha256:a657e5451569b7ea3ed6a41c33e6b69350cc816cd75700c1ee7ff128ae6bf78b +size 135612 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204D_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204D_v255.gbl index f2c4976dba5..3f5e27706fd 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204D_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4204D_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c9eaff9bc39673686e1bff6db8f4ab64b16a23861540780f5c7975fb9960dca -size 136084 +oid sha256:475de1a54002a7ff06dff53ea6f21279bd8cd6a2e2c5fa66d4b6e555fc4d2d4e +size 135608 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205A.gbl index 41336568431..cf93ad06560 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c4977465d60fb7ce3ab3462bca89428a5949eedf72228bc871b5b4f3478ca2d -size 135344 +oid sha256:40355ce56f9ee133a4f53205154d236f58d92564aac53bd1c246b7bcdefa7eed +size 134932 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205A_v255.gbl index b0828278dc2..9e22660414e 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e7a84b662c11245e30f186facdabd0364546455fa93aed74ebaed0d7ccc365a -size 135352 +oid sha256:b06975b613b425bf45911de7ba0077159b2e5e9f224ce59c656b712085a41a60 +size 134932 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205B.gbl index 14614d5eedd..b324d79f272 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43aa06b6df4cc2b4952122b5715f36562137a322172a9cd16ae7f8bc5e48a2f3 -size 136860 +oid sha256:a4b26c57aa7e580f105bdf52f00b5e78daa28a67c66e53953416441ed63f5dd2 +size 136428 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205B_v255.gbl index 1ce8dbbd7d9..98bd837257f 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4205B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49bb8ae7ea958fbb499031481745f7a36a00dac64ca8416d4fa8870387fb6bec -size 136856 +oid sha256:d4eb93ffaf18676547fe3966fe2fe04054070ad6e801641345d40ab918f3c64d +size 136412 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4207A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4207A.gbl index e16f2634ca6..3ecf6f34c6b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4207A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4207A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b8afe2db1b0aaffb494b27028094e9beb7667b1949dd8f685c5f79f36940c221 -size 160260 +oid sha256:282239dc17d33756b9e066ad6165935e0d557629a02f127a29b6ca215f2f1e13 +size 160576 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4207A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4207A_v255.gbl index 7fb700fccfd..62abcf43afb 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4207A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4207A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62da96ff268cd4222b02322d7a0062804171ec4069aee21065de86082028ef72 -size 160256 +oid sha256:ee2669e269c24005ba581f2bf97327eec15e1eba54fd0b35a0ab686493949e75 +size 160576 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4209A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4209A.gbl index e3f35360a62..41e05862974 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4209A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4209A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc7704e10ba5bb3fccf2e4105834da37b97f0430bcc79b8ddb14f51f8afad5db -size 159888 +oid sha256:4cf34383ef8608c56aaa5b9e9b4a20d9192d4a7db654c104f26aab3d813f3bc0 +size 160360 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4209A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4209A_v255.gbl index aec475a2547..e6e9238746d 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4209A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4209A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb3f14236899b4d0e935c5af72357f98b80ceb3cae7d497b4e1018d7568bc333 -size 159884 +oid sha256:b59ed868302ae0aaa2872728bbba0e74e1a13eed55b85f950d2e6468129644a6 +size 160360 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4210A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4210A.gbl index 768f529acde..818d3d18180 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4210A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4210A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:164b245d3af6c0f61cb5ec1f5d980e7d80ac52a85ad11fd17bfc909a92790898 -size 136084 +oid sha256:b284e74e93d95cfffc47f3142c21abd64a66a3bb5eb9929a9a81e2b8f4f195c8 +size 135612 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4210A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4210A_v255.gbl index ed97adc368f..dd080f95c24 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4210A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4210A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b75fb92fe135f34ca54232db52da588e207796ee49dbb20f63e5962685899a1 -size 136096 +oid sha256:316d4b2d09a08fb02bd26c92e6c6f050afd055b8e9a1605aa95151193a8a8d5a +size 135616 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4400B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4400B.gbl index ff1fda9ced8..8e6596300db 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4400B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4400B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c7d3dec371d056ba82590e94735a1e3f5a71a6232795b4c2b62f3f6a12f14dc -size 135820 +oid sha256:689e874d78fb94353c276145e227631f3e2dfd6f4ced9563ff45972ef0daae19 +size 136108 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4400B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4400B_v255.gbl index ec80574113b..dd91820a033 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4400B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4400B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb9f2cee5e0c2329212c8749928e7c49175c406fd9d79efd2afb2a0d97dad4a5 -size 135808 +oid sha256:4e7d89b4158c23e1ef2bfa91ce053ef464c28191227b34b3a6fbd7cabfc99259 +size 136104 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4401B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4401B.gbl index 8d4ac4544aa..17b8ed30e13 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4401B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4401B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:055b18d5b5b2e061048fbc5d38ec69d9ea1834f35b13109172d85e7ecac4a8d9 -size 135808 +oid sha256:d3518c6680c24e2a5e164bd2fcebeb24debccefa38942bed7040511c770f21e9 +size 136124 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4401B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4401B_v255.gbl index 6702d4830a6..4dd2cc8d556 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4401B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_switch_on_off_BRD4401B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20d704710df104572daa88e41e128b0a8ce8f1e58e92445b4d241bccdd1c0f79 -size 135808 +oid sha256:a2a8cfa523c216e280d6a7c332229e4e58774f6d082a6b1626ef10918df4b71c +size 136112 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4202A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4202A.gbl index 62dfb2d53bd..2fe95e32f51 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4202A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4202A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e20536ac6a7026dcbbec78ca16cb0f9462b022879efdb5c2b84f4958adda72c2 -size 160936 +oid sha256:522d0d4d3cd15c7ebd3865710c1fc2061fb75ada766c5e024853187222c65a8e +size 161140 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4202A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4202A_v255.gbl index dd73928a9ba..2d62f4df322 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4202A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4202A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3696b28361b24db2979c33fd4bc3b407657e5e81cf331280a27f9d256c49c83b -size 160932 +oid sha256:e5f7f9c2a22ca73f14a92c26dee25a4f9a70b0080ab387c4f59c93c21793e83f +size 161136 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204C.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204C.gbl index aa3be903876..f041fc20e1f 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204C.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204C.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77698e6b40ef930fc6442384feeb0845accaf43764f405977e8fc375cd370aa5 -size 136416 +oid sha256:c0e6f67889ed82b4735e76d53954167b5def156ed5a1e20e486caff9a55d5626 +size 135908 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204C_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204C_v255.gbl index ae9d71d1c29..c25a65e96fa 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204C_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204C_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:999d6af44f58599efd2c644f9d5b6f67e6af1beac57e15aa483fc1224747c58a -size 136408 +oid sha256:b4a75d77e90e3290d09d27c945acbeaa3b18ec1248c2b1f7c4f271c9f97af0b6 +size 135908 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204D.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204D.gbl index cada3e77792..54830f4cf8b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204D.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204D.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a21ac0f8e5972e9df822aa5b958ce265fd4fd649dec7eeabe620a33bd2803e5a -size 136428 +oid sha256:a749a8e02c2f5aca7710d05861fe629d96ba6550589957b70db23093c9102eeb +size 135968 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204D_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204D_v255.gbl index 43deaced609..27e0a649b3e 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204D_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4204D_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ee466301364c40d73533b9da7828105c97cacaa7e87c0155acef75a6faaebca -size 136420 +oid sha256:69b34c734cb4e16f4cc5849ca53a47edd4f7a06a313f397305a9abe354af5620 +size 135960 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205A.gbl index c34ee29017d..f8c85e55e96 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9fa06e9de1c346995bd49e47239398a659ca5b910c4dca1f9710c267e81141dc -size 135672 +oid sha256:aac86c4b02a96af2d5db4c80e02fcdd31c27ceb5b7f57956ac01ee1c04f60d2c +size 135272 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205A_v255.gbl index 9798503ca9d..d0b25910d4e 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17c9f5197a337ab51784fe774297995dd69fd03cf0b4d283f933ce6ad50b3c2d -size 135680 +oid sha256:7f6928003338cef7351f223cf951c5cb04826ad1bc6cf7c3cd00308c2cc04dc6 +size 135260 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205B.gbl index caf1852d25f..2d4425a374b 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6e35aee4095590f987afc5e5210bdecb7c86813b904a6b3c849699f32f20828 -size 137208 +oid sha256:636156aed502ed2ffaeaea450e1ece571ea45db731ed29787e4c4f5b0a41907b +size 136776 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205B_v255.gbl index 1c0a6554521..2d7503b17c2 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4205B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03f4a1844874ce309795912e03fb7d6acb2666f17e2483d776c8878548a286f0 -size 137208 +oid sha256:d22218affa5590ff87180f26435598466772cad4af8aacd0692d85e4a9c64ca1 +size 136784 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4207A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4207A.gbl index 16fd808adea..72cae0fd7f7 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4207A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4207A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc9d4a70fe9b187609bafc2172f14930cb3ff475e1b081a4955d5cf58d99f077 -size 160936 +oid sha256:ff2087a14cd6bc8b3de9aa4b21204f4fb65afeb7c0f5ee33e8587ad88177e9b6 +size 161140 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4207A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4207A_v255.gbl index 00ceec7d421..5b44e87d76f 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4207A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4207A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19e7663454bd0c3a77d8c5c290b66ccf37e39987e721bc1655931b9e63920afe -size 160932 +oid sha256:d314683a9325de5892d1cba855f078b1eba35ca64d36d49fd8706201a1a41417 +size 161136 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4209A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4209A.gbl index e0ec8795450..a56ae10de14 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4209A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4209A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7aca4a3a4cc805330641f7e3d4d582ff32dab217e69da50a98ad7e265cbcaca1 -size 160540 +oid sha256:1201ec27307df440794bc1ded11cdb736279f41c6323f8a462fe62a17eb60b10 +size 160688 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4209A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4209A_v255.gbl index 885a4c8f199..754f217b9ac 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4209A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4209A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce6b5cfe94a181a015fc17a743bd6858761d81cb54c6ad8bdd5bd813e67b73e8 -size 160536 +oid sha256:d4dedbeb826495bcf69a838d8205e03553021dab53db8e268f7945004d3cd21d +size 160684 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4210A.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4210A.gbl index b8c101ebc4f..54ae4b0f84e 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4210A.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4210A.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7cba4d9d693c0fa82b939f2fd02cf06cec547beb36e96ae6b3de055ec9243142 -size 136440 +oid sha256:2fb37a102ed571812ee237923c852abf06893d01ffecd2469efa0cf22fe61d4b +size 135952 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4210A_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4210A_v255.gbl index 1a68f75688a..bff28f660e5 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4210A_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4210A_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d0fd71b5b4bfdabca65433bef105319b05896d865fb5e8d38d4e9a2e6d57930 -size 136428 +oid sha256:c39c0d9c424201dff8cb73d337ca0c1100b47a72171de5fe0c715e5004e33414 +size 135964 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4400B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4400B.gbl index b2ce9806cb8..c75a9ef40c6 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4400B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4400B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7a85b1bb77b4d70b02a1ab5c9a27c08f8fe47723044238aa32c3c93ca5bf524 -size 136112 +oid sha256:4650c710f36d60de4049b61e749e14917cfae8a4ed59e419448c066f61200f6e +size 136424 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4400B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4400B_v255.gbl index d19c2eda400..c435714a1e3 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4400B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4400B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db8216c03dbb6f2b96256408338dac56e969f8eb78ddda65d0cd48c678e43127 -size 136116 +oid sha256:9de269f330733215f55e91dc4900e9662e7a2de470a00b433204e801cc6df406 +size 136416 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4401B.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4401B.gbl index b206deb32ec..1f62dba1f02 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4401B.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4401B.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9703a6982cdc2aaba02e85f7764584bc27ce8e2b716444335383a98f5cc961f -size 136104 +oid sha256:5bbfb80e29a04eb5f84dc2d03239bbb8dc0c8c2865de6da0be01511235cc50b9 +size 136408 diff --git a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4401B_v255.gbl b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4401B_v255.gbl index 39535b81dcb..e5816d5a9ca 100644 --- a/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4401B_v255.gbl +++ b/protocol/z-wave/Apps/bin/gbl/zwave_soc_wall_controller_BRD4401B_v255.gbl @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b17a27c9d81d285fedf5551f90f2f3d957f33254f948cc5cf1ceea42a8595375 -size 136104 +oid sha256:19adc2c8ded720c012f2c86515517196eec2364031d51eb7d0709b57f157f3b5 +size 136412 diff --git a/protocol/z-wave/Apps/zwave_soc_led_bulb/LEDBulb.c b/protocol/z-wave/Apps/zwave_soc_led_bulb/LEDBulb.c index 2548b9f1974..fedf2bdc05d 100644 --- a/protocol/z-wave/Apps/zwave_soc_led_bulb/LEDBulb.c +++ b/protocol/z-wave/Apps/zwave_soc_led_bulb/LEDBulb.c @@ -28,6 +28,7 @@ #include "zw_build_no.h" #include "ZAF_ApplicationEvents.h" #include +#include /** * Set up security keys to request when joining a network. diff --git a/protocol/z-wave/NonCertifiableApps/zwave_soc_key_fob/events.h b/protocol/z-wave/NonCertifiableApps/zwave_soc_key_fob/events.h index 093ee3146c6..f1085a088ad 100644 --- a/protocol/z-wave/NonCertifiableApps/zwave_soc_key_fob/events.h +++ b/protocol/z-wave/NonCertifiableApps/zwave_soc_key_fob/events.h @@ -35,7 +35,6 @@ typedef enum EVENT_APP_KEY_FOB EVENT_APP_BUTTON_UP_ASSOCIATION_GROUP_REMOVE, EVENT_APP_BUTTON_INCLUDE_DEVICE, EVENT_APP_BUTTON_EXCLUDE_DEVICE, - EVENT_APP_BUTTON_RESET, EVENT_APP_BUTTON_NETWORK_LEARNMODE_NWI, EVENT_APP_BUTTON_NETWORK_LEARNMODE_NWE, } EVENT_APP; diff --git a/protocol/z-wave/PAL/inc/zpal_radio.h b/protocol/z-wave/PAL/inc/zpal_radio.h index 68167021741..6550fb35699 100644 --- a/protocol/z-wave/PAL/inc/zpal_radio.h +++ b/protocol/z-wave/PAL/inc/zpal_radio.h @@ -34,45 +34,45 @@ extern "C" { * of the radio APIs to execute radio related paradigm for instance * - zpal_radio_transmit shall be used to transmit a Z-Wave frame on radio * - zpal_radio_start_receive shall be used to enable the reception of Z-Wave frame - * - * The radio API assumes that the radio will return to receive mode with channel + * + * The radio API assumes that the radio will return to receive mode with channel * hopping enabled after transmitting a frame. - * + * * Initialization of the radio * --------------------------- - * + * * \code{.c} - * + * * void * RXHandlerFromISR(zpal_radio_event_t rxStatus) * { * // Rx handle in ISR context * } - * + * * void * TXHandlerFromISR(zpal_radio_event_t txStatus) * { * // Tx complete handle in ISR context * } - * + * * void * RegionChangeHandler(zpal_radio_event_t regionChangeStatus) * { * // Region changed, make sure region specific data and statistics are cleared * } - * + * * void * RadioAssertHandler(zpal_radio_event_t assertVal) * { * // Radio driver or hardware asserted, handle it * } - * + * * initialize_radio() * { * static zpal_radio_profile_t RfProfile; * static zpal_radio_network_stats_t sNetworkStatistic = {0}; * static uint8_t network_homeid[4] = {0xDE, 0xAD, 0xBE, 0xEF}; - * + * * // Set radio for US always on mode * static zpal_radio_profile_t RfProfile = {.region = REGION_US, * .wakeup = ZPAL_RADIO_WAKEUP_ALWAYS_LISTEN, @@ -88,36 +88,36 @@ extern "C" { * .network_stats = &sNetworkStatistic, * .radio_debug_enable = false, * .primary_lr_channel = ZPAL_RADIO_LR_CHANNEL_A}; - * + * * zpal_radio_init(RfProfile); * } - * + * * \endcode - * + * * Transmitting a frame * -------------------- - * + * * \code{.c} - * + * * #define TX_FAILED 0 * #define TX_FRAME_SUCCESS 1 * #define TX_BEAM_SUCCESS 2 - * - * static const zpal_radio_transmit_parameter_t TxParameter100kCh1 = {.speed = ZPAL_RADIO_SPEED_100K, - * .channel_id = 0, + * + * static const zpal_radio_transmit_parameter_t TxParameter100kCh1 = {.speed = ZPAL_RADIO_SPEED_100K, + * .channel_id = 0, * .crc = ZPAL_RADIO_CRC_16_BIT_CCITT, - * .preamble = 0x55, - * .preamble_length = 40, - * .start_of_frame = 0xF0, + * .preamble = 0x55, + * .preamble_length = 40, + * .start_of_frame = 0xF0, * .repeats = 0}; - * + * * zpal_status_t transmit_frame() * { * // Singlecast MAC header from node 1 to node 2 * uint8_t header_buffer[9] = {0xDE, 0xAD, 0xBE, 0xEF, 0x01, 0x41, 0x01, 14, 0x02}; * // Basic set On frame * uint8_t payload_buffer[3] = {0x20, 0x01, 0xFF}; - * + * * return zpal_radio_transmit(&TxParameter100kCh1, // use 100kbps FSK profile * 9, * (uint8_t *)&header_buffer, @@ -126,7 +126,7 @@ extern "C" { * true, // Do LBT before transmit * 0); // Transmit power 0dBm * } - * + * * void * TXHandlerFromISR(zpal_radio_event_t txStatus) * { @@ -147,14 +147,14 @@ extern "C" { * / Get out of ISR context and handle transmit complete * HandleTransmitComplete(status); * } - * - * \endcode + * + * \endcode * * Receiving a frame * ----------------- * * \code{.c} - * + * * #define RX_ABORT 0 * #define RX_BEAM 1 * #define RX_FRAME 2 @@ -188,12 +188,12 @@ extern "C" { * / Get out of ISR context and handle frame * HandleFrame(status); * } - * - * \endcode - * + * + * \endcode + * * @{ */ - + /** * @brief RSSI value is invalid or not measured */ @@ -265,12 +265,12 @@ typedef enum ZPAL_RADIO_LR_CHANNEL_A, ///< Long Range Channel A. ZPAL_RADIO_LR_CHANNEL_B, ///< Long Range Channel B. ZPAL_RADIO_LR_CHANNEL_UNKNOWN, ///< Long Range Channel Unknown. - ZPAL_RADIO_LR_CHANNEL_AUTO = 255, ///< Long Range automatically selected Channel. + ZPAL_RADIO_LR_CHANNEL_AUTO = 255, ///< Long Range automatically selected Channel. } zpal_radio_lr_channel_t; /** * @brief Enumeration containing Z-Wave channels. - * + * */ typedef enum { @@ -325,18 +325,18 @@ typedef enum typedef enum { TF_REGION_866 = 64, - TF_REGION_870, - TF_REGION_906, + TF_REGION_870, + TF_REGION_906, TF_REGION_910, TF_REGION_878, TF_REGION_882, - TF_REGION_886, + TF_REGION_886, TF_REGION_2CH_NUM = (TF_REGION_886 - TF_REGION_866) + 1, TF_REGION_932_3CH = 96, TF_REGION_940_3CH, TF_REGION_835_3CH, TF_REGION_840_3CH, - TF_REGION_850_3CH, + TF_REGION_850_3CH, TF_REGION_3CH_NUM = (TF_REGION_850_3CH - TF_REGION_932_3CH) + 1, } zpal_radio_region_tf_t; @@ -408,11 +408,12 @@ typedef enum ZPAL_RADIO_EVENT_RX_ABORT, ///< Receive was aborted ZPAL_RADIO_EVENT_TX_FAIL, ///< Transmit failed ZPAL_RADIO_EVENT_TX_FAIL_LBT, ///< Transmit failed because of an LBT failure - ZPAL_RADIO_EVENT_RXTX_CALIBRATE, ///< Radio needs calibration + ZPAL_RADIO_EVENT_RXTX_CALIBRATE, ///< Radio needs calibration ZPAL_RADIO_EVENT_MASK = 0x1F, ZPAL_RADIO_EVENT_FLAG_PACKET = 0x20, ///< The frmae was a normal package ZPAL_RADIO_EVENT_FLAG_BEAM = 0x40, ///< The frame was a wakeup beam - ZPAL_RADIO_EVENT_FLAG_SUCCESS = 0x80 ///< Indicates a successful event + ZPAL_RADIO_EVENT_FLAG_SUCCESS = 0x80, ///< Indicates a successful event + ZPAL_RADIO_EVENT_RX_TIMEOUT = 255 ///< Indicates Rx event started but never completed after 10 secs } zpal_radio_event_t; typedef void (*zpal_radio_callback_t)(zpal_radio_event_t event); @@ -460,7 +461,7 @@ typedef struct /** * @brief rf channel statistics structure - * + * */ typedef struct { @@ -564,9 +565,10 @@ zpal_status_t zpal_radio_transmit_beam(zpal_radio_transmit_parameter_t const *co /** * @brief Starts the receiver and enables reception of frames. + * @param[in] force_rx bool will force RAIL to RX mode.. * If the receiver is already started, nothing will happen. */ -void zpal_radio_start_receive(void); +void zpal_radio_start_receive(bool force_rx); /** * @brief Function to get last received frame. @@ -630,14 +632,14 @@ void zpal_radio_clear_network_stats(void); /** * @brief Function for clearing specified rf channel statistics. - * + * * @param zwavechannel rf channel for which statistics will be cleared. */ void zpal_radio_rf_channel_statistic_clear(zpal_radio_zwave_channel_t zwavechannel); /** - * @brief - * + * @brief + * * @param zwavechannel zwave channel for which statistics will be returned. * @param p_radio_channel_statistic pointer to structure where statistics for specified zwave channel should be copied. * @return true If delivered structure has been filled with current statistic for specified zwavechannel. @@ -646,42 +648,42 @@ void zpal_radio_rf_channel_statistic_clear(zpal_radio_zwave_channel_t zwavechann bool zpal_radio_rf_channel_statistic_get(zpal_radio_zwave_channel_t zwavechannel, zpal_radio_rf_channel_statistic_t* p_radio_channel_statistic); /** - * @brief Function for setting the zwavechannel used when calling zpal_radio_rf_channel_statistic_tx_frames, + * @brief Function for setting the zwavechannel used when calling zpal_radio_rf_channel_statistic_tx_frames, * zpal_radio_rf_channel_statistic_tx_retries and zpal_radio_rf_channel_statistic_tx_lbt_failures. - * + * * @param zwavechannel Z-Wave channel current rf channel statistic 'tx channel' should be set to. */ void zpal_radio_rf_channel_statistic_tx_channel_set(zpal_radio_zwave_channel_t zwavechannel); /** * @brief Function for incrementing the rf channel tx frame statistic. - * + * */ void zpal_radio_rf_channel_statistic_tx_frames(void); /** * @brief Function for incrementing the rf channel tx retries statistic. - * + * */ void zpal_radio_rf_channel_statistic_tx_retries(void); /** * @brief Function for incrementing the rf channel tx lbt failures. - * + * */ void zpal_radio_rf_channel_statistic_tx_lbt_failures(void); /** * @brief Function for updating the rf channel background noise rssi average statistic. - * - * @param zwavechannel Z-Wave channel on which background noise rssi average should be updated. + * + * @param zwavechannel Z-Wave channel on which background noise rssi average should be updated. * @param rssi rssi to add to sampleset used for calculating average background noise rssi on specified Z-Wave channel. */ void zpal_radio_rf_channel_statistic_background_rssi_average_update(zpal_radio_zwave_channel_t zwavechannel, int8_t rssi); /** * @brief Function for updating the rf channel end device noise rssi average statistic. - * + * * @param zwavechannel Z-Wave channel on which end device noise rssi average should be updated. * @param rssi rssi to add to sampleset used for calculating average end device noise rssi on specified Z-Wave channel. */ diff --git a/protocol/z-wave/ZAF/ApplicationUtilities/AppTimer.c b/protocol/z-wave/ZAF/ApplicationUtilities/AppTimer.c index d2e9383fbb1..88925885300 100644 --- a/protocol/z-wave/ZAF/ApplicationUtilities/AppTimer.c +++ b/protocol/z-wave/ZAF/ApplicationUtilities/AppTimer.c @@ -5,7 +5,7 @@ * @copyright 2018 Silicon Laboratories Inc. */ - +#include /* Z-Wave includes */ #include #include @@ -22,9 +22,19 @@ * AppTimer is a singleton, thus containing own object. */ SAppTimer g_AppTimer; +/** + * Variable used by the AppTimerDeepSleep + * + * It indicates if the timers have been loaded thus allowing the retention + * registers to be modified + */ +bool g_deepSleepTimersLoaded; void AppTimerInit(uint8_t iTaskNotificationBitNumber, void * ReceiverTask) { + memset(&g_AppTimer, 0, sizeof(g_AppTimer)); + g_deepSleepTimersLoaded = false; + TimerLiaisonInit( &g_AppTimer.TimerLiaison, sizeof_array(g_AppTimer.aTimerPointerArray), diff --git a/protocol/z-wave/ZAF/ApplicationUtilities/AppTimerDeepSleep.c b/protocol/z-wave/ZAF/ApplicationUtilities/AppTimerDeepSleep.c index f7109b79c61..bfbab236daf 100644 --- a/protocol/z-wave/ZAF/ApplicationUtilities/AppTimerDeepSleep.c +++ b/protocol/z-wave/ZAF/ApplicationUtilities/AppTimerDeepSleep.c @@ -51,6 +51,8 @@ // Using AppTimer singleton extern SAppTimer g_AppTimer; +// Using state variable from AppTimer +extern bool g_deepSleepTimersLoaded; /* This function will be called in the correct task context */ void AppTimerDeepSleepCallbackWrapper(SSwTimer* pTimer) @@ -183,6 +185,11 @@ void AppTimerDeepSleepPersistentSaveAll(void) { uint32_t reg = TIMER_VALUES_BEGIN_RETENTION_REGISTER; + // Don't touch the retention registers until they are loaded + if(!g_deepSleepTimersLoaded) { + return; + } + uint32_t taskTickCount = xTaskGetTickCount(); zpal_retention_register_write(TASKTICK_AT_SAVETIMERS_RETENTION_REGISTER, taskTickCount); @@ -217,11 +224,14 @@ void AppTimerDeepSleepPersistentLoadAll(EResetReason_t resetReason) uint32_t elapsedMsFromSaveTimerValuesToSleep = 0; uint32_t elapsedMsFromTimerValueSave = 0; uint32_t durationDiffMs = 0; - bool deepSleepTimersStarted = false; + + g_deepSleepTimersLoaded = true; /* Do nothing if we did not wake up from Deep Sleep */ if (ERESETREASON_DEEP_SLEEP_EXT_INT != resetReason && ERESETREASON_DEEP_SLEEP_WUT != resetReason) { + // It is safe to persist the registers now + AppTimerDeepSleepPersistentSaveAll(); return; } @@ -327,7 +337,6 @@ void AppTimerDeepSleepPersistentLoadAll(EResetReason_t resetReason) * all (if needed) outside the loop */ ESwTimerStatus timerStatus = TimerStart(pTimer, newTimerValue); ASSERT(ESWTIMER_STATUS_SUCCESS == timerStatus); - deepSleepTimersStarted = true; } } } @@ -335,13 +344,8 @@ void AppTimerDeepSleepPersistentLoadAll(EResetReason_t resetReason) } } - if (true == deepSleepTimersStarted) - { - /* One or more Deep Sleep persistent timers were started. Update the retention - * registers. - */ - AppTimerDeepSleepPersistentSaveAll(); - } + // Always update the retention registers when done loading + AppTimerDeepSleepPersistentSaveAll(); } uint32_t AppTimerDeepSleepGetFirstRetentionRegister(void) diff --git a/protocol/z-wave/ZAF/CommandClasses/MultiChan/CC_MultiChan.c b/protocol/z-wave/ZAF/CommandClasses/MultiChan/CC_MultiChan.c index 5573095264d..5e4bf8984b7 100644 --- a/protocol/z-wave/ZAF/CommandClasses/MultiChan/CC_MultiChan.c +++ b/protocol/z-wave/ZAF/CommandClasses/MultiChan/CC_MultiChan.c @@ -252,6 +252,17 @@ static void CmdClassMultiChannelEncapsulateCmd( { /*BitAdress = 0 -> Destination address 1-127 */ /*BitAdress = 1 -> Destination address is mask for End-point 1-7 */ + + /* + * When bit addressing is used, a Command Class handler could overwrite + * the Command Class byte of the incoming frame. + * In this case, the command would only be executed for the first End Point. + * To ensure that all subsequent End Points also receive the incoming + * command, a copy of the encapsulated frame must be used for each iteration + * of the loop. + */ + ZW_APPLICATION_TX_BUFFER encapsulatedFrame = *(ZW_APPLICATION_TX_BUFFER*)&pCmd->encapFrame; + if(0 == (pCmd->properties2 & 0x80))/**End-point address**/ { bitNo = 7; @@ -275,13 +286,13 @@ static void CmdClassMultiChannelEncapsulateCmd( rxOpt->destNode.BitAddress = 1; /*Tell Command Class that it is bit-addres. Get do not support bit-address!!*/ } - if (true == ZAF_CC_MultiChannel_IsCCSupported(rxOpt, (ZW_APPLICATION_TX_BUFFER*)&pCmd->encapFrame)) + if (true == ZAF_CC_MultiChannel_IsCCSupported(rxOpt, &encapsulatedFrame)) { /* Command class supported */ received_frame_status_t status; - status = invoke_cc_handler(rxOpt, (ZW_APPLICATION_TX_BUFFER*)&pCmd->encapFrame, cmdLength - 4, pFrameOut, pLengthOut); + status = invoke_cc_handler(rxOpt, &encapsulatedFrame, cmdLength - 4, pFrameOut, pLengthOut); if (RECEIVED_FRAME_STATUS_CC_NOT_FOUND == status) { - Transport_ApplicationCommandHandlerEx(rxOpt, (ZW_APPLICATION_TX_BUFFER*)&pCmd->encapFrame, cmdLength - 4); + Transport_ApplicationCommandHandlerEx(rxOpt, &encapsulatedFrame, cmdLength - 4); } } if (0 == rxOpt->destNode.endpoint) diff --git a/protocol/z-wave/ZAF/CommandClasses/Supervision/CC_Supervision.c b/protocol/z-wave/ZAF/CommandClasses/Supervision/CC_Supervision.c index 64b8b17f19b..a80c9821bfd 100644 --- a/protocol/z-wave/ZAF/CommandClasses/Supervision/CC_Supervision.c +++ b/protocol/z-wave/ZAF/CommandClasses/Supervision/CC_Supervision.c @@ -172,7 +172,10 @@ static void init_and_reset(void) ZW_WEAK void cc_supervision_get_received_handler(SUPERVISION_GET_RECEIVED_HANDLER_ARGS * pArgs) { - UNUSED(pArgs); + // The More status updates field should be false by default. + // If an application wants to send more status updates, it should set the more status updates field to true. + const uint8_t more_status_update_this_is_last = 1; + pArgs->properties1 &= ~(CC_SUPERVISION_ADD_MORE_STATUS_UPDATE(more_status_update_this_is_last)); //The 7th bit (more status update) needs to be 0 of the property field } ZW_WEAK void cc_supervision_report_recived_handler(cc_supervision_status_t status, uint8_t duration) @@ -355,10 +358,6 @@ static received_frame_status_t CC_Supervision_handler( args.cmdClass = *(((uint8_t *)pCmd) + sizeof(ZW_SUPERVISION_GET_FRAME)); args.cmd = *(((uint8_t *)pCmd) + sizeof(ZW_SUPERVISION_GET_FRAME) + 1); args.properties1 = pCmd->ZW_SupervisionGetFrame.properties1; - // The More status updates field should be false by default. - // If an application needs to advertise more Supervision Reports, the cc_supervision_get_received_handler weak function needs to be implemented. - const uint8_t more_status_update_this_is_last = 1; - args.properties1 &= ~(CC_SUPERVISION_ADD_MORE_STATUS_UPDATE(more_status_update_this_is_last)); //The 7th bit (more status update) needs to be 0 of the property field args.rxOpt = rxOpt; args.status = status; args.duration = 0; diff --git a/protocol/z-wave/ZWave/lib/libZWaveControllerPortable_700s.a b/protocol/z-wave/ZWave/lib/libZWaveControllerPortable_700s.a index 77bb1d3389a..02995495b36 100644 --- a/protocol/z-wave/ZWave/lib/libZWaveControllerPortable_700s.a +++ b/protocol/z-wave/ZWave/lib/libZWaveControllerPortable_700s.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fec8866d1f04ddf32a23ddf9bb4358d0b21c609bc2d94afda620ee4f07ac7788 -size 11295760 +oid sha256:2d6e3b33548baad28f2db506966a768fa478460634f14c4320c75b1d58960d85 +size 11298528 diff --git a/protocol/z-wave/ZWave/lib/libZWaveControllerPortable_800s.a b/protocol/z-wave/ZWave/lib/libZWaveControllerPortable_800s.a index 9619bf52bb9..4f7d1f5b34c 100644 --- a/protocol/z-wave/ZWave/lib/libZWaveControllerPortable_800s.a +++ b/protocol/z-wave/ZWave/lib/libZWaveControllerPortable_800s.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2fb99f8b5da0391f5564841e756d0e44a74d517a790342d1dc72e94441ccdc7 -size 11220120 +oid sha256:11d0fdc631ccd1ae4c3d76dcf5bc6f9f4706b2f45ed6105d7640afc7c0c9e3ab +size 11223556 diff --git a/protocol/z-wave/ZWave/lib/libZWaveController_700s.a b/protocol/z-wave/ZWave/lib/libZWaveController_700s.a index b3317b98e39..58b85e93108 100644 --- a/protocol/z-wave/ZWave/lib/libZWaveController_700s.a +++ b/protocol/z-wave/ZWave/lib/libZWaveController_700s.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1515f1ebb0d2bad2feecaa422efd448973ad671bcdead605ace1a10813f7feed -size 5465770 +oid sha256:23c40ef04c5f2f174017247a887c047ceb1d3e024d276a7daa92c43c389d8fd7 +size 5469630 diff --git a/protocol/z-wave/ZWave/lib/libZWaveController_800s.a b/protocol/z-wave/ZWave/lib/libZWaveController_800s.a index 9e0bd822ddd..278a9f37402 100644 --- a/protocol/z-wave/ZWave/lib/libZWaveController_800s.a +++ b/protocol/z-wave/ZWave/lib/libZWaveController_800s.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb2b8cb22680d5f9e738181b880150370da82cacc8616fe5d80445c1cf9d9dd9 -size 5453244 +oid sha256:18228e36e5d1e9c592ea97ecda8702603f8045e797ec203fda19f50dc6103ebe +size 5458008 diff --git a/protocol/z-wave/ZWave/lib/libZWaveSlave_700s.a b/protocol/z-wave/ZWave/lib/libZWaveSlave_700s.a index ce6a8373c1b..61744e0b4d3 100644 --- a/protocol/z-wave/ZWave/lib/libZWaveSlave_700s.a +++ b/protocol/z-wave/ZWave/lib/libZWaveSlave_700s.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:593fcb1fce01489416ac467574ecc1396de2b0303a29be7c1c13fb599713cf16 -size 8921920 +oid sha256:3fd1a8abc7447d09af4e1903c2ad509cbb371a83d02b674fee447765b19e4d4e +size 8925284 diff --git a/protocol/z-wave/ZWave/lib/libZWaveSlave_800s.a b/protocol/z-wave/ZWave/lib/libZWaveSlave_800s.a index e8f44658a7f..3d071a9a806 100644 --- a/protocol/z-wave/ZWave/lib/libZWaveSlave_800s.a +++ b/protocol/z-wave/ZWave/lib/libZWaveSlave_800s.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:075d9513945eb16e47a8d3a83db37de177b92d9656917fee14ef91969432b410 -size 8843852 +oid sha256:293001b24ef7b50ea38cc34097a5d26b3e8fcd6b3914641ffcef67305d66ae05 +size 8847600 diff --git a/protocol/z-wave/component/zw_versions.slcc b/protocol/z-wave/component/zw_versions.slcc index 3ced79bd9e6..9d2f8c92385 100644 --- a/protocol/z-wave/component/zw_versions.slcc +++ b/protocol/z-wave/component/zw_versions.slcc @@ -16,18 +16,18 @@ define: - name: ZW_VERSION_MINOR value: 19 - name: ZW_VERSION_PATCH - value: 1 + value: 2 # Z-Wave Plus Framework and Apps - name: ZAF_VERSION_MAJOR value: 10 - name: ZAF_VERSION_MINOR value: 19 - name: ZAF_VERSION_PATCH - value: 1 + value: 2 # SDK - name: SDK_VERSION_MAJOR value: 7 - name: SDK_VERSION_MINOR value: 19 - name: SDK_VERSION_PATCH - value: 1 + value: 2 diff --git a/protocol/z-wave/esf.properties b/protocol/z-wave/esf.properties index 05dbcb3ea73..685c0f35f40 100644 --- a/protocol/z-wave/esf.properties +++ b/protocol/z-wave/esf.properties @@ -3,7 +3,7 @@ id=com.silabs.sdk.stack.zwave label=Z-Wave SDK description=Silicon Labs Z-Wave SDK for the EFR32 family -version=7.19.1.0 +version=7.19.2.0 #Build Information @@ -12,7 +12,7 @@ buildNumber=0 # Note: this particular string must be escaped -prop.subLabel=Z-Wave\\ SDK\\ 7.19.1.0 +prop.subLabel=Z-Wave\\ SDK\\ 7.19.2.0 # Path to side-package properties file extendedProperties=efr32zg13l.properties efr32zg13p.properties efr32zg13s.properties diff --git a/protocol/z-wave/platform/SiliconLabs/AppsHw/src/KeyFob/KeyFob_hw.c b/protocol/z-wave/platform/SiliconLabs/AppsHw/src/KeyFob/KeyFob_hw.c index 7fb05c5c962..1264f0829b1 100644 --- a/protocol/z-wave/platform/SiliconLabs/AppsHw/src/KeyFob/KeyFob_hw.c +++ b/protocol/z-wave/platform/SiliconLabs/AppsHw/src/KeyFob/KeyFob_hw.c @@ -1,7 +1,7 @@ /** * @file * Platform abstraction for KeyFob application - * + * * @copyright 2021 Silicon Laboratories Inc. */ #include @@ -46,7 +46,7 @@ static void button_handler(BUTTON_EVENT event, bool is_called_from_isr) if (BTN_EVENT_LONG_PRESS(BUTTON_NETWORK_ADD_REMOVE) == event) { - app_event = EVENT_APP_BUTTON_RESET; + app_event = EVENT_SYSTEM_RESET; } if (BTN_EVENT_HOLD(BUTTON_NETWORK_ADD_REMOVE) == event) { @@ -157,7 +157,7 @@ void KeyFob_hw_init(EResetReason_t reset_reason) } } -uint8_t +uint8_t CC_Battery_BatteryGet_handler(uint8_t endpoint) { uint32_t VBattery; diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg14p231f256gm32.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg14p231f256gm32.a index f451ba1142b..471b4d172f1 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg14p231f256gm32.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg14p231f256gm32.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9697876d8e9983ebdc062a2af524a3dad67d7c78fd0294ee5700c38af2663dc1 -size 708314 +oid sha256:9ee093ec539e792cbb6fe4a076ae08ad91b79d8086b9f8b54fc874a115f80891 +size 708498 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg14p731f256gm32.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg14p731f256gm32.a index a351c1cc189..6fc9862c899 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg14p731f256gm32.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg14p731f256gm32.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:818d1fecc6a7d6d0d23202d5d7b26b50b72a07be3bf8f867a758bad0de260d56 -size 708534 +oid sha256:7e70e588ed9198dcdca210c551c402d07ad480298fce4948f968e2384e32241f +size 708618 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a010f512gm40.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a010f512gm40.a index 3f9883c1160..a92bb889d2f 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a010f512gm40.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a010f512gm40.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efebf9c5d6166b804d7408440683aa7343aecc1f6d0c164d1c838478e853a37d -size 765790 +oid sha256:e2f45b76fa275dd973db6db7c0a03b2db5a0d161a9179f5daa446a998a21b05e +size 766474 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a010f512gm48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a010f512gm48.a index 5fd4540e444..260cc52fd96 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a010f512gm48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a010f512gm48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf774bcffa75e9dc28e2499616fcdb457d59cb30c0ec0c8412f27b1438abf1be -size 766062 +oid sha256:d1b1f9be8cedb123c4258896d6c0670b92518dc05409c9c1fc056c767d90e8bf +size 766742 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a020f512gm40.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a020f512gm40.a index e8e9f2daf2a..35cc2795682 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a020f512gm40.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a020f512gm40.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85ef66f4ef7b9323316b1d717a22bbc2623dcaa512e3a7fd5e1ff9189a33faf5 -size 765642 +oid sha256:becab0af25bb91d5d02a84a5f13f414005078bc784ea6ff567d408e860dd3570 +size 766174 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a020f512gm48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a020f512gm48.a index 90fbd18ec0c..3adc3c81d43 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a020f512gm48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23a020f512gm48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd1a67c5ec9942235905b8cd30564f974c9089ccd7019163e98c20cf5c373e1a -size 766114 +oid sha256:e937089cad34ea30e5473c822cc670bcfd8adbe794b4c1d9f9cbf53af69d89e0 +size 766826 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b010f512im40.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b010f512im40.a index d836f6e7650..783b27a93cb 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b010f512im40.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b010f512im40.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15f66447634d755b127573b0d9460d5009bbe630b70cfb13b94472e9eee48d35 -size 765990 +oid sha256:40af00be0478b90578de0793ffbb762918d13da7b54abe7c81fa4c39f001e363 +size 766626 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b010f512im48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b010f512im48.a index a89fe7ba2e1..df95b09d80e 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b010f512im48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b010f512im48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee86d18d635d9fd7981941b14b833d594fc7f77242e6244871fd1237771844c6 -size 766398 +oid sha256:709cacdde4e114d9000389e6d8d692bfafc976d1f060c925daad54027b7e65bb +size 766710 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b011f512im40.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b011f512im40.a index 2065e1d69e4..7f07ddfcf5e 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b011f512im40.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b011f512im40.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:107bb26e787c97518ba5b844e4d76f8703f17df0855a523f2d3531e427515ac7 -size 765986 +oid sha256:00d5efe577651b8e2f60a54066d83bfab544910eb895e0f3e74607d636267d82 +size 766630 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b020f512im40.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b020f512im40.a index e88bf2172b2..e12bb987c55 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b020f512im40.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b020f512im40.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef449ca0722edf16c00b8f6b68cfeb65f1b3d01b64a5a557302601dfbdd919ac -size 765838 +oid sha256:d74515d3a7e4913708a4620596eb5d19211d22558d17e5d619fec6d7fc524f56 +size 766450 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b020f512im48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b020f512im48.a index de8ce0e1006..17a3b4c9c67 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b020f512im48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b020f512im48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e37726c4440d6b42b97f518762a410a515f5e77b43015757986ef466aad20708 -size 766086 +oid sha256:586277917fb05cf00a3961afb78ac02dff041c30ff30703d1228b0da08f2addd +size 766878 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b021f512im40.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b021f512im40.a index 7c9b452a166..16dfc83b3c9 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b021f512im40.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg23b021f512im40.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11ae22f284fa5cad75c98f70de14f3c3452173cce84f4995ce47e1ec59e00fcd -size 765810 +oid sha256:52afcd42d24335a884c82e2f5a9b0ca63a61ef3dbc6c5eb60221b37aac6ee119 +size 766490 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a110f1024gm48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a110f1024gm48.a index a459698c7e5..ada283a0f41 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a110f1024gm48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a110f1024gm48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:660ac9a8f955c5eba76e0f39700cbb3f667a14f242d3edece5c91d395c19c4f1 -size 762246 +oid sha256:c7be53b92686316eb853f2857742ef42b778dee35f74c28f6cb429996848e8fd +size 762910 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a110f1024gm68.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a110f1024gm68.a index 76071ad3cb3..7a077805c00 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a110f1024gm68.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a110f1024gm68.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3dbbe1c51a47f7dec9c4ca764e797b65e0ffbd6eb8798255e2ae2c45ece4c6b7 -size 762218 +oid sha256:765367ed24247d07b94c86338b31fe94299d57b8470acf98bc895f1728afb382 +size 762930 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a112f1024gm48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a112f1024gm48.a index 7bd6daffdca..77ce914e2b2 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a112f1024gm48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a112f1024gm48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64a092b83bc10ba5f2cb60c6391f433d7280bfe4f65ba26fad9a3eb88f6a351e -size 762542 +oid sha256:3e817c1e86058ffd00fca0a500427553d2d88b29be03d5ad4590c6f36c5a638f +size 763162 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a112f1024gm68.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a112f1024gm68.a index a7a5857e5a0..819743300c9 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a112f1024gm68.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a112f1024gm68.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53e6e0b05feeaaf1a406e9d96506657c6c1124b88c1c75858635bc74831a93ae -size 762466 +oid sha256:c9f160dc20703fcde3e6b1b4b8906226548882ed95e1297e6ba7b501b1474945 +size 763094 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a120f1024gm48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a120f1024gm48.a index 7e88c47deab..65f6f39ce7b 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a120f1024gm48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a120f1024gm48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6a937dbc43b54d624f9670f8816e8c845b2a3b8bb52bda4253b059613b66418 -size 762106 +oid sha256:9177aa53c2dab9c94f6c4d4968e765ab4d27f6914b3ead161b9bbb96db62200a +size 762782 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a120f1024gm68.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a120f1024gm68.a index 0c8be301b83..20a44c07d90 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a120f1024gm68.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a120f1024gm68.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e1f86c18c5c8feadfb5c7be6b1412dad20713f192ffba56231de34467e684a7 -size 762022 +oid sha256:448f7783e9358e9c3b4618e1292bfbe636fca051b9e42337ea3de10aa250c086 +size 762834 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a122f1024gm48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a122f1024gm48.a index 547ed2a62f7..50ed46a9572 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a122f1024gm48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a122f1024gm48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a8bfd3fc584ad5962912f851a0fc061065626a70b5d61001797bba7d237d0deb -size 762446 +oid sha256:bbacf5b0703048ad8f978bec8eb18bd33a438a222d30726c87653d27a26e8d86 +size 762854 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a122f1024gm68.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a122f1024gm68.a index 5b464635f4e..a0052ec169d 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a122f1024gm68.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28a122f1024gm68.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab46059860ef15da10b192741b6ae3981122f180faa1339d25d2891f45dc5c5c -size 762190 +oid sha256:dba80a30cbcf05f6d4666cdb44be252d567e102466b6d43a08f167be86e565b0 +size 763014 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b310f1024im48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b310f1024im48.a index c79f9d363f5..733116cd3ea 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b310f1024im48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b310f1024im48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72a0c69397feeaf919a031b7333b56a710b006a9a35ae75a99dac5c45afddaaa -size 762594 +oid sha256:4bd23c50b98faeed8fc13f4d4cee97da2562bd27fae4a754740750641989af0e +size 763062 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b310f1024im68.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b310f1024im68.a index 4b6c1dd7786..9e804a11247 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b310f1024im68.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b310f1024im68.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67192d0389aa63f9c778d5946fc7b4c81addfbde2bdb5919e90833ce14d9b20a -size 762570 +oid sha256:49f285af5b13307f130ee4aa37cb253d0a61409a9257486cf8da5a584fa89f27 +size 763274 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b312f1024im48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b312f1024im48.a index 05670ceaca5..49729e7cee9 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b312f1024im48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b312f1024im48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ddb16aa2601aadff6b9fea0f23d7ceb15759cc4de653547f83f522ce6e2ac36 -size 762734 +oid sha256:b07fce281662b5ab79a68c491b22b18acf832b71a7dafd7fac8734584e321ac9 +size 763478 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b312f1024im68.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b312f1024im68.a index e8efe6a895f..28c5b068de1 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b312f1024im68.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b312f1024im68.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e6a5363a355ac447acc0a736eacc2740e29ad090fe3163e1251bb1dd0b51bda -size 762842 +oid sha256:679df65d3aa66622416a8c4b96b2398c381a537332cf77697eaf653b7b7705ac +size 763390 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b320f1024im48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b320f1024im48.a index 7f5529afd03..394735de334 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b320f1024im48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b320f1024im48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f27788502c9c33f84e66fa6b7e25f7388f6baea086729e1619c8b0de605454a -size 762542 +oid sha256:aca8756db9789d991089d46b8dc728c8b466195dc287105ceb598fd83ef1972f +size 763182 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b320f1024im68.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b320f1024im68.a index 1b466de9b35..c5f29f1c4ee 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b320f1024im68.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b320f1024im68.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:36b5aac4c3f3b56e499342dc39102f583f3b3aa3ae31bc63fb82227a00710f66 -size 762422 +oid sha256:147f38c17eae7483659f5a927f085050cbaa876d83666993c6cec474e8d265ee +size 763142 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b322f1024im48.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b322f1024im48.a index eb19b036b8b..86a30290573 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b322f1024im48.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b322f1024im48.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8af16fbea54cddbec04547fa42b91bd31d34a9f0c02ebd9ab5d09add5506875a -size 762658 +oid sha256:f3bc0a8c3d0330efc3db83bc138e55215ad55e0a4f2bb04130b61219eddc8cb2 +size 763386 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b322f1024im68.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b322f1024im68.a index ed5108c200f..3dc8ed5c945 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b322f1024im68.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_efr32zg28b322f1024im68.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f8d5110d22356b40ea3680361eea7b030d5b4494c30dcefda0bb658a61e817d -size 762686 +oid sha256:023d621c19991e449ae97a0f1972b0ae19575e269ff72deb56179fe86374d3d5 +size 763374 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm130s037hgn.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm130s037hgn.a index c8f7d8dbb88..4dd982e0393 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm130s037hgn.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm130s037hgn.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e985e1ac7b43ee5c862d8deded4c160ac6d9a848953d09a88849e1903adcaf64 -size 713362 +oid sha256:e7d4a63645fc9045712328fabb34b63b753b5f6c902f3ddbc2c1db9bc878dd4e +size 713606 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm130s037hgn1.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm130s037hgn1.a index c9ff0a9edac..e715acd1d66 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm130s037hgn1.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm130s037hgn1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47de656aec9a44d232ba1ab020de984818fd4c95167dd6fb889daa3d9828e684 -size 713346 +oid sha256:4bb90a09557dacc69f9eb6e5dfff2a4842b98bfe8460b30c514d3189bb8e3d16 +size 713634 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sa27hgn.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sa27hgn.a index 9447251ff96..c3287135c03 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sa27hgn.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sa27hgn.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d9bdad9a1a3d95161ca135c15170a0007d015dca13ce6c85e0eaff7dc2b35f8 -size 765782 +oid sha256:9c3efcaf9201aba9c1f0b70bc22421074669a9209601031b29e7ee440d2c7d20 +size 766578 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sa27hnn.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sa27hnn.a index b10d231ff98..6850f8e9aaf 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sa27hnn.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sa27hnn.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:983de7edcacd4bc4fd313d852bba4c228c7b237416a39428e59e85444e36e21a -size 765914 +oid sha256:e690ef5aa11419c5eca2fa7a24459515e4a479c3634953982cd8c51405d127ad +size 766542 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sb27hgn.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sb27hgn.a index f5c20f02361..1b3727e259b 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sb27hgn.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sb27hgn.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:900d0ce707f03089c9900572efa873b24ff8096da9929f8753e282c5d78188eb -size 765998 +oid sha256:2dc366edb0fd7735ca36f71f169ef75e556cdda5bd6d062f8da4e439b44e8a23 +size 766690 diff --git a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sb27hnn.a b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sb27hnn.a index 61b7cc4ec34..f7a5db99c03 100644 --- a/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sb27hnn.a +++ b/protocol/z-wave/platform/SiliconLabs/PAL/lib/libzpal_zgm230sb27hnn.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5acb5befea6d7f7c1e532d42a0a431c6c781e8bc75bf2a86b2926144c4fc1068 -size 766058 +oid sha256:9fa618a2044db23b6fedbe672a8133497543e218ed52f69f0746f125aba73888 +size 766678 diff --git a/protocol/z-wave/studio-docs/docs.xml b/protocol/z-wave/studio-docs/docs.xml index 62dd62b3e79..87e728e0646 100644 --- a/protocol/z-wave/studio-docs/docs.xml +++ b/protocol/z-wave/studio-docs/docs.xml @@ -1,12 +1,12 @@ - + This MS Excel file describes how to measure the Tx power of a Z-Wave frame and use this to calibrate the Tx Power of your final Z-Wave product. - + Describes how to use the Tiny App for upgrading Secure Element firmware. @@ -48,37 +48,37 @@ - + ZGM130S SIP Module Datasheet - + EFR32ZG14 Z-Wave 700 Modem SoC Data Sheet - + EFR32ZG14 Zen Gecko Z-Wave 700 USB Stick Bridge Module UZB-7 Data Sheet - + Describes the Test Observations (TO) that exists on the development and test tool Z-Wave Zniffer. - + Schematic for the BRD4206A Z-Wave 700 Long Range radio board with EFR32ZG14. - + ZGM130S Long Range Wireless Starter Kit User's Guide @@ -96,37 +96,37 @@ - + Discusses the latest changes to the PC-based Zniffer tool and lists new features. - + Discusses the latest changes to the PC-based Controller code and lists new features. - + Lists compatibility requirements and sources for all software components in the development environment. Discusses the latest changes to the Silicon Labs Z-Wave SDK and associated utilities, including added/deleted/deprecated features/API, and lists fixed and known issues. - + Development Material for UZB-7. - + Schematic for the BRD4207A Z-Wave 700 Long Range radio board with ZGM130S. - + PCB documentation for UZB-7 PCB. @@ -138,19 +138,19 @@ - + Z-Wave gbl files - + Important Changes in Z-Wave SDK in latest release - + Describes the Z-Wave Certification process for the Z-Wave 700 products and serves as a guide on where to find additional information. @@ -234,7 +234,7 @@ - + Z-Wave HTML documentation diff --git a/protocol/z-wave/z-wave_production_demos.xml b/protocol/z-wave/z-wave_production_demos.xml index b3695a88d13..210d9a58a09 100644 --- a/protocol/z-wave/z-wave_production_demos.xml +++ b/protocol/z-wave/z-wave_production_demos.xml @@ -6,7 +6,7 @@ - + @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -58,7 +58,7 @@ - + @@ -71,7 +71,7 @@ - + @@ -84,7 +84,7 @@ - + @@ -97,7 +97,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -123,7 +123,7 @@ - + @@ -136,7 +136,7 @@ - + @@ -149,7 +149,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -175,7 +175,7 @@ - + @@ -188,7 +188,7 @@ - + @@ -201,7 +201,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -227,7 +227,7 @@ - + @@ -240,7 +240,7 @@ - + @@ -253,7 +253,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -279,7 +279,7 @@ - + @@ -292,7 +292,7 @@ - + @@ -305,7 +305,7 @@ - + @@ -318,7 +318,7 @@ - + @@ -331,7 +331,7 @@ - + @@ -344,7 +344,7 @@ - + @@ -357,7 +357,7 @@ - + @@ -370,7 +370,7 @@ - + @@ -383,7 +383,7 @@ - + @@ -396,7 +396,7 @@ - + @@ -409,7 +409,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -435,7 +435,7 @@ - + @@ -448,7 +448,7 @@ - + @@ -462,7 +462,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -476,7 +476,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -490,7 +490,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -504,7 +504,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -518,7 +518,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -532,7 +532,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -546,7 +546,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -560,7 +560,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -574,7 +574,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -588,7 +588,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -602,7 +602,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -616,7 +616,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -630,7 +630,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -644,7 +644,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -658,7 +658,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -672,7 +672,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -686,7 +686,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -700,7 +700,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -714,7 +714,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -728,7 +728,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -742,7 +742,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -756,7 +756,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -770,7 +770,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -784,7 +784,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -797,7 +797,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -810,7 +810,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -823,7 +823,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -836,7 +836,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -849,7 +849,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -862,7 +862,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -875,7 +875,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -888,7 +888,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -901,7 +901,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -914,7 +914,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -927,7 +927,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -940,7 +940,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -953,7 +953,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -966,7 +966,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -979,7 +979,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -992,7 +992,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1005,7 +1005,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1018,7 +1018,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1031,7 +1031,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1044,7 +1044,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1057,7 +1057,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1070,7 +1070,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1083,7 +1083,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1096,7 +1096,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1109,7 +1109,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1122,7 +1122,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1135,7 +1135,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1148,7 +1148,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1161,7 +1161,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1174,7 +1174,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1187,7 +1187,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1200,7 +1200,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1213,7 +1213,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1226,7 +1226,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1239,7 +1239,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1252,7 +1252,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1265,7 +1265,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1278,7 +1278,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1291,7 +1291,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1304,7 +1304,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1317,7 +1317,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1330,7 +1330,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1343,7 +1343,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1356,7 +1356,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1369,7 +1369,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1382,7 +1382,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1395,7 +1395,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1408,7 +1408,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1421,7 +1421,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1434,7 +1434,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1447,7 +1447,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1460,7 +1460,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1473,7 +1473,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1486,7 +1486,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1499,7 +1499,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1512,7 +1512,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1525,7 +1525,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1538,7 +1538,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1551,7 +1551,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1564,7 +1564,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1577,7 +1577,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1590,7 +1590,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1603,7 +1603,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1616,7 +1616,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1629,7 +1629,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1642,7 +1642,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1655,7 +1655,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1668,7 +1668,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1681,7 +1681,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1694,7 +1694,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1707,7 +1707,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1720,7 +1720,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1733,7 +1733,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1746,7 +1746,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1759,7 +1759,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1772,7 +1772,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1785,7 +1785,7 @@ The Serial API End Device allows the user to create a product with a host applic - + @@ -1800,7 +1800,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1815,7 +1815,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1830,7 +1830,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1845,7 +1845,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1860,7 +1860,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1875,7 +1875,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1890,7 +1890,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1905,7 +1905,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1920,7 +1920,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1935,7 +1935,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1950,7 +1950,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1965,7 +1965,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1980,7 +1980,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -1993,7 +1993,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2006,7 +2006,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2019,7 +2019,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2032,7 +2032,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2045,7 +2045,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2058,7 +2058,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2071,7 +2071,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2084,7 +2084,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2097,7 +2097,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2110,7 +2110,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2123,7 +2123,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2136,7 +2136,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2149,7 +2149,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2162,7 +2162,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2175,7 +2175,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2188,7 +2188,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2201,7 +2201,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2214,7 +2214,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2227,7 +2227,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2240,7 +2240,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2253,7 +2253,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2266,7 +2266,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2279,7 +2279,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2292,7 +2292,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2305,7 +2305,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2318,7 +2318,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2331,7 +2331,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2344,7 +2344,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2357,7 +2357,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2370,7 +2370,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2383,7 +2383,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2396,7 +2396,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2409,7 +2409,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2422,7 +2422,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2435,7 +2435,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2448,7 +2448,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2461,7 +2461,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2474,7 +2474,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2487,7 +2487,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2500,7 +2500,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2513,7 +2513,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2526,7 +2526,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2539,7 +2539,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2552,7 +2552,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2565,7 +2565,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2578,7 +2578,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2591,7 +2591,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2604,7 +2604,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2617,7 +2617,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2630,7 +2630,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2643,7 +2643,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2656,7 +2656,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2669,7 +2669,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2682,7 +2682,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2695,7 +2695,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2708,7 +2708,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2721,7 +2721,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2734,7 +2734,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2747,7 +2747,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2760,7 +2760,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2773,7 +2773,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2786,7 +2786,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2799,7 +2799,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2812,7 +2812,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2825,7 +2825,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2838,7 +2838,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2851,7 +2851,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2864,7 +2864,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2877,7 +2877,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2890,7 +2890,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2903,7 +2903,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2916,7 +2916,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2929,7 +2929,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2942,7 +2942,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + @@ -2955,7 +2955,7 @@ Endpoint 2 device type - generic type light dimmer switch and specific type ligh - + diff --git a/protocol/z-wave/z-wave_test_demos.xml b/protocol/z-wave/z-wave_test_demos.xml index 936a5e64e53..f2ac82110b5 100644 --- a/protocol/z-wave/z-wave_test_demos.xml +++ b/protocol/z-wave/z-wave_test_demos.xml @@ -6,7 +6,7 @@ - + @@ -19,7 +19,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -58,7 +58,7 @@ - + @@ -71,7 +71,7 @@ - + @@ -84,7 +84,7 @@ - + @@ -97,7 +97,7 @@ - + @@ -110,7 +110,7 @@ - + @@ -123,7 +123,7 @@ - + @@ -136,7 +136,7 @@ - + @@ -149,7 +149,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -175,7 +175,7 @@ - + @@ -188,7 +188,7 @@ - + @@ -201,7 +201,7 @@ - + @@ -214,7 +214,7 @@ - + @@ -227,7 +227,7 @@ - + @@ -240,7 +240,7 @@ - + @@ -253,7 +253,7 @@ - + @@ -266,7 +266,7 @@ - + @@ -279,7 +279,7 @@ - + @@ -292,7 +292,7 @@ - + @@ -305,7 +305,7 @@ - + diff --git a/protocol/zigbee/app/ezsp-host/spi/spi-host-ui.c b/protocol/zigbee/app/ezsp-host/spi/spi-host-ui.c index b8e489ae0df..b346eb82e6d 100644 --- a/protocol/zigbee/app/ezsp-host/spi/spi-host-ui.c +++ b/protocol/zigbee/app/ezsp-host/spi/spi-host-ui.c @@ -66,10 +66,7 @@ extern char defaultStorageDirectory[OTA_FILE_STORAGE_DIR_LENGTH]; bool ezspInternalProcessCommandOptions(int argc, char *argv[], char *errStr) { int c; - char port[SPI_PORT_LEN]; - char devport[SPI_PORT_LEN]; uint8_t trace; - uint8_t portnum; int optionCount = 0; while (true) { diff --git a/protocol/zigbee/app/framework/cli/security-cli.c b/protocol/zigbee/app/framework/cli/security-cli.c index c0adad9609c..0aa644c89d4 100644 --- a/protocol/zigbee/app/framework/cli/security-cli.c +++ b/protocol/zigbee/app/framework/cli/security-cli.c @@ -220,7 +220,7 @@ void optionSecuritySetKeyRequestPolicy(sl_cli_command_arg_t *arguments) appPolicy += EZSP_DENY_APP_KEY_REQUESTS; (void)ezspSetPolicy(EZSP_TC_KEY_REQUEST_POLICY, tcPolicy); - (void)ezspSetPolicy(EZSP_APP_KEY_REQUEST_POLICY, tcPolicy); + (void)ezspSetPolicy(EZSP_APP_KEY_REQUEST_POLICY, appPolicy); #else // EZSP_HOST emberTrustCenterLinkKeyRequestPolicy = sl_cli_get_argument_uint8(arguments, 0); emberAppLinkKeyRequestPolicy = sl_cli_get_argument_uint8(arguments, 1); diff --git a/protocol/zigbee/app/framework/common/template/zigbee_stack_callback_dispatcher.c.jinja b/protocol/zigbee/app/framework/common/template/zigbee_stack_callback_dispatcher.c.jinja index 7e754a35571..79cbc102bfa 100644 --- a/protocol/zigbee/app/framework/common/template/zigbee_stack_callback_dispatcher.c.jinja +++ b/protocol/zigbee/app/framework/common/template/zigbee_stack_callback_dispatcher.c.jinja @@ -598,6 +598,24 @@ void emAfPoll( {# DEBUG #} +#ifdef EZSP_HOST +// Debug +void emAfDebug( + // debug message length + uint8_t messageLength, + // debug message + uint8_t *messageContents) +{ +(void)messageLength; +(void)messageContents; + +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "debug" -%} +{{ cb['function_name'] }}(messageLength, messageContents); +{% endif -%} +{% endfor -%} +} +#else // !EZSP_HOST // Debug void emAfDebug( // debug message @@ -611,6 +629,7 @@ void emAfDebug( {% endif -%} {% endfor -%} } +#endif // EZSP_HOST {# INCOMING_MANY_TO_ONE_ROUTE_REQUEST #} @@ -720,6 +739,33 @@ void emAfIdConflict( {# MAC_PASSTHROUGH_MESSAGE #} +#ifdef EZSP_HOST +// Mac Passthrough Message +void emAfMacPassthroughMessage( + // The type of MAC passthrough message received. + EmberMacPassthroughType messageType, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // The raw message that was received. + uint8_t *messageContents) +{ +(void)messageType; +(void)lastHopLqi; +(void)lastHopRssi; +(void)messageLength; +(void)messageContents; + +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "mac_passthrough_message" -%} +{{ cb['function_name'] }}(messageType, lastHopLqi, lastHopRssi, messageLength, messageContents); +{% endif -%} +{% endfor -%} +} +#else // !EZSP_HOST // Mac Passthrough Message void emAfMacPassthroughMessage( // The type of MAC passthrough message received. @@ -736,6 +782,7 @@ void emAfMacPassthroughMessage( {% endif -%} {% endfor -%} } +#endif // EZSP_HOST {# STACK_TOKEN_CHANGED #} @@ -944,6 +991,33 @@ void emAfDsaVerify( {# INCOMING_BOOTLOAD_MESSAGE #} +#ifdef EZSP_HOST +// Incoming Bootload Message +void emAfIncomingBootloadMessage( + // The EUI64 of the sending node. + EmberEUI64 longId, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // The bootload message that was sent. + uint8_t *messageContents) +{ +(void)longId; +(void)lastHopLqi; +(void)lastHopRssi; +(void)messageLength; +(void)messageContents; + +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "incoming_bootload_message" -%} +{{ cb['function_name'] }}(longId, lastHopLqi, lastHopRssi, messageLength, messageContents); +{% endif -%} +{% endfor -%} +} +#else // !EZSP_HOST // Incoming Bootload Message void emAfIncomingBootloadMessage( // The EUI64 of the sending node. @@ -960,9 +1034,32 @@ void emAfIncomingBootloadMessage( {% endif -%} {% endfor -%} } +#endif // EZSP_HOST {# BOOTLOAD_TRANSMIT_COMPLETE #} +#ifdef EZSP_HOST +// Bootload Transmit Complete +void emAfBootloadTransmitComplete( + // An EmberStatus value of EMBER_SUCCESS if an ACK was received from the + // destination or EMBER_DELIVERY_FAILED if no ACK was received. + EmberStatus status, + // message length. + uint8_t messageLength, + // The bootload message that was sent. + uint8_t *messageContents) +{ +(void)status; +(void)messageLength; +(void)messageContents; + +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "bootload_transmit_complete" -%} +{{ cb['function_name'] }}(status, messageLength, messageContents); +{% endif -%} +{% endfor -%} +} +#else // !EZSP_HOST // Bootload Transmit Complete void emAfBootloadTransmitComplete( // The bootload message that was sent. @@ -980,9 +1077,36 @@ void emAfBootloadTransmitComplete( {% endif -%} {% endfor -%} } +#endif // EZSP_HOST {# ZLL_NETWORK_FOUND #} +#ifdef EZSP_HOST +void emAfZllNetworkFound( + // Information about the network. + EmberZllNetwork *networkInfo, + // Used to interpret deviceInfo field. + bool isDeviceInfoNull, + // Device specific information. + EmberZllDeviceInfoRecord *deviceInfo, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi) +{ +(void)networkInfo; +(void)isDeviceInfoNull; +(void)deviceInfo; +(void)lastHopLqi; +(void)lastHopRssi; + +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "zll_network_found" -%} +{{ cb['function_name'] }}(networkInfo, isDeviceInfoNull, deviceInfo, lastHopLqi, lastHopRssi); +{% endif -%} +{% endfor -%} +} +#else // !EZSP_HOST // Zll Network Found void emAfZllNetworkFound( // Return: Information about the network. @@ -999,6 +1123,7 @@ void emAfZllNetworkFound( {% endif -%} {% endfor -%} } +#endif // EZSP_HOST {# ZLL_SCAN_COMPLETE #} @@ -1018,6 +1143,27 @@ void emAfZllScanComplete( {# ZLL_ADDRESS_ASSIGNMENT #} +#ifdef EZSP_HOST +// Zll Address Assignment +void emAfZllAddressAssignment( + // Address assignment information. + EmberZllAddressAssignment *addressInfo, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi) +{ +(void)addressInfo; +(void)lastHopLqi; +(void)lastHopRssi; + +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "zll_address_assignment" -%} +{{ cb['function_name'] }}(addressInfo, lastHopLqi, lastHopRssi); +{% endif -%} +{% endfor -%} +} +#else // !EZSP_HOST // Zll Address Assignment void emAfZllAddressAssignment( // Return: Address assignment information. @@ -1031,6 +1177,7 @@ void emAfZllAddressAssignment( {% endif -%} {% endfor -%} } +#endif // EZSP_HOST {# ZLL_TOUCH_LINK_TARGET #} @@ -1050,6 +1197,36 @@ void emAfZllTouchLinkTarget( {# MAC_FILTER_MATCH_MESSAGE #} +#ifdef EZSP_HOST +// Mac Filter Match Message +void emAfMacFilterMatchMessage( + // filter index match. + uint8_t filterIndexMatch, + // message type. + EmberMacPassthroughType messageType, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // message contents. + uint8_t *messageContents) +{ +(void)filterIndexMatch; +(void)messageType; +(void)lastHopLqi; +(void)lastHopRssi; +(void)messageLength; +(void)messageContents; + +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "mac_filter_match_message" -%} +{{ cb['function_name'] }} (filterIndexMatch, messageType, lastHopLqi, lastHopRssi, messageLength, messageContents); +{% endif -%} +{% endfor -%} +} +#else // !EZSP_HOST // Mac Filter Match Message void emAfMacFilterMatchMessage( // Return: macFilterMatchStruct. @@ -1063,6 +1240,7 @@ void emAfMacFilterMatchMessage( {% endif -%} {% endfor -%} } +#endif // EZSP_HOST {# D_GP_SENT #} diff --git a/protocol/zigbee/app/framework/common/template/zigbee_stack_callback_dispatcher.h.jinja b/protocol/zigbee/app/framework/common/template/zigbee_stack_callback_dispatcher.h.jinja index 34f3afa9758..1caae42e973 100644 --- a/protocol/zigbee/app/framework/common/template/zigbee_stack_callback_dispatcher.h.jinja +++ b/protocol/zigbee/app/framework/common/template/zigbee_stack_callback_dispatcher.h.jinja @@ -654,6 +654,25 @@ void {{ cb['function_name'] }}( {# DEBUG #} +#ifdef EZSP_HOST +// Debug +void emAfDebug( + // debug message length + uint8_t messageLength, + // debug message + uint8_t *messageContents) +; +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "debug" -%} +void {{ cb['function_name'] }}( + // debug message length + uint8_t messageLength, + // debug message + uint8_t *messageContents) +; +{% endif -%} +{% endfor -%} +#else // !EZSP_HOST // Debug void emAfDebug( // debug message @@ -667,6 +686,7 @@ void {{ cb['function_name'] }}( ; {% endif -%} {% endfor -%} +#endif // EZSP_HOST {# INCOMING_MANY_TO_ONE_ROUTE_REQUEST #} @@ -786,6 +806,37 @@ void {{ cb['function_name'] }}( {# MAC_PASSTHROUGH_MESSAGE #} +#ifdef EZSP_HOST +// Mac Passthrough Message +void emAfMacPassthroughMessage( + // The type of MAC passthrough message received. + EmberMacPassthroughType messageType, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // The raw message that was received. + uint8_t *messageContents) +; +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "mac_passthrough_message" -%} +void {{ cb['function_name'] }}( + // The type of MAC passthrough message received. + EmberMacPassthroughType messageType, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // The raw message that was received. + uint8_t *messageContents) +; +{% endif -%} +{% endfor -%} +#else // !EZSP_HOST // Mac Passthrough Message void emAfMacPassthroughMessage( // The type of MAC passthrough message received. @@ -803,6 +854,7 @@ void {{ cb['function_name'] }}( ; {% endif -%} {% endfor -%} +#endif // EZSP_HOST {# STACK_TOKEN_CHANGED #} @@ -1024,6 +1076,37 @@ void {{ cb['function_name'] }}( {# INCOMING_BOOTLOAD_MESSAGE #} +#ifdef EZSP_HOST +// Incoming Bootload Message +void emAfIncomingBootloadMessage( + // The EUI64 of the sending node. + EmberEUI64 longId, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // The bootload message that was sent. + uint8_t *messageContents) +; +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "incoming_bootload_message" -%} +void {{ cb['function_name'] }}( + // The EUI64 of the sending node. + EmberEUI64 longId, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // The bootload message that was sent. + uint8_t *messageContents) +; +{% endif -%} +{% endfor -%} +#else // !EZSP_HOST // Incoming Bootload Message void emAfIncomingBootloadMessage( // The EUI64 of the sending node. @@ -1041,9 +1124,35 @@ void {{ cb['function_name'] }}( ; {% endif -%} {% endfor -%} +#endif // EZSP_HOST {# BOOTLOAD_TRANSMIT_COMPLETE #} +#ifdef EZSP_HOST +// Bootload Transmit Complete +void emAfBootloadTransmitComplete( + // An EmberStatus value of EMBER_SUCCESS if an ACK was received from the + // destination or EMBER_DELIVERY_FAILED if no ACK was received. + EmberStatus status, + // message length. + uint8_t messageLength, + // The bootload message that was sent. + uint8_t *messageContents) +; +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "bootload_transmit_complete" -%} +void {{ cb['function_name'] }}( + // An EmberStatus value of EMBER_SUCCESS if an ACK was received from the + // destination or EMBER_DELIVERY_FAILED if no ACK was received. + EmberStatus status, + // message length. + uint8_t messageLength, + // The bootload message that was sent. + uint8_t *messageContents) +; +{% endif -%} +{% endfor -%} +#else // !EZSP_HOST // Bootload Transmit Complete void emAfBootloadTransmitComplete( // The bootload message that was sent. @@ -1063,9 +1172,41 @@ void {{ cb['function_name'] }}( ; {% endif -%} {% endfor -%} +#endif // EZSP_HOST {# ZLL_NETWORK_FOUND #} +#ifdef EZSP_HOST +// Zll Network Found +void emAfZllNetworkFound( + // Information about the network. + EmberZllNetwork *networkInfo, + // Used to interpret deviceInfo field. + bool isDeviceInfoNull, + // Device specific information. + EmberZllDeviceInfoRecord *deviceInfo, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi) +; +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "zll_network_found" -%} +void {{ cb['function_name'] }}( + // Information about the network. + EmberZllNetwork *networkInfo, + // Used to interpret deviceInfo field. + bool isDeviceInfoNull, + // Device specific information. + EmberZllDeviceInfoRecord *deviceInfo, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi) +; +{% endif -%} +{% endfor -%} +#else // !EZSP_HOST // Zll Network Found void emAfZllNetworkFound( // Return: Information about the network. @@ -1083,6 +1224,7 @@ void {{ cb['function_name'] }}( ; {% endif -%} {% endfor -%} +#endif // EZSP_HOST {# ZLL_SCAN_COMPLETE #} @@ -1102,6 +1244,29 @@ void {{ cb['function_name'] }}( {# ZLL_ADDRESS_ASSIGNMENT #} +#ifdef EZSP_HOST +// Zll Address Assignment +void emAfZllAddressAssignment( + // Address assignment information. + EmberZllAddressAssignment *addressInfo, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi) +; +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "zll_address_assignment" -%} +void {{ cb['function_name'] }}( + // Address assignment information. + EmberZllAddressAssignment *addressInfo, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi) +; +{% endif -%} +{% endfor -%} +#else // !EZSP_HOST // Zll Address Assignment void emAfZllAddressAssignment( // Return: Address assignment information. @@ -1115,6 +1280,7 @@ void {{ cb['function_name'] }}( ; {% endif -%} {% endfor -%} +#endif // EZSP_HOST {# ZLL_TOUCH_LINK_TARGET #} @@ -1134,6 +1300,41 @@ void {{ cb['function_name'] }}( {# MAC_FILTER_MATCH_MESSAGE #} +#ifdef EZSP_HOST +// Mac Filter Match Message +void emAfMacFilterMatchMessage( + // filter index match. + uint8_t filterIndexMatch, + // message type. + EmberMacPassthroughType messageType, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // message contents. + uint8_t *messageContents) +; +{% for cb in zigbee_stack_callback -%} +{% if cb['callback_type'] == "mac_filter_match_message" -%} +void {{ cb['function_name'] }}( + // filter index match. + uint8_t filterIndexMatch, + // message type. + EmberMacPassthroughType messageType, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // message contents. + uint8_t *messageContents) +; +{% endif -%} +{% endfor -%} +#else // !EZSP_HOST // Mac Filter Match Message void emAfMacFilterMatchMessage( // Return: macFilterMatchStruct. @@ -1147,6 +1348,7 @@ void {{ cb['function_name'] }}( ; {% endif -%} {% endfor -%} +#endif // EZSP_HOST {# D_GP_SENT #} diff --git a/protocol/zigbee/app/framework/common/zigbee_app_framework_callback.h b/protocol/zigbee/app/framework/common/zigbee_app_framework_callback.h index d1115efcdb5..5b14db7adcd 100644 --- a/protocol/zigbee/app/framework/common/zigbee_app_framework_callback.h +++ b/protocol/zigbee/app/framework/common/zigbee_app_framework_callback.h @@ -52,6 +52,19 @@ void emberAfIncomingMfgTestMessageCallback( // Return: uint8_t *data); +/** @brief + * Allow the application to decide if it wants to append a source route to + * packet header itself + * + * @return Added bytes + */ +uint8_t emberAfOverrideAppendSourceRouteCallback( + EmberNodeId destination, + // Return: + EmberMessageBuffer *header, + // Return: + bool *consumed); + /** @brief * A callback invoked when the status of the stack changes. If the status * parameter equals EMBER_NETWORK_UP, then the getNetworkParameters command can @@ -149,23 +162,27 @@ void emberAfDutyCycleCallback( * The NCP used the external binding modification policy to decide how to handle * a remote set binding request. The Host cannot change the current decision, but * it can change the policy for future decisions using the setPolicy command. - * - * @return ZDO response status. + * @param entry The contents of the binding entry. + * @param status ZDO status. */ -EmberZdoStatus emberAfRemoteSetBindingCallback( - // Return: The contents of the binding entry. - EmberBindingTableEntry *entry); +void emberAfRemoteSetBindingCallback( + // The contents of the binding entry. + EmberBindingTableEntry *entry, + // ZDO status. + EmberZdoStatus status); /** @brief * The NCP used the external binding modification policy to decide how to handle * a remote delete binding request. The Host cannot change the current decision, * but it can change the policy for future decisions using the setPolicy command. - * - * @return ZDO response status + * @param index The index of the binding whose deletion was requested. + * @param status ZDO status */ -EmberZdoStatus emberAfRemoteDeleteBindingCallback( +void emberAfRemoteDeleteBindingCallback( // The index of the binding whose deletion was requested. - uint8_t index); + uint8_t index, + // ZDO status + EmberZdoStatus status); /** @brief * Indicates the result of a data poll to the parent of the local node. @@ -196,15 +213,18 @@ void emberAfPollCallback( /** @brief * debugHandler - * @param message debug message + * @param messageLength debug message length + * @param messageContents debug message */ void emberAfDebugCallback( + // debug message length + uint8_t messageLength, // debug message - EmberMessageBuffer message); + uint8_t *messageContents); /** @brief * A callback indicating that a many-to-one route to the concentrator with the - * given short and long id is available for use. + * given short and long ID is available for use. * @param source The short id of the concentrator. * @param longId The EUI64 of the concentrator. * @param cost The path cost to the concentrator. The cost may decrease as @@ -282,13 +302,22 @@ void emberAfIdConflictCallback( * A callback invoked by the EmberZNet stack when a MAC passthrough message is * received. * @param messageType The type of MAC passthrough message received. - * @param message The raw message that was received. + * @param lastHopLqi last hop LQI. + * @param lastHopRssi last hop RSSI. + * @param messageLength message length. + * @param messageContents The raw message that was received. */ void emberAfMacPassthroughMessageCallback( // The type of MAC passthrough message received. EmberMacPassthroughType messageType, + // last hop LQI. + uint8_t lastHopLqi, + // last hop RSSI. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, // The raw message that was received. - EmberMessageBuffer message); + uint8_t *messageContents); /** @brief * A callback invoked to inform the application that a stack token has changed. @@ -317,12 +346,13 @@ void emberAfCounterRolloverCallback( /** @brief * A callback invoked by the EmberZNet stack when the MAC has finished * transmitting a raw message. - * @param message message + * @param message message, message always returns EMBER_NULL_MESSAGE_BUFFER on + host * @param status EMBER_SUCCESS if the transmission was successful, or EMBER_DELIVERY_FAILED if not */ void emberAfRawTransmitCompleteCallback( - // message + // message, message always returns EMBER_NULL_MESSAGE_BUFFER on host EmberMessageBuffer message, // EMBER_SUCCESS if the transmission was successful, or // EMBER_DELIVERY_FAILED if not @@ -391,15 +421,18 @@ void emberAfCalculateSmacsCallback( * type indicator that replaced the startIndex field for the signing) and both * are returned via this callback. * @param status The result of the DSA signing operation. - * @param signedMessage The message and attached which includes the original + * @param messageLength The length of message. + * @param messageContents The message and attached which includes the original message and the appended signature. */ void emberAfDsaSignCallback( // The result of the DSA signing operation. EmberStatus status, + // The length of message. + uint8_t messageLength, // The message and attached which includes the original message and the // appended signature. - EmberMessageBuffer signedMessage); + uint8_t *messageContents); /** @brief * This callback is executed by the stack when the DSA verification has completed @@ -416,41 +449,64 @@ void emberAfDsaVerifyCallback( /** @brief * A callback invoked by the EmberZNet stack when a bootload message is received. * @param longId The EUI64 of the sending node. - * @param message The bootload message that was sent. + * @param lastHopLqi last hop LQI. + * @param lastHopRssi last hop RSSI. + * @param messageLength message length. + * @param messageContents The bootload message that was sent. */ void emberAfIncomingBootloadMessageCallback( // The EUI64 of the sending node. EmberEUI64 longId, + // last hop LQI. + uint8_t lastHopLqi, + // last hop RSSI. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, // The bootload message that was sent. - EmberMessageBuffer message); + uint8_t *messageContents); /** @brief * A callback invoked by the EmberZNet stack when the MAC has finished * transmitting a bootload message. - * @param message The bootload message that was sent. * @param status An EmberStatus value of EMBER_SUCCESS if an ACK was received from the destination or EMBER_DELIVERY_FAILED if no ACK was received. + * @param messageLength message length. + * @param messageContents The bootload message that was sent. */ void emberAfBootloadTransmitCompleteCallback( - // The bootload message that was sent. - EmberMessageBuffer message, // An EmberStatus value of EMBER_SUCCESS if an ACK was received from the // destination or EMBER_DELIVERY_FAILED if no ACK was received. - EmberStatus status); + EmberStatus status, + // message length. + uint8_t messageLength, + // The bootload message that was sent. + uint8_t *messageContents); /** @brief - * This call is fired when a ZLL network scan finds a ZLL network. + * This callback is invoked when a ZLL network scan finds a ZLL network. + * @param isDeviceInfoNull Used to interpret deviceInfo field. + * @param lastHopLqi The link quality from the node that last relayed the + message. + * @param lastHopRssi The energy level (in units of dBm) observed during + reception. * @return networkInfo Information about the network. * @return deviceInfo Device specific information. */ void emberAfZllNetworkFoundCallback( + // Used to interpret deviceInfo field. + bool isDeviceInfoNull, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi, // Return: Information about the network. const EmberZllNetwork *networkInfo, // Return: Device specific information. const EmberZllDeviceInfoRecord *deviceInfo); /** @brief - * This call is fired when a ZLL network scan is complete. + * This callback is invoked when a ZLL network scan is complete. * @param status Status of the operation. */ void emberAfZllScanCompleteCallback( @@ -458,16 +514,24 @@ void emberAfZllScanCompleteCallback( EmberStatus status); /** @brief - * This call is fired when network and group addresses are assigned to a remote + * This callback is invoked when network and group addresses are assigned to a remote * mode in a network start or network join request. + * @param lastHopLqi The link quality from the node that last relayed the + message. + * @param lastHopRssi The energy level (in units of dBm) observed during + reception. * @return addressInfo Address assignment information. */ void emberAfZllAddressAssignmentCallback( + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi, // Return: Address assignment information. const EmberZllAddressAssignment *addressInfo); /** @brief - * This call is fired when the device is a target of a touch link. + * This callback is invoked when the device is a target of a touch link. * @return networkInfo Information about the network. */ void emberAfZllTouchLinkTargetCallback( @@ -477,11 +541,26 @@ void emberAfZllTouchLinkTargetCallback( /** @brief * A callback invoked by the EmberZNet stack when a raw MAC message that has * matched one of the application's configured MAC filters. - * @return macFilterMatchStruct macFilterMatchStruct. + * @param filterIndexMatch filter index match. + * @param messageType message type. + * @param lastHopLqi last hop LQI. + * @param lastHopRssi last hop RSSI. + * @param messageLength message length. + * @param messageContents message contents. */ void emberAfMacFilterMatchMessageCallback( - // Return: macFilterMatchStruct. - const EmberMacFilterMatchStruct *macFilterMatchStruct); + // filter index match. + uint8_t filterIndexMatch, + // message type. + EmberMacPassthroughType messageType, + // last hop LQI. + uint8_t lastHopLqi, + // last hop RSSI. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // message contents. + uint8_t *messageContents); /** @brief * A callback to the GP endpoint to indicate the result of the GPDF transmission. diff --git a/protocol/zigbee/app/framework/common/zigbee_app_framework_host_cb.c b/protocol/zigbee/app/framework/common/zigbee_app_framework_host_cb.c index 92bb259c1fc..34ff034e50e 100644 --- a/protocol/zigbee/app/framework/common/zigbee_app_framework_host_cb.c +++ b/protocol/zigbee/app/framework/common/zigbee_app_framework_host_cb.c @@ -24,6 +24,19 @@ #define emberAfPopNetworkIndex() #endif +#if defined(EMBER_AF_PRINT_SECURITY) || defined(SL_CATALOG_ZIGBEE_DEBUG_PRINT_PRESENT) +// Corresponds to the EmberJoinDecision status codes +static const char * joinDecisionText[] = { + EMBER_JOIN_DECISION_STRINGS +}; + +// Corresponds to the EmberDeviceUpdate status codes +static const char * deviceUpdateText[] = { + EMBER_DEVICE_UPDATE_STRINGS +}; + +#endif // EMBER_AF_PRINT_APP + // ----------------------------------------------------------------------------- // A callback invoked when receiving a message. void ezspIncomingMessageHandler( @@ -526,6 +539,24 @@ void ezspPollCompleteHandler( } // ----------------------------------------------------------------------------- +// Weak implementation of public callback emberAfDsaSignCallback +// The handler that returns the results of the signing operation. On success, +// the signature will be appended to the original message (including the +// signature type indicator that replaced the startIndex field for the signing) +// and both are returned via this callback. +WEAK(void emberAfDsaSignCallback( + // The result of the DSA signing operation. + EmberStatus status, + // The length of message. + uint8_t messageLength, + // The message and attached which includes the original message and the + // appended signature. + uint8_t *messageContents)) +{ + (void)status; + (void)messageLength; + (void)messageContents; +} // Indicates the completion of a DSA signature operation. void ezspDsaSignHandler( @@ -538,6 +569,7 @@ void ezspDsaSignHandler( { emberAfPushCallbackNetworkIndex(); emAfDsaSign(status, messageLength, message); + emberAfDsaSignCallback(status, messageLength, message); emberAfPopNetworkIndex(); } @@ -561,5 +593,603 @@ void ezspTrustCenterJoinHandler(EmberNodeId newNodeId, parentOfNewNode, status, policyDecision); +#if defined(EMBER_AF_PRINT_SECURITY) || defined(UC_BUILD) + emberAfSecurityPrintln("Trust Center Join Handler: status = %p, decision = %p (%x), shortid 0x%2x", + deviceUpdateText[status], + joinDecisionText[policyDecision], + policyDecision, + newNodeId); + emberAfSecurityFlush(); +#endif + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfZllTouchLinkTargetCallback +WEAK(void emberAfZllTouchLinkTargetCallback( + // Return: Information about the network. + const EmberZllNetwork *networkInfo)) +{ + (void)networkInfo; +} + +// This call is fired when the device is a target of a touch link. +void ezspZllTouchLinkTargetHandler( + // Return: Information about the network. + EmberZllNetwork *networkInfo) +{ + emberAfPushCallbackNetworkIndex(); + emAfZllTouchLinkTarget(networkInfo); + emberAfZllTouchLinkTargetCallback(networkInfo); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfStackTokenChangedCallback +WEAK(void emberAfStackTokenChangedCallback( + // The address of the stack token that has changed. + uint16_t tokenAddress)) +{ + (void)tokenAddress; +} + +void ezspStackTokenChangedHandler(uint16_t tokenAddress) +{ + emberAfPushCallbackNetworkIndex(); + emAfStackTokenChanged(tokenAddress); + emberAfStackTokenChangedCallback(tokenAddress); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfDsaVerifyCallback +WEAK(void emberAfDsaVerifyCallback( + // The result of the DSA verification operation. + EmberStatus status)) +{ + (void)status; +} + +void ezspDsaVerifyHandler(EmberStatus status) +{ + emberAfPushCallbackNetworkIndex(); + emAfDsaVerify(status); + emberAfDsaVerifyCallback(status); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfIncomingNetworkStatusCallback +WEAK(void emberAfIncomingNetworkStatusCallback( + // One byte over-the-air error code from network status message + uint8_t errorCode, + // The short ID of the remote node + EmberNodeId target)) +{ + (void)errorCode; + (void)target; +} + +void ezspIncomingNetworkStatusHandler(uint8_t errorCode, EmberNodeId target) +{ + emberAfPushCallbackNetworkIndex(); + emAfIncomingNetworkStatus(errorCode, target); + emberAfIncomingNetworkStatusCallback(errorCode, target); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfIncomingRouteErrorCallback +WEAK(void emberAfIncomingRouteErrorCallback( + // EMBER_SOURCE_ROUTE_FAILURE or EMBER_MANY_TO_ONE_ROUTE_FAILURE. + EmberStatus status, + // The short id of the remote node. + EmberNodeId target)) +{ + (void)status; + (void)target; +} + +void ezspIncomingRouteErrorHandler(EmberStatus status, EmberNodeId target) +{ + emberAfPushCallbackNetworkIndex(); + emAfIncomingRouteError(status, target); + emberAfIncomingRouteErrorCallback(status, target); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +//emberAfIncomingManyToOneRouteRequestCallback +WEAK(void emberAfIncomingManyToOneRouteRequestCallback( + // The short id of the concentrator. + EmberNodeId source, + // The EUI64 of the concentrator. + EmberEUI64 longId, + // The path cost to the concentrator. The cost may decrease as additional + // route request packets for this discovery arrive, but the callback is + // made only once. + uint8_t cost)) +{ + (void)source; + (void)longId; + (void)cost; +} + +void ezspIncomingManyToOneRouteRequestHandler(EmberNodeId source, + EmberEUI64 longId, + uint8_t cost) +{ + emberAfPushCallbackNetworkIndex(); + emAfIncomingManyToOneRouteRequest(source, longId, cost); + emberAfIncomingManyToOneRouteRequestCallback(source, longId, cost); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfIdConflictCallback +WEAK(void emberAfIdConflictCallback( + // The short id for which a conflict was detected + EmberNodeId conflictingId)) +{ + (void)conflictingId; +} + +void ezspIdConflictHandler(EmberNodeId id) +{ + emberAfPushCallbackNetworkIndex(); + emAfIdConflict(id); + emberAfIdConflictCallback(id); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfTimerCallback +WEAK(void emberAfTimerCallback( + // Which timer generated the callback (0 or 1). + uint8_t timerId)) +{ + (void)timerId; +} + +void ezspTimerHandler(uint8_t timerId) +{ + emberAfPushCallbackNetworkIndex(); + emAfTimer(timerId); + emberAfTimerCallback(timerId); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfCounterRolloverCallback +WEAK(void emberAfCounterRolloverCallback( + // Type of Counter + EmberCounterType type)) +{ + (void)type; +} + +void ezspCounterRolloverHandler(EmberCounterType type) +{ + emberAfPushCallbackNetworkIndex(); + emAfCounterRollover(type); + emberAfCounterRolloverCallback(type); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfZllAddressAssignmentCallback +WEAK(void emberAfZllAddressAssignmentCallback( + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi, + // Return: Address assignment information. + const EmberZllAddressAssignment *addressInfo)) +{ + (void)lastHopLqi; + (void)lastHopRssi; + (void)addressInfo; +} + +// This call is fired when network and group addresses are assigned to a remote +// mode in a network start or network join request. +void ezspZllAddressAssignmentHandler( + // Address assignment information. + EmberZllAddressAssignment *addressInfo, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi) +{ + emberAfPushCallbackNetworkIndex(); + emAfZllAddressAssignment(addressInfo, lastHopLqi, lastHopRssi); + emberAfZllAddressAssignmentCallback(lastHopLqi, lastHopRssi, addressInfo); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfZllScanCompleteCallback +WEAK(void emberAfZllScanCompleteCallback( + // Status of the operation. + EmberStatus status)) +{ + (void)status; +} + +// This call is fired when a ZLL network scan is complete. +void ezspZllScanCompleteHandler( + // Status of the operation. + EmberStatus status) +{ + emberAfPushCallbackNetworkIndex(); + emAfZllScanComplete(status); + emberAfZllScanCompleteCallback(status); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfZllNetworkFoundCallback +WEAK(void emberAfZllNetworkFoundCallback( + // Used to interpret deviceInfo field. + bool isDeviceInfoNull, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi, + // Return: Information about the network. + const EmberZllNetwork *networkInfo, + // Return: Device specific information. + const EmberZllDeviceInfoRecord *deviceInfo)) +{ + (void)networkInfo; + (void)isDeviceInfoNull; + (void)deviceInfo; + (void)lastHopLqi; + (void)lastHopRssi; +} + +// This call is fired when a ZLL network scan finds a ZLL network. +void ezspZllNetworkFoundHandler( + // Information about the network. + EmberZllNetwork *networkInfo, + // Used to interpret deviceInfo field. + bool isDeviceInfoNull, + // Device specific information. + EmberZllDeviceInfoRecord *deviceInfo, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi) +{ + emberAfPushCallbackNetworkIndex(); + emAfZllNetworkFound(networkInfo, isDeviceInfoNull, deviceInfo, lastHopLqi, lastHopRssi); + emberAfZllNetworkFoundCallback(isDeviceInfoNull, lastHopLqi, lastHopRssi, networkInfo, deviceInfo); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +WEAK(void emberAfDebugCallback( + // debug message length + uint8_t messageLength, + // debug message + uint8_t *messageContents)) +{ + (void)messageLength; + (void)messageContents; +} + +void ezspDebugHandler(uint8_t messageLength, + uint8_t *messageContents) +{ + emberAfPushCallbackNetworkIndex(); + emAfDebug(messageLength, messageContents); + emberAfDebugCallback(messageLength, messageContents); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfRawTransmitCompleteCallback +WEAK(void emberAfRawTransmitCompleteCallback( + // message + EmberMessageBuffer message, + // EMBER_SUCCESS if the transmission was successful, or + // EMBER_DELIVERY_FAILED if not + EmberStatus status)) +{ + (void)message; + (void)status; +} + +void ezspRawTransmitCompleteHandler(EmberStatus status) +{ + emberAfPushCallbackNetworkIndex(); + emAfRawTransmitComplete(0, status); + emberAfRawTransmitCompleteCallback(0, status); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfMacFilterMatchMessageCallback +WEAK(void emberAfMacFilterMatchMessageCallback( + // filter index match. + uint8_t filterIndexMatch, + // message type. + EmberMacPassthroughType messageType, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // message contents. + uint8_t *messageContents)) +{ + (void)filterIndexMatch; + (void)messageType; + (void)lastHopLqi; + (void)lastHopRssi; + (void)messageLength; + (void)messageContents; +} + +void ezspMacFilterMatchMessageHandler(uint8_t filterIndexMatch, + uint8_t legacyPassthroughType, + uint8_t lastHopLqi, + int8_t lastHopRssi, + uint8_t messageLength, + uint8_t *messageContents) +{ + emberAfPushCallbackNetworkIndex(); + emAfMacFilterMatchMessage(filterIndexMatch, legacyPassthroughType, lastHopLqi, lastHopRssi, messageLength, messageContents); + emberAfMacFilterMatchMessageCallback(filterIndexMatch, legacyPassthroughType, lastHopLqi, lastHopRssi, messageLength, messageContents); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +WEAK(void emberAfMacPassthroughMessageCallback( + // The type of MAC passthrough message received. + EmberMacPassthroughType messageType, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // The raw message that was received. + uint8_t *messageContents)) +{ + (void)messageType; + (void)lastHopLqi; + (void)lastHopRssi; + (void)messageLength; + (void)messageContents; +} + +void ezspMacPassthroughMessageHandler(uint8_t messageType, + uint8_t lastHopLqi, + int8_t lastHopRssi, + uint8_t messageLength, + uint8_t *messageContents) +{ + emberAfPushCallbackNetworkIndex(); + emAfMacPassthroughMessage(messageType, lastHopLqi, lastHopRssi, messageLength, messageContents); + emberAfMacPassthroughMessageCallback(messageType, lastHopLqi, lastHopRssi, messageLength, messageContents); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +WEAK(void emberAfBootloadTransmitCompleteCallback( + // An EmberStatus value of EMBER_SUCCESS if an ACK was received from the + // destination or EMBER_DELIVERY_FAILED if no ACK was received. + EmberStatus status, + // message length. + uint8_t messageLength, + // The bootload message that was sent. + uint8_t *messageContents)) +{ + (void)status; + (void)messageLength; + (void)messageContents; +} + +void ezspBootloadTransmitCompleteHandler(EmberStatus status, + uint8_t messageLength, + uint8_t *messageContents) +{ + emberAfPushCallbackNetworkIndex(); + emAfBootloadTransmitComplete(status, messageLength, messageContents); + emberAfBootloadTransmitCompleteCallback(status, messageLength, messageContents); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfIncomingBootloadMessageCallback +WEAK(void emberAfIncomingBootloadMessageCallback( + // The EUI64 of the sending node. + EmberEUI64 longId, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // The bootload message that was sent. + uint8_t *messageContents)) +{ + (void)longId; + (void)lastHopLqi; + (void)lastHopRssi; + (void)messageLength; + (void)messageContents; +} + +void ezspIncomingBootloadMessageHandler(EmberEUI64 longId, + uint8_t lastHopLqi, + int8_t lastHopRssi, + uint8_t messageLength, + uint8_t *messageContents) +{ + emberAfPushCallbackNetworkIndex(); + emAfIncomingBootloadMessage(longId, lastHopLqi, lastHopRssi, messageLength, messageContents); + emberAfIncomingBootloadMessageCallback(longId, lastHopLqi, lastHopRssi, messageLength, messageContents); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfPollCallback +WEAK(void emberAfPollCallback( + // The node ID of the child that is requesting data. + EmberNodeId childId, + // True if transmit expected, false otherwise. + bool transmitExpected)) +{ + (void)childId; + (void)transmitExpected; +} + +void ezspPollHandler(EmberNodeId childId, bool transmitExpected) +{ + emberAfPushCallbackNetworkIndex(); + emAfPoll(childId, transmitExpected); + emberAfPollCallback(childId, transmitExpected); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfRemoteDeleteBindingCallback +WEAK(void emberAfRemoteDeleteBindingCallback( + // The index of the binding whose deletion was requested. + uint8_t index, + // ZDO response status + EmberZdoStatus status)) +{ + (void)index; + (void)status; + return; +} + +void ezspRemoteDeleteBindingHandler(uint8_t index, + EmberStatus policyDecision) +{ + emberAfPushCallbackNetworkIndex(); + emAfRemoteDeleteBinding(index); + emberAfRemoteDeleteBindingCallback(index, policyDecision); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfRemoteSetBindingCallback +WEAK(void emberAfRemoteSetBindingCallback( + // The contents of the binding entry. + EmberBindingTableEntry *entry, + // ZDO status. + EmberZdoStatus status)) +{ + (void)entry; + (void)status; + return; +} + +void ezspRemoteSetBindingHandler(EmberBindingTableEntry *entry, + uint8_t index, + EmberStatus policyDecision) +{ + emberAfPushCallbackNetworkIndex(); + emAfRemoteSetBinding(entry); + emberAfRemoteSetBindingCallback(entry, policyDecision); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback +//emberAfCalculateSmacsHandler283k1Callback +WEAK(void emberAfCalculateSmacsHandler283k1Callback( + // The Result of the CBKE operation. + EmberStatus status, + // Return: The calculated value of the initiator's SMAC + EmberSmacData *initiatorSmac, + // Return: The calculated value of the responder's SMAC + EmberSmacData *responderSmac)) +{ + (void)status; + (void)initiatorSmac; + (void)responderSmac; +} + +void ezspCalculateSmacsHandler283k1(EmberStatus status, + EmberSmacData* initiatorSmac, + EmberSmacData* responderSmac) +{ + emberAfPushCallbackNetworkIndex(); + emAfCalculateSmacsHandler283k1(status, initiatorSmac, responderSmac); + emberAfCalculateSmacsHandler283k1Callback(status, initiatorSmac, responderSmac); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback +//emberAfGenerateCbkeKeysHandler283k1Callback +WEAK(void emberAfGenerateCbkeKeysHandler283k1Callback( + // The result of the CBKE operation. + EmberStatus status, + // Return: The generated ephemeral public key. + EmberPublicKey283k1Data *ephemeralPublicKey)) +{ + (void)status; + (void)ephemeralPublicKey; +} + +void ezspGenerateCbkeKeysHandler283k1(EmberStatus status, + EmberPublicKey283k1Data* ephemeralPublicKey) +{ + emberAfPushCallbackNetworkIndex(); + emAfGenerateCbkeKeysHandler283k1(status, ephemeralPublicKey); + emberAfGenerateCbkeKeysHandler283k1Callback(status, ephemeralPublicKey); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfCalculateSmacsCallback +WEAK(void emberAfCalculateSmacsCallback( + // The Result of the CBKE operation. + EmberStatus status, + // Return: The calculated value of the initiator's SMAC + EmberSmacData *initiatorSmac, + // Return: The calculated value of the responder's SMAC + EmberSmacData *responderSmac)) +{ + (void)status; + (void)initiatorSmac; + (void)responderSmac; +} + +void ezspCalculateSmacsHandler(EmberStatus status, + EmberSmacData* initiatorSmac, + EmberSmacData* responderSmac) +{ + emberAfPushCallbackNetworkIndex(); + emAfCalculateSmacs(status, initiatorSmac, responderSmac); + emberAfCalculateSmacsCallback(status, initiatorSmac, responderSmac); + emberAfPopNetworkIndex(); +} + +// ----------------------------------------------------------------------------- +// Weak implementation of public Callback emberAfGenerateCbkeKeysCallback +WEAK(void emberAfGenerateCbkeKeysCallback( + // The result of the CBKE operation. + EmberStatus status, + // Return: The generated ephemeral public key. + EmberPublicKeyData *ephemeralPublicKey)) +{ + (void)status; + (void)ephemeralPublicKey; +} + +void ezspGenerateCbkeKeysHandler(EmberStatus status, + EmberPublicKeyData* ephemeralPublicKey) +{ + emberAfPushCallbackNetworkIndex(); + emAfGenerateCbkeKeys(status, ephemeralPublicKey); + emberAfGenerateCbkeKeysCallback(status, ephemeralPublicKey); emberAfPopNetworkIndex(); } diff --git a/protocol/zigbee/app/framework/common/zigbee_app_framework_stack_cb.c b/protocol/zigbee/app/framework/common/zigbee_app_framework_stack_cb.c index a1ed424f906..cd0a4526224 100644 --- a/protocol/zigbee/app/framework/common/zigbee_app_framework_stack_cb.c +++ b/protocol/zigbee/app/framework/common/zigbee_app_framework_stack_cb.c @@ -485,12 +485,15 @@ void emberDutyCycleHandler( // ----------------------------------------------------------------------------- // Weak implementation of public Callback emberAfRemoteSetBindingCallback -WEAK(EmberZdoStatus emberAfRemoteSetBindingCallback( - // Return: The contents of the binding entry. - EmberBindingTableEntry *entry)) +WEAK(void emberAfRemoteSetBindingCallback( + // The contents of the binding entry. + EmberBindingTableEntry *entry, + // ZDO status. + EmberZdoStatus status)) { (void)entry; - return EMBER_ZDP_TABLE_FULL; + (void)status; + return; } // Weak implementation of emAfRemoteSetBindingCallback @@ -515,19 +518,22 @@ EmberZdoStatus emberRemoteSetBindingHandler( emberAfPushCallbackNetworkIndex(); ret = emAfRemoteSetBindingCallback(entry); emAfRemoteSetBinding(entry); - emberAfRemoteSetBindingCallback(entry); + emberAfRemoteSetBindingCallback(entry, ret); emberAfPopNetworkIndex(); return ret; } // ----------------------------------------------------------------------------- // Weak implementation of public Callback emberAfRemoteDeleteBindingCallback -WEAK(EmberZdoStatus emberAfRemoteDeleteBindingCallback( +WEAK(void emberAfRemoteDeleteBindingCallback( // The index of the binding whose deletion was requested. - uint8_t index)) + uint8_t index, + // ZDO response status + EmberZdoStatus status)) { (void)index; - return EMBER_ZDP_TABLE_FULL; + (void)status; + return; } // Weak implementation of emAfRemoteDeleteBindingCallback @@ -552,7 +558,7 @@ EmberZdoStatus emberRemoteDeleteBindingHandler( emberAfPushCallbackNetworkIndex(); ret = emAfRemoteDeleteBindingCallback(index); emAfRemoteDeleteBinding(index); - emberAfRemoteDeleteBindingCallback(index); + emberAfRemoteDeleteBindingCallback(index, ret); emberAfPopNetworkIndex(); return ret; } @@ -613,10 +619,13 @@ void emberPollHandler( // ----------------------------------------------------------------------------- // Weak implementation of public Callback emberAfDebugCallback WEAK(void emberAfDebugCallback( + // debug message length + uint8_t messageLength, // debug message - EmberMessageBuffer message)) + uint8_t *messageContents)) { - (void)message; + (void)messageLength; + (void)messageContents; } // debugHandler @@ -626,7 +635,9 @@ void emberDebugHandler( { emberAfPushCallbackNetworkIndex(); emAfDebug(message); - emberAfDebugCallback(message); + uint8_t messageLength = emGetBufferLength(message); + uint8_t *messageContents = emGetBufferPointer(message); + emberAfDebugCallback(messageLength, messageContents); emberAfPopNetworkIndex(); } @@ -788,11 +799,20 @@ void emberIdConflictHandler( WEAK(void emberAfMacPassthroughMessageCallback( // The type of MAC passthrough message received. EmberMacPassthroughType messageType, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, // The raw message that was received. - EmberMessageBuffer message)) + uint8_t *messageContents)) { (void)messageType; - (void)message; + (void)lastHopLqi; + (void)lastHopRssi; + (void)messageLength; + (void)messageContents; } // A callback invoked by the EmberZNet stack when a MAC passthrough message is @@ -803,9 +823,15 @@ void emberMacPassthroughMessageHandler( // The raw message that was received. EmberMessageBuffer message) { + int8_t lastHopRssi = 0; + uint8_t lastHopLqi = 0; emberAfPushCallbackNetworkIndex(); emAfMacPassthroughMessage(messageType, message); - emberAfMacPassthroughMessageCallback(messageType, message); + emberGetLastHopRssi(&lastHopRssi); + emberGetLastHopLqi(&lastHopLqi); + uint8_t messageLength = emGetBufferLength(message); + uint8_t *messageContents = emGetBufferPointer(message); + emberAfMacPassthroughMessageCallback(messageType, lastHopLqi, lastHopRssi, messageLength, messageContents); emberAfPopNetworkIndex(); } @@ -1015,12 +1041,15 @@ void emberCalculateSmacsHandler( WEAK(void emberAfDsaSignCallback( // The result of the DSA signing operation. EmberStatus status, + // The length of message. + uint8_t messageLength, // The message and attached which includes the original message and the // appended signature. - EmberMessageBuffer signedMessage)) + uint8_t *messageContents)) { (void)status; - (void)signedMessage; + (void)messageLength; + (void)messageContents; } // The handler that returns the results of the signing operation. On success, @@ -1036,7 +1065,9 @@ void emberDsaSignHandler( { emberAfPushCallbackNetworkIndex(); emAfDsaSign(status, signedMessage); - emberAfDsaSignCallback(status, signedMessage); + uint8_t messageLength = emGetBufferLength(signedMessage); + uint8_t *messageContents = emGetBufferPointer(signedMessage); + emberAfDsaSignCallback(status, messageLength, messageContents); emberAfPopNetworkIndex(); } @@ -1069,11 +1100,20 @@ void emberDsaVerifyHandler( WEAK(void emberAfIncomingBootloadMessageCallback( // The EUI64 of the sending node. EmberEUI64 longId, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, // The bootload message that was sent. - EmberMessageBuffer message)) + uint8_t *messageContents)) { (void)longId; - (void)message; + (void)lastHopLqi; + (void)lastHopRssi; + (void)messageLength; + (void)messageContents; } // A callback invoked by the EmberZNet stack when a bootload message is @@ -1086,7 +1126,13 @@ void emberIncomingBootloadMessageHandler( { emberAfPushCallbackNetworkIndex(); emAfIncomingBootloadMessage(longId, message); - emberAfIncomingBootloadMessageCallback(longId, message); + uint8_t lastHopLqi = 0; + int8_t lastHopRssi = 0; + emberGetLastHopRssi(&lastHopRssi); + emberGetLastHopLqi(&lastHopLqi); + uint8_t messageLength = emGetBufferLength(message); + uint8_t *messageContents = emGetBufferPointer(message); + emberAfIncomingBootloadMessageCallback(longId, lastHopLqi, lastHopRssi, messageLength, messageContents); emberAfPopNetworkIndex(); } @@ -1094,14 +1140,17 @@ void emberIncomingBootloadMessageHandler( // Weak implementation of public Callback //emberAfBootloadTransmitCompleteCallback WEAK(void emberAfBootloadTransmitCompleteCallback( - // The bootload message that was sent. - EmberMessageBuffer message, // An EmberStatus value of EMBER_SUCCESS if an ACK was received from the // destination or EMBER_DELIVERY_FAILED if no ACK was received. - EmberStatus status)) + EmberStatus status, + // message length. + uint8_t messageLength, + // The bootload message that was sent. + uint8_t *messageContents)) { - (void)message; (void)status; + (void)messageLength; + (void)messageContents; } // A callback invoked by the EmberZNet stack when the MAC has finished @@ -1115,20 +1164,31 @@ void emberBootloadTransmitCompleteHandler( { emberAfPushCallbackNetworkIndex(); emAfBootloadTransmitComplete(message, status); - emberAfBootloadTransmitCompleteCallback(message, status); + uint8_t messageLength = emGetBufferLength(message); + uint8_t *messageContents = emGetBufferPointer(message); + emberAfBootloadTransmitCompleteCallback(status, messageLength, messageContents); emberAfPopNetworkIndex(); } // ----------------------------------------------------------------------------- // Weak implementation of public Callback emberAfZllNetworkFoundCallback WEAK(void emberAfZllNetworkFoundCallback( + // Used to interpret deviceInfo field. + bool isDeviceInfoNull, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi, // Return: Information about the network. const EmberZllNetwork *networkInfo, // Return: Device specific information. const EmberZllDeviceInfoRecord *deviceInfo)) { (void)networkInfo; + (void)isDeviceInfoNull; (void)deviceInfo; + (void)lastHopLqi; + (void)lastHopRssi; } // This call is fired when a ZLL network scan finds a ZLL network. @@ -1138,9 +1198,13 @@ void emberZllNetworkFoundHandler( // Return: Device specific information. const EmberZllDeviceInfoRecord *deviceInfo) { + int8_t lastHopRssi = 0; + uint8_t lastHopLqi = 0; emberAfPushCallbackNetworkIndex(); emAfZllNetworkFound(networkInfo, deviceInfo); - emberAfZllNetworkFoundCallback(networkInfo, deviceInfo); + emberGetLastHopRssi(&lastHopRssi); + emberGetLastHopLqi(&lastHopLqi); + emberAfZllNetworkFoundCallback(deviceInfo ? true : false, lastHopLqi, lastHopRssi, networkInfo, deviceInfo); emberAfPopNetworkIndex(); } @@ -1167,9 +1231,15 @@ void emberZllScanCompleteHandler( // ----------------------------------------------------------------------------- // Weak implementation of public Callback emberAfZllAddressAssignmentCallback WEAK(void emberAfZllAddressAssignmentCallback( + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi, // Return: Address assignment information. const EmberZllAddressAssignment *addressInfo)) { + (void)lastHopLqi; + (void)lastHopRssi; (void)addressInfo; } @@ -1179,9 +1249,13 @@ void emberZllAddressAssignmentHandler( // Return: Address assignment information. const EmberZllAddressAssignment *addressInfo) { + int8_t lastHopRssi = 0; + uint8_t lastHopLqi = 0; emberAfPushCallbackNetworkIndex(); emAfZllAddressAssignment(addressInfo); - emberAfZllAddressAssignmentCallback(addressInfo); + emberGetLastHopRssi(&lastHopRssi); + emberGetLastHopLqi(&lastHopLqi); + emberAfZllAddressAssignmentCallback(lastHopLqi, lastHopRssi, addressInfo); emberAfPopNetworkIndex(); } @@ -1208,10 +1282,25 @@ void emberZllTouchLinkTargetHandler( // ----------------------------------------------------------------------------- // Weak implementation of public Callback emberAfMacFilterMatchMessageCallback WEAK(void emberAfMacFilterMatchMessageCallback( - // Return: macFilterMatchStruct. - const EmberMacFilterMatchStruct *macFilterMatchStruct)) -{ - (void)macFilterMatchStruct; + // filter index match. + uint8_t filterIndexMatch, + // message type. + EmberMacPassthroughType messageType, + // last hop lqi. + uint8_t lastHopLqi, + // last hop rssi. + int8_t lastHopRssi, + // message length. + uint8_t messageLength, + // message contents. + uint8_t *messageContents)) +{ + (void)filterIndexMatch; + (void)messageType; + (void)lastHopLqi; + (void)lastHopRssi; + (void)messageLength; + (void)messageContents; } // A callback invoked by the EmberZNet stack when a raw MAC message that has @@ -1222,7 +1311,16 @@ void emberMacFilterMatchMessageHandler( { emberAfPushCallbackNetworkIndex(); emAfMacFilterMatchMessage(macFilterMatchStruct); - emberAfMacFilterMatchMessageCallback(macFilterMatchStruct); + uint8_t lastHopLqi = 0; + int8_t lastHopRssi = 0; + emberGetLastHopRssi(&lastHopRssi); + emberGetLastHopLqi(&lastHopLqi); + uint8_t messageLength = emGetBufferLength(macFilterMatchStruct->message); + uint8_t *messageContents = emGetBufferPointer(macFilterMatchStruct->message); + emberAfMacFilterMatchMessageCallback(macFilterMatchStruct->filterIndexMatch, + macFilterMatchStruct->legacyPassthroughType, + lastHopLqi, lastHopRssi, + messageLength, messageContents); emberAfPopNetworkIndex(); } diff --git a/protocol/zigbee/app/framework/common/zigbee_token_interface.c b/protocol/zigbee/app/framework/common/zigbee_token_interface.c index c3c663b3209..444c983097d 100644 --- a/protocol/zigbee/app/framework/common/zigbee_token_interface.c +++ b/protocol/zigbee/app/framework/common/zigbee_token_interface.c @@ -177,4 +177,29 @@ EmberStatus emberSetTokenData(uint32_t token, } return EMBER_ERR_FATAL; } -#endif + +// Strong implementation to restore the EUI64 for zigbeed in case backup/restore +void emberGetRestoredEui64(EmberEUI64 eui64) +{ + uint8_t blank[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; + uint8_t restoredEui64[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; + EmberTokenData tokenData; + tokenData.size = 0; + tokenData.data = (void *)restoredEui64; + EmberStatus status = emberGetTokenData(CREATOR_STACK_RESTORED_EUI64, + 0, + &tokenData); + if (status == EMBER_SUCCESS + && tokenData.size == sizeof(EmberEUI64)) { + if (0 == MEMCOMPARE(blank, + restoredEui64, + sizeof(EmberEUI64))) { + // There is no restored EUI64, no action + } else { + // There is a restored EUI available, so use that. + MEMCOPY(eui64, restoredEui64, sizeof(EmberEUI64)); + } + } +} + +#endif // SL_CATALOG_ZIGBEE_STACK_UNIX_PRESENT diff --git a/protocol/zigbee/app/framework/component/zigbee_counters.slcc b/protocol/zigbee/app/framework/component/zigbee_counters.slcc index d0780ca263e..2d8fd252641 100644 --- a/protocol/zigbee/app/framework/component/zigbee_counters.slcc +++ b/protocol/zigbee/app/framework/component/zigbee_counters.slcc @@ -41,6 +41,12 @@ template_contribution: function_name: emAfPluginCountersCounterCallback unless: - zigbee_ezsp + - name: zigbee_stack_callback + value: + callback_type: counter_rollover + function_name: emAfCounterRolloverCallback + condition: + - zigbee_ezsp - name: zigbee_af_callback value: callback_type: local_data_init diff --git a/protocol/zigbee/app/framework/component/zigbee_interpan.slcc b/protocol/zigbee/app/framework/component/zigbee_interpan.slcc index 84c4bb8c36f..befa8523ab0 100644 --- a/protocol/zigbee/app/framework/component/zigbee_interpan.slcc +++ b/protocol/zigbee/app/framework/component/zigbee_interpan.slcc @@ -32,8 +32,6 @@ template_contribution: value: callback_type: mac_filter_match_message function_name: emAfPluginInterpanMacFilterMatchMessageCallback - unless: - - zigbee_ezsp - name: zigbee_af_callback value: callback_type: event_init diff --git a/protocol/zigbee/app/framework/component/zigbee_key_establishment.slcc b/protocol/zigbee/app/framework/component/zigbee_key_establishment.slcc index dd227c3ea54..294e8c45f44 100644 --- a/protocol/zigbee/app/framework/component/zigbee_key_establishment.slcc +++ b/protocol/zigbee/app/framework/component/zigbee_key_establishment.slcc @@ -144,6 +144,22 @@ template_contribution: cluster_id: 0x800 cluster_type: server attribute_changed_function: emberAfKeyEstablishmentClusterServerAttributeChangedCallback + - name: zigbee_stack_callback + value: + callback_type: generate_cbke_keys + function_name: emAfGenerateCbkeKeysCallback + - name: zigbee_stack_callback + value: + callback_type: calculate_smacs + function_name: emAfCalculateSmacsCallback + - name: zigbee_stack_callback + value: + callback_type: generate_cbke_keys_handler283k1 + function_name: emAfGenerateCbkeKeysCallback283k1 + - name: zigbee_stack_callback + value: + callback_type: calculate_smacs_handler283k1 + function_name: emAfCalculateSmacsCallback283k1 documentation: docset: zigbee diff --git a/protocol/zigbee/app/framework/component/zigbee_ota_client.slcc b/protocol/zigbee/app/framework/component/zigbee_ota_client.slcc index c9e35bb104c..c53affc9cbc 100644 --- a/protocol/zigbee/app/framework/component/zigbee_ota_client.slcc +++ b/protocol/zigbee/app/framework/component/zigbee_ota_client.slcc @@ -42,6 +42,10 @@ template_contribution: value: callback_type: stack_status function_name: emberAfPluginOtaClientStackStatusCallback + - name: zigbee_stack_callback + value: + callback_type: dsa_verify + function_name: emAfDsaVerifyCallback - name: cluster_functions value: cluster_name: OtaBootload diff --git a/protocol/zigbee/app/framework/component/zigbee_zll_commissioning_client.slcc b/protocol/zigbee/app/framework/component/zigbee_zll_commissioning_client.slcc index 75c0c69efb4..05fe8e174de 100644 --- a/protocol/zigbee/app/framework/component/zigbee_zll_commissioning_client.slcc +++ b/protocol/zigbee/app/framework/component/zigbee_zll_commissioning_client.slcc @@ -31,20 +31,14 @@ template_contribution: value: callback_type: zll_address_assignment function_name: emAfZllAddressAssignmentCallback - unless: - - zigbee_ezsp - name: zigbee_stack_callback value: callback_type: zll_network_found function_name: emAfZllNetworkFoundCallback - unless: - - zigbee_ezsp - name: zigbee_stack_callback value: callback_type: zll_scan_complete function_name: emAfZllScanCompleteCallback - unless: - - zigbee_ezsp documentation: docset: zigbee document: zigbee-af-api/zll-commissioning-client diff --git a/protocol/zigbee/app/framework/component/zigbee_zll_commissioning_server.slcc b/protocol/zigbee/app/framework/component/zigbee_zll_commissioning_server.slcc index f03726c4880..55773440a22 100644 --- a/protocol/zigbee/app/framework/component/zigbee_zll_commissioning_server.slcc +++ b/protocol/zigbee/app/framework/component/zigbee_zll_commissioning_server.slcc @@ -26,7 +26,7 @@ template_contribution: - name: zigbee_stack_callback value: callback_type: zll_touch_link_target - function_name: emAfPluginZllCommissioningServerZllTouchLinkTargetCallback + function_name: emAfZllTouchLinkTargetCallback documentation: docset: zigbee document: zigbee-af-api/zll-commissioning-server diff --git a/protocol/zigbee/app/framework/gen-template/gen-templates.json b/protocol/zigbee/app/framework/gen-template/gen-templates.json index fbc6072bdf1..250f4fae7f9 100644 --- a/protocol/zigbee/app/framework/gen-template/gen-templates.json +++ b/protocol/zigbee/app/framework/gen-template/gen-templates.json @@ -12,7 +12,7 @@ "shareClusterStatesAcrossEndpoints": "true" } }, - "requiredFeatureLevel": 89, + "requiredFeatureLevel": 94, "templates": [ { "path": "zap-id.zapt", diff --git a/protocol/zigbee/app/framework/gen-template/zap-tokens.zapt b/protocol/zigbee/app/framework/gen-template/zap-tokens.zapt index 79655f5b5cc..a7c98b60fea 100644 --- a/protocol/zigbee/app/framework/gen-template/zap-tokens.zapt +++ b/protocol/zigbee/app/framework/gen-template/zap-tokens.zapt @@ -2,140 +2,185 @@ // This file contains the tokens for nonSingletons stored in flash -{{#endpoint_config}} -{{#tokens_context}} +{{#token_attributes}} + {{#first}} +// Identifier tags for tokens + {{/first}} + {{#if isSingleton}} +// Creator for singleton attribute: {{name}} +#define CREATOR_{{define}}_SINGLETON {{as_hex tokenId 4}} +#define NVM3KEY_{{define}}_SINGLETON (NVM3KEY_DOMAIN_ZIGBEE | {{as_hex tokenId 4}}) + {{else}} +// Creator for attribute: {{name}}, endpoint: {{endpointId}} +#define CREATOR_{{define}}_{{endpointId}} {{as_hex tokenId 4}} +#define NVM3KEY_{{define}}_{{endpointId}} (NVM3KEY_DOMAIN_ZIGBEE | {{as_hex tokenId 4}}) + {{/if}} +{{/token_attributes}} -{{#each singletons}} -// Creator for attribute: {{name}}, singleton -#define CREATOR_{{define}}_SINGLETON {{as_hex ../token_id 4}} -#define NVM3KEY_{{define}}_SINGLETON (NVM3KEY_DOMAIN_ZIGBEE | {{as_hex ../token_id 4}}) -{{token_next ..}} -{{/each}} -{{#each endpoints}} -{{#each nonSingletons}} -// Creator for attribute: {{name}}, endpoint: {{../id}} -#define CREATOR_{{define}}_{{../id}} {{as_hex ../../token_id 4}} -#define NVM3KEY_{{define}}_{{../id}} (NVM3KEY_DOMAIN_ZIGBEE | {{as_hex ../../token_id 4}}) -{{token_next ../..}} -{{/each}} -{{/each}} +{{#token_attribute_endpoints}} + {{#first}} // Types for the tokens #ifdef DEFINETYPES -{{#each singletons}} -{{#if longDefault}} -typedef uint8_t tokType_{{tokenType}}[{{typeSize}}]; -{{else}} -typedef {{as_underlying_type type}} tokType_{{tokenType}}; -{{/if}} -{{/each}} -{{#each nonSingletons}} -{{#if longDefault}} -typedef uint8_t tokType_{{tokenType}}[{{typeSize}}]; -{{else}} -typedef {{as_underlying_type type}} tokType_{{tokenType}}; -{{/if}} -{{/each}} + {{/first}} +{{/token_attribute_endpoints}} +{{#all_user_cluster_generated_attributes}} + {{#if_compare 'NVM' storageOption operator='=='}} + {{#if isString}} +typedef uint8_t tokType_{{as_snake_case define}}[{{attributeSize}}]; + {{else if (is_number_greater_than attributeSize 4)}} +typedef uint8_t tokType_{{as_snake_case define}}[{{attributeSize}}]; + {{else}} +typedef {{as_underlying_type type}} tokType_{{as_snake_case define}}; + {{/if}} + {{/if_compare}} +{{/all_user_cluster_generated_attributes}} +{{#token_attribute_endpoints}} + {{#first}} #endif // DEFINETYPES + {{/first}} +{{/token_attribute_endpoints}} - +{{#token_attribute_endpoints}} + {{#first}} +// Actual token definitions #ifdef DEFINETOKENS -{{#each singletons}} -{{#if longDefault}} -DEFINE_BASIC_TOKEN({{define}}_SINGLETON, tokType_{{tokenType}}, { {{longDefault}} }) -{{else}} -{{#if defaultValue}} -DEFINE_BASIC_TOKEN({{define}}_SINGLETON, tokType_{{tokenType}}, {{defaultValue}}) -{{else}} -DEFINE_BASIC_TOKEN({{define}}_SINGLETON, tokType_{{tokenType}}, 0) -{{/if}} -{{/if}} -{{/each}} -{{#each endpoints}} -{{#each nonSingletons}} -{{#if longDefault}} -DEFINE_BASIC_TOKEN({{define}}_{{../id}}, tokType_{{tokenType}}, { {{longDefault}} }) -{{else}} -{{#if defaultValue}} -DEFINE_BASIC_TOKEN({{define}}_{{../id}}, tokType_{{tokenType}}, {{defaultValue}}) -{{else}} -DEFINE_BASIC_TOKEN({{define}}_{{../id}}, tokType_{{tokenType}}, 0) -{{/if}} -{{/if}} -{{/each}} -{{/each}} -#endif // DEFINETOKENS + {{/first}} +{{/token_attribute_endpoints}} +{{#all_user_cluster_generated_attributes}} + {{#if_compare 'NVM' storageOption operator='=='}} + {{#if isSingleton}} + {{#if isString}} + {{#if_compare 'octet' type operator='in'}} +DEFINE_BASIC_TOKEN({{define}}_SINGLETON, tokType_{{as_snake_case define}}, { {{format_zcl_string_as_characters_for_generated_defaults defaultValue attributeSize isCommaTerminated=0 isOctet=1}} }) + {{else}} +DEFINE_BASIC_TOKEN({{define}}_SINGLETON, tokType_{{as_snake_case define}}, { {{format_zcl_string_as_characters_for_generated_defaults defaultValue attributeSize isCommaTerminated=0}} }) + {{/if_compare}} + {{else if (is_number_greater_than attributeSize 4)}} +DEFINE_BASIC_TOKEN({{define}}_SINGLETON, tokType_{{as_snake_case define}}, { {{as_generated_default_macro defaultValue attributeSize endian="big" isCommaTerminated=0}} }) + {{else if defaultValue}} +DEFINE_BASIC_TOKEN({{define}}_SINGLETON, tokType_{{as_snake_case define}}, {{as_hex defaultValue}}) + {{else}} +DEFINE_BASIC_TOKEN({{define}}_SINGLETON, tokType_{{as_snake_case define}}, 0) + {{/if}} + {{/if}} + {{/if_compare}} +{{/all_user_cluster_generated_attributes}} +{{#generated_clustes_details}} + {{#all_user_cluster_generated_attributes}} + {{#if_compare 'NVM' storageOption operator='=='}} + {{#unless isSingleton}} + {{#if (is_lowercase_equal ./clusterName ../clusterName)}} + {{#if (is_lowercase_equal ./clusterSide ../clusterSide)}} + {{#if isString}} + {{#if_compare 'octet' type operator='in'}} +DEFINE_BASIC_TOKEN({{define}}_{{../endpointIdentifier}}, tokType_{{as_snake_case define}}, { {{format_zcl_string_as_characters_for_generated_defaults defaultValue attributeSize isCommaTerminated=0 isOctet=1}} }) + {{else}} +DEFINE_BASIC_TOKEN({{define}}_{{../endpointIdentifier}}, tokType_{{as_snake_case define}}, { {{format_zcl_string_as_characters_for_generated_defaults defaultValue attributeSize isCommaTerminated=0}} }) + {{/if_compare}} + {{else if (is_number_greater_than attributeSize 4)}} +DEFINE_BASIC_TOKEN({{define}}_{{../endpointIdentifier}}, tokType_{{as_snake_case define}}, { {{as_generated_default_macro defaultValue attributeSize endian="big" isCommaTerminated=0}} }) + {{else if defaultValue}} +DEFINE_BASIC_TOKEN({{define}}_{{../endpointIdentifier}}, tokType_{{as_snake_case define}}, {{as_hex defaultValue}}) + {{else}} +DEFINE_BASIC_TOKEN({{define}}_{{../endpointIdentifier}}, tokType_{{as_snake_case define}}, 0) + {{/if}} + {{/if}} + {{/if}} + {{/unless}} + {{/if_compare}} + {{/all_user_cluster_generated_attributes}} +{{/generated_clustes_details}} +{{#token_attribute_endpoints}} + {{#first}} +#endif // DEFINETOKENS + {{/first}} +{{/token_attribute_endpoints}} +{{#token_attribute_endpoints}} + {{#first}} // Macro snippet that loads all the attributes from tokens -#define GENERATED_TOKEN_LOADER(endpoint) do {\ -{{#if hasAttributes}} - uint8_t ptr[{{maxSize}}]; \ -{{/if}} -{{#if hasNonSingletons}} +#define GENERATED_TOKEN_LOADER(endpoint) do { \ + {{/first}} +{{/token_attribute_endpoints}} +{{#all_user_cluster_generated_attributes}} + {{#first}} + {{#if_compare tokenizedAttributeSize 0 operator='>'}} + uint8_t ptr[{{maxTokenAttributeSize}}]; \ + {{/if_compare}} + {{#if_compare nonSingletonTokenizedAttributeSize 0 operator='>'}} uint8_t curNetwork = emberGetCurrentNetwork(); \ uint8_t epNetwork; \ -{{/if}} -{{#each singletons}} - halCommonGetToken((tokType_{{tokenType}} *)ptr, TOKEN_{{define}}_SINGLETON); \ -{{#if serverSide}} - emberAfWriteServerAttribute(1, ZCL_{{as_delimited_macro cluster.name}}_CLUSTER_ID, ZCL_{{define}}_ATTRIBUTE_ID, (uint8_t*)ptr, ZCL_{{as_delimited_macro type}}_ATTRIBUTE_TYPE); \ -{{/if}} - {{#unless serverSide}} - emberAfWriteClientAttribute(1, ZCL_{{as_delimited_macro cluster.name}}_CLUSTER_ID, ZCL_{{define}}_ATTRIBUTE_ID, (uint8_t*)ptr, ZCL_{{as_delimited_macro type}}_ATTRIBUTE_TYPE); \ -{{/unless}} -{{/each}} -{{#each endpoints}} -{{#if hasNonSingletons}} - epNetwork = emberAfNetworkIndexFromEndpoint({{id}}); \ - if({{id}} == (endpoint) || (EMBER_BROADCAST_ENDPOINT == (endpoint) && epNetwork == curNetwork)) { \ -{{#each nonSingletons}} - halCommonGetToken((tokType_{{tokenType}} *)ptr, TOKEN_{{define}}_{{../id}}); \ -{{#if serverSide}} - emberAfWriteServerAttribute({{../id}}, ZCL_{{as_delimited_macro cluster.name}}_CLUSTER_ID, ZCL_{{define}}_ATTRIBUTE_ID, (uint8_t*)ptr, ZCL_{{as_delimited_macro type}}_ATTRIBUTE_TYPE); \ -{{/if}} -{{#unless serverSide}} - emberAfWriteClientAttribute({{../id}}, ZCL_{{as_delimited_macro cluster.name}}_CLUSTER_ID, ZCL_{{define}}_ATTRIBUTE_ID, (uint8_t*)ptr, ZCL_{{as_delimited_macro type}}_ATTRIBUTE_TYPE); \ -{{/unless}} -{{/each}} + {{/if_compare}} + {{/first}} + {{/all_user_cluster_generated_attributes}} + {{#token_attributes}} + {{#if isSingleton}} + halCommonGetToken((tokType_{{as_snake_case define}} *)ptr, TOKEN_{{define}}_SINGLETON); \ + emberAfWrite{{#if isManufacturingSpecific}}ManufacturerSpecific{{/if}}{{as_camel_cased side false}}Attribute({{smallestEndpointIdentifier}}, ZCL_{{clusterDefine}}_ID, ZCL_{{define}}_ATTRIBUTE_ID, {{#if isManufacturingSpecific}}{{as_hex mfgCode 4}}, {{/if}}(uint8_t*)ptr, ZCL_{{as_delimited_macro type}}_ATTRIBUTE_TYPE); \ + {{/if}} + {{/token_attributes}} +{{#token_attribute_endpoints isSingleton=0}} + {{#token_attributes endpointTypeRef isSingleton=0}} + {{#first}} + epNetwork = emberAfNetworkIndexFromEndpoint({{../endpointId}}); \ + if({{../endpointId}} == (endpoint) || (EMBER_BROADCAST_ENDPOINT == (endpoint) && epNetwork == curNetwork)) { \ + {{/first}} + halCommonGetToken((tokType_{{as_snake_case define}} *)ptr, TOKEN_{{define}}_{{../endpointId}}); \ + emberAfWrite{{#if isManufacturingSpecific}}ManufacturerSpecific{{/if}}{{as_camel_cased side false}}Attribute({{../endpointId}}, ZCL_{{clusterDefine}}_ID, ZCL_{{define}}_ATTRIBUTE_ID, {{#if isManufacturingSpecific}}{{as_hex mfgCode 4}}, {{/if}}(uint8_t*)ptr, ZCL_{{as_delimited_macro type}}_ATTRIBUTE_TYPE); \ + {{#last}} } \ -{{/if}} -{{/each}} -} while(false) - + {{/last}} + {{/token_attributes}} +{{/token_attribute_endpoints}} +{{#token_attribute_endpoints}} + {{#first}} +} while (false) + {{/first}} +{{/token_attribute_endpoints}} +{{#all_user_cluster_generated_attributes}} + {{#first}} + {{#if_compare tokenizedAttributeSize 0 operator='>'}} // Macro snippet that saves the attribute to token -#define GENERATED_TOKEN_SAVER do { \ - uint8_t allZeroData[{{maxSize}}]; \ - MEMSET(allZeroData, 0, {{maxSize}}); \ - if ( data == NULL ) { data = allZeroData; } \ -{{#each clusters}} -{{#if hasSingletons}} - if ( {{hexCode}} == clusterId ) { \ -{{#each singletons}} - if ( {{hexCode}} == metadata->attributeId && 0x0000 == emberAfGetMfgCode(metadata) && !emberAfAttributeIsClient(metadata) ) { \ - halCommonSetToken(TOKEN_{{define}}_SINGLETON, data); } \ -{{/each}} +#define GENERATED_TOKEN_SAVER do { \ + uint8_t allZeroData[{{maxTokenAttributeSize}}]; \ + MEMSET(allZeroData, 0, {{maxTokenAttributeSize}}); \ + if ( data == NULL ) { data = allZeroData; } \ + {{/if_compare}} + {{/first}} +{{/all_user_cluster_generated_attributes}} +{{#token_attribute_clusters isSingleton=1}} + if ( {{as_hex code 4}} == clusterId ) { \ + {{#all_user_cluster_generated_attributes}} + {{#if_compare 'NVM' storageOption operator='=='}} + {{#if isSingleton}} + {{#if (is_lowercase_equal ./clusterName ../name)}} +if ( {{as_hex code 4}} == metadata->attributeId && {{as_hex mfgCode 4}} == emberAfGetMfgCode(metadata) && {{#if_compare 'server' side operator='=='}}!{{/if_compare}}emberAfAttributeIsClient(metadata) ) { \ + halCommonSetToken(TOKEN_{{define}}_SINGLETON, data); } \ + {{/if}} + {{/if}} + {{/if_compare}} + {{/all_user_cluster_generated_attributes}} } \ -{{/if}} -{{/each}} -{{#each endpoints}} -{{#if hasNonSingletons}} - if ( {{id}} == endpoint ) { \ -{{#each clusters}} -{{#if hasNonSingletons}} - if ( {{hexCode}} == clusterId ) { \ -{{#each nonSingletons}} - if ( {{hexCode}} == metadata->attributeId && 0x0000 == emberAfGetMfgCode(metadata) && {{#if serverSide}}!{{/if}}emberAfAttributeIsClient(metadata) ) \ - halCommonSetToken(TOKEN_{{define}}_{{../../id}}, data); \ -{{/each}} - } \ -{{/if}} -{{/each}} +{{/token_attribute_clusters}} +{{#token_attribute_endpoints isSingleton=0}} +if ( {{endpointId}} == endpoint ) { \ + {{#token_attribute_clusters endpointTypeRef isSingleton=0}} + {{#not_first}}else {{/not_first}}if ( {{as_hex code 4}} == clusterId ) { \ + {{#token_attributes ../endpointTypeRef isSingleton=0}} + {{#if (is_lowercase_equal ./clusterName ../name)}} +if ( {{as_hex code 4}} == metadata->attributeId && {{as_hex mfgCode 4}} == emberAfGetMfgCode(metadata) && {{#if side}}!{{/if}}emberAfAttributeIsClient(metadata) ) \ + halCommonSetToken(TOKEN_{{define}}_{{../../endpointId}}, data); \ + {{/if}} + {{/token_attributes}} } \ -{{/if}} -{{/each}} -} while(false) - -{{/tokens_context}} -{{/endpoint_config}} + {{/token_attribute_clusters}} +} \ +{{/token_attribute_endpoints}} +{{#token_attribute_endpoints}} + {{#first}} +} while (false) + {{/first}} +{{/token_attribute_endpoints}} diff --git a/protocol/zigbee/app/framework/plugin/concentrator/concentrator-support.c b/protocol/zigbee/app/framework/plugin/concentrator/concentrator-support.c index 8331810502c..b00184c26f5 100644 --- a/protocol/zigbee/app/framework/plugin/concentrator/concentrator-support.c +++ b/protocol/zigbee/app/framework/plugin/concentrator/concentrator-support.c @@ -35,7 +35,11 @@ #ifdef UC_BUILD #include "concentrator-config.h" +#ifdef EZSP_HOST +#define ezspIncomingRouteErrorHandler emAfPluginConcentratorIncomingRouteErrorCallback +#else // !EZSP_HOST #define emberIncomingRouteErrorHandler emAfPluginConcentratorIncomingRouteErrorCallback +#endif // EZSP_HOST // TODO: It appears that the "update" event is not used at all in the code. // Once we clean up the UC_BUILD we should just remove it completely. #else // !UC_BUILD diff --git a/protocol/zigbee/app/framework/plugin/counters/counters-host.c b/protocol/zigbee/app/framework/plugin/counters/counters-host.c index 6b6822c2b3d..66f8885d39f 100644 --- a/protocol/zigbee/app/framework/plugin/counters/counters-host.c +++ b/protocol/zigbee/app/framework/plugin/counters/counters-host.c @@ -32,7 +32,11 @@ void emberAfPluginCountersInitCallback(SLXU_INIT_ARG) emberAfPluginCountersResetThresholds(); } +#ifdef UC_BUILD +void emAfCounterRolloverCallback(EmberCounterType type) +#else // !UC_BUILD void ezspCounterRolloverHandler(EmberCounterType type) +#endif // UC_BUILD { emberAfPluginCountersRolloverCallback(type); } diff --git a/protocol/zigbee/app/framework/plugin/device-table/device-table-tracking.c b/protocol/zigbee/app/framework/plugin/device-table/device-table-tracking.c index 15786343d01..c8d0373e8cf 100644 --- a/protocol/zigbee/app/framework/plugin/device-table/device-table-tracking.c +++ b/protocol/zigbee/app/framework/plugin/device-table/device-table-tracking.c @@ -23,7 +23,7 @@ #include "app/util/ezsp/ezsp-protocol.h" #include "app/util/ezsp/ezsp.h" #include "app/util/ezsp/serial-interface.h" - #include "app/util/zigbee-framework/zigbee-device-common.h" + #include "app/util/zigbee-framework/zigbee-device-host.h" #else #include "stack/include/ember.h" #endif @@ -31,10 +31,11 @@ #include "hal/hal.h" #include "app/util/serial/sl_zigbee_command_interpreter.h" #include "af.h" -#include "app/util/zigbee-framework/zigbee-device-host.h" + #include #include "app/framework/plugin/device-table/device-table.h" #include "app/framework/plugin/device-table/device-table-internal.h" +#include "app/util/zigbee-framework/zigbee-device-common.h" // Device tracking declarations static void optionallyChangeState(EmberNodeId nodeId, diff --git a/protocol/zigbee/app/framework/plugin/general-response-commands/general-response-commands.c b/protocol/zigbee/app/framework/plugin/general-response-commands/general-response-commands.c index 56ffc391544..6d9f885f291 100644 --- a/protocol/zigbee/app/framework/plugin/general-response-commands/general-response-commands.c +++ b/protocol/zigbee/app/framework/plugin/general-response-commands/general-response-commands.c @@ -40,6 +40,7 @@ bool emberAfReadAttributesResponseCallback(EmberAfClusterId clusterId, // variable-length data. while (bufIndex + 3 <= bufLen) { EmberAfAttributeId attributeId; + (void) attributeId; EmberAfStatus status; attributeId = (EmberAfAttributeId)emberAfGetInt16u(buffer, bufIndex, @@ -341,10 +342,15 @@ bool emberAfDiscoverAttributesResponseCallback(EmberAfClusterId clusterId, // Each record in the response has a two-byte attribute id and a one-byte // type. + // NOTE if printing is not enabled then this loop doesn't do anything while (bufIndex + 3 <= bufLen) { EmberAfAttributeId attributeId; uint8_t dataType; uint8_t accessControl; + // NOTE silence unused but set variable (when printing is not enabled) + (void) attributeId; + (void) dataType; + (void) accessControl; attributeId = (EmberAfAttributeId)emberAfGetInt16u(buffer, bufIndex, bufLen); diff --git a/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client-cli.c b/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client-cli.c index 812bf8a33ed..2e1dc825350 100644 --- a/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client-cli.c +++ b/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client-cli.c @@ -27,7 +27,7 @@ #include "stack/gp/gp-proxy-table.h" #include "green-power-client.h" - +#include "app/framework/plugin/green-power-common/green-power-common.h" #include "app/util/serial/sl_zigbee_command_interpreter.h" #ifndef EMBER_AF_GENERATE_CLI @@ -206,3 +206,14 @@ void emberAfPluginGreenPowerClientSetKey(SL_CLI_COMMAND_ARG) emGpProxyTableSetKey(index, (keyData.contents), 0 /*key type TODO*/); #endif } + +void emberAfPluginGreenPowerClientSpoofDevAnnce(SL_CLI_COMMAND_ARG) +{ + uint16_t nodeId = (uint16_t)emberUnsignedCommandArgument(0); + EmberEUI64 eui64; + emberCopyBigEndianEui64Argument(1, eui64); + uint8_t capabilities = (uint8_t)emberUnsignedCommandArgument(2); + emGpSpoofDeviceAnnce(nodeId, + eui64, + capabilities); +} diff --git a/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client.c b/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client.c index 56cab3660e5..4b7e3c61a15 100644 --- a/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client.c +++ b/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client.c @@ -82,6 +82,32 @@ EmberEventControl emberAfPluginGreenPowerClientChannelEventControl; #endif #endif // UC_BUILD +static void flushGpTxQueue(void) +{ + EmberGpAddress addr; + // Use 0xFFFFFFFF wildcard to clear out the gpTxQueue + addr.applicationId = EMBER_GP_APPLICATION_SOURCE_ID; + addr.id.sourceId = GP_GPD_SRC_ID_WILDCARD; + emberDGpSend(false, false, &addr, 0, 0, NULL, 0, 0); +} + +static void sendChannelConfigToGpStub(void) +{ + uint8_t payload = (emberAfGetRadioChannel() - 11) // The channel is coded as : Operational Channel - 11 + | 0x10; //basic + EmberGpAddress addr; + addr.id.sourceId = GP_GPD_SRC_ID_FOR_CAHNNEL_CONFIG; + addr.applicationId = EMBER_GP_APPLICATION_SOURCE_ID; + emberDGpSend(true, //add + false,//no CCA + &addr, + EMBER_ZCL_GP_GPDF_CHANNEL_CONFIGURATION, + sizeof(payload), //length + &(payload), + 0, //gpepHandle + 0); //entryLifetimeMs +} + #ifdef UC_BUILD void emberAfPluginGreenPowerClientInitCallback(uint8_t init_level) @@ -148,28 +174,24 @@ void emberAfPluginGreenPowerClientInitCallback(void) void emberAfGreenPowerClusterExitCommissioningMode(void) { - EmberGpAddress addr; commissioningState.inCommissioningMode = false; emberAfGreenPowerClusterPrintln("Exit comm for sink %2x", commissioningState.commissioningSink); - // Use 0xFFFFFFFF wildcard to clear out the gpTxQueue - addr.applicationId = EMBER_GP_APPLICATION_SOURCE_ID; - addr.id.sourceId = 0xFFFFFFFF; - emberDGpSend(false, false, &addr, 0, 0, NULL, 0, 0); - // TODO: remove sender information in stack. + flushGpTxQueue(); } void emberAfPluginGreenPowerClientChannelEventHandler(SLXU_UC_EVENT) { if (commissioningState.channelStatus & GP_CLIENT_ON_TRANSMIT_CHANNEL_MASK) { - EmberGpAddress addr; - addr.id.sourceId = 0xFFFFFFFF; - addr.applicationId = 0; + if (commissioningState.channelStatus & GP_CLIENT_ADDITIONAL_CHANNEL_REQUEST_PENDING) { + commissioningState.channelStatus &= ~GP_CLIENT_ADDITIONAL_CHANNEL_REQUEST_PENDING; + sendChannelConfigToGpStub(); + return; + } emberAfGreenPowerClusterPrintln("return to chan %d", emberAfGetRadioChannel()); emberStopScan(); commissioningState.channelStatus = 0; - //clear the gpTxQueue - emberDGpSend(false, false, &addr, 0, 0, NULL, 0, 0); + flushGpTxQueue(); } slxu_zigbee_event_set_inactive(channelEvent); @@ -540,20 +562,8 @@ bool emberAfGreenPowerClusterGpResponseCallback(EmberAfClusterCommand *cmd) if (cmd_data.tempMasterShortAddress == emberGetNodeId()) { if (!slxu_zigbee_event_is_active(channelEvent) || (commissioningState.channelStatus & GP_CLIENT_TRANSMIT_SAME_AS_OPERATIONAL_CHANNEL_MASK)) { - //Look at me, I'm the tempMaster now - //TODO set firstToForward - - uint8_t payload = (emberAfGetRadioChannel() - 11) //channel ID - | 0x10;//basic - emberDGpSend(true, //add - false,//no CCA - &addr, - EMBER_ZCL_GP_GPDF_CHANNEL_CONFIGURATION, - 1, //length - &(payload), - 0, //gpepHandle - 0); //entryLifetimeMs - commissioningState.channelStatus = GP_CLIENT_ON_TRANSMIT_CHANNEL_MASK; + sendChannelConfigToGpStub(); + commissioningState.channelStatus |= GP_CLIENT_ON_TRANSMIT_CHANNEL_MASK; // based on figure 88 of GP proxy basic spec V1.0 page 191 // the following condition seems neccessary if (emberAfGetRadioChannel() != (cmd_data.tempMasterTxChannel + 11) ) { @@ -561,6 +571,9 @@ bool emberAfGreenPowerClusterGpResponseCallback(EmberAfClusterCommand *cmd) emberStartScan(EMBER_STACK_GP_CHANNEL_DELIVERY_SCAN, (1 << (cmd_data.tempMasterTxChannel + 11)), 0 /*duration*/); commissioningState.channelStatus &= ~GP_CLIENT_TRANSMIT_SAME_AS_OPERATIONAL_CHANNEL_MASK; } else { + if (commissioningState.channelStatus & GP_CLIENT_TRANSMIT_SAME_AS_OPERATIONAL_CHANNEL_MASK) { + commissioningState.channelStatus |= GP_CLIENT_ADDITIONAL_CHANNEL_REQUEST_PENDING; + } commissioningState.channelStatus |= GP_CLIENT_TRANSMIT_SAME_AS_OPERATIONAL_CHANNEL_MASK; } // Stared timeout to clear the Tx Queue if the packet is not delivered, diff --git a/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client.h b/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client.h index 55bc0682bd2..8cb93ec0851 100644 --- a/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client.h +++ b/protocol/zigbee/app/framework/plugin/green-power-client/green-power-client.h @@ -37,6 +37,7 @@ #define GP_CLIENT_ON_TRANSMIT_CHANNEL_MASK BIT(0) #define GP_CLIENT_TRANSMIT_SAME_AS_OPERATIONAL_CHANNEL_MASK BIT(1) +#define GP_CLIENT_ADDITIONAL_CHANNEL_REQUEST_PENDING BIT(2) typedef enum { EMBER_GP_GPD_MAC_SEQ_NUM_CAP_SEQUENTIAL = 0x00, diff --git a/protocol/zigbee/app/framework/plugin/green-power-common/green-power-common.c b/protocol/zigbee/app/framework/plugin/green-power-common/green-power-common.c index 1d860121f3f..11eea2b9cd6 100644 --- a/protocol/zigbee/app/framework/plugin/green-power-common/green-power-common.c +++ b/protocol/zigbee/app/framework/plugin/green-power-common/green-power-common.c @@ -33,6 +33,10 @@ #include "green-power-common.h" extern bool emGpAddressMatch(const EmberGpAddress *a1, const EmberGpAddress *a2); +extern void emSpoofDeviceAnnouncement(uint16_t shortId, + uint8_t *sourceEUI64, + EmberEUI64 deviceAnnounceEui, + uint8_t capabilities); uint16_t emCopyAdditionalInfoBlockStructureToArray(uint8_t commandId, EmberGpTranslationTableAdditionalInfoBlockOptionRecordField *additionalInfoBlockIn, @@ -843,3 +847,42 @@ bool emGpMakeAddr(EmberGpAddress *addr, addr->applicationId = appId; return true; } + +void emGpSpoofDeviceAnnce(uint16_t nodeId, + EmberEUI64 eui64, + uint8_t capabilities) +{ +#ifdef EZSP_HOST + EmberApsFrame apsFrameDevAnnce; + apsFrameDevAnnce.sourceEndpoint = EMBER_ZDO_ENDPOINT; + apsFrameDevAnnce.destinationEndpoint = EMBER_ZDO_ENDPOINT; + apsFrameDevAnnce.clusterId = END_DEVICE_ANNOUNCE; + apsFrameDevAnnce.profileId = EMBER_ZDO_PROFILE_ID; + apsFrameDevAnnce.options = EMBER_APS_OPTION_SOURCE_EUI64; + apsFrameDevAnnce.options |= EMBER_APS_OPTION_USE_ALIAS_SEQUENCE_NUMBER; + apsFrameDevAnnce.groupId = 0; + uint8_t messageContents[GP_DEVICE_ANNOUNCE_SPOOF_MSG_SIZE]; + uint8_t apsSequence = 0; + // Form the APS message for Bcast + messageContents[0] = apsSequence; //Sequence + messageContents[1] = (uint8_t)nodeId; //NodeId + messageContents[2] = (uint8_t)(nodeId >> 8); //NodeId + MEMCOPY(&messageContents[3], eui64, EUI64_SIZE); //IEEE Address + messageContents[11] = capabilities; // Capability + ezspProxyBroadcast(nodeId,//EmberNodeId source, + 0xFFFD,//EmberNodeId destination, + 0,//uint8_t nwkSequence, + &apsFrameDevAnnce,//EmberApsFrame *apsFrame, + 0xFF,//uint8_t radius, + 0xFF,// Tag Id + sizeof(messageContents),//uint8_t messageLength, + messageContents,//uint8_t *messageContents, + &apsSequence); +#else // !EZSP_HOST + // Use the stack private function to save code space in case of SoC. + emSpoofDeviceAnnouncement(nodeId, + NULL, + eui64, + capabilities); +#endif // EZSP_HOST +} diff --git a/protocol/zigbee/app/framework/plugin/green-power-common/green-power-common.h b/protocol/zigbee/app/framework/plugin/green-power-common/green-power-common.h index 73ceea40981..9599cb47870 100644 --- a/protocol/zigbee/app/framework/plugin/green-power-common/green-power-common.h +++ b/protocol/zigbee/app/framework/plugin/green-power-common/green-power-common.h @@ -80,6 +80,8 @@ #define EMBER_AF_GREEN_POWER_SERVER_GPDF_SCENE_DERIVED_GROUP_ID (0xFFFF) +#define GP_DEVICE_ANNOUNCE_SPOOF_MSG_SIZE 12 + // Reserved GPD addresses #define IS_RESERVED_GPD_SRC_ID(srcId) (((srcId) >= GP_GPD_SRC_ID_RESERVED_FFFFFF9) \ && ((srcId) <= GP_GPD_SRC_ID_RESERVED_FFFFFFE)) @@ -585,4 +587,7 @@ bool emGpMakeAddr(EmberGpAddress *addr, uint16_t emCopyAdditionalInfoBlockStructureToArray(uint8_t commandId, EmberGpTranslationTableAdditionalInfoBlockOptionRecordField *additionalInfoBlockIn, uint8_t *additionalInfoBlockOut); +void emGpSpoofDeviceAnnce(uint16_t nodeId, + EmberEUI64 eui64, + uint8_t capabilities); #endif //_GREEN_POWER_COMMON_H_ diff --git a/protocol/zigbee/app/framework/plugin/green-power-server/green-power-server.c b/protocol/zigbee/app/framework/plugin/green-power-server/green-power-server.c index 74ebe31043c..ab17d5f86ea 100644 --- a/protocol/zigbee/app/framework/plugin/green-power-server/green-power-server.c +++ b/protocol/zigbee/app/framework/plugin/green-power-server/green-power-server.c @@ -299,51 +299,6 @@ static void updateInvolveTC(EmberStatus status) } } -// Send device announcement -static void sendDeviceAnncement(uint16_t nodeId) -{ - EmberApsFrame apsFrameDevAnnce; - apsFrameDevAnnce.sourceEndpoint = EMBER_ZDO_ENDPOINT; - apsFrameDevAnnce.destinationEndpoint = EMBER_ZDO_ENDPOINT; - apsFrameDevAnnce.clusterId = END_DEVICE_ANNOUNCE; - apsFrameDevAnnce.profileId = EMBER_ZDO_PROFILE_ID; - apsFrameDevAnnce.options = EMBER_APS_OPTION_SOURCE_EUI64; - apsFrameDevAnnce.options |= EMBER_APS_OPTION_USE_ALIAS_SEQUENCE_NUMBER; - apsFrameDevAnnce.groupId = 0; - uint8_t messageContents[GP_DEVICE_ANNOUNCE_SIZE]; - uint8_t apsSequence = 0; - // Form the APS message for Bcast - messageContents[0] = apsSequence; //Sequence - messageContents[1] = (uint8_t)nodeId; //NodeId - messageContents[2] = (uint8_t)(nodeId >> 8); //NodeId - MEMSET(&messageContents[3], 0xFF, 8); //IEEE Address - messageContents[11] = 0; // Capability - uint8_t length = GP_DEVICE_ANNOUNCE_SIZE; -#ifndef EZSP_HOST - EmberMessageBuffer message = emberFillLinkedBuffers(messageContents, length); - if (message == EMBER_NULL_MESSAGE_BUFFER) { - return; - } - emberProxyBroadcast(nodeId, //EmberNodeId source, - 0xFFFD, //EmberNodeId destination, - 0, //uint8_t nwkSequence, - &apsFrameDevAnnce, //EmberApsFrame *apsFrame, - 0xFF, // use maximum radius - message); - emberReleaseMessageBuffer(message); -#else - ezspProxyBroadcast(nodeId,//EmberNodeId source, - 0xFFFD,//EmberNodeId destination, - 0,//uint8_t nwkSequence, - &apsFrameDevAnnce,//EmberApsFrame *apsFrame, - 0xFF,//uint8_t radius, - 0xFF,// Tag Id - length,//uint8_t messageLength, - messageContents,//uint8_t *messageContents, - &apsSequence); -#endif -} - // Internal functions used to maintain the group table within the context // of the binding table. // @@ -524,34 +479,36 @@ static EmberStatus sendGpPairingMessage(EmberOutgoingMessageType type, uint32_t gpdSecurityFrameCounter, uint8_t *gpdKey, uint16_t assignedAlias, - uint8_t groupcastRadius) + uint8_t groupcastRadius, + bool sendGpPairing) { + EmberStatus status = EMBER_ERR_FATAL; EmberEUI64 ourEUI; emberAfGetEui64(ourEUI); - emberAfFillCommandGreenPowerClusterGpPairingSmart(options, - gpdAddr->id.sourceId, - gpdAddr->id.gpdIeeeAddress, - gpdAddr->endpoint, - ourEUI, - emberGetNodeId(), - sinkGroupId, - deviceId, - gpdSecurityFrameCounter, - gpdKey, - assignedAlias, - groupcastRadius); - EmberApsFrame *apsFrame; - apsFrame = emberAfGetCommandApsFrame(); - apsFrame->sourceEndpoint = GP_ENDPOINT; - apsFrame->destinationEndpoint = GP_ENDPOINT; + if (sendGpPairing) { + emberAfFillCommandGreenPowerClusterGpPairingSmart(options, + gpdAddr->id.sourceId, + gpdAddr->id.gpdIeeeAddress, + gpdAddr->endpoint, + ourEUI, + emberGetNodeId(), + sinkGroupId, + deviceId, + gpdSecurityFrameCounter, + gpdKey, + assignedAlias, + groupcastRadius); + EmberApsFrame *apsFrame; + apsFrame = emberAfGetCommandApsFrame(); + apsFrame->sourceEndpoint = GP_ENDPOINT; + apsFrame->destinationEndpoint = GP_ENDPOINT; - EmberStatus status = EMBER_ERR_FATAL; - if (type == EMBER_OUTGOING_BROADCAST) { - status = emberAfSendCommandBroadcast(EMBER_RX_ON_WHEN_IDLE_BROADCAST_ADDRESS); - } else if (type == EMBER_OUTGOING_DIRECT) { - status = emberAfSendCommandUnicast(EMBER_OUTGOING_DIRECT, indexOrDestination); + if (type == EMBER_OUTGOING_BROADCAST) { + status = emberAfSendCommandBroadcast(EMBER_RX_ON_WHEN_IDLE_BROADCAST_ADDRESS); + } else if (type == EMBER_OUTGOING_DIRECT) { + status = emberAfSendCommandUnicast(EMBER_OUTGOING_DIRECT, indexOrDestination); + } } - #if (defined SL_CATALOG_ZIGBEE_GREEN_POWER_CLIENT_PRESENT && !defined EZSP_HOST) if (type == EMBER_OUTGOING_DIRECT && indexOrDestination != emberGetNodeId()) { @@ -578,7 +535,8 @@ static EmberStatus sendGpPairingMessage(EmberOutgoingMessageType type, static void decommissionGpd(uint8_t secLvl, uint8_t keyType, EmberGpAddress *gpdAddr, - bool setRemoveGpdflag) + bool setRemoveGpdflag, + bool sendGpPairing) { uint8_t sinkEntryIndex = emberGpSinkTableLookup(gpdAddr); if (sinkEntryIndex != 0xFF) { @@ -595,8 +553,8 @@ static void decommissionGpd(uint8_t secLvl, uint8_t gpsCommunicationMode = (entry.options & EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_COMMUNICATION_MODE) >> EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_COMMUNICATION_MODE_OFFSET; uint16_t dGroupId = 0xFFFF; - uint32_t pairingOptions = (setRemoveGpdflag ? EMBER_AF_GP_PAIRING_OPTION_REMOVE_GPD : 0) - | (gpdAddr->applicationId & EMBER_AF_GP_NOTIFICATION_OPTION_APPLICATION_ID) + uint32_t pairingOptions = (gpdAddr->applicationId & EMBER_AF_GP_PAIRING_OPTION_APPLICATION_ID) + | (setRemoveGpdflag << EMBER_AF_GP_PAIRING_OPTION_REMOVE_GPD_OFFSET) | (gpsCommunicationMode << EMBER_AF_GP_PAIRING_OPTION_COMMUNICATION_MODE_OFFSET) | (secLvl << EMBER_AF_GP_PAIRING_OPTION_SECURITY_LEVEL_OFFSET) | (keyType << EMBER_AF_GP_PAIRING_OPTION_SECURITY_KEY_TYPE_OFFSET); @@ -613,7 +571,8 @@ static void decommissionGpd(uint8_t secLvl, 0xFFFFFFFF, NULL, 0xFFFF, - 0xFF); + 0xFF, + sendGpPairing); emberAfGreenPowerClusterPrintln("Gp Pairing for Decommissing send returned %d", retval); // In case of Sink was supporting groupcast for the GPD, then send a Gp Pairing config. @@ -934,7 +893,8 @@ static bool emGpCheckCommunicationModeSupport(uint8_t communicationModeToCheck) } static void sendGpPairingFromSinkEntry(EmberGpSinkTableEntry *sinkEntry, - uint16_t gppShortAddress) + uint16_t gppShortAddress, + bool sendGpPairing) { uint8_t appId = (sinkEntry->options & EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_APPLICATION_ID); uint8_t sinkCommunicationMode = (sinkEntry->options & EMBER_AF_GP_SINK_TABLE_ENTRY_OPTIONS_COMMUNICATION_MODE) @@ -983,11 +943,22 @@ static void sendGpPairingFromSinkEntry(EmberGpSinkTableEntry *sinkEntry, sinkEntry->gpdSecurityFrameCounter, sinkEntry->gpdKey.contents, sinkEntry->assignedAlias, - sinkEntry->groupcastRadius); + sinkEntry->groupcastRadius, + sendGpPairing); emberAfGreenPowerClusterPrintln("pairing send returned %d", retval); + // If a pairing was added, the sink SHALL send a Device_annce command + // for the alias (with the exception of lightweight unicast communication mode). + if (sendGpPairing + && (sinkCommunicationMode != EMBER_GP_SINK_TYPE_LW_UNICAST)) { + EmberEUI64 eui64 = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + emGpSpoofDeviceAnnce(sinkEntry->assignedAlias, // Short Id + eui64, // Eui64 + 0); // capabilities + } } -static void sendGpPairingLookingUpAddressInSinkEntry(EmberGpAddress *gpdAddr) +static void sendGpPairingLookingUpAddressInSinkEntry(EmberGpAddress *gpdAddr, + bool sendGpPairing) { if (gpdAddr == NULL) { return; @@ -1002,7 +973,8 @@ static void sendGpPairingLookingUpAddressInSinkEntry(EmberGpAddress *gpdAddr) return; } sendGpPairingFromSinkEntry(&sinkEntry, - EMBER_RX_ON_WHEN_IDLE_BROADCAST_ADDRESS); + EMBER_RX_ON_WHEN_IDLE_BROADCAST_ADDRESS, + sendGpPairing); } // Builds a list of all the gpd commands from incoming commissioning req @@ -1576,21 +1548,17 @@ static void handleSinkEntryAndPairing(GpCommDataSaved *commissioningGpd) } // End of Sink Table Update + sendGpPairingFromSinkEntry(&sinkEntry, + commissioningGpd->gppShortAddress, + !(commissioningGpd->doNotSendGpPairing)); + if (commissioningGpd->doNotSendGpPairing) { commissioningGpd->doNotSendGpPairing = false; return; } - sendGpPairingFromSinkEntry(&sinkEntry, - commissioningGpd->gppShortAddress); - // Send GpPairing Configuration Based on Sink Communication mode sendGpPairingConfigBasedOnSinkCommunicationMode(commissioningGpd); - // If a pairing was added, the sink SHALL send a Device_annce command - // for the alias (with the exception of lightweight unicast communication mode). - if (sinkCommunicationMode != EMBER_GP_SINK_TYPE_LW_UNICAST) { - sendDeviceAnncement(sinkEntry.assignedAlias); - } } static void handleClosingCommissioningSessionOnFirstPairing(GpCommDataSaved *commissioningGpd) @@ -2032,7 +2000,7 @@ static bool gpCommissioningNotificationDecommissioningGpdf(uint16_t commNotifica >> EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_LEVEL_OFFSET); uint8_t keyType = ((commNotificationOptions & EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_KEY_TYPE) >> EMBER_AF_GP_COMMISSIONING_NOTIFICATION_OPTION_SECURITY_KEY_TYPE_OFFSET); - decommissionGpd(secLvl, keyType, gpdAddr, true); + decommissionGpd(secLvl, keyType, gpdAddr, true, true); return true; } @@ -2465,6 +2433,9 @@ WEAK(void emberAfPluginGreenPowerServerStackStatusCallback(EmberStatus status)) if (!emberAfGreenPowerServerUpdateInvolveTCCallback(status)) { updateInvolveTC(status); } + if (status == EMBER_NETWORK_UP) { + emberAfGreenPowerServerSinkTableInit(); + } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -2658,6 +2629,24 @@ bool emberAfGreenPowerClusterGpNotificationCallback(EmberAfClusterCommand *cmd) // Address 0 only for channel request command. return true; } + if (cmd_data.gpdCommandId == EMBER_ZCL_GP_GPDF_COMMISSIONING) { + return true; // Drop Commissioning Command - Test 4.4.2.8 Step 5 + } + if (cmd_data.gpdCommandId == EMBER_ZCL_GP_GPDF_DECOMMISSIONING) { + decommissionGpd(((cmd_data.options & EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_LEVEL) >> EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_LEVEL_OFFSET), + ((cmd_data.options & EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_KEY_TYPE) >> EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_KEY_TYPE_OFFSET), + &gpdAddr, + true, + true); + return true; + } + if (cmd_data.gpdCommandId == EMBER_ZCL_GP_GPDF_CHANNEL_REQUEST) { + handleChannelRequest(cmd_data.options, + cmd_data.gppShortAddress, + ((cmd_data.options & EMBER_AF_GP_NOTIFICATION_OPTION_RX_AFTER_TX) ? true : false), + cmd_data.gpdCommandPayload); + return true; + } emberAfGreenPowerClusterPrintln("command %d", cmd_data.gpdCommandId); //if (cmd_data.gpdCommandPayload != NULL) { // Ensure gpdCommandPayload is not NULL to print the payload // emberAfGreenPowerClusterPrint("payload: "); @@ -2693,39 +2682,27 @@ bool emberAfGreenPowerClusterGpNotificationCallback(EmberAfClusterCommand *cmd) } emberGpSinkTableSetSecurityFrameCounter(sinkIndex, cmd_data.gpdSecurityFrameCounter); } - if (cmd_data.gpdCommandId == EMBER_ZCL_GP_GPDF_DECOMMISSIONING) { - decommissionGpd(((cmd_data.options & EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_LEVEL) >> EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_LEVEL_OFFSET), - ((cmd_data.options & EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_KEY_TYPE) >> EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_KEY_TYPE_OFFSET), - &gpdAddr, - true); - } else if (cmd_data.gpdCommandId == EMBER_ZCL_GP_GPDF_CHANNEL_REQUEST) { - handleChannelRequest(cmd_data.options, - cmd_data.gppShortAddress, - ((cmd_data.options & EMBER_AF_GP_NOTIFICATION_OPTION_RX_AFTER_TX) ? true : false), - cmd_data.gpdCommandPayload); - } else { - // Call user first to give a chance to handle the notification. - if (emberAfGreenPowerClusterGpNotificationForwardCallback(cmd_data.options, - &gpdAddr, - cmd_data.gpdSecurityFrameCounter, - cmd_data.gpdCommandId, - cmd_data.gpdCommandPayload, - cmd_data.gppShortAddress, - cmd_data.gppDistance)) { - return true; - } - // Check if sink has the translation table support in the gpsFunctionality attribute? - if (sinkFunctionalitySupported(EMBER_AF_GP_GPS_FUNCTIONALITY_TRANSLATION_TABLE)) { - #ifdef SL_CATALOG_ZIGBEE_GREEN_POWER_TRANSLATION_TABLE_PRESENT - emGpForwardGpdCommandBasedOnTranslationTable(&gpdAddr, - cmd_data.gpdCommandId, - cmd_data.gpdCommandPayload); - #else - emGpForwardGpdCommandDefault(&gpdAddr, - cmd_data.gpdCommandId, - cmd_data.gpdCommandPayload); - #endif // SL_CATALOG_ZIGBEE_GREEN_POWER_TRANSLATION_TABLE_PRESENT - } + // Call user first to give a chance to handle the notification. + if (emberAfGreenPowerClusterGpNotificationForwardCallback(cmd_data.options, + &gpdAddr, + cmd_data.gpdSecurityFrameCounter, + cmd_data.gpdCommandId, + cmd_data.gpdCommandPayload, + cmd_data.gppShortAddress, + cmd_data.gppDistance)) { + return true; + } + // Check if sink has the translation table support in the gpsFunctionality attribute? + if (sinkFunctionalitySupported(EMBER_AF_GP_GPS_FUNCTIONALITY_TRANSLATION_TABLE)) { + #ifdef SL_CATALOG_ZIGBEE_GREEN_POWER_TRANSLATION_TABLE_PRESENT + emGpForwardGpdCommandBasedOnTranslationTable(&gpdAddr, + cmd_data.gpdCommandId, + cmd_data.gpdCommandPayload); + #else + emGpForwardGpdCommandDefault(&gpdAddr, + cmd_data.gpdCommandId, + cmd_data.gpdCommandPayload); + #endif // SL_CATALOG_ZIGBEE_GREEN_POWER_TRANSLATION_TABLE_PRESENT } return true; } @@ -2927,15 +2904,14 @@ bool emberAfGreenPowerClusterGpPairingConfigurationCallback(EmberAfClusterComman // Action 0b000 (No Action) // Input(s) - SendGpPairingBit , Gpd Address if (gpConfigAtion == EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_NO_ACTION) { - if (cmd_data.actions & EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_SEND_GP_PAIRING) { - sendGpPairingLookingUpAddressInSinkEntry(&gpdAddr); - } + sendGpPairingLookingUpAddressInSinkEntry(&gpdAddr, + (cmd_data.actions & EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_SEND_GP_PAIRING)); return true; } // Action = 0b100 (Remove GPD) // Input(s) - Gpd Address if (gpConfigAtion == EMBER_ZCL_GP_PAIRING_CONFIGURATION_ACTION_REMOVE_GPD) { - decommissionGpd(0, 0, &gpdAddr, true); + decommissionGpd(0, 0, &gpdAddr, true, cmd_data.actions & EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_SEND_GP_PAIRING); return true; } // Action = 0b011 (Remove Pairing) @@ -2950,7 +2926,7 @@ bool emberAfGreenPowerClusterGpPairingConfigurationCallback(EmberAfClusterComman return true; } if (emberGpSinkTableLookup(&gpdAddr) != 0xFF) { - decommissionGpd(0, 0, &gpdAddr, false); + decommissionGpd(0, 0, &gpdAddr, false, cmd_data.actions & EMBER_AF_GP_PAIRING_CONFIGURATION_ACTIONS_SEND_GP_PAIRING); } return true; } @@ -3414,6 +3390,7 @@ bool emberAfGreenPowerClusterGpNotificationCallback(uint16_t options, decommissionGpd(((options & EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_LEVEL) >> EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_LEVEL_OFFSET), ((options & EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_KEY_TYPE) >> EMBER_AF_GP_NOTIFICATION_OPTION_SECURITY_KEY_TYPE_OFFSET), &gpdAddr, + true, true); } else if (gpdCommandId == EMBER_ZCL_GP_GPDF_CHANNEL_REQUEST) { handleChannelRequest(options, diff --git a/protocol/zigbee/app/framework/plugin/hc-11073-tunnel/11073-tunnel.c b/protocol/zigbee/app/framework/plugin/hc-11073-tunnel/11073-tunnel.c index 0ba82c0a482..85689a1aced 100644 --- a/protocol/zigbee/app/framework/plugin/hc-11073-tunnel/11073-tunnel.c +++ b/protocol/zigbee/app/framework/plugin/hc-11073-tunnel/11073-tunnel.c @@ -28,7 +28,9 @@ bool emberAf11073ProtocolTunnelClusterConnectRequestCallback(EmberAfClusterComma sl_zcl_11073_protocol_tunnel_cluster_connect_request_command_t cmd_data; bool connected = false; bool preemptible = false; + // NOTE status set never checked. EmberAfStatus status; + (void) status; if (zcl_decode_11073_protocol_tunnel_cluster_connect_request_command(cmd, &cmd_data) != EMBER_ZCL_STATUS_SUCCESS) { @@ -100,8 +102,10 @@ bool emberAf11073ProtocolTunnelClusterDisconnectRequestCallback(EmberAfClusterCo sl_zcl_11073_protocol_tunnel_cluster_disconnect_request_command_t cmd_data; bool connected = false; EmberEUI64 currentManager; - bool preemptible; + bool preemptible = false; + // NOTE status set never checked. EmberAfStatus status; + (void) status; if (zcl_decode_11073_protocol_tunnel_cluster_disconnect_request_command(cmd, &cmd_data) != EMBER_ZCL_STATUS_SUCCESS) { diff --git a/protocol/zigbee/app/framework/plugin/interpan/interpan-host.c b/protocol/zigbee/app/framework/plugin/interpan/interpan-host.c index 5684c64eb84..3554bf796e6 100644 --- a/protocol/zigbee/app/framework/plugin/interpan/interpan-host.c +++ b/protocol/zigbee/app/framework/plugin/interpan/interpan-host.c @@ -22,12 +22,21 @@ //------------------------------------------------------------------------------ +#ifdef UC_BUILD +void emAfPluginInterpanMacFilterMatchMessageCallback(uint8_t filterIndexMatch, + EmberMacPassthroughType legacyPassthroughType, + uint8_t lastHopLqi, + int8_t lastHopRssi, + uint8_t messageLength, + uint8_t *messageContents) +#else // !UC_BUILD void ezspMacFilterMatchMessageHandler(uint8_t filterIndexMatch, EmberMacPassthroughType legacyPassthroughType, uint8_t lastHopLqi, int8_t lastHopRssi, uint8_t messageLength, uint8_t *messageContents) +#endif { emAfPluginInterpanProcessMessage(messageLength, messageContents); diff --git a/protocol/zigbee/app/framework/plugin/key-establishment/key-establishment.c b/protocol/zigbee/app/framework/plugin/key-establishment/key-establishment.c index 7824c627bf5..57f5d294a24 100644 --- a/protocol/zigbee/app/framework/plugin/key-establishment/key-establishment.c +++ b/protocol/zigbee/app/framework/plugin/key-establishment/key-establishment.c @@ -450,26 +450,6 @@ static void keyEstablishStateMachine(KeyEstablishEvent newEvent, return; } } - } else if (!isCbkeKeyEstablishmentSuiteValid() || (lastEvent != NO_KEY_ESTABLISHMENT_EVENT)) { - KeyEstablishmentPartner tmpPartner; - emberAfKeyEstablishmentClusterPrintln("emAfAvailableCbkeSuite %u last event %u", emAfAvailableCbkeSuite, lastEvent); - // If we have not successfully initialized or we are already in doing - // key establishment with another partner, tell this new partner to go - // away and maybe try again later. The sendTerminateMessage function - // assumes it is sending to the current partner, so we have to temporarily - // switch to the new partner, send the terminate, and then switch back to - // our real partner. - MEMCOPY(&tmpPartner, &keyEstPartner, sizeof(KeyEstablishmentPartner)); - emberAfKeyEstablishmentClusterPrintln(isCbkeKeyEstablishmentSuiteValid() - ? "Second Key estabishment not supported, terminating it." - : "Key Est. FAILED INITIALIZATION, terminating"); - if (setPartnerFromCommand(cmd)) { - keyEstPartner.sequenceNumber = cmd->seqNum; - sendTerminateMessage(EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_NO_RESOURCES, - BACK_OFF_TIME_REPORTED_TO_PARTNER); - } - MEMMOVE(&keyEstPartner, &tmpPartner, sizeof(KeyEstablishmentPartner)); - return; } else { // MISRA requires ..else if.. to have terminating else. } @@ -1519,7 +1499,12 @@ bool emberAfKeyEstablishmentClusterInitiateKeyEstablishmentRequestCallback(uint1 EmberAfClusterCommand *cmd = emberAfCurrentCommand(); emberAfKeyEstablishmentClusterPrintln("Suite %u\r\n", keyEstablishmentSuite); emAfKeyEstablishmentSelectCurve(keyEstablishmentSuite); - if (checkMalformed283k1Command(true)) { + if (cmd != NULL && setPartnerFromCommand(cmd)) { + keyEstPartner.sequenceNumber = cmd->seqNum; + if (checkMalformed283k1Command(true)) { + return true; + } + } else { return true; } keyEstablishStateMachine(BEGIN_KEY_ESTABLISHMENT, @@ -1824,7 +1809,28 @@ uint32_t emberAfKeyEstablishmentClusterServerCommandParse(sl_service_opcode_t op EmberAfClusterCommand *cmd = (EmberAfClusterCommand *)context->data; EmberAfStatus zclStatus = EMBER_ZCL_STATUS_UNSUP_COMMAND; - if (!cmd->mfgSpecific) { + if (((!commandIsFromOurPartner(cmd)) && (lastEvent != NO_KEY_ESTABLISHMENT_EVENT)) \ + || (!isCbkeKeyEstablishmentSuiteValid())) { + KeyEstablishmentPartner tmpPartner; + emberAfKeyEstablishmentClusterPrintln("emAfAvailableCbkeSuite %u last event %u", emAfAvailableCbkeSuite, lastEvent); + // If we have not successfully initialized or we are already in doing + // key establishment with another partner, tell this new partner to go + // away and maybe try again later. The sendTerminateMessage function + // assumes it is sending to the current partner, so we have to temporarily + // switch to the new partner, send the terminate, and then switch back to + // our real partner. + MEMCOPY(&tmpPartner, &keyEstPartner, sizeof(KeyEstablishmentPartner)); + emberAfKeyEstablishmentClusterPrintln(isCbkeKeyEstablishmentSuiteValid() + ? "Second Key estabishment not supported, terminating it." + : "Key Est. FAILED INITIALIZATION, terminating"); + if (setPartnerFromCommand(cmd)) { + keyEstPartner.sequenceNumber = cmd->seqNum; + sendTerminateMessage(EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_NO_RESOURCES, + BACK_OFF_TIME_REPORTED_TO_PARTNER); + } + MEMMOVE(&keyEstPartner, &tmpPartner, sizeof(KeyEstablishmentPartner)); + return EMBER_ZCL_STATUS_SUCCESS; + } else if (!cmd->mfgSpecific) { switch (cmd->commandId) { case ZCL_INITIATE_KEY_ESTABLISHMENT_REQUEST_COMMAND_ID: { @@ -1993,6 +1999,29 @@ uint32_t emberAfKeyEstablishmentClusterClientCommandParse(sl_service_opcode_t op static bool commandReceivedHandler(EmberAfClusterCommand *cmd) { // EmberAfStatus status = keyEstablishmentClusterCommandParse(cmd); + if ((cmd->direction == ZCL_DIRECTION_CLIENT_TO_SERVER) \ + && (((!commandIsFromOurPartner(cmd)) && (lastEvent != NO_KEY_ESTABLISHMENT_EVENT)) \ + || (!isCbkeKeyEstablishmentSuiteValid()))) { + KeyEstablishmentPartner tmpPartner; + emberAfKeyEstablishmentClusterPrintln("emAfAvailableCbkeSuite %u last event %u", emAfAvailableCbkeSuite, lastEvent); + // If we have not successfully initialized or we are already in doing + // key establishment with another partner, tell this new partner to go + // away and maybe try again later. The sendTerminateMessage function + // assumes it is sending to the current partner, so we have to temporarily + // switch to the new partner, send the terminate, and then switch back to + // our real partner. + MEMCOPY(&tmpPartner, &keyEstPartner, sizeof(KeyEstablishmentPartner)); + emberAfKeyEstablishmentClusterPrintln(isCbkeKeyEstablishmentSuiteValid() + ? "Second Key estabishment not supported, terminating it." + : "Key Est. FAILED INITIALIZATION, terminating"); + if (setPartnerFromCommand(cmd)) { + keyEstPartner.sequenceNumber = cmd->seqNum; + sendTerminateMessage(EMBER_ZCL_AMI_KEY_ESTABLISHMENT_STATUS_NO_RESOURCES, + BACK_OFF_TIME_REPORTED_TO_PARTNER); + } + MEMMOVE(&keyEstPartner, &tmpPartner, sizeof(KeyEstablishmentPartner)); + return true; + } EmberAfStatus status = (cmd->direction == ZCL_DIRECTION_CLIENT_TO_SERVER ? emberAfKeyEstablishmentClusterServerCommandParse(cmd) : emberAfKeyEstablishmentClusterClientCommandParse(cmd)); diff --git a/protocol/zigbee/app/framework/plugin/key-establishment/key-establishment.h b/protocol/zigbee/app/framework/plugin/key-establishment/key-establishment.h index 9d3d81139cd..b0ee6ce6ea0 100644 --- a/protocol/zigbee/app/framework/plugin/key-establishment/key-establishment.h +++ b/protocol/zigbee/app/framework/plugin/key-establishment/key-establishment.h @@ -19,6 +19,7 @@ #ifdef UC_BUILD #include "zigbee_app_framework_callback.h" +#include "zigbee_stack_callback_dispatcher.h" #endif // UC_BUILD /** @@ -80,17 +81,10 @@ extern const uint8_t emAfKeyEstablishMessageToDataSize[]; #ifdef UC_BUILD -#ifdef EZSP_HOST - #define emAfPluginKeyEstablishmentGenerateCbkeKeysHandler ezspGenerateCbkeKeysHandler - #define emAfPluginKeyEstablishmentCalculateSmacsHandler ezspCalculateSmacsHandler - #define emAfPluginKeyEstablishmentGenerateCbkeKeysHandler283k1 ezspGenerateCbkeKeysHandler283k1 - #define emAfPluginKeyEstablishmentCalculateSmacsHandler283k1 ezspCalculateSmacsHandler283k1 -#else // !EZSP_HOST - #define emAfPluginKeyEstablishmentGenerateCbkeKeysHandler emberAfGenerateCbkeKeysCallback - #define emAfPluginKeyEstablishmentCalculateSmacsHandler emberAfCalculateSmacsCallback - #define emAfPluginKeyEstablishmentGenerateCbkeKeysHandler283k1 emberAfGenerateCbkeKeysHandler283k1Callback - #define emAfPluginKeyEstablishmentCalculateSmacsHandler283k1 emberAfCalculateSmacsHandler283k1Callback -#endif // EZSP_HOST + #define emAfPluginKeyEstablishmentGenerateCbkeKeysHandler emAfGenerateCbkeKeysCallback + #define emAfPluginKeyEstablishmentCalculateSmacsHandler emAfCalculateSmacsCallback + #define emAfPluginKeyEstablishmentGenerateCbkeKeysHandler283k1 emAfGenerateCbkeKeysCallback283k1 + #define emAfPluginKeyEstablishmentCalculateSmacsHandler283k1 emAfCalculateSmacsCallback283k1 #else // !UC_BUILD #ifdef EZSP_HOST #define emAfPluginKeyEstablishmentGenerateCbkeKeysHandler ezspGenerateCbkeKeysHandler diff --git a/protocol/zigbee/app/framework/plugin/network-creator-security/network-creator-security.c b/protocol/zigbee/app/framework/plugin/network-creator-security/network-creator-security.c index 4df6b839396..e7aa5890c98 100644 --- a/protocol/zigbee/app/framework/plugin/network-creator-security/network-creator-security.c +++ b/protocol/zigbee/app/framework/plugin/network-creator-security/network-creator-security.c @@ -304,6 +304,10 @@ EmberStatus emberAfPluginNetworkCreatorSecurityStart(bool centralizedNetwork) EmberStatus emberAfPluginNetworkCreatorSecurityOpenNetwork(void) { +#if defined(BDB_JOIN_USES_INSTALL_CODE_KEY) + emberAfCorePrintln("open-network not permitted when install code joins are required"); + return EMBER_INVALID_CALL; +#endif //BDB_JOIN_USES_INSTALL_CODE_KEY EmberStatus status = EMBER_SUCCESS; EmberCurrentSecurityState securityState; @@ -432,7 +436,18 @@ void emberAfPluginNetworkCreatorSecurityOpenNetworkNetworkEventHandler(SLXU_UC_E } if (status == EMBER_SUCCESS) { +#if defined(EZSP_HOST) + EzspDecisionBitmask policy = (EZSP_DECISION_ALLOW_JOINS | EZSP_DECISION_ALLOW_UNSECURED_REJOINS); +#if defined(BDB_JOIN_USES_INSTALL_CODE_KEY) + policy |= EZSP_DECISION_JOINS_USE_INSTALL_CODE_KEY; +#endif // BDB_JOIN_USES_INSTALL_CODE_KEY + emberAfSetEzspPolicy(EZSP_TRUST_CENTER_POLICY, + policy, + "Trust Center Policy", + "Allow preconfigured key joins"); +#else // !EZSP_HOST zaTrustCenterSetJoinPolicy(EMBER_USE_PRECONFIGURED_KEY); +#endif // EZSP_HOST status = emberAfPermitJoin(permitJoinTime, true); // broadcast permit join } diff --git a/protocol/zigbee/app/framework/plugin/ota-client/ota-client-signature-verify.c b/protocol/zigbee/app/framework/plugin/ota-client/ota-client-signature-verify.c index cd3a33ff5d0..0ec7a2ca82f 100644 --- a/protocol/zigbee/app/framework/plugin/ota-client/ota-client-signature-verify.c +++ b/protocol/zigbee/app/framework/plugin/ota-client/ota-client-signature-verify.c @@ -525,15 +525,18 @@ static void dsaVerifyHandler(EmberStatus status) } #if defined (EZSP_HOST) - +#ifdef UC_BUILD +void emAfDsaVerifyCallback(EmberStatus status) +#else // !UC_BUILD void ezspDsaVerifyHandler(EmberStatus status) +#endif // UC_BUILD { dsaVerifyHandler(status); } #else #ifdef UC_BUILD -void emberAfDsaVerifyCallback(EmberStatus status) +void emAfDsaVerifyCallback(EmberStatus status) #else // !UC_BUILD void emberDsaVerifyHandler(EmberStatus status) #endif // UC_BUILD @@ -553,6 +556,13 @@ EmberAfImageVerifyStatus emAfOtaImageSignatureVerify(uint16_t maxHashCalculation return EMBER_AF_NO_IMAGE_VERIFY_SUPPORT; } +#ifdef UC_BUILD +void emAfDsaVerifyCallback(EmberStatus status) +{ + (void)status; +} +#endif // UC_BUILD + #endif //------------------------------------------------------------------------------ diff --git a/protocol/zigbee/app/framework/plugin/ota-client/ota-client.c b/protocol/zigbee/app/framework/plugin/ota-client/ota-client.c index e44191a3ef9..2640605192a 100644 --- a/protocol/zigbee/app/framework/plugin/ota-client/ota-client.c +++ b/protocol/zigbee/app/framework/plugin/ota-client/ota-client.c @@ -827,7 +827,7 @@ static void startServerDiscovery(void) // Figure out the right app profile ID based on the endpoint descriptor index = emberAfIndexFromEndpoint(myEndpoint); - if (0xFF == index) { + if (0xFF == index || (index >= MAX_ENDPOINT_COUNT)) { otaPrintln("Invalid EP %d when trying to send OTA message.", myEndpoint); return; } @@ -1433,7 +1433,7 @@ static void sendMessage(uint8_t cmdId, uint8_t upgradeEndStatus, uint32_t timer) // Figure out the right app profile ID based on the endpoint descriptor index = emberAfIndexFromEndpoint(myEndpoint); - if (0xFF == index) { + if (0xFF == index || (index >= MAX_ENDPOINT_COUNT)) { otaPrintln("Invalid EP %d when trying to send OTA message.", myEndpoint); return; } diff --git a/protocol/zigbee/app/framework/plugin/ota-storage-simple-eeprom/ota-storage-eeprom.c b/protocol/zigbee/app/framework/plugin/ota-storage-simple-eeprom/ota-storage-eeprom.c index 84fe449989e..5f26d75e8a0 100644 --- a/protocol/zigbee/app/framework/plugin/ota-storage-simple-eeprom/ota-storage-eeprom.c +++ b/protocol/zigbee/app/framework/plugin/ota-storage-simple-eeprom/ota-storage-eeprom.c @@ -270,6 +270,12 @@ static bool readWritePrimitive(bool read, uint32_t length, uint8_t* readData) { + // Because the EEPROM code only handles the length as a 16-bit number, + // we catch that error case. + if (length > 65535) { + return false; + } + uint8_t count = 1; uint8_t i; uint32_t realLength = length; @@ -282,12 +288,6 @@ static bool readWritePrimitive(bool read, count = 2; } - // Because the EEPROM code only handles the length as a 16-bit number, - // we catch that error case. - if (length > 65535) { - return false; - } - for (i = 0; i < count; i++) { uint8_t status; diff --git a/protocol/zigbee/app/framework/plugin/prepayment-server/prepayment-server-cli.c b/protocol/zigbee/app/framework/plugin/prepayment-server/prepayment-server-cli.c index 9a59f062d06..c12f01b61ac 100644 --- a/protocol/zigbee/app/framework/plugin/prepayment-server/prepayment-server-cli.c +++ b/protocol/zigbee/app/framework/plugin/prepayment-server/prepayment-server-cli.c @@ -65,14 +65,14 @@ void emAfPrepaymentServerCliWriteAttribute(sl_cli_command_arg_t *arguments) uint16_t attributeId; uint8_t status; uint8_t endpoint; - uint8_t numBytes; uint8_t attributeType; uint32_t value; endpoint = sl_cli_get_argument_uint8(arguments, 0); attributeId = sl_cli_get_argument_uint16(arguments, 1); attributeType = sl_cli_get_argument_uint8(arguments, 2); - numBytes = sl_cli_get_argument_uint8(arguments, 3); + // NOTE unused cli argument + // uint8_t numBytes = sl_cli_get_argument_uint8(arguments, 3); value = sl_cli_get_argument_uint32(arguments, 4); status = emberAfWriteAttribute(endpoint, ZCL_PREPAYMENT_CLUSTER_ID, attributeId, diff --git a/protocol/zigbee/app/framework/plugin/reporting/reporting-cli.c b/protocol/zigbee/app/framework/plugin/reporting/reporting-cli.c index 9b8ebe7348b..2a805d45127 100644 --- a/protocol/zigbee/app/framework/plugin/reporting/reporting-cli.c +++ b/protocol/zigbee/app/framework/plugin/reporting/reporting-cli.c @@ -80,17 +80,19 @@ void emAfPluginReportingCliRemove(sl_cli_command_arg_t *arguments) void emAfPluginReportingCliAdd(sl_cli_command_arg_t *arguments) { EmberAfStatus status = EMBER_ZCL_STATUS_SUCCESS; - EmberAfPluginReportingEntry entry; - entry.endpoint = sl_cli_get_argument_uint8(arguments, 0); - entry.clusterId = sl_cli_get_argument_uint16(arguments, 1); - entry.attributeId = sl_cli_get_argument_uint16(arguments, 2); - entry.mask = (uint8_t)(sl_cli_get_argument_uint8(arguments, 3) == 0 - ? CLUSTER_MASK_CLIENT - : CLUSTER_MASK_SERVER); - entry.manufacturerCode = EMBER_AF_NULL_MANUFACTURER_CODE; - entry.data.reported.minInterval = sl_cli_get_argument_uint16(arguments, 4); - entry.data.reported.maxInterval = sl_cli_get_argument_uint16(arguments, 5); - entry.data.reported.reportableChange = sl_cli_get_argument_uint32(arguments, 6); + EmberAfPluginReportingEntry entry = { + .endpoint = (int8u)sl_cli_get_argument_uint8(arguments, 0), + .clusterId = (EmberAfClusterId)sl_cli_get_argument_uint16(arguments, 1), + .attributeId = (EmberAfAttributeId)sl_cli_get_argument_uint16(arguments, 2), + .mask = (int8u)(sl_cli_get_argument_uint8(arguments, 3) == 0 + ? CLUSTER_MASK_CLIENT + : CLUSTER_MASK_SERVER), + .manufacturerCode = EMBER_AF_NULL_MANUFACTURER_CODE, + .data.reported.minInterval = (int16u)sl_cli_get_argument_uint16(arguments, 4), + .data.reported.maxInterval = (int16u)sl_cli_get_argument_uint16(arguments, 5), + .data.reported.reportableChange = (int32u)sl_cli_get_argument_uint32(arguments, 6), + .direction = EMBER_ZCL_REPORTING_DIRECTION_REPORTED, + }; UNUSED_VAR(status); status = emberAfPluginReportingConfigureReportedAttribute(&entry); diff --git a/protocol/zigbee/app/framework/plugin/reporting/reporting.c b/protocol/zigbee/app/framework/plugin/reporting/reporting.c index 0d1c2687c83..4685b7ddb61 100644 --- a/protocol/zigbee/app/framework/plugin/reporting/reporting.c +++ b/protocol/zigbee/app/framework/plugin/reporting/reporting.c @@ -63,6 +63,9 @@ sl_zigbee_event_t emberAfPluginReportingTickEvent; #define tickEvent (&emberAfPluginReportingTickEvent) void emberAfPluginReportingTickEventHandler(SLXU_UC_EVENT); #else +#ifdef EMBER_TEST +#define emberAfDetectReportChangedCallback(value1, value2, dataType) 0 +#endif EmberEventControl emberAfPluginReportingTickEventControl; #define tickEvent emberAfPluginReportingTickEventControl #endif // UC_BUILD @@ -760,11 +763,29 @@ static void markReportTableChange(uint8_t *dataRef, EmberAfDifferenceType difference = emberAfGetDifference(dataRef, emAfPluginReportVolatileData[entryIndex].lastReportValue, - dataSize); + dataSize, + dataType); uint8_t analogOrDiscrete = emberAfGetAttributeAnalogOrDiscreteType(dataType); + bool changed = false; + + if (dataType == ZCL_FLOAT_SEMI_ATTRIBUTE_TYPE + || dataType == ZCL_FLOAT_DOUBLE_ATTRIBUTE_TYPE) { + changed = emberAfDetectReportChangedCallback(entry->data.reported.reportableChange, + difference, + dataType); + } else if (dataType == ZCL_FLOAT_SINGLE_ATTRIBUTE_TYPE) { + float reportableChange = 0, diffFloat = 0; + + memcpy(&reportableChange, &entry->data.reported.reportableChange, sizeof(float)); + memcpy(&diffFloat, &difference, sizeof(float)); + + changed = reportableChange <= diffFloat; + } else { + changed = entry->data.reported.reportableChange <= difference; + } + if ((analogOrDiscrete == EMBER_AF_DATA_TYPE_DISCRETE && difference != 0) - || (analogOrDiscrete == EMBER_AF_DATA_TYPE_ANALOG - && entry->data.reported.reportableChange <= difference)) { + || (analogOrDiscrete == EMBER_AF_DATA_TYPE_ANALOG && changed)) { emAfPluginReportVolatileData[entryIndex].reportableChange = true; scheduleTick(); } @@ -1268,3 +1289,12 @@ WEAK(bool emberAfPluginReportingGetDefaultReportingConfigCallback(EmberAfPluginR entry->direction = EMBER_ZCL_REPORTING_DIRECTION_REPORTED; return true; } + +#ifdef UC_BUILD +WEAK(bool emberAfDetectReportChangedCallback(EmberAfDifferenceType threshold, + EmberAfDifferenceType diff, + EmberAfAttributeType dataType)) +{ + return false; +} +#endif diff --git a/protocol/zigbee/app/framework/plugin/simple-metering-server/simple-metering-test.c b/protocol/zigbee/app/framework/plugin/simple-metering-server/simple-metering-test.c index 2c4d904c09d..758563bbbb4 100644 --- a/protocol/zigbee/app/framework/plugin/simple-metering-server/simple-metering-test.c +++ b/protocol/zigbee/app/framework/plugin/simple-metering-server/simple-metering-test.c @@ -99,89 +99,6 @@ static void addToByteArrayHighLow(uint8_t *data, } #endif // BIGENDIAN_CPU -static uint32_t getMeteringConsumptionRate(uint8_t endpoint) -{ - uint8_t multiplierArray[] = { 0, 0, 0 }; - uint8_t divisorArray[] = { 0, 0, 0 }; - EmberAfAttributeType dataType; - uint32_t multiplier; - uint32_t divisor; - uint32_t returnValue; - - // Now let's adjust the summation - (void)emberAfReadAttribute(endpoint, - ZCL_SIMPLE_METERING_CLUSTER_ID, - ZCL_MULTIPLIER_ATTRIBUTE_ID, - CLUSTER_MASK_SERVER, - multiplierArray, - 3, - &dataType); - - (void)emberAfReadAttribute(endpoint, - ZCL_SIMPLE_METERING_CLUSTER_ID, - ZCL_DIVISOR_ATTRIBUTE_ID, - CLUSTER_MASK_SERVER, - divisorArray, - 3, - &dataType); - - multiplier = multiplierArray[2] << 16 | multiplierArray[1] << 8 | multiplierArray[0]; - divisor = divisorArray[2] << 16 | divisorArray[1] << 8 | divisorArray[0]; - returnValue = divisor > 0 ? multiplier / divisor : 0; - return returnValue; -} - -#if 0 -//TODO: Review why this code is unused -static void setMeteringConsumptionRate(uint16_t rate, uint8_t endpoint) -{ - uint8_t dataType; - EmberStatus status; - uint32_t multiplier; - uint32_t divisor; - - uint8_t multiplierArray[] = { 0, 0, 0 }; - uint8_t divisorArray[] = { 1, 0, 0 }; - multiplierArray[0] = rate & 0x00FF; - multiplierArray[1] = rate & 0xFF00 >> 8; - - // Now let's adjust the summation - status = emberAfWriteAttribute(endpoint, - ZCL_SIMPLE_METERING_CLUSTER_ID, - ZCL_MULTIPLIER_ATTRIBUTE_ID, - CLUSTER_MASK_SERVER, - multiplierArray, - ZCL_INT24U_ATTRIBUTE_TYPE); - - status = emberAfReadAttribute(endpoint, - ZCL_SIMPLE_METERING_CLUSTER_ID, - ZCL_MULTIPLIER_ATTRIBUTE_ID, - CLUSTER_MASK_SERVER, - multiplierArray, - 3, - &dataType); - - multiplier = multiplierArray[2] << 16 | multiplierArray[1] << 8 | multiplierArray[0]; - - status = emberAfWriteAttribute(endpoint, - ZCL_SIMPLE_METERING_CLUSTER_ID, - ZCL_DIVISOR_ATTRIBUTE_ID, - CLUSTER_MASK_SERVER, - divisorArray, - ZCL_INT24U_ATTRIBUTE_TYPE); - - status = emberAfReadAttribute(endpoint, - ZCL_SIMPLE_METERING_CLUSTER_ID, - ZCL_DIVISOR_ATTRIBUTE_ID, - CLUSTER_MASK_SERVER, - divisorArray, - 3, - &dataType); - divisor = divisorArray[2] << 16 | divisorArray[1] << 8 | divisorArray[0]; - emberAfCorePrintln("divisor %u", divisor); -} -#endif // 0 - void afTestMeterPrint(void) { emberAfSimpleMeteringClusterPrintln("TM:\r\n" @@ -411,7 +328,6 @@ void emAfTestMeterTick(uint8_t endpoint) uint32_t diff, currentTime; uint8_t status, dataType; uint8_t summation[] = { 0, 0, 0, 0, 0, 0 }; - uint32_t formatting; #if (EMBER_AF_PLUGIN_SIMPLE_METERING_SERVER_TEST_METER_PROFILES != 0) uint8_t intervalSummation[] = { 0, 0, 0 }; @@ -449,7 +365,6 @@ void emAfTestMeterTick(uint8_t endpoint) return; } - //diff = getMeteringConsumptionRate(endpoint); diff = (uint32_t)meterConsumptionRate; if ( meterConsumptionVariance > 0 ) { diff += (uint32_t)(emberGetPseudoRandomNumber() % meterConsumptionVariance); @@ -471,8 +386,6 @@ void emAfTestMeterTick(uint8_t endpoint) // summation[5]); } - formatting = getMeteringConsumptionRate(endpoint); - (void) emberAfWriteAttribute(endpoint, ZCL_SIMPLE_METERING_CLUSTER_ID, ZCL_CURRENT_SUMMATION_DELIVERED_ATTRIBUTE_ID, diff --git a/protocol/zigbee/app/framework/plugin/standalone-bootloader-common/bootloader-message-host.c b/protocol/zigbee/app/framework/plugin/standalone-bootloader-common/bootloader-message-host.c index fae22931999..6ff9391c441 100644 --- a/protocol/zigbee/app/framework/plugin/standalone-bootloader-common/bootloader-message-host.c +++ b/protocol/zigbee/app/framework/plugin/standalone-bootloader-common/bootloader-message-host.c @@ -44,11 +44,19 @@ EmberStatus emAfSendBootloadMessage(bool isBroadcast, message); } +#ifdef UC_BUILD +void emAfPluginStandaloneBootloaderCommonIncomingBootloadMessageCallback(EmberEUI64 longId, + uint8_t lastHopLqi, + int8_t lastHopRssi, + uint8_t messageLength, + uint8_t* messageContents) +#else // !UC_BUILD void ezspIncomingBootloadMessageHandler(EmberEUI64 longId, uint8_t lastHopLqi, int8_t lastHopRssi, uint8_t messageLength, uint8_t* messageContents) +#endif // UC_BUILD { if (messageLength > MAX_BOOTLOAD_MESSAGE_SIZE) { bootloadPrintln("Bootload message too long (%d > %d), dropping!", @@ -62,9 +70,15 @@ void ezspIncomingBootloadMessageHandler(EmberEUI64 longId, messageContents); } +#ifdef UC_BUILD +void emAfPluginStandaloneBootloaderCommonBootloadTransmitCompleteCallback(EmberStatus status, + uint8_t messageLength, + uint8_t *messageContents) +#else // !UC_BUILD void ezspBootloadTransmitCompleteHandler(EmberStatus status, uint8_t messageLength, uint8_t *messageContents) +#endif // UC_BUILD { if (status != EMBER_SUCCESS) { uint8_t commandId = 0xFF; diff --git a/protocol/zigbee/app/framework/plugin/throughput/throughput.c b/protocol/zigbee/app/framework/plugin/throughput/throughput.c index 02c3ae02d84..7743caab943 100644 --- a/protocol/zigbee/app/framework/plugin/throughput/throughput.c +++ b/protocol/zigbee/app/framework/plugin/throughput/throughput.c @@ -300,9 +300,11 @@ static bool messageSentHandler(EmberOutgoingMessageType type, } } + #ifdef EMBER_TEST assert(packetSendTimeMs != 0xFFFFFFFF); + #endif - if (status == EMBER_SUCCESS) { + if ((status == EMBER_SUCCESS) && (packetSendTimeMs != 0xFFFFFFFF)) { testParams.messageSuccessCount++; testParams.sumSendTimeMs += packetSendTimeMs; diff --git a/protocol/zigbee/app/framework/plugin/zll-commissioning-client/zll-commissioning-client.c b/protocol/zigbee/app/framework/plugin/zll-commissioning-client/zll-commissioning-client.c index 9553b48a862..3c8069e4a6d 100644 --- a/protocol/zigbee/app/framework/plugin/zll-commissioning-client/zll-commissioning-client.c +++ b/protocol/zigbee/app/framework/plugin/zll-commissioning-client/zll-commissioning-client.c @@ -904,11 +904,20 @@ void emberAfZllAbortTouchLink(void) } } +#ifdef EZSP_HOST +#ifdef UC_BUILD +void emAfZllNetworkFoundCallback(EmberZllNetwork *networkInfo, + bool isDeviceInfoNull, + EmberZllDeviceInfoRecord *deviceInfo, + uint8_t lastHopLqi, + int8_t lastHopRssi) +#else // !UC_BUILD void ezspZllNetworkFoundHandler(EmberZllNetwork *networkInfo, bool isDeviceInfoNull, EmberZllDeviceInfoRecord *deviceInfo, uint8_t lastHopLqi, int8_t lastHopRssi) +#endif // UC_BUILD { debugPrintln("ezspZllNwkFound: node type = %d, flags = %0x2X", networkInfo->nodeType, emAfZllFlags); if (touchLinkInProgress()) { @@ -929,8 +938,7 @@ void ezspZllNetworkFoundHandler(EmberZllNetwork *networkInfo, } } } - -#ifndef EZSP_HOST +#else // !EZSP_HOST #ifdef UC_BUILD void emAfZllNetworkFoundCallback(const EmberZllNetwork *networkInfo, const EmberZllDeviceInfoRecord *deviceInfo) @@ -966,17 +974,22 @@ void emberZllNetworkFoundHandler(const EmberZllNetwork *networkInfo, } #endif // EZSP_HOST +#ifdef EZSP_HOST +#ifdef UC_BUILD +void emAfZllScanCompleteCallback(EmberStatus scanStatus) +#else // !UC_BUILD void ezspZllScanCompleteHandler(EmberStatus scanStatus) +#endif // UC_BUILD { debugPrintln("%p: scan complete", PLUGIN_NAME); processScanComplete(scanStatus); } - +#else // !EZSP_HOST #ifdef UC_BUILD void emAfZllScanCompleteCallback(EmberStatus scanStatus) -#else +#else // !UC_BUILD void emberZllScanCompleteHandler(EmberStatus scanStatus) -#endif +#endif // UC_BUILD { debugPrintln("%p: scan complete", PLUGIN_NAME); processScanComplete(scanStatus); @@ -985,16 +998,24 @@ void emberZllScanCompleteHandler(EmberStatus scanStatus) emAfPluginTestHarnessZ3ZllScanCompleteCallback(scanStatus); #endif } +#endif // EZSP_HOST +#ifdef EZSP_HOST +#ifdef UC_BUILD +void emAfZllAddressAssignmentCallback(EmberZllAddressAssignment *addressInfo, + uint8_t lastHopLqi, + int8_t lastHopRssi) +#else // !UC_BUILD void ezspZllAddressAssignmentHandler(EmberZllAddressAssignment *addressInfo, uint8_t lastHopLqi, int8_t lastHopRssi) +#endif // UC_BUILD { if (touchLinkInProgress()) { emAfZllNetwork.nodeId = addressInfo->nodeId; } } - +#else // !EZSP_HOST #ifdef UC_BUILD void emAfZllAddressAssignmentCallback(const EmberZllAddressAssignment *addressInfo) #else @@ -1006,6 +1027,7 @@ void emberZllAddressAssignmentHandler(const EmberZllAddressAssignment *addressIn emAfZllNetwork.nodeId = addressInfo->nodeId; } } +#endif // EZSP_HOST void emberAfPluginZllCommissioningClientTouchLinkEventHandler(SLXU_UC_EVENT) { diff --git a/protocol/zigbee/app/framework/plugin/zll-commissioning-common/zll-commissioning-cli.c b/protocol/zigbee/app/framework/plugin/zll-commissioning-common/zll-commissioning-cli.c index 42d294f5079..f7b191749c0 100644 --- a/protocol/zigbee/app/framework/plugin/zll-commissioning-common/zll-commissioning-cli.c +++ b/protocol/zigbee/app/framework/plugin/zll-commissioning-common/zll-commissioning-cli.c @@ -176,7 +176,7 @@ void endpointInformation(sl_cli_command_arg_t *arguments) EmberStatus status = EMBER_INVALID_ENDPOINT; uint8_t endpoint = sl_cli_get_argument_uint8(arguments, 1); uint8_t index = emberAfIndexFromEndpoint(endpoint); - if (index != 0xFF) { + if (index != 0xFF && index < FIXED_ENDPOINT_COUNT) { // If the profile interop bit in the ZllInformation bitmask is cleared, // then we set the profile ID in our response to the ZLL profile ID. // If the bit is set, then we use the profile ID specified for the endpoint. diff --git a/protocol/zigbee/app/framework/plugin/zll-commissioning-server/zll-commissioning-server.c b/protocol/zigbee/app/framework/plugin/zll-commissioning-server/zll-commissioning-server.c index 32c7efa5dc3..a6143e4e16e 100644 --- a/protocol/zigbee/app/framework/plugin/zll-commissioning-server/zll-commissioning-server.c +++ b/protocol/zigbee/app/framework/plugin/zll-commissioning-server/zll-commissioning-server.c @@ -264,6 +264,17 @@ EmberStatus emberAfZllNoResetForNFN(void) return status; } +#ifdef UC_BUILD +void emAfZllTouchLinkTargetCallback(EmberZllNetwork *networkInfo) +{ + debugPrintln("%s: touchlink target handler", PLUGIN_NAME); + MEMMOVE(&emAfZllNetwork, networkInfo, sizeof(EmberZllNetwork)); +#ifdef ZLL_COMMISSIONING_CLIENT_PRESENT + emAfZllSubDeviceCount = 0; +#endif + emAfZllFlags = TOUCH_LINK_TARGET; +} +#else // !UC_BUILD void ezspZllTouchLinkTargetHandler(EmberZllNetwork *networkInfo) { debugPrintln("%p: touchlink target handler", PLUGIN_NAME); @@ -274,11 +285,7 @@ void ezspZllTouchLinkTargetHandler(EmberZllNetwork *networkInfo) emAfZllFlags = TOUCH_LINK_TARGET; } -#ifdef UC_BUILD -void emAfPluginZllCommissioningServerZllTouchLinkTargetCallback(const EmberZllNetwork *networkInfo) -#else void emberZllTouchLinkTargetHandler(const EmberZllNetwork *networkInfo) -#endif // UC_BUILD { debugPrintln("%p: touchlink target handler", PLUGIN_NAME); MEMMOVE(&emAfZllNetwork, networkInfo, sizeof(EmberZllNetwork)); @@ -287,3 +294,4 @@ void emberZllTouchLinkTargetHandler(const EmberZllNetwork *networkInfo) #endif emAfZllFlags = TOUCH_LINK_TARGET; } +#endif // UC_BUILD diff --git a/protocol/zigbee/app/framework/scenarios/multiprotocol/common/sl_ble_event_handler.c b/protocol/zigbee/app/framework/scenarios/multiprotocol/common/sl_ble_event_handler.c index 5d3a37d271a..bc4b8a6934a 100644 --- a/protocol/zigbee/app/framework/scenarios/multiprotocol/common/sl_ble_event_handler.c +++ b/protocol/zigbee/app/framework/scenarios/multiprotocol/common/sl_ble_event_handler.c @@ -249,9 +249,9 @@ uint8_t ascii_lut[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', ' void zb_ble_dmp_print_ble_address(uint8_t *address) { - emberAfCorePrint("\nBLE address: [%X %X %X %X %X %X]\n", - address[5], address[4], address[3], - address[2], address[1], address[0]); + sl_zigbee_app_debug_print("\nBLE address: [%02X %02X %02X %02X %02X %02X]\n", + address[5], address[4], address[3], + address[2], address[1], address[0]); } void bleConnectionInfoTableInit(void) @@ -300,24 +300,24 @@ void bleConnectionInfoTablePrintEntry(uint8_t index) { assert(index < SL_BT_CONFIG_MAX_CONNECTIONS && bleConnectionTable[index].inUse); - emberAfCorePrintln("**** Connection Info index[%d]****", index); - emberAfCorePrintln("connection handle 0x%x", - bleConnectionTable[index].connectionHandle); - emberAfCorePrintln("bonding handle = 0x%x", - bleConnectionTable[index].bondingHandle); - emberAfCorePrintln("local node is %s", - (bleConnectionTable[index].isMaster) ? "master" : "slave"); - emberAfCorePrint("remote address: "); + sl_zigbee_app_debug_println("**** Connection Info index[%d]****", index); + sl_zigbee_app_debug_println("connection handle 0x%x", + bleConnectionTable[index].connectionHandle); + sl_zigbee_app_debug_println("bonding handle = 0x%x", + bleConnectionTable[index].bondingHandle); + sl_zigbee_app_debug_println("local node is %s", + (bleConnectionTable[index].isMaster) ? "master" : "slave"); + sl_zigbee_app_debug_print("remote address: "); zb_ble_dmp_print_ble_address(bleConnectionTable[index].remoteAddress); - emberAfCorePrintln(""); - emberAfCorePrintln("*************************"); + sl_zigbee_app_debug_println(""); + sl_zigbee_app_debug_println("*************************"); } /* Characteristic read / write / notify handler functions */ void zb_ble_dmp_read_light_state(uint8_t connection) { uint16_t sent_data_len; - emberAfCorePrintln("Light state = %d\r\n", ble_lightState); + sl_zigbee_app_debug_println("Light state = %d\r\n", ble_lightState); /* Send response to read request */ sl_status_t status = sl_bt_gatt_server_send_user_read_response(connection, gattdb_light_state, @@ -327,14 +327,14 @@ void zb_ble_dmp_read_light_state(uint8_t connection) &sent_data_len); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Failed to zb_ble_dmp_read_light_state"); + sl_zigbee_app_debug_println("Failed to zb_ble_dmp_read_light_state"); } } void zb_ble_dmp_read_trigger_source(uint8_t connection) { uint16_t sent_data_len; - emberAfCorePrintln("Last event = %d\r\n", ble_lastEvent); + sl_zigbee_app_debug_println("Last event = %d\r\n", ble_lastEvent); /* Send response to read request */ sl_status_t status = sl_bt_gatt_server_send_user_read_response(connection, @@ -344,14 +344,14 @@ void zb_ble_dmp_read_trigger_source(uint8_t connection) &ble_lastEvent, &sent_data_len); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Failed to zb_ble_dmp_read_trigger_source"); + sl_zigbee_app_debug_println("Failed to zb_ble_dmp_read_trigger_source"); } } void zb_ble_dmp_read_source_address(uint8_t connection) { uint16_t sent_data_len; - emberAfCorePrintln("zb_ble_dmp_read_source_address"); + sl_zigbee_app_debug_println("zb_ble_dmp_read_source_address"); /* Send response to read request */ sl_status_t status = sl_bt_gatt_server_send_user_read_response(connection, @@ -362,13 +362,13 @@ void zb_ble_dmp_read_source_address(uint8_t connection) &sent_data_len); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Failed to zb_ble_dmp_read_source_address"); + sl_zigbee_app_debug_println("Failed to zb_ble_dmp_read_source_address"); } } void zb_ble_dmp_write_light_state(uint8_t connection, uint8array *writeValue) { - emberAfCorePrintln("Light state write; %d\r\n", writeValue->data[0]); + sl_zigbee_app_debug_println("Light state write; %d\r\n", writeValue->data[0]); sl_dmp_ui_set_light_direction(DMP_UI_DIRECTION_BLUETOOTH); ble_lightState = writeValue->data[0]; @@ -381,7 +381,7 @@ void zb_ble_dmp_write_light_state(uint8_t connection, uint8array *writeValue) SL_STATUS_OK); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Failed to zb_ble_dmp_write_light_state"); + sl_zigbee_app_debug_println("Failed to zb_ble_dmp_write_light_state"); return; } @@ -402,7 +402,7 @@ void zb_ble_dmp_notify_light(uint8_t lightState) sl_status_t status; if (ble_lightState_config == gatt_indication) { - emberAfCorePrintln("zb_ble_dmp_notify_light: Light state = %d\r\n", lightState); + sl_zigbee_app_debug_println("zb_ble_dmp_notify_light: Light state = %d\r\n", lightState); /* Send notification/indication data */ for (int i = 0; i < SL_BT_CONFIG_MAX_CONNECTIONS; i++) { if (bleConnectionTable[i].inUse @@ -413,7 +413,7 @@ void zb_ble_dmp_notify_light(uint8_t lightState) &lightState); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Failed to zb_ble_dmp_notify_light error : 0x%x", status); + sl_zigbee_app_debug_println("Failed to zb_ble_dmp_notify_light error : 0x%x", status); return; } } @@ -426,8 +426,8 @@ void zb_ble_dmp_notify_trigger_source(uint8_t connection, uint8_t triggerSource) sl_status_t status; if (ble_triggerSrc_config == gatt_indication) { - emberAfCorePrintln("zb_ble_dmp_notify_trigger_source :Last event = %d\r\n", - triggerSource); + sl_zigbee_app_debug_println("zb_ble_dmp_notify_trigger_source :Last event = %d\r\n", + triggerSource); /* Send notification/indication data */ status = sl_bt_gatt_server_send_indication(connection, gattdb_trigger_source, @@ -435,7 +435,7 @@ void zb_ble_dmp_notify_trigger_source(uint8_t connection, uint8_t triggerSource) &triggerSource); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Failed to zb_ble_dmp_notify_trigger_source"); + sl_zigbee_app_debug_println("Failed to zb_ble_dmp_notify_trigger_source"); return; } } @@ -451,7 +451,7 @@ void zb_ble_dmp_notify_source_address(uint8_t connection) sizeof(SourceAddress), SourceAddress); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Failed to zb_ble_dmp_notify_source_address"); + sl_zigbee_app_debug_println("Failed to zb_ble_dmp_notify_source_address"); return; } } @@ -478,7 +478,7 @@ void BeaconAdvertisements(uint16_t devId) /* Set custom advertising data */ status = sl_bt_legacy_advertiser_set_data(adv_handle[HANDLE_IBEACON], 0, advDataLen, advData); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Error sl_bt_legacy_advertiser_set_data code: 0x%0x", status); + sl_zigbee_app_debug_println("Error sl_bt_legacy_advertiser_set_data code: 0x%0x", status); return; } @@ -488,20 +488,20 @@ void BeaconAdvertisements(uint16_t devId) 0, // duration : continue advertisement until stopped 0); // max_events :continue advertisement until stopped if (status != SL_STATUS_OK) { - emberAfCorePrintln("Error iBeacon sl_bt_advertiser_set_timing code: 0x%0x", status); + sl_zigbee_app_debug_println("Error iBeacon sl_bt_advertiser_set_timing code: 0x%0x", status); return; } status = sl_bt_advertiser_configure(adv_handle[HANDLE_IBEACON], LE_GAP_NON_RESOLVABLE); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Error iBeacon sl_bt_advertiser_configure code: 0x%0x", status); + sl_zigbee_app_debug_println("Error iBeacon sl_bt_advertiser_configure code: 0x%0x", status); return; } status = sl_bt_legacy_advertiser_start(adv_handle[HANDLE_IBEACON], advertiser_non_connectable); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Error iBeacon sl_bt_legacy_advertiser_start code: 0x%0x", status); + sl_zigbee_app_debug_println("Error iBeacon sl_bt_legacy_advertiser_start code: 0x%0x", status); return; } @@ -510,7 +510,7 @@ void BeaconAdvertisements(uint16_t devId) /* Set custom advertising data */ status = sl_bt_legacy_advertiser_set_data(adv_handle[HANDLE_EDDYSTONE], 0, advDataLen, advData); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Error eddystone sl_bt_legacy_advertiser_set_data code: 0x%0x", status); + sl_zigbee_app_debug_println("Error eddystone sl_bt_legacy_advertiser_set_data code: 0x%0x", status); return; } @@ -520,20 +520,20 @@ void BeaconAdvertisements(uint16_t devId) 0, // duration : continue advertisement until stopped 0); // max_events :continue advertisement until stopped if (status != SL_STATUS_OK) { - emberAfCorePrintln("Error eddystone sl_bt_advertiser_set_timing code: 0x%0x", status); + sl_zigbee_app_debug_println("Error eddystone sl_bt_advertiser_set_timing code: 0x%0x", status); return; } status = sl_bt_advertiser_configure(adv_handle[HANDLE_EDDYSTONE], LE_GAP_NON_RESOLVABLE); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Error eddystone sl_bt_advertiser_configure code: 0x%0x", status); + sl_zigbee_app_debug_println("Error eddystone sl_bt_advertiser_configure code: 0x%0x", status); return; } status = sl_bt_legacy_advertiser_start(adv_handle[HANDLE_EDDYSTONE], advertiser_non_connectable); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Error eddystone sl_bt_legacy_advertiser_start code: 0x%0x", status); + sl_zigbee_app_debug_println("Error eddystone sl_bt_legacy_advertiser_start code: 0x%0x", status); return; } } @@ -552,7 +552,7 @@ void enableBleAdvertisements(void) status = sl_bt_system_get_identity_address(&ble_address, &type); if ( status != SL_STATUS_OK ) { - emberAfCorePrintln("Unable to get BLE address. Errorcode: 0x%x", status); + sl_zigbee_app_debug_println("Unable to get BLE address. Errorcode: 0x%x", status); return; } uint16_t devId = ((uint16_t)ble_address.addr[1] << 8) + (uint16_t)ble_address.addr[0]; @@ -566,14 +566,14 @@ void enableBleAdvertisements(void) devName[6] = ascii_lut[(ble_address.addr[0] & 0x0F)]; devName[7] = '\0'; - emberAfCorePrintln("devName = %s", devName); + sl_zigbee_app_debug_println("devName = %s", devName); status = sl_bt_gatt_server_write_attribute_value(gattdb_device_name, 0, strlen(devName), (uint8_t *)devName); if ( status != SL_STATUS_OK ) { - emberAfCorePrintln("Unable to sl_bt_gatt_server_write_attribute_value device name. Errorcode: 0x%x", status); + sl_zigbee_app_debug_println("Unable to sl_bt_gatt_server_write_attribute_value device name. Errorcode: 0x%x", status); return; } @@ -592,7 +592,7 @@ void enableBleAdvertisements(void) (uint8_t*) &responseData); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Unable to set adv data sl_bt_legacy_advertiser_set_data. Errorcode: 0x%x", status); + sl_zigbee_app_debug_println("Unable to set adv data sl_bt_legacy_advertiser_set_data. Errorcode: 0x%x", status); return; } @@ -602,7 +602,7 @@ void enableBleAdvertisements(void) (uint8_t*) &responseData); if (status != SL_STATUS_OK) { - emberAfCorePrintln("Unable to set scan response data sl_bt_legacy_advertiser_set_data. Errorcode: 0x%x", status); + sl_zigbee_app_debug_println("Unable to set scan response data sl_bt_legacy_advertiser_set_data. Errorcode: 0x%x", status); return; } @@ -622,9 +622,9 @@ void enableBleAdvertisements(void) status = sl_bt_legacy_advertiser_start(adv_handle[HANDLE_DEMO], advertiser_connectable_scannable); if ( status ) { - emberAfCorePrintln("sl_bt_legacy_advertiser_start ERROR : status = 0x%0X", status); + sl_zigbee_app_debug_println("sl_bt_legacy_advertiser_start ERROR : status = 0x%0X", status); } else { - emberAfCorePrintln("BLE custom advertisements enabled"); + sl_zigbee_app_debug_println("BLE custom advertisements enabled"); } if (SL_BT_CONFIG_USER_ADVERTISERS >= 3) { BeaconAdvertisements(devId); @@ -674,25 +674,25 @@ void sl_bt_on_event(sl_bt_msg_t* evt) bd_addr ble_address; uint8_t type; sl_status_t status = sl_bt_system_hello(); - emberAfCorePrintln("BLE hello: %s", - (status == SL_STATUS_OK) ? "success" : "error"); + sl_zigbee_app_debug_println("BLE hello: %s", + (status == SL_STATUS_OK) ? "success" : "error"); status = sl_bt_system_get_identity_address(&ble_address, &type); zb_ble_dmp_print_ble_address(ble_address.addr); status = sl_bt_advertiser_create_set(&adv_handle[HANDLE_DEMO]); if (status) { - emberAfCorePrintln("sl_bt_advertiser_create_set status 0x%x", status); + sl_zigbee_app_debug_println("sl_bt_advertiser_create_set status 0x%x", status); } status = sl_bt_advertiser_create_set(&adv_handle[HANDLE_IBEACON]); if (status) { - emberAfCorePrintln("sl_bt_advertiser_create_set status 0x%x", status); + sl_zigbee_app_debug_println("sl_bt_advertiser_create_set status 0x%x", status); } status = sl_bt_advertiser_create_set(&adv_handle[HANDLE_EDDYSTONE]); if (status) { - emberAfCorePrintln("sl_bt_advertiser_create_set status 0x%x", status); + sl_zigbee_app_debug_println("sl_bt_advertiser_create_set status 0x%x", status); } // start advertising @@ -703,7 +703,7 @@ void sl_bt_on_event(sl_bt_msg_t* evt) sl_bt_evt_gatt_server_characteristic_status_t *StatusEvt = (sl_bt_evt_gatt_server_characteristic_status_t*) &(evt->data); if (StatusEvt->status_flags == gatt_server_confirmation) { - emberAfCorePrintln( + sl_zigbee_app_debug_println( "characteristic= %d , GAT_SERVER_CLIENT_CONFIG_FLAG = %d\r\n", StatusEvt->characteristic, StatusEvt->client_config_flags); if (StatusEvt->characteristic == gattdb_light_state) { @@ -719,7 +719,7 @@ void sl_bt_on_event(sl_bt_msg_t* evt) } else if (StatusEvt->characteristic == gattdb_source_address) { ble_bleSrc_config = (gatt_client_config_flag_t)StatusEvt->client_config_flags; } - emberAfCorePrintln( + sl_zigbee_app_debug_println( "SERVER : ble_lightState_config= %d , ble_triggerSrc_config = %d , ble_bleSrc_config = %d\r\n", ble_lightState_config, ble_triggerSrc_config, @@ -728,12 +728,12 @@ void sl_bt_on_event(sl_bt_msg_t* evt) } break; case sl_bt_evt_connection_opened_id: { - emberAfCorePrintln("sl_bt_evt_connection_opened_id \n"); + sl_zigbee_app_debug_println("sl_bt_evt_connection_opened_id \n"); sl_bt_evt_connection_opened_t *conn_evt = (sl_bt_evt_connection_opened_t*) &(evt->data); uint8_t index = bleConnectionInfoTableFindUnused(); if (index == 0xFF) { - emberAfCorePrintln("MAX active BLE connections"); + sl_zigbee_app_debug_println("MAX active BLE connections"); assert(index < 0xFF); } else { bleConnectionTable[index].inUse = true; @@ -748,10 +748,10 @@ void sl_bt_on_event(sl_bt_msg_t* evt) //accepted phy 1: 1M phy, 2: 2M phy, 4: coded phy, ff: any sl_bt_connection_set_preferred_phy(conn_evt->connection, test_phy_1m, 0xff); enableBleAdvertisements(); - emberAfCorePrintln("BLE connection opened"); + sl_zigbee_app_debug_println("BLE connection opened"); bleConnectionInfoTablePrintEntry(index); - emberAfCorePrintln("%d active BLE connection", - activeBleConnections); + sl_zigbee_app_debug_println("%d active BLE connection", + activeBleConnections); } } break; @@ -759,8 +759,8 @@ void sl_bt_on_event(sl_bt_msg_t* evt) sl_bt_evt_connection_phy_status_t *conn_evt = (sl_bt_evt_connection_phy_status_t *)&(evt->data); // indicate the PHY that has been selected - emberAfCorePrintln("now using the %dMPHY\r\n", - conn_evt->phy); + sl_zigbee_app_debug_println("now using the %dMPHY\r\n", + conn_evt->phy); } break; case sl_bt_evt_connection_closed_id: { @@ -778,25 +778,35 @@ void sl_bt_on_event(sl_bt_msg_t* evt) if (bleConnectionInfoTableIsEmpty()) { sl_dmp_ui_bluetooth_connected(false); } - emberAfCorePrintln( + sl_zigbee_app_debug_println( "BLE connection closed, handle=0x%x, reason=0x%2x : [%d] active BLE connection", conn_evt->connection, conn_evt->reason, activeBleConnections); } break; +#ifndef SL_CATALOG_BLUETOOTH_FEATURE_LEGACY_SCANNER_PRESENT case sl_bt_evt_scanner_scan_report_id: { sl_bt_evt_scanner_scan_report_t *scan_evt = (sl_bt_evt_scanner_scan_report_t*) &(evt->data); - emberAfCorePrint("Scan response, address type=0x%x, address: ", - scan_evt->address_type); + sl_zigbee_app_debug_print("Scan response, address type=0x%02x, address: ", + scan_evt->address_type); zb_ble_dmp_print_ble_address(scan_evt->address.addr); - emberAfCorePrintln(""); + sl_zigbee_app_debug_println(""); } break; +#else + case sl_bt_evt_scanner_legacy_advertisement_report_id: { + sl_zigbee_app_debug_print("Scan response, address type=0x%02x, address: ", + evt->data.evt_scanner_legacy_advertisement_report.address_type); + zb_ble_dmp_print_ble_address(evt->data.evt_scanner_legacy_advertisement_report.address.addr); + sl_zigbee_app_debug_println(""); + } + break; +#endif //SL_CATALOG_BLUETOOTH_FEATURE_LEGACY_SCANNER_PRESENT case sl_bt_evt_connection_parameters_id: { sl_bt_evt_connection_parameters_t* param_evt = (sl_bt_evt_connection_parameters_t*) &(evt->data); - emberAfCorePrintln( - "BLE connection parameters are updated, handle=0x%x, interval=0x%2x, latency=0x%2x, timeout=0x%2x, security=0x%x, txsize=0x%2x", + sl_zigbee_app_debug_println( + "BLE connection parameters are updated, handle=0x%02x, interval=0x%04x, latency=0x%04x, timeout=0x%04x, security=0x%02x, txsize=0x%04x", param_evt->connection, param_evt->interval, param_evt->latency, @@ -811,14 +821,14 @@ void sl_bt_on_event(sl_bt_msg_t* evt) sl_bt_evt_gatt_service_t* service_evt = (sl_bt_evt_gatt_service_t*) &(evt->data); uint8_t i; - emberAfCorePrintln( - "GATT service, conn_handle=0x%x, service_handle=0x%4x", + sl_zigbee_app_debug_println( + "GATT service, conn_handle=0x%02x, service_handle=0x%04x", service_evt->connection, service_evt->service); - emberAfCorePrint("UUID=["); + sl_zigbee_app_debug_print("UUID=["); for (i = 0; i < service_evt->uuid.len; i++) { - emberAfCorePrint("0x%x ", service_evt->uuid.data[i]); + sl_zigbee_app_debug_print("%02X", service_evt->uuid.data[i]); } - emberAfCorePrintln("]"); + sl_zigbee_app_debug_println("]"); } break; diff --git a/protocol/zigbee/app/framework/scenarios/z3/Z3Light/app.c b/protocol/zigbee/app/framework/scenarios/z3/Z3Light/app.c index e58e24960b0..506cf8459ae 100644 --- a/protocol/zigbee/app/framework/scenarios/z3/Z3Light/app.c +++ b/protocol/zigbee/app/framework/scenarios/z3/Z3Light/app.c @@ -23,7 +23,9 @@ #endif //SL_CATALOG_ZIGBEE_NETWORK_TEST_PRESENT #if (LARGE_NETWORK_TESTING == 0) -#include "zigbee_sleep_config.h" +#ifndef EZSP_HOST +#include "config/zigbee_sleep_config.h" +#endif // EZSP_HOST #include "network-creator.h" #include "network-creator-security.h" #include "network-steering.h" @@ -234,7 +236,9 @@ void emberAfPluginOnOffClusterServerPostInitCallback(uint8_t endpoint) */ void emberAfRadioNeedsCalibratingCallback(void) { + #ifndef EZSP_HOST sl_mac_calibrate_current_channel(); + #endif } #if defined(SL_CATALOG_SIMPLE_BUTTON_PRESENT) && (SL_ZIGBEE_APP_FRAMEWORK_USE_BUTTON_TO_STAY_AWAKE == 0) diff --git a/protocol/zigbee/app/framework/security/af-trust-center.c b/protocol/zigbee/app/framework/security/af-trust-center.c index 7c81c6b344e..d27f059444d 100644 --- a/protocol/zigbee/app/framework/security/af-trust-center.c +++ b/protocol/zigbee/app/framework/security/af-trust-center.c @@ -361,7 +361,7 @@ EmberJoinDecision emberTrustCenterJoinHandler(EmberNodeId newNodeId, if ((EMBER_STANDARD_SECURITY_UNSECURED_JOIN == status) && (EMBER_SUCCESS != emberGetTransientLinkKey(newNodeEui64, &transientKeyData))) { - joinDecision = EMBER_NO_ACTION; + joinDecision = EMBER_DENY_JOIN; } } #endif diff --git a/protocol/zigbee/app/framework/util/af-common.c b/protocol/zigbee/app/framework/util/af-common.c index 37f38281968..ebfee05c590 100644 --- a/protocol/zigbee/app/framework/util/af-common.c +++ b/protocol/zigbee/app/framework/util/af-common.c @@ -1050,7 +1050,7 @@ static EmberStatus send(EmberOutgoingMessageType type, } } else { index = emberAfIndexFromEndpoint(apsFrame->sourceEndpoint); - if (index == 0xFF) { + if (index == 0xFF || (index >= MAX_ENDPOINT_COUNT)) { return EMBER_INVALID_ENDPOINT; } status = emberAfPushEndpointNetworkIndex(apsFrame->sourceEndpoint); diff --git a/protocol/zigbee/app/framework/util/af-soc.c b/protocol/zigbee/app/framework/util/af-soc.c index 569479483ac..c1d72539d67 100644 --- a/protocol/zigbee/app/framework/util/af-soc.c +++ b/protocol/zigbee/app/framework/util/af-soc.c @@ -367,6 +367,7 @@ bool emberGetEndpointDescription(uint8_t endpoint, } uint8_t endpointIndex = emberAfIndexFromEndpoint(endpoint); if (endpointIndex == 0xFF + || (endpointIndex >= MAX_ENDPOINT_COUNT) || (emberAfNetworkIndexFromEndpointIndex(endpointIndex) != emberGetCallbackNetwork())) { return false; @@ -388,6 +389,7 @@ uint16_t emberGetEndpointCluster(uint8_t endpoint, EmberAfCluster *cluster = NULL; uint8_t endpointIndex = emberAfIndexFromEndpoint(endpoint); if (endpointIndex == 0xFF + || (endpointIndex >= MAX_ENDPOINT_COUNT) || (emberAfNetworkIndexFromEndpointIndex(endpointIndex) != emberGetCallbackNetwork())) { return 0xFFFF; diff --git a/protocol/zigbee/app/framework/util/attribute-storage.c b/protocol/zigbee/app/framework/util/attribute-storage.c index 42ef4956170..23be657ffcf 100644 --- a/protocol/zigbee/app/framework/util/attribute-storage.c +++ b/protocol/zigbee/app/framework/util/attribute-storage.c @@ -832,7 +832,7 @@ EmberAfCluster *emberAfFindClusterWithMfgCode(uint8_t endpoint, uint16_t manufacturerCode) { uint8_t ep = emberAfIndexFromEndpoint(endpoint); - if ( ep == 0xFF ) { + if ((ep >= FIXED_ENDPOINT_COUNT) || ep == 0xFF ) { return NULL; } else { return emberAfFindClusterInTypeWithMfgCode(emAfEndpoints[ep].endpointType, clusterId, mask, manufacturerCode); @@ -1175,7 +1175,7 @@ uint8_t emberAfClusterCount(uint8_t endpoint, bool server) uint8_t clusterData; #endif //EMBER_SCRIPTED_TEST #endif //EMBER_AF_PLUGIN_ZCL_CLUSTER_ENABLE_DISABLE_RUN_TIME - if ( index == 0xFF ) { + if ( index == 0xFF || (index >= MAX_ENDPOINT_COUNT)) { return 0; } de = &(emAfEndpoints[index]); @@ -1212,7 +1212,7 @@ uint8_t emberAfClusterCount(uint8_t endpoint, bool server) uint8_t emberAfGetClusterCountForEndpoint(uint8_t endpoint) { uint8_t index = emberAfIndexFromEndpoint(endpoint); - if ( index == 0xFF) { + if ( index == 0xFF || (index >= MAX_ENDPOINT_COUNT)) { return 0; } return emAfEndpoints[index].endpointType->clusterCount; @@ -1232,7 +1232,7 @@ EmberAfCluster* emberAfGetClusterByIndex(uint8_t endpoint, uint8_t clusterIndex) uint8_t endpointIndex = emberAfIndexFromEndpoint(endpoint); EmberAfDefinedEndpoint* definedEndpoint; - if (endpointIndex == 0xFF) { + if (endpointIndex == 0xFF || (endpointIndex >= MAX_ENDPOINT_COUNT)) { return NULL; } definedEndpoint = &(emAfEndpoints[endpointIndex]); @@ -1246,7 +1246,7 @@ EmberAfCluster* emberAfGetClusterByIndex(uint8_t endpoint, uint8_t clusterIndex) EmberAfProfileId emberAfGetProfileIdForEndpoint(uint8_t endpoint) { uint8_t endpointIndex = emberAfIndexFromEndpoint(endpoint); - if (endpointIndex == 0xFF) { + if (endpointIndex == 0xFF || (endpointIndex >= MAX_ENDPOINT_COUNT)) { return EMBER_AF_INVALID_PROFILE_ID; } return emAfEndpoints[endpointIndex].profileId; @@ -1255,7 +1255,7 @@ EmberAfProfileId emberAfGetProfileIdForEndpoint(uint8_t endpoint) uint16_t emberAfGetDeviceIdForEndpoint(uint8_t endpoint) { uint8_t endpointIndex = emberAfIndexFromEndpoint(endpoint); - if (endpointIndex == 0xFF) { + if (endpointIndex == 0xFF || (endpointIndex >= MAX_ENDPOINT_COUNT)) { return EMBER_AF_INVALID_PROFILE_ID; } return emAfEndpoints[endpointIndex].deviceId; @@ -1276,7 +1276,7 @@ EmberAfCluster *emberAfGetNthCluster(uint8_t endpoint, uint8_t n, bool server) #endif //EMBER_SCRIPTED_TEST #endif //EMBER_AF_PLUGIN_ZCL_CLUSTER_ENABLE_DISABLE_RUN_TIME - if ( index == 0xFF ) { + if ( index == 0xFF || (index >= MAX_ENDPOINT_COUNT)) { return NULL; } de = &(emAfEndpoints[index]); @@ -1349,7 +1349,7 @@ void emAfLoadAttributeDefaults(uint8_t endpoint, bool writeTokens) EmberAfDefinedEndpoint *de; if (endpoint != EMBER_BROADCAST_ENDPOINT) { ep = emberAfIndexFromEndpoint(endpoint); - if (ep == 0xFF) { + if (ep == 0xFF || (ep >= FIXED_ENDPOINT_COUNT)) { return; } } diff --git a/protocol/zigbee/app/framework/util/global-callback.h b/protocol/zigbee/app/framework/util/global-callback.h index 66d8416ecc8..3b6b9c4f45b 100644 --- a/protocol/zigbee/app/framework/util/global-callback.h +++ b/protocol/zigbee/app/framework/util/global-callback.h @@ -1769,4 +1769,28 @@ void emberAfTrustCenterKeepaliveUpdateCallback(bool registrationComplete); bool emberAfWriteAttributesResponseCallback(EmberAfClusterId clusterId, int8u *buffer, int16u bufLen); +/** @brief Retrieves the difference between the two passed values. + * + * This function assumes that the two values have the same endianness. + * Currently only single precision floats are supported. Semi/Double-precision requires a special + * method to convert to the corresponding data type, calculate the distance and return it as + * EmberAfDifferenceType. + * + * @param value1 The 1st floating-point value. Ver.: always + * @param value2 The 2nd floating-point value. Ver.: always + * @param dataType The ZCL data type. Ver.: always + */ +EmberAfDifferenceType emberAfGetDiffCallback(EmberAfDifferenceType value1, + EmberAfDifferenceType value2, + EmberAfAttributeType dataType); +/** @brief Detect a reportable change that could trigger report generation. + * + * @param threshold The reportable change threshold for reference. Ver.: always + * @param diff The emberAf difference value to indicate the triggering point when it exceeds + * provided threshold. Ver.: always + * @param dataType The ZCL data type. Ver.: always + */ +bool emberAfDetectReportChangedCallback(EmberAfDifferenceType threshold, + EmberAfDifferenceType diff, + EmberAfAttributeType dataType); /** @} */ // end of global_callback diff --git a/protocol/zigbee/app/framework/util/util.c b/protocol/zigbee/app/framework/util/util.c index bcc0c56a9bb..1c9bd0dd994 100644 --- a/protocol/zigbee/app/framework/util/util.c +++ b/protocol/zigbee/app/framework/util/util.c @@ -19,6 +19,7 @@ #include "../include/af.h" #include "af-main.h" #include "common.h" +#include "global-callback.h" #include "app/framework/util/af-event.h" #include "app/framework/util/time-util.h" @@ -34,6 +35,9 @@ #ifndef UC_BUILD #include "hal/micro/crc.h" +#ifdef EMBER_TEST +#define emberAfGetDiffCallback(value1, value2, dataType) 0 +#endif #endif #ifndef ZCL_SL_WWAH_CLUSTER_ID @@ -174,11 +178,30 @@ bool emberAfIsDeviceIdentifying(uint8_t endpoint) #endif } +static EmberAfDifferenceType getDiffFloat(EmberAfDifferenceType value1, + EmberAfDifferenceType value2) +{ + float valueFloat = 0, value2Float = 0, diffFloat = 0; + EmberAfDifferenceType diff = 0; + + memcpy(&valueFloat, &value1, sizeof(float)); + memcpy(&value2Float, &value2, sizeof(float)); + + if (valueFloat > value2Float) { + diffFloat = valueFloat - value2Float; + } else { + diffFloat = value2Float - valueFloat; + } + memcpy(&diff, &diffFloat, sizeof(float)); + return diff; +} + // Calculates difference. See EmberAfDifferenceType for the maximum data size // that this function will support. EmberAfDifferenceType emberAfGetDifference(uint8_t *pData, EmberAfDifferenceType value, - uint8_t dataSize) + uint8_t dataSize, + EmberAfAttributeType dataType) { EmberAfDifferenceType value2 = 0, diff; uint8_t i; @@ -198,13 +221,23 @@ EmberAfDifferenceType emberAfGetDifference(uint8_t *pData, #endif //BIGENDIAN } - if (value > value2) { - diff = value - value2; + // For semi-/double-precision users must provide their own callback to convert between precisions + // and calculate the difference + if (dataType == ZCL_FLOAT_SEMI_ATTRIBUTE_TYPE + || dataType == ZCL_FLOAT_DOUBLE_ATTRIBUTE_TYPE) { + return emberAfGetDiffCallback(value, value2, dataType); + } else if (dataType == ZCL_FLOAT_SINGLE_ATTRIBUTE_TYPE) { + // If the attribute data is single-float + return getDiffFloat(value, value2); } else { - diff = value2 - value; - } + if (value > value2) { + diff = value - value2; + } else { + diff = value2 - value; + } - return diff; + return diff; + } } // -------------------------------------------------- @@ -418,7 +451,7 @@ static void printIncomingZclMessage(const EmberAfClusterCommand *cmd) static bool dispatchZclMessage(EmberAfClusterCommand *cmd) { uint8_t index = emberAfIndexFromEndpoint(cmd->apsFrame->destinationEndpoint); - if (index == 0xFFu) { + if (index == 0xFFu || (index >= MAX_ENDPOINT_COUNT)) { emberAfDebugPrint("Drop cluster 0x%2x command 0x%x", cmd->apsFrame->clusterId, cmd->commandId); @@ -1380,3 +1413,12 @@ uint8_t emberAfMake8bitEncodedChanPg(uint8_t page, uint8_t channel) return channel | ENCODED_8BIT_CHANPG_PAGE_MASK_PAGE_0; } } + +#ifdef UC_BUILD +WEAK(EmberAfDifferenceType emberAfGetDiffCallback(EmberAfDifferenceType value1, + EmberAfDifferenceType value2, + EmberAfAttributeType dataType)) +{ + return 0; +} +#endif diff --git a/protocol/zigbee/app/framework/util/util.h b/protocol/zigbee/app/framework/util/util.h index ccabcc56b7a..4c916fa0e1f 100644 --- a/protocol/zigbee/app/framework/util/util.h +++ b/protocol/zigbee/app/framework/util/util.h @@ -151,7 +151,8 @@ bool emberAfProcessMessageIntoZclCmd(EmberApsFrame* apsFrame, */ EmberAfDifferenceType emberAfGetDifference(uint8_t* pData, EmberAfDifferenceType value, - uint8_t dataSize); + uint8_t dataSize, + EmberAfAttributeType dataType); /** * Retrieves an uint32_t from the given Zigbee payload. The integer retrieved diff --git a/protocol/zigbee/app/ncp/sample-app/ncp-dmp/zigbee_ncp-ble_ncp-spi.slcp b/protocol/zigbee/app/ncp/sample-app/ncp-dmp/zigbee_ncp-ble_ncp-spi.slcp index c39a1aad908..3148a3b339a 100644 --- a/protocol/zigbee/app/ncp/sample-app/ncp-dmp/zigbee_ncp-ble_ncp-spi.slcp +++ b/protocol/zigbee/app/ncp/sample-app/ncp-dmp/zigbee_ncp-ble_ncp-spi.slcp @@ -128,11 +128,11 @@ configuration: - name: LIB_MEM_CFG_HEAP_SIZE value: 0 - name: SL_CPC_RX_BUFFER_MAX_COUNT - value: 20 + value: 10 condition: - device_family_efr32mg13 - name: SL_CPC_TX_QUEUE_ITEM_MAX_COUNT - value: 20 + value: 10 condition: - device_family_efr32mg13 - name: SL_BT_CONFIG_USER_ADVERTISERS diff --git a/protocol/zigbee/app/ncp/sample-app/ncp-dmp/zigbee_ncp-ble_ncp-uart.slcp b/protocol/zigbee/app/ncp/sample-app/ncp-dmp/zigbee_ncp-ble_ncp-uart.slcp index 670a30f9d46..39b208df5f3 100644 --- a/protocol/zigbee/app/ncp/sample-app/ncp-dmp/zigbee_ncp-ble_ncp-uart.slcp +++ b/protocol/zigbee/app/ncp/sample-app/ncp-dmp/zigbee_ncp-ble_ncp-uart.slcp @@ -130,11 +130,11 @@ configuration: - name: LIB_MEM_CFG_HEAP_SIZE value: 0 - name: SL_CPC_RX_BUFFER_MAX_COUNT - value: 20 + value: 10 condition: - device_family_efr32mg13 - name: SL_CPC_TX_QUEUE_ITEM_MAX_COUNT - value: 20 + value: 10 condition: - device_family_efr32mg13 - name: SL_BT_CONFIG_USER_ADVERTISERS diff --git a/protocol/zigbee/app/util/common/form-and-join.c b/protocol/zigbee/app/util/common/form-and-join.c index 9a62f27a0b7..c9c27168746 100644 --- a/protocol/zigbee/app/util/common/form-and-join.c +++ b/protocol/zigbee/app/util/common/form-and-join.c @@ -64,6 +64,8 @@ #include "form-and-join.h" #include "form-and-join-adapter.h" +#include "sl_common.h" // for SL_FALLTHROUGH + #if defined RADIO_TX_CALLBACK #define GET_PRO2PLUS_RADIO_TX_POWER(chanPg) emberAfPluginNetworkFindGetRadioPowerForChannelCallback(chanPg) #elif defined SL_CATALOG_ZIGBEE_NETWORK_FIND_SUB_GHZ_PRESENT @@ -289,8 +291,7 @@ static void energyScanComplete(void) currentPage = EMBER_MIN_SUGBHZ_PAGE_NUMBER - 1; } } - // Deliberately fall through... - + SL_FALLTHROUGH case FIND_AND_JOIN_MODE_ALLOW_SUB_GHZ: // Finished scanning the current page, try the next page if available if (currentPage < EMBER_MAX_SUGBHZ_PAGE_NUMBER) { diff --git a/protocol/zigbee/app/util/ezsp/command-functions.h b/protocol/zigbee/app/util/ezsp/command-functions.h index eb3b062cd0b..5ec1da154a0 100644 --- a/protocol/zigbee/app/util/ezsp/command-functions.h +++ b/protocol/zigbee/app/util/ezsp/command-functions.h @@ -3561,8 +3561,10 @@ static void callbackDispatch(void) case EZSP_POLL_HANDLER: { EmberNodeId childId; + bool transmitExpected; childId = fetchInt16u(); - ezspPollHandler(childId); + transmitExpected = fetchInt8u(); + ezspPollHandler(childId, transmitExpected); break; } diff --git a/protocol/zigbee/app/util/ezsp/command-prototypes.h b/protocol/zigbee/app/util/ezsp/command-prototypes.h index 7bdee7ef7ea..bcaba54f2a6 100644 --- a/protocol/zigbee/app/util/ezsp/command-prototypes.h +++ b/protocol/zigbee/app/util/ezsp/command-prototypes.h @@ -1353,7 +1353,9 @@ void ezspPollCompleteHandler( // Indicates that the local node received a data poll from a child. void ezspPollHandler( // The node ID of the child that is requesting data. - EmberNodeId childId); + EmberNodeId childId, + // True if transmit is expected, false otherwise. + bool transmitExpected); // Callback // A callback indicating a message has been received containing the EUI64 of the diff --git a/protocol/zigbee/app/util/ezsp/ezsp-callbacks.c b/protocol/zigbee/app/util/ezsp/ezsp-callbacks.c index b0545df0a01..8c5547d41f1 100644 --- a/protocol/zigbee/app/util/ezsp/ezsp-callbacks.c +++ b/protocol/zigbee/app/util/ezsp/ezsp-callbacks.c @@ -36,14 +36,14 @@ void ezspNoCallbacks(void) #endif #ifndef EZSP_APPLICATION_HAS_TIMER_HANDLER -void ezspTimerHandler(uint8_t timerId) +WEAK(void ezspTimerHandler(uint8_t timerId)) { } #endif #ifndef EZSP_APPLICATION_HAS_DEBUG_HANDLER -void ezspDebugHandler(uint8_t messageLength, - uint8_t *messageContents) +WEAK(void ezspDebugHandler(uint8_t messageLength, + uint8_t *messageContents)) { } #endif @@ -87,14 +87,14 @@ void ezspSwitchNetworkKeyHandler(uint8_t sequenceNumber) #endif // UC_BUILD #ifndef EZSP_APPLICATION_HAS_REMOTE_BINDING_HANDLER -void ezspRemoteSetBindingHandler(EmberBindingTableEntry *entry, - uint8_t index, - EmberStatus policyDecision) +WEAK(void ezspRemoteSetBindingHandler(EmberBindingTableEntry *entry, + uint8_t index, + EmberStatus policyDecision)) { } -void ezspRemoteDeleteBindingHandler(uint8_t index, - EmberStatus policyDecision) +WEAK(void ezspRemoteDeleteBindingHandler(uint8_t index, + EmberStatus policyDecision)) { } #endif @@ -104,7 +104,7 @@ WEAK(void ezspPollCompleteHandler(EmberStatus status)) } #ifndef EZSP_APPLICATION_HAS_POLL_HANDLER -void ezspPollHandler(EmberNodeId childId) +WEAK(void ezspPollHandler(EmberNodeId childId, bool transmitExpected)) { } #endif @@ -128,15 +128,15 @@ void ezspIncomingSenderEui64Handler(EmberEUI64 senderEui64) #endif #ifndef EZSP_APPLICATION_HAS_ID_CONFLICT_HANDLER -void ezspIdConflictHandler(EmberNodeId id) +WEAK(void ezspIdConflictHandler(EmberNodeId id)) { } #endif #ifndef EZSP_APPLICATION_HAS_INCOMING_MANY_TO_ONE_ROUTE_REQUEST_HANDLER -void ezspIncomingManyToOneRouteRequestHandler(EmberNodeId source, - EmberEUI64 longId, - uint8_t cost) +WEAK(void ezspIncomingManyToOneRouteRequestHandler(EmberNodeId source, + EmberEUI64 longId, + uint8_t cost)) { } #endif @@ -146,44 +146,44 @@ WEAK(void ezspIncomingRouteErrorHandler(EmberStatus status, EmberNodeId target)) } #ifndef EZSP_APPLICATION_HAS_INCOMING_NETWORK_STATUS_HANDLER -void ezspIncomingNetworkStatusHandler(uint8_t errorCode, EmberNodeId target) +WEAK(void ezspIncomingNetworkStatusHandler(uint8_t errorCode, EmberNodeId target)) { } #endif #ifndef EZSP_APPLICATION_HAS_ROUTE_RECORD_HANDLER -void ezspIncomingRouteRecordHandler(EmberNodeId source, - EmberEUI64 sourceEui, - uint8_t lastHopLqi, - int8_t lastHopRssi, - uint8_t relayCount, - uint8_t *relayList) +WEAK(void ezspIncomingRouteRecordHandler(EmberNodeId source, + EmberEUI64 sourceEui, + uint8_t lastHopLqi, + int8_t lastHopRssi, + uint8_t relayCount, + uint8_t *relayList)) { } #endif #ifndef EZSP_APPLICATION_HAS_BOOTLOADER_HANDLER -void ezspIncomingBootloadMessageHandler(EmberEUI64 longId, - uint8_t lastHopLqi, - int8_t lastHopRssi, - uint8_t messageLength, - uint8_t *messageContents) +WEAK(void ezspIncomingBootloadMessageHandler(EmberEUI64 longId, + uint8_t lastHopLqi, + int8_t lastHopRssi, + uint8_t messageLength, + uint8_t *messageContents)) { } -void ezspBootloadTransmitCompleteHandler(EmberStatus status, - uint8_t messageLength, - uint8_t *messageContents) +WEAK(void ezspBootloadTransmitCompleteHandler(EmberStatus status, + uint8_t messageLength, + uint8_t *messageContents)) { } #endif #ifndef EZSP_APPLICATION_HAS_MAC_PASSTHROUGH_HANDLER -void ezspMacPassthroughMessageHandler(uint8_t messageType, - uint8_t lastHopLqi, - int8_t lastHopRssi, - uint8_t messageLength, - uint8_t *messageContents) +WEAK(void ezspMacPassthroughMessageHandler(uint8_t messageType, + uint8_t lastHopLqi, + int8_t lastHopRssi, + uint8_t messageLength, + uint8_t *messageContents)) { } #endif @@ -213,7 +213,7 @@ void ezspMfglibRxHandler( #endif #ifndef EZSP_APPLICATION_HAS_RAW_HANDLER -void ezspRawTransmitCompleteHandler(EmberStatus status) +WEAK(void ezspRawTransmitCompleteHandler(EmberStatus status)) { } #endif @@ -252,7 +252,7 @@ void ezspDsaSignHandler(EmberStatus status, #endif // UC_BUILD // Elliptical Cryptography Digital Signature Verification #ifndef EZSP_APPLICATION_HAS_DSA_VERIFY_HANDLER -void ezspDsaVerifyHandler(EmberStatus status) +WEAK(void ezspDsaVerifyHandler(EmberStatus status)) { } #endif @@ -269,13 +269,23 @@ WEAK(void ezspCustomFrameHandler(uint8_t payloadLength, uint8_t* payload)) } #ifndef EZSP_APPLICATION_HAS_STACK_TOKEN_CHANGED_HANDLER -void ezspStackTokenChangedHandler(uint16_t tokenAddress) +WEAK(void ezspStackTokenChangedHandler(uint16_t tokenAddress)) { } #endif -WEAK(void ezspZllNetworkFoundHandler(const EmberZllNetwork* networkInfo, - const EmberZllDeviceInfoRecord* deviceInfo)) +// This call is fired when a ZLL network scan finds a ZLL network. +WEAK(void ezspZllNetworkFoundHandler( + // Information about the network. + EmberZllNetwork *networkInfo, + // Used to interpret deviceInfo field. + bool isDeviceInfoNull, + // Device specific information. + EmberZllDeviceInfoRecord *deviceInfo, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi)) { } @@ -283,11 +293,17 @@ WEAK(void ezspZllScanCompleteHandler(EmberStatus status)) { } -WEAK(void ezspZllAddressAssignmentHandler(const EmberZllAddressAssignment* addressInfo)) +WEAK(void ezspZllAddressAssignmentHandler( + // Address assignment information. + EmberZllAddressAssignment *addressInfo, + // The link quality from the node that last relayed the message. + uint8_t lastHopLqi, + // The energy level (in units of dBm) observed during reception. + int8_t lastHopRssi)) { } -WEAK(void ezspZllTouchLinkTargetHandler(const EmberZllNetwork* networkInfo)) +WEAK(void ezspZllTouchLinkTargetHandler(EmberZllNetwork* networkInfo)) { } diff --git a/protocol/zigbee/app/util/ezsp/ezsp-protocol.h b/protocol/zigbee/app/util/ezsp/ezsp-protocol.h index 544c411e434..da3c43e55c1 100644 --- a/protocol/zigbee/app/util/ezsp/ezsp-protocol.h +++ b/protocol/zigbee/app/util/ezsp/ezsp-protocol.h @@ -30,7 +30,7 @@ //------------------------------------------------------------------------------ // Protocol Definitions -#define EZSP_PROTOCOL_VERSION 0x0A +#define EZSP_PROTOCOL_VERSION 0x0B // EZSP max length + Frame Control extra byte + // Secure EZSP autentication header + Frame ID extra byte + Secure EZSP MIC diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/binding-table-library.a index a9b92e8d113..987a331fbda 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c97d2f1c23d35c8ad1a0c507652ca91e38b079205b2b2ec317015980a61120ce -size 10012 +oid sha256:135ad7dea94ddd36e404c8284628e184291633898f96457a4aa1f968c0fee939 +size 10040 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-rail/binding-table-library.a index d60a91e92fb..24589508cd6 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:998deda5737a67e642dd990c6b100736fe99458af6b3391807295a219a314d34 -size 10288 +oid sha256:70405d4991814f53b41934984aef96386f8c330d0c0741465b22b8683c39bf44 +size 10320 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/binding-table-library.a index 5a0dc461546..65f391968be 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb81fbb887ef375cd3c2c34ba013e974a5b72fe372fd4b03b38c1b931cad699e -size 10012 +oid sha256:9d9c6286d9b251484fa1c7fd86f54ecb1e939eb89446bb62c37b2766f4ead70d +size 10040 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-railgb/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-railgb/binding-table-library.a index f7534502e70..ae7144b36a7 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-railgb/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg12p-railgb/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ea440bb2d8e827e9038dc477677340f765cbfb0b4916395d87c4eb4eaed5abd -size 10288 +oid sha256:9c92612625b1c54039b0f520be90a010f97cc72a2212778ea04b503438a5401d +size 10320 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/binding-table-library.a index 9a2c74ab5dd..bc00efa0125 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2566cc9f7e0c16576015e4bab83a4bff3ad84ac4e736bceebc9f813893bb7758 -size 10012 +oid sha256:5fa9152e9d971761f50ef678fd4a332eec517631a437c300480fd6dd21d60016 +size 10040 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg13p-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg13p-rail/binding-table-library.a index 93b6cc70ef1..1339482d9b3 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg13p-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg13p-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:769b462d8271a161187885f2f9350f5b482a01ca6af4ee4dc9a5a5796bc51253 -size 10288 +oid sha256:ed2de98e5fc4e06aa7a84deba261ec08129f99384a64896bbeecb0097419b92f +size 10320 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/binding-table-library.a index 86f00de9ed5..53b798bcdf9 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:103408ddfb20fee78380923b44299c4e3d097818dacedccbcd958472cee1bc17 -size 10024 +oid sha256:4021336776b63ba5df3441e13757b1d8b92d94613187239462b82ac607d0e053 +size 10052 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg21-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg21-rail/binding-table-library.a index 510da302d8f..a6b09e6b185 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg21-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg21-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d710da60972ccca3b28c813bab569b8b2c10f9b57f18d6d1d012e9a8c41d864a -size 10300 +oid sha256:828cf0322e084f41e7f9ba2840610cc811c6a3f1716292b3b4d11cdead5c07cb +size 10332 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/binding-table-library.a index 86f00de9ed5..c6319305cdf 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:103408ddfb20fee78380923b44299c4e3d097818dacedccbcd958472cee1bc17 -size 10024 +oid sha256:91ac489fa507a9f38a6e5bd16d4ef08e58777d556a3654fcc72219bf854455fd +size 10052 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg22-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg22-rail/binding-table-library.a index 66170fc5094..774ce6ef861 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg22-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg22-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a369d6b5a10b97731ee5f55ce35b61b1ee660e7ac0c673403467c0cff8d4c0be -size 10300 +oid sha256:a2caaf22fc27dbb4c05295ccebad351bad56011dbc269f364eda490be077ab50 +size 10332 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/binding-table-library.a index 29d79a07815..8f2c465e6ae 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a84f2f4d01bb1ca36d1f171c5b0ca8f462b39241cb29ce419b70cf8d4c92ad05 -size 10024 +oid sha256:a8c35c3a2a7bcf4d7ab2e0643dd02d583d16636e4d991d77362923c0877269bd +size 10052 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-dualrail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-dualrail/binding-table-library.a index 9f32516e5a0..a6b09e6b185 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-dualrail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-dualrail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:805a584c06966ba80a94e2af3bdfc711873c919b636974baa834fa400734c40c -size 10300 +oid sha256:828cf0322e084f41e7f9ba2840610cc811c6a3f1716292b3b4d11cdead5c07cb +size 10332 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/binding-table-library.a index b023ae5f32e..7975f69da2f 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33b4261de729fa453d66580edbb675f6397549de1f7c31045e4af81e6af29a47 -size 10024 +oid sha256:6f3fe4d8e53a3af7b0e078a7966a585132810a80c348b77418855c7b3a924c04 +size 10052 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-rail/binding-table-library.a index 05308a5decc..88c8a15475f 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg24-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f7b161f2e0d51fdd01a96aa58a5c3336ceadd6e5e06cf98ad69d1329c8cadfa -size 10300 +oid sha256:bd54580c93d2cbbd32f32f8fd94755d1b795cc663caed34bce82c90008943fc2 +size 10332 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/binding-table-library.a index 332d0cf48a7..ac03ab7a31f 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d27126a4ddbf7abbbcf4a831171720a98995f021ae629e927bdf12b9b4262737 -size 10024 +oid sha256:a7d4d15b6a0d0e3bafaa3b2af0b3450067c752f7cd12477f3620326d4c7c3331 +size 10052 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg27-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg27-rail/binding-table-library.a index 9f32516e5a0..c408c07ed29 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg27-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-efr32mg27-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:805a584c06966ba80a94e2af3bdfc711873c919b636974baa834fa400734c40c -size 10300 +oid sha256:d6b5e4681ab1a2c84d62e60bd19f189a7ad768597068350f6973c94519e8ca84 +size 10332 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/binding-table-library.a index 8d20d611cf5..2ec167f88ed 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebf556e3d2dc650fdad136d715ae99576c1100bf71307807cd935efafe4e4a02 -size 10012 +oid sha256:b26c9d7c85af12a16540a8f7ebbeb0a71ee7c7c748ad7d67fbdc8f01572c8425 +size 10040 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm12-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm12-rail/binding-table-library.a index fbf36c73b72..d22c1aaee11 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm12-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm12-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f7981a706ac77f6da67b45c67c5dd8ae820408cfa42743df919557530c85264 -size 10288 +oid sha256:617748cb0fc81c6aa6b2985a8d771acac85d4ab4dc5f4e581bf47d533b64d708 +size 10320 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/binding-table-library.a index f50d18d2861..7d03c85ac44 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bfe64dd6294af805b9a2ed6a3200c275e7a17f315fbac0ffc89f77e6f104feee -size 10012 +oid sha256:6b85ff43e91e10d6c95898986c4d90071f44622f4abfc524f023838e44d9b2bf +size 10040 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm13-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm13-rail/binding-table-library.a index f09932100e3..77793818bbc 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm13-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm13-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dbfbca801d79035bd962d502de2e9333f00bbd02637bfc666a0f12184f183dbb -size 10288 +oid sha256:c08c2c483600b916fc1c68c0e21417e58f207722b5e5f4cf07ed806729e23b14 +size 10320 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/binding-table-library.a index 29d79a07815..57e6864a728 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a84f2f4d01bb1ca36d1f171c5b0ca8f462b39241cb29ce419b70cf8d4c92ad05 -size 10024 +oid sha256:0a21bc84e73fbcf8cfd7b1fbb59ad05dda9f756e0ee6a42826841418d18fd422 +size 10052 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm21-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm21-rail/binding-table-library.a index 510da302d8f..1e23f2822a3 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm21-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm21-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d710da60972ccca3b28c813bab569b8b2c10f9b57f18d6d1d012e9a8c41d864a -size 10300 +oid sha256:a4317179d06a7d502766dade8f485ba2af2f765097f715a64e413c0af735c466 +size 10332 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/binding-table-library.a index 3167168c1ac..57e6864a728 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b76e537a52c3120828e1ff5d1f95e4a34a30b25b9e6fc5eff6978518669f832 -size 10024 +oid sha256:0a21bc84e73fbcf8cfd7b1fbb59ad05dda9f756e0ee6a42826841418d18fd422 +size 10052 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm22-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm22-rail/binding-table-library.a index 4a372b8caa0..5003e2ac7b0 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm22-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm22-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92d1483081f23ccc78bb59b9ac67ad82ee8a3f0740f51da5d510c349f32012c5 -size 10300 +oid sha256:02f277d5abc860ca0d36fafed45b7d1eb586e46f0d6266f1d818a32bead97168 +size 10332 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/binding-table-library.a index b023ae5f32e..e4fc3a15b04 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33b4261de729fa453d66580edbb675f6397549de1f7c31045e4af81e6af29a47 -size 10024 +oid sha256:76c978bd7b0209a2fc9bce5675251c0f158b0606a8710e73603301b02b11c6ec +size 10052 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm24-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm24-rail/binding-table-library.a index 510da302d8f..b7430cd7454 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm24-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-gcc-mgm24-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d710da60972ccca3b28c813bab569b8b2c10f9b57f18d6d1d012e9a8c41d864a -size 10300 +oid sha256:0fc8091b7466ebe08085bf733650cdd8699477fe111710c82b2bfc3aa016e250 +size 10332 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a index 71b7f40ca62..fb473c1293f 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47ca294a52542686cca77b83d88d77cfd2cf2af7d827a2288e67a1a99a209385 -size 25418 +oid sha256:634847b6f75df3ab262896497eb5fdeb4dd60f9aae96c01c2edded1b2644d47e +size 25446 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/binding-table-library.a index 4b3babc35a4..c0ddbe08c24 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f5f472d21bf825f177095fa161ab9ffb52e07a465c71194a51bc3434bcf6d72c -size 26048 +oid sha256:8b68578334b74403a18040a4f2eba7b134992a7ad7318532f6a72e932d675c2f +size 26076 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-stack_protection/binding-table-library.a index 5e0a05141f7..257bc50223d 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7999b7a515ec8402564551007d5960f17a37d18585701af6287a941486e768f -size 27312 +oid sha256:3b4c28c92d61d1e774b64361262a382eb41833a324148b50d39de02c737ea5f7 +size 27344 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail/binding-table-library.a index 5c1b7f165b5..1cf44cf1db2 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f66b943d1a5aba575526b1121dfcea4179c7b471224ecc1314586ab23a6cf94 -size 26178 +oid sha256:a607c4cb1700ba4eec3052d9eb13b7df1ee8963db3823649955efa0408307108 +size 26210 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/binding-table-library.a index 7b15d036df3..6640496d4fb 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95032372c8e792bad3a45735c47c60a183d3222dee197ccbbf78829e77da0bdd -size 24638 +oid sha256:eec5cd0b7c344817034b78f680875960c72581a9ef49089f0d8802215f5aceb5 +size 24666 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/binding-table-library.a index e4bce5d6555..224dc1fb8b9 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c51db5b23bb4a78f576b49e42680ae4665147cceb24ab89bd3c55d0b3ebd98b -size 25266 +oid sha256:9ef234d5afe2568394029c3be9c68a238eda2264ee42f42a780a151db988422b +size 25298 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/binding-table-library.a index e1e4a8eb109..3cfe3899b91 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac09734657cc679fe870eea48d0a0d03ec8ebca7c790851c192c0b631f6c9e79 -size 26532 +oid sha256:710f22595cdcd482b8df229df8e06067707e14f5de84d1342920cf927efc6d23 +size 26564 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb/binding-table-library.a index 9d60f3f4694..96cdb2b9f65 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg12p-railgb/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4218d1406fea0c9e3b09bf37eb81fd34f780f5c7b652567e16f7e442574b7c9 -size 25394 +oid sha256:8d45d7aca82787659f7a97442b2e19aa8be4197cd671b9f740a215889d3e1c4a +size 25426 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a index 90be3515d4b..4e420c175a8 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:086fce1afbe8f16a1cebba00b1c8fe175b80e06dbb61a9509a3f5b1dd416544e -size 25416 +oid sha256:b5853761ecc1a3d146f80778d16f699832aba8e84182e86703af3c9310b1c297 +size 25444 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/binding-table-library.a index a11c7c753aa..416c811765c 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f1cb8f30de4eb7f3ae075b6ebe8317d01a75b64111f431e97dbcb732c97a53f -size 26044 +oid sha256:83bc221c393519cbf7c3e73e0628ce4c6ab6aa0aa26368bdc531e741f152d203 +size 26076 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-stack_protection/binding-table-library.a index 6abb730cb48..51cfcb4b455 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f2dce3900d8a20dd321189ac4ff97a74b2b4f65d9c4cb7e8f8c8a0f5ce3e892d -size 27308 +oid sha256:875700cab9d152ade6c9fefafbbe98c7bab0705068f97f35e9b100bdf1afdd2f +size 27340 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail/binding-table-library.a index 65be77e6530..2f629607822 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg13p-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d39e084e7a9c08a0368c0841370607704ac476e98cca9d77ddad772459a11c8 -size 26174 +oid sha256:ff8bfca368e471260cf579405029deb82c94f71ab6c316b3c08d6b582e3e3376 +size 26206 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a index 293a5a95fc7..d84e3fa29c0 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dec3b1867cb4e8d3fcea74b22981fdcb1ff2c7b939d901588fcc5e38244df9c4 -size 25420 +oid sha256:79e41ede08e3d11d490828ed492d816d66d4d97dd6ef227991bd5f2a7d2cea6d +size 25440 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/binding-table-library.a index d951f21b15e..1f9ec41ef1b 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db886506cb6cfa0cb29e69158cfe76a1b0f6a0452b9b46f7f9a905f034c600cd -size 26048 +oid sha256:9296168192cdae786a8f59d752a3f99d09bdbc5dfddfdc5436e2934df0cfc0e7 +size 26072 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-stack_protection/binding-table-library.a index 18e6de1dc3d..1b4f27d8e7c 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ba975036b087432709d9a251a20d9716f3bdb602a86de4e98602b243729cbb5 -size 27312 +oid sha256:c5aaf067d1751c725711a7020456c0683e4a7f3f02c6648a92b012f85873ff22 +size 27336 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail/binding-table-library.a index f925836251b..f814f36d7ef 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg21-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4292ea19ccf0fe3d91f96683881d4b3644e430c433bb77a0d8e769f96330b55c -size 26178 +oid sha256:b275d6904307fada52107853ba56343875a85aae72488ae59bf6f2da383e76ba +size 26202 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a index 9e01530c4ef..dc8eff941a6 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d093423fd054863204f6aa2f8bfaea29b75b3cf5d38b0ba9ac5ec3e454befb32 -size 25420 +oid sha256:c7d4980bf89363eba0b4cd655014d48b3edaebb73b40ed2460dd855a1c983677 +size 25448 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/binding-table-library.a index eee228ffedd..2e9fd947752 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2eb8f707796f795af4bab277cf6adce1f23bdf078ab7e31fc6da199cf5b5dfb8 -size 26048 +oid sha256:e366a1394a0712673958bf7655b715bd9e9d9a728d7e3a19c862b6b48322101b +size 26080 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-stack_protection/binding-table-library.a index b39b4f1fe6d..86155ceb65b 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15d27cf247860c56f15bba5dd672380d6c6c1a082fe8a8e39e17cbd96e35d3f5 -size 27312 +oid sha256:c775ded50968c26eb6aaeb7081c02bb93d94b85da32a63b76c5de322d2915c73 +size 27344 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail/binding-table-library.a index 718758c3266..0e2d2a440a2 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg22-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f47746577442f96524547b6d1084f0de46feab9aa799c28f10ed938d89fe78a -size 26178 +oid sha256:11f4d25fe96e0146f7bce8ab1b7c8bcd90b6330e25ac343d8359b8fb08b24e26 +size 26210 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/binding-table-library.a index 1376df6fa93..7bfb61b03bf 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d90296291a8e92457f81861347cd9db5d947b4f5a39252fa7564bd8ea93a82bd -size 24650 +oid sha256:875634e0619bd2a97a0cb2a66f1360b8b85e92f38367037ada15e65e28376701 +size 24678 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/binding-table-library.a index 64d0a3c9292..56cc1f223b7 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a19c4f90255b2727648a34cd094836f70b0fad32c99ad229e871cd46cbc54211 -size 25278 +oid sha256:fe19c2cd86189b47945d5b885bbe14ff65fe59de837a9e6e7f6078755c5221be +size 25310 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/binding-table-library.a index 3f307d4a2ae..d3e6ef9a917 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6fb427096f651043c92bd73024be8d5c4b8bc080d39cfbbde859a08c55117b3 -size 26544 +oid sha256:e67da477b9a60d05c5a93002a5bf64938ea0da23ca20ea293987c1d774ca09e2 +size 26576 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail/binding-table-library.a index dab2474f7e6..6bd32f80a5a 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-dualrail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e3ee952769e3360bb0007bc62364b90ef2f983d793c926f7a0fe09ee9e40daa -size 25408 +oid sha256:817e710d01e8f59a3d8e2cdfd7b9797bf171094e11caed27ed4d3457bfdd6e88 +size 25440 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a index 59c51a1c6d2..9dc6e5b2b41 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:942356c10b89ce7abe5cbeaf01ec412058f8c9f48636cb30ce39050ec03456f3 -size 25422 +oid sha256:d95962bb696f46bdf59bf229905a86908f387755b78e49097a59c7c5e4d64cd6 +size 25450 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/binding-table-library.a index c7d40491b6d..b663e02c96c 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8993191dc01c2b6cdb50db22704541e3358bc8e218d9d83cf00f15cd7f7cb8b0 -size 26048 +oid sha256:71c737b420691246e0415c3723dc7f751da3391fa74e5fe332bec34a65da96c5 +size 26080 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-stack_protection/binding-table-library.a index 60cfa2e38fc..14214e6d9f8 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28d513c65d65dd98e3ae6d8e94cb784db4513ad0dc40a2871de4e584171fc994 -size 27316 +oid sha256:610e3debbda48ff4454adcd2edf4a59264700702fa45e30dca10369800740408 +size 27348 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail/binding-table-library.a index 5a4a6266f08..61a2f91682a 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg24-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2e214a8613e7fcc5f8c97e5f9f054e316671e349bfa5cf157fa181f791bc34b -size 26178 +oid sha256:f1cec117cefe408815471fa7c4c179c9b3f34e86e46a339b1c8684d038f40059 +size 26210 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a index 963ff86a593..ba06665782b 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:897a99533d1289d8d4460142da8262a08fb0d79ab67e118eccdd742db6e7f6c7 -size 25420 +oid sha256:e23955d9f153a92cf699aeace4ea91f3a35ec64d9fa7f5dab95a689374232c0c +size 25448 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/binding-table-library.a index 180294a1bcd..40de69e51f3 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ad55ae52cd8bef357a55b218235af750e3578c3b7b1318f8670229621753f0a -size 26048 +oid sha256:5a0077286ae16a33105f4a8a246ec218fa5500f940875bff09e12be3b9f88909 +size 26080 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-stack_protection/binding-table-library.a index 16a3dcb89e5..85bf598304c 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c102d390d8ffac2ea61845bc2bba3d0605457392397d4d5c66bf51dc7ea5e6a1 -size 27312 +oid sha256:257cbd3e4ee69465f6b99083b609dcee775ae4a0da539644683582fe232c95bb +size 27344 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail/binding-table-library.a index c57a9054b9b..74cc6bf3503 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-efr32mg27-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75d7badf21dc67f8f5eaaeb606a42f66996fb540def5a8f51cdd44aecfe7a325 -size 26178 +oid sha256:e4621063b4c68d84e00677fbdf3485ac1a9e014ed6c479d18f39daa18ebc90b7 +size 26210 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a index 2c355336f64..a8f77ca95e9 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35aef50578facfa06b4eca351217136873c82bce6cf918b24f0bdce372d85e1a -size 25344 +oid sha256:cb8c60e728b5088e38bedc0187c286b349a2fa749fce8b5ea23bfba9668ad90c +size 25372 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/binding-table-library.a index ffcdb4f1344..d6bd1275a26 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1cbd56ff0b82f50ddf36d2b9adca81b8e836505fe0a516b95ee45f8d23dd013c -size 25972 +oid sha256:2208f809c8dbbdde495426881e7007a81fda4af46cb1d2596042cd27b327d6ff +size 26004 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-stack_protection/binding-table-library.a index bf0e98c7770..a6c824854d1 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33229238291379895a57d38389eb29626dd8e8e81d95a8a9653c8d727bd95f9a -size 27236 +oid sha256:85f2e5d77ffa7b162eadcd8013bd6a7832f1b13adb5c14ded564b129f5c40aa7 +size 27268 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail/binding-table-library.a index 7c0f5a916a0..9588f41d030 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm12-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e06ac7e777c5621ff6aa6fb1befefb5c4645370cf67d2c161f9db32a67fe3525 -size 26102 +oid sha256:ab07a748ab4ad12c721c2ce96ab6026b1f96232515103ec0f37a7c9ab68aae6d +size 26134 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a index 78add7d2d70..21adddbbd8a 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d58b842e80e485872f4d9b392e012fdaf1dc75bdb6e76c0c595149cdd4462fb -size 25342 +oid sha256:a455c88c9d0c0b42109e330267e4962aa54929d3e1c2908c012c6bdedaf22517 +size 25370 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/binding-table-library.a index 32c89aac528..4ce0e0ea991 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87b2287348ab269274d6f08d32daeb64949fcfde2f97ddf5f62f2b1c50e18941 -size 25968 +oid sha256:acb8742d14e79007009a3c62d6ed6d8ec4c8d0a18ff8d286c16e189a0f45acc0 +size 26000 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-stack_protection/binding-table-library.a index a7116d2f441..f0e6ded04e4 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c9137b441f95860c2182eca5262f23498f7f63ad698dc62224de2bffa85c39f -size 27236 +oid sha256:9030e55cf9479ab9c6d6fa18485a115e119733a7f46af79c47d5681b5eaa3680 +size 27268 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail/binding-table-library.a index 7b94166f76b..2d25c27ccf5 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm13-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53e3bcf571f33591c114125892c24796e4d615b5b6e31ee74b5ae13bf39bb451 -size 26098 +oid sha256:162b202d82da363bc1feb8032483c4fdcaa905524910f55f1d979cf1e02215a8 +size 26130 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a index ba6c3c4c819..767122a9368 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b8e3b02e4dcc4a75cbdc520b381bcc1ce956b23ab7c396d623a83c8943cffd5 -size 25356 +oid sha256:18587506c27cc85ab43671b605df56888ccc230e409b9b2ba2c2dfe0c6b6c262 +size 25384 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/binding-table-library.a index 1764944674d..eb46894a796 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1ff08ea9cd8a617c636ffb2d197795efc937495f4af55292dd68500a7137cc0 -size 25984 +oid sha256:a0c54b114a912c3c07af2375150ce08403e072c1f24e4a5d62eaf274ecf3353b +size 26016 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-stack_protection/binding-table-library.a index 4b01add773b..93e3420fe6d 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b2632edfc7a71f029079cd50f402c7d2a110a00c57c20c721c8ef82d5b3dcab -size 27248 +oid sha256:386e6d8b1706c5ee41ad8ac8662e768884ec880e6eee4e42577d899583649331 +size 27280 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail/binding-table-library.a index 1dcb6ea9964..d07c75ced6b 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm21-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a82e57c403ae255599e60d283013c89fc29598534f2ac04d0454bf4bc07e8b8e -size 26114 +oid sha256:61537db79c557ae8f5afedf775de5bbd2ae3d7192395ed86d55dbf50034f6044 +size 26146 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a index 95e4b3e946a..84268df3485 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c018130bf790ce8806203e412c8aef0025727c153830b4f6dc34befc0e44642 -size 25356 +oid sha256:7c5f10e28cf099b33f1e135abe44754d51f91d4e6f03f43fb4a1868a46c46662 +size 25384 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/binding-table-library.a index 68656876d38..8bb2c167eab 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:218791a6612ce50807b601d6831695adfe1b715f8b344b4f8744eca12cd13634 -size 25984 +oid sha256:c0c9f2ff0794f222e9d45b7b8f8319842a688b7c8b70fc965babe9b44d3f053f +size 26016 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-stack_protection/binding-table-library.a index 045541c107b..76880a7897a 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c601def989d3e43306308257516cf374e46074e0e3ac3ff81f2a83479ec24dcf -size 27248 +oid sha256:f63e77911006a251b9405a34d08ce15a5efe3c065fa9556d3e2775f2ba52782b +size 27280 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail/binding-table-library.a index 3c4179d2971..a3731d3accf 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm22-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca36465c7a6bb4f0cfb9f88ac54bc561fe70bbb29eca1a311c9da64618ea6f2c -size 26114 +oid sha256:7bc95debda9346afb0fb6717add219d9948b3851e55c345b8a6eccd1eeab3c80 +size 26146 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a index c341093ec69..bd57cd2f3d5 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4331ee7cf65912dc84e846a4dd2c857491c6e1fa7f0eee87a8ae4edac2c4e6cf -size 25356 +oid sha256:bd2686510443eb36467b9512625a965e94602c97baabd821a305575bfdd6202e +size 25384 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/binding-table-library.a index 03b9c6b9bd3..53dd36a2b3a 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c7419629f45e855475f9335ecf0cd898c4460a678528e661e81e83ec9f23187 -size 25984 +oid sha256:c5ff05135e15a16e8d81e212b7705af82c59c06fe04ec44cdc4ecb50fda2e84c +size 26016 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-stack_protection/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-stack_protection/binding-table-library.a index bd27a736210..0af0ebc0aa5 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-stack_protection/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail-stack_protection/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8eeba0232c99583332e483ab4f79519dd8d7ecc3cd082a65c79a4b048d1dcd86 -size 27248 +oid sha256:266f82129d21d1b46ee54f24db7faa83831817e4b4b452a31b35a93b27dd4573 +size 27280 diff --git a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail/binding-table-library.a b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail/binding-table-library.a index 75c8dcc3971..30db1294b05 100644 --- a/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-cortexm3-iar-mgm24-rail/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c3379c6b24f6c45ab28d17ff911078e8662a57d347c9c6dde0532ff8f911e3c -size 26114 +oid sha256:0e2582dd5d7d0517443ba54730c61bd1b0afc6ee942cc064f4bf7801e53ac1a9 +size 26146 diff --git a/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/binding-table-library.a index ac0df098a7b..cefa5275340 100644 --- a/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d090ee25c96bdc124956a3d017456872ff6dd1138620d32e3b2820cafea306d5 -size 61972 +oid sha256:45fc9af8c161b8c756e645dc18ee5164e0e5c4dcc0d37669da10d579b4c7994c +size 62052 diff --git a/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/binding-table-library.a index 85beaf4ceb3..fd13e641be1 100644 --- a/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fccd0afea35f3325463a08ddbe935c025ea3a141b116be755648c6afa35543f1 -size 58560 +oid sha256:739e00fb335809eaaa079c9a9416c56346d0dd6779dc555b4212981fac059320 +size 58648 diff --git a/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/binding-table-library.a index 002e1a645c3..27dc598661f 100644 --- a/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe6ef78200f25566ee27be83fbdd9e8d9a4a8148d08ccc77e91312961a0aacd1 -size 43272 +oid sha256:615b14653dbe36a675eca8b882638252e0e203200dab75b168484acc1af00846 +size 43324 diff --git a/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/binding-table-library.a b/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/binding-table-library.a index 738e984b96b..f525c8b1a70 100644 --- a/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/binding-table-library.a +++ b/protocol/zigbee/build/binding-table-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/binding-table-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fbf1078dca692060543a8f16c41395907df7f4167f9de2a18bf82965210cf4be -size 61904 +oid sha256:de88ac0445b27d1fc27f8f7e1e4757e2f0639be4785e6b31ae2156ca5347059b +size 61984 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-163k1-library.a index d0f94719987..1d02679d41b 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c92d15c9a4708c76b88fcbd12c92e843991eea8228cb8d960a6afd7dd1d09072 +oid sha256:c641d64cd12f46913524ecd6b759893bf53ae89cb4f5edd5d9ac2ec9e72cbbaa size 15200 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-rail/cbke-163k1-library.a index ab0c8d9ab05..97e4a1cc506 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4af5f12fec4c62332bec29035c464078b802dcf554fb99546768f573bc68a02b +oid sha256:aeb7dcd5b383f163874fe6697e0294789db810f0efb963b1da41a988adbbd391 size 15404 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-163k1-library.a index eeecb82c882..71188b271cf 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d74e550fc3c92fcbb72ed22f4bebd379fba2913686717a665497c4d6cd0479a7 +oid sha256:1921bdce62d641023e1dd1ae4f4caab3b70643afcd6f10a0be34d2bf3d1dad0a size 15200 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-railgb/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-railgb/cbke-163k1-library.a index 2adac5f688d..272756637a9 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-railgb/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg12p-railgb/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4bcdff8fe605fba2b509446e81e13a8077c7b882027cfc74fb7aede7b323e01 +oid sha256:733fc8d95c87837e5fd3358bfb0a14c56e0fccde8ea92d56fa2f6223ae5b46d7 size 15404 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-163k1-library.a index cecc684f19f..0dd55b6166f 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc8888186d334a156920f3055d16f9a22a20018e26152e00f57c7554a2e74cd2 +oid sha256:ed3530dddc1950f9961a99ca1a143811b46ca0c5c13d89577c33092103d289d6 size 15200 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg13p-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg13p-rail/cbke-163k1-library.a index ab2d09f23dc..80e3a70620d 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg13p-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg13p-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad3cb69a66d6b08b7aa587d3b8d4c6d244b1d260fd6f4a42066d9f932f672888 +oid sha256:9ca9b24aa975fef665f67e4b1c58989ab714c6af4bf639d28797e4f7f7e064bb size 15404 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-163k1-library.a index 3b5c285840a..343f69bf533 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ab2c98592519a7efb4ad652af45558e93e8c49439538123ab49184c69b06498 +oid sha256:a5fec66e91d1ec6a730bb323f857ad514a2aeb82a3235f4130c9a6a290c6bcf3 size 15228 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg21-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg21-rail/cbke-163k1-library.a index 74825e38fa7..43b7b91851c 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg21-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg21-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be3d6e4e9602b18a37bd3edf07a1615dd1a35f32cf835433fa158d9998d53839 +oid sha256:343794701ae4fe7966bbf4baa366604804f3521713e4a09c2a2617807277cf43 size 15432 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-163k1-library.a index b75218d47c3..c03bf536212 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:730fda001a3da4fd6986db8f965d7fbfa23dc1e1b2e3f5d4e3358013ecc64c9c +oid sha256:893307b3fc7ad4f421eb01cee5f90b7d80a886b3faadf3ebdbf3a553afb6dffd size 15228 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg22-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg22-rail/cbke-163k1-library.a index ed0b58392e9..bcf55aa19e6 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg22-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg22-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cb8e30b0dc98a9982ccb1dff8fe9b1fc0fd427aa496ad2e39451cf7a2ed6ec8 +oid sha256:1d8ee96414b307a654e08cf2133f1fd52d82a88fb95f2363142b5a1e0d864706 size 15432 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-163k1-library.a index 7312568edbf..2a5cea876fe 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5dc24b88f6cfc2f154ac7f2f4de4ade8d899fc45e6e0bc83e6a8741e5da0b59 +oid sha256:078335080dc3e45f43d34282dd04b67b9dd403ce8c5913d52ea1268f783520ec size 15228 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-dualrail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-dualrail/cbke-163k1-library.a index f4f74a5402f..3290c1540bc 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-dualrail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-dualrail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45babb0641bef2847273bdc91d588425a2d6f025b227d54642ca229c9637575a +oid sha256:c073f51f883dd069908b032209f49ed3597442dabaef01d0b09a86830d6a3c7b size 15432 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-163k1-library.a index d9e2299f70a..7a3a915c0e8 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4b7c20eaeabcef2ea277a6f8fc7453e74d9b659d8eed0a5121c12c0183c888d +oid sha256:260768d23435b0965ce47919e332ecbdc14b0f3f0f079cef7263edbb244bc948 size 15228 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-rail/cbke-163k1-library.a index b7d98951a4b..c248fdc417b 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg24-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19b3ab0ab8718c367e86b14c44574f5a1562cefe5f5c2485585c26c7abc5271d +oid sha256:bf21e655c2ce7926b3b6b496f4b8fc0a2005312483858e17767da7123557f76b size 15432 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-163k1-library.a index 4ec631eb5cf..19bee797936 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7edc14279546fa4ba7bd3bff9bb69d68692d1bb9670e1cb7086ca8088b3a00dc +oid sha256:4b30c02346f63b9b212bdbcc259180cb0937449f4471c217c11a515e360c52e6 size 15228 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg27-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg27-rail/cbke-163k1-library.a index 2441c8056a8..a9289949ab8 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg27-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-efr32mg27-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f277c50afe64b4b45251193883640f3e37ce2ac16099e0544fd1565e95f2e65 +oid sha256:a53a03b9c702f1b2570bb521e90deb6c4261d70edf84623282540dfac7835a10 size 15432 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-163k1-library.a index 70d53e9432f..29724558ec2 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:044056521dc960f94d669426e8d70fbac9549c1c0f100cc36d9796a67053e16f +oid sha256:900bf500d8d27b80bb90278c9fd594a83d48695698c0524c9d7c38ae9ab673d0 size 15200 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm12-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm12-rail/cbke-163k1-library.a index 72f0e69a8f4..f1c1d338cf0 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm12-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm12-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44840c6d9d114edcec13e71fde771b4db5fed08db0dbf684bb511dcc99d06d7a +oid sha256:dac286de04874ec3d2952eb50a318f4630656a0e7ae4bdfeb0a3c6e65561d1ed size 15404 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-163k1-library.a index 9f932c567e5..0dd55b6166f 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb8945c0680e86fe86a0c2eb330a1f9b232dc89253dc63722f57318f07fdc7c3 +oid sha256:ed3530dddc1950f9961a99ca1a143811b46ca0c5c13d89577c33092103d289d6 size 15200 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm13-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm13-rail/cbke-163k1-library.a index 56489427f4c..0b6c7ae4c1f 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm13-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm13-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:395f635c65ffa61e24d10d1f6124ca41e15e07e5592b340d68e42149ed1b6abf +oid sha256:8793df6b447ac84228dc173a88c3a03cfc36e1511151952461514917ec415f73 size 15404 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-163k1-library.a index 6160ea0d272..d12883f31ef 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae0557bef6fdbbda01d73fbcb2ad55705d204890f344d5b97602cdc6344561b6 +oid sha256:df4b283072961f6329a9d15bb921491ff85df91817944ef64f538584b3e9fc11 size 15228 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm21-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm21-rail/cbke-163k1-library.a index fbf51e669a6..f8dfa742cff 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm21-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm21-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5d127dc37d8b917ca2e828c8068bc5b97fba0650b3c7be55aaf10776d7d0b6d +oid sha256:a4b6e6cc566b37ddc5e199d36cec414f1e58e219c383278dc80e87085d0df02e size 15432 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-163k1-library.a index f53bca85d77..d12883f31ef 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:242bb9fa51a1eb616920b1653781ba5571b3a76a85b10e1acb6b1c004a34ba31 +oid sha256:df4b283072961f6329a9d15bb921491ff85df91817944ef64f538584b3e9fc11 size 15228 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm22-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm22-rail/cbke-163k1-library.a index fbf51e669a6..5e6d82d7377 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm22-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm22-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5d127dc37d8b917ca2e828c8068bc5b97fba0650b3c7be55aaf10776d7d0b6d +oid sha256:a133c9ce079c62bad465e6a0369fea1d2ee021750ea9e162e50efe69aa212471 size 15432 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-163k1-library.a index 6160ea0d272..7e884a3ef48 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae0557bef6fdbbda01d73fbcb2ad55705d204890f344d5b97602cdc6344561b6 +oid sha256:e52aceef6d1a9056d3659d3684ca962ac286e3b2a98f4e9a556674423fef87ec size 15228 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm24-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm24-rail/cbke-163k1-library.a index 72f63b4c962..8c843e1ec3e 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm24-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-gcc-mgm24-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74f0b5437479b5d8248f3811a82da84e9cd372346643b71e653eb8fb9d9884fc +oid sha256:1c56c19f9daef71586ac2efd1c40f4636ec0edc2a4ee9a429d5f39f58c15c41a size 15432 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 3b97b7ef9ad..d0faec27c6e 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f220b1e6f93b722eaa3c1e5a1de86a56870e39d84cf194076d345e0382292aa +oid sha256:eb70fde40b7e502e7a3c224d805ffc61bdb924a295d386d69a57a9bc76de2c1c size 34490 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-163k1-library.a index 467ea1eeb64..d74db7d8891 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b376b1022dd0ab6d255c3a4c5d2832c39a0c091355335c58602975cc7c223ae8 +oid sha256:6afc6c005cca83a2ceb361ef8e8af0853b2a1310f520e059fd5ff49288775a29 size 33010 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-163k1-library.a index 577c4d891a1..f7bc2c859f1 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:189e82dc48d874227e8f9ccde98fbc3b4bfffd136dc0c54974e0335950528c10 -size 34466 +oid sha256:179aa3807e04df16d65f6b556ed9ccd7c0282529ee53cbacd26977fc2917d27a +size 34468 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail/cbke-163k1-library.a index faffe6b675a..078b28ff13b 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a3b9998cd0be7572d5ba272a081f9a0ca81f216ab13891df16f8ba32a997f80 +oid sha256:425ea71b09443a3875a9f7a4a9dc26e7594ad681a5eda505a0b8af7c928c95f1 size 32986 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 291e662e02e..fc6bef072a2 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d8f870785884b907e3e58b746005adfd198ceeb28742ee7c0a6f5703f9169b8e +oid sha256:da1d75d18b8ff36d5acd2989d2f71e876b5468cad41c19d00b91d2d7c9e40ed8 size 33324 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-163k1-library.a index da3fb166370..afbf52dc9bf 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cfdd7e1cbc828d7a0abc5e67540ea395453394c4512e957dc472a6f974aa8507 +oid sha256:b862ff112682e58ef13604a3220366834fd6363b1d1dd45a661d4536a673b3ab size 31850 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-163k1-library.a index 34934ba7381..5ca182171ab 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae52ffb180ce0e06c24ca61858d4cb7b5a65376f421509f6947373e1f6bb0bc0 +oid sha256:355fb7b02e509c3863f36996e758f3070e66687e3b0540fb7bcb3d6ad32ed00b size 33302 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb/cbke-163k1-library.a index c84f92938dd..c6b873906b4 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg12p-railgb/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c301cb461d40e3ac145838473de6d57dbd9e2a211ccb026a7467e60728511f7 +oid sha256:37a0928501974b4218b5875fc65e427e17284f9b3aca4387b8fc785cde4b85d1 size 31826 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 3d2ab079107..8ab39a0aa6d 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d69ad233234c28a28ae002f747aff6b694d863d888bae97be32305b1ee1cf14c +oid sha256:2a2f29b1fc25ecee3a2de02a3cafe6eb3f2c7a7aee3c6debd6e58d6bf2914ea2 size 34484 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-163k1-library.a index 337e33d4db0..6ff2a5b8bbc 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c9761792f61d3e2c049c2144a7ad88345e043cdafcf196d1658ed362419272f +oid sha256:6ac17818cbdf1590d8e87e66b7d95507cc604e54bac5c478a4e018e769868ea2 size 33006 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-163k1-library.a index 57f727b3da5..e580a4a0521 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8f0c464dae6bbb700192233936cb409c03fdef51f594446e00e93fcdd9405a2 +oid sha256:a4300a6f46532d42ec2a632b116e06a803e49f6638bbea97b626cf79a4cd02ec size 34462 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail/cbke-163k1-library.a index dcf266a546c..a246070b6de 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg13p-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:818c45345744b1657f032563f2026cb6d198053169bdc0d9719e0c21eb48f7b5 +oid sha256:c0d618d2d885254b2e263148e8c2ec93a5071c16ce7a102ff7e9efcbddcfaad1 size 32986 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 620aeb31ebf..211dbe04131 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bcccc2a09d4222501f140910239b7dc936958501e26b77516ebd4ccac362d9e7 -size 34490 +oid sha256:d83e619bb5e49e196afe5bf3b3d9daab0e29baa2a6ca198d36c78bfbb3778b11 +size 34478 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-163k1-library.a index f83a488c39e..4ead1fabe00 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44f2ec194406a67006fc38920b2f9341dece693189f890affef0cc69c628a6ab -size 33012 +oid sha256:3082f292dd06d341944075ee9e93faa555b3a89a694d355f852a77ab322b8a2d +size 33000 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-163k1-library.a index 81f8fb7024f..678cdf030d1 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15b330767065068cdff13bd2ff0f1744ce8977f4429000ef6caca3e33bc03986 -size 34468 +oid sha256:27b8249f384fd99ff69157e58e8be4dc679df885d2ee2a64afb6c91c8f703007 +size 34456 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail/cbke-163k1-library.a index 3ce63db0e8c..6a1e13d06ef 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg21-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ce776468bd8e53f73edec89c6cf9c8d167f5facd30f2d8e162c93db56f0f05e -size 32992 +oid sha256:e3658f7787ff5afae014babcc48ca2ae612ae87f2005e8771f380edf153a9eba +size 32980 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 8b281ba5e61..10f1bb52d46 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5f040b05d7a546aed79b096b4f9b0e1690767cfe6c4fe46284187d9275e32d8 +oid sha256:7666b93f59e3a1f2ff52849468d25f80b9956308849033ca2d1b72fa0dbbab34 size 34490 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-163k1-library.a index 12fbf2009fa..0bc045791f9 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:23f9a8fa7a2429e1bc6fdcda601ed3cf3f683a4079ee0a8b6b3bd78bb8e0b97b +oid sha256:02b09b257ebc57e544a4324725f3c3e415fe78ac6a6902d5a59ae4bb322fdbcf size 33012 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-163k1-library.a index 6f88c747803..dcea06d3f00 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13d8ca43765dbae1f7f91c0ca75a951dac2ea8e5a83d87f766e0b0ec1f754002 +oid sha256:155ac3623dac30c95dfec7af9551824dd9662521ce871403f3a16de7899dbe85 size 34468 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail/cbke-163k1-library.a index 5fb729ae567..54e0caf996a 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg22-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:96e0cbce9442f5a7b12fca4334d8be95caf9cdb9f2c98a7055df29a277621b53 +oid sha256:4f05efac5f3a53dfdfde31cf0676dab5a9d94bf890fb106778d83e5424cd1630 size 32992 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 07439a95a3c..aff9c2056de 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43290977f3c1abb7f1fb026476c56b6a0ee5014704d7447e9bb499e2241a4870 +oid sha256:54ccd457368cd67ea4cbc161261ba138e1a95d7a9809714df9efe307eb55b02a size 33346 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-163k1-library.a index 73cab4ca7af..c0dbf060d75 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83f42bc3e9b723830054dcc2ec4240da2d509a610026ef751204a14c98bc0c56 +oid sha256:b199994ba104a571824e23445586befe641f3ac0a44ca2c067e4b142b5f0e807 size 31868 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-163k1-library.a index 50224499cb7..6f33c080f77 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2b064472141560ba182b800a10c4a7ba7fc320e2925017a24387019b70c40a0 +oid sha256:c0acdc62c024612d748e76e417b31b72cdaa9250ff71e253f06c50a2dcc0fc0a size 33324 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail/cbke-163k1-library.a index 1d1e88383c5..67108296033 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-dualrail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:342d605df4c938b7953b3fe745333618384f86a7459683bcd175d5a0e79463d7 +oid sha256:58da38f6b70c941469596314ef2ecabb73bdb852330b5d2f4fa7ed3600289bf6 size 31846 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 47182a8444b..295612688f9 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e86da4bba881de09695a9bafc2994b57b9d13d9a65b39471379c00abf2477958 +oid sha256:5a335040d6ca39c14b29eb04ccd713f0095b2555f717eb99d89f9012dbfd9467 size 34494 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-163k1-library.a index 7fe6ae725a5..5b8740f58e0 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a65057dd079c6619c9de6d862ac04536dd110fc3090a6820c0f0d03a53b49f5 +oid sha256:6631902799f6b3ae93da4f4341703b39f303fe29f01b31d5c22b77bf47159c2f size 33016 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-163k1-library.a index fff8226019e..200fd42d9cc 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eab5f7381d82991fd4850e749fa53ef463d62c68567e5ad120614cbf2ec646f7 +oid sha256:3389ca2b1d83aceee890ef551254bd3c75c74b1535d7ee308cef7ad62577e5c8 size 34472 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail/cbke-163k1-library.a index e7ea61dc6d7..00e43fcd6ff 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg24-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c74b3c2f3dad4eb57c69ef293f529bc94bf183c8d46bde7b339893d2b80125d +oid sha256:29d18b4f909e99c5f2ead441d7827d6ab5c18757e9ad997a5a7bb5bd4d876494 size 32994 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 8e49a781c51..b289799fa5f 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f3d9a39f6384fb55aa686d2c64f36f67dba0eb55a312d6f294cd8821b055216 +oid sha256:4cdd37a0a9b4975bd49917e91dba3244a2b5ddd7d3c458dd8f34114ec44c97a8 size 34490 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-163k1-library.a index 90a52013333..3958ce107e6 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c241c75ddf769312546f57084e23b41290e3cbb860b14162553d3956bc1bb59e +oid sha256:3dc602cbc97e8a044da2ea4895f8d373a776a51ebf100863dc72a5a168f43560 size 33012 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-163k1-library.a index 6162037a563..4b07469ba9e 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b2026dae4070ef883b42c8bd2874791c9ccec73b01c856b9a67067f6705c9745 +oid sha256:45f46338c362cdd56355553dda4748c7627687e8a63ac40b19240f275153f2a8 size 34468 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail/cbke-163k1-library.a index 9d4beee257a..9aaf5b6c26b 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-efr32mg27-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:864e7fd14d675064d830f8e794f0af945496c4b345cf18d4b2fd525b35d4f172 +oid sha256:5af54f838ef48dd47f03f1a6fc215f64e1fc9e7f1309f2fe54f7ad987a97f881 size 32992 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 04d0a5a54a5..dd3930d597d 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:618e52ffe9081f6a8f91883a85a1af26373ae8ad908adec5f43d576114f2806e +oid sha256:270268c28c70c7187ff7efb5f157e60141b63aec6cf7db2f6679c12de4426682 size 34376 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-163k1-library.a index 0c925a88f92..15724833006 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6544563df08900a8e27c78269a2d10cfd5837bd4ee061c38b94e3298d111745 +oid sha256:0e7b5a98e6b8a298dd8096298a647a4918bc907dc12a8180fc14a3833be6514a size 32898 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-stack_protection/cbke-163k1-library.a index a9c21466de7..6301ad0cab4 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c5ecf57cd7d557f9b7db60c72467ca37b2713e1da561b4b804a413d499591a2 +oid sha256:02338ec99f669ae5d4a7ea5da441c7b319180cb0f2e62596a0f3e9ad6d66574d size 34354 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail/cbke-163k1-library.a index bdebd2cae7e..cc6e42c1ead 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm12-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84bc729b260069dab161e72ef92cdfcca5bc6a7348260fe78e2e8480c5a67dfd +oid sha256:0966acdb74f310030b26be744de6cccd4d4114b2a598ef198103d9e0315cfb89 size 32878 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 3d4475c3ea2..20f0a2e2870 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9bd6cc96177e489e9a4d20e9dcd03e759f5f139933c6d8ba9557499b23f2530b +oid sha256:ca11786c4f97491c2d78e16fd5161b0e3c0dc119db2c2c00695912da9a54940e size 34374 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-163k1-library.a index b174d65ba95..2c69f59c0b9 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6e3533aac2bcd4eb1ea76b7542d345d083831d13f83911ae57c73d806739080 +oid sha256:96c77a9291e724e9edfa8ee1cc4afdbc8f19e04663baaaac6bab0928d9d19d4d size 32896 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-stack_protection/cbke-163k1-library.a index 178588205e2..b83a7fb5ace 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b559a21c391d497d3f4cd9765caa64cbcdb152ac1818f920748f905718423a4d +oid sha256:259453f3ee18f277ba238b8a18532e4db1748f884d85aa36665d4da9ec36f68d size 34352 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail/cbke-163k1-library.a index c0271cca7f6..5b1e892a644 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm13-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:10bb7beee3999aa0a8b388c734717dccf5f0c5e22161d0f3ef1fe3cc28c07df0 +oid sha256:890214e65cce7471ff15faf647d86256d96fa144bc9c737d4f1e667a1c93531c size 32874 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 84772bc6bb8..c9bb52d2beb 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5667c1780ff4f71d496998c06658a7046a5d52df37c459339eaa0644ea92376 +oid sha256:a4133c9d8e46642fa02639e94ba80800a40334b266f7edba7b3fa37618ff8e45 size 34394 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-163k1-library.a index 7ac76fc5ac3..b22203ce33a 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52fd6c73c2d84d82ec947011b306c6f04a5df0ea6d51a1f7ef0bb59023b046c4 +oid sha256:c390533262e588430fde803a8436b6365934670296e2e32887e1481fe954920c size 32916 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-stack_protection/cbke-163k1-library.a index 76d3ceb05fb..8b054dedc25 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1635b625f82d34e61fc6cd1e2e8c59e45b467811bd3e6f4e4f42950ed559f1e8 +oid sha256:13fe7e236cdcbffb8031fe425d01d9fcc341c4007bfc4c644163c801ec78fcc5 size 34372 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail/cbke-163k1-library.a index 92b3087918c..bb4329548fb 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm21-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b066b338656aab7cb2d171491f7c9a4842566c336c9431fc0fe800a127b3f29f +oid sha256:6f9e3d3c81efd1d957c3e52e6eccd0a254d6bb57898384ad6e571c0b6f512de9 size 32896 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 53d234a5ed0..cb31081de90 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec467f9912853bd73a5f79df0b96f386a2a11885880ab47344afe39c8e18ebdb +oid sha256:97914655cf980cf2a663074bfb8b61e92a20fc3f3d206acebe9053c184a0aef6 size 34394 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-163k1-library.a index 2c0bec3422b..10695e81ba6 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18c7bbe67e0df8df89b941b8b4f6cb070e0bb0b2f7dfd9727835995fcc5213c8 +oid sha256:c7bd1ea9c2a88bbfb13b389ea804a9f46cc2043192192668a319e98463b5d5ee size 32916 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-stack_protection/cbke-163k1-library.a index a02de08d09f..5d9742b079d 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c84e08e127d5d2e6f46ee85aeb880a77c1a6012f095b3ec26f92d1a42825a43e +oid sha256:7eb308ac2ad1ba03c82f3691a7ee5525e8aa2eb0574ad27693e930f34749adc5 size 34372 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail/cbke-163k1-library.a index e5681fca79b..3ef0c4e343a 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm22-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:945119c7edc8e7e667e9942743688cbab4ac375fb24d20a6f84a93b6384785cf +oid sha256:7d0d7ff7529f8fcdae2fca4d0c33ade0de4c70f720cc12ea8a8b788a292b14f5 size 32896 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a index 3613252f349..346639653c1 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2943b4c83eb5dc0379c3907cd83f887d21e271eefbb4936292bc55c3737020bf +oid sha256:6aede78ea1b94af405986b7004bc23f8886eb3d120e9f3b8fa22706164df1862 size 34394 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-163k1-library.a index 2649fe011eb..4613450a06c 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7252beed17473ed2c31eea8bd0b77920f8403669fe9e58c8f235c656ed4b163 +oid sha256:cd3c9a090d31517c9b99e1390b58ca600655b891dcb533beb3f11a51ca0b1cc3 size 32916 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-stack_protection/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-stack_protection/cbke-163k1-library.a index e16eb27f539..fad6f743dd2 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-stack_protection/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail-stack_protection/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d39f185a0bf91bcb10602af5cb379fc0ca5310484bb798c0d98168f6e3200b2d +oid sha256:84fa31b1aa09fb2ef4b68bc378527db2d5f42dec877bfa1304bbeef43474e041 size 34372 diff --git a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail/cbke-163k1-library.a b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail/cbke-163k1-library.a index 9fb2d5a7ef7..fc1c29e2545 100644 --- a/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail/cbke-163k1-library.a +++ b/protocol/zigbee/build/cbke-163k1-library-cortexm3-iar-mgm24-rail/cbke-163k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5d4f9a0daf23f20d749de3279dd67400a1d372c16d7e3c5d9ecca1244d56c82 +oid sha256:41b2307dd5d2b81717d3687aefc0b5f7418496632225e0dfe29daac2d7d82df8 size 32896 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-283k1-library.a index d4d016fa211..c2e2ab74323 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03cf0d4fc3b5db40b9a2977697fce911efa86c55f2e8a61558f173530074743b +oid sha256:7d17f0dd41c07736984bfd107f0452ba8d4ab6cefb88fadaca77b30a54064694 size 14716 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-rail/cbke-283k1-library.a index bf1807894be..069be4cb00b 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:50314e02c4661c6643ace434f73cad96a1ae85fca66c51dee3f9f29bc6651924 +oid sha256:c12b3b442685b4db3a2f47a0a80f3bf870646e03cfa6dfd09737d54ee3bc5520 size 14920 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-283k1-library.a index 8d83bfe49d1..98430287f2b 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:484efe08b75355600f22891c30676f2e484c4c6930448e49d18b0b3d2de7bfa1 +oid sha256:418a21af02d9c895ae00e597698212b294a059ab705dd381bf828362892b1d1b size 14716 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-railgb/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-railgb/cbke-283k1-library.a index f34558f2309..10317a102fa 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-railgb/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg12p-railgb/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d25bc84ea1eb453639f0fd3d44a9d7b112d6241653fa95957d2c50799680307d +oid sha256:7859f4098e8cdb1a48b963dd57116ad15db7d0f420f628b7a225a6dbcbb5c397 size 14920 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-283k1-library.a index 804b8430086..71fee50db4f 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9608d77f2c39c0353ac9291d04094ce379640c97c3fe7948f607f6cec5e47aaf +oid sha256:d7a21e871a93ed42d5eb3207bc23ad3ab173ae85b8d8c3be3206103d2032bd54 size 14716 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg13p-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg13p-rail/cbke-283k1-library.a index 9cd2b52fd6c..7693e6802ee 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg13p-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg13p-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5910bda14c1488f7d3122e2bf6eed919b97ce691aebd7b1dfa52269a451f16e2 +oid sha256:4a623a3337d561471a14b63428aa208578816ab79a37c2d36f55b363e9e839df size 14920 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-283k1-library.a index 83569460e7c..64b6ea57c22 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31740ded4862e5e31d61e053f12d3f34ea15a0ee7447d6197e963f0351cf8af6 +oid sha256:232ecd5d109d2d25a1af564716b3b26415448467128adde55714b6a58c4c93e8 size 14748 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg21-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg21-rail/cbke-283k1-library.a index 81eb6c646ef..28878f118c9 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg21-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg21-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ddc537a9ffaeb9ab765ff86d29601cbb260580e26752504a70ed83dd4c13418 +oid sha256:5e08f9eb93dca8a367d889f935c6b8343dcb4231ca66b5d89bf84569323f0eeb size 14952 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-283k1-library.a index 64025842e8b..c4b3eff0a0d 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d7d9a722d34a275387f937c7beea7b11390f83b16974678027399a1e4cd55cd +oid sha256:c180cd93774ddcef9b0eb5b10a59c464c8030d4a2c3361f6a1463bf4fff446b2 size 14748 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg22-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg22-rail/cbke-283k1-library.a index bbf79e146de..2c969f41eb5 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg22-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg22-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83712be3535cbd1b7d1296312409ba4fe16af530a0bb7a39d9faaf5833d86610 +oid sha256:a0db354852c1c7199b2095754fdac1beb96d8c6f395007f5335bf3ddc087625d size 14952 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-283k1-library.a index 94a23f88467..64b6ea57c22 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24ffc15604acdf7dc6c8b73c10671a5b0de09fa0895755345f6d8fbdfc3b4132 +oid sha256:232ecd5d109d2d25a1af564716b3b26415448467128adde55714b6a58c4c93e8 size 14748 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-dualrail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-dualrail/cbke-283k1-library.a index bbf79e146de..cfb898cd61c 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-dualrail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-dualrail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83712be3535cbd1b7d1296312409ba4fe16af530a0bb7a39d9faaf5833d86610 +oid sha256:5672366de037ee5b4eb1596ea2e25d88c5023af5192474f856e6078917dc764f size 14952 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-283k1-library.a index 69e712e56d5..1680473645b 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:069f144a102398aadb3d965fa46c047aef819acc86a34f4478dfcd96799163a9 +oid sha256:8a9a7f575b4a3185ce70fede13508ad58a9c79708a856f0133a3735962b5238e size 14748 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-rail/cbke-283k1-library.a index 9f1e4f311dd..b370984f6d3 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg24-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:759edae413cda149f261ff1f1e8d62ae8f2c15072823ee8853b797ed1a891c42 +oid sha256:9c00e19fb1d7c328693a4aba3d17f964255e1eb427f5da0ebd94cf61010c8387 size 14952 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-283k1-library.a index e0feb20c712..1e43160ba27 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1ad13170a268c732cde7f3ae4b42756c0ccfe79e137abaeef106f526072c496 +oid sha256:bdcf290331063cb95b76a71017e86ac214a05a8ddcf321cece1c6a3ee760f09b size 14748 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg27-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg27-rail/cbke-283k1-library.a index 5af0d631250..5e16c33d6c2 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg27-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-efr32mg27-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e5aee2b814357293e42d070a838ba28771bda98e58a30506ac838ab42242ace +oid sha256:df44c271a40f94b7b49d4876e0566aec6758348a50a21eec856e6257258e584d size 14952 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-283k1-library.a index edaec9f647c..f6cd1af470e 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fdef3de39e00e730ccc6ff9ebc6ad586d1a6857a01110ae5077f45ed8e87053b +oid sha256:12699fcd36c5dcdc9c8b10727ad4d0ab2b41a3c0f48ec679b6b01109d047d792 size 14716 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm12-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm12-rail/cbke-283k1-library.a index ea06f31df95..735e83c805a 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm12-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm12-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:906f6f2a72bc50e32d48d5d16ecf10ce99590159ee5a3940bb48501d1581a6e6 +oid sha256:e49a7b25243811fcb3350e255e219b6b80e8604c0f62dbfcb5ea361353d1cb52 size 14920 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-283k1-library.a index f0baa51ef76..2caea010246 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a9bc0c0b5ee341522c4e3e6411866df8611cee749902c15aadc73368197973c +oid sha256:52f513f4b3b7b6ffcadacae2be7c2e1aa70a1e7a0fed8d3e754563802172556c size 14716 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm13-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm13-rail/cbke-283k1-library.a index f08713e80a5..e219e9e4017 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm13-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm13-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33ae62a930c22e192dce4fc36162150b49510158e69db28f1c61aa9cf30c3ef3 +oid sha256:aff1e4ebb1763473e1f0c08283d06afab848142d24395311083d783702ccca6e size 14920 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-283k1-library.a index 270f0302b50..9be713cad88 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a747f64e25352bb75e71b914bc41ee5a7cd60c23dbeef996c17fc8079b42549c +oid sha256:dbd457e7a3bd0383c144ca0374be5123e79e948800be56e6eb008a7dd7502e7f size 14748 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm21-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm21-rail/cbke-283k1-library.a index 0b5708aa4aa..0a48582176c 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm21-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm21-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf9e5eafe37bfd3d628732b8ee5a45d3acd41fe610824d2b77c394d520a06cf5 +oid sha256:db9380dc673e96824ad84b23b67721e62b96a1340e7f14c1af2645dbe6f9af09 size 14952 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-283k1-library.a index e5af2fbd7de..6eb2b2db35d 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5c96cf364f6962afc50bf794202d4da6c3fb8f54e0b41e3debc6af602b125f1 +oid sha256:cd6c748de519973f1fbca99ed65c05f5f0aa8c2469d1f4d03c1b018fcb128b6f size 14748 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm22-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm22-rail/cbke-283k1-library.a index 163180a1408..04d8db1b9dc 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm22-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm22-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52ea47c59f415d6206c072e1ecc4511c703db6e8fb7aa4091038cc9c1cda308d +oid sha256:95772e9ea472b60a85d1442e9f02a3496ec6ee4bc911e02a73d654ca1dc8fc00 size 14952 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-283k1-library.a index 0f0cda5f455..0cb50ec12e9 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0676f997060d73909af2a5a770bff431fe9dac5dc763bd2756edcef8ded33f6 +oid sha256:ae227855f2b3ba1ba8950c5743a7f9ea215145847e2b5b2e633ab404048ddf96 size 14748 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm24-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm24-rail/cbke-283k1-library.a index 8d654403f7c..d0da1c32077 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm24-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-gcc-mgm24-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19b7360b235e1d2f2b44758e01a1e4fd46d4e3d8acda6edf478cab14f0a6eadd +oid sha256:0fb4b6d4c5bbc8b90f739319097254493a8324c69021a716b4b7ec3018940527 size 14952 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index de8048ca0c0..86dddf7fc9a 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3b7548c634e6ed4ee264f44f9e396c56bb269496efd9b5b8f53dd31a4dc6bc1f -size 31348 +oid sha256:c79e2b7089a552a5b92acabd2cad2c3bd3538fd6fd5aa8952c61a3b41c965198 +size 31352 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-283k1-library.a index 2e73702e114..9eafe0656d9 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d9f33beda77c9b53879af308f4c50ec8731dbb94b314f9534bb3a28af887127 -size 30226 +oid sha256:83b8f4269652552a86046aa478af155e598b02f695067060526cb6917b902bc9 +size 30224 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-283k1-library.a index ed8752f6cee..39cfdee9d99 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba7832c44a6a869db2633b670a342dd24fd1ebf5289965843453e7836c6b144b +oid sha256:9e31022ca7b97bb1aba3e1724bf8badcde45e9b751d38f83554922d1fa62c477 size 31328 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail/cbke-283k1-library.a index b9c4b6af807..90466901b8f 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b54b490fd143eecccb73877daeaff179fc19e38f86823c5eb3a60425d76f57bb +oid sha256:86c075e704de8195294c8217b246ebf761c909bb11539375244bafac27bdcbcb size 30206 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index b74b29c869b..6b0365c5b2e 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:672407b04ae56ce69b57cd6cf6026e3b5234d396f96009336fd95aeafe845b8e +oid sha256:30e84f67d51b106800283430c24d020dc00cb47a3115ed751f45788ec5791b99 size 30186 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-283k1-library.a index 7ffb8c7ef68..7b9448d69e7 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f43cb283fa4cbc3cbb2769c5a433764116a79a87c9f5650b058c3c4d69b1763 +oid sha256:29e6c7062be25a53ae33c0daf76316a285d65966f21d6d82e4754e403b96a17f size 29060 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-283k1-library.a index 71ce6dfe3ca..5bd680dd6af 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a2d7d8b2fac6f0370b147f0361501353ee7511d6b897639feb5dec49a70c143 +oid sha256:bfc4101b178b683f756d217d4fc740583f5bf88d663b87d358e71c26e5b91d0c size 30168 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb/cbke-283k1-library.a index e5562828428..1d838e3d88b 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg12p-railgb/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:abc5a7a8b9d1246a2fbaf5bf8c4d343a6af3f6687d361ae5e2721cb5e7737fa4 +oid sha256:6ea10450737e6acd80dd022f02e1c1e8b27d0b87dd833df48ed3675bca340042 size 29044 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index ab89bc09ecf..7badf48ecc7 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0db479bbdabe83211cf3d660872596038b76f988d321150f814ea72e3d0639c5 +oid sha256:dd1b46d45cb6d47d78ae9a740e3377c630ff7f8d3330541ca9ec512be7f4b78a size 31346 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-283k1-library.a index 10657f69411..714d7c26a8e 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17a278d6a1e1e6594421989b5b4a477649d52bef6c6da9691bab0f5f81bfae13 +oid sha256:b9f00e1a9b6ff05c9319e8979f81ebdda12b9b148007c6a65638a33a1175c8f3 size 30220 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-283k1-library.a index c98f4844716..cda865dcb3c 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a2667319bae3a237a068dc02d5f66139ccf2fdc1b82c6c60fa8cac3d5263c13 +oid sha256:20ecf6ac31dd877e0a503c623648ff1180a061adcb38fb4d25aca02660a98988 size 31324 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail/cbke-283k1-library.a index 2a0a63acc4e..219da65e28d 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg13p-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d345b7731b3b65bede0121e7d72f6c2c4e0ac8e2d61a21a8290e14c67d01407 +oid sha256:665338341904df606b2197af6d12d81d92a434136c7a6dea4acf22aefd1d734c size 30204 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index 679fe1c0c5d..da9e5303758 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2213c672e642988e2a4d7a3428d7efb0d1df21a902702e3e1be5433d885caf34 -size 31352 +oid sha256:0f704fc993f0d744db77dfd14a332bf7b3638c5dc5f02e8f76f9eace8f021dc6 +size 31340 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-283k1-library.a index ba73b575227..b6d1f92d5e1 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2360ff860c69c6c60ddc46f5f407d37f87dfe9392c6b5614ea3f78027d924614 -size 30230 +oid sha256:a7dc60637be3f445267d4e5ed0c271c2798d4d9d82fcb5acae7eb5c9195ef503 +size 30214 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-283k1-library.a index 721c206c2ad..755f0b77154 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6ecabcca4f8074d0e612adc3546dc7b392865e3760614bd50976c714b087eae -size 31330 +oid sha256:bae68c68af27f5654e747d835c545ce445bd8055121e6e63f07c263edeb4b889 +size 31318 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail/cbke-283k1-library.a index 776713f2dc0..7195f0da527 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg21-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b3d36bfe214f3a555d26508314e27b0203174b882d98854786581a9cd8b8563 -size 30210 +oid sha256:530eae2246eb446b69449ee7cecdca4a0daff9b8f745aed811b8cbba28696195 +size 30198 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index c388657ea99..c245a1cf623 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bfa32ee8c35260492276de69b63329ce262b2b116a1ad5c37f3c66538003d3f4 +oid sha256:f31c932c23d322ab88dadc238442204e71560e14563952239b26e29c4761ad73 size 31352 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-283k1-library.a index 4a9b8c6581f..6f7f8bd6f6b 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c8bc7f3135a0c522df5fe782b88bd3bb0efefa84ae3e7efa538b946a9d37589 +oid sha256:b0850279a1ea13897a6ebfa48aa6ffe227ca3c117c7a9d697f3ea0ef2f278f21 size 30226 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-283k1-library.a index d02c4ed48d2..a25dd6cb549 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c0d6225507c116830cc1d091319863193e83f4be3e03bf1cccdddb25c5fe003 +oid sha256:f73ab280ade66481e65ced1cb3049da6d8b7e17f62806254f3036769cb3ac177 size 31330 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail/cbke-283k1-library.a index 33dbce895ad..ec07775a7fb 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg22-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa4343c3441dc0a71503cb8029cbec4f529c67093f4e565ee6a8f5d655ee78f6 +oid sha256:aa06b1e51c7d6e312ff2b8b2eb70bf107df25f20a0f0bce6bb03cf9885849470 size 30210 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index 152c2326884..3c3695dd634 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cb18b8cc43b01451b18267e12519b6cf54a993b18ef66f6c795d9d808bbf9ee +oid sha256:2f87d8a3122ccf70c2e02e4bf06d4e34ae06da3fea38a9a8d8fc77586b938170 size 30206 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-283k1-library.a index 5359796bfc0..f2e2aaa8fbe 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff9688865cb6480d91d944b3c371f9e2c608817a0bb71d9333f9a9ebc9dad52f +oid sha256:0867284170926fa62d07589a3c504b9d377a3ce633349626f387cd698828b704 size 29082 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-283k1-library.a index ce4f2ad1c46..bfb997096eb 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b427506c6427d485f1e8854ab38c57951256a52a72d0b7c83248a245c70ab464 +oid sha256:00eea42c9f7d65951d4942c319c2a2033eedc3f34560f18fc0ce2c14c47f1ff0 size 30186 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail/cbke-283k1-library.a index 354b879b5df..150f0346905 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-dualrail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:522d305c322e125f4a35c5521322bee0cbba066bc3fc1eb5b84dfb756ddbfa7f +oid sha256:60157943aecc22f96591dfbfc8a68e77a9d0192f9040050c9b641f8e6e479af7 size 29064 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index bc77a28bf7d..bd9ed0efa4e 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:211fbbdc6783c63bbd1a91af875a1129e38d96d4b2672484951a0794d242a201 +oid sha256:6db719e34c128d5add7b04dff0598ce69fad4d1a6646ba243471bc9187b49a65 size 31354 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-283k1-library.a index 3b5b98b12b9..6a13e0c8144 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e361678df58214534ce487493efa1d92890e183b4ce9a117536a7e99bac0c74 +oid sha256:0efa349d042b4843e7085a22c66c24c70c11a981d37fcdf34a3544ee276d949c size 30230 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-283k1-library.a index e430f541b3e..f841fd20bef 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e880c42a4b3b2a1a071f5ceddefbfea384e77aa6e19c620096510d8c7c6f0f9 +oid sha256:b41b39198025d1dd7e45661f13fc7e54cadbd0121cd7c1c8595c2309df9b7299 size 31334 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail/cbke-283k1-library.a index e7657d5a8ea..837f37d9b7e 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg24-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ffa514e73a6edc30b2c1c6d6f26f52f7508fdb5c2900dd81574ef3ce67239960 +oid sha256:e4986bbf4a32ddfbe0c955052823f560fffc2f574df338f378723842fbdaa0bc size 30212 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index 0563b7a5185..a2941d9d7ba 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a0575499642809dc935edbfe3ecb706805ce177fdf117639f0834e63523bb3e +oid sha256:9e8f1e1d757fc75baf7ce9496ada832b232d21a26b83b723d3ed238bcd44b6af size 31352 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-283k1-library.a index 4926061e52d..b724c61eba7 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf5afe2f74dc575608a68eed3e291d379ef2f9894c0145b245c765ee885edcd5 +oid sha256:96e47af081bb1f05e6b4382ec816d6a563be6eb4033e01d029b371cddc39ccb9 size 30226 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-283k1-library.a index 2562e0a0e51..b3dcf95e7a2 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a898a9be2b4505b72c18e9a52c2c88ca7c60f254a1dc63537766af7f0b95d32 +oid sha256:eb517fa1433697aa737febb7be3d934ff342eb17e119f7162b60d5f395bc43fc size 31330 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail/cbke-283k1-library.a index 7c04d1a5cee..cbe6c425274 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-efr32mg27-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ff1e0fd68712ea736446565601bce2138918ac808347911978cb88602f88792 +oid sha256:b34727b8b2e0296e43fc29ecbb635b6cbdaa165e57f8c000f7a76f7168e8bebe size 30210 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index a67a42d8437..247e3128649 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d95085f8d979cc4cb02102f1e9a97c9e82d1be933ce339fb59732a86bc0c969d +oid sha256:5f9d1b17092e3656f00ff241d0716aed0c689cf26c2610e55bd92ad3d3256a8c size 31238 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-283k1-library.a index 69c96e9d97f..6ccded135ea 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec74fda5ade18c4c9cb6b20c15c72bddbfe2d7ea24a53374a35513a1622220aa +oid sha256:3810bc67e1527021c834aa17a2fcb8b6ea2aa1c475d6fe8cf9d6cb90f5be8d54 size 30112 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-stack_protection/cbke-283k1-library.a index e8dbbb0c6ad..fecc3709a48 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:895c7aba70219fe5ff26db8d875b34b45b614041c99ea43e22ed5cf6d905f6ff +oid sha256:504a486470f3dfb19def1419d170a898ce07b35cfa5b93e239d051e9e774fa77 size 31216 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail/cbke-283k1-library.a index fc98a81c680..5fe50023657 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm12-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb1d03a1418282197b05f19998e41a3b43dfafb265a31b88be3fba00d7fe834a +oid sha256:e18040f5e739080f84f0d847337c5558a8a967d471c0d0b04ad585ba8a5c09e6 size 30096 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index 8fde1dc3cb7..98617a8a3f3 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15a2d38b9f142fc7b873bf8a3e7e9b4d820642408ce50eb7b7c77cf2c489cc7d +oid sha256:c5ea6857f7a95ef5c215203882a69ee8b5a9ca9cbe4c3896d8d89022d1cd4dd0 size 31234 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-283k1-library.a index 65a78efe586..101c04b2f63 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3fd7c02164351e32737d691dc71d2b34382667e3f2d3bf42f148d44d45d0be53 +oid sha256:50674d3b923ace5b41430bc79cc8d1b0e44e76db6c11796b3da58a7938052326 size 30110 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-stack_protection/cbke-283k1-library.a index 8fac2885662..47dad241ed6 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf4a8591bab9710f153a1cf5bf6099265cac165101f7d3fbbe6717a35fca64aa +oid sha256:4467f3a2c3c149194e5c2a4d431b0c38f85a9925fad0b9b9e5197abbc036ce40 size 31214 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail/cbke-283k1-library.a index 4bf6871b3bf..12057b3b695 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm13-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6244e8e534ab0a16bf75d725bb901e814fd8bda4311a322870ea395618210044 +oid sha256:abd7e553a27489df8ed996a5c0bd3f35e071ac9fd8e9991ccbd8298b2e24312c size 30092 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index 96643ef84cd..b20aeb9cbf2 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d3453c269845e871d33babc949306e2fc43168dce065fe6aa5c331446cf01e3 +oid sha256:9877d3670ebb856a9817cc3f88d0bd16117451ffc64a51d808e22a1811a17f62 size 31256 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-283k1-library.a index 1770eff1b8d..cd4e134fe1e 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ebc662170e3e7be7a00d8152fd36a8eba1552ce8e48a3b6453b5419cf19b821 +oid sha256:72df1dde44d195e3106765790b149dd48d270b25ba8eac5019475f46d31af423 size 30130 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-stack_protection/cbke-283k1-library.a index 5bd004e5683..d6196f2426f 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:40bd9895cf75a08c767305d1f25a847d53609792ad26e707dbabc6fb4eba9871 +oid sha256:690510fee0d176fdbb5e9bd2bab99a5406a81325e75b33b92a2f0af6c4055cb8 size 31234 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail/cbke-283k1-library.a index 8f951b1651b..ac04d957269 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm21-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f1d6828f041b51e549ed81774664024362a6f487923ac20c8b5aae996249d2f +oid sha256:f07a2ac1cc0af3bb9dee618fb031be7f1ca3ac8a6aeb4b104de5d8e29e81c386 size 30114 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index 88c005a3380..24a12d18ecb 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:69dd0031e996a4345a72111fca4949144a7c6598acba86f1857895879f812ba0 +oid sha256:386e737f23c2e9ae648fa867e8dae9af1ec0253bf49a552cbf90d5a0d1364722 size 31256 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-283k1-library.a index 92841bb3285..47c3d4cc965 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51f87f85758e11fb286a77528e6a9e6bb36a7702efe92656a857ab59e97149c3 +oid sha256:46adccd4e506b9bc57d7ed54affcb9f42c350417e00d98093a618670e525f463 size 30130 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-stack_protection/cbke-283k1-library.a index e86fc51f455..7634aa0c64d 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbeb408c6c2ee157199c7bdde73e4435f7fce87147e4f819cdc07b0d24dbf919 +oid sha256:c946a8cc330cda9d8a638e341ae0a854ab7d06f7f4789434963aca2781a35688 size 31234 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail/cbke-283k1-library.a index fdb5a6c321c..8c9cc4973fb 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm22-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1708e8fe333bee6be42e48433fb457175671705355b5c4b6a5d0d684fc03608b +oid sha256:a8f865fe448c42bfbd627a09f04f70f4cc500361191d95a90e6081757c11af30 size 30114 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a index 191e8474029..8298ebc983e 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4f1bcad708ea7ba30da6d82d0537c689652dbe1860c5eb08e9c66ed7ecefce2 +oid sha256:4602b201b93d23c297fd678c772f9c7d43cf2b7d421bbaff51d6c081bbf8775b size 31256 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-283k1-library.a index 1676f7fe3e7..efe547a1718 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f0685019b6c944eb95897c5462800d195d6532e50defede96a73d15f77b5fe6 +oid sha256:c979369224a7716e1824a96f072e08d54409d978c9b8e499164e69c8e08c54d1 size 30130 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-stack_protection/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-stack_protection/cbke-283k1-library.a index 4027d352f26..29cbf562caf 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-stack_protection/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail-stack_protection/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b05e49ea5ee82fe0c2e8a82558694e14bd86086793e5afe065573036721e04f3 +oid sha256:a57f9280dbbbe79102dc1c0ea0891b9c643bacbcd053d5be5b0540ec1989079f size 31234 diff --git a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail/cbke-283k1-library.a b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail/cbke-283k1-library.a index a8dafe47403..cb30a8fd22d 100644 --- a/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail/cbke-283k1-library.a +++ b/protocol/zigbee/build/cbke-283k1-library-cortexm3-iar-mgm24-rail/cbke-283k1-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ec7015386b7ca908bbe9ab479488d8e5d1a2de2d7896b5021271e8e130fdf5e +oid sha256:8ec0224c355d6eec6c81b6db870099f9fad5a413dd10a669b3f0ae69150e4fc0 size 30114 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-core.a index f1c7d8870f6..abc541cfba6 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df0183572c0f3532b93866507ad9d3eb27ee31a3b2c29ac027c54bb32af93e8f +oid sha256:d1257a8c82825306ff9fb116206eb5a494c0470a7f788774bbfb1ec7fc425598 size 6734 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-rail/cbke-library-core.a index 3985a76b5a6..06709399d79 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8820a69d13b2f68eebac2c1d4436a6370ab9dd8732ca4b458c19c5927a9d83d +oid sha256:ea75916c44eb5fb75e090e181f0ccb70ebbfaca4420fb68c19ebaedb8fe9fe19 size 6794 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-core.a index 71d43bcd885..ed155a61742 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a111118bd49f714a124a4838d839681dc61f55af33f1ba440a10e95a3918988 +oid sha256:f282948a7d2d0790e3e2b9fef2a3fa8b578347e46b61f1925e9bf2490e5d99d2 size 6734 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-railgb/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-railgb/cbke-library-core.a index bd93d3fba0d..cda6a1f535d 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-railgb/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg12p-railgb/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f032af8de53bd58235c107fb26a1cbed611b89706956d8162d9da6963d48d344 +oid sha256:7de83048ef9ae58a6bc2a52f71bc48c8036eef90246acc1f1976b3f49d460283 size 6794 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-core.a index cd7c20dcc83..84773a80f60 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70c9caff7e0f15e9bedd5e53041ea06590deb4dcbab3a75929e05e66a2f1dcaf +oid sha256:316d110dd58d46f503ef042df08d4be5e3f4a19789b298ea4cff357f2b4cdab4 size 6734 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg13p-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg13p-rail/cbke-library-core.a index 4a18ce9f045..b9e41693829 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg13p-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg13p-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d14770d3794fac54bcacbf5effcc256758ad5e204dec24754532375bbb0fd77 +oid sha256:213369cbc77e417eb756c0f5087a9c7a7c1d9aaf37f7e4b3dc7c40ca4cf297f0 size 6794 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-core.a index 322046f3466..d6744a0e9a7 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27574201ef4ac7a8966fc2faf48a38efbb23ebe174d8d00f8283232acfec280b +oid sha256:920ded18095428367b4eecce17bf160543bac3f4e9f6be4b72098fa08bb192fd size 6742 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg21-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg21-rail/cbke-library-core.a index aab8e70c7b1..4c7aaaa4f7b 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg21-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg21-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c639257fd2dbc076b9a3c0b2885e151568a81f3f45499d5aea941e611589761 +oid sha256:62b5f8976d61d39cd984ce50b83f2001eb1d3bec93aa04fd863867128d29fc4b size 6802 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-core.a index 322046f3466..98cc5022520 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27574201ef4ac7a8966fc2faf48a38efbb23ebe174d8d00f8283232acfec280b +oid sha256:31413e7e126acb389a80d2be495e1e3e7a47ca1977d102f84144ecfd976702eb size 6742 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg22-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg22-rail/cbke-library-core.a index 373e6432008..deeb6b2c861 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg22-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg22-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f794b70f61d4bf54f88e0c6a30b7d6b94a4d13597a0547c37c0d38b32ab2d186 +oid sha256:35b6c3a2d53b5c38f71ba119c49f80d021896266f78b08777053e584b1f5d188 size 6802 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-core.a index a3785e9ae63..d6744a0e9a7 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7fbe77fbdab6ad6291946013af4150b0f86c54216ab0fa7363b37aba171b9935 +oid sha256:920ded18095428367b4eecce17bf160543bac3f4e9f6be4b72098fa08bb192fd size 6742 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-dualrail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-dualrail/cbke-library-core.a index 499dbada643..4c7aaaa4f7b 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-dualrail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-dualrail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02d073a48bbbff49c6298e4294e0b599ac127c4b4e3bd2ba4cb4a3667a08ae7c +oid sha256:62b5f8976d61d39cd984ce50b83f2001eb1d3bec93aa04fd863867128d29fc4b size 6802 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-core.a index 8827c237596..20e497340dc 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e27dc3440b498bcaf7aeb85cf09ff1e89986fa0d5981909c62d2fd04021d298f +oid sha256:b2c20455ec9b4401a2ab5c092af19e5c9ac6bce8c15822e2caceafe3cfd9c9fc size 6742 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-rail/cbke-library-core.a index 6d6baf67e93..7bd5f69616e 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg24-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e5725c0b4242c003bb57a3b28090589db7c625a829aae1ba23acc095509de11 +oid sha256:e6e491eafb29dac00270b052fef0975dde471b03a0be0f256edd4d2e1d1d0de1 size 6802 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-core.a index 03659656e59..bf01feb01ca 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:598ec09e62c95a1c16aed2d827317b5a302a87793410d031afdd392d1143e4e2 +oid sha256:e44d930657dd36234b20c872029e28524ee9b693c474f01170b08c95c20aff07 size 6742 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg27-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg27-rail/cbke-library-core.a index 499dbada643..25e81070fe0 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg27-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-efr32mg27-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02d073a48bbbff49c6298e4294e0b599ac127c4b4e3bd2ba4cb4a3667a08ae7c +oid sha256:248fd14041995823d31fbbc8f3d4321d3093ad68144f73aab3b3690a3eb9a874 size 6802 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-core.a index cd7c20dcc83..52ef1d75466 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70c9caff7e0f15e9bedd5e53041ea06590deb4dcbab3a75929e05e66a2f1dcaf +oid sha256:049a97f7930b29828d5ed1c09f475be022197596568d7a0db1bb3ea1909e1878 size 6734 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm12-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm12-rail/cbke-library-core.a index 24f8902d961..df4c261c582 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm12-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm12-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91d44e911f794977c2f9627919dc63ae101d66b72d14f3db951599cc8f7ba4b4 +oid sha256:ca12be37dec9240cc3d7f1d396ec099a7412dd6006674a60662265793aad9584 size 6794 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-core.a index 9d249292237..172a4d49dd4 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ca7b5a525f66dd603bcd4f1c9ba4297552db1a3ebea26817c3f660677253d46 +oid sha256:1af90811bbf689bdc210ffdc130f8cd8c8a565cc4d52db38a247170797aaa2b9 size 6734 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm13-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm13-rail/cbke-library-core.a index e6cdd4f6642..fd76447a44d 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm13-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm13-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:edda41afb8cea1eb01135bbde106536207a6b5d2d05acf735231410efe834c1f +oid sha256:a18162784a09b902d98d62610f8570d753e3f48168230eafa83d0e6c4fce2c54 size 6794 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-core.a index a3785e9ae63..ba9c19dfee9 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7fbe77fbdab6ad6291946013af4150b0f86c54216ab0fa7363b37aba171b9935 +oid sha256:36c8fe4f948f0a4546e64514e11fc7c38d38155188a8bcd17fa6ddb3d3a8d073 size 6742 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm21-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm21-rail/cbke-library-core.a index faad10af5ae..722d43ad5e6 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm21-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm21-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc72b5fc2794a3b4bdd0cb8b633d9dabaf14ca91cf39f6972987a113150c2e05 +oid sha256:e950e69df2d25f99f12940ad10b3826084ded11cd9a394728b94448407841557 size 6802 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-core.a index e926042930c..ba9c19dfee9 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2a91f4891075288e9e2a7959fb5cba576521daccec1e8ea0e3e84deb6c293c3 +oid sha256:36c8fe4f948f0a4546e64514e11fc7c38d38155188a8bcd17fa6ddb3d3a8d073 size 6742 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm22-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm22-rail/cbke-library-core.a index faad10af5ae..9b8d3d5fbba 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm22-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm22-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc72b5fc2794a3b4bdd0cb8b633d9dabaf14ca91cf39f6972987a113150c2e05 +oid sha256:51933a3e753d2e04cfeb0454594ba9c2d51b6c711b88920945913146023bf335 size 6802 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-core.a index 37bcff07ef1..08dc391ea23 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f79c989f5edd4b443a622fe52c0b6dbff973d0e99ac502c924bfee0ad98d8926 +oid sha256:807446ce68192c1c53d12d7a66b40cbe5a9a95c9c93348f506a52f74dc5d8327 size 6742 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm24-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm24-rail/cbke-library-core.a index 6d2f1e27eae..240799b7e15 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm24-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-gcc-mgm24-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc7cd5d249c9830464636766b3f43da75ad970eb883f7a351a04d14490eae454 +oid sha256:6701092eb176bd3069dbf4a84a26f63a39a0b4e6496fc7933e994c6fd33ee725 size 6802 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index aa6e0d1b761..e99c6f9e9b7 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:351c1d5cedbea37b9ec098ff6317b0d62be71985eab4c55215359662c651e7ae +oid sha256:22c055bf88c69711bbaeb4812848c3e817efc4a2b716ee72b92b162cb6935fa4 size 12982 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-core.a index f3b92eb0f5e..d54a204c5c5 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:94ba607b58a5d889bbdea7f61dafa97e90dbe082a8577f2ba50264af3f59cbb6 +oid sha256:30494c400ba9b55c971d0942ed9f4abfea1dbde37c0b7cf5a39f3e6addd60e85 size 12552 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-core.a index 1393ea2f529..d5cbb20aa6a 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f76576abbfddb12e6fcf4ce1726a139c5d703827e8427ed85a48704e2973374e +oid sha256:fa956c6c629f5e863c0dde4e496efe136bf95acc49febda83b58b5b50428a06c size 12936 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail/cbke-library-core.a index 843ce3580e0..124964d4841 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:924a91262eea76dc0c5b70fff439f3a999c675daf7f32fb9bd295846f92e3624 +oid sha256:0267fb771567efb5f3ec7682a42db3acf8ca20af3e197fd799cd9576e6ee5497 size 12506 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-core.a index 48052cafd46..82d5bd32b23 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8880e8fc11669674ba4e5b82ddceb6564209f8fdf763a3427f48075b872bf1ca +oid sha256:60a051b304633575957a0fcd1a215a336c46331e50feb7a304282dcfe601f966 size 12596 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-core.a index 19d543b07d2..61fd20b0ae1 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42adbf05cf581f51e162a503ff663b7bdc463f1d9b19cd794400e7765e969ae2 +oid sha256:3046b5110f397f1123ad3ac891c769095dab5c9c64e712bfa4d88e3b4584f76d size 12166 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-core.a index 3ee5c047091..96a89f5d1c8 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:faca856615652fadd9e71d3204699499882347a960d8434ec85f7ce8856557bb +oid sha256:49dbbac96797a76b9c7ada7d6b6ac8c964f0bf02bcc920b1123f4313152a4460 size 12550 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb/cbke-library-core.a index d22cd7423a8..f83d57aa8f1 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg12p-railgb/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02dc25bb98010f714b2e25f1af72ab5ba16ceeb35ea019e1b1d099de05737796 +oid sha256:585efd6949bada827e85cc7c1be7ce93bee4c486389bb4d4e982f9e23e71c255 size 12120 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index 9fc6cc540f0..912a263056a 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20994995a15614142e163236038be31da1a6eb77d99eeeac297012e7e6dc72a3 +oid sha256:0c035bf855d624fd0d8e8996918624fe7ae56915a69050de6fd006d92e776784 size 12982 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-core.a index 37e1bd3c699..13ebde73815 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e8a10becb3ca893026c0ebe59056f5b4c9ec353b621a2d3fb4d968aab3005fa +oid sha256:cccecbe00c974e908b11a2e8844727105302570b30d288b7891e668bfe122a6b size 12552 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-core.a index 29a589be541..145736ce92d 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fbf8d99b416631a8783f2db901de0e4083b77984950ac15cbbc8612f9ea0411c +oid sha256:492134d904f1fb751224cb2b71ce10d1d95f5a54648c463be72f65ecdb4cec53 size 12936 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail/cbke-library-core.a index 6be3825e31f..df1be94882d 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg13p-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1981e89bb04a6dbe689abfe6adbc40900f0e9acb243867d27400a0f11df67af0 +oid sha256:55531964224483d0c3bd8f11839ded45068394aa21f852e610a5f509a94c64f8 size 12506 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index 4cabdebc8d5..afbdbde3d5e 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc05f5c4cbf847d0b9ace746b42ce8d01e0910e628738c1dba6490e29eafcff1 -size 12984 +oid sha256:b2c3db57db6670691d1ed8ea6562a030a8342783b8fca011d405dc6ea7839578 +size 12980 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-core.a index 91ef58111d0..c661326548e 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09b6d66e7d5f8181930096a89802f73addace060a9aa5b458876582469d9e0fa -size 12554 +oid sha256:ff4a283958b871edfeeb6475bfa0bac1463f39c41de6dad33931691e10df5565 +size 12550 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-core.a index 080dfa5d27c..a45759864f6 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d935ad1fc7b36acb6e60951ba7af8da1ff0c076c92ac4b9efdeab36db3061c0 -size 12938 +oid sha256:3a1eb2a01048ef4484000731a7afe0c40c1bf69009d63098d827cd9e6807fc6c +size 12934 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail/cbke-library-core.a index 20c976b4055..683a5c265dc 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg21-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59db39a31fafa5eedf348583a6e55edae1802de6cb549d9264c02885bada3951 -size 12508 +oid sha256:c26256fd6e61230f981e270d1329c2ad79067239e2844f22c20f66388982025f +size 12504 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index d3ba851b0b5..fe1e0f271e4 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47dc953f94db8cee98b56267b34b1094898cc12cba8baaaddbf0c26573d68d1b +oid sha256:bf0b144b804177211b80baa21590761f81e3ef680d735907130595c4f36b584a size 12984 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-core.a index 6396c8035ae..8e3acab51c1 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3332866f49cbe4cedfacfeb3f42d4335150f72557ef9ebe9fb6b3460c2e43803 +oid sha256:3139c55c30a687f182d7b3a270ce18314872c8634b48224dcb0708933f85dba8 size 12554 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-core.a index c030a14cf4e..0affd5df5d5 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:abafed1670a21a4c2b05c29104c776504df6ea19460bdb7a00281406048c12e5 +oid sha256:c02deb73da921acca9fadda48badd28531040f18e0cdb451bc243a229f3935e3 size 12938 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail/cbke-library-core.a index 1c341ddd558..f55d5c1f487 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg22-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1428e675e31b7cb06fe2de4e414274435f3b232d8c4bf7838a92f21b2879e8e6 +oid sha256:3969ec6a30cc3c5d6313c170ae66d4aa474479775c850c4f562eef66ccb70fee size 12508 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index 32230a431ba..1f718458089 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4aad38b1b56d75e2084a1bfc73ceece36f282b8df0aa74bcf92e94ceabb08977 +oid sha256:b1551afe34d8fe9159322cc8af03adf28bd3c9e8bf7d29222550a7ad0005417f size 12602 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-core.a index f0856abd302..1ec0a58ada9 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5420fffb0848e3b217eb07b3073a5ccb14baa3d3ec1d397239fdd222841820b +oid sha256:6510034f1822cb63e8e0cf9d84f723f1ea92498f90fe87e6c9dd985b87c1a8ca size 12172 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-core.a index aae998a74e6..78881145017 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:012b8d44b599634df56d06f98bd763a0a196a14671a2da81fa3eee7306c39cd7 +oid sha256:4fe16a62333f45bfaaf5051a39355df242901a072bb95fc4a100c2d51ef80373 size 12556 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail/cbke-library-core.a index 1a91ff6ae91..b2bfd9ee4ea 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-dualrail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e35751120716322c3ca93e58b385e1cc12d73b81fd1676cf40a781ed97b3c832 +oid sha256:f1937e2f18bdab20ac9f53b3acb37894cb7084a2c2a858b9fed94871327255f9 size 12126 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index 1d199b4159c..7a7f0c14ba4 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9fce803480307a0c7807937af7f1c69e9b5e2c40059b6b0eeef7e954b14cf5b1 +oid sha256:c1a3a894d04f0fecd34dd5e5432923a2290c492c0a33fc23ab72e14b9ebbe7d1 size 12984 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-core.a index e4229a5cc9e..2a99ff4e610 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8b24efdb8abd108bf204c3dd0665d818a5991c68050a6ea76d83c7fbc0be2ef +oid sha256:9a83fdac36531c4256191899ce7291d169c09134f0d8159fb45a43b8db996978 size 12554 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-core.a index ceb6cc5c1c3..f6372216157 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41a49cf5d9c711982efb7de9a085e6e09803b8042ffa61a6d3f7439d7f7a8785 +oid sha256:6a857ce432ac5f3ceb8c319b43b0d08cb5efd389c38e82d6f865e4b54f255167 size 12938 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail/cbke-library-core.a index 0d76c3d9173..c3bf6b41c7c 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg24-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f3c168b818654cc97a30280a1e7a303a1fb68654416932f481607c7ec8a614e +oid sha256:e6ea24701577abf17d3ed93c71cca0f850b47cc9d73f164bd2e39041238c087a size 12508 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index 5cadbd4b8e9..97ea9733065 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbe03f48be7545003900e218c4d17d35354fc519efe75f39a594134f93eef82c +oid sha256:7d1665b4a7c7035b79aef096a81d6784f8133e796f86849cba7d2eee7e0065c0 size 12984 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-core.a index 6fbbd9348c8..518db3f159a 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b1043c28f94c2bfc4c06308f371ad22698feebd8bbc7fb931bd60fb02adf8f5 +oid sha256:0b2d3cf33d131e621c142be3a6a8995e14fb274897fe9764e3210b61ea072db2 size 12554 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-core.a index e07123ef2d4..678edd06479 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7efcfd62d81b60721c66e45a33d34b10d53ee6bce52973d91acc893782767a7b +oid sha256:4a25dec988561ff624725b375a9111f85aa96ada71fbfd5b6dccb37c2ec47957 size 12938 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail/cbke-library-core.a index 8831b13f5a4..d1462aecade 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-efr32mg27-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:145d8079d5c86efa4e497ed717ce225cabb54c0cd4adb6360441b7bf0f973cb7 +oid sha256:4365180882aa5355600ac033c4d324b99157d98f03c9f74751c440fda348fade size 12508 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index 33a8bac52b9..161436adc55 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6744faebd363179dfcf9992d99a200f035eeee3ceceb2382208454507c0f37b +oid sha256:8628cbe2230fc7964877719cce4bfbde64096cd30dd85f0fbd7f2b6d43057ec6 size 12946 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-core.a index 1c17540ab5e..9a2794aaf0a 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cbbada348bf54281097cd3edac2626c1606e2ded9f3d9a9eb2f68c47f0c7298d +oid sha256:4780d7fbbc6cc49e14322a27b59dbae025ec1a786accd27a1de3d2e084a701a2 size 12516 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-core.a index d1d120600b1..ead5726f80e 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:329fcf092cce0c9357fadcd2c35d2056dbb17c42c8fdf6ffc284437b36d17440 +oid sha256:40ca36133ca396ec68518df90fe1fd5897d6bc047a67ce5dcd4d5bb5e2678914 size 12900 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail/cbke-library-core.a index e0a74309082..85e0302bb53 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm12-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:457dbbe1cd682c4c9c0a1892ef686ec41f40a291d2d1d8d39b75b2e4cc1bce68 +oid sha256:b3e9a58039d5b11b0f819dec2272d80abfd556cef247a53110d322124117738c size 12470 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index f9e2791dcf7..66e44dd66c0 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f7873a12e2f2708f8683d73a84e8b5f4123a58527a8f28e6e3603e7e8354b5a +oid sha256:1a67c5f8bf49fba4c313bf61a073314115a570ca5742ad09c5709cb454dc9718 size 12944 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-core.a index 6b3c50021bf..41b93c72981 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45701eff1aefab711d14db1e829ccca82e0d30f2505e61a08604ab2e782557a0 +oid sha256:7ae5823d0c3a9cec48218e483d80d994837fa2bed78c6bb0533e82c58ada48d0 size 12514 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-core.a index 77f885b9c52..b883f30be63 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ddf3b6443e4666f9f9396f929890c00d5164a13d2faa72320c2b792c1857636 +oid sha256:31c507c737650f377fbe722083f89fefb7953ff459e91a96cb16dfc1e2d224ae size 12898 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail/cbke-library-core.a index d9100b400fa..a6e2eaf8a52 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm13-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7a24a1dbda39d9685859baeaaa3238794e937f0fc89ec8876494af9f4cc893a +oid sha256:f6086545d7fc1779c96ce621f8396a6bdb42a742e19446bfc8fe67adacf7a7f3 size 12468 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index ecfba47d1aa..e47052ebc8e 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64c04c1eaf053b2cf2e8475e23c04574e1c6a8d637ea44976c03c7748cf6d41e +oid sha256:ccff63605ac1507cd843e78c5aa5ad50b118fbb32ccb366e883b1375a698c34a size 12952 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-core.a index 0f910c4dcc5..c1f04d2dc9d 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c74204c1247112ea37ba2a2628e131953a5e4ac90caf38ce924487d87c6c59f +oid sha256:0912be37c00979b42fa135f80a4b928888ff7e904dab0710b8eed5c5c52f036d size 12522 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-core.a index 817fee13d98..2fd201d240b 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be4bc3468e5bbad01783de177bc3c27344b5d8a58bae9cf7093b3ac087ed31f3 +oid sha256:744fbcdc59e21a8f1b1b500dcb537b6c2f4fdb206fb8b87012b47d03eca34b91 size 12906 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail/cbke-library-core.a index ade5e84a7c1..f8fde6488cc 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm21-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b572d0b012c7446e7871798834de1b90bf373bf6217af296cbb2aa5dd1f54c0b +oid sha256:f09c4c084526434f0efc8bcf59b2858870db4bd106bdae862c7374197fb041ff size 12476 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index 71934de9155..3af78e1aa7b 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d1deda2accaf5686d559ed8619f2cbaf0cd590fa7f7bd480a8cb1f661071dfb5 +oid sha256:1ad9dd4165b50349ab4cfbb8db07b5b4db330bd7d6041d0832376c3926c481eb size 12952 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-core.a index 597bfdb5fbd..8e9f0262342 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dffbbedc71f1d5fe39ca2e56dc49dfef193b2866a089d872cf3f5e80019cd8bc +oid sha256:a79d8e6b8bde072570a194e8b1529ddb9f1f30988d26eb0b00ea358029cffcbe size 12522 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-core.a index 4f750c7f0ac..99912d1dcfe 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a227948d9a0e66329bf1de46a964a61f8113810d5e7a1a8c0fec66c7e3fa97d +oid sha256:537bf3dc37a68e2efa6a196473c405aaad506cc3075bc7a923b2aaefffb1ebd9 size 12906 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail/cbke-library-core.a index 23b8643f773..305285beb69 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm22-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:978ae17d4b8bd90e7b15cafde070465503b27c58a061fe7941f1f5feaaf500bb +oid sha256:d6f650de63cba77e3a32b00354c587d8b883eb2fabdf2ce97074a0b25bfcd230 size 12476 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a index 432ecfad634..64c71db77d0 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1fcf4f07f504d93a56ac8bf95f86e434beb3f24cb13fd7b69b6a0c471ba1a991 +oid sha256:8f1ec24bb7d783572b6851d632cc129097f19173ea0b041fae7818ffd9b4a007 size 12952 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-core.a index 9a1996d90f3..b12881b4c2f 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f147bd8cb5d0b9661be319fcddbd4bf9d45cdc7e4ad08181069d9185938b4ce1 +oid sha256:53dacb04d5c63543677f79146baff3bc946e68f1349d71a19695e7a47f237fa7 size 12522 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-core.a index bc32d6a7061..afec731745a 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be2bf7f4f7696735accaba3032224ce3491f59e9beaa02bbb7560d8af623fb45 +oid sha256:7414e6cd58e6c647129c2d9f542c0c25563c21232b1d1ef1f0650af91f2fc474 size 12906 diff --git a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail/cbke-library-core.a b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail/cbke-library-core.a index dbfdfd3926d..ee4e1d0ab03 100644 --- a/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail/cbke-library-core.a +++ b/protocol/zigbee/build/cbke-library-core-cortexm3-iar-mgm24-rail/cbke-library-core.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4886efd6eb54449345dc65bd7ea8f316225ad3383617b1a16f639163c295deb +oid sha256:8b738958e125e5d2dac55253aea7ebc46bfc18a2ce2c2f72889e11df3981b61d size 12476 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index e42453f0fe7..eb39e7cef79 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85a13c2081cdcd2d7f15ecc5ae6dc1b57aa3df0cd02e0c76d52a842851e18a87 +oid sha256:a1d9b80b8816354542836590646343ce79368845f92400523d6eb854df0d15fc size 3642 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-sign.a index 5a0ad8653fe..ea598e0621b 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:abc0d6b77ff4645b215e92e2823eac57b2b2611b091e16e82ad708df8326af0d +oid sha256:536f6b19e07cc8fecc9b3c963f290409b1e05b5ff7b5d3a05b568ef24e3ab2ad size 3778 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-sign.a index eb72c8af6ed..99ac5128923 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cef5990996a5c874784f69839d59fcb57dcf336c1cf73cdecd9b51005339c302 +oid sha256:b9a70d29f473e448d2b0b8e9a6a2d26545282879a834a49ee362d3cbfb969c86 size 3642 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-sign.a index 0a95c9057c2..1aab9dc35df 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1f4743d8b92f2fb69f6814ce4c5fd400a84aa6b066930ea3a9971a2b3bcaf94 +oid sha256:f9b81f3359e2e4052660809da357252488336d1e6c2f57162d8adca0ca7a905e size 3778 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index 23aa2b8eec3..bbe30c8a9d0 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e84b1291756eeecae9ff0c20eaac0a48f6a61ca448d7c188263f245332d73697 +oid sha256:0df2cf82177ad9693d5e8c952c05e585475923337c72b42170e811af6d1f986b size 3642 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-sign.a index 64c80817bb7..d5af02f7707 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79520e04854589f5e46def3e3d96414ed4bbb4b10b10897378843dc5f7221329 +oid sha256:13d0b2e8511eb76d3c87f9d538b91f79533740c2dc561a05b39ff76241c50a7e size 3778 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index 0bd0deb4705..f25630e4fe0 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9fa1dc09a44e423fd6454f0fc859ed1f6d338107ca9529232fa4520cd401fceb +oid sha256:79dd2db02c5b3c7e6b76e3f8b4fff702dea9b6e2b2cc07cc6a4065eb9398c42f size 3646 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-sign.a index bde808db67f..b87a11a2b4b 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3bc5ccc0e2dffcea70614994988d01aa863f07a0da70736c8e66dcab80c74f1 +oid sha256:dd09e2004da12ad1b97286580c8a784524412ce514ee7e8b902e39736b60310e size 3782 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index fe5ec2ce626..9e2be18a59f 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02eae9180fb0bdd8ba8397bd04da9efa6421f94704fdac43055498c3de3724c8 +oid sha256:d992cc9a4ed4bde638ba73aa30d84f19097c15bcfd7199da42a9193a5b8662d9 size 3646 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-sign.a index f650eb4ffa0..3b5e3670775 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:582c19523735b766bddff651ccca6bfe63e9896eac7e760b93c8fa1153984bca +oid sha256:98e703b06df7a4b9fc6385b3cae01be038fa044570b0dfb21084c71b005bed60 size 3782 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-sign.a index a98889e992e..191ae8f25be 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5439e8ce92d88bed45938589dd68c5c216bd0076e9f4dfc1ba1050f33c5b531 +oid sha256:28b0053f73765ea36db8d05ea0eea4da78a309fdbc7ad278b8f4e832ee1c0849 size 3646 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-sign.a index 9a88f185a98..7b1c2ccb36a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d1ff1b24cc0d6f023337cf5f4851ab4fd967a6caab057cc16af79cc4814f70de +oid sha256:0c3ee50fdaf9ce811cf0e84cde3961069d2f11145c7ca9ea9b2ad2ea7196a4ff size 3782 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index dc38c819c05..1d906d30734 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b625a9a54e8d4e4434b7e32587f25fe931e5e2f1741c756fd038746d0257b2c7 +oid sha256:31952df2b34411a7419f5d64519f4417ee1c49c3c9ad242d19d6e0fb41e8f9b2 size 3646 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-sign.a index 5d0da5d0413..4c759018538 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4cc07d91d196df4c9db769855f27ce9cf358d657e321c07a31cad64f011ef0d +oid sha256:8fb78afb978146fba87ea184fbc660c2c96f07fbd222a8d8b43f737fbb60249a size 3782 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index bed7ceb0932..908b1bf3f59 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa71f29a9dee68fdc28c748d9ae21f7fc8cbc2dce7b71c0b3af4fa5575fdcce3 +oid sha256:629d3aec9fcbe2589ba74a31138616bd11ae944d4de52751f70b0d1cb643385d size 3646 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-sign.a index f650eb4ffa0..060b6f2eecd 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:582c19523735b766bddff651ccca6bfe63e9896eac7e760b93c8fa1153984bca +oid sha256:f34a2dd0fedd8eeb1c7f773170cc7d2f0fb2a69c3ccf50fa0f9fdf0360637d84 size 3782 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index 0bf22b7f9a7..53b30789dfc 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c39c90d2ef540547203a2f89bea548a4eaac03f95e9f5edbc5e8f8e66aab52b +oid sha256:39297f1ab1aebea06e71b4e6c33fd39b8d79f543e955a0ed4bacea6209997123 size 3642 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm12-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm12-rail/cbke-library-dsa-sign.a index 3653fc83de2..62c1d5389bc 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm12-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm12-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b21edf9a3ebceab06229d9796c6b491099b1dc2a40280a26572523ce726f6c3f +oid sha256:e6b062fc23361ecfa9edec93622e4950012ee4213826d7cd29dc38e0af1ee4fa size 3778 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index 6df3df1b275..2ad3a838e5b 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef21fc03fd02d16af3e461e3b3e8b87ce73170698c6f86d3fd605b5e170cb8ee +oid sha256:7a4f9a3362d6c0d71127c55c4527317bf98ec91e71ed5c16389afea5d503dd1a size 3642 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm13-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm13-rail/cbke-library-dsa-sign.a index e7a638b137f..431964f0c76 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm13-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm13-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f95e51365c112954d2127fc133cc026fa3ba89fd0819f7eef8302f90be62fc9 +oid sha256:7af6704178dc18e5f9e81b2b020f644ad1b6943c8a9fc020838662449ea4ebf2 size 3778 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index f857f95e764..05ec58b04e2 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f8a578bbb1df1db1464a8ca8483c3c4f8fb01918369bccd5c16afa988522a5d +oid sha256:9893f189de1e24810672923a6d7f6f0955015d9c2bed9ef777d9cc37354e05ce size 3646 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm21-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm21-rail/cbke-library-dsa-sign.a index ec58ec95437..33cb9a1df73 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm21-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm21-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17ad205c65eec99f4b4963611020436475372933328cd63bb84e083e4735e1d8 +oid sha256:a5d4825ed917abb5f2c48af0ac803e55e1175cc3717472efb6e957b60d7111dc size 3782 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index 3ab2b0db7a9..efec97f05b8 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a412c450b4bc4897398eec3256f5b3d71ad1ad5785ee141234ee42fb246cb5f6 +oid sha256:9c4e30a5e0ab66d3cef0258934f8639405af193bbd6c210216442aded98acb38 size 3646 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm22-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm22-rail/cbke-library-dsa-sign.a index a0a08922b64..7f05d82f853 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm22-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm22-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39562397c652339631c7e3fa53dfa65093659ba3ee631c6a3e7088a2f3601453 +oid sha256:6d544c1c76f2a591c2a572928ffdefc444ef452de39743a67df608b2263c848a size 3782 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index 0bd0deb4705..e5272e33da9 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9fa1dc09a44e423fd6454f0fc859ed1f6d338107ca9529232fa4520cd401fceb +oid sha256:700c12c5023a7ab04a6941eedc0e2726a0662cdc485e761ed2ace46b040ee831 size 3646 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm24-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm24-rail/cbke-library-dsa-sign.a index 18e788a76a2..c868d829b07 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm24-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-gcc-mgm24-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4340199e0dca6a23d536b77f8d6e013984a78d15df67284a8c89c52353edfd69 +oid sha256:24a437db8db47eaa21489cd409c275c1301db17e52a99cb3468080e68aea55ff size 3782 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index c634a104311..54bc86a7374 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be04e2c474be2868b3008a952e94816835f1d2f0df3ec792b9f3e5feca804bd1 +oid sha256:804aa95b1f33e24f0910a0a5fbca8126e5173ceb10b888a3fb5492541baa0c5c size 9822 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index e55514cfe35..da60978b91d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c249e41146ba38a581a0f1f2681a723bdcf71e3cc0d2826183157bb3fe5f25e +oid sha256:369501f56fde23beeb27dfac4c1552216e056bf9b1c50f061686d3d7d66b01b1 size 9498 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-sign.a index 311fd2c14d0..a03fc1f4dba 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:148a1f63222f5618a5b6ae6e6aa9d2af2fc9ba3df340eb2e9d40e1ba706794e7 +oid sha256:ddf4377d1b4389673b446dc42c2d334a85b15d72de97e4c660bc269275b3c7f6 size 9834 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-sign.a index ff27e95bce0..0feffd19a2d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79bfbf4d11a0dc1ca0e216cf58b4d6e74537004af4a59f3c2fa082bde0eb080f +oid sha256:e25eba1f8554b5de65232ccca347311ad1dfe88b2a1db2b148f4aab2e9d0868f size 9522 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index b30598bb0a9..c41b265022f 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:782fcfb500b87a900c4d7a6885cb7bacbb2b6424cfcbfe25cb21a0c2b5a6d551 +oid sha256:1360a55f943380e73b9717853474fcda41c4bf3cf8a1a30bff2791f3391af8a4 size 9436 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-sign.a index 4cf420c6886..5031b2aa862 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:717125bbdbd8db5b5d7987e4427deb3a918bd036599855df04cf592c10da116f +oid sha256:a5580c19389087c195499c0b021205dedc11eae6ebd0a692f200b3ee347f3370 size 9112 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-sign.a index 1bae013b30f..94d27da2b4f 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d07deeec7ec700285a917b098e3022a813ea34962f7c10242cac9f1ed21b502 +oid sha256:72fe5afecfff630a7394a689a49961e18e30cdaa4ae054fd2ea507f5ab1187b0 size 9446 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-sign.a index adc327665b4..b00e973b078 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb712554c28fe8098cfdefb60dbbd9fd62a4e926b1ec53b47484b79d038f48ee +oid sha256:301a1a40d96c299326add2b4b4c7860eb77cac9654f6242e024e8b669bfb5115 size 9134 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index 63cc3f7461e..8dddb9c7464 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd5f01dc7290f94d2c4554a6c7f7d278fa35e68e5b4fcfdb4fa3cfa4b620f798 +oid sha256:7b0d3afe7e827cda9d02b7c629f0b8ab8d16c7e7b95c3f5acd5dba25ad378b6e size 9820 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index cfacd76386a..56020e14360 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43eada3966ca89d8d13e330f6f7a324fbc0cc6a96f52eeabbd61d40a5e5ea70a +oid sha256:9b150284783ce9db293000a151d5bc9e529498a34ae5224d159d5a41849bca7e size 9498 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-sign.a index d78394eb890..6d0446f6c9d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:69f50c74e19556c809a828e7e594e36d06dab5be0079b3bfe90d0a8c3c598de1 +oid sha256:14661e8f71eb4a058725588de50a5a65b2f1fb5a3f438113d11d214828f6fc03 size 9832 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-sign.a index 237f246ec79..5e5b96d666c 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e542eac29282b20a4ea75acf9f2fce3a7c324a0e5d66eab2afcda7c2371f619 +oid sha256:626354aefcc1cda63eba5dee32bac27fc3f65a47d620390974afaf84f79e70c1 size 9520 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index 6f86f2afe2d..6a825b8aca1 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51c6fc4be465a14007e30251d99a7721c02f916c197f83d94d629d0b75d0de50 -size 9824 +oid sha256:b42eb32a20590d3a9187bf6b8683a3cabce844c5c06d2dcbf55a37b3f76ac9e6 +size 9818 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index e0ca3b23952..9fe7556f1bf 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75cf255b20e4e874211fef3c0b7f3319647a0b4663d5781376bd7217b98aea94 -size 9500 +oid sha256:1efc9e25e5f974bf2444afee25a5c9162a9b7a9ee26a809eb90925f064658c3c +size 9496 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-sign.a index b06ae259a28..4af25761100 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14a4bf14405c1037f0a12303e108a8e3fe257f67583f31c8fcee2b709a5836f9 -size 8578 +oid sha256:78c809c6d1f61b0a9ca19e473fc1b77dbef90906a704ccfc6843d23bc5137cb2 +size 8574 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-sign.a index e321d0757ea..092012f008f 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d8339b7038415c81e93ed84d0e74c9caefec6faf50d6647b3c4ab67a103ab1aa -size 8270 +oid sha256:bc67dae3f1d97a9d83b197c08abf2a80ea655b1cf62617d6807bf85036e97a06 +size 8266 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index 1ed8d74b7ec..e8485af63c0 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1059ad5e484bf22e06e3e1e9d5471a7bfb0baeffd54706dc0c706573c1e78ff +oid sha256:c5002cf8def3d524ae317a90f11e3ed5ca7af090cb7e240b2ecece12c608e36b size 9822 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index 7ee1c6e581f..c61c23e4dc7 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45635d08db256af0b9eb3acefffefbee534027c879692b29fbc04cacba5262aa +oid sha256:b5693d4b02277c2b7190134486cebfef58b7dc7e0331eb6595efdac047ddf323 size 9500 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-sign.a index 085038ace35..d7e3bb5c18d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e3abb797441e55138b0b56e57835a0c4c086ea8e270a17a7f74362f4ada09849 +oid sha256:06683622b48151076fa44dfec42e05e87b1d575cb75e6f3b0a124bf96bf1afa9 size 8578 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-sign.a index 0bf54cb98f8..d793f6a3e0b 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9835d3a4ab8ab9f86da0a1469003c73f73853043adf9d29731e01d7bd44600af +oid sha256:1ba4a685954afbf65147bfdd61e68d0c3f783bfdada9522edd7c1f12c309ecf9 size 8270 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index 8a8255ddb0f..00ec15067fa 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe25a12b161ec75ef6d2841cbd889caf1788c6746826a331b3a6d2dddf926c1b +oid sha256:61f646c569d8d5609db37ab58b23157396809401f37fd28080802df6efcb8d7e size 9442 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-sign.a index e1f4c882d0f..ab7f1c3c947 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebc8e7c41c1c7ed3210331729d4cf10ddf735f6a4645b80aca31a1a5ce241d74 +oid sha256:ede49b9f3226839525a7a1b9b8dabb796219599767d6e27964b8583e7aefb8d0 size 9118 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-sign.a index 9db90106b31..a9eebc7b029 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4156730a0a4a541287d74596371c1aeba6d96d8a5e12184fe1bf42352091af1d +oid sha256:a93a1c7e02f16bdf179aa5409a128db62f73c8871f35a5aaf44529ad66c89292 size 8196 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-sign.a index c6d26496568..879f799bd9c 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f2211c612808cf0bdd703fe8c7a4a59fd0e90f9eb4bc3a547f08b9542375f18 +oid sha256:c611c3adb2171ed261c8e4d39a995ceefc66e3b3ad5d45baf777217267329944 size 7888 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index 45585d7f7c0..addcceea5a1 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86705481cb5b3980d5802159f0c97ed2de8a7fb328bb3a94ae8ebab5061f3f43 +oid sha256:8126b577de3441ce9a3d38a38d7dd618e5e7f86b6326059c82de2efdfd0d9e94 size 9824 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index 47aca5df89f..35e3cdb3ac9 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a06b1c744c8949f8dbdab7586a05f2b5c46290f697531090dcb31c949a076fdb +oid sha256:9d2b221bf03076b52ca16eb271554d5bfcc7847d2cf663e34e23f2a711191d02 size 9500 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-sign.a index 0e7745586a4..b62eb7db852 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e9482189c294c871d006449dfd6a978b174402c64613a7041d14b248821e1a8 +oid sha256:0d3192749be9825b13ccef7e107a997daeceb2a283c841eb10054a30f6a17e77 size 8578 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-sign.a index bd42ce5f79a..572d5ec9328 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf32c8c645e62f3c75728933d192ed0c02b20f2b4e78f058267fbc89bcfeea80 +oid sha256:15bb5ce145091c79d0b9f79600b1c1104e8c553aa003c17cd9d28ff6ce86e87e size 8270 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index 1cae9534a68..785713d866f 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b4047f960117a7e24db1fc620d4b302d0ec2ea26af5716c51b44dbe759774e3 +oid sha256:754356f831fbf8c17486b49ecee1259efae3135bd5e70f9285c699b8eca0bd17 size 9822 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index e5c2f5f685d..54a3f4ccf82 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:849badd51825c9bebe300828dcb4b699b5f3fe64597530cd5c419dbc3226ca61 +oid sha256:68abbf5be55a4f1c12fb5534fe3dc809419d9c4b4088db9108f47cf528efbd8c size 9500 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-sign.a index dad93080dec..d98b6366d79 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5ac8a74de6c60e7fec138147c9178858d0fc6d4cf1c06775ed2ee6039c98ec37 +oid sha256:874d23adc4cd4121da06f7ea130c44eae51bbb11cc67dfe1fec29f3e49486c47 size 8578 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-sign.a index e4a280eeb6b..93e221aab0b 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba7e42ec2005d2344c2e2acaf706e974b9f9c3129dbd829e1e29a901fd7d196a +oid sha256:4a606977ca950dad92ff78f014c2fbea742d7417e46c5688531349ebd09b1966 size 8270 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index b3235b22e5c..cff4222685b 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c901f2b8512ae4bed2cc87fa6de35708597bcf0892321d5503aaa429c8818e6 +oid sha256:d7aea1e773c13c925e9526c04f47939f1293ee2d62efa7a332725e29188097bc size 9784 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index 69bc1824c7c..3dc84633148 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efd59dac8c6d616d27c5fc3152b8d5b1e094a534d2d7fe568cee90972149e1d7 +oid sha256:31c93507c8c95c41b28cf39937c6c5a0e655ffcceb8ec71c78c3098cd8437f08 size 9462 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-sign.a index 504063c66a7..8c9434844e8 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87867260711b82c2efd4b5eaa226b2133bab98e8e42606b0e932568a7348dbb2 +oid sha256:9eb7f0cfd97c92769c6fc0c0f4e6256affb764790b7a8e2f07ab8ed6ee8238ba size 9796 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail/cbke-library-dsa-sign.a index 036e024bcc1..61184ab186f 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm12-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87475c86178b7b4f5210df057a5f3873a38774d3e1165e5d8fff8e22316dd25e +oid sha256:e92277138342acc06b1b8847de8f4bd0aeb78257b08d9f29d5cc5388905bb0ec size 9484 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index c459696650c..ba4e75d7531 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e7308e3c996e62f4b5f23f0422079e50b9e22d26c00382b0d45826c20b476c6 +oid sha256:94b615bcc866f3168f33c30d227b3058010ec0fd18632dfd7d181602d1d94d4e size 9784 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index aa7856b2818..b89b9c48202 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a74f5888868012af90d6f2b98df382f5dddab114ce1d68668effcdfdd112e62d +oid sha256:9992cb9c07ae7811e6147677605e1472f2bf27a4e84ca4844381abe02e08f3ee size 9460 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-sign.a index 1e2f7906a11..d4d87df0ccd 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:834959491d4dfc5882de3359ace61d78e7980abb2185dbd3ba9d9367cbc93d9f +oid sha256:20899d2536363244da822d01d1cf2b4da563afd2ab65b38000c8f32fa3766a94 size 9796 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail/cbke-library-dsa-sign.a index 565514a6004..451be12075d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm13-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98656ebb82a5ac489a494ef3a049c863451c6c9f469d41922d92727c0efcab8d +oid sha256:e9e8cf129b5d80d2e536dc56f9d724c97a5cf498b32d1b13d7b9fa5f320c6a56 size 9484 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index f48ff821e5e..606a8d5ce54 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5628b137fcb52a40d4e2cafe9addef466a88860e51ee04dd184d99e9a18a1e4 +oid sha256:4c283b130b833b536c44daf3c1981870237a9e9255b2d92e2e686c7723d56080 size 9790 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index e45e1ce1531..b1b18f4255a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02311e29a3f8d9e47512d3e5e485e8a96a31e1362b85a6ddae6363e8226605ab +oid sha256:7b04bdf6f30783c388b67d76d5fcadb818b271ffb9bbd161e0519b1764514d96 size 9468 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-sign.a index 1ee007e5c3b..573394ca309 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eacffc70ff6ceffca4f96b658a65e8d561a2a8d64239b13e45fbf022847de940 +oid sha256:cef0b00fb8ba184f79f68bd5253f5e2e5006ad45f1197bd195a19148ac0e9e16 size 8546 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail/cbke-library-dsa-sign.a index 4e6ac923b0f..cc6791dd906 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm21-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee2c41b29cbfdb48d7edf861a13a9f0f7d55f771d9b0f2389c9f2f8ca0e615d4 +oid sha256:ba03927d3f785356a97a37c0afdbe72e2d400b2244a2654b4940908da93efdd8 size 8238 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index c8fcaa59a84..63a1bf12158 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61f6744be39b04cfcf023ba059d178bbf02a832663290f7b526cc8197d436e2c +oid sha256:1c82f018e6c3a8fd56f16afab94d030401f8714b0554c646a1bbcfde097acc82 size 9790 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index 6e71a952cf9..eeae9bd8400 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dea6563d1d3d429b177f53c45588bf4c1db200f3a46b31a30789a9751b5b9726 +oid sha256:466ff427827b4780a6951f073ce12e2cfe3d98e5142208080a9916321f3755fe size 9468 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-sign.a index 8f1f22b5f52..af8600df670 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6dfd33ec274b5ea8551a3f5e82cfc97e8a4b214841726e7f0d64ae02167b153f +oid sha256:fc4b064a9017a7f9b23c8ce771fc714b3ad67393c8d9525666726933f669279c size 8546 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail/cbke-library-dsa-sign.a index b6a42d69635..9073fce95d4 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm22-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa42c6b1cb7bf93dd57887de7c15dfa6f83a74654e8ba46c2774a0a25a5b9cea +oid sha256:85c6f7cd763357e1c061d673733cae85ead96c0e4a1ab49d3c0be8fcf2fa0faa size 8238 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a index 9f04af3ade3..f297901dcd6 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e44bc8b1aba404f2a61c0f7fa6e898c95033d02031aebb8290e88d5cdb43e8de +oid sha256:087e147dd13a3a566139839aeb5a286c60c98ee16832a909296ace281b34ad83 size 9790 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a index 85826873ed8..7d18df4418b 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e31f4adab9814d6a33402449a6d5272e50533241a8f395800e333c20b7cbd4de +oid sha256:0bda78e9639ad920bd2c75b7dbe8e7d26fa9e1025d5100dd00c51076c0d48700 size 9468 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-sign.a index 8e48b44a29f..750e82ea1bc 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e64802a2d62aac84d31096b84d2811cc9d13533a34cccba2bb01d7ead27104f6 +oid sha256:fbb77324fee8880616c0555e13741bf54868ec83b2f8c5839085c4900d324211 size 8546 diff --git a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail/cbke-library-dsa-sign.a b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail/cbke-library-dsa-sign.a index 898fc2d1982..817a62ba157 100644 --- a/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail/cbke-library-dsa-sign.a +++ b/protocol/zigbee/build/cbke-library-dsa-sign-cortexm3-iar-mgm24-rail/cbke-library-dsa-sign.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aaeaeacd49d23a540f22976eec79f648b2b885d50b1257aa88be9a1eb694effe +oid sha256:e750b257a836f496506b966e575c4281ae147617ed2c5a0e682b3cc93cb3a12c size 8238 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index cd7e9543570..f81fda4a394 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ed0e55286fc07f82889b9203dcb404b38499c952bbc44318923cc292e5bbb58 +oid sha256:00d84436a40e4fdd85b7098220af0b2bfb0ed594ecfb388f08c14de11562e0ed size 2984 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-verify-283k1.a index 965f4c9dfa7..60023c78973 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a865b4b99c0229e445ac51ec35d3078c1f3231be8132054dd952c1705e963c80 +oid sha256:4c030a878d5db830f7a36ac6011b9940942a41e72e2a9c6d5c8d69b4e65c4a63 size 3104 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 3794ba2654b..f7ae23a7b6b 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a928146644f9e848addc6e226c0fd07b46698d580ab4ff4bc1297fc58ef04af +oid sha256:7456881f136dd35cb904c05233ea35f6373e97c28fc208318efba27fc9c0f0bf size 2984 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-verify-283k1.a index 965f4c9dfa7..80d736694c7 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a865b4b99c0229e445ac51ec35d3078c1f3231be8132054dd952c1705e963c80 +oid sha256:3e13615e1fda376c8728d708188e1e48a351081546dbcaf79f1b0d98e65a4500 size 3104 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 0643caf1b55..bb8e03f7c90 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6e8e5726cf4147afc40727a46e9c31a5117b74c44fbb7904ea644bf951e1656 +oid sha256:eaaa95cfcd744266fdfd7f229ec20e5c09f89d60dd821e6a33f4797dd806c3ae size 2984 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-verify-283k1.a index 74d35a665d6..9b37854813a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf7e8b4869d6d02c9c4a97b165d72e021b4aaa5669707a6f3219dcf439ece1ec +oid sha256:0680a1072945bfe528a001f1c0ee258135eef8e480f920fbcff996e3996bc5b0 size 3104 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 91dfa0d401a..d255aecf96a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e64f770fefb8eb33f03e2df75d4b276732794695e609f85a4eb4092033fb1495 +oid sha256:df1dbff738b7f8be24ccc0a85eb43b15342cdf45b094499fc146737f131b712f size 2988 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-verify-283k1.a index 831b2158c65..54c6cf4a0e5 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f89d9a1572acca8afd3314c7912ee5a2f544621282b5b45868c63d47d0cb866 +oid sha256:232ba3103807f1e52e1b20b7f18438560ea1cdafc5ab8d3c388e462075de621f size 3108 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index f0d68c5c8b1..dd9010605c2 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb62bd2f9b39b45b1a897fd8b2d4262b186243f4ef5cf1a404f502d48a49741a +oid sha256:0bac92e3b5f6527a1ec8962f20a186502f4d20015271706448b0efc524f52d77 size 2988 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-verify-283k1.a index 367d9414977..b1836633cf4 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d0fe34fa9a376bdc52c0dfb93ee72e866eeb970692749866edd8373b5e2b10e +oid sha256:4a8d8cfbe11378d1a7e788f812f55460787549ddea6edcac65016f04c26d658f size 3108 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index a92505b3ed5..48db76f7396 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:806768768fe1b9a0030e38747e4b725d7e4a477c59c3675b3b38570754019936 +oid sha256:b90b8dabd8621305daa6030882a6e1fcdf91f6b8939a4565c4af1e81d377cd49 size 2988 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-verify-283k1.a index 32381416b91..4a84f093929 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95008449d154e4e901e46ab5ab30618c95f92d548b2fbcc9eb0d6225f92542b4 +oid sha256:07ffe65962391390a3aac1b540c6d93cadd8b49488c553792c493524f1ffad81 size 3108 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 40636a0e43f..908d2f1a6bd 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5ab8587fb4ac438e5d6d37438eb31c96c71b065546feb02e1b6f86f1e9d0395 +oid sha256:e8db9d9c7a667a300d0811097323486662d9ded09cf250db5c82774103917f5a size 2988 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-verify-283k1.a index c41a5f282c6..77723a2ab29 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d8efa4e368d15e7a7b25ea6b748de973e91dab493dce3b3614b380affd3152f5 +oid sha256:1f6350a82ae9f41cbd9fbcdb2e91ea854d3cb7ab46ae15e5b563e93d73cd03fb size 3108 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index d35051b3031..f79f92a83c7 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bdeab7a41f0cc797f8b3f154791f4ec6c9bc713fe74219027cef47e9f57322b0 +oid sha256:c532d34b736f509139ddb4cfbb2d206c6a9cf0c4f753f8812f05c367e527fc25 size 2988 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-verify-283k1.a index c9128f3513e..d94dc042028 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bb551da7e1a43dec4e746621a1bd28c6eb0e5a35bd637724eed6369dda71c6b +oid sha256:cd0bbed6a588ee94c269ea5ca97833efc2e04812fffbac390e509157112bce9b size 3108 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index db001821170..dc8c7842102 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f893f08486350da8b6f03fb9c35c2feafb96a52c5c7f202ff10a49fe2ef27c02 +oid sha256:c479213c7c8a0f829f3b83f04862657e628585309bce6df2afe00bb2981c78ab size 2984 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm12-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm12-rail/cbke-library-dsa-verify-283k1.a index 1d694bc4c8c..0f46fc243e4 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm12-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm12-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86f5c623d69e07d63d1f8de6344a66d9d67281f29dd401bd2af3160147af768b +oid sha256:37b31dfa46d8da655cd79f2a67eebc4db9737c4ae4f5ffe6b693439df960c721 size 3104 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index c05e6754b8c..6fbc1e887d5 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed1f1a48e5104130f94aef85de04b10fb089b735b02c2c240c50f25d04e5f18f +oid sha256:2f7efa2c8b54d7c438460eae0212e9d58e8c6d5dbca58df78c3dd0619c46f0c0 size 2984 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm13-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm13-rail/cbke-library-dsa-verify-283k1.a index 0df1fd65075..3d96c526363 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm13-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm13-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eda7158006a25d0033f495879c344c00ebaf3e991c3c6519b83bb5e61c63056e +oid sha256:c77d40f67ef3d9a5ba896b05e1ac24d767af602b7d5a153f5176572621c5d5c2 size 3104 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 989fdfdf0a2..76e2cf3f744 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43c6c33a23fc83deca3bf1c456ff11a825a36510fb18d68aff7813453288e610 +oid sha256:ef9d6add3347bc63267a7cb7da5fc4a6d0fe717685b4fe3ff9885a70376de60a size 2988 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm21-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm21-rail/cbke-library-dsa-verify-283k1.a index c48c66e2045..63b2c36069c 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm21-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm21-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:972592f58fbf8e687d5fee1a53e2cc8221dc8cee2d2e37fc95f172241eb44121 +oid sha256:78356d9357198a77ffd483a1ca5cceaae0fbe56953592731d8133c83b7f8e09c size 3108 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index e47005e3354..12da2174746 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e79fd0e5670a1ef5c724e612d75f4c118e5c0d22ad8c0383ac7efb5eb3ea86c5 +oid sha256:ace944d1111a2559c9b25bfed089254befc303a6e2340ebeee0ddf2d57d5970d size 2988 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm22-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm22-rail/cbke-library-dsa-verify-283k1.a index 82341228b6f..eecc9e387e2 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm22-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm22-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08c8181f1635d94496af3d7861e0aaa3a49a02e3a81b6635a2b693714ee40688 +oid sha256:5372d9e81798d34c3a8121581ca17e56322ab9166907187f31b267b3eec5e55e size 3108 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index dba5d128d99..fd68e4fc6a9 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4d1766799ec511ac2f1d97b75fbd36e2203bd4e979456d2239914921408fa16 +oid sha256:96584dec4c14b791e391186e175a4ddc47f9874abdf72d68b75cb12a1cde45b8 size 2988 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm24-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm24-rail/cbke-library-dsa-verify-283k1.a index f53fcb48219..088c1ba8d68 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm24-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-gcc-mgm24-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb2647327bd91733e74e450ceed5737a3cb3d4e6a3543d766cc822fa09bc3ee5 +oid sha256:d4a3c00fab24c2a178f95f3762e731480a8ceb27dc457b52e92b1b7efd518e0d size 3108 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index e0845b8782d..7e796819ea5 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6604953d058e042bad3f4db5703d7042b35e549a8e894bf7f6194cf9fd4e0eb2 -size 7926 +oid sha256:cd9d1c4017e780543b55edce7a0c996ad1d963cd13d7c4b23aa6faf95ee213c2 +size 7928 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 966ebd658ca..cb8b90f65c4 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8cddfbf85c2e7a5f88d59d01532d485483141b8799c2c4533107b6ca148a70a5 +oid sha256:d8cc178051e2519c93561840d7eb6087fc77fe70fc5f7bbd4f9e6f152840342d size 7526 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-verify-283k1.a index 18bd7d82314..37584603d98 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:853064851dabc659882ac655328b96f33951182835944b52194071ae0b2e6a8e +oid sha256:c36854657cad33a8a26aa0265a11cd5ae972bcf937f03bd035f3e0cbfa3c4597 size 7916 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-verify-283k1.a index 22ada768481..db8868168b3 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41594da054789560e04b5ba41cf25b4fb40d70902a232bb284d302983483e516 +oid sha256:a7638e0d5a806789c3586d02662dbd4c6f10713fee13f98217fa3fed2088b55e size 7520 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index a836cd9a437..0201ca6e105 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68514beda16a8e2ed39b553b44567cb5b45d931c3a989191d64a420838ffb0a1 +oid sha256:73c55fde5cb5021d3e3e7407533909ff3e48a5480db16f48c5725e037c0bad12 size 7540 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 138a9efc631..f14199d9f06 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97db56e10715d8ce3e253887ca94b30178e9e1d0170f8601977d114c35863994 +oid sha256:36362aff9708df8b5b18aeac5a4ed7ed28d39547f3ec2e0a898d43270805cf14 size 7140 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-verify-283k1.a index 09f422bcb12..6fa022ac252 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0b9f5f2dc016980331730f69cf48b5a92f34b2bc1f27c684565f29bdb041ce8 +oid sha256:4f5bb5635eea7d51d376bdde6835e68314ba9177f24dcc5c11d1551baf62b51a size 7530 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-verify-283k1.a index ddc525fb34f..d2d05d411b2 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60ee60d817ca5eed5b7bd3c2b7aee83272770536072a6e6b0b097593fb344ff6 +oid sha256:d5a33ae2cec12bd25dc78b68efbd40b4393bf1038fa44d7e8f26cbb68138fff4 size 7132 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index db87184eabf..74f840f88eb 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2907b3423f0e8aef533654dac4bb9faa324d75584f12b71f7cfec524c77c5ccf +oid sha256:6c025df05a71d009e2c22132725c84efd7296dac2e33b743a4dda93c7dc64ac2 size 7926 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index e664054a1dd..8e54b8b4c00 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:26f9506cc7295ba5fa22d345b002d9c963ab5eeb8b25b74918ae3eb987e63713 +oid sha256:64438dd12053993da85cf56de55a3a3b4a72785f824d95abe9aea78f4b01e1a0 size 7526 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-verify-283k1.a index 96937cf2eda..ebc18b19d69 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0ce464091d44459efb96872bbf7f6265bf65426c24af96cf7064d2c796d0549 +oid sha256:aeff2b10565591f3baf022b64a66a5c1a9ecabca6f4ba408e841eaa67362564b size 7914 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-verify-283k1.a index 89c8736a86f..514879870fd 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19a5dbc859dc2f4cf6fd7bc4f6b59c3fdd90a92dcea30fb15f8a5d361f0575da +oid sha256:b80238451a8dae743fce6cffb2fc41627794aa7f6ccc319d53fc0780c69f8eb9 size 7518 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index a494623c851..beab2a716ec 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9cd550c5bb3e71809bd8acc8c6d55635219d06c1c259cf3fd3780a8a271b5405 -size 7928 +oid sha256:3d21cba912f380e8afa837ba6b75fa982d674866572122dfc6a5bf0e524cf0a5 +size 7924 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 2af5b810ee7..7d0f80295e1 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f32a461295e400d692a912b956c61e8cdad6e9e5f977791264ae1cb6d7f424ce -size 7528 +oid sha256:5f98bf95d8b55cc18bdb0956f9458327de8992013c48d0a41f0df5506d32fd6a +size 7524 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-verify-283k1.a index 2719ec9fe7a..fce9bb55f46 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f219bbd8c73bffc27e8537eae3caa261f610bec6e268df06e0e4c75a1f7ebedb -size 7918 +oid sha256:aa0e38af52cc7489c7f76fb7da7906cab5de95376f65d04affe969a27d22b99e +size 7912 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-verify-283k1.a index 87bffd380ce..64c986e85ad 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33c92e1101cb0ea124cbac761e13dcaa7a16a1ca4a502349ecb2a085e9a6950a -size 7520 +oid sha256:6ac89281b1c46ca566d7beac0940c47deee842425f47f2ca4815c60ca6ed6784 +size 7516 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index 9423ebc8d58..3ce2229b63c 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c3df1d7660ad0e40e8a3a01cc2e517373b998cf14031833d922988b9fb57b93 +oid sha256:ca3ad1e43f2feb683f1f19677edee60d378f36236f178d8401a93a07412788aa size 7928 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index efff40dbb5e..ab4c4a05404 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f46ec7a04202a2ddd5e5a8eb637bfc595b2a4bef2daf2cdbef73b2eba0a8c1ae +oid sha256:10a303b5fbcb70c482bdcda3cb68fc620b954988d33834cde59c540f24a3625d size 7528 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-verify-283k1.a index 069bad22683..70ceda02424 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac2c66d635e1ead338dee97c302e649e764a05b6848a4d81dd24aaea265ca58a +oid sha256:6a9b93dcc387a9fdc7db3da64c3adf7cffa320e442c67681895ca852b1948b6b size 7916 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-verify-283k1.a index 7ae04c014d0..3b37d8b562c 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:315a18ab64ab1a8721c1fdd5c5760cbf0c1c488a85a966a716f6307fcb3278e1 +oid sha256:f33b5da626e19794c8a824ab4bc9f5af3703ee8c2adfa1c3573d8bd985639097 size 7520 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index d9a7752ce76..d0dede83ff9 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9501ef01b69aaed9dfb833d38bc3fedba544c4c4f03645acb04d1cf0ae4791e7 +oid sha256:a33b34a00351bd5048ede1fc8f1e882a4560448903b4bfcab9330bdf46fcb762 size 7546 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 4841b3a67bd..45b91ad78d4 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:353eb88d36402b9b91c2d7d3795727192fb35b177942d47384e20f775a2304b1 +oid sha256:da835afd3b4010b4e5a523b6ebc1854f83f297ec187bbe9d483c67fc94aa6a16 size 7146 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-verify-283k1.a index e2a516f0af0..2b5a515fe86 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f62f1cde6ee7e51c71d248f7b284cc9a036c9be29c03f624b0143e59a3b19467 +oid sha256:8dcebd918d34d8cf72235fe6a48013b751b42b67835fef49de8b76363aa9c9e8 size 7536 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-verify-283k1.a index 1c976b79ab5..2fa4f414d17 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0f5d7514c50b994eaddb7db65f90e9af11d9aa17a2c76134db5d4aaf0bec9af +oid sha256:4569ff389801dc6d53707cd35ce39c783fca0c2f640c8205c96a56dc9565dc78 size 7140 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index 107227ea120..55f1f745c3a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eace5ac864033842bd2a6a13d7f6b2298591aa8b6d928f153dcbd3fd6fb50738 +oid sha256:bb31626915b9b3b30325cf16485d8de6e6bba6cf69edae7be0b07182059f6e02 size 7928 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index a1643fa4c95..85d317fae65 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b64849bb505493bc465d9a0e736180bc592a810598f1acfe81d55e651df886f9 +oid sha256:3c8a7b5a1c02bc69e670a1427d64a11f618dbb8fb3b1b7860d06f20160539a27 size 7528 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-verify-283k1.a index b354b18e08d..84facb8dd00 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8be8531f415b4fabd1b8ee463e8fd1b2380b1e26d27ad47332c2a6220fd411f3 +oid sha256:0ea95a32d1ecd41559653498b6c01b53955c14f2904cc98e467c1e27b6476d7f size 7918 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-verify-283k1.a index 2ac17ae0caf..9ca832f9b9a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7c79226ce8930c7ee897f31ca63bf05dabecb67a92ed036722590997d13bc13 +oid sha256:ae1cf766c6488b9ecccc353a087b4ac62d8f8860025080a727a223446ac44867 size 7522 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index b6278cedc23..7b43f24bf7e 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c7ab25bbeb2c9b4dfae9db6c05f99f2fb5a85ef31d93ed587d2fc9088f013e3 +oid sha256:400243809e4290e89a3c523e60351ad062c42afdb4fd335755a51aeb71d21b60 size 7928 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 449f28feaea..cf4e92fbac9 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1713c6694b85dc4100363f15dd48f5bd4ee3a8fa2eb01074a82e9b380adc846 +oid sha256:097c93924c34e1303685080af52897436a0a6713df2ad28f6243a2f80d1c8c01 size 7528 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-verify-283k1.a index ff16c16c71c..8c3a19f4b3f 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:220005bfede597e76b49b6eade36e54e5ea6069db24f9c3b4b275a098a33d0e9 +oid sha256:d7c73e51c607b354dc42e26650141ba983623ccc0bd566a0ff57c9a04aa41000 size 7916 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-verify-283k1.a index b0f67886086..045f2e7ceac 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b542afdfabf8169843891674ae9733fe9caafa3aa6330ddb87959d66aefe6ed4 +oid sha256:0b566d58115c2ea2644f5b1291fe6291b07d90b62b7d4df7aa3547be43c69e0f size 7520 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index 10013d7a96b..6592f688a1c 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c42d15c094cee828a572554aec7ce36c52ae5c9435820d23300eb2cd9f5eda9 +oid sha256:b48505947b7ec5888baaa434777e9fbda8527d2c970626fe455c3a502294a24a size 7890 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 0f6fc14f8f4..4c6ad4ecdc3 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5ec8edcd4abad03238ea248beeb0616186cf94e2f5486a1212c18db67d16c756 +oid sha256:5b835c19b490204bace52c27c45b6153aacba58fdc51dec7ae86de8d8f1df9e4 size 7490 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-verify-283k1.a index 11fbed3c06f..8a8ae55dba8 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:039966cb04435f81ce226eaf1751322ea329298d289d2bb80a24ada43da67b9b +oid sha256:4d91d193a9bf9d076b2918eda249615cad7c10f700294eb2143edab1205ab5f3 size 7878 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail/cbke-library-dsa-verify-283k1.a index bf3d8c4599b..22e078f89dc 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm12-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:598d5fb376b085d2f1272b6f01db84ad648858e87c4164c5beea80ed18532e0d +oid sha256:47fee8967570854a901d632f0725ae8a42680c904e9929c3ea48d7e460516c27 size 7482 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index 688bca6aed0..503cd8fd9be 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:283953af757b0ce8b589a6c6e3a5bf8bf0aee79d7a8984e85dd53e258a16bee5 +oid sha256:db8582643c5326f593a1cf1a7d8ae378939527389cae51eccc43e138cdd6643a size 7888 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 437a2467cb7..2be431d93d4 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c4f3dc5c157cc5596219dd596e9ed83a4cb87234ace54e4231247eefe13d90e +oid sha256:d32c3d0836d5c26a1d50bba83f6dff9ad71513a111f532083817f01ae2361695 size 7488 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-verify-283k1.a index 6d70934de06..b65b8126c6a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f3b5b6ba520583bab78a54c49c9d78e98c9a5b854f3d1da117712dad91a943f +oid sha256:e7df49cf92efb8c0721708aef9d0122c22dbd5badde2d3ccc1b748a70445d7dd size 7878 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail/cbke-library-dsa-verify-283k1.a index d1ecd851e13..18e10dd7a60 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm13-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce7132ece90783b69ee7fd34e2d177216e3d3c287aee0068451a48c37a19fcc4 +oid sha256:a288d0955e35e9a395ea6cf8abf3ea7e46663edff421dd49ef449e5d6940cc4d size 7482 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index 129af81f3ea..3acb70a565d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41ae4f2c37c292938b0b212aee6652154f0e14fa63a0f54227dd552aa107a15f +oid sha256:14e013173df218894e9d7855b7a0822d73652d5aa9d154b34f077cb5dcb141b8 size 7896 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index bc9aa7cd9a7..08ec8d8a378 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:10fc4cf77cca3f1fccffa154cbaca5580e51c5523450be12850398da304a07de +oid sha256:c1e0105177dac3ea7e4fc4c940cb2cf96c27e98e90f8ef5d30f10697deaa9bb9 size 7496 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-verify-283k1.a index fa16571180e..a865e630f4b 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13767fbeaf1f0e92ccf6db831ea105eb829a9b0eaea8acc7ef0076a7bc6fa0d9 +oid sha256:3227b1376b2093666f69beb7f2418d77ccccc794c8c4b1b88a790798941da185 size 7884 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail/cbke-library-dsa-verify-283k1.a index a5ed97fd706..864466d1001 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm21-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4caca8d2a87f5b9e230c936bbe1b48f3c617141bfbd5bf7660ba8da47cb6c3e2 +oid sha256:855831d011c1be9a6775a05bb9dd14589b60064fdb708a551f4ad8f617cc74b4 size 7488 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index e2b4934b014..5eb932f7b5a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:004eec245af3b8d76437e569b9a5b57b749d6b6d86cc9642985499023bc0a005 +oid sha256:1673cbf8992eb0a72563674cce89eacf38bb1a87e35e04e29c7be7c626e5c6a2 size 7896 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 0492c6de491..79df936494d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b4c04a63f70c4c32b33e01e4cdc15b2c00a543ea01493d2ca85958e95585d9a +oid sha256:9b6e75900aa25926768af13b694471bd710fbe146334d8254d3828a63da049c9 size 7496 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-verify-283k1.a index 1afedab8a73..91b36c269a0 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93926086c2fba562ff2fae8225344eba4d54c19cfd23ca2f22eb14bada325824 +oid sha256:a63000412fc6cec744cdcb572617fb2c23d4e1010a0073e1f9a9118b4e022b80 size 7884 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail/cbke-library-dsa-verify-283k1.a index 335f3d53f2b..e335bbf0344 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm22-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b51d28920b512ff40ff56ce524d90b22140b696e23a9f86ee56c585adf512f0 +oid sha256:6c29a31b80813e21bbf0cd9efd486366713093acb995a26b76f50b315c56f86f size 7488 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a index 12e84338e72..beef840eccc 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4edb92a119893a04f8fd35652a5b48199f28aeb5ccd779f7f13de57d64c6a04e +oid sha256:c3935d971a8ca7da688c1c6c58435869802f95102a71e6de23a1ec9d0ae15d38 size 7896 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a index 4cf5f685277..8b7d656a442 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ec83a5ed64e1ab49c65343857ee8738b1dde391a6aed5b50554feb323acabf6 +oid sha256:57f555b594252b89a082bde3909f65051ea139f49cee9015341c5120ea8e9e38 size 7496 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-verify-283k1.a index b0115511cc9..78f450e6e41 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7fdf12cc40e09499d77f83b451c6e38443222c8767b4525fdd821cc4a699e2ae +oid sha256:100c9ae2dfc7e9fe57ae699f003df7c4ea9f58db9ad92035860fe6ceb0241037 size 7884 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail/cbke-library-dsa-verify-283k1.a b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail/cbke-library-dsa-verify-283k1.a index d23a9a0073a..19446febebf 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail/cbke-library-dsa-verify-283k1.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-283k1-cortexm3-iar-mgm24-rail/cbke-library-dsa-verify-283k1.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c93576d9566a3f1be47cad107c758c5d80f8779d5da060d7ea675fe364d17b1a +oid sha256:9aa9ac7253f045c308068d5779aa6f15fd26d4ff7a8dd206c7d63abe2c3839b3 size 7488 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 2cb4890e9a3..b0e5386517a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc09592b15b86a4a713f07e5fd3b0b615197e482c9005be40e62ab26334a1d93 +oid sha256:bba88e4934b4be23a3b3558c258e3893fa836a43ae67b37a349dc2b0c91da40e size 2878 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-verify.a index cc26a886179..65830a7d9b1 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60d6810e0d7370b6deadb691f1d213518736189b6eb318844c9d5647f4f162e1 +oid sha256:853e993ecc15b21faa48e1f240cc0d28876874f9ba7efe3a00a62bda3abba136 size 2998 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify.a index 4ce75ac5754..10eb5feed18 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bef9f8d87e06aace3837944d6068e958ce910de52f58c5a44cc4b2065aeaedbf +oid sha256:431d1f7aff656eef38ad5f9a238419e8b81834d6af4d018004abc09c46c585d2 size 2878 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-verify.a index 942fb1fc60d..4506e8cdcc7 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg12p-railgb/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81aab469885df9cd3172793cb7e3ee4d7c1b8f3df57c11beb24cc5c5c13054bb +oid sha256:bb0c471034c40b31dc32fbc3a84e5951191245c58e3dbdb9e3cb4c23843b8cd2 size 2998 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index d5b4c9b5935..a9ca1db9dde 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ce04410ebdd702a1fefd389162135aae8d93942e3c37b2b2b4b58477bd392f3 +oid sha256:376bb7a7ac99a2a92f5dc3bf895bd920df7c7a7dbc4e035d301370c9a54905d8 size 2878 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-verify.a index b1cfb5cd1c4..47eac423988 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg13p-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d94b89a8506f218e11518374ccc4c56826361aa888b024dd289eb5474e20c842 +oid sha256:e06477b1c898b289dc2e7a2f035935a02b12238d07295b0a7d68de3a391814c3 size 2998 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index cfe59ae79b5..7c22424fe30 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1164ea3a80e70e5f3b384b4b42d7c1db4f379f1925e444dcb9f0af89c6945e37 +oid sha256:2871783b07a3b2d248373746501cbb5d97af9edf2e2034104601198e2bfea744 size 2882 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-verify.a index d18d9152d5c..320f0f28e8d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg21-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7648e843716dc820be78cb9d40b4d0e14cd661296fd3a055996646beab598d81 +oid sha256:1392ef24fdc8910125f0e2e312c6ee3c6e75c279df80e5da39c4ceccbbd212be size 3002 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 6468e84478f..01c060e4362 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98233824b75cf22f2cd47bd3ce4802c879cf13e240e54e90b1611586f5c1d85f +oid sha256:59db62b0f45fe19022269d8b5683dfcd981794fc84cfb95f20537f43b1a6cfcc size 2882 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-verify.a index fd6e186cf36..306a8b1cab2 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg22-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2945d4a564eca4a7d633fd3a8ebcc4dbc025d593449bd1527bb9908683e18696 +oid sha256:b5abe142862f0a255ce90ceff81a3444fc922fb03d8f6cbb12f1181c78b17ade size 3002 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify.a index c6c1855d006..58348d19b98 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:acc2381b2b1b8ce73e1fc4ead061a95f77b9440e1b6007a36aa8729ec82700d0 +oid sha256:2340bdb88fdb3c88a4bafebd1593faae7df765220a80f5ee2909cc963e5f2b85 size 2882 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-verify.a index b67e92cb25b..320f0f28e8d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-dualrail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f6d528be451cb8ec0ea478cca45067142dc6c150a2a7175a303340bea884247a +oid sha256:1392ef24fdc8910125f0e2e312c6ee3c6e75c279df80e5da39c4ceccbbd212be size 3002 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 77eaaba172d..34765892cff 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c67aa2cd1dbc60af9eef0b90da4824cee6d10357155306201dc2847fd85f614b +oid sha256:026e5390300d7253a3b006b8b569806b3d938e9004ed39f2f7d0b8caad445a43 size 2882 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-verify.a index a322deadb4a..238631e563d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg24-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b143cf9c79359c9d883fd1383e3fdc283a91c96e2efc093183b8a4003df3beec +oid sha256:943d8e0559d4b5b596cb36ff5ef887f6a41bec8a406e9a4a9c5a4b3f910e71dd size 3002 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index b934016c3ea..8cf61eb8342 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aaad7f7795c0f5463eb5f349c0b6b485026d2fe83045ab779ed235052dcb16f7 +oid sha256:351a0f8e1a7fd446461a6c20aa18431f4f23f659f4278140e8df100cfa6fb5b7 size 2882 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-verify.a index fd6e186cf36..97b152a2b6d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-efr32mg27-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2945d4a564eca4a7d633fd3a8ebcc4dbc025d593449bd1527bb9908683e18696 +oid sha256:524e09d921f01fea40d9206e58c29e4782ab77eafeb31c4cb00d430a8cf6e833 size 3002 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 98a3800f1ff..85cf2e5c7d2 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3c16636e9b076ee034fb4b59a4d578a4b956ed755624acb7da5ef746be2b09b +oid sha256:90b5fa7f53afdf8df7920838a0fa25e57c619db002ad44da525c5462fcdaab39 size 2878 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm12-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm12-rail/cbke-library-dsa-verify.a index 6b5a5891027..65ec5748a6a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm12-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm12-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e18c9a9d5c6ef97420d011ec9d6d56411dbec440e7720ae2fe16f5bd34780b0 +oid sha256:bcce9f61ab6db441ca68c46e3af66053c34c41dbabbeb5dbaf745fc8ccda9897 size 2998 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 0d4503bc2e2..6dae298a3dc 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:05539751bf2de4405f1135a8d522df5c1170b766a92f238ff0d0bb6aff881e64 +oid sha256:29327874ba020d379cb13ba047e8159e97aeb145e74187049ee72478df20e6bb size 2878 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm13-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm13-rail/cbke-library-dsa-verify.a index a310bce4f69..47eac423988 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm13-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm13-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b004019932bcdc63d18eb92590ddd1c9557e10c9261fb4d1aae9f715a7e16029 +oid sha256:e06477b1c898b289dc2e7a2f035935a02b12238d07295b0a7d68de3a391814c3 size 2998 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index fb3a16fd321..8d4e38c1341 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8b53483cdfb09685880fc30ef161ba51574e16da562ca16d080990a4bde53e4 +oid sha256:5070aa34285e8173831aa5a59b749ffef8963ff88784d8eb4301a2fc776e3e1c size 2882 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm21-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm21-rail/cbke-library-dsa-verify.a index 1cdd080d430..43fb2c7feb8 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm21-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm21-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1252c440ded038d6bdd059dbaa7eb0de0f3d80f15160d7b784b5ac0a8c464cc8 +oid sha256:8ec60409474609a220dd6e8e688bda3be6d34ac9cbdebd5abe524965cd596f50 size 3002 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index d172e3c2aa8..0d931442e90 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e09db8f8c3e616baaf75d52f5803bddeff705a48862ee201921f510b17d02992 +oid sha256:43f8078dfec303a3f0b95207a4d0822b56d84889f2b7140e199cac39889ee8ae size 2882 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm22-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm22-rail/cbke-library-dsa-verify.a index f385943ff05..134a33f56ed 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm22-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm22-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:950d6994916a705816e593fcc2bbb8918424f5c3a46469f12325d225b4e3a89e +oid sha256:8ac7bb984ceaac6ffa6565fb70ec0bc770307de9bcbdcf06da29561cb1dd6d7e size 3002 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 10168ec0a8f..d6ea965f491 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:228d3d98710b5543e2e7bb56f97cdb592e66d13ce31d689a9bb4c2ec3f6b94d9 +oid sha256:a06a1c7c410a0aba5c429ce04fd10bd9ef260eab0d38e97afb05260fa6027f93 size 2882 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm24-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm24-rail/cbke-library-dsa-verify.a index 7cadc0d81a3..e1cb15f3aa5 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm24-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-gcc-mgm24-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:420e47920d6fda2f8cb17697bf84b30f71ba98104383a0142f87c3f353b9131b +oid sha256:3857672efdd10b96c68375258c4e957e2288810f74ac2b1f8fe6d717e9675a33 size 3002 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index e543c5450b0..9ddbe2a43be 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f39c90f43084ecbcdf58aa2a6b5026136b314b06a9bac6a9385a5da1d55dde76 +oid sha256:109d8f652afd7ca5efafb4a4407147f5039be810b64a26b590a9702e31f57d04 size 7726 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 685333e19ad..ad98fbdf24c 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3498b8e35e4a515d341d33dc519f02959db3e4dc034290372bbb1c3b1e096ec6 +oid sha256:e6c56a05a3e2b88147155d812038b58fa82b4e3eb276df49dd936376adb616b7 size 7338 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-verify.a index 3f74ba5ffea..4022cf25dee 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd0218aa9fbaa9635d760cac341139eb2dfcc150ba4a9713a9b88203ad35a3cc +oid sha256:50e8de81663079efe19e03956e394b9639dcfcad7d635c25295fb64acb0ffd9e size 7724 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-verify.a index 311467a1777..333cfd573f2 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4bad3959e759700ea8771e9a4c103a3e91efd14ec110017a816a51195e1930ba -size 7338 +oid sha256:9efe606570bf3c40d10d397a4ff48a7e912c3f0993d5fe460e9f68a0d196b26e +size 7336 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index 0c6ae062f6a..21d49b09160 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd5d46a60f7a432a809093aaa73899868ca6119123c4a516fe507eaf393db7d6 +oid sha256:aaf6fbf64a194764fbd6339897893ab819f0c062066508726a5226ba316f1d3b size 7338 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify.a index ddba580ae97..4b44a6ece9e 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5c85145b0af8b476b70f151bbe8391c2a0f37f1623617128c1b56bae5c1d4e2 +oid sha256:95ccbe90f111ff138dfa3b4de95a87080dd6c18fdc04cf29589f1c8e3f32fd9a size 6952 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-verify.a index 7a2ac97dc03..b8f1be8026e 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:302fd6196ee87a5faeb59d4dbccdc140fa11a3efaeab8c42edd99818aefe15a3 +oid sha256:ae83362ed7af2afc620c4b689748038d3c784dbd2dc5c3cf1dbdde4be71b8e5c size 7336 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-verify.a index 25e9c3a6ab9..585eb053a91 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg12p-railgb/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0263d49dd9ecef98b9040d097f40f1302ae7e134d518fb1b304644f3e50d3b2d +oid sha256:271297f255edd449cf21b327f708475633d7c1eaa7b93998c219442842fc1c49 size 6950 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index 1fe6f011fdf..166b6287bb1 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12d83b9ef1cfefde79c2d880f4d77db4c902ab64ac3270dbcc18d88fab10e9d3 +oid sha256:579603e7f9c6a91b717b62e569b1a4240234dd9f37cd12c9aa035d129e944d7d size 7724 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 544d8d7f0dd..74715aabd19 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83fbe19bc2c67b01abcd26b168c7b5663af9333212ce318c43f40b843e0f4a64 +oid sha256:ec995458a95aab3ba36822800045cfc9839863e22933874809a57a089347deb8 size 7338 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-verify.a index eae166c5145..ff7cae3d804 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:513625fa733e3e766c4d4d392fc037ece7d3a5b45468a7a3c9fe54cd2721241a +oid sha256:0b3ec0e695311ca7fe37da445652afeecc00ce90fe3817baf46b9c9c71bd1a6d size 7722 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-verify.a index a455b5078ff..292e5a81bea 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg13p-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d98152ef5f6e820ab462f95519947b253ec93327d138c776b1a88a54fc0273fd +oid sha256:9305606e680ace33d995c127a344b2c93afcbe6e62a87af56c29ccbcd3de4f3a size 7336 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index 4c3177bfd8d..49cb6f7aa01 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c6efd4ee30d965d0cfc70170eab596945c9116e584b69b4e432a39f7ae6db98 -size 7726 +oid sha256:5910abc53a8ca8cd9519942358027ed6e3109ad369f46af74cbdda766eb07e24 +size 7722 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 8c8b4cabd58..73d554aced2 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3a0b34a549bbfa17dd443a00620f336fb1adbf48d5dcde966c234aedce61683 -size 7340 +oid sha256:c53e15169bc71b31224a0f30b972a258c030de5aed0f06fa60cee52747eeb655 +size 7336 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-verify.a index 0186a34bcd8..f814d5e054b 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f8b66ba0c37a277acdaa6abe8dbefdeefe40d548e8d8e0917ed0b917c7886da -size 7726 +oid sha256:f1fc9e53e2ff5be9700945cac6882d9027e03c5bf7f5f8bec862f8caa25c3035 +size 7720 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-verify.a index a9c0426f367..ea548ee5dc2 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg21-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0f0fc1dec6f3f21b57cb30d1524c56fefc749e726920ed1242e07cb2f4aca0d -size 7338 +oid sha256:388e5cd67c5bb814c13bc2390ecc152b6232cc9a77d21b8fe15e625351428820 +size 7334 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index 7b7127628ba..e8951ad1418 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6bd466e4aa24f25baca2422150ad69b96f032dcfce0c210702dd35915cb4811 +oid sha256:f9dbb2065cf225c2736bd16aeafd5a620912e53ea7e31d71409eaaf860d8894a size 7726 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 715f55bbf17..3d1a01e097c 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c2faf8656136955afad631a4b43bc0a6d75e6c53527b58f598ac586c82d3c8d +oid sha256:c70aeb0b8fb4df244cff1370c59def80e0906bdad7124796d120cc73ce9797ac size 7340 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-verify.a index a0650e06c28..85e10e6f942 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc83d5c3470b98d8d513a2ced5b4579ecb22eb052f3fa3cf2a35b7216ae7378c +oid sha256:783659d1b6537a072e2bf5396682b8e7959905c08f820644e17ec0c9f844a869 size 7724 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-verify.a index 5dd67de1e08..4c2e8b4e5c1 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg22-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0b1fbe304b3af1b35c05c6da8bc8c0cc9c862228d3d3aef7c1d4a6ea9644efc +oid sha256:3bcd99fb30126b8bb80d8a64c7adc273e1eb335c16e41152bd7d6cef31a1c1d0 size 7338 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index a7e96eaf96f..97f31f26c0a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b5b069935b036cc2a85968132937e763e59d996feb69e56eb8171d2785ed79f +oid sha256:42cdf9d9cc82d2fb8dcb27cd44bf7f6c4967dd1a1136e47b4cf1c7d10caa07e2 size 7346 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify.a index a1e69cb61c8..077caeb4628 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:733b69dd604a8d8b162e137e9d4b21a636f439781c6bd8c6a34ca0e517a3a78a +oid sha256:c4797c156cb3192a7652c518e350caa5c4ff0329521ba0cd2ab74a910077e0a2 size 6958 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-verify.a index d1d3c74d1d4..35ae3da4e1d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:26ba48119388eeba3fc74fc6229a94cfb9b910f38650e52638b23ff4fda8c7b5 +oid sha256:915933d23bc670d30628e36673922075b5c442e26dd10400f7b91ae04f74deba size 7344 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-verify.a index 8e27ec104e7..347187367ee 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-dualrail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3cff38c775573d40a9cf79525f572675937a664de5e188f6e6536222913eaa5c +oid sha256:ec829fbd56da637b348b1d42dbd70ea504f37418786814298ed68f11c455c958 size 6956 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index 526afea6af6..b8d397f0bfd 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:834f5e0cdca53be45515821bd33b6fec6ff731af59ce5c2dfddf874648d5bc9a +oid sha256:d8c52d2359e6913289d91c429979946a38cf591c07c5eabb6cc7c8c9c500f9c5 size 7728 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 9c9171e74f5..5b52d071fa4 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac455a154ba0a9ff39326cb0b06063c0ec0408db42d845e1dc1b1eb369670709 +oid sha256:fb6998beccd4988d6695868824256b730ee57fd1d231a3999071df4ee7ef7afb size 7340 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-verify.a index ed28596b29e..91e789d2857 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41a2f813ff9edee0218384a7459a5251d1fe9558a96ac0c1c640eca94e98e30d +oid sha256:09b5a77ffd34113a47edc84f2a403a1f9ba5eedd68b0193e1085cfa1f9d9f8b4 size 7726 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-verify.a index 180cc02910d..6f7367a8209 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg24-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:714e6f55aaf0abb0afa035af1b255718231d6f848b34cb8b210fdc2461facd37 +oid sha256:cf10826a2d291f3e52a7581e75e216aec32b7ac78b9d625dea4495a6b445ee22 size 7338 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index fbc415b09d8..67e62043ff1 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb4f147db452505fe201fe3c36b167693a3875ff97748af07039f0ca88f5fec8 +oid sha256:85594ccf4015edaaceeec7e2d85a39d478a61b7a078c81f148be0d73fd77561e size 7726 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 43e4958ce3c..52c4830ecd6 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25efaed731e8bfcc564a2daf6450bb8ee2cf4d933b8480736e92223740d0fdf5 +oid sha256:b540f2c32bf2ed5cfa21af92853eca80711d20948b448e3aadb38d6594475a4a size 7340 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-verify.a index 0bf90e5b0ac..80f5ad28efc 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba08a4ae0b0a2e3247c801713b324ce05ac3af5cc88f96c22a1bdd19ba4ec5ad +oid sha256:cb0c7d9a10ddd4c29c92a96190422cd99c8d832df42a1a8a3f30b40984cb14a3 size 7724 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-verify.a index d93d4824de1..2182ec060b3 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-efr32mg27-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90206fe3f61fb6e8d166b42d2924ce81fa4020cc4cb39af5aceef21a4da487ca +oid sha256:120b8ecbcf1ff95c34ca73568e0579bbca35530d1d2752457bcaa7376ef4e3bc size 7338 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index 7cd443291e4..1dc624068ce 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c1a7a56a5ddab60647cd0e90ac94261832cea64d6d8ac6e546dfa22ba938d96 +oid sha256:6eff998b58d8cbef883e35ba1e5cc175b4785584eaeb1c4e64916134ebbe9502 size 7688 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index c620f1a3b1f..4843a9bf7b0 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b6e0663c1e30e1f904ca06896284d9bd7d453211eccea85f6a6a8e70f1cc826 +oid sha256:e3c279e1c76cfe2aa1513a65537403b26222f2be3b587d611834e002a8498d36 size 7302 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-verify.a index d9b7f90ea6a..f0aa1644749 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ba5461a1fb6557b243e4091fee0916df921cf3011c54e7dc77520a441a951db +oid sha256:edeaa36c45f9438c59e223cd2c56478c8b3fe26cae5f12dc717b64b36b4dfb4d size 7686 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail/cbke-library-dsa-verify.a index f493cb8bb63..2921041d3d2 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm12-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:875cbc4e7c69a216b043b88a2553e1453dc7d773fa2c4ada45145b3ce2280e27 +oid sha256:526366560e06a0ddc258ad71f349fca4e9206ade9f0bdcd779d967d2afddb678 size 7300 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index 2aa7779bfbc..e0d78002ecf 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00c3fa6b4e0d9833d4556bc9e4ba07e61737b74f7105670780252a190b2bcae4 +oid sha256:52733f710cfac8c2511f5c21ecd520af0f9c0be4e601bff5d81f87986f32e1cb size 7688 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 2093e6a282d..5971d71b5a1 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4655c35543c763d71dfe86b38fcbe08c00a2c56511b287ab218b9c517af25c44 +oid sha256:0f1ec6e29bee1c5748f725d0a54e9015d9dc139f0402f8a1ae304c15acaf7385 size 7300 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-verify.a index c5ebb0e595a..5b8c79b834a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9154b18320bc62a0896cc3a2218ba4788c6b4c25150269b97413605256336db5 +oid sha256:d26a374ef340b425556986967e2973f3cac47fcb8fb182fe28cdc1ed1f71eba2 size 7686 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail/cbke-library-dsa-verify.a index ea06f796667..364bb29be7a 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm13-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9bdf8eaffc2cdf73bc8af8d3363aee145a3b0353ee333b94df156c978d308d12 +oid sha256:113917a3e79eadde55c344f084392d0adffeec78c0e462b01d0619aab095c4d3 size 7298 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index d0006881de9..548af5d18ec 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:befa2dd639ab15f9d56395a5b9c9ddfadffab76422352ead5d08e19c7275c163 +oid sha256:50daae2d567816b14401944ab8207c2a4c8573abb8c9fd23f06216d87258b345 size 7694 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 88a37ed2a0b..92150a2b772 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62777d36c996d657c5a53217887bcd69419d4f9bda4ebcf71b6e11512b93dc35 +oid sha256:6485dd710d905e74f32b4cae64d6c8f8e2bce1dd575227145183ac3a52bf1c5b size 7308 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-verify.a index 9b5fb4c61e9..50601af8d1d 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:33e3ceb74a8090f65db9f5f3c26d0762d42a8d277a90ccb19abf1c37910d06aa +oid sha256:e6fb62e14f2f73b64d44056fc9772c22f28f2f55fd5a9bd6e5106bcd6f73454e size 7692 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail/cbke-library-dsa-verify.a index e986c05c314..27f1f8a31cc 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm21-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67a307c58d08232c213496aef3f1d43186643d5947b4503ddb1144a1c43bc9d1 +oid sha256:8be1a91c82dac1990e247a2b729e01453a4efe17d51104a54c2f1a5221515525 size 7306 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index 07da37103b1..74a2120cda6 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e387fa942899b48ded8e3d3d67483dc2c8cb65a860a63f570ad90887767eca35 +oid sha256:896e6067d87acb5db1dbe450e58bc00d270838de2b116d7a079cffaa1c4e1b00 size 7694 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 74c339f1eeb..5f75dade612 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1dfa118e7efe87a4f5995cc7431c3a0ae02088d5995249710c49529605bb1347 +oid sha256:1bb20132b6a02a84d1b07ae39dc482ce77dfc8426be35d8afe3d09f9e6f1d062 size 7308 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-verify.a index 062ea179870..e52002d34bc 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4adecb674fd0cc91c2994456a2413d7f2a4f2addd863725bba92329cd366176e +oid sha256:48bbc2c33f903a3fe0efe86227ad2975d207b6ca457f974cfb79a9103bafd359 size 7692 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail/cbke-library-dsa-verify.a index 93674b74cde..ec40a735204 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm22-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c24179dc3c63be6e6c104c51ac831f839cf23d6fd393e396bb247e976439ac52 +oid sha256:377e48c12439578fe3af7c6cfecf2aff930af2e63c98c6122779fbed76e04302 size 7306 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a index 9adc2819319..080b8a84985 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9be43f3c9149054650e309bcc6b1560b4aa6c4319979d3456bc24a865b64fcdd +oid sha256:7652b268e3c97100aa1ea8177639bb693af14347278eb3b31c67345a392b9dc9 size 7694 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a index 394c295c396..34c7a29f622 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc476135ebfe78863839beeb2ff99f69e83d9e716d09ff8337c637622f66e56b +oid sha256:a849d80d79d6fc9d188916385639c18bdccbe16394bf12c9d6ec744d278c8884 size 7308 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-verify.a index 1bae1f6953e..40c93fb7d19 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail-stack_protection/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d7fa820a90846d1f2510d42df4be26a89a52534a08d88fdde3e49d0989336ec +oid sha256:29ae83864f3f7133383f905a461bba8964c58478d39cb36ac9596eafe7297270 size 7692 diff --git a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail/cbke-library-dsa-verify.a b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail/cbke-library-dsa-verify.a index 19158e1e263..90eba481f40 100644 --- a/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail/cbke-library-dsa-verify.a +++ b/protocol/zigbee/build/cbke-library-dsa-verify-cortexm3-iar-mgm24-rail/cbke-library-dsa-verify.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b69de82aeead53d15b0d76ae552834ceeda63ce68f4544db48a1bca74f10d39c +oid sha256:16003ea875d63d19337095fc67592041294eb178e2f0dd7c653d2acd53789608 size 7306 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg12p-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg12p-rail/debug-basic-library.a index fa08f60aba5..b4a8d7b0217 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg12p-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg12p-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a382004af4304d92ac94748bfe676c8bb05e947b2506681c6755ccecf8311f4 +oid sha256:8dda2dc5deecf369c0d51cc8e1ae091c1db7de996fdae98ea144aff6967c8770 size 5880 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg12p-railgb/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg12p-railgb/debug-basic-library.a index 60b1a60b80a..7dcee4930e9 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg12p-railgb/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg12p-railgb/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ff4f21f7ed7457f7f9203ea8deeef66201b46eff71341386c79f1507d6d7cf0 +oid sha256:bfca4f88ac96a7ea2b668e3aaab57c4d19d96cd1fd4d4fea9ce5f1572fa7ad11 size 5880 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg13p-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg13p-rail/debug-basic-library.a index cd2912a8d24..8cfbbbcf14b 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg13p-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg13p-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2edfcb4efc3738155db943cd41f51ff665294dcc92b4c6809df2198ff0f5c44d +oid sha256:80e9399256b2925e20d5412052876a79ef9011d1dda7492da96b61859331441d size 5880 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg21-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg21-rail/debug-basic-library.a index 2f5bdb44f8d..de76d931cc3 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg21-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg21-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e738ce23eda1afb378a553ebd7a93382a14ce4397988cb5d0a19b145c652fff +oid sha256:65fcd4a014b645fc273094ed075c62e35151711c9f106c955c5ff6eabc5e485e size 5888 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg22-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg22-rail/debug-basic-library.a index df1c1e9fb54..35d37da1826 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg22-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg22-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d32104ad3f51672165cbc3cbf56fff671558198b16d1d12aa687d1d5fbe200a +oid sha256:68517b61f1ce5220d8b95bbc5870953ece57ce08ec72df678c262b9f96bfa83a size 5888 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg24-dualrail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg24-dualrail/debug-basic-library.a index 120c800191c..de76d931cc3 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg24-dualrail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg24-dualrail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc8df5ecb84da6efd6ada76986b49aded3b2770dda953917185e60a2cf65b84d +oid sha256:65fcd4a014b645fc273094ed075c62e35151711c9f106c955c5ff6eabc5e485e size 5888 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg24-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg24-rail/debug-basic-library.a index d19074fa2ec..6ec8f1d2187 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg24-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg24-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c9c6cc9abf0debf9682e32c5021b51d20503164e6dca24d7bb421030435226b +oid sha256:78022f5a154f636830bdd2fc7fd1fd4c778c8fc7ad0beee24f6fd8a73cc6e28c size 5888 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg27-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg27-rail/debug-basic-library.a index 120c800191c..3d0144d5ead 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg27-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-efr32mg27-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc8df5ecb84da6efd6ada76986b49aded3b2770dda953917185e60a2cf65b84d +oid sha256:9f0b67b78d41e606a89cfa64f5018413052f10c49d861a185dfceb91bdd0a937 size 5888 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm12-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm12-rail/debug-basic-library.a index 6192922bfe5..bfb16c21fc5 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm12-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm12-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d254f80a2da2fb8b44b830da9860fd9c6204bca164b582a090924444f7b5769c +oid sha256:60198bf10e7577c46f697cbb80121fc8f54fafeb55779de021f849de3821bd2b size 5880 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm13-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm13-rail/debug-basic-library.a index c2d450269a7..3d06939bda0 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm13-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm13-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:969f5a1c50ecfe80673a8e8686d416970b2908e36cace2b73df7928830a84119 +oid sha256:79c984ff97d47ab9e0c6c12e761e45bb5d03e980010fc2945e96038a2fa5c2e7 size 5880 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm21-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm21-rail/debug-basic-library.a index 70c3404f2cb..9e39a2b45de 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm21-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm21-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ec37d8604ce905d2a98382d86839bfd7907d1edf838fc014f310e61f1522ef6 +oid sha256:c4e4ebd6d2ba4ed6ac1fdd31bca3ee790fe6b9533774464eb2c38f0170486001 size 5888 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm22-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm22-rail/debug-basic-library.a index bafc8e71baf..4f34707121b 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm22-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm22-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:378ca2fc185ff5b5e066c50716c990f7ecf0e5e66569f200e647de70ecd98668 +oid sha256:532f9619733138329eb9b5e9041598ba71afd18032a44865c0a59d23a3626076 size 5888 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm24-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm24-rail/debug-basic-library.a index 604e03549b2..bedefa1affc 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm24-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-gcc-mgm24-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0effc28b2f0ca1722d07dac51dc61a7ce50a30afb06b35b6619ed098ad753cff +oid sha256:65a93ae6442de3cc6ee66d0706a4a83771017deb9a517201df798ea7b2dd70bc size 5888 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-rail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-rail-stack_protection/debug-basic-library.a index 6430b997102..0d134329ba2 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-rail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-rail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0df668ef7025fcce1a8d7d71d1338497b0cf0755b29293e9bf808e5d057b215 +oid sha256:8a5744cabb006eb9ab1e04b8dc21749389f328254581c72b85f53cfe95f93901 size 11798 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-rail/debug-basic-library.a index 875032f173d..3432e30955e 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6680e67b10684267ff371c6eb9372cba6be3175c71491867be7f36b2d74950d0 +oid sha256:ef83cd60b28a346770ca3652dbbb3619da5bf55248b9eeefbb547fc7f9690d7b size 11292 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/debug-basic-library.a index 8e0717e9008..a7761a5a144 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a319c1933db67bd740bd22ad33f67a1c37a611a5c801005f34ee27c9c4d7de2 +oid sha256:da7912845d3358368e069d3593c76da52b91f7bf0111346f80320e0bb4e5094e size 11412 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-railgb/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-railgb/debug-basic-library.a index eb26bd02f6e..20976f03f54 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-railgb/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg12p-railgb/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:784a42bd77c50ba0ebef662a58541572eabff3a35450873be3c1260b40fd731d +oid sha256:e3af703207d1a59486daa98a1c57f7b4fa186be484c7bc30055f67ac24917bdd size 10906 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg13p-rail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg13p-rail-stack_protection/debug-basic-library.a index c85cce8272e..c76ec62d22a 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg13p-rail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg13p-rail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:760323a8ee76e70aefb851801e8da649a6c1c966f79043dac614f04e5adb18f0 +oid sha256:9279d56016397dcb7db42caa48237d7a0bbf2bc9fe61d052da6af10b1fb57402 size 11796 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg13p-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg13p-rail/debug-basic-library.a index 231ff1bc3b2..6052c0a3528 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg13p-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg13p-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43be4f35b6cf0265d5c517cf566749bd28010722e772dbdfc532ebc6748f4fb4 +oid sha256:33ba2fd47b4967c1185208bb8e88fc36acb9106ae3ebd5dab4b32546bc26df1a size 11290 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg21-rail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg21-rail-stack_protection/debug-basic-library.a index 1be21a0fee7..7b8e84d16b5 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg21-rail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg21-rail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea746da24778a8b2d7641f5089f90b6ac0a2e838e8109ea5bf9225934a5f7160 -size 11802 +oid sha256:6edd4b9b7755f5f0beffa1ec850854f4b3ca8ff88f9fbfc8abae6a0efc798ba2 +size 11798 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg21-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg21-rail/debug-basic-library.a index 4b5684d64e9..0e8dd94ee3c 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg21-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg21-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2970888c414377f068bdb426638afe372cbff95fbd3afdef803f270022f55efb -size 11292 +oid sha256:338f7f40d6447ac90a82d26256c64452112083fba3e8057f4c2a7b9dd9bb4e94 +size 11288 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg22-rail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg22-rail-stack_protection/debug-basic-library.a index 16ad83849b0..94f0805b7a1 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg22-rail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg22-rail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12b8fafaa70141e8f101dcf4d426f02641f6323be3352375434cfafede6e6331 +oid sha256:9a6bc38b1a27e70f057ecb12efbd771c5cb7515cda367455a7044edccdcc0309 size 11802 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg22-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg22-rail/debug-basic-library.a index cdb74f4af05..b378b251089 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg22-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg22-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75a2ad93d7cdca9f2d8bf0f776af4af0f27eee39a6cdf814f96f66d210a67697 +oid sha256:3aaa01636a8cd0ea3a81ea5b4a1d14c860bd7036e36a51516e73766cb55622e3 size 11292 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/debug-basic-library.a index 6dfccf6255b..834134c09b0 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a00529f75a97e630f57bc84af123dc6daee0ec41fac1da74ca19fc6d3248485 +oid sha256:0455d307070b3b71fde025ae4c0765f754043c29ba9461433e06a212e83bf1a4 size 11422 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-dualrail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-dualrail/debug-basic-library.a index 450f797408d..002522bcf0a 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-dualrail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-dualrail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c78a295eba30140a7a321b0588c789245f31575772c778e786bc79ecc2a62a4 +oid sha256:4333aa38d1f085c2e4018663ce4b47effa58f3cc987c26a9073d4b9f5ddfbb06 size 10912 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-rail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-rail-stack_protection/debug-basic-library.a index c9b5a147576..db84e4c3969 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-rail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-rail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f6b80118a4649718784e093bd488b679d6a757b1e9a704ac9f0ed20dd090ed2 +oid sha256:530444f45bb16f09174a0a6e7d8d670b2b4a818d60b3ba6014f8748a8b21113b size 11804 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-rail/debug-basic-library.a index 65e1aaf5e18..c9086d00de3 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg24-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79af2b7895cd9e676d60e41f4bca0fc03111248efc1bf6e0b63bf2a0ff85a355 +oid sha256:88e4056b53993246acb81b328307e916bf9b4137c90962d0a2ecdf94ea5a4778 size 11294 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg27-rail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg27-rail-stack_protection/debug-basic-library.a index a8edde8d347..d11091a1d59 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg27-rail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg27-rail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:46a920ad38b1a28e5554effe24c87d1d565e7734f8963f0cac80041c6df664e6 +oid sha256:4d8c6da987a1abed11e20d8ff1aef76a55bbda9d22b64d64be02ac4df51d93a6 size 11802 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg27-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg27-rail/debug-basic-library.a index bd78ac9dd12..14295f23d30 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg27-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-efr32mg27-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a97bf1aa39bccd0d53aa9779c22601e509842b3ce60df8a2e24a820472a61360 +oid sha256:7e81c99db4c27a83d18ae1df61b99e2c2b1dbaaf701730813926a333e226b035 size 11292 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm12-rail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm12-rail-stack_protection/debug-basic-library.a index 570436d3b1b..6ca10773f86 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm12-rail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm12-rail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a668e5b4484321bc24cef23a42cdbb7dd8b08b54ee143f01f272f2ad5d03e53 +oid sha256:cee0531c91831ce3f7e1ea679454e60e5405641e435567f405d9bf5c989a99dc size 11760 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm12-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm12-rail/debug-basic-library.a index e15a5c3371a..bd9aa3df5d1 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm12-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm12-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f411307a95bc61b83032eb7887e0c3774694d84e17240c232e4f539088083dd1 +oid sha256:c4264dc72e36d44a8eedfc54049c608009319b8f650df32909ed540355299989 size 11254 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm13-rail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm13-rail-stack_protection/debug-basic-library.a index d586fa1ef33..321e99f1ddd 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm13-rail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm13-rail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28a1b81669e710c129e323ee74b615643f80c4f3ac36710ba43739818be753fb +oid sha256:0e22ee95909e9e10b90f9eac92df9f921b53c132934e1e61b1f8bc298ff0d01c size 11760 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm13-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm13-rail/debug-basic-library.a index 8edffc6b8f3..0197c44da93 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm13-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm13-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a344c4223b08a7fb7a8806ede42f8844fe83315165377401c6386d2052177604 +oid sha256:9457f9d8b61c9feff52ec533e35b6190178cc5359111367afc82d5ed84cbd837 size 11254 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm21-rail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm21-rail-stack_protection/debug-basic-library.a index b25bb4ec6a3..f4defb884f4 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm21-rail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm21-rail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e34e19a2089589a2b5ebc16b3e53960ea6c674400c817982be0e48b4c1f1adc +oid sha256:1264517bdd9446d96a2f8b290d0102699f1a5945d8237410e1fe4ecb21ccfe8b size 11770 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm21-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm21-rail/debug-basic-library.a index cd10c63e99e..ceda6f1f5d7 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm21-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm21-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d5c39cd24ca1f40e95b8116acadec58762388b0fb93a35b50b66b070f2db3af +oid sha256:641a7b4948958b6f93da6ecf6809956671f2cc1979fc2ad0a05880914e998fe2 size 11260 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm22-rail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm22-rail-stack_protection/debug-basic-library.a index b161137b406..35257243ee2 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm22-rail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm22-rail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bcf0b8345bec48969efa70c2f48f3eac4420866860d56663f95bfd4005d02bd +oid sha256:25610f337d63928a45215ea0eeb48f38426997065309f6e5b2c451dc4b4d63de size 11770 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm22-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm22-rail/debug-basic-library.a index 52c400ff9b2..4f4f3c7e796 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm22-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm22-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3764da421bc367b73b6ced7ee39ab77d301c3ecc62afabe226711d29a8c4ea80 +oid sha256:20b5c61b79e74072d97e6675fcb14eb5011f94a2820bf68a279fc54613a3981b size 11260 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm24-rail-stack_protection/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm24-rail-stack_protection/debug-basic-library.a index 61915dcbaa3..9589ad2ce46 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm24-rail-stack_protection/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm24-rail-stack_protection/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e03fed81779b21d8567200cd5fc0c4c9e76ec55156e379c1daca4ffdcd4d8667 +oid sha256:59303f6d81d8c74e74469c56e1712b020c7f7297d6a09ecf48d62f410993f7ba size 11770 diff --git a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm24-rail/debug-basic-library.a b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm24-rail/debug-basic-library.a index 93574281d9e..365a1e15806 100644 --- a/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm24-rail/debug-basic-library.a +++ b/protocol/zigbee/build/debug-basic-library-cortexm3-iar-mgm24-rail/debug-basic-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f63eab1ddec4fac83ae3d0f0fb48ca52981c0d675b00c6acb9200c597222de90 +oid sha256:4148eac24853494db2b5664284ed5556d180defa6d995371a930695983b95581 size 11260 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg12p-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg12p-rail/debug-extended-library.a index 71fba2c603f..8551e17cf18 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg12p-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg12p-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd8c9f86ff9428b40df2e418e7458ee41a606e0cea5c3a8ba95f28804f9985a1 +oid sha256:dbd099aa6d7558c3ad4f668270c737d0a07d6ce8da9423a4b02cd244f686a78d size 4120 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg12p-railgb/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg12p-railgb/debug-extended-library.a index a78af00ef23..9ce33e8eecd 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg12p-railgb/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg12p-railgb/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c977548460fb8da07ee6b910fd8864253fb6d4788151554269b94ee59b1f2ee +oid sha256:e161c9bc90ddb17fc6f467635e8fd9bc73aa9a31428760402574b2fa9359b490 size 4120 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg13p-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg13p-rail/debug-extended-library.a index 4b513802216..0bb9a183e10 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg13p-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg13p-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0af1be14888fb637db5f55ed1090ae6a062b0c6ecb4f60c5676de3d6fb684090 +oid sha256:97d32e80e87bff14d596f81b6373072b7e59ae8bbe459797ad4b8057a4460d80 size 4120 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg21-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg21-rail/debug-extended-library.a index 63abfc9d5f7..a77bb9793dc 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg21-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg21-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51f054a15b11c065e6aa2ed971278e692e7bf63dee10701d08af52e8e675cee3 +oid sha256:281824c99b3c6218df48ae241c28f841f8fc2053d3c973a8055780f2b12d84d8 size 4124 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg22-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg22-rail/debug-extended-library.a index 250a79929ac..b4148232cfe 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg22-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg22-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eab7d3726b9c7856a45bcffcd97655010aa5c31cb129848936b08f1133ea6323 +oid sha256:4e370bf45af96b90efdf644e3e854cb4649f132f2024b60205dab7a62e1df531 size 4124 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg24-dualrail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg24-dualrail/debug-extended-library.a index 250a79929ac..a77bb9793dc 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg24-dualrail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg24-dualrail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eab7d3726b9c7856a45bcffcd97655010aa5c31cb129848936b08f1133ea6323 +oid sha256:281824c99b3c6218df48ae241c28f841f8fc2053d3c973a8055780f2b12d84d8 size 4124 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg24-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg24-rail/debug-extended-library.a index 7c49b99e985..c71ee00b025 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg24-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg24-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e290d5d55a60353ec4730ce12b69de662a13471378138671d2f6adad5973dc66 +oid sha256:6c0248a9f2306f6f1e8355109c3ba76bc6cd71980bca8548d806434edaf48f7e size 4124 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg27-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg27-rail/debug-extended-library.a index 250a79929ac..d5c3ea63716 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg27-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-efr32mg27-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eab7d3726b9c7856a45bcffcd97655010aa5c31cb129848936b08f1133ea6323 +oid sha256:ad1b0ce5c5035d94023e19b87b6062a674d47581e6b906f982bc62f4571907bb size 4124 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm12-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm12-rail/debug-extended-library.a index c6fcdf27048..5e22a0ae3bf 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm12-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm12-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:76116d35100c3893ed07b3130d9532a5b9333fa73a36301031679f2789a51858 +oid sha256:b380520bbd2b3f0efcc70088f0314392fecbbdb6c4531332544c902b00e7a67d size 4120 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm13-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm13-rail/debug-extended-library.a index bb3fed8b646..7ae3b243447 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm13-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm13-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ff08511399fd6b4f1bccec05986aa7b3038e6bd448e0acea83a5a49bf9688a0 +oid sha256:29342eab7e3e7cf15df157e08b6ecb478650532872027ec5da3b2af2862ec494 size 4120 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm21-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm21-rail/debug-extended-library.a index c06e87a3e0f..e9581de53c6 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm21-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm21-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7c9f8c344ba69e5113f80f30af04de2698e93eecaef803054ff3d85d7fb0e62 +oid sha256:d2e6a0873a9df1baa52b546f0d001e9a38be9357a50f69a8639362c102847e0a size 4124 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm22-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm22-rail/debug-extended-library.a index cabaadd6ce6..d93ea3f8464 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm22-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm22-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae91d7030fe73b7fa57ea497c3bf0c65c415c953aae91a1181f755f4de31b8f5 +oid sha256:07cf0c57d4ac242b68810cdac2b58390a7340d1d2ab4aed8894c1bd7ababf48a size 4124 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm24-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm24-rail/debug-extended-library.a index ccd090e2c63..4ea5967ea9d 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm24-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-gcc-mgm24-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e50df2d0f17c88a30fb714c9e2f614d3b13bd7795bb2bad0d920ed86f5410a7 +oid sha256:d8baf9c310ce1c797e3124200bfb7317610a50b736abb32760b080e10e231309 size 4124 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-rail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-rail-stack_protection/debug-extended-library.a index ad63a37886d..7b4251a0e31 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-rail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-rail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:021fc80b9d665e804f1f922891ef027ebfe6e4f2739f09993af9d841562ce22e +oid sha256:81b4c56265430c90e66860afe14de435221c77e7201d7871cda91d02d6d0a859 size 8764 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-rail/debug-extended-library.a index d9f60a97a4e..a06109a761f 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f38385c33941de2898048ce617c929b0f01a1c31b89c4d1ec786ccf5b146ed19 +oid sha256:338d4854e82e42d1fc6ebf6f9c769eb8c21488cf24743e7311121c514ff6e7ce size 8364 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/debug-extended-library.a index 0658fbb83e9..caac5f46083 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9448488bce6a6d082c4232c8e81c7400e346b054e225fa21e0fba439466a3719 -size 8380 +oid sha256:3d73e9c25d7cae51b9afce49166c2aaf83afe8f02a287168655d56656a567284 +size 8378 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-railgb/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-railgb/debug-extended-library.a index 9dabdefc4f7..471c9b43595 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-railgb/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg12p-railgb/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d0fe030838b562c31d9b101ef2eb92ef507ae03a6af5499c244928391f02dc4 +oid sha256:2a053e3f3677cc64b37c4ef642c0eb3844e37868285068199c125f3983733438 size 7978 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg13p-rail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg13p-rail-stack_protection/debug-extended-library.a index 7b7cf0e8f1b..25560dd89ce 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg13p-rail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg13p-rail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ae8df98703d314844163de190e0f5acfe22658277295708229d369f016b80f9 +oid sha256:9ea2caa701470ac6340250f31799a27fdb48c75f7edcd565fa8d104732403d92 size 8764 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg13p-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg13p-rail/debug-extended-library.a index f5a1bb5fb53..f91e521cd3a 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg13p-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg13p-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d451137dcc1dca95c7be582a01d707566e8f7f62433bcd8ffa93ba7a81a57d9 +oid sha256:a388c1bd693b1d2ff1b3156862c7045da7029d641bdbf2a3bbd31f21ae39c84a size 8364 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg21-rail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg21-rail-stack_protection/debug-extended-library.a index 0c875b555de..e48acc5efd9 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg21-rail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg21-rail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c7c0fb0388667fe950f5ca89de0a6bb5f430b3ae2e4c348a31cd47682e75181 -size 8766 +oid sha256:06a8ebabdfd8a3187328a8530b6ceb3029c87152fea0ba8b6a8d9840133e9f4d +size 8762 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg21-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg21-rail/debug-extended-library.a index fabb39185ee..45792a02130 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg21-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg21-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e92da8a46dc191cb4b875e0be09b3985a4beca01b0c6e1bdd4a1feb25b6608d -size 8366 +oid sha256:445deb700e86ec836b564f20655122638345421d580938e7ab75e8db2c7acc6c +size 8362 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg22-rail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg22-rail-stack_protection/debug-extended-library.a index 4ad151f44af..e23fc64a90a 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg22-rail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg22-rail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a90aa512bc68bdd5dfdb8ec1e446ea8476c3d193a8eebc10b141ecee454a037 +oid sha256:76a62db83681a8fc47e5332108d39ae0ce00f7918423a1a444b91077b2a9cdd2 size 8766 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg22-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg22-rail/debug-extended-library.a index 24e80255608..41fdf875ce6 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg22-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg22-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15f7e9231736d613d77b4a254800133a156d7f946d661a16d1dec0e047cc412b +oid sha256:6c35a6bb5d948e4c9fc46a66eb2f6752ac65df3e2c6c38abb0b50be14cb11491 size 8366 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/debug-extended-library.a index 614158fc660..30a2eeec2e5 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7411e5bd3f46d55b717212a2236fe4f9bb4c4a2e998068c178478b3ff6c58621 +oid sha256:35e13942eab0b6cf81ae5fb5c4d0f8c304c7a27d9f0a93d0d18e125a6e6a4665 size 8386 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-dualrail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-dualrail/debug-extended-library.a index 9fe7d91387b..c3a08cac861 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-dualrail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-dualrail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:098bc57a4f13cc9f90813dff73082f1def5aa17767185320fc97223754f175f3 +oid sha256:c0f88870678ba617ebf072e56492dca838024a46607f5b5fae776d8f74a610ed size 7986 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-rail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-rail-stack_protection/debug-extended-library.a index c67d9bb34bc..a624018b726 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-rail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-rail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca49a9ed3dded39df418a4b8342731951846d02b09780a32fd37e4d4f7b9ee65 +oid sha256:67268658745e7c79b2181a833b68fe2479bce9cb6d42e30543fa3fd29f77e824 size 8766 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-rail/debug-extended-library.a index 72230cc3ac3..3be4c6d653d 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg24-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e6abbef1180ac1702cdfa25272d48582dca300b4df3bfaf1bec6eafd0e11279 +oid sha256:fa8aa5ffdff8d2b8037bce9939641c3b7e7654fdcc198ff147c12df010e0f53d size 8366 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg27-rail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg27-rail-stack_protection/debug-extended-library.a index a8fdf9ffb50..2543271a87d 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg27-rail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg27-rail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0110fe7f42b7f34f3da6e46bcb3e6b76ae7a400ac0f6f1a80624338e4bcab16c +oid sha256:3883f17f2ac3114de630de0dac57418b3927bcdfcd03ffd17e59f76de0a8bced size 8766 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg27-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg27-rail/debug-extended-library.a index c896ffa6055..9f19600c1ed 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg27-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-efr32mg27-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8222d9e7a691700b62ac03ca86ed8edfe3e7205af7ea2d8bead64487b431f833 +oid sha256:f43aa6ee0856d4aeae9478a0ad63cb7371eb3a28e8c2f2289f29b525b6283d5b size 8366 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm12-rail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm12-rail-stack_protection/debug-extended-library.a index a927c3fbaeb..6ad063a7264 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm12-rail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm12-rail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb6618cd2f89d8d3f72ea823f3e404af716fb31d4ca4a150a1d9ff281b746218 +oid sha256:ad6870d546213d0bdaf71f24a32f21735e3c20c663c6d7220c717a4251a5b86c size 8728 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm12-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm12-rail/debug-extended-library.a index e3960665193..7e4012e38d7 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm12-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm12-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8da6cff6ba9a1758657f0bebaa6cf5e82f3d0292d3d9829be62aeef83e81f36f +oid sha256:d568e248cf67a826af8013609c753532c8321ed3fc06f61ea8558b26f9d75ec7 size 8328 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm13-rail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm13-rail-stack_protection/debug-extended-library.a index c3620b41450..55bcdc55d6c 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm13-rail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm13-rail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22a6af3b8f7d4dacd08e08a8866de6fd813f9b01449e71a175a2341ef695ba1d +oid sha256:f7f460535d1c11232c1251697ccedb61930143a08eb39b477f752ca0b83f18bc size 8726 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm13-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm13-rail/debug-extended-library.a index 99e3a129030..9be002fefe5 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm13-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm13-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc8ddfa8e6d2547d1ac17abbdfa9f2f4e165de4321e5614dfdeaa22348dee70a +oid sha256:e28e331e0dfa4125d2d3f2e552035973904714f67c49d53a74f3853625161bc5 size 8326 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm21-rail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm21-rail-stack_protection/debug-extended-library.a index eacbbe1f717..cbf2ad2226c 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm21-rail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm21-rail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63623c272930e2bf55545681ead8675b32e87d3ab1b69558e9029d4b19b60272 +oid sha256:03d50500c75530361542138e91e1fff4eb3a08925ff3cb7196c0c1f25e5f84b3 size 8734 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm21-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm21-rail/debug-extended-library.a index c3c22ce6823..dbed5880703 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm21-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm21-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04c5b429c7c121a216e7b50ee229d7e5fcab5302f3f20bae73888b1cdc323592 +oid sha256:8c4d548899351f454b7ca69f390b1630cd701dffcb1aa55fddd01201ef14a86f size 8334 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm22-rail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm22-rail-stack_protection/debug-extended-library.a index 73046630195..89e7ac46902 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm22-rail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm22-rail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f590f53dbb122bae2bfb6d6378a9f179d974453cd1deaac6508ee8073a72e602 +oid sha256:25b0e90f1916f69e1334f341fd20946b5afc2442a10aeccd99626a4a611cdc86 size 8734 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm22-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm22-rail/debug-extended-library.a index 0312403b664..428e72a6cfe 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm22-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm22-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e111a062dcf33776aba673620175d2668bc5aea0c20146005159ffe960a071c9 +oid sha256:2eb940daf988497184e47cd11fe77f2d3c7272f98d5639b787de4020b353f745 size 8334 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm24-rail-stack_protection/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm24-rail-stack_protection/debug-extended-library.a index 415f43c5226..5e4d762a274 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm24-rail-stack_protection/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm24-rail-stack_protection/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:187038628838509261a1266b94bda4ccdd76701e9139121391a818cfd0ad1835 +oid sha256:890b5fc662c380b5bcf06fcdae266379087eb6cae2d58f7bbcae61d506d23177 size 8734 diff --git a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm24-rail/debug-extended-library.a b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm24-rail/debug-extended-library.a index d22b1ddcf84..109895b1652 100644 --- a/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm24-rail/debug-extended-library.a +++ b/protocol/zigbee/build/debug-extended-library-cortexm3-iar-mgm24-rail/debug-extended-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d9ce7f77aa9a24b6bd02630c7f5b0ac39c5d3957d424d9a6cea8206d81fbe2b +oid sha256:92e47d5259dabdb075f955c097d5d4a006b20655af2949b082e261559a005fde size 8334 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-cpc-library.a index 32aa3a84a3f..998361b3dbb 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a1090d53ae055eb62870228fb7d5d82bafe36fa1d48d76bb79023b1642414a0 +oid sha256:fdd41fd402c7cf906e0d2d5f8217ca5bd17cb10f5bd9702b0a025a854f9adc02 size 63888 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg12p-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg12p-rail/em260-cpc-library.a index 99128fadf46..2a6a7004006 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg12p-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg12p-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ad6c8167e5de433acb943bc22f66cf73f25fa4992a180ebd8ebf927036c1fde +oid sha256:061db852474eb50772face9cf9a795a285439cfa2263097e6ec00ab6bf45cc33 size 65346 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-cpc-library.a index 26be688ef77..0588010c6b2 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff5d7e27a62fb7936639cebac46a1e50dc4ecc2d3eda5c945365b3d945404c01 +oid sha256:4890aca05144c9695c5303697da20d7cf6d85f9f4d3e46f598bc29c4de8c0059 size 63888 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg13p-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg13p-rail/em260-cpc-library.a index 3c8b79a8b73..97e6d70bfc5 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg13p-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg13p-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c8dadfed8d32fc88f5b1e12fbc6e03553ba8f97393749990f5d2cf867334b9c +oid sha256:4252e3c319843f6a9d5c72fe2d9305a34ea7769dd9fc801b64d1c7389da52d7f size 65346 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-cpc-library.a index 720dfc8eecd..cc43530d88e 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a146a391f2d64a6e47087bd9eff7cbf9aea57995210272b7d4e25f06c56aa98d +oid sha256:726ec9eaf260fed67eeddf599fdddd40f6cc29b7e5c94f64d28182125eb744a1 size 63940 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg21-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg21-rail/em260-cpc-library.a index abafd425c01..41c8793aee3 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg21-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg21-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1d4db1a246930acb3fb232411dc19f274dcb62c1df559a648a39f04ebeaed1a +oid sha256:8e2b6cce28a52a098895c152e5bab080469ec45f4ceaac9205d6cba0ee9d2b93 size 65406 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-cpc-library.a index 286f1746db3..faeeac43381 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a02e75cbd73fef08697107661d9c564416c8e9b2c427cd002e6406380b904e17 +oid sha256:57c30ab1d74b16866526635a6e6d333b2b7a148fbfa42d6ce4da2eff101e6b5a size 63940 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg22-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg22-rail/em260-cpc-library.a index 506424d9db6..f9cf5035622 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg22-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg22-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aba15173522038fcdb8455e8e2ace3f9078b6f0f8e6f3ad8a6d9d9a6c264ef90 +oid sha256:26ed3c3aa4edb7f1558e55e18df84e9d8f346dc6642dc4bff450526ca274bdfb size 65406 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-cpc-library.a index 27b6c5d94fc..70e57813942 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37ddf2e2d7daf3e0e5566aaac7ffa55db04c7fe92be9d808e9fb253bb59c0fcc +oid sha256:666349a4997fd83c500b99acaef2fd2e9ca451816ee938aa45a6448fb58b34d2 size 63940 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg24-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg24-rail/em260-cpc-library.a index 94482df84a4..25b50e0cc66 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg24-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg24-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62469df67568e223b6e2780ca3efef002d30a55fd8a10d63dfb3ace9f2efae97 +oid sha256:11f3dd6e1571303c7398e978d43f479b33f197a3dcc88422d7f87f680fa9d040 size 65406 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-cpc-library.a index 3519c473948..393d7de0474 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7b70e32d90a0b0e192ddc7dbb9bb9b51f95d26cc9a9f7ef8c946fc94f1da3418 +oid sha256:cd9ccd596e6311a153c2befd6abcce0e4206bcc622b17658091e93b3204b176f size 63940 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg27-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg27-rail/em260-cpc-library.a index 1ac96ae22e5..d462414966f 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg27-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-efr32mg27-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7ef963eb6d1b266b5b8224dc8cde9112d7f20c80152b2febee14942372dd096 +oid sha256:05beee5415c9b81a0bf0d00a6fcc438930eb0c0ed6538c0d03e9c8c7dff4849c size 65406 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-cpc-library.a index 938ec3cfe9c..be78413f258 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57f0f72492f83c008300d49aac0769d35605b91f06a17623f81149913acc77f1 +oid sha256:1fd22c5865cee7e196255ccb929a91065bc2f6e8387745ce077a0d1eddfbbd0d size 63888 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm12-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm12-rail/em260-cpc-library.a index 98ce5e37313..aeca044fe5f 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm12-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm12-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b919af405075a1959875fcb7063700db28e1bde5c9dfd910131e0d52dda50b67 +oid sha256:66032114bdaa018881ff6ee8571b0d1eb1fa2841ca019fcda8cd6a7780161240 size 65346 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-cpc-library.a index 32aa3a84a3f..97ccfeb9ef1 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a1090d53ae055eb62870228fb7d5d82bafe36fa1d48d76bb79023b1642414a0 +oid sha256:64cecef0a9f770b4c7eff73614fbf6b22c75877e0be1509a860533b3fd1b5323 size 63888 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm13-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm13-rail/em260-cpc-library.a index a9308758b8f..3caf641167b 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm13-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm13-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab08bcef319921a91b1534eedb07a61035efcbb03b805a3478c1e12a2f04fa38 +oid sha256:7964b0c4784d5aa9a5ce0ad96bafb83af61644157891c76c88cc78aab988bebd size 65346 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-cpc-library.a index fd8805a4d70..99a0e83cea1 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c4c627c7a6333d131003362e17f3d74e1f317cf2521331662980fa40b0d4647 +oid sha256:73ac8f087f0315bb50af149f0fe2f2eb2bb53e2a5168ecaace04c869e2ae1780 size 63940 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm21-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm21-rail/em260-cpc-library.a index 7cdacf2d929..79a851fe210 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm21-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm21-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4ba119ac224a1c84bb7d8a37643c02671468d3659b41d54b3fede9776f29fab +oid sha256:12df0f710be94d1dfba14c4627904f2682a14da017405f20c50e0a500f2a9c2e size 65406 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-cpc-library.a index 5e19816e882..19da80eca64 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd4c3938b56d3f8fdd8c9c482ad47baa51b2666fdaad6c42e71403d22743458b +oid sha256:91beff2a2cccc1540f64951b23b12451b2b367535b8f6730c5b35c1b4a8f9f46 size 63940 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm22-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm22-rail/em260-cpc-library.a index 1aec08720a4..39abb65f6eb 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm22-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm22-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e78de3c6b5d3d55a34eb0848a0ae1b12e368531bb4ba22bbe6fc5b31be7930c +oid sha256:703509727e85ae02c9919244c88abeb95f226574084e1b6e579c9ba53f2e411d size 65406 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-cpc-library.a index 9c9d968ed29..965e37b1f12 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3fb7b629f216891d14757e4ff250f7b8d6848d693b0a8e73baa1ac8c0899c5b +oid sha256:4d69583ff79d558d99bb31b3cc57f2acef05f01e98d3c3f15e4882747fbed737 size 63940 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm24-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm24-rail/em260-cpc-library.a index d7b9d335d27..cff7bc4b2ef 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm24-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-gcc-mgm24-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fba3a694397cb0b04b5584ece279075a117730a94b6c26f1b23d9cb0e9bb2359 +oid sha256:12384def5d4e5c81948bb3d61e82a573f228f20c64fae11f3ebd49366f411559 size 65406 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a index 9d85776ea9d..166513ac79c 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ecf7ee2f7f0ace64f4dd327fd57d9524e9b29a9dc4cb3f485dd139378cf90fa +oid sha256:83ff7329e11fae14bc8dfaea21712e4411ad5bd278439b44970bc58f46718b1b size 175166 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-cpc-library.a index 5097d44ba89..f774d01213c 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ed99f51b58837d659e871961b792766c27de29401b6a957ba36887f15e69ef5 -size 173092 +oid sha256:2291234e02b794caf69a940576dab5311429d98ff70bfebd0df42d38b312450d +size 173078 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-cpc-library.a index a8402188778..67dad4596d3 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:94d1291512148bdb1f27ddc8a862bb3bc823a568dc8ce599f98db200c6f253d7 +oid sha256:368f3a6ab0883dbdb34c59fcf4eb5aebbe5c6aefc7eb46666e230efe7118ba31 size 175832 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail/em260-cpc-library.a index fb15129124f..189fdd11a4d 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg12p-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89b50d062e4afa9cfd27a6c6bdef7e5b786b0d5eba2d7abed3457e5f7cf202f7 -size 173738 +oid sha256:cba4c0d9a52c648e6e752cee6dc845d968810d49f2d6cb99677879ad931fc865 +size 173726 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a index 924ca2a1502..60cb6346ecf 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75798c158000789e67ac0efe1ab44d618968f7f0026e656fed5af129e55303eb +oid sha256:3dc0a6ad7305d19c9aaa8dde10e74a4508cc35acd5bc6d9812f3b2371f46cd5d size 175146 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-cpc-library.a index 830d7c632f8..87e5a042d5c 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:36d1d8227209413f9ab13e09fd1d7158334c9ea0b6cb311c674157c5695bd94d +oid sha256:1041e023b9583d342c779d5322bb68c669737e803d54dccb1799191fe46ad7e3 size 173072 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-cpc-library.a index 4fd75ada86c..21c8ad9990e 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6631773634939128bf0ad74cbbc879c9ac50013d80cd1590f34ad47b1640f0f0 +oid sha256:0ee716b2ee97502745a89951fc81be92a6c3171a79482d21008e9f57bd9fc219 size 175820 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail/em260-cpc-library.a index f8eb90ce490..abef9025854 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg13p-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:225e1caa09d1bb6ed1995ae159842cfceb3151c411490b5298fe04627e409411 +oid sha256:b06a872fa2b92514fac2f29dee53a39e179d3e517f576084b65b69d8ffe4fd3e size 173718 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a index c6de9f844ca..ed7d0429761 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e6bee4291cbcc4f7cbefe71185d6476a6ab94e7e4931bea2d15cffbc160303e -size 175542 +oid sha256:9b559db2a76f272c8ead45184450fa60ad085faee93130bfef209a6af672062e +size 175488 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-cpc-library.a index e855f7c12f9..9be28379f5b 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f843313c9b356ea533c78fe912435f949f8479542819140270beb94ec5660cef -size 173422 +oid sha256:e965bf1f8401c97585c145915f1165ffca53e8fa4bc82304d4323c41fd32cb83 +size 173374 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-cpc-library.a index fc31054904e..605c57f953d 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5ee23d7f361fb6be636108c2c4472ff7ca8e070ac4950a334e12e933636bd62 -size 176212 +oid sha256:6a9c57fd12bb1a4f631cecb1cbb31c1bf0a62a5b12f9233788a3c93560b9b9df +size 176160 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail/em260-cpc-library.a index ebdecf6d1cc..c6528719357 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg21-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad436118bbd220dc130a14a40779ebc45eba7f865c89fe42e6f4bc1463d12f38 -size 174070 +oid sha256:84a95195f59932e6929b6a1df70c06de6291aa2919256f480256fe5c893b527f +size 174020 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a index 85791e71411..ee230c8a23e 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fae5f78146fad538e4844a7ac6776cfbb8283253d68828d12349706e53fbd779 +oid sha256:4d81592651e9d85bd023205d1cacf9422bba47cd8c5c8bf8fe0051c74da2c8bb size 175528 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-cpc-library.a index a4cb5a388b0..049bb122729 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed247d4e7820ffe1bf0491fd6756c740baffe6856119972197c49898bdf5dc3d +oid sha256:c38ae16777b9777501506119c13a8186f7167e99d054fc9191503b22e59d5faf size 173414 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-cpc-library.a index 209bb8b4978..2bfa4a2c7dd 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7129393e0962a719ef0b4b3b3bbdbe665f41dbcf7f24a8be0435b9c43b7a774 +oid sha256:de99792ffc0cc9f99b72384e804999b58fb1274734582e008fa7371b7a755c3b size 176200 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail/em260-cpc-library.a index 1f132c1bbf1..c42bfc130a8 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg22-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8422196a40dfd3531a19a2d9a7df5c6ce472853e9eeaff84379fa50145d5a959 +oid sha256:13aa624445bb5f8012656d4d7ac73665639161d067bd8160b242b3ae4bc170e0 size 174060 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a index a3b6b635a37..2fd2bbe4d12 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5938433b5982f7f452eba618f5df6eddee5a2e8fa5af51a764f9674a7eb3b9fe +oid sha256:7756c4dc8bcbac96a0007e12b259b1a467c8e697a52b486487a7d18a99779afd size 175542 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-cpc-library.a index cb45b048379..5fb8395edf2 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b59b7ad98b65958f6f586538eddb9f89b62fa17eacc63c85ccaa4d706bf3ed22 +oid sha256:6f7a8c37a57b40e9b7b4a616745dc6c32e5dd30a605299d0f8bcbe36df6670f5 size 173422 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-cpc-library.a index 19d0ece6f10..94d6dd1d8e3 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:066504b35f778ee960629c0d03ac0dac56b154930357a782d930fa062aa72f23 +oid sha256:ed5b648538861d928d6ad2b51ce44b5232365aa96df6b0758c38fe91adf7ee14 size 176212 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail/em260-cpc-library.a index 778a919f160..29cae2d6798 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg24-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a1c750d17df431d5c07c7646d3748081ed35bfdf0018204c5ae8648167ba9f3 +oid sha256:0dac0fef53f0695d43abeb79c7f664c9fe30a330a1282e476f87ddc0ee7f3204 size 174070 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a index fd607266e36..215403a30e6 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:643f1ef48c26a7103dbd146b638c7eab6835985f055a4de2e52a57bf28190ebe +oid sha256:8288a58356b68448c1d1040e2c305d5db2488aefaefaad188b212e3501642142 size 175528 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-cpc-library.a index 63d5de46764..4e6d1975655 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:488ff3a87a25569ba125dd02516890cf9846fa398e6dc9978af980e4d6ba0b3a +oid sha256:6a75bb9d864133c09189d6c08115868f393200644e52afe4e077d1ffbb91bd70 size 173414 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-cpc-library.a index 3ba0c84e99a..06fd5964b9e 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ffc4cd03aa26e6ab7b687395445b34da9a25d5c82f4b94e02501c1ad277afe6c +oid sha256:4919a966b00c5b7e59f38bdb1494fc12ed4df71367d6d3716bf2e3ff53bcb86f size 176200 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail/em260-cpc-library.a index e9557d99065..196c096b016 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-efr32mg27-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53df2023c0f453826c675e3ef4d203c5a4d5c80d251b7f2d8def224fb77a7376 +oid sha256:167f781363ca206a871bbae75dc4d4b8aec381cecc7e3a47a3afdb54fd076ac1 size 174060 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a index 80cbdcb268d..ee6d91a9f96 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:52445be603b4fa38d6e9df8ac9cb84b06001ecac7b536097527a044218253415 +oid sha256:2208d8a1c8e2934150ad71ad922e9e9ca6b8416377ac407b510a2991f9b84a67 size 174786 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-cpc-library.a index a4995a0f2bf..d81b6857fbb 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e25e6784a92392224d31dfc86afeb48b72752d47824663a1bfa37108a17d4fb4 +oid sha256:5f26e219f645306a38f6887a983502d58aa49d1e752488dd1d172d0899816ada size 172712 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-stack_protection/em260-cpc-library.a index f5cc48e8520..d63a7cc8faf 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e8635d14061be8dcaeedb941d79ccdf3cff20eeff2051bef552861309990499 +oid sha256:f02501ba2ad067678269c44a118e45e75c45c2ccab1809d1a49c5e66060a6142 size 175460 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail/em260-cpc-library.a index e5b0be6eafd..90358e87dcc 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm12-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:80abd2f1881912527e25030b921392f5c1db35ec2c8375b097629cf1d4421e40 +oid sha256:52e3d1d6a5a040f959e2f6486e12800037245cb483cc689f01c0a6648bf50fbc size 173358 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a index 9d866ef807f..ca974d7c6b5 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:242693cb84525f58a510b0e7e782045551791bedf1d67236586e403e2de0ad08 +oid sha256:d8a2441bbd7c7d9a4470d4fd678bb92815a0a17d02655378f00a5c54c3b63a25 size 174784 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-cpc-library.a index 187df9ed43a..9faddb3f105 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d98979fe4a1a07d054a47c8aaae8258c3c904eba4db329222414ec9dcc08c5f6 +oid sha256:64c0c6b25f76fcf70a202f0979f828f0e2ef31e1d3c5991951353b904069d455 size 172698 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-stack_protection/em260-cpc-library.a index 591c6a0fbad..db62e90a1d3 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79402725134060ddee92578eec738430dac50e46d9157281001e25d7e95990a0 +oid sha256:7bbb17f51fd6b7e92ab5b4861f182539f37c37bb9165a5e2ed9a2edd84c3247a size 175452 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail/em260-cpc-library.a index b6e8c632ef7..887d6c9887a 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm13-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:063e441521625c0c35131070854636133aa15d78aa5e8c0471802566f1c28817 +oid sha256:885740efe723b5b16e5738005d5a0e3225ae18a46233481b752171b628b69531 size 173346 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a index df388fcaca5..513859e0898 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db333c55c9de0681b603135a4344fcbe47de6ac227d84b69b4a8f3c4d32c5bcc +oid sha256:15b27e738b41bbcc716cb135c8a5480e6515345b6b07c1aa8acab5c6136c01f9 size 175208 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-cpc-library.a index e6a0f69510f..6f65e2bca43 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1aceecb451652236d7d578be2eb9b4a6f21dbcd54d237b302643a166053bf043 +oid sha256:7d2f5d5506719517ee561342d3b09f1a799c7c1d7db280e2296c0a97b11b7617 size 173094 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-stack_protection/em260-cpc-library.a index 6d4bfa7db70..3d0446d884a 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d946f623fedd6b969c02bc60f2c61817b722d2d0d60ba496be5a744caba5a74 +oid sha256:f852a530bd44ec5ad28c7f31071d88e75e4f2444c04f6dca1cce9f5328884aad size 175880 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail/em260-cpc-library.a index 2cc6ead6918..93c8b0f8b56 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm21-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:495ba6f9bb846de43ef617181cd8c0f1583da469a541f9217e9394b11cbea209 +oid sha256:1ea51aa5cb3e4f7495c7acf8c2490fd1e405ad28c6a5ce1c8c1ccd8be24922e6 size 173740 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a index ce337f7a24e..2127f1157a9 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b42c352321111549fe475427be975fe95c3db1e991c1e4194ff2b4b05dd7eb04 +oid sha256:5027bf0bc75f37a610713d7d84d5fd8c0313c1df69fad588a3bc4389422b1782 size 175208 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-cpc-library.a index fccde22b76a..5148d237d5a 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7dabf197eb257390a047829be6ac76d043335f9c349cc00f8594277f0286b533 +oid sha256:8ebf9b250c6b25d4a2dc34fd60533081847dc5db0dde2eca84149a9f89965071 size 173094 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-stack_protection/em260-cpc-library.a index 0bf71fc4d8b..5641eec0842 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d247ce504336049972b887b90b7f9556ed030e7b3a9eb01ff2171678d7bf979 +oid sha256:8085797cce8c5737d064257eb99501e5c0ab7c085086f7dfb4b828f5d626094d size 175880 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail/em260-cpc-library.a index 3f0905df6ae..97214fd6ced 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm22-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cf5c7aabad54424d33f98609a5c525ba91fb9bfb7c562e572448515ed0a5a9a +oid sha256:fb9020b48cbddb4710a6a7b984337d4cc4100dcb70f9d103596d40b567c4b6dd size 173740 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a index 46acf66333f..f6af0ad819a 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68df3cbdba471b50f752913b0c4f57b8a2bf45ceba51a5cbe60f98489ee4413e +oid sha256:c1ab6ac5995a39a9d7bbd74d2f3c1b427fc5d6b311f2b798b2f596f6271df078 size 175208 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-cpc-library.a index 8c4cc2fdd56..364d4c8488a 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ff9f138ef109d79968b83b55df8a301b12cfdc70ea9bec0c8cd13a1c4ba4f43 +oid sha256:7f3a031e3610912979fd7f2e3921e3f5413e611f625e074798e150aa4710708b size 173094 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-stack_protection/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-stack_protection/em260-cpc-library.a index 2be53949371..25f8b772617 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-stack_protection/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail-stack_protection/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0fdd87867143b2f610993504ed7d6d036e39f74a3e60cdda63dea4d5ba1afb3 +oid sha256:92ce876e882333c6c6fda37486039e8cff1b5b163764a7c333fc8c4a7650b9f4 size 175880 diff --git a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail/em260-cpc-library.a b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail/em260-cpc-library.a index 54aa435e845..2c0c821b0cb 100644 --- a/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail/em260-cpc-library.a +++ b/protocol/zigbee/build/em260-cpc-library-cortexm3-iar-mgm24-rail/em260-cpc-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:110ed23bbe660e1e6f25d936149f0850473732cfe24f827657d9f65a7933acfb +oid sha256:6725408be7237e0d5b4932fb37593b048c455a229f3019bd3f895f9fd15df473 size 173740 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-spi-util-library.a index 301e72dfe4e..6ca4991ee47 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9182feddb78d461fe491261a556c7e9ca81c5dbea20b37a0be82d65ffae52592 +oid sha256:c4dd7864d71a0db8d9ae7cabe29f272822b49067c0d0bd0760072b80d03551f2 size 59936 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-rail/em260-spi-util-library.a index 3ec99be5dfa..3f06f91b8c3 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c75d8ed6baf4d80541f4cf1c93e3587804185976cfb87e5421bb551f52bd03e7 +oid sha256:f17aa63991ba980a3704124def62b4700eade2083074d8248a62a638a0294505 size 61398 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/em260-spi-util-library.a index 77f041b7980..0441172e966 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f76f95fa0e1c9172e345c936a9395bf95828d29c783dfacdcf7ade96912144b7 +oid sha256:7b901ed27a76e274997c8cca35d16e61baeb9e73e88aaa918619095a28fd5fa3 size 59936 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-railgb/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-railgb/em260-spi-util-library.a index e07540d807d..8cef3355a77 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-railgb/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg12p-railgb/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4217261223a2c6784cac62ae0f3be7f6ce764f9a3e322434cbe1283803676bd +oid sha256:fd269619391690b080162ae6a1d0c6f5e9e091f4c5f6e486cba0085ccbe3d266 size 61398 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-spi-util-library.a index 4fbcd0f1e25..82c260a8380 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37fe261267f4ef52ebf22e45fa6f4849d9d1c421b701f6d32296edbe098f4cef +oid sha256:e3e0fac746a30d0c01c1aab205f8468e9d4340b2601a0be37fcc60cab658b299 size 59936 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg13p-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg13p-rail/em260-spi-util-library.a index 379100e8ef7..c6b3a11cb11 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg13p-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg13p-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f0f6b8c4220fd0c4467f64feeb09a168447c108044cb07cc91c753e19d3d25b +oid sha256:de3aa6d982f04d803e2bf04ec18a59ddd854cda427e906b559da9a0c7da00190 size 61398 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-spi-util-library.a index 6038a473fe7..a837c456e03 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:166c439f885bf751b72fd1941889f5faeadcdd3fecac55fc46744b1520d707dc +oid sha256:8c47d103a26ba12f2d9b9292bd8958a9b388bfc17da2fa38a0258d984ede7516 size 60000 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg21-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg21-rail/em260-spi-util-library.a index 810c29703d1..75390014973 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg21-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg21-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84441db8bd82781cb2818fa6d5bcf4d2eb75e4bf9c9ba465e02bae616a7adc28 +oid sha256:a003c9fc5a455fddf220e4fd09be3ad8cf3627ad175c2e4fcd4353af0a38cacd size 61454 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-spi-util-library.a index f2bd4df4769..468aa622c3f 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:890c0de21389179915a35618c58c73fd122f33d97c893a4e78f0891b7b68b405 +oid sha256:606dd25cf51087e3bcc7a54b185386184fde0a22da372b977ed9f630f5b24b53 size 60000 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg22-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg22-rail/em260-spi-util-library.a index d7ed85d8ceb..3afe26451d4 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg22-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg22-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64ca52ef84273ef599cac1c5de555fb085c76739076b678cf704eef69d7463b9 +oid sha256:5e9ab4c54c91bd622667ccbcaa97381955a2bee23459e0148bfffb8e1cd01efc size 61454 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-spi-util-library.a index 0741fa631d1..2a1a45d7e21 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:453105f89df82b9eb8b299969455f403f89cd6cfd3fec3ae78b3b97cd044e165 +oid sha256:809579151f6261dd7fa03ce17b0330af91e7fe8e810f699d505fe558a5493ce6 size 60000 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg24-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg24-rail/em260-spi-util-library.a index 2352b542e8e..ec90d41f691 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg24-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg24-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5d261a53b26f835159d5ab636fcd1b913764dede232da40d04b2bc168ac43d7 +oid sha256:796c82891c34d7d1f53c0ef02784f64fba176fe32b0d2fee62d95f8e315ce564 size 61454 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-spi-util-library.a index 82e183edfed..468aa622c3f 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:867ba96a16ad52306328c685e115da027848164bf78d063be459e13b4c4b7823 +oid sha256:606dd25cf51087e3bcc7a54b185386184fde0a22da372b977ed9f630f5b24b53 size 60000 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg27-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg27-rail/em260-spi-util-library.a index 5075d6ec037..eedab49945e 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg27-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-efr32mg27-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd7730250bb377e121671671fc54ea16bc797780b2b6c2eb6ad429224e6620ef +oid sha256:ad887b040bc79f365edc5f0dc3ba5dd4576ff139922aa6139d967f567e155c68 size 61454 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-spi-util-library.a index 6bd71a8efd5..ff5b8393fec 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5427e8e9f769157014d444d3f062034ea600325a4901cfd7827cf9e21575fd72 +oid sha256:fbf17fdf413d0cc7dfa375756577992ee626ccddcc46c7f3f5091e2ce4240872 size 59936 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm12-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm12-rail/em260-spi-util-library.a index 768a285b5e2..aa65923d316 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm12-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm12-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f85e3e6a2f43d2f7fb06681d1a7a9b1ff28befe0496cc68f0961e5e32be7148 +oid sha256:d4af7e8f25b5e987719b0d468a4ff0df8da6a5db60c3dc711fb62ae852ce1435 size 61398 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-spi-util-library.a index 535b435bebd..360767ab92d 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d11d1662cdbb4bdf27b780885fd09f0f8244336e581e870ad190a7c8074ec978 +oid sha256:673ad4e4a8e9a1ad17f45a79affc79a4625d899d0c2e09697e68cec3e3a5371b size 59936 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm13-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm13-rail/em260-spi-util-library.a index 88faeac8645..cd92828a41d 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm13-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm13-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a7ead1b80d1dffc265e1abafacabc7b446f8eb4f13c5c7fc84a080317d5a338 +oid sha256:715bd8213fe55daab8c5d8c2eebd86e0d54582e011211c9d62b4298d0c39f73a size 61398 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-spi-util-library.a index a47e09a8f36..b308c4ca0a9 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:408a2c36f29c9a5db3a39ffee74dc6cd30232e74e59ca0ff108a3d9f01a761cb +oid sha256:9e3104dd917650551db37e9e567b0fb5625c187529aa614cb5707032d0fc228d size 60000 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm21-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm21-rail/em260-spi-util-library.a index 131832d0d57..a399813c71f 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm21-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm21-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd09d7ca22e5df61a27ca9806aabee4409eaeb78dca3ba57cef885a73c481cc3 +oid sha256:61be7ce5202fd99d7afaae7f5672f6ffda1c85333dc0a7425d14bb8e4a9a3b73 size 61454 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-spi-util-library.a index 86d85411146..61f382ac866 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cea3b02cdd5805aacbd969d88a6b3dd434b8c0634f17416af258e46901a9a4cb +oid sha256:16a1ab266c75699f79dbe5f492ab177cc7ba450041ff80086d31c3d2a6936a63 size 60000 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm22-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm22-rail/em260-spi-util-library.a index 03002d8babf..111c2ffcbca 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm22-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm22-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8188badd93b16dd95c8bb9f0f81f548ba001e8b3be9b82a74cec358e2fa16169 +oid sha256:0fb3da876f26d9e2a394a71be40b4c515016efc8287c24dd5f10cb52de7a1284 size 61454 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-spi-util-library.a index 59dc31a43ad..990a5721b93 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f922f2fc349491ffda26a69739e3bf5e21f9656d834a88caad381eace7875c6 +oid sha256:0771aa061ecec0aa965c27745443c42aa3bf2128d61b6b6b252261467ad7fa62 size 60000 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm24-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm24-rail/em260-spi-util-library.a index 255dbaa55c4..7c873335c0e 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm24-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-gcc-mgm24-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1aca9b518fa8dc774573596b635f96d508d415d50bb5fd8ec508e4699b305e33 +oid sha256:fcb88d026f166e1a9e623d84b439975b65a60b6874b9f5e2226da3560f0a8699 size 61454 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index 33f8c5537d5..92d8e020166 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efb370f44da5920f15e324ee21b5f97f242873fa0f2d38baa567c007217c7c8a +oid sha256:3f50dff84004de6b11eb2bdebf9a9e9904173c103374fb5b6add2128328e1f69 size 167296 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-spi-util-library.a index 9e6604c289b..050a0db58a6 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb4d5b1585b852c55a6fcc7665d06599d491f9e506739e9029f255c33592ff5c +oid sha256:f7c3541615b74882962e790e6451d3eb76c1976a57270b0ac0e2f460412a59cb size 165460 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-spi-util-library.a index d18ad532136..a52ee6ecf47 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ba2eae8d153da6577a9369ea2c6fd10906c1163e902904edf312900ca0ce792f -size 167984 +oid sha256:ce88e76606ca0c63364e2524521867822a45cbcd18004867887c3f9b5fbcff88 +size 167974 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail/em260-spi-util-library.a index f95849c2f42..c3be6a2560e 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7cb57b3acf7712fd2f00946fc5c9a58c325a516bacb891f4c0073175b980a65f +oid sha256:2780576c687558afcc2642b4dc09cedc1ae3705c6c07019cfab631f659bc3ecd size 166106 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index d1914ff6546..7e9c1bddf88 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37d798952155196dd9ab18ca81bd6338d1f66a08a2e08410fc0a67321e887e22 +oid sha256:0a64bdd865658355aab007f4051cae97a7678036b6e57481753ee32f2e9b9b35 size 163264 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/em260-spi-util-library.a index aa1688a8d1a..c6f21842255 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61aa281e4bba8ad3762b03cb3c8b6d438540df462968c7d79308d767004fcf5d +oid sha256:a000921f99260f7743bfdda628d1e879e91b85e270966a218c5a9a8a89a5d16c size 161426 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-spi-util-library.a index 1032506df6c..fa4f59aaba8 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cf2d01ff89008d6595a54087b4624ccb4c3639346c677857c83ddce849902c8 +oid sha256:16e7bae040eea034ec5a25784554e3469825d0ba4524f79792987d3e0d0cab7e size 163950 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb/em260-spi-util-library.a index 46b17a41297..fba4378ca15 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg12p-railgb/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aef044d7b2495cbf7f6fc2e9408b940df7a697c474bf7166ee0f84386d8850ec +oid sha256:9f22c2a04605136e3a5ebb67e336e403a1186d3f2de190a75104c68001c86ed2 size 162070 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index ede6343f090..9ddf1c564a0 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0669a3a16a1fb5e4aa7141029f84f89822bb900ef938fcf19713c9c04b41d1e4 +oid sha256:e4f89860cf913fc61f13708269b45732fe13df68f374bf8dbf74db9feffd9e91 size 167292 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-spi-util-library.a index 6df5a80dca1..514fc779678 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44dcafa9e8918f2458c91d2210ed047bc52a1dfe950c316d5772cea9382523a4 +oid sha256:68a4815a0c13419b3385c7a5c00ec0ca65f7b1a5d50ebedabdb8e246a4a151c4 size 165440 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-spi-util-library.a index ac17e668d76..d7fcebe13bd 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e23f9f4d25a1699df26d362de8f46643c7d33e4f698e336f90b5636ce030fd9 +oid sha256:7193c6f6f609ed8caca81cd468e9bc89b25c8079aa6266aa42578604b3c4576a size 167964 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail/em260-spi-util-library.a index eb55f3b4881..e622e6a27ba 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg13p-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b567f5a37d20a385cb459d9ca910de8dff8f414fba817e4963aeeebfd7e26b93 +oid sha256:47c198027b4364570680a711b0900db0324625c487b8499dcd571658e4e74dc4 size 166096 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index e718d113207..227a1f06e47 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7fb3c45a7a35156939c49ae9f14d3648283b5aae68ea3d1d62dc395db2414d6 -size 167678 +oid sha256:1aded2e0af02948fa62871c26e424261c74cde9c67e63b2a4ab4f1494149e93f +size 167630 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-spi-util-library.a index 112650acaa7..4dfb3e82aee 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae28df1db689147d4970534ad54005c130b9385e38dcd734ba0dcd6b812dc0ec -size 165790 +oid sha256:184de8239410e4d2eeab112019dbb3efb952da21d11a190128b05befcf88d4ee +size 165740 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-spi-util-library.a index e1874772ee4..7640e543528 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24a6fa0cdeff7785005e8ad3e3b6a18111506550f98cea667186a98e1008af24 -size 168354 +oid sha256:eb27a237ec30a6b2881853b5e1534bcf9f9daff6a787834e92a776b8d2b55d4d +size 168304 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail/em260-spi-util-library.a index 16187a1497d..befd5609571 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg21-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fab7379a8d9dc944de88d36d844835175f7c3e626b2da9f58df4624171f3f010 -size 166444 +oid sha256:38487d824de18dcabb8ae70a69622d624cc8b6a12b77a2a943c2c4448e056fc5 +size 166396 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index c241e2897fa..e67f10b6b51 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c312a774e97dd952a731328dcbf06cd7773d411c0d01908c892c74b208157e0 +oid sha256:bdaedc94314f9f405cd9dc3d89afeac64334c88114cb0cabbca4e1813edfa03e size 167670 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-spi-util-library.a index a2c48bdef85..b2e3be2484b 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98bb95176e7dfc2c91e261df35c0929cab773dcfcec0a8fda30edf0a4276b95a +oid sha256:211653cb49ac2ca1d6d5462c7d04d2e402f8ef6fa5f37a0e989912885a661712 size 165780 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-spi-util-library.a index 151e5e6ba51..1b132602580 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb23c59702ccaa2f44b1ef21bac17668fd157be7d8a1be527ba5df4ce46315d1 +oid sha256:ed2d1c5d81bf7cc3c65642103e1fb289e337ee46ca97c0c9c9b2bc7542104445 size 168344 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail/em260-spi-util-library.a index 8211724dff9..51798ab9ab8 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg22-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d398ef5d82f2488ab07165aed1c81ffd46d8a50a465e5862158e53e7133d2182 +oid sha256:f82e65c6c0456ad59da2f67d43dbf59948755206d2aa3f1af8ed8b30993e78cb size 166436 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index 941842670e5..e35b156d4c1 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d347a99d929fec95d1ed03a71973681252a76cb5504fb67166eae09f6d383b13 +oid sha256:9475f814f2ef2e5dbc5cbccdb8da76f4a920e21a5e64f2f67680c94432a2a851 size 167678 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-spi-util-library.a index c510c717acf..2a177e26e30 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed832d7b8ef6321bb9ca61263e8c4bb746e454a87cd43f833eb4ba305aef73e7 +oid sha256:4722f459eef12f8f4eaf77d874ce55a69d2b646b5aae8d77fc1ca41e8171ea75 size 165790 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-spi-util-library.a index eb47fbe1d8f..bd14830dc1b 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79d9d0aa3ce10ee5a1f8b29801580dc3f154853c17c104992a6e5af929dc2ed5 +oid sha256:a5cb6418d2268fca44e77e7f97b49c9e1831a54742a00fb7ceb5a198a3272b80 size 168354 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail/em260-spi-util-library.a index 4909b6a0104..dbd247fbf59 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg24-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3f8a3d1d11745913bf2122e35f702212a4721fd69eeaff6284c42807bca8106 +oid sha256:bde375b5de44bde1fb38a08a67a601e3626160d2dbeebf412b504d46907eff0c size 166444 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index af997ab5502..0c4143ee593 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18d77fc7423f9b0a62fafe7ec973ceb424c369df518a8dde6f905e6017eaf50e +oid sha256:40e95e597996a256d2fd5361bd2efaedb35caea59af2e5481271032d3d6022a6 size 167670 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-spi-util-library.a index 3b85968ea91..78ffe23a0ab 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:154a99caeacbd5b8eb7307b131b8f89cc91cbcb33cca613725d4595fa7a11a7a +oid sha256:03725f748720253676078f1890c837425dbbb30d6f62b3a9fff363fdffa2dd13 size 165780 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-spi-util-library.a index 347649df3e5..f7fc46b8eff 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ff34ec37552992df1a639c379b6138d68beaa4a9a443d0026948a5136617806 +oid sha256:faf087da0767051f870c95549200f31b098cbdd5dea4bcf7a62792d5443d138b size 168344 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail/em260-spi-util-library.a index 43df2f4a701..f5168e4d24f 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-efr32mg27-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af755f91c1be5e71d25a8c3e9918efbbf2be2a7cae603a65c37263d8a87c4387 +oid sha256:1c03e5529af6e81c5b9d25b8925311b25b50057a54ec72f96ba5cd8b20acac34 size 166436 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index 55e61e63966..8b2ba10ed49 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fec2d9a8fffc872e8408babcce31c92371f06ad801492732fad9e29c027be30a +oid sha256:50f9b7c2b259014f6a1b51277dc9e87da3e590f7ef672692e2acd661db5df120 size 166932 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-spi-util-library.a index d329af614eb..d4f549a81ec 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa83bdbb3dd69bd104b9e49864d6c35f47b6bf2d4c4554f1d240aa9b2478af6e +oid sha256:dd90a92cc883c698502f02c9e14e900a88656f6c9777abb4ae5baed23f2db992 size 165080 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-stack_protection/em260-spi-util-library.a index 07aa79378c9..d9264641fab 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b713c509d6cd68be73276213dfc0c678d8f20c5c60016b9284cc2a4bba9b4d7 +oid sha256:20492ffded36d60dbec5ba5ff8cfc2e416f16890d8d4b363e05f52ac51cc0f1b size 167604 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail/em260-spi-util-library.a index 1494abb41f0..283b873d3ca 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm12-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a23b424784524269fbf34b030a926359f1ae36fd8d71f445f9418bc35229959c +oid sha256:27d5cb3713de4b6eb909cb3568682dfdfe77f542297914589d1bd6630d0d13eb size 165736 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index 6745ad32dc7..7b92445430b 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f051af553748df3bd5b97bdaa25cb8828d433bd90d63022a14a5b342ee3e556c +oid sha256:26824f6ff7e8f7d6009d98c164b024ced414055d46c8f03a4e8710e7b6adf6af size 166916 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-spi-util-library.a index e16a264a246..1fdbf8777d9 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc0e71011e7ae13f53695dfaa92accba9188db6048534aa02fd8c80590c73de0 +oid sha256:82b55a7b68b7458db45e27e01cee532b3b1934974b55f89d62f7930f89b205e8 size 165072 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-stack_protection/em260-spi-util-library.a index c02cca03462..b550d35d0f7 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efd6639ccb6da9667d8e9ff7a4d7cef9e33044ab5f70779c47b735efcdd08ae2 +oid sha256:126a16e0464cdc3f9df2d65177cd48af8fcb4a3e42d249f38e00033cdf5fd9ea size 167594 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail/em260-spi-util-library.a index bbccabf6ac7..7d25a6fd423 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm13-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:813c491592c8454893ec8f109fae8c901a2b40de43bfaa09a6529e24dc90f214 +oid sha256:3416e46fb4cd64fe66ed2ad2db081a713a52942d8a9316b61815c91429c3cb8e size 165726 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index 19d78004668..913a71c7174 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f39ef6adcb733b562d0cff9f231841878b7b229e702adfb1bf995981ca1ea114 +oid sha256:0cba919cd6430de202f6edb195bbf8a81cc80a2229359a739662f0e7265a8098 size 167350 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-spi-util-library.a index a122eb51a8b..eaaf16dd3bb 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0056be33b7a313e6df4f1e6efc3ed6abb3372ca64e7c39c652cada46080cb3ae +oid sha256:5347b4e058cfa01cde1f00391a5b371804ac1fe230fb7391e496eed23e888db7 size 165460 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-stack_protection/em260-spi-util-library.a index 676d0a7f394..f7b2f99a841 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:053244bfdab3e03fe599365036c9eac79225aee2f6ad701311ea6e03cc0463da +oid sha256:5f498e34c6dd0fa8bf67910b12d2023def04bead9d5c74157c922dd4625e68fc size 168024 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail/em260-spi-util-library.a index 02ac94d2040..a5c5a9933b5 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm21-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95a86ac056a65d54c55f3a1f7bed85d4c85f79577dea0e81d76fd5fced35b0fa +oid sha256:d869d8d1abab42a7c5afe81b8826c20e003e3db80e8787b67906be88a5a41e32 size 166116 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index a91f687d008..010d1ac6745 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27d136a2856edc2c7375cbf2d4ec34d543abf676ec4186f07f6527e74c8dd9f5 +oid sha256:2c2a236a57a86468787e37d7a430a37d27ab53e26b803f7074e892314abf7761 size 167350 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-spi-util-library.a index bd0559e0419..36e256a3a7f 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9179bd1592a1e4b44045185c8b845cfced2ea82acafeb3ed68c2332544dc48a4 +oid sha256:964d6cb5ecb83d0662b88cd7101e9d44e1b6001553b190dd8346bf67954f6eee size 165460 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-stack_protection/em260-spi-util-library.a index 0ed4d21a14f..00099caabe6 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d52fb7b6529052bbfda89dc607170d3fb564f51b9ad393046cd41154fb2ef1ee +oid sha256:e96c6d828246e8de52272c430b1a40976987af8a23a1ea791436d9addf6f8139 size 168024 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail/em260-spi-util-library.a index ecf438ead9f..fc08d2a0a23 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm22-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:479b9442270175e7516371980ba99a05b763842fa77a0906adb5f330001ef05c +oid sha256:808b126cec533f1d145aff35de7c24cc38ebb79ee7590a56169a59e32ff72c70 size 166116 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a index 9b33d46cdd1..4613a2f753a 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f186910f5363a050bf00a4afe1c972a9698f6e38318a35e66e519c7e0e3a666 +oid sha256:ba131b0c47c338b58dcf91e5afaeb61b96c83b96254b67cd6431797fb265e763 size 167350 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-spi-util-library.a index 9e57ca76a7e..39637fedd0e 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d74e6622488c81a5362d4b0bbfa40af62a5b03c0a960b49a2ec055f9642c3ecb +oid sha256:83a2c322f01a0b302f962ce390fa4eeccf85cbba4e03785ab737669d1a4ebb43 size 165460 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-stack_protection/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-stack_protection/em260-spi-util-library.a index fe43297b9a7..8d0bd4f56f7 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-stack_protection/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail-stack_protection/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef5d07ba9135d9c0d570bcf4f4873f6610b259c572e2e90d055bdd2349a3e7b6 +oid sha256:801e86c625fed650621ecb52018fabefe6db98ad7c3c12a9119c51f8df374e94 size 168024 diff --git a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail/em260-spi-util-library.a b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail/em260-spi-util-library.a index e723d145db5..5a4bc4cd07a 100644 --- a/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail/em260-spi-util-library.a +++ b/protocol/zigbee/build/em260-spi-util-library-cortexm3-iar-mgm24-rail/em260-spi-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:382c1b888ab92434fed81f36f264b55ab0faa876401b7027789ac6e3165930ef +oid sha256:210bc34c6aeb9760bf692cebcda5b1cbf45f0d94afd69a013951f2c73f29919e size 166116 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-uart-util-library.a index 568b04f557c..8bc67dbb92a 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e864ec709209f11d282b50b51b7b05ec47f8ee77304551ea2ef45687e404c8ef +oid sha256:541efa891559e7e2574b299cbfa10d9a14cc77b20f5c5674f4dce6220ee27f4f size 55398 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-rail/em260-uart-util-library.a index e4f227f2fca..2f77ac0f929 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db74cc26231e123a6e69507dbb09f78b09a980bcaca7df8c1951142de049bf2d +oid sha256:9a41c0937f52c90e33a6981a9ed0ae5124df455ce61f514d68d97cc3664f3447 size 56856 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/em260-uart-util-library.a index c4805fc961b..4aa87aa9123 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c28b17fb25e8461342f4df011bdb0351e1371aabf11d91c3ef52f1348365474 +oid sha256:fdd3dd139fdc4eab67d73ef999603921e9428da3cab7a5f2fecfd22fefd71bca size 55398 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-railgb/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-railgb/em260-uart-util-library.a index 90381117194..1d6b4302d4f 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-railgb/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg12p-railgb/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2298b96b5aba0e3d7ad33fd263b3947765f48b1a1ff28c7d13dd13bd441aa49d +oid sha256:36771f3573836f2e01c0e76d6bdf307a9a82777e947d0b319b03e2f5ae4abb08 size 56856 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-uart-util-library.a index a32bf9aeb18..8d630fdf9ef 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e36cde02cdd44ee86b16fa548a4e20e0467fc10cac22b16f25d875313474a1af +oid sha256:5f90698199792d0f0070bebbe106444c0f4e58425fb66f2cc19148faf78360ca size 55398 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg13p-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg13p-rail/em260-uart-util-library.a index 9ef6ee905c8..7bc6a8151be 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg13p-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg13p-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89dd3b9ac8714cf292c57afa65b3648653281a396d2d7c018d60a6fcc614c138 +oid sha256:8e0a9e6cd8400674476be1edd69cf33529b10766f0e5e540948ad687b5a72365 size 56856 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-uart-util-library.a index 556b515ce0e..b5e5215183c 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cd3210c3572356f5ba78ec03bebf161ae8da94ccc3afc63a929235f768b9954 +oid sha256:c4ee7f6a422b866d421e561e8be4ce902a10e6f3769494a00e87705b1396d3db size 55446 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg21-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg21-rail/em260-uart-util-library.a index bc105332fd7..ff70c39dd99 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg21-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg21-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a50fa5567ea6105d92094ebf558dbbc6d87e274372e51b3ffbf8e843d46137e0 +oid sha256:5e6225d0a83b58eb982498944b0d06ab4959b52bb811638da6ac0770675f6584 size 56912 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-uart-util-library.a index 55e0c9d0d00..90bc7611510 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e0725b18973e20721f034fcd8727ce7f721020b3b9f54fbeaa2e1a17b31bd18 +oid sha256:88f338850b1d6bd61a18ba536d9f9b304bd9b247758fc1f16f0e1f54ab3c7308 size 55446 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg22-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg22-rail/em260-uart-util-library.a index aca678454dc..f239926724a 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg22-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg22-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e6c59182fafc3fdbd86e387d3a5b4f93904ec898c61542925f75b94cfbc7dbc +oid sha256:b818637aa9dd1ca9b97a76cfd64bc7d7b66f4b31a5b0ccae82016db4e055ffb1 size 56912 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/em260-uart-util-library.a index f956f7a097a..abd41c2894f 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b297eeade4c2e4cba19944b56fefbe95c6189e1f69f1ae063eb9e39ef7650e8f +oid sha256:ee8254e9310d06dca2a6b32f7b1298f6d609a3fd1b10d152a1f2960a53829b0b size 55446 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-dualrail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-dualrail/em260-uart-util-library.a index 0b615ee1bd7..72a9f03485f 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-dualrail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-dualrail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6633fc583886e3b9d8d7eb687faca2cce30ca1686ff60c3403f827ec0a1e361 +oid sha256:f5508d600883787785ea6e51d58a63ecef23ebe94ec32c29c0a24f6a5f9a8450 size 56912 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-uart-util-library.a index 5aad3ea3335..03d8e8a4193 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5c5d368cc0c3db943797387fe7b34237081771798469e52a5a930a4501e05cc +oid sha256:edb5c0d53d82786f5eddcd32944488b6119e26b06e057faed48e1f3c97128b95 size 55446 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-rail/em260-uart-util-library.a index 25775aaa908..bc02209ae1c 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg24-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09cba61834bd8d33f8d090681ac1d4e4021cbeff7d191cd94744387422fb63de +oid sha256:0ec29d5480ebd4dfe2a6aac5c9e1aaac51c27fc3c48f5500a2028632e200a7ed size 56912 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-uart-util-library.a index 0fb09738baa..3b3500b4a67 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06c44b04d5b882d1c2aceea8afdebe63d75385544ee7c15ff5a539a1a8960490 +oid sha256:f06f118ef54365f933126d1d293bd4a4c260cd8b4672efff55f3f68634e8bbb8 size 55446 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg27-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg27-rail/em260-uart-util-library.a index e1473b2e72a..f0517178c10 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg27-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-efr32mg27-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:82cc838d50f864d4e9aa75a0c9a8c146d314cd4e1a53dff3581b6cd3af87c1b2 +oid sha256:9e0bac8feaa2608458b9bf549b9e73cf76c550421d9659a6fdf956ae900aeedb size 56912 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-uart-util-library.a index de6bc9abd94..b89b6723e90 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79a0e9d89b3eeb223612482367cb9b89cc74dbd16e48ba3b6e71afbe119c402f +oid sha256:3689aa57693ba61f79b5ad31a7166bb6676ed28d30fff473165381059136600e size 55398 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm12-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm12-rail/em260-uart-util-library.a index 4f6cf1e4aee..e00f65218c8 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm12-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm12-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:603ecd6575e9ca54111d9e6355d43b84bfe986b9c6379aa8b404e22633f7c806 +oid sha256:5a209ca9d67d842c2f36e1f61f697ca14acf3b8055f19c5d8e4a2258dc60ae46 size 56856 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-uart-util-library.a index 5859343aa4e..897940b228e 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3dad781db250f6277aafd15d846b3d16bffe2f6f6c60300e141e52e08de25e06 +oid sha256:ed0dd73abea0430fa4474de415b2518d50a5039bd511e0fb3a430c8d9cc72aa8 size 55398 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm13-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm13-rail/em260-uart-util-library.a index 27a249d8ab3..61bd0c2ad58 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm13-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm13-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2dbd83d2258ac4359d0241b09304009f04fccaab575646d92045f3a18e6a9c6b +oid sha256:961ac183130f6ddc0474f3a700c5a05ad396eb4272beaf1c6b41eac71588d480 size 56856 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-uart-util-library.a index 5782429454b..4b89ce8ae83 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95f0a83c3f90d34886ef2b35eb63d3f072534780dfd2f04cbfc948bf61ddd6fd +oid sha256:e519d6c538dc209f1220771efd997bd172d5b1b7c2138ae1d0fbbe4e82e277cf size 55446 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm21-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm21-rail/em260-uart-util-library.a index aca678454dc..85ff000d246 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm21-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm21-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e6c59182fafc3fdbd86e387d3a5b4f93904ec898c61542925f75b94cfbc7dbc +oid sha256:5c8acfe4ae4d6b22c4e901222d125141932a5aab52d8ceeedd8b5b017cbe68a4 size 56912 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-uart-util-library.a index c7db364a095..fcde1d5f33c 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3efdd15a81556fcc8d08d21493edf725f710075a8f670b82c956fbd9b320c6b3 +oid sha256:97dd4b5a9be22c62586b79741424d1c1948e945e36ebbde651bd06d8fb5016f2 size 55446 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm22-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm22-rail/em260-uart-util-library.a index 8bcd73eedf9..ae896ca8b07 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm22-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm22-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:15d8fd6f43bd12f556ccaee72226e5bc130842310f8024f0457b7349e79ecd1e +oid sha256:68005e4037a2b168337a96d7067895ff7b12cd9fa8962f11ccf6309669a62daf size 56912 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-uart-util-library.a index 7ec0df2b6a6..60b89f38278 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b7434aa9c6521203d0fcbed0cfd4714dba294c8547b0c3c72c916eba7aec1f9 +oid sha256:e1814febdaa3f651171a4aa7c47f86bde96b30882c9ed2a9af261ba05fae0397 size 55446 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm24-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm24-rail/em260-uart-util-library.a index e39ff2c73a0..4af0e145fa5 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm24-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-gcc-mgm24-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:367416e129258b5426b87693a4f2b1f0c90a92f18ffcdc9a1926a6710a917610 +oid sha256:2b6261f75f77fe53ace7bd7607b08fe1e873d217dab597cd1e637810bae96566 size 56912 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index 79a58178d59..f8d1b44b077 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39a04704d2579d02d5f1f10185e7c27afadc0ae0d6d83f1020f4042b635a0424 +oid sha256:95e9378832d43988f371b83bfc8909403f82af02abc6e55e1587c22244fce0e5 size 155968 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-uart-util-library.a index 3be384e0736..c5deae34408 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb74c3f70f33a171358cc1ec9fd43a0deafb3d57a63e20e25ecd1f8a32adee9e -size 154224 +oid sha256:ebe2d8a2e11ffb756a80fd2bd23575eb03b9e8c0284f4f141827a0b61168b296 +size 154216 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-uart-util-library.a index 0ff13120305..f89ca962442 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e79e2aef5eb38c396d580a5a64b381190f0353dddc318d002e81acf4b5777560 -size 156754 +oid sha256:986f38697d4ec70f0b91e56f9e02f9be274946750ad086e6b4eb103a10f3f0fd +size 156766 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail/em260-uart-util-library.a index abaf45e4622..e18b6c62dd9 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf008e83b49c5bc212dc1872480db8dfee55f1b6842fee725118c059f28968fb +oid sha256:1d8372109849c4d3bd93a9b339fcc3b0c640e3ed1369acea516acc33050f06f0 size 154982 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index 51fab9a4dd2..1862356747e 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:236c825eae6810a391d3dd8010e19f01d9d96c3660dd15d140926dfb54812505 +oid sha256:a5fd0e255913dac852fe935ad5af8e8f336ca70522aa8b024d1c9bd187ea9898 size 152332 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/em260-uart-util-library.a index 569ffb7cfca..b966b2d1ea9 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66ea4b52f4d33b2c32cb84f2a974722ee794135a5c2e2affb344ec6295582542 +oid sha256:0b96ee3099df79f464a28c7360fa81867fcd92b4d4886dd5f06c079f899d5499 size 150576 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-uart-util-library.a index 230d6976363..d7cb944888a 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a2d64843168fd46b2dd399bd9e5e28fe53c5b7872823b6d518a4d15eed9f050 +oid sha256:8268574c2a56f5e74301d27f6a29ae42055dc1ecd96f40feb88a5ac65fcc02d0 size 153116 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb/em260-uart-util-library.a index f69fcdc541c..aae1363e18b 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg12p-railgb/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bbdcb2a06e659cc43cf35ef256d13e17b237cc5b89e5e999cba708d322c01b1 +oid sha256:dd7535e21115e9e9b7441e4a100eeed166360354060a2385a22441eb50677a4c size 151344 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index 44cff514472..5263c8d1844 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e9639a163c9eca985646de717abda4a86abc390423d0b21c68e29adb122c3a43 +oid sha256:ceddd1aa78f653ba44479b98b23191bfe934406eff882e0681cb4fa0e04d27ab size 155964 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-uart-util-library.a index 21daf61842a..e75063327ab 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a15fe9d87ebaca4cee3509c1a59440ca482d2b5c9fb2a51f0f7d0457558ec53 +oid sha256:a4b67e94118c9346144c846a82070cf8c21e84d624351d1c3d2001dcd42a03c5 size 154206 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-uart-util-library.a index b318d51d518..29ce6a01362 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5634a6cdef793f25cbafff738efb65c147bc0b9b78c317233a4a2d69dfe37982 +oid sha256:99ff22583420a306cb9815207aa9b65c041339eb1dd47396597a985aaba54fd9 size 156748 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail/em260-uart-util-library.a index 1e03cbcde26..bd3453f585c 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg13p-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff6357aa0f5cab40eb4e7342f9ee62e812c5145fbb5d6cc5a305b46812ffb08a +oid sha256:e93b7a9ed7864b774a6f99677e81987bc6a9883ae995cee2fd1e1a13eca58203 size 154972 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index cc329cfe59c..465bd318482 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25301565070b70918aa57635e84abae86242e613d63cb231c481e2bc1b18581d -size 156348 +oid sha256:195dc98a48e7baf27f9e065d807022ed7eff1485e5d969d2d5ecb2822e889c74 +size 156304 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-uart-util-library.a index 35bf98fc6ba..184b366bdf2 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44495512adc45793b1d336b147d99028a86b68e37e8a7d4258ae704d6015013a -size 154552 +oid sha256:f405ed871c8558142664ee64364194389587a9ff766ffa9097cb206587f51a94 +size 154508 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-uart-util-library.a index b394803c4d2..821f6cb721e 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:214022189b130adfa7404794d87ac3bb14c3fbb644389b48d92167862c1aa861 -size 157132 +oid sha256:a0b716c540aa5b31b281da4884faf284f4a80bb1b5ec69d5cdd59c4bd80086b2 +size 157090 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail/em260-uart-util-library.a index 6bed0d5a9d2..ef1026421b8 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg21-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c629fa0f84f200f7fde19493315f320537b64aac6d3bcfa2251e380f7bdb3558 -size 155318 +oid sha256:d1b8e9c7732c90bbc935afd09845e98980afdb49f721fbcc4d0c0d087623c7e9 +size 155274 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index 70c23aab2fc..82b27e3e258 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9165bfff33c77439bf54c234af0cd52eaa050242955775fc4bb2bc32795022e8 +oid sha256:65c7dca23483581ec299846d02396b9092c15201c5d9aaa0db5b13c56f9710c3 size 156340 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-uart-util-library.a index 6243a035442..833ba39a886 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87b3c528428a66c60614da21aa3b93bf7753d40fcc63871dd84c3ea891e0d236 +oid sha256:9fea1ed34b513700dac36db0a9f13a58377146b53b86ccbff6c45db21dca6b1a size 154544 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-uart-util-library.a index 018d22929aa..a4078365502 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:48e74bd15a225eca28b6c953978fccef09ad1315023eec1b6990d64a0d943eb0 +oid sha256:ceb13a82070bc1c2c160a97a5522d7629437523884946de24fec105c267d3d51 size 157126 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail/em260-uart-util-library.a index 0bb7f57d8c4..9f6cf4402bc 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg22-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:854094c0d50751852a0165b210d4af1fd78c8db2c1508ad740fbc7fe72f68a63 +oid sha256:f775fe03651014de84b05299da56504910335b6b768ffc91bb683f0e36370ee1 size 155310 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index 131de3b9799..aa82b0f8393 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a81112e19e3d91ae27a64e76eaf2956589ed65ef6c3c66ce9710fd6e1742c96 +oid sha256:7624177d18aa967e632debbb1a42ac9092eee7e81736c3c1e8ddbedec977f4db size 152746 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/em260-uart-util-library.a index 93eadd3fe0a..3533fbbcdc2 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1404c2cfb1920ad9bb585e6ed023052a05283c6d23eba8c277e57fe0fbcf3657 +oid sha256:cbef02fa2f186cebb6241f593adef43999f3cfb731734d279919be958f733ae2 size 150948 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/em260-uart-util-library.a index 5e842cd5c09..b170219eaf0 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f5c168689f2b9f351607b65746d28796628630055ef6b252b9bd81cdc595a221 +oid sha256:72470828b9c2449848da40d07128a1ce8e6f79d347df47e7f2626469a0bbfe6d size 153532 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail/em260-uart-util-library.a index 7625ddd50ee..80e52698fea 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-dualrail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e90b93a77ced010cc6ce6345f832c370c73236d2807e77e4099fbc67e6b08275 +oid sha256:fe05c47b3030da642a5601e70a960e4d8e027f0988b26fa267c3a8de426c011c size 151716 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index 9acbccf13fb..48d8edf58c6 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:80680f8e9364ff9ab672c3dbec2db1876e152350e0c0a62f2a7b8ad25355de66 +oid sha256:3683d8dd5e604cc2feb79f24336f1341e40fa3dcb61f8632de09ae5395cc0ef3 size 156348 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-uart-util-library.a index db90910a292..1f3ea18686e 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2bd604921a0529eb7343440240294d273f48307a2c9b1fa540bdaf22bfb40e0d +oid sha256:52b41ada2f24b3de8189cd64b74c0a94f5e45a1e9697b114b2f2a512b1b60e18 size 154552 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-uart-util-library.a index 4503636537b..d844c1b0cb3 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4cd28fc29120507b5ee7ba85206b1f36ee3feb00e3946fd07e6f34d8786c4fdd +oid sha256:a24f0063be11d726375c9acc28655eaff415f724fc69c32dff1d63982bd9c4b1 size 157132 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail/em260-uart-util-library.a index f2ac6e11055..0d101d7af7a 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg24-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12478deb75626836364578f0f0fb48c95ab158d740b9fb4e723c449b812cd664 +oid sha256:f1222e028746397b0bbb541ae24fa97de72905cf9597b505b37f5f38fdf7ccac size 155318 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index ef5a52cb18e..8622ccaf8fd 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ef309c63a20ac776f2560d1d7758bc256da9582e5960750e3bec322a94b6a46 +oid sha256:04621272faec73f788b00bf7b6caa9daac3ac471e1d2fd991e23c50bb2ab1206 size 156340 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-uart-util-library.a index 29973a85ad1..0c0086a3033 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e24f61bfd015eaa78c67cc1318fb0092b291a666bece10f774d6901b6a99e9b +oid sha256:dde7599d9c0e9ae49509c335eb68a955b9dcd4b59f9732d33ca7789e490c2208 size 154544 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-uart-util-library.a index bdc86f271d5..b386e2d005f 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:133f0d6110ff8c9f69c4d239cb099660ded39dda1aee74404fdf534d34b47a20 +oid sha256:0919ec38acf5527617863c189e6412a7c9da104e0bc22891babfe36e1495801c size 157126 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail/em260-uart-util-library.a index bb2fc3a0ee6..3c0a91f6300 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-efr32mg27-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb5c935b9115b8f611459f1efcdce88d35d8003b0d219706c9bdebd75df6a477 +oid sha256:5c66c01d04413c2771b7fefe9318740b3f4e70be2ea71b705e9386a8eb99502e size 155310 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index 67032b786f6..7c39b816df8 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e7dabf770a7f55ac39ee246be23869e819f72ac5c5e7e3f3f925ae97a9c12ff +oid sha256:caf82c46816e899a351f8e3a1fdeeb6035491fb5cc40583e53cabcbae3187063 size 155640 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-uart-util-library.a index 716ddd4104b..506c65497b7 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab28d7bac172c02b74632026fcb2602c9bd32fb4fc3ad4dc572b4d9de5cad629 +oid sha256:42ebf8438342a1b2f19530c050ab407646ef521ae436899be84adb984af9283d size 153882 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-stack_protection/em260-uart-util-library.a index f1f91177aff..f6f4f3c0661 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c5bcc40d52100629dc53bea0bd01187b5948e1abfe12af35746e4a97d0ea713 +oid sha256:975324d2ce90ead9634434076dd30c8379edf230c2fbbdb185693b13e3d0e5bb size 156424 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail/em260-uart-util-library.a index f386263aee8..f216abdf9b6 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm12-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf6e670a20e46612cf781a44d7d26b552c1ead203e525d64f747ca6106edfcf3 +oid sha256:fe5c569b4e05823926f21ae6c92c5bc27999a8e2175ab2348bba2fa08aee3917 size 154648 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index 5144f329054..8e99dd89190 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9169b3f8c4d0bfec11af00f32d16fed3af0103acefeba924a1328172db78aaf1 +oid sha256:d9f989934d40302fac2999c2c635bbe80dfe41225020020096c37c9396573179 size 155626 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-uart-util-library.a index 2bc9ed1ac7e..02c74f38089 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32d5c50d1c30d2c6b4ef99442285475dfd9cd79ac0923664fb13242143925bb4 +oid sha256:ee297528c86bf9cde3a2c263c797a58d92331cd443babe38b96b4e28ccf024f4 size 153874 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-stack_protection/em260-uart-util-library.a index 835434598d5..d0ac520ae40 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7365786c3f58b3e1d7052b2e63d6cb47d3aa58329434f7560ffbe7d5fc64b250 +oid sha256:a1725e146451de843cb458d8a3516293c239f0dbb1d12b0f45e80ae509c88730 size 156412 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail/em260-uart-util-library.a index bbfb2116abe..b57d3ea46d5 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm13-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e823b7663db932629a27e5b548012d0b1742796424b911b97e5f4cddf01f7db +oid sha256:3942919d0237596be6329efc2d8dc6ced1a2275cc3c722b453f5978ecfdb2074 size 154640 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index 3c22a39fb23..b9cea4eedd2 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22c408cd2663767e94c138a61860974d5161703ec580776c5ededd3c5ff99f29 +oid sha256:77df5168587a78ca990390940432ac76339df7057c39d733185ed09c18df5501 size 156052 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-uart-util-library.a index f87071bf9bf..c790d773d41 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3fbe97c8084d83d4838cd9de6ac5db4d6a2a99674310d5790a996e205a69cefe +oid sha256:0a8a06ea98b801b2d21902c9ec1148709785aa5dc3fe4f1757931ed99dd6980a size 154256 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-stack_protection/em260-uart-util-library.a index 3cffa8e7e43..0e36aa97c3c 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:892d49b72159e3f24f2741cda66dcbee4f0ebf3ae2ea354b96bc457fdc57d361 +oid sha256:04b5d7268e39940e4d5d4aea885dcfd3f81d9ee3f37bcb31d2d8b2291849397e size 156838 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail/em260-uart-util-library.a index 4e3d4218e6a..8eb64157ba8 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm21-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0c9e1dec171cca59d0d576eb3713e7046bdb4c2dbf8de495b3637603827db59 +oid sha256:91ca82312cdc6eefcf3e4c38ab0f21b6aaf91bbb43571a37851e126725539136 size 155022 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index 50a76558ce0..8660b8415a9 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8bde9ebc290da09dc982b02066bda1df926025a746cfc1a4ef0d0815ab88e84f +oid sha256:6f4f61a0470e6d7d3988ac9d74644b765786b6ece47c45ea03aab37861920eca size 156052 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-uart-util-library.a index 1e85b8eb7e4..9d1d487f83b 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2eda2f607894bac40507898a09ef508677075c5ef158ebd6a36a3e9225895807 +oid sha256:2d6f5f9036f40e787ca9659182e889b04773d8a77d16d5a5eab51e93a0e145b9 size 154256 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-stack_protection/em260-uart-util-library.a index 9e11b22a29d..d50b7bc5d06 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03b23ac56d8807d202b0c8e1d90abc6d824ceadd22861fe22355c01a2e2cdb12 +oid sha256:581fdc1b6739d03f9b05717570748cad1b75f76c4cd899f90df589253476d1c2 size 156838 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail/em260-uart-util-library.a index fc5c67e1fad..aa2c17d5d62 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm22-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef9c26732a46ab2bdc95b019c67f48f938513975c5e693382595cd3d0f412e97 +oid sha256:a047914eac87d51136641f536eff552bd99d9276b72adacc95101b0420343467 size 155022 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a index 7b1bc6e1ec7..e54adaa492e 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a7620d992df7d0bfbabed8f04159d3f35ed332074a425d0353514242e758a30 +oid sha256:dcbb333c633f6ae0d44d088fb33a78ef6ed05612f4b8ff9257c6dfa0f514dc3e size 156052 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-uart-util-library.a index f262949e00a..364ed8554a2 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d02eb033db8db9f47691123dcc829763dcc3c067d4047d201d68d280356ceaac +oid sha256:0c161c636d2a5b065165a3e8c8061faed21d2820764bb50a713e00f6ec44d3a9 size 154256 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-stack_protection/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-stack_protection/em260-uart-util-library.a index eb88951b49e..1dbf46bbf91 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-stack_protection/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail-stack_protection/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f14cdc42b7507b794a245109de2e8e98de9c247a719fcf4e3a64435b109d06b3 +oid sha256:5397e7e4c71f7e77a3f9409976d7e842e5b3b4934ab94e861be5b454fdada509 size 156838 diff --git a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail/em260-uart-util-library.a index 3538dd2917b..8c6d056f606 100644 --- a/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-cortexm3-iar-mgm24-rail/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c0b2b799ec36665786d3a6ee0b71a32d23377909a98edfb88721c8496b7d04ee +oid sha256:d40fff011a427564ad4b715ee7f7a28dc21f14d474ce0ea5252384b220a72099 size 155022 diff --git a/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/em260-uart-util-library.a index ab4e2c5cf37..ce175b27f4f 100644 --- a/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c41d4a251cb63755a61a5c93b355fa57c6d7242fb45e5b397f3b8fec9b333428 +oid sha256:72dc9ae3d916b292b4e38ce0548575f06ad1cda35ab3245456b7d552d50efb53 size 290776 diff --git a/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/em260-uart-util-library.a index 7a3aee46a4d..3bc6a8a22eb 100644 --- a/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5a76d8b628faaff50778a9a55c673e0a66ff18ac3ad797aeb108ad1e8e8d98a +oid sha256:e31ec0b74a647948a72134d8ca53fda7e24e1c181871a70d5c978863870177d7 size 295838 diff --git a/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/em260-uart-util-library.a index 4fa12707344..4aebcdd5341 100644 --- a/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08d15dc4da7eed0cc7481cb7b2219299eb857e0d1bb65193d044e2545a354434 +oid sha256:a904b8bb3c33923eac5d99c20ddd0d2b35e890e2225e2ea39f32225e96a40805 size 200342 diff --git a/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/em260-uart-util-library.a b/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/em260-uart-util-library.a index 996fca1b311..2961cf7d5fd 100644 --- a/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/em260-uart-util-library.a +++ b/protocol/zigbee/build/em260-uart-util-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/em260-uart-util-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83c41f7578f39b84e9c1daa00082c05515ba65ebbe3ec9fbdbd220366ae59a7b +oid sha256:8d827b4682c6a163763994e479bb91ec7714f07f0284e988abfccf0f6ea0b21c size 289670 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg12p-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg12p-rail/em260-xncp-library.a index 8aaf9e32ccc..113e1b29a0f 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg12p-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg12p-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:073fa657394fa8d76f0c2a4601862c8a36c036efda3001b463b0565d572d1034 +oid sha256:839ca6463415fba661c600d5f275d2d9719865a102c693feb00ee9ef7234531f size 3454 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg12p-railgb/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg12p-railgb/em260-xncp-library.a index 6a2941bb6a0..9a4c9b5c61d 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg12p-railgb/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg12p-railgb/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d52f1844402ac6974bfa5d74f0c073eef3ac606f9b4f4d61d73013a19c84d364 +oid sha256:125d93c34568a30faa99430602fafa3b719338120fbd65dcc4ac52376c985c06 size 3454 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg13p-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg13p-rail/em260-xncp-library.a index 41241e9937f..c822d9107a1 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg13p-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg13p-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b17ec61bbb8a0aed14f77b55b92236e09bce895541316a0edd3e420c183527b +oid sha256:c403b06686cb315294ad17c58feac6e37933984d86703165b570450696a81ca1 size 3454 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg21-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg21-rail/em260-xncp-library.a index 1a38cfb45d6..a4aae508a08 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg21-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg21-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb08dc3069ebb5d6dfc5a9ca9304269e63d02947d1506a29f679c44e92733fdf +oid sha256:91834d03d5b8743bc2508568bd18e84240baa9d9b8f55bb2d6c0d1a378e5b41b size 3462 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg22-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg22-rail/em260-xncp-library.a index 1e8a2d4d952..034152a5b25 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg22-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg22-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6453dc111d5159137f78fa9ac04e0d3046501293c1c541b193f55ab2a5814c36 +oid sha256:b1f54a26541c737d9490017a9fceeac2d8eb4b9d5326272da2efe00b90cfaec7 size 3462 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg24-dualrail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg24-dualrail/em260-xncp-library.a index 9b459d87fbd..6c4776a6125 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg24-dualrail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg24-dualrail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7460c576cb3b05c18e17032d360444c44fbc16d2ab8cf13b2298a9a97dea9fda +oid sha256:16631c31c8abe728c196e873eacbbbd964d17319f9dbf92eb8500a80b40951ae size 3462 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg24-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg24-rail/em260-xncp-library.a index bb639c91c73..3f4eadcbc69 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg24-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg24-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5b1bde9ce67ac2e5c11798301657779108576c0474d557e1de240acff433e65 +oid sha256:b1c34fe4a74162e430da0d7bd50be44a6bf9cd1a9b130d6aeb11275ce9df32aa size 3462 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg27-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg27-rail/em260-xncp-library.a index 96f326ac568..68f23f349d1 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg27-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-efr32mg27-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62786b14d6a5d89540d422175e338f5789e45c07b677de824148b9f46f799881 +oid sha256:4b673610ade62dcdea94c79e7758ee5f166f76737936208e402ad21bc3af16c6 size 3462 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm12-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm12-rail/em260-xncp-library.a index 96ec6dc57fd..dd0e083ccd6 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm12-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm12-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd81c0c828e4830852c6887a7a2c4c6ff3a56d0a0d047a58246aef302827c336 +oid sha256:b1f7bfbe701ee3b55a4b1f0dcdba991a0bee6d93352d003019ab2eea0f8a15ad size 3454 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm13-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm13-rail/em260-xncp-library.a index e53a66083c8..2b8468e93e3 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm13-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm13-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32b9a1524489eb769c542ffd8045bca4a0166ae7c2a7efe8d553ad0730da36cd +oid sha256:f97b1b76c95d5a9af4dfdbf2fb3bf97b2c740caac7da6e1775f19cbd4c6fe2ac size 3454 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm21-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm21-rail/em260-xncp-library.a index bbe42994fa0..e3f7deaf3f8 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm21-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm21-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed30b87a3427f112eefe0e4175eb79a434e7589ee6a987d334c054ad00e2c720 +oid sha256:932a99ad41aa8e8cc4def1aba3fdd7b16a477ed4ea21f3258d973d302a84c3c4 size 3462 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm22-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm22-rail/em260-xncp-library.a index a1235229b79..4b6da8afd4c 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm22-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm22-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ea93e9c0b7bc02cc93d77e577eb70fd7c92f2dfa952177e49a3368424c62e1ef +oid sha256:9e71d7478fd9bca98e7297a0c1aa8de50418257d2ace134bf94471ca57545df3 size 3462 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm24-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm24-rail/em260-xncp-library.a index 74886b38d25..bcf45f2be1f 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm24-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-gcc-mgm24-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:def3d6e4106bcb999b6b76f22af20a2fcf327105218bd2c64a479d9e66bc93a4 +oid sha256:5a34b3592452b3eb805a98eafa16cebe8ed7cbf34d797e66c93039f440573e12 size 3462 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-xncp-library.a index 34871fa349d..309bdbf3829 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38ba3d1bfb2acf8274110f6563779a73a36b56148ac124b7d8772a81f11f3880 +oid sha256:346f1802e985b4ecefa0b3492687cdabe7c40e78585bd1e057757a90dce2ba93 size 8128 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-rail/em260-xncp-library.a index 6bf361e530a..1e97054bfe4 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a112cbc83a68a47fee84159d48f50ce4473a7ddec2bc1fbd6469be6619c00ab +oid sha256:d45d024ee8b9ea644b6767eec6bde155681466823ba3d13f1b331274478b782d size 7596 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-xncp-library.a index 3780c72ea5c..9aec267a6b0 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f36b1dab10a8dfdd1f39eb18decc4ba7a7ed0def29721e962fa1e730e318386f +oid sha256:b9716c3a008265c0c04d414895932d25f9f432c7b072def4c227a42b94fb77e9 size 7738 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-railgb/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-railgb/em260-xncp-library.a index d7258d657b4..49d60e03b95 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-railgb/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg12p-railgb/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:064f882634e16f9c64da705084c89a5aeccbf2438e548f82159d0c2ff14657a1 +oid sha256:dd99668d8044b8bb8f8ffaf8fbbe7cc67d02b6b523bdccefa32a9c000f473e90 size 7206 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-xncp-library.a index de459b6857a..0c8fa69b614 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:902f65023f2a8cdc49a912c52214d6d2b1375878e9079fb3d9df4ac21fddd329 +oid sha256:9210183817d1e72331c876c65ad32bb27ff84e1347d741e37bc92212b28d9b5a size 8126 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg13p-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg13p-rail/em260-xncp-library.a index 202817f91c7..a8adb6079cd 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg13p-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg13p-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d5b7ccfdab6dfd4dbe07c132913e3f83c8fc642aed7f6ca5efe7f248593fbfa +oid sha256:fc11424e005b9c58d782d7434d39568798c6402dbfaadb2a54672ae3ff7704aa size 7594 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-xncp-library.a index 11864119df2..ba8ab40caa4 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg21-rail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7dcee12e708b11521fe7def78d89fe5b77216ae63d0354060e6cc47d3d99d7b -size 8130 +oid sha256:d0e8709393cc91eeeb1c85472986c598ec315562b4ff5e30555da75fce0e9100 +size 8124 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg21-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg21-rail/em260-xncp-library.a index 88dcc308fb9..1787a1207ce 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg21-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg21-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:30ee063fc803d0299c8e259c002f7bf4ef09abc09bca8b3acb6aec5b29d15fbe -size 7598 +oid sha256:43366ecc6f1526d77b04401a4bd496bb9bde770288fe280799afeda102c8b29f +size 7592 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-xncp-library.a index 979658e0c28..dd9c7572588 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg22-rail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8268da5e3d8c6019b9a9467d974f341aa0069ede5ce275bb755abaccae231aac +oid sha256:f48056edb01a5fb8979c3ccb25ed66c2fea8fe5d74e709e2fadd2e2229ca75b7 size 8128 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg22-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg22-rail/em260-xncp-library.a index 841fc5c0b41..dfb7116c6c1 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg22-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg22-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b11b43ccbad882ea3b9ada359cf84f0d60fda99cb3648e3ec651c5a8d98aa85 +oid sha256:fc780b555bee360d6c9dd87a085454347d65273a3a48b7521c1b42dbc7f5703e size 7596 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/em260-xncp-library.a index 134a22d8dd1..ae681322b96 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb2823dedef943ef865a423c887c91c97cae33ebcee2f66a2e90afd4699997af +oid sha256:d521c08462f6eae1511b01ebbd9bdb84f09ad2dd5a5c4aec811a526d6229d232 size 7744 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-dualrail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-dualrail/em260-xncp-library.a index d29217832b3..4ace0e60817 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-dualrail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-dualrail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ddc6b4f6beac905eaeb25715babb5e97e52b0e66d8fc16a4e3df509d2361365 +oid sha256:ec9ea422a25a7d77497350cf903c3f0b141bb6f3023ef016724be8cf294c5a9d size 7212 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-xncp-library.a index 1a60f580d50..d3937ca4efb 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-rail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a339c0689e7f1eda14977883a824fa5fdeabf8654317b77debe5e0a44024fdf +oid sha256:d13969dd7b8efdae29230340e387b8a6637821d9e3d0cf509432b86dd7308db4 size 8130 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-rail/em260-xncp-library.a index c0ca583d8aa..69aa35aeb67 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg24-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:010aeeb4d796f80e50cd7cc441ff3542778e05cbf4af7094451e1647f66ba390 +oid sha256:4308a2bfa070f4c410db5f7d529c1860b08b7b6227d963a953ff578c9a83dc91 size 7598 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-xncp-library.a index edb63449fa6..4ff02138ed7 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg27-rail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09f7a806077abc0eef740962e761d6e024a8d4716dcf778e2bd73349f856e892 +oid sha256:64b6a00ae2a62750603cea7619a2e377cabab70db8cc9a0a7e826338ab19f701 size 8128 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg27-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg27-rail/em260-xncp-library.a index bef329543ee..5e0ef73dae0 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg27-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-efr32mg27-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24cdf7495e855dccc63c76cef0c1c7ffce24a5d2ec23e26dfb4ce74f3b1a49a2 +oid sha256:71136f4488ab2adbc0fc0a9868fec2fda80fab83ede7182618b7b10198123054 size 7596 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm12-rail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm12-rail-stack_protection/em260-xncp-library.a index 00d1fe9c94a..17999d469f9 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm12-rail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm12-rail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2c8a49dda059bee668cd952f8a8ce11296a880506000d8f844237191d02fd4c +oid sha256:f6ef0bb07b2cc7f9da748f53793bc51326034d6756899f52e2f68e760f9cba3a size 8090 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm12-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm12-rail/em260-xncp-library.a index 7a77a393f70..a0674466aa0 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm12-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm12-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad48d37595a2350b57b52433a192d5e2c8a28ddda0f288b28c464cbb24bc4fdd +oid sha256:736f294f278a2513b531b2f00d945df3eef9b0022249fcd0caf2e3d7e30294b5 size 7558 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm13-rail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm13-rail-stack_protection/em260-xncp-library.a index dbedded5efe..ded5c8462c0 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm13-rail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm13-rail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:547268e315b0fa36606fee870b467bf64d438f84fd79dcf5f70ed86a84430f62 +oid sha256:5d53698bada1a7816d507d2d92b012704fde952db80da9ee14016c685c916a43 size 8090 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm13-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm13-rail/em260-xncp-library.a index 23176ecdea3..265b951f4bf 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm13-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm13-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0130e3945e9693785910f7437952dfaa528c406a60259ae24ab89e6e18a8d77 +oid sha256:4e129a6e97f2526dd6bd10f9bcc6d7e63a0a6b1897efa567342d8d1420399386 size 7558 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm21-rail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm21-rail-stack_protection/em260-xncp-library.a index bdf21280d0d..c6b3b9c1507 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm21-rail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm21-rail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae5ded16f805410689a9ebfc53b1222da5169f8c6c7a5979481f8e4753ae0c59 +oid sha256:5e3abc5f4356f07cf167d2bbd5d241f8517645ea611412350c3828843c9cfc63 size 8096 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm21-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm21-rail/em260-xncp-library.a index 41d6983a76c..36fcd9699ed 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm21-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm21-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fdb7e1a04155d2abb405789027180b1ec4d456b07772f2843c63c57d86cca19 +oid sha256:3bdcba3bc34a50ab62293bf2fce5d4a11501ef4da25edd738c1d7424401be8d9 size 7564 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm22-rail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm22-rail-stack_protection/em260-xncp-library.a index 14998c52a43..d97a151b6fa 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm22-rail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm22-rail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:515e9cbc1b2ac11e830368ada3abe5691c6e3f8627ca6a77391a36dadb2fed3d +oid sha256:0712dbca424d119dc549944e84bd44831869f07c2995cfff80958c0f054b2030 size 8096 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm22-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm22-rail/em260-xncp-library.a index 2e73080b52b..495f2c84f71 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm22-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm22-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa86a9c21c891554976452ced922840952a5f2a93bc411e40b1604d4aaeae5bd +oid sha256:219c788ffa0073c48ea34dcc5ca14f6912c9a0ccdbb60d9a4ce496db08635c62 size 7564 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm24-rail-stack_protection/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm24-rail-stack_protection/em260-xncp-library.a index 28bc9ec71ab..cbf77e419f7 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm24-rail-stack_protection/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm24-rail-stack_protection/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6bf0c3795fcda8ec6af7a85cbc47f5a68c530e5f723c6d741654bb50ac1e8aa +oid sha256:8c6b259d41e51a6a3c5dac739739a739a3257f4061332f8b5afeaca45e4af640 size 8096 diff --git a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm24-rail/em260-xncp-library.a b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm24-rail/em260-xncp-library.a index f67bd7034e0..85a4dc5e085 100644 --- a/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm24-rail/em260-xncp-library.a +++ b/protocol/zigbee/build/em260-xncp-library-cortexm3-iar-mgm24-rail/em260-xncp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d182020e1f346a1916b9d03396f989700d4e3bac47567398408c15346101994 +oid sha256:ca4e27d2371c25aae1fa38ee0ee3f77b2d73a69656b31cfb36d40a49bcb5bce2 size 7564 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/end-device-bind-library.a index 95688c13530..c783b19dd79 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e05cfaa8ee0979e5f6653901ca17e49bc916f74ffb4969a0332984270450b59e -size 14858 +oid sha256:e1f7aaca0bf84d787ef9403e847f8bf24a3fb386b9e7154e4ec7ae0fca1c1ece +size 14922 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-rail/end-device-bind-library.a index 398f390432e..81428cde386 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:000df6fb48ef910de04971b041dd8eedd3f31d898d066725fb5eb0ba4d2b815e -size 15374 +oid sha256:da5d4398b1deeabd02f6cb4cffbb182c78f1b20a14866d981f472cffbc727275 +size 15438 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/end-device-bind-library.a index f0d9b8940b1..6defafa17cb 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb30f99a13c0b83dded6c2f2ba62d7884723f7f66a84379139b96ca1ed6e11ac -size 14926 +oid sha256:b32548202b0670e93d28364218e25b75769b5c86a9607e952c7ea6d2edd5080c +size 14986 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-railgb/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-railgb/end-device-bind-library.a index 8733553098a..59d8c4f9ea5 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-railgb/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg12p-railgb/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fdba782ab5e2c118b9bf0c4f6458f0069c8a72e1a938df6ed4d0a5ad35f7f98 -size 15434 +oid sha256:4d3a8cee0a8c6acc6170f7f5be06d63e1e4ce997b89261b8b75405e3bed6578b +size 15498 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/end-device-bind-library.a index fdda3314f61..9e9e542f786 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db6875bbfb0e39b785f3c2539cc3783026263be3fba093c24b72e73a42d32f17 -size 14858 +oid sha256:d12e6b16d97871c9e98ec3b56915bbf0a9c9dcbb11926dc33d80cb88df3efa4f +size 14922 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg13p-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg13p-rail/end-device-bind-library.a index 47a94cb84eb..57809aee107 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg13p-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg13p-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4499fa12054ab851ea6ef7874abd3e750e763d8a9fc81d408cedcd23d59f2d1f -size 15374 +oid sha256:aab48b438b5b4df439455e2b9d5a41250e9d370fc17916eea60ed40a7403778d +size 15438 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/end-device-bind-library.a index cd3ac481de7..4fa4dde11d1 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ca72f0b6a096aa66da532cd4e9d639f3274765a1158af33df1f776220e54fcc -size 14870 +oid sha256:ce80b4e20a0ba0164f89d50c419118cd9c23485d22236e93418185f034a1e18d +size 14934 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg21-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg21-rail/end-device-bind-library.a index aca39f21a99..201cd3414fe 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg21-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg21-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce12fe0ef2d8626c606341d22d90ba46b99fefd194eb9bdb0ee410c8792699c2 -size 15386 +oid sha256:1213c0c867b99a302724203ca4ed7de6a93403331d77cc90bdb177884bf0b4ea +size 15450 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/end-device-bind-library.a index 087047f8ca7..fc0ed17f19a 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:007c73888d9043717d17723fe6c2efff126f3a02f76772c9dfef18ca4421623b -size 14870 +oid sha256:0ba7449e633fd7d4c198fd69862102a757fd364ce2e124dd7579f5d196a132cb +size 14934 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg22-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg22-rail/end-device-bind-library.a index c6e5f26743c..1c836483792 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg22-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg22-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c850f4fca1037516d55284338324baeaf368bacd631e361d04dfaf340e1fcbc2 -size 15386 +oid sha256:1739746135ca2be2c9417ef20a2ce1b7d16b1f43d5a0c745b2c50a6451f5a5d4 +size 15450 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/end-device-bind-library.a index 20fd9c322de..b48a23263ad 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cab855de18e750b89ef37196074f652db4831e6e9ef2ce5d609d9816c48acb50 -size 14870 +oid sha256:dcd753cea4ffbaa8a1ab08b8c0100b9aa54bae32c9b0e5b98851f01a44aa59b1 +size 14934 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-dualrail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-dualrail/end-device-bind-library.a index 28e63972d16..6d6534b2510 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-dualrail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-dualrail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4eee789d29d688a3aff96f180941583690504476f065a2b65b8756f15b56a758 -size 15386 +oid sha256:d7b56a290f7fbf4cb3ea1543b108d60c0672082849249dbe29fa2d06c2b7bc29 +size 15450 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/end-device-bind-library.a index a1ee255e8ec..d7fe4082faa 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe07ab5a46ad3efab1743c1484f0efbeee9d48dbe7dfb0bc3a555c89d0afcb41 -size 14870 +oid sha256:fbf0e9ce5eb588a7147a90e113beea4722383cc0982b7fe82b3c9f914702d949 +size 14934 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-rail/end-device-bind-library.a index d57062df31c..9390992f7d1 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg24-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f1029b6fc546ba2be622bbd223c1c69ef396e067f97deb3ba7d80c23376197a -size 15386 +oid sha256:57c76e46519456af0f4a65cb6d499b8861ef6d98ed1d5879c3cf826a80f69727 +size 15450 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/end-device-bind-library.a index f635e679b5a..7ceac3e316a 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e7dbb3b75f86913a5edf1c91e84b7f0ce82a8d8b416a7092c93f0f082702280 -size 14870 +oid sha256:2e4abd353c4f9137e80e82722a08fbf085003c5a3482c10a9f58211ec4cc0592 +size 14934 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg27-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg27-rail/end-device-bind-library.a index de4efebc17f..996906aa535 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg27-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-efr32mg27-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18918d14fa395b45350fd4516831ad7235bd2d89006fc9ed7c610435aeacaf31 -size 15386 +oid sha256:4396414602eb6acb344a6f8607232d4dc399c7207dbf8457c26e1dc07f63bb25 +size 15450 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/end-device-bind-library.a index fdda3314f61..c783b19dd79 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db6875bbfb0e39b785f3c2539cc3783026263be3fba093c24b72e73a42d32f17 -size 14858 +oid sha256:e1f7aaca0bf84d787ef9403e847f8bf24a3fb386b9e7154e4ec7ae0fca1c1ece +size 14922 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm12-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm12-rail/end-device-bind-library.a index 47a94cb84eb..ddc8426fadb 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm12-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm12-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4499fa12054ab851ea6ef7874abd3e750e763d8a9fc81d408cedcd23d59f2d1f -size 15374 +oid sha256:33696eb73713a1087921f66ae9de19e2fb0b663a99a43d5e0ba578d47e64a31d +size 15438 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/end-device-bind-library.a index 08014459f7f..0bf58e4f2e9 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:670bdd7aed2d09df322f2e8326045f5f43040831a6b64e143dd34d780afd8845 -size 14858 +oid sha256:403dcc0cea933ec1d86ce27c0c569b74ca1dfbc581ce479d1250e700c4b03c20 +size 14922 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm13-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm13-rail/end-device-bind-library.a index 10fb25edc53..0b66f4c4e19 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm13-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm13-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86187c5a15aba6c97c758e30bc7d334e9afa52ba971ea05dd9d1460d13a0c465 -size 15374 +oid sha256:ad106f3a5f54d234b43b89dcd5112457e674fa2f9172d36a76a9f76ae138312f +size 15438 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/end-device-bind-library.a index 83293aedbbc..798ff73f7e4 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2280c5b89c21b67e5b0733a3cc2eab1da3fdb67573c86ed71ab9120bac4d1c49 -size 14870 +oid sha256:767eacc19f1ef7deb773f8a5949a203c8dc6a5de81a38d7d784caf10b5103d5f +size 14934 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm21-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm21-rail/end-device-bind-library.a index 8d93fc4022b..19fac71b9c5 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm21-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm21-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4bd90b6c82137bf9907298c61d52289704e2b793f9acb78ce4a916db348d4505 -size 15386 +oid sha256:e806aa15e271042a7e2ae5f0e2f24962fc895876606fb644ed7eb68d8dd22e16 +size 15450 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/end-device-bind-library.a index 9bd2cc0a795..798ff73f7e4 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d7c2acbdd8a63034fcd5eddb2cf1b8cb9c9a98b29b42241caacce86aa3cc264 -size 14870 +oid sha256:767eacc19f1ef7deb773f8a5949a203c8dc6a5de81a38d7d784caf10b5103d5f +size 14934 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm22-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm22-rail/end-device-bind-library.a index e38bbe0ea42..f73e32e2135 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm22-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm22-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d50a0a0fb3b48a4f001a73def2f5074b4b5ab74d377804f5571bff4626799951 -size 15386 +oid sha256:65fb0c019ee36af9a95c2f61b925b463f5d0ad0c9b61c7dc30e760a5705920d3 +size 15450 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/end-device-bind-library.a index 8fba0a54a2b..a9cb64a8eb8 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:461c8e1ad66d20ddb0ca056f546ff2f49aacd5042080d890a57b217e54120fe6 -size 14870 +oid sha256:7def7222e8efb8fa8c8515db02ad253792edc4c21fc7acaec90091d9152249b9 +size 14934 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm24-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm24-rail/end-device-bind-library.a index c43ba0aca4c..23e7eedb1c8 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm24-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-gcc-mgm24-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f11e1ac3e826f08013be97dfbf1ca02495d3ef43fff1925f56ce4cb4e7a83ae -size 15386 +oid sha256:c34b86f21c64860c3db06cd540a8c252cb3a1bdf223d53a13fa71eecbc9172b5 +size 15450 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index 73c32c1b4eb..47c7e890834 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:23753c937c5f31c0ba641c98378326daaf4fb13c7e9a6321f62214d86b157a3b -size 36482 +oid sha256:b72849d69897b58e09fb5637a010dc3aa89855bbc8a1c13f239dbcaa0494d84f +size 36560 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/end-device-bind-library.a index d9a5d557d3e..13e0c9dee73 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:65a5519b7f9ca9ccc428e146a1da7c01433f5c16be300ad704375f1dd11c9faa -size 35328 +oid sha256:fe05ee67fbd6c44d7dba9f736f6a259dc899b3ea6132878ca2af35d9d951e583 +size 35406 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-stack_protection/end-device-bind-library.a index 436d233dbb5..2ce7c8862e7 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f9c726e3c3fc4b89018b88d8da8630f7490f34a1ddb8fa7a2020aeb7686bf3f -size 37392 +oid sha256:5596eb3802671c8f6ea57e72f78e8cd8b606bc787d7738409fec31b52f70e494 +size 37470 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail/end-device-bind-library.a index f7ebe8b5af9..13f44979f00 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cfe26737723c965f2b0afad2d5d1636cd0007ff32214a8594f2ccff06cdd69da -size 36134 +oid sha256:88307eb55b0940d246e2e1e4d498ebf2dbfdd81044489cbaed683381409bb080 +size 36212 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index 79db3d42eec..e57c728bfc7 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ee56d374b44c6e04e04e5d90b61252e462103591b852378d46d696a7b028b78 -size 35794 +oid sha256:c76ba26e79c5ca0519a046e90dde88c19293b2fe71ea23e03c065e90b78b524c +size 35868 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/end-device-bind-library.a index c9075db3f23..9ddbc26c422 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f15774a036d5fbbfd7aa2b98d0119ac3f7c5a02550d98c3cbfc3cda283d5378d -size 34644 +oid sha256:2b16d748e48e7568d294e250782e1b3935806e05e89492dec25eb00d7466b1af +size 34716 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/end-device-bind-library.a index d47c9a6f637..50ab4fd4a98 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fb1a2da4dee3c6574536459a5d77179a3e05127988d4a738b46dd4be58981df9 -size 36696 +oid sha256:a23f49e228ec23f7e14568ff01e69729c6a7e490c149fe7ea9d01582535f9c78 +size 36772 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb/end-device-bind-library.a index a3eeaf15068..5c5d1104c2c 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg12p-railgb/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:287aaf2b2dc21a993ad802635d96606fa240dbd645ced56f95552ef9b19bdacb -size 35438 +oid sha256:b67b2c8f15154bc431d3db8cc1c0d0873e8d786301cb12c7b7d9134f80d15aef +size 35514 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index b64f418fb97..a1dbc76e531 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f609bf5a13b93c7742121acedabb1705df175de7f6ddbfb839ff4010734adb5e -size 36482 +oid sha256:29826bc27202c7e6165ca6181ac60edddeca8da6628387e6abece7cf40c955e5 +size 36556 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/end-device-bind-library.a index 98c3fed5c22..318486d6e40 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1da90f47e2894bf6351e0b7af76cd0d90c439cb5dab8ef043f10321dfbcb40cc -size 35328 +oid sha256:9b906d63c7bfa42c1ee7baffbf4536b445e66e8206c195036d74af65c885c9a8 +size 35402 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-stack_protection/end-device-bind-library.a index 51b4fbfd794..97dc5614595 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d5529bf9e405713cc021461d13611962eb2b4c8ca431c168be623abe0c3ea9d -size 37390 +oid sha256:542aba2bdade5e78e45c21b80bd10819be69a7f6c5f4dddef453ca3d17bc2ab4 +size 37466 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail/end-device-bind-library.a index 1a14a818112..2268c11766a 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg13p-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a6190f6c99b59cd7414c63e1cc65db88089366b3107e34aba17f7caa5df4eac -size 36134 +oid sha256:a918d46aeac44b58a6eb56e30b299097c1dc60250b48f18e1d9e6bf20a586399 +size 36208 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index 4f75df21d26..0b9e0da215f 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89dabfb9bd7845f7ebb3e89b8fd91e35cc72f95441164df88db8d52d77a92a60 -size 35560 +oid sha256:cb066ee3e24dbb2262d78f6b52d1996e5402315226db277e36c12c7bf76502c4 +size 35628 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/end-device-bind-library.a index 945b948f4c7..acb9ff3d6d1 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fce3fff77f9ef819d34d1d72d02c9f69691f168683010650563339d7c5fbbf1a -size 33948 +oid sha256:39b61a6674c5d281d4abe8b54012169242b185db075891422a5e5a38e9b299fe +size 34014 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-stack_protection/end-device-bind-library.a index 23e5b437bbf..b1bfc076f07 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a97ae5961127d7494188ff15570cc1c76afeb894ca025929eb8774533a814fd -size 36566 +oid sha256:abd3761d02676a872bd1bab41f29f3920fe9f8b2891b08c49812da9e4cc8c8cf +size 36632 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail/end-device-bind-library.a index e920f887310..9ae94e54325 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg21-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55368e4bfd632206e285178b1f71e67f69baa6c4d4c9edb65fdf85c5e30eef82 -size 34750 +oid sha256:6d8fed370b22d07f197eb67dbc3f2b8e1fe4fb00561e92179920b4e75647494d +size 34814 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index 4a35d3a352a..fa8dac2031e 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:edcb9d37be5a437bf12c44f49ea558bb3ab7909f07bf98372ac1ee9c9523c217 -size 35560 +oid sha256:29c2e8adc7ab0f35b5f548a8c8dadeee5238b1f33a86f0f301ce60dd39b2e43e +size 35636 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/end-device-bind-library.a index f281dd15818..11d5f7aa70e 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3c239b82fdcf1bc72dabca4a40a0b90c70d85a8b11f6dbc4877e332aa20726d -size 33948 +oid sha256:28bd0ce0b8786f640f136675ae0f065a39c7e05ea746e29557f0437a0a8c86d5 +size 34022 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-stack_protection/end-device-bind-library.a index 751cc5e4279..7bb3099e1a2 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcee41c630b5522d9796d882d68165a2abdd43470f5bdd824b1920c75ded1ec7 -size 36566 +oid sha256:17b6c62a0da1c239a3463ef4b52b63f1956d642b4575cdb783fa9a00ba6fad21 +size 36640 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail/end-device-bind-library.a index dbbeb9ef22f..ff26df9b24b 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg22-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a451ec703b5e53690a8c5f8b557e30baedc4c2cd2e0e09d39243fbc27deed5aa -size 34746 +oid sha256:90cd3915ba310399e3843f624d6e633d4761e02bce3efcf5988dcc490e40d302 +size 34822 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index a0b66c8751b..f2a500c8e48 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a1d8364a52a2a814f3871c8345e1b53ea467f317f11c63aefc656c3667e16fe -size 34798 +oid sha256:aabdcdcac416620088552597b3db45c8a156458b3e9f71821414a51d33bc0ce9 +size 34872 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/end-device-bind-library.a index 3c68a6f0d82..b9c1ea6f926 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f963bca166a58f00d59978ba010245cc9d5da4e3dc695390125e502d2308d0dc -size 33184 +oid sha256:edd9e9c923533de94351a37f342f3653eaf61e282adbf40e669a6b2512db9309 +size 33260 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/end-device-bind-library.a index 1a7056d9cd7..1b15594e964 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d20884c030c5624f123e3da4a02f9c3acdf28c39e8e171cc2b31667c6f486c8 -size 35804 +oid sha256:e03008b606877f75443ae1a4d1c87ec32016e0c5c2322d6f429f75fb6556451a +size 35880 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail/end-device-bind-library.a index 29302b9d812..968ed93548e 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-dualrail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:567e4b354dee868b993f98835b45b58ea7901d33fab83a386b005092ac83099c -size 33986 +oid sha256:728226f46f6eb84a8e4a337475da4c9ddb7362f7e27bbb5b116d8cdf3a7b630a +size 34060 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index a641d190532..e58d637df71 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd305b72cda110d525669db0047d4b339094a0d531598f211c25f88caf6e4c65 -size 35562 +oid sha256:4116e2e80630929df4a533dc33569e22553922e9a19513b7a118f6b7accb5630 +size 35636 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/end-device-bind-library.a index 985f91b142f..994b9da646a 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06941d46f6fa9ed1fa577c27eceedd053ded35be0b5bfbc74a8110a9d9c7b3e2 -size 33948 +oid sha256:85e03f26b45cb3530b8f76a55246109a9498baa668a4d4835036d5baba23b6dc +size 34024 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-stack_protection/end-device-bind-library.a index 9fe74f00a1c..79743120909 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3672e9abb705b8da5786a0c9bd491df8d48b583e9c681ad20e3d8983a82f270 -size 36568 +oid sha256:c11385aca5a78d124a1e117c1f2dbc5953ab4c9c7c46f6e463322a45a5965eb8 +size 36644 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail/end-device-bind-library.a index c24dca6ea2e..8b2818f9b0c 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg24-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1fef5675134abb556a2e0c25505c33c09b0cf8d94df3fb1b48cd0048e48849d -size 34750 +oid sha256:a685e958eb2a6858c6a3f96ce3ad9f16427bbe47d0cca5e160e9af4ca7bc044b +size 34824 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index a0f950061f7..5f5584cb3a1 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bdee41f01e8a8d05984658875610899a0542160d0cb38b2c5a7e8e3bba9cae5e -size 35560 +oid sha256:8bd18a2b90b44129e8ebb3a7a3848b59a272cf2f9bcc04e1b8db9b7fa295b61a +size 35636 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/end-device-bind-library.a index c23d7114c78..095bb574391 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a295049b3a64d5bd37e487853e6e2b5dbae9ed830ec35b57a12cc978b777afb -size 33948 +oid sha256:368977f6c0eb9c7ba85905f401ce8d3de6c270661db2eec4b837cb8718bc3ced +size 34022 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-stack_protection/end-device-bind-library.a index 2ed2d457ee5..ce05c1c351b 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a535dca3f9716a6fbab7d3be86a92b294f078353b9a93c2d205b84bc706bdf4 -size 36566 +oid sha256:4fab5442c6b3a7d7b256dcd35584d72937680d7d3eca1d5175da979a11c02e04 +size 36640 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail/end-device-bind-library.a index 0674c3ac3bb..e84cb9cf5d0 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-efr32mg27-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e28b55b9538c3504a6f21a54fffdc30a5f6b1abdf603b5d234b6217f71af1256 -size 34746 +oid sha256:67e62bdea07663cd3d8854707f9689195497ce5dd7931fed2c657b982b85d2b6 +size 34822 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index 1f1262b9e62..25a6a837e8d 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:052740a9b24cf016d2689827a262731171087f25fee738c61a3fde40ad2f6100 -size 36410 +oid sha256:f8d6f35ef38da8c0ae99cc682507c8af4ed3a52226f6eda7f0aaabd1fdd8d1e8 +size 36484 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/end-device-bind-library.a index 95acda9a2ee..49816b4b3be 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97f2b5151d9b0dc7cf01ce906c2ee388aea9479295c247500d61f9fd794f7548 -size 35256 +oid sha256:359a8239bd31512bd2331a62973710ce8b368d345a7f55cc026d5fb92f8a1d04 +size 35330 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-stack_protection/end-device-bind-library.a index 3cb321113bb..15f6a0abadc 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:425586a197dac8a5d324bd34e7057a0e2a380f7973a1cd0f865bf6672ebbec72 -size 37318 +oid sha256:7abf842b5875014e56270a94108d8ba324fc9e1b5f18df929e20d87d2208fbbd +size 37394 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail/end-device-bind-library.a index fe15969b8a1..55d59d175b2 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm12-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f7f38f8e333af9e84cd7ce0a790f6bf827b8b7bd790b4a40c15af93dc7c422a -size 36062 +oid sha256:4037dad04652e7567aaf4bb17b2b4f640b43cc97ad8cb07312ff1b8e6060a1b2 +size 36136 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index 92d64a6a9c8..36af2a49a0b 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eda7bc67a7878d1b5c3c003233c3c5bf6dbaceb6dcf7856c3d9acfb0c4a2c006 -size 36408 +oid sha256:e277f9cb372ebde0f37d3203118e0221a9d827a46d7cc428ca5342b2117a6159 +size 36484 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/end-device-bind-library.a index c1d14385684..a5c34212574 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f3353f3976c9e397628419c069328d0d51e1fbf6b151fd8055326328b2b74587 -size 35254 +oid sha256:07665e21a9ea120931cb75a3922e79ec92f3e1f811a491d09f0ffe9e3beb2b78 +size 35330 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-stack_protection/end-device-bind-library.a index 44797a4b38b..7288c3737f8 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9af52037c21735d181d79e29f0cfe5df5fdfe6ef1ca65cce5c90f63989925c6d -size 37316 +oid sha256:75f8a55a9805137f4e1a41d2b7a0c9e447152a3cbbd1cf9dc6d7cb1cfc8ccc96 +size 37390 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail/end-device-bind-library.a index 8954797c188..11ced5ec035 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm13-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe4ffc693b23349101c25f7886de0add2846d18e1d89f57f670bd22654998b86 -size 36058 +oid sha256:ff44cd6f9e8156ff290b0caab9f8e154e5ab094f53df6d57737668ec01463e30 +size 36134 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index 19d41a84ca8..484770fadfd 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6a8b3a8d926cf85c61b42e75ea9487d476a20629978bf141d31ee85947db07a -size 35496 +oid sha256:c28e431e0cc5d1c680efbe5880f6e022a6bf364d8ac5ffceca13be45723fcb57 +size 35572 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/end-device-bind-library.a index bbb1a400c8a..067df0a2e51 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bde0c5628380f168b07582f7a5a172694a907b0af9c8305ee60eb6ce0c99f08 -size 33884 +oid sha256:f2e77a786d9230a1c3347d09a3dc6fb166223069b4a170b06f68b0606e979c09 +size 33958 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-stack_protection/end-device-bind-library.a index 5c87334be74..9680b6412f5 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae24162e9eb0d75daec7dc42dd9bba7bb53497874464aa033c2dd0296cbe3bef -size 36502 +oid sha256:e55f2967c265aca429e73cf2b84e9e2a2c9fad37770d09c9ac21b9ecedd30d65 +size 36576 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail/end-device-bind-library.a index e82c2194fd2..847368e5c4f 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm21-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:80745b328e62021bd3450d9f7766977bd9807539bb1458282f655d1a216f9f07 -size 34682 +oid sha256:55c772b204680a202870946913fd4e32c1c5749e96e2f046600010a0cdb5c50e +size 34758 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index 19de3897c0e..d8635bde00f 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b329238ad9e045dac0e92c27f7407f9846b5582f3b4eafa0ba447f05fe4d758f -size 35496 +oid sha256:0a3eb00080e7616e8c2232d178c5b423a6105758475ac6a8a5dd30d8813df006 +size 35572 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/end-device-bind-library.a index 8530b38b04d..bfa321de9d1 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b59424354acc2da45a1ee6195cb70ed5470d522fe911cc6476f621ce59d91d17 -size 33884 +oid sha256:edd2185e111209b47d759f54217876dcadfc72476247fdf845621d7dcf9f3357 +size 33958 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-stack_protection/end-device-bind-library.a index e2d6344f843..59ef63738b7 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:add1d861ad8563cb3931d02fdd18f982a28c13c801201ef66176332db0f9b339 -size 36502 +oid sha256:35ebc11e3457a42b68bbe9754075c3e072e3b8d3047967512ea4d3401d323e03 +size 36576 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail/end-device-bind-library.a index 10e38e64ab5..c259eb20298 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm22-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa83fab9ed0b8efa51a2e9ddf43379b7bc92f41f326ce19f5599683cacc62df6 -size 34682 +oid sha256:d392c9b6aa20b41a66f61d04d960fa63e0076b5155d509998e39680f42423880 +size 34758 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a index 4d8d0f2a483..7f9e3ca1927 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9bcecacc1beb626631f96162a363cb6f1b22a21d48405f8abff74eb933161c60 -size 35496 +oid sha256:4dec38ab2895a926962a91cffcd045dcc4e8090bc9a073285ecc2923f2144ffe +size 35572 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/end-device-bind-library.a index e6326e08cd2..22d204149dc 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c883c3b9a6c1c16289b58b8e412efa7a2272538847b30c9ee5259330d196161 -size 33884 +oid sha256:897ac748cbe482fb8b2b4a570c44c0e1357d4d797468cf88c4a347ef5937622c +size 33958 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-stack_protection/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-stack_protection/end-device-bind-library.a index 453a81be0ab..6cf953a5f36 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-stack_protection/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail-stack_protection/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2278ff968c862d3fc6ab7acf934cfef5aabde85c044db0cf27ce2c89bf3fb640 -size 36502 +oid sha256:7ddb1397b9fcfc08f212e2d5fddf78641a75e974b74b693970dc108169ee5441 +size 36576 diff --git a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail/end-device-bind-library.a index 0fad2b48493..3c93646a2a7 100644 --- a/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-cortexm3-iar-mgm24-rail/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3972b24efb9c24c66cb3a402aad9ffab806104078dbed99a98f5e850497f6a2f -size 34682 +oid sha256:af5ced7c1a66caab302fecebfc767b1cf62584c26754739f3e026930ad96aea9 +size 34758 diff --git a/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/end-device-bind-library.a index b5a8b2b53cc..8657b2a9a16 100644 --- a/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e017dbe9c0499138600e65c5d22c13f3813669bb97f0e75813f661d72405e91 -size 81774 +oid sha256:033e5145c8bb2c69094c52c1d7078dde4f14aa5f777fb39ca1ba4cce7557811a +size 81854 diff --git a/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/end-device-bind-library.a index 0f6d7fe0894..e1c2b0d0527 100644 --- a/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2361b7b8ce23d10ce712a335ea5c2f6f68086739a17815a8836cc23a07a5ec65 -size 87260 +oid sha256:3e0b11a2745b760e4f2f5bd0e2218f014e345e931a20d0d2e511f38142b5e35d +size 87516 diff --git a/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/end-device-bind-library.a index 65c9b171ecf..496ea0d9f85 100644 --- a/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:82923562e1b253e6ce656d8d9b723ee95051470288bf5207b25304bd58cc022f -size 60396 +oid sha256:25b3a3bd7c008bc7e2d9e09d2be21e1e3e1cf161573cd73652868dfeb2018457 +size 60544 diff --git a/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/end-device-bind-library.a b/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/end-device-bind-library.a index 808dc907494..3e2d48aa9f8 100644 --- a/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/end-device-bind-library.a +++ b/protocol/zigbee/build/end-device-bind-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/end-device-bind-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:033387da75346f3d26a6c1be5c3f3808f45473e71707e3336fb46943afd7a97a -size 89780 +oid sha256:111f134dd10ca99e99ff8716d413e398aac776e4d84300f1eb5f2c38c49bf852 +size 90028 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/gp-library.a index c777a324a29..94691ead140 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00f615c380040aed458180482d13815fcd02d4902bdcd2a115da73d000cec333 -size 34412 +oid sha256:e460719ef7c4d1c6cee126679a4c1a786824d3a9674dfaa0ff4ac96e46deaa47 +size 34944 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-rail/gp-library.a index d6338270e29..e38b0ab0997 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:813884938e77e239974833d44c01890ff1650c1d7a2016dee5fd3973d0027f54 -size 34764 +oid sha256:b3c7de77929ffab12c095ef28366c00daf45733176063566f156a8562772daa9 +size 35296 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/gp-library.a index ef691c28b31..13b270882d0 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57d6fac1f527698718bfd6681cf38a5da6fee7f019fed845b76153dd6bc98fde -size 34412 +oid sha256:59edcf9a6087877d862cefbd0bc91a8e52bde7375ad35ffec33f5d8a03a61997 +size 34944 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-railgb/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-railgb/gp-library.a index e24e58e4eb1..6d96be002c3 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-railgb/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg12p-railgb/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d157893ee4942faa92de9ee99b52d066bd0bce230ac19d66bfede505cd9e690f -size 34764 +oid sha256:b138aabdb638520f62b72b6815cd067f713b8fe40ba332502349449c7bea9c17 +size 35296 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/gp-library.a index 639b44972b7..cd0d716cb0e 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cec7500a9478ed89713b5519f36e3f9a9c3ed1bcd9cf7d2a26df356ca982a6e -size 34412 +oid sha256:e72b6ec82bdfb57ca6568cb26d28dce3d5494ad638df4ca23eff2f8076238281 +size 34944 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg13p-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg13p-rail/gp-library.a index 28b184490c3..bd9962b13eb 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg13p-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg13p-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70deb08bc44608eed0feb4869846b179ec9633df63893a138d1e3e62d9161dc1 -size 34764 +oid sha256:39eae2bf11f03c564d1235728b970ea432bc8f7d1a55b88c8015764e50f69c01 +size 35296 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/gp-library.a index 99016297f3c..6f0d6ea1cdc 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:930680f0fab3cfaae0eae13ca61e4c30570d3061b5945095b46eeff285682ce3 -size 34372 +oid sha256:c878532098efaf39bb5e1e82a7aa156d7b90d359b65c7d776c038e832c2653be +size 34904 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg21-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg21-rail/gp-library.a index ef2f55a5351..0583a80a7cd 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg21-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg21-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25d7ba6f413a57cc7932d003f3930a7d9818b69325bee40447d0f9addf2e19e9 -size 34724 +oid sha256:80e9b9bcc64366dae2b9f45bf1f4735f012d4e5813ec35033e3f7375cedb3c5c +size 35256 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/gp-library.a index 5e695137a22..97612b6c701 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d1c7716ec080fc2309dabbe405d1a1dd5dec6f86124ec09769e5e7a103cd6ede -size 34372 +oid sha256:8753e27fb5cf4742ce1d07b8ab4873c983f1098126b89e323d65c559e3a214e1 +size 34904 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg22-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg22-rail/gp-library.a index 55e4fcbfeb3..2986c509bf4 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg22-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg22-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cef20aa57ccc8801a8d1b7d5e3aaf462c0ddf40949d3aa1e0dffb7063418429c -size 34724 +oid sha256:a8b9cbf1423973904ef3f4bbde69a27e7779a1d5453f3dd1d247118404369567 +size 35256 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/gp-library.a index 5e695137a22..3cb2badccb8 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d1c7716ec080fc2309dabbe405d1a1dd5dec6f86124ec09769e5e7a103cd6ede -size 34372 +oid sha256:e444ba616fa3c0dcb99276e3f75e2b84ab7daf420c968e58d600bdb3138dcbb1 +size 34904 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg24-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg24-rail/gp-library.a index 55e4fcbfeb3..899ee8e5471 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg24-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg24-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cef20aa57ccc8801a8d1b7d5e3aaf462c0ddf40949d3aa1e0dffb7063418429c -size 34724 +oid sha256:edf211d7c0726ead824b72d933e97dd5a1bc3858f3b827e886c3841f622319d8 +size 35256 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/gp-library.a index 4b519ab0419..97612b6c701 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90fd61520b7c31d8d019b3e183fb95c489b8aa31e9b024c4c7da94196e63df06 -size 34372 +oid sha256:8753e27fb5cf4742ce1d07b8ab4873c983f1098126b89e323d65c559e3a214e1 +size 34904 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg27-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg27-rail/gp-library.a index 9570da99f9d..afaeffc75c1 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg27-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-efr32mg27-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee8baa74ec62cc5e3b90fe32914298ae61ceb72578a092dd33236553d08cd535 -size 34724 +oid sha256:f1660a64f64de0ddcac69c6e9d497e142f9b8e32a0f97d33cbc5a0241a4428f4 +size 35256 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/gp-library.a index e58294d0cd0..e2f07a57684 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3765a956d31b7f610d4a591a0c045448f1fb2fbf41df15cf097e74e89383370 -size 34412 +oid sha256:f56a629a4166a51d2a283dff2e07c3611d3522a821ac01b24c247bdf9fae0025 +size 34944 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm12-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm12-rail/gp-library.a index 7659d3e544c..c985ba5ed52 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm12-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm12-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6a67fa513e7faa9ee64f7bd723908bfacfb302e73911dfb82ebe7c2e6fc51db -size 34764 +oid sha256:383714b74602222196d19ae1d665b0fcfd5c400c493297315fc5c309ddc9cf20 +size 35296 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/gp-library.a index 1ee2e1b4c9c..3d2f8e3fe8b 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fbf4184d3aa5b2e51f3c473634f3cd0d16659431d9d2c36342153105e9d4ad6f -size 34412 +oid sha256:10c23c6bffa013f4129359e51a86fc1954d2f68972d25f2c0633bead25215c67 +size 34944 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm13-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm13-rail/gp-library.a index 50843be7eeb..69e50d318e9 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm13-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm13-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9630ee0802323ff8bbe77a31f488035b1fc68ef9768887d34c6df39cf29327e8 -size 34764 +oid sha256:e145a3c9780a319ba2060cda7f3f416720c7ed0624c65378d721b40cf5cfb835 +size 35296 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/gp-library.a index 335a377b08d..9878bfb48ef 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ef05cb43d92eaef828ef9e3a67017ba686cab308a95f5a41216e9d39517f421 -size 34372 +oid sha256:d1c64f3d44f2286752f0059c86a7d1ede5881ed2c1c5a6f8c626055eabd484c6 +size 34904 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm21-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm21-rail/gp-library.a index 968559df3b1..2bcfeafde4a 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm21-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm21-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d88bc913dbfb5fa83f19e1e2a58c764955a7ce7a6f9ab17e99f8c273b7c1c71a -size 34724 +oid sha256:047ab4e44e4361e3a7c1afa9c0b72d28c5fabae3e18f850da433fb6ae2b5465f +size 35256 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/gp-library.a index aae8673face..956585236a0 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e54c46a2037d0a8ea880ada983cee0662b6a050db81e2d3a0d809f1cdf008db1 -size 34372 +oid sha256:8bfb4cabe6f18ac3fd111c214a506ea5364831091fdf050a3667e3bca8094a0f +size 34904 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm22-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm22-rail/gp-library.a index 8f825a5da73..245c5da6a84 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm22-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm22-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d819c72c72faecfa9e3bdf7bc556a2a295d800bd72e457174c2361eba3b9ce78 -size 34724 +oid sha256:0e78cef2eb37a0207188a7b214fdaed398fab9943c58bba1ed59ee5e3538cb3c +size 35256 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/gp-library.a index 3b549442bde..92f1b8e8ace 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed3a69397cbf0c0a0120e8553f075ab5a42c3fe2df692dfd0442dd4a7b72d5dd -size 34372 +oid sha256:5c8725b7c3130d1400f6f0a497bbf83fb43f694138a5f497b27838e33fa435b5 +size 34904 diff --git a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm24-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm24-rail/gp-library.a index aa3c48e306d..ebb1887af80 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm24-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-gcc-mgm24-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44ab34b7fc373eb812b232373b61208cc6e48e2de7d2ef2cba4c4bf90ad320b0 -size 34724 +oid sha256:1b83894c4bb22a91d3f51d676ba852b8930b11fe39e3eaf8c0768e0d97dfe3f0 +size 35256 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/gp-library.a index 8a59f476f6e..d0b74e9794f 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b4e5be5c970cf274972f306da13fbd400d6c1dfbc3a5738a7975f6c99da5b65 -size 89954 +oid sha256:017d8bfe9e0e156c9bbb359375b45545f32cf5a8c2a829cb1ce3fb54a43836e7 +size 90694 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/gp-library.a index caafccf32c8..fc91cad3087 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:02f1737ffe02c50bacb31e81565c8d28e93c5180d4a9711d6e98c7649832a124 -size 88510 +oid sha256:6c6905409565fcb430b373023ed39f14e5500f88fc060d7631c8eda4658d97c3 +size 89084 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/gp-library.a index fcbd483edd8..df891a7356c 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fffa4f3d2839f969c43be987f372d1cb2e56e010c2f816f23b643030206b06c0 -size 89970 +oid sha256:e306b552b6246aafc3a90db8699c9483dca8e371d30793e7f0de377b932bd57a +size 90640 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail/gp-library.a index ed4e905f492..6926c845f17 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7fc2f091bbf6e2d32e0ad6b23c91185a0cd2495c6c91d196d28ca4f70144a1eb -size 88536 +oid sha256:2e29ac8257e35c87a6dc9118f3b14a42c580b3b2e495e57a1ff71a837688028c +size 89110 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/gp-library.a index c82aa48c349..6fb681ed54b 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3246739b2c45409932018c8eeb30ce250d0caced25578f9f236b9ec8a2e5e94a -size 88396 +oid sha256:e6801a761b768776a4daab6e779d220edc8e853600e0ccdab9967858d7bf439e +size 89136 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/gp-library.a index 245c6792b55..4b63232d966 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59d2afc96245b1b7799db5fd15d23018974e8023968a0bf776ddae8e438de32b -size 86956 +oid sha256:826538412daedead6a89b0a6be28c08cc80aa1c9a9716a4670ac82291381e98b +size 87528 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/gp-library.a index 5c29c4bc9fc..4b0259ccf2b 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a01b8bdd0e3053a52828a01497fbf668ab0cb21a788722469848ddcfffaabde0 -size 88422 +oid sha256:696de3be83ba4e47a7d2deea081be0cb20c1f7636752cb56a9f9385bd04ce652 +size 89092 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb/gp-library.a index 919f6fc41bf..204c683726b 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg12p-railgb/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7812aae72bc7807c64ac70f487120e7ad5eda5cfb18758b9eb191fa84ffabbe -size 86984 +oid sha256:ff2b8e0d1bf495b91937d04e506821cd7dc7090ffd6b61e3fc59099e0bf31dcc +size 87558 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/gp-library.a index 4f734433c85..9b9e1bba5de 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0713b03bd0ff409a33650779a361f1070297537c1302bcefb13393638a4e8e55 -size 89948 +oid sha256:6105b08e26960621b0c19e2fe9d80f9164ccfe642e412ddbedf289f8955b176b +size 90688 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/gp-library.a index cdb190b6654..8a73619c9f9 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d9a40df7a211c8709cbf977ecd56b312dde6a3f3ccfc7f6973775c790769608 -size 88510 +oid sha256:97ab17c270949425bd05bc8022a7cb2900d054e06c80980b28ea25343d961bb5 +size 89082 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/gp-library.a index 712d57e1a13..8eac3e040f5 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:008d07356ad8ffcc06a2cc42e5fdd2690cafe1038137929f9049adaf5a852113 -size 89970 +oid sha256:8206f1ddc8468de30831e1e8b3940acf3127e73c9eb49f9e54f9da24353dcf7b +size 90640 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail/gp-library.a index a87fde88129..f6d462d1fc1 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg13p-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70c74f8e8c5252bf3a16022b70bf0d3bac42b241ec205e3f88a6db01ff80e392 -size 88536 +oid sha256:60e60c7e20159a78a070d44ba158441f7f87e9a17e376ae016eadf11f4054e31 +size 89108 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/gp-library.a index e64f065f155..c8688b28134 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3cc855e4aa9e02d24d5014929bdd1cb2a4ce7164b08764b808f61b21f5bdb0a -size 89500 +oid sha256:369c372d829064298de4b906ab2f68a9da975463cd3aa081ceb2d209351864a0 +size 90224 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/gp-library.a index 941cf3bdc84..468679da599 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d06c94daa4d2b98703bcb750eb08b22a054c773d5247e16aff5519282beee922 -size 87830 +oid sha256:240fc8243d46ff9c759181810ca8e6ee2458ab849b184999a8d534f57c4ee565 +size 88386 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-stack_protection/gp-library.a index 9de67c2038b..5fb30e99e4e 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d4d1f964a43729c9e93532a0bfd4fcd11e767adb8a1bfbbc7e2864b7773721d -size 89522 +oid sha256:c94f19dd425f95c384fe40f93ca9c2293b20ed0312daaffa8ed0a9b944d140b7 +size 90176 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail/gp-library.a index 08e65c99acb..4e86d27f67b 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg21-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df6b422079d2a1a12f81dd37b673a8c4dde50ba4b8a13b776c5eb00a40b1a996 -size 87856 +oid sha256:d4ae58f67742225b3d8f66d2c25921957ae7ef1758e87db804c58d953705fa86 +size 88412 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/gp-library.a index 8747f4de599..055f5b036e2 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac081e9a82517aae59ca2df87f390afb83b6165bfa4d2634b038f15ed6ae2c91 -size 89500 +oid sha256:c89903a1b42203ea560c1d827993f1d8b64584048831f77b4ee52384c21e049c +size 90240 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/gp-library.a index abd77062457..075c4c3b512 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:73a95b342f47176d1df3b5b740e80d3601d30f3a85c3384d1a79e0eb9f3daff6 -size 87830 +oid sha256:26c54c2c83ade597a6a94eddc231d2da682434ebaeb0a2f3eaf25cc6c039fb9a +size 88402 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-stack_protection/gp-library.a index 388c42adbb7..1f0c187a47e 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6ff7dfdec476382bebf13f1a9ece5a4ededa9317032af58ec9e9ae235f9db85 -size 89522 +oid sha256:2b207a96b6c98c299c19e0fec937af0c96f8fef9924762ee40e3d6ecf5c0b0f4 +size 90192 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail/gp-library.a index e44ffc846e5..43897801e5f 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg22-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f3d4d06ecc7e4a285729949aee2d33484404485f5b8fd9c0f1e680085087a15f -size 87856 +oid sha256:3bc373f412ee7ddc839a6a88e3599f076b3e07660ab8242e30d6589d3d7939d5 +size 88428 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/gp-library.a index 616c5b36ab9..4e61b146289 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a87acab4295e972c0d104b4d9d7e86fcc95954b384ab239e849204b448ea3507 -size 89506 +oid sha256:0cd346b4956239c24c45c18976e26409415c75c47b0ce7b89ccf390ead1d455d +size 90246 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/gp-library.a index 641d439855e..f303016e1be 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14051d6b21de23f17665f91509b1ef15f22873bb3a89226dd5ef3cf6bcce4c10 -size 87830 +oid sha256:fd958160f2d3bad18b92ef28ab3e3ee5f72ba824ad21e5242a653069e6c31799 +size 88404 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-stack_protection/gp-library.a index 944427fa219..32d74771d06 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4dd181e229515d029cff3bcc59badc77d8df540f05e80bfa4fa7be6c1cdd3190 -size 89528 +oid sha256:86b093728456ba252228f79242cfd043375f7d13e03731572fadc480bc1d46ea +size 90198 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail/gp-library.a index a304217c4b1..12259ed87bd 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg24-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3d94cca9a14ade481d54204b325f1db1fe9593ca1e790c761c02065a9af3b67 -size 87856 +oid sha256:0caa171bc5463a43c746b070cf83821a18358999df255ca33d06241690c4be51 +size 88430 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/gp-library.a index cb0ef5f1d6a..058fab62cc1 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fbf9b42b63032636d35708fc6dc74a5f043f871e1ba7cf91d8e3c9f58f849c0d -size 89500 +oid sha256:883579b7aa931f191c714ab5f8517a3277f0a78a8e09d0f0dc5197f69239f99d +size 90240 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/gp-library.a index 18e7fc3b08c..d368c18bbc0 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1bae273b9e5eeb4397543300f05b565ae79ce73d8835c44db59449076e0db9bb -size 87830 +oid sha256:23629c12f5a113da51aa0f45b385e96eb1c892f8de7f8b5cccf7d5422755f33b +size 88402 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-stack_protection/gp-library.a index 909d25f1bd8..c14110fe35d 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad936e87f0fddeee81f68988eb266eb00ff4d807ef17b1097e436b29b6c4aa67 -size 89522 +oid sha256:cb391081a897d84ca619790f76569c6ce3a8e80cc016a554f8c8ae2681cf3be4 +size 90192 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail/gp-library.a index 96b0a4f849d..67b7ab78f60 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-efr32mg27-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75c33c41ec8f9685a4caa64533fb6ff9e5494bdf452a606c7e7cc51493a0439f -size 87856 +oid sha256:fbb85e3ca7686ab1cafc622905a18a8120396046ab2e985ad702f34543b4f2d4 +size 88428 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/gp-library.a index 75a83e945e2..dfc558bbe5b 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f37be18bb2da4ebce465f54cd93d0b1d9f8908ef1d85e3bc333bbdb67f009c87 -size 89804 +oid sha256:40925e77af2a55018d912a32dd06c7f315df33c6347a89f1050a9e562bac01e6 +size 90544 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/gp-library.a index d699bb2c6df..f9784d6edf8 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93a5bf39c231cbe831d9a1b8768b64828a4396997d1ccab0c0b6d060e78b1c57 -size 88366 +oid sha256:bdd8825e752cd3d5a36e6e617a76bbfc8d96008969c5ec3afb80bc695721c893 +size 88938 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-stack_protection/gp-library.a index 1ccb082f6db..0fbb00fdb32 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5fb9f3a1b33b72d229f52f91b398ab40b96ed6a752aca3cab6c9ebddc17ae4fa -size 89826 +oid sha256:ea2ad70f8f7bf73133d62c61c5476c6bce52c3c0f10f5bf7c84123b84326bc88 +size 90496 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail/gp-library.a index c325b441cef..95d51c8260d 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm12-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12f8ef7a22b5561dbecf62a9fda45bf006628f220442ecc851ea1ed58baf99b8 -size 88392 +oid sha256:d0215dee99218f5ad376f3aac49e4be9668b3313f99fd5063c1a458536ba152d +size 88964 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/gp-library.a index 953d3fa2d0b..061e8831f06 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53a05521c51ef9d5843b28add70462d968cd3541ab04989c83a1f68de53ffac4 -size 89802 +oid sha256:f1e8bfed42a56e8539c9aa13d5392dd1964b7b146d961c9f064f4cd72461d071 +size 90542 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/gp-library.a index 5ee083bb0a6..de10a14331e 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:750af17a9095edae7b73236bd0f91d89fa2ce76057c01577e9adf94dfc14b93f -size 88358 +oid sha256:50b79965a4aaadbc6eb386c2446642c6ddc210f79a1bbd0f99bf3280e8f3a6f6 +size 88932 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-stack_protection/gp-library.a index 758e12c7f06..1856efc031a 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6d764aacb641e099bbd3866ee23cf0c62923e152163c42f30916017da2c71117 -size 89824 +oid sha256:281649d689580d74973ca0e8d892b03b0e49140588b2f2c74813627508c40ade +size 90494 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail/gp-library.a index d6d22880103..b8c8c6be2b9 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm13-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0612fcb7af8d35d217048fd60e372d7c45fe8e71a897f267dbe6251a0380bdb1 -size 88384 +oid sha256:0d6c90be3959cdefa315383adc74b213eaac44231c0dadcfb9410c07615d0f9c +size 88958 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/gp-library.a index 0a9d6c1ad57..84d82233528 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1501a5a727c9908f6b519b3d3245650f343664fb462b7c10ae0d88e5aebb3c5 -size 89372 +oid sha256:ab4a88c991e1aa7170096978c47ca1eae48e29e32f40590e4bec5368e037c756 +size 90112 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/gp-library.a index 050a634d4ec..c99ac561615 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c70985b089fdbc89e14cff229d374bb6f9dd19e57204bc0ddea86e42ff09cb02 -size 87702 +oid sha256:7209b60d438d4ad0f54213dfb473551fa9d3cd0d9e37b9ec3de7d1b981aba8f0 +size 88274 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-stack_protection/gp-library.a index c203f64b9cf..aa0da582ac8 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f9d2adf636803cb2ece6c8f05fd2f770ebce453798266ce838a08a5d5a04c04 -size 89394 +oid sha256:41a88c33a2f9ac61ebc895a691bf5ba78a4f547b4e07d181b34fefb9638777bc +size 90064 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail/gp-library.a index 79f96c4be4b..10cfeb9decf 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm21-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:629deb7cd60e1526804a7341b7631224337d7d21ed949c312a921b0d1ff78443 -size 87728 +oid sha256:d21b497a7a833df5f5bb9f6e7a8edc7bea7e27368a5b1894acb4d4c4cd3f4f7d +size 88300 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/gp-library.a index 15536d21960..73a4aa0e8bd 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d84ae481099eab6713d85b29df4d8c585da796440c3701ee6fbcf2626c3be571 -size 89372 +oid sha256:aa1599cbdc7efdbe15ff22f3d438beece949a4bb15cde826eb6f3e828b8541da +size 90112 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/gp-library.a index 832f1e63e5e..32cbfd875c8 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b122451e006dbf3822084a0264716f31a7165f0fbda5fccc529e81eadf30b043 -size 87702 +oid sha256:8d19611130f2d230a6bb2dc5fae821565198463efe0f64587a40841e2e443d67 +size 88274 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-stack_protection/gp-library.a index 4ba8c16e035..95abfda29c3 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86385d57bff4aa202b1bb05193485b61199f351f66facca43b45022b6cd044fc -size 89394 +oid sha256:3e5701c599a977409c92c3bc219c9e13aa63b5f7e3694147031e5871fad1b2bf +size 90064 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail/gp-library.a index bfd7fdfb542..0af41cab148 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm22-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0726773526c7cc3f33fe240cd5d10ab17fc31347e85036ee23335ed860a83b1 -size 87728 +oid sha256:c7b3ad0c13b1d2da685c03ac46d9a7a1327d9e3cc1a08aba14ac47a16d641fba +size 88300 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/gp-library.a index 8f115ac8ba6..2e86b0ac669 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:07036c882a6fca4a6bd119ae9ded13e31863bd1ca4913c21a57408fc685dbb67 -size 89372 +oid sha256:9adf795c8cc9326e4ad4de759cc4df7e3d66d6bec7297cb29549367565352801 +size 90112 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/gp-library.a index 6eb744dd3ed..e2186138438 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:01785adcaf3758831f164585e6995fb2772da8d93f11da6a6badb1e3a7a1e393 -size 87702 +oid sha256:540a1562136973a62a0b34c5bbb94e121efd16d11f6734f9b7769d7e999c5a93 +size 88274 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-stack_protection/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-stack_protection/gp-library.a index 38b4196b5ef..9490b0559e3 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-stack_protection/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail-stack_protection/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:827b02b7b07c83571204083f88ae897f64e8019165d733ed93d41c82d26d6386 -size 89394 +oid sha256:da1dd4efa099617cedb89512f9255cb1e975888f254f0119345d3d5d57cfdc3f +size 90064 diff --git a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail/gp-library.a b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail/gp-library.a index cd4ba70abe5..214f37116ce 100644 --- a/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail/gp-library.a +++ b/protocol/zigbee/build/gp-library-cortexm3-iar-mgm24-rail/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:82d6300954b0189f76ae2ba014fecb38201def74aa38fb2a2bd14923dc6fa1be -size 87728 +oid sha256:23abc46fd1896d7d6a62de9226ef2d7ef87b7b1b78914716bb18b1928f0d6b54 +size 88300 diff --git a/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/gp-library.a index 06110d00ce7..3e6efec2228 100644 --- a/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c19b1c51ccfabf87999a530d815dd3a14160c3f77ec50615a8a34a10e45ad3a -size 145848 +oid sha256:e82beec74df1490d831055ec3acce35bf3d3f6eed714a5f95a089f01c8ea640f +size 146758 diff --git a/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/gp-library.a index 53e61a3dbc2..1664ec80d7e 100644 --- a/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac374f1b617de9c66ba76fd3555e218f07b32640841402eff28f4b12028239fd -size 165992 +oid sha256:3e6d865c5503ce1df5c92b5f8e732e9cc0fa23cfe4e2301cb253a49d4285f772 +size 167010 diff --git a/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/gp-library.a index 8fa37e3a59d..3333dc2d1a0 100644 --- a/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98962439fc424564d9151e571be362caa117193879ad3c9b94bedd0596b71e32 -size 117340 +oid sha256:148f950f41fa61cb100ded367d9942006840bdbaa43f30f068319b771557321d +size 118154 diff --git a/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/gp-library.a b/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/gp-library.a index d678d9ed7e6..9ccd0acce22 100644 --- a/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/gp-library.a +++ b/protocol/zigbee/build/gp-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad133f0347292f5673acbc8206359a772cc35b189a2ce6585434c9ca5dce23f9 -size 177648 +oid sha256:86e541398da5daf0d8b252606ca8f2d5ede0dadef5376ed225aa177e0a66ddd0 +size 178786 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/install-code-library.a index 6480be13717..81633bd6059 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1edac3c9d8d65d2d7643b6fc41d87699fc55b761a48ee982199c6ea43c8ca2b5 +oid sha256:884cbe2d42354fa039ffd4ec7e1d00eb4209a9becba85e27939a1fbfdfc902c9 size 19302 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-rail/install-code-library.a index d45c8485f0f..06d9e1e1338 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:310865a11942066cf097ce375c428e6166071d60339a784bd2b75e35ee7288d3 +oid sha256:3024a97a08172600a3d85506975f25c0eb46764779fef139e26176bfb5f32aa2 size 19734 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/install-code-library.a index 7ef106680d3..67293941819 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3e28bcaf91399d7a03c84822acff25de061975e1fde279eabe2607d1e1cbb36 +oid sha256:4063a0eebc656f24cdbb1b62a325e2d2fdb3c44c6f506dbe40495874682e1fcd size 19302 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-railgb/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-railgb/install-code-library.a index e60ba33975e..4b1773de4fe 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-railgb/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg12p-railgb/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a6b38401c35e693aadbe7630b1472865f16c6dcc6ab23df9352e038b7d59408 +oid sha256:715a7d0cf28a0ab5091358c1c89eab627fcd1cf6775a7c949bfbaf59d06afef1 size 19734 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/install-code-library.a index cee4d5088f0..369098aae9a 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8cb73cfdb170e988ca3e1a875ebccd8d8615e9a283470b8f881c3e479968320 +oid sha256:9725547b536dce7c5fab1e120a07c8eebe9c939aebc9f685114b40b3e8bd80b1 size 19302 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg13p-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg13p-rail/install-code-library.a index a40e990c5de..89683357398 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg13p-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg13p-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6bb7d053319f6a3f633b20acad58a60c744c268f841fa2177ec38ce43d73a9d +oid sha256:4435686afe029be1c4b137690efc0495f4438590f70cef9f0766bbac672bcdfc size 19734 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/install-code-library.a index 9c3fa520517..f2fb13d3be6 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9685f61909dc247e096a7c415dc59b3efd24e87e038e2ee6fcc2b171cdb6ff5f +oid sha256:12b8244bf2102caff3c73dda77973f0035f6901d6bf740a8fea24e955bb7b166 size 19310 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg21-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg21-rail/install-code-library.a index 4b17271ca58..630bc8d20e9 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg21-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg21-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf28216a3529498da74541fef5b4cca2eb3c169727bef9f1129b9c25228f024a +oid sha256:4b0014372f0f7a0aeaa50ce79c664ba86e29b5d29be9ca473f1652baa2380088 size 19742 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/install-code-library.a index 03d459d1188..83e5524b3b4 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4714e92ab80cd774864c62a0a6aa756fe32e6764bb565160abbfe054c7e9cc50 +oid sha256:bb589e944ffbc7e03adda5939cdfff45524f4837403526f2fb234597f8980a97 size 19310 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg22-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg22-rail/install-code-library.a index cc08157f15a..1c9bc1126c8 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg22-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg22-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3cd825088e84b562714a9e0a2ecfe0aeec155b11f681df18bc58a659762f2c14 +oid sha256:7d3d5675839d6f313679c4984cf3680eb25d9c92956ce198a6605a71c508dfd8 size 19742 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/install-code-library.a index 8249ce54e84..548dcbbdb17 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20490786f9212230aafc066d179f1ece1ca241942c62d5f02fb078778327d168 +oid sha256:309154a770e4f69f30c20c6ed001931bc9c022674f8f7908e300a4710bfdd3f0 size 19310 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-dualrail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-dualrail/install-code-library.a index 2020ede5166..584231b029d 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-dualrail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-dualrail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d81f118816d7e4332dbb1a511b4e381a0a3cf666099855cdded354d5622a55a +oid sha256:b83ef2a80ee55e6dbba584c1626d9bc21657c5278e7392e2ba596b1bd9e4dfec size 19742 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/install-code-library.a index c377dadf4c8..2889ed67d56 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6584d862ee1f3bbaec7064234ed48e2a465ada30652b522c86bbfe1e14c21ee0 +oid sha256:0f77f39b3d881168a9caf2c1031a4facddaadea940f41ead6dd9339c8a16da8c size 19310 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-rail/install-code-library.a index 06186ea34ad..b35515a90a1 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg24-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cdac1da09d2228fc085d8acd1eb6dd50491740c82322a9c9b60d166d27f02c96 +oid sha256:ae838d1ddb86713f807c473fed216e279c6d35bbbb8a38004cee6246fc3f8e0f size 19742 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/install-code-library.a index 53b2496a1b2..4edb3dfb92b 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:69704bdd19a0282ab553f83c44722b6b88ac55fc3dbde75247d04378d724fa5c +oid sha256:459f73ebbc4df2fa55fc989b4599f49a52cb42358fc0aef5b88d871e9f29c4a6 size 19310 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg27-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg27-rail/install-code-library.a index 6e8dc7a5b88..0f38335dd9b 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg27-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-efr32mg27-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:878de072ceae1fc030bfb5b74d7d240841ccff2ad5c5aff96a1ae0098d45f596 +oid sha256:8ba4f6381346d2583874d018907aaba37bbf33c9adcb001abd45d7500ce4381e size 19742 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/install-code-library.a index 49429f07090..2863198e9ff 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:65e6dbc2043c774d1fd9e258454dbda6dd653e1ad7ae62197549ffae2b917116 +oid sha256:cc218b4b23a73bc63a6e73cb3c6039fbc79482969321e70d68382e1197c69253 size 19302 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm12-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm12-rail/install-code-library.a index 69397df77db..40c7db904c5 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm12-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm12-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43347584ddc966dfb2b824216e4db30d0e9f301c47642cfb84f0faf9cff4dcf6 +oid sha256:ec0de565f29e2c173d97ac9152ec77c9a539b318c3273a41c3ccd7806099e94b size 19734 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/install-code-library.a index 9133a3d5d89..660ba490b02 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3038821efa12935c62d89238ca59be26f6121aa2a1dd147f23a2f2c8adfcc92 +oid sha256:95ca2c11a81ceabb41ee7024a90269a5e20490a70a775bb1a46f48eeeaacc2b6 size 19302 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm13-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm13-rail/install-code-library.a index 6bc8877857d..70d3da91ae2 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm13-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm13-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:540b61394ecef0519cc4934a87a19adb6f6e7abe767a3e22c5c66e9c99badb05 +oid sha256:4722d30f600d22757a1a59d44f5a5793d6fd4949484e9d7601d419fa801deb8f size 19734 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/install-code-library.a index 456fd6f7175..e0fa63a1371 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2460366434bf4d21db9fe6c2d5a56994b757f1b21a75702c5d51fd269f52dfdd +oid sha256:4ae4f78c3afa7a36f0a67cbb6da8a50f4e78dea8100a77e3da8d0c0047f879b2 size 19310 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm21-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm21-rail/install-code-library.a index ffe64dc10f6..382a642c6eb 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm21-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm21-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7dd00d28893023a7a62e3609fb4b1bb6cb7128a010aa933896ea2c384a12abe +oid sha256:5d9edf2324388f3ea027f1ffdcd8a258d4eedb8a92220308a6c46dd77e8ae4a2 size 19742 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/install-code-library.a index 8fe83e92b4f..445626939d8 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8612e8e701b65811b145e30d0d5231826940e11a3bc93401a42b1837e4ba1f33 +oid sha256:99acdb05391c56f5121d41dacbc4d1a77da1b6f0037e79b18b8b38e70022a715 size 19310 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm22-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm22-rail/install-code-library.a index 6224359eb03..5877dde0b11 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm22-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm22-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:753c7870d8395246385ec61dde4193dce9e61f18d9749996fcd392fc489aa1d4 +oid sha256:994e28677e856c3c425dc9643e41b22e0a259c7355760643c688fd5183cee535 size 19742 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/install-code-library.a index 91f4832c997..b9c57b4da61 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ad8e2ef72a2b9d2d55165e10fa778dd99ade9efd65e0eb416f650f7337b0dea +oid sha256:d26a5e86d283867e90a3ddde20247a56873e27e476120d2e462ffbb17dd28093 size 19310 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm24-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm24-rail/install-code-library.a index 96727197894..b3609f80f54 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm24-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-gcc-mgm24-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbea33f86795ced2934065c79b8f81be91cd525825cb30770db7f0123bbe5a11 +oid sha256:3cbc3a4dd56443a66b74fd0b2dacfb1971c465e7639d83269fa8c9813a8d1230 size 19742 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/install-code-library.a index 76e83358afb..3fff160df17 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f60addf907b9d064fdc2a74b796e3601705315d117ff2ff80f8497acc95729d +oid sha256:97a55e538f4479e810a3221953482732a3bcde432b21e3a9a87ab4a825a8c23d size 43228 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/install-code-library.a index fdf44f6a427..1a4f231f12d 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f3580c713229745c36b7691f42326fd48a3a950234e3f98b796990d4878216a5 +oid sha256:ba16da0fd02a0dda8e06dfe8e86b4d4a8459f798f4dc36b7f1570a4829b65dfa size 41834 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-stack_protection/install-code-library.a index 33a54541878..48198894e7b 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a402b36e3ee859ed07fb6298d398b33ef023d8f9224f034df3aa1178cfde454 +oid sha256:8481443012c210db4388e787ff8bc64974189ff91a4a42d97493d64689423065 size 46124 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail/install-code-library.a index 6d0a3a627c2..bff90bbc8f4 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa90f96a10a89b9e43a4eeebd44a63e7d1712fe7e554569e6ece1f86d3c6dbe5 +oid sha256:51f3abfc6b99b78a2dc6516b21dd86aa0a39f03e02a00018465683bb3dc1a26e size 45540 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/install-code-library.a index 864f5961fb7..c94ee7794c2 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83b519bf84a045b59f69938ea807e96e6e21d5eeba3ca38a16d606a19bd05b9e +oid sha256:c223957f8a4a97b02fab4e91c86197a110ca67583af51b1d67f093bde140254a size 42450 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/install-code-library.a index 65131184ec0..e7434aeb38c 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:471965b7b1a2299503478a886779cda2c7e449a555f3472cd6c73a02d5948a3f -size 41058 +oid sha256:7614ffd4ea4217f23d47856baa79744d1d164d73e5f6d01f0f842e329f564e50 +size 41056 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/install-code-library.a index 9d9bcebe412..aa5f72a9162 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d061236d518b968b160f529e61b0e4f5ebf056b964b71ec10d1b52a1609de4c1 +oid sha256:98163764bc0d4360fa459d5015d43aa598d3119f3927e5688affec4687fe4985 size 45344 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb/install-code-library.a index eb277417fbe..c5bb6b72856 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg12p-railgb/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86044538ff7255afb9a538de4d20c5fee7fdc184a16bded8d8939d9b77b73ad7 +oid sha256:263f89c1f1d6d29ab45016fdcfa0696dca04a2b83e8c3e6cdd8c1f2fcd9236b2 size 44760 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/install-code-library.a index 823d65c40db..3b183e5b7a9 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9b164b868fab6fac15f06e5c35619fe86d86e0286a399753d8b0a57f7aba594 +oid sha256:4b830e458a295c552710e4ce22bb06e4947f46f7fdf429e618f555462fa6727c size 43226 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/install-code-library.a index b06113766ec..bb24009cc1e 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3d8d8a2feb4fbf8d883b873c73b25d0be3f8c5b7ac18c5c9c667c835b65fce2 +oid sha256:91e061da2dc4113e17781d15210d6ef3dadc83180b08a027a38b0267817d410e size 41832 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-stack_protection/install-code-library.a index 4432206d6fe..0d44b3b45e4 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:48727202b239ebfa0f44d683d54a5f7da7d7b00689cdfc047c1d6fca145a5521 +oid sha256:f5c8f7197cc3904865896fa8c1a0581f3bd5dfc8b53c988b8f7c3a4dd53fab3c size 46120 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail/install-code-library.a index 70f6603ab0d..fd2efea0829 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg13p-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38098cd5d48034bc7f6f026d8a2f1dc3ed849ac0b004af3dcf956af38025409e +oid sha256:4f01a5dc80e695a431ef1d8923d5a0787239035ffffdcdc526bf5586442c9c3c size 45536 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/install-code-library.a index 6d802126179..e827341040f 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79edbfc2fc2d8c4a346caa5e50012c0d86ce5e9b376b737ffb62b568b7c3fd9f -size 44406 +oid sha256:b033384b9f91807463857d90789c95abe178424ffbd3b49539c9cdfd6d1fa6f2 +size 44396 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/install-code-library.a index f3831acb3a0..7740a087c62 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd682fbb8d7acb16902b4ee9d3fd3f3adc59c580b80afe4336746154eda0d455 -size 41838 +oid sha256:a72780bbf65bd628981510cb4e6eb55a59060670650245a777e1ca0c9f352907 +size 41828 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-stack_protection/install-code-library.a index d157ce6564a..cddbd3b510a 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8732250e4b168ad208a65d030dea5b5688fae819fa8ede0d37896de300a8f552 -size 47064 +oid sha256:be249a273b0702e1d4fc52c130491e860252718ffc227975de5b11a1319ae2e4 +size 47056 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail/install-code-library.a index ddf4ffa8bd1..cbd4a109da3 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg21-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:979bd107418db671af471aefb68fd069da3705c087efb7448b84c8704fcd7857 -size 45306 +oid sha256:8f9822dc7dc6f6f1f10cdb4b13f59bddfb0da5246f9dfbb0993857e95385972c +size 45298 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/install-code-library.a index 51515031f15..7bcdd714aa8 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43be9f7e9deece33fa672d73e8692b2f2055edc0dfa43115915298d4e9876b3e +oid sha256:aa035eca1d608f7c1dc03838f8e07631c9ef69734a00a7754f932ffde7f9e506 size 44404 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/install-code-library.a index d53cac8818b..f234f395833 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fca53ccad874307818cd0c0b6d1de20a8a485212b8572e314d20077cc45809ff +oid sha256:653e0ea46ad83a37b49707687cf5a1f79c8f8a81d9219199647e596c7f252a5e size 41836 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-stack_protection/install-code-library.a index 3a3e0333844..36e0b1db9a9 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ef958fff8330d458fa780d53a3c8df00d1bb948e53d66364701c1ad1c342a95 +oid sha256:0381b71c1d87028b73e588794cfebabe89900b98b466bd23bafe04a820441b56 size 47064 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail/install-code-library.a index adbba752c4c..d13f54f4ab5 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg22-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:041edb0ad3d421b03ea114d4479ab4e977ae1538ab5803b7f1083cf6d35b38ac +oid sha256:a022c7de83d9ae80f7face288b474d7db510cb48d7f8f700d27ee1a06677a8e6 size 45306 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/install-code-library.a index 5eb0c4eb42c..fb8320c252e 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b524cd6186780d1b61b3a48100cf97ad7b8d826143c6b31401d3d1c462a8c8c0 +oid sha256:9afb9f3967f90b0ca3d8a3b818a08f05cd6216ea08808f89b589a65c6f0a4b3e size 43638 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/install-code-library.a index fe7cc5f8e1b..8ebbeef8754 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13367be1ea571b519e0ca964a7383e917e0399e82d144a647ca7f831c48ed007 +oid sha256:7e66ec2101c5cc952c71470566598ca0381a91991694914c7458e51d463864fe size 41070 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/install-code-library.a index 5e08fac0d97..64900e91f06 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:216c7b4727ee499eea56d893f80efb4e71e888374193c47dcc0b7673693bb29c +oid sha256:37b892376fc258422729aec37652d018081d9e7825d0b7fdccb6529a82e20eb7 size 46300 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail/install-code-library.a index 08febb44ddc..83f8e9bb590 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-dualrail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0d1499564218bd9b8318c6389056074ac23db24754e1227af617b660d5b1242 +oid sha256:b0ce27adcf5410a64bafe8b0583979e95b6501b515c6823947c03b9608bb688d size 44540 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/install-code-library.a index e2ed26eaf03..88c951480fc 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7973dfa298d02ebc45ff6dba6c6e8e8b8266c8bebc56393cd84a81d32c71155e +oid sha256:d120fb1aa95621c6b69c1244aafedeb03094075e59be00f6977d6dc7a63407fa size 44406 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/install-code-library.a index a59f8ed6661..17b3c918704 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:534b58c13ae271ca3c6538fa230839b1ad75dce5ca9aa675bb87a0c944727e0a +oid sha256:0448c4a74be3187e6eba31cf0a9f7d770c8b36d1da405f71709b8847da9f2a73 size 41838 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-stack_protection/install-code-library.a index 2d21d8d8323..24032390cd8 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b14a2a45cfee47250b416db4601e843bc1e2d69b837efde53a54a667f8cba571 +oid sha256:2736d7ef3b314f5f7d7ee0bf51532a27dfe7213e955e344a9b8092ab918a771f size 47068 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail/install-code-library.a index fd5ce16c081..64e47a432ed 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg24-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e576bd0cb5f4cd7b8205d80d2fa2e83e7459b8643ade952fd91ee835dc86447 +oid sha256:144f8ef980b82215ecdb2ddd8b21c54ea04d8e2a9b8408e6bec9eac28c9a7877 size 45308 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/install-code-library.a index 8cee20a6397..138dce44fe8 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8892e0b99fb7d862e0409cc17e7e95b384f85f137e181f01b66e1efc57dc1ef6 +oid sha256:4f8690a40c72d6c73ab01fbe211f6e47fc2261634b2e6c5c80c3e19515dfce0f size 44404 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/install-code-library.a index 7afa1acf05e..e644299ceff 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:103536b8295df046033057cbb25175b321cac9d752f0b5cfdb55b594e22b45ed +oid sha256:9774ebb5f5999e44c9a66bb3f7c3690310c3c1b00962061cb18a713b0047cb47 size 41836 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-stack_protection/install-code-library.a index e4a11344c29..2ede1ba4163 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0b5865e45f227903a8c163f276af19b6b9468d56ca87036dbdc833da5c2676cb +oid sha256:cd4632d421808a1737c05a96abe2e67d558949f06fc61979002fef902767ed6e size 47064 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail/install-code-library.a index 42ff081a687..65121e0e21a 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-efr32mg27-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:53d685b9221042266e231609086fc9cff73a18f198e59781c2d587b252ce199c +oid sha256:af48815e5fd7102c8feea242cab0cdf28552defa01997e924dff368e472bea46 size 45306 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/install-code-library.a index c5dc0dab42b..cf690cb4888 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7330214effe26d763e2aad60a6b15bcbd86631483e3cebe23bb7a6655a2f4e9 +oid sha256:d2f5113a02791c93aff917a46e248f0847aec296176b9c0fc7952cf7cbc8f609 size 43154 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/install-code-library.a index 76016339a56..6ab5610b209 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ada0cffd7526b98affe444fbb1965b16413396ede7601555295cabac9fa57799 +oid sha256:5be21fd70c21240549d5978811a4bf7c0bc2b257f5aecfec94c9f3061aa9b200 size 41760 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-stack_protection/install-code-library.a index 2447032cb45..d4ae16bc47e 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f869bb4b73145a28d39e5dc06282d13a1518d2d9f0eae8807ca85837b556439 +oid sha256:b8b9841fc14c7fa108ca7a81cb0a1294272571e05919f64676bd04b829295030 size 46048 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail/install-code-library.a index 48154d95c2e..6bb1d55db0c 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm12-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8004745cfed77096f7cf832a46a393b88fcd9275cbd0c3d071e5d8833bd632f +oid sha256:de3c0d9fe34452e651e36fc49cd4849e3a4de7425d1339a030c787df9ba72544 size 45464 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/install-code-library.a index 4d3c779ca5d..5338cf8b01e 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4462dc81cce0b7422c29d467246dae4a007a38e234f8e1fe868e3802d6dbcdef +oid sha256:8942ff9f83dd3db1cf3114d28c4c507dbbf8ad80c00dd071ebc1747490dd2c01 size 43152 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/install-code-library.a index 62242b02fc5..8a86ed54a5b 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af752a1977ae90cb2137d9f3099c0c62860ff93053620ac4556a6e41e90e7147 +oid sha256:2223026f37dbc765b1a06ec743bbb4c8cdb58fa068e572fc4d3b510809ce288e size 41758 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-stack_protection/install-code-library.a index a274b21fa6a..627606dda90 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:560c9e8317c110b74c87e514549dc3097c11a86616a5278afda581f0719801b9 +oid sha256:113e1595df7af5650b2115332e4c28de570faba424186d2cf4f350cfc8eb6ba4 size 46048 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail/install-code-library.a index 4720dc5bac9..14ec8e73507 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm13-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f7d51387d33b2ac965d76f47f67a7973d260be775fe24c988f1cf19a976a5b6 +oid sha256:c45252bf8ecdeb9cdc51c89d54c7c04f79d71170c40a967599cac16322c28ebb size 45460 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/install-code-library.a index 749ecd7d8cd..9a8af728da8 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:253ce7085971498f4db169a5cedc33ac5c7e9ad78c64ebd371399cb2329af435 +oid sha256:8d6e13e60e5c5208bd33d4410e40e3fe2b21477a71a3a6ed5b075a563369fed4 size 44340 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/install-code-library.a index 9d7d28d3522..371aba4bf27 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75fd422545b5d192bb1d9e3f2241dc46dc9b171ab9181b98caad269c2c281497 +oid sha256:e7b0040160f678071dc412ee243aebcee4444efd49759be6e4d5d73ead8e3c75 size 41772 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-stack_protection/install-code-library.a index 7e254bc870a..5f608eefde0 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d94829e319906f378cefd5c93593d0ef221bbee2fc23e7d81d74b6df4559237 +oid sha256:597cb7e1dd318379e188879f8f08763bf556af94a71dec00d51edfd180b41908 size 47000 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail/install-code-library.a index 675159c45b8..6a94630b31d 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm21-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:937b6ce81918c47d4bea4f5aa779177cd6fe190c349601af522924f02adcd73e +oid sha256:c2fb05f5e481143e95167a6554bed2b7605cec21bc686730b1f3607bd8cf270f size 45242 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/install-code-library.a index a353132aedd..f021b698092 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ef89555e75c6840f58ae948811cbc148c08c87bea327063bb0ab35de4cf7d4fc +oid sha256:167a2c6688ea34e9af27b8dbc1f29740656b5109be960973be1093c9de947678 size 44340 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/install-code-library.a index aa112ad3f8c..d85e74a0040 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38a14d630bd80f1faa717a7fe3d9d33f67b849a641e91c59312c64547bed390e +oid sha256:1897b925de9b2951caa477a9975004d89f5ad3e3a3df1e73a428ae2e180674c5 size 41772 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-stack_protection/install-code-library.a index d3a35147031..8cd3bc77e22 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c73d58ede0ff96fccc7c6b2b780f1a603efe65ec9edbec83377c1b2731ef6cf0 +oid sha256:2aff5c978d2f61aa172032ca51aed0ca025aa0069b30ed7df124e0d75b325575 size 47000 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail/install-code-library.a index 9ee8ee83671..735d4f057d2 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm22-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0848d3d510c60ff22ee58528692f180060761c1e35ed67d5024fd1d66f8fd18e +oid sha256:9a13268b2a809f3f892f9117cb2552956a685c90cd1bbfb11cfd9f966e02317a size 45242 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/install-code-library.a index 128fc25c413..f92dc9cd5da 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:853fb879c06e48f64175d7b3ca041f3e2bb302162c48118253da5cef409b52c0 +oid sha256:a4955758b3d31c6f4c98e55fddceb7072ec5f3fb8dfabaf75fe0fdf494f155fe size 44340 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/install-code-library.a index 73155eb3417..ccf8e245873 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84999b4cf4680d3b8b70cf18ca79fad6179818ae6b147d5177e895adf5dc7cc6 +oid sha256:9f422b0c42241e7bf2f38eb6f9e1835f5acc46e0b2a585aea838d5a58b723054 size 41772 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-stack_protection/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-stack_protection/install-code-library.a index 9e9888ccb0a..937cdfb07a5 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-stack_protection/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail-stack_protection/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45b6962133e07c8794eec3ff7ac28e53dba04e2a5686760e4dd15429c7057c2d +oid sha256:0a0cfb15d2430629eec090be6dd57178d82ff8fd5195b4fd6b5eb8b0fee27c54 size 47000 diff --git a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail/install-code-library.a b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail/install-code-library.a index 06217a30d0e..32d250dfd67 100644 --- a/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-cortexm3-iar-mgm24-rail/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:676be3137ba383a12d332b72a97806e42cb424f0b3d4feb67d1e9e726026a9c5 +oid sha256:7ee4c3cde3fcc459b67d6dc797d4b41709a36ff8d3b1f90a939eb2419d7866d1 size 45242 diff --git a/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/install-code-library.a index ad7801baa18..84a22216690 100644 --- a/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c9d31c5adf2afae073f8e89e5dc1c11ec0155ebe5f9342eed87ba98b16b4ee1b +oid sha256:c6303f3151e91504779ee8954c5a4cb2f36ee375aa05397879b5f4ea73567157 size 98078 diff --git a/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/install-code-library.a index 24ca545729d..6c8d9b1025c 100644 --- a/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:317d473ee522db785b142e3e7cf2f84b5de2c8b64e7bc2fb16d772b439b2f87e -size 70790 +oid sha256:d3f872ffca0e437eebffdd65d82f29cc5f8a8d80c8de64cc4a8336e163fe2f8e +size 70786 diff --git a/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/install-code-library.a b/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/install-code-library.a index 9d18b86860d..8e5d5ac2b22 100644 --- a/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/install-code-library.a +++ b/protocol/zigbee/build/install-code-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/install-code-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbc4997f3d80c17136421b8953dcbe44faeeecbeed62645991651e1f1c7cfba4 -size 103478 +oid sha256:7dae87bdb8f5bcc51c28c2a9c5d8bc277ed0496f96cd96df3a5284b0809bd071 +size 103470 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/mfglib-library.a index ee3bbe11184..a9c08a99cf7 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6100bc6b9b1824d92d7d56a7bd2a53f47cd0a0c9a3daf438593473b180abfdc0 +oid sha256:c4b40af8633f8d8a5d0d88f0d140215068ea3c26693f390a74b9fe7592ee11f9 size 7784 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-rail/mfglib-library.a index 3b974d8bebe..afc472b3754 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:494e92125120cbf8e59da46a1f22ffe21beac065636b93f12c2cac88591a7884 +oid sha256:eb61427f7f75c0c2e7979b5c061ad295509d468179aa28033b2b43de7a9b7a70 size 7864 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/mfglib-library.a index 3c542e06ae4..ad4735bcc2d 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31d1657be1c7f9b75f2607fc9634a49b28489c05d90d41011783bfff2a492b0d +oid sha256:1d4559c4359e26bdb5fa5f7e29a64704f3fbcabccdfd6485bb8a78a89090a834 size 7568 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-railgb/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-railgb/mfglib-library.a index 394739e2997..20c99c5da7a 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-railgb/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg12p-railgb/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4585b32224f00b149001cacc42e046f94eb00789090e4eebb2b84c991c3be069 +oid sha256:060e977eedaf268b438ff7019ada9c77df88f11afb558e02e61c78a1fb045649 size 7652 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/mfglib-library.a index eb223ccecb8..8efda9a2104 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ed78fb54eb31312a57eb411a6ccb9923f616bcc6c5d86b89610c868abecec4d +oid sha256:95166874c6e7778cf106f4b73d0b0d07d9b471c977cb34281961b89d7f34f1a3 size 7784 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg13p-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg13p-rail/mfglib-library.a index bba425f120d..b83a7f6e65f 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg13p-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg13p-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:872c2ec628388e476e6fc23240b9388a635309f970d0da59b6bf4840d2e26f1c +oid sha256:00d3ec42adfb3e06261f7ec33bdbce92db14ae5868120db3ccecaacb8855bbf6 size 7864 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/mfglib-library.a index 1a0e71a53e8..4be0b19965f 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81065c26d0487c3d0f89d71ab43e5c31787369a5ed4761d9c6226c695c4c5487 +oid sha256:a0a610b6425422bb1ef287b03fdd6ab558ecd893cc8b020d4067c0f97eece241 size 7784 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg21-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg21-rail/mfglib-library.a index f8fb5179b8b..3180548dce6 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg21-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg21-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fcf3e495f3b39d7c733a54df02042c9dfdb61ab47c7d325f98f4c821f55362ed +oid sha256:feffd6bad39256aaf6539f6d3f1952def31cc0ce5da90a09ed8527f32bb21dbe size 7864 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/mfglib-library.a index 6a9674c5bf1..a1cbc40a984 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a6ab920c6e0bfc01114be7d8bb194e5df616eac47000a6a64f65b0ce9517e51 +oid sha256:023e2ecab7e2e4019ca80f9a0c6acd59eec368b3c5fc5aa666c4c4e234b5b44b size 7956 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg22-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg22-rail/mfglib-library.a index 2081e01daba..19bdbd2a020 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg22-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg22-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b7025870c40cdd432610f8a364b63ca62097eb62b86caa8ee0de11ac03597bd +oid sha256:51b907dd053f88f1e343f859e23924949a9be7aec0ae785b82fd4dda52055af1 size 8036 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/mfglib-library.a index b9b591af575..023bff6396e 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3776a63d3d52eb5ea2d37548aeb86945bcd5bb083db7186126fb77eb816c01a5 +oid sha256:96b99df577418204e4636e6cbf9663516a1e1f5d85f85d8f4f3f2b18195d8c41 size 10796 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-dualrail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-dualrail/mfglib-library.a index 565f38e4435..c008bd07d70 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-dualrail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-dualrail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cd0405a958ac8b258a6dce812e303d753753b5876022e13bdcafedecaf49058 +oid sha256:882c7c6a19d5dd383b3009d00ef527a739e9434ea87ccb15a7cf2b43ca3ba69d size 10884 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/mfglib-library.a index f0c96031560..5eceb25899f 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0298d52f96e5f92c1164a046b482837ced795f881efd507157eb65fd5ac2b025 +oid sha256:a4d604bca305385148160561ab4ca8588181a63b593cc6d8489831b1ae728cf8 size 7956 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-rail/mfglib-library.a index d611cf2cb6e..b6e255f0bac 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg24-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a353c217748e6fc98282e5e5b6120f1375b7e298f3cc168e13f811df641c0341 +oid sha256:0a4558f31a284bb4e5570be29c265589b589ce599581f9e5c0d958104493c86b size 8036 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/mfglib-library.a index f98a339b8f3..cc295ac0b0b 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:88054097998be2caecc1ce4abe8d00f9907813968400a5f6bf46603ecfb92192 +oid sha256:97f67a081f5da85ff4a4720d75106c95e682301a9b536da5074e14ae7679a292 size 7956 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg27-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg27-rail/mfglib-library.a index a10a5d7f462..81de8e427d8 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg27-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-efr32mg27-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:603473c7f5a262fabef4bfacd4e5b22c58d5b2d2146242265ba16925177758e0 +oid sha256:d91469bcd68fdd8da2b8b22fc4c0b2f945af7443b31c8ec738b33728b5276aa5 size 8036 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/mfglib-library.a index 43dcb3e3b06..36877f4ad2f 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b656431979f3ab7e79f84b9a7842404b3259c462822254b709b4c6656c471d8c +oid sha256:3c57d2ad3037fa3fa85d6992410f7b9f4bca723f2c9a38e35dffd9d1178a6beb size 7784 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm12-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm12-rail/mfglib-library.a index 8979e5cf7f7..41d52262864 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm12-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm12-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:faad30b019e972ee4f9caa3ca7eb3dfaa774f02410755415104d78b575928071 +oid sha256:11b96e84462de4a205f18dbf80af43152447923fc775811206b425d69148b8bd size 7864 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/mfglib-library.a index 3bc5d540f85..80fa6b00311 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c6c69aa47261d5731aa77a878c028d79800f036dd1fd528afddde9a6cad5558 +oid sha256:65e291321776d1901ca72fc4e254c78ad4780297e6e818e89d39c702ce13076c size 7784 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm13-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm13-rail/mfglib-library.a index 1481ff7fd39..5c1134fa90b 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm13-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm13-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e433c41fca4ab22a2b3522cd88a7e6f18f4dd774e8b301007f68124602c67fc +oid sha256:53e68cefed1d2b2fcb51c6328db32cdb652e81be787082507e464fb2752508ee size 7864 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/mfglib-library.a index b345c27b28f..e76ee8b8ad1 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f295989a159e21ff50e9a2c82e0bcb1c6bde740bb336698036e297a6f4d93a7 +oid sha256:d2c323acab9454ccd672e209501a30b5f2f2dc9694ea9b388a56c0b4cd47bd07 size 7784 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm21-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm21-rail/mfglib-library.a index 57775dcf1be..9c168f261ba 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm21-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm21-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b4a717c2b71cd4d65c6ae72528423e282a072141c84237ed32911d383d53a1c +oid sha256:4547a45aaa4c5ccb611aec3d45168bcf95eefdcb6b5ba25e435a5a1f4d4d4f4a size 7864 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/mfglib-library.a index bf221cfb7d0..79c5b61ae99 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06008e441d940e1a1131ae4ab3fb73e494a1109f77355ec1bc61953bd4f0d151 +oid sha256:a9a01d81db76a9425a1c18457c5e3ca4c2259a5aaa015a29a412a08139c26dcf size 7956 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm22-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm22-rail/mfglib-library.a index 961d63e9852..23dd32208a7 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm22-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm22-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9226bcdd99ba880d685333c425af7df0375af0049b257ae4bb97aa2dffbb676 +oid sha256:fe58923632cf191655be952c698585641811cdb0b9c738555b06aeef8d30a65d size 8036 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/mfglib-library.a index 368e82d9ae0..800adbc697c 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ed526af5796dc2a60fa15b41bd16f0fccbfa4620b5fdaa1ad19da27c48b6ac6 +oid sha256:855f67c214c88ce3b6bc498bda979f7a347d2d4fe7ec2a4545300bcbbc4f78dd size 7956 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm24-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm24-rail/mfglib-library.a index 3ffbe5e0c28..12dff33b2cc 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm24-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-gcc-mgm24-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df9ac1aa41fdc808c69d7610deb37c027c2a718c640a1a1eb480d7b5119aed79 +oid sha256:88a3f5044ce847add21abcc7acef14fc3bb4da91d19cbf60479c3d246f0f0972 size 8036 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a index c062929492a..dae66b0e6b0 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f637a23cb2a469545faffaf9bedabd01b82bcea3cf59e7c8b5802d919c8bb508 +oid sha256:491431dbb473ea4820d45955606595f6a0a81930e0ae92fda234bde6c7534155 size 15884 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/mfglib-library.a index 7fe3a1210d1..66deeb2c54f 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62916a89b480d23d8fb0d139a98ee5e8aaed0ba208962852489abac1796f78eb -size 15580 +oid sha256:d150fdaedfb777a003ee4c4881fb150895f11fe049dcf0835598cb16f8761bbe +size 15578 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-stack_protection/mfglib-library.a index e81d8465f5c..a987991826f 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:290d50e61c1be44b2a0858e9d1ec61895b220c5f80425711a800bccb4d3e15aa +oid sha256:635adfa5d99219b1b6bb52fead575da1cc36aa6ac0eaff1a6f76ea336dda9cba size 15912 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail/mfglib-library.a index 6f51b67f80b..8d10971b7ab 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:122e1ac024d0889cde85d63b5039224a3b96b599945d8aa202f6b7e148bffa76 +oid sha256:a4903449b4ceb42610e901af288eb2d583397c577fb545b31b8af9a58cb9009a size 15606 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/mfglib-library.a index 0a32ac3a0ea..e982ee04cd8 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b4178b3b385f15a81a4ef745213ef9a59fee6db13c208a2f4dbc56177d1196d +oid sha256:1a00700097ae92bb6f21694f7a09865fc81d9a8ee9c680a2b1d6060ee67cb50b size 15272 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/mfglib-library.a index 9d054ba258b..de1aa70b754 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45a3b1554e4bf03fcf35b78e97b726d3beaae9102aa8471a1662dd31dbefa6a3 +oid sha256:0323c3088ec1bb692c2e1470fe546e92e800f4d36fd4f0a7fdaf671da8931467 size 14966 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/mfglib-library.a index 11118491987..fc3eab7addb 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eee826b6d82d33e73e2a6a561b357383a73550d5a09cf2f7fd346827280aae0c +oid sha256:cad0a895ebc55355d0808badae70fd538fa92a64fa68b4c59721b588d2f46e5b size 15300 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb/mfglib-library.a index 04952219191..0852bbda3de 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg12p-railgb/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b2a41687c01f6c89aed18033f5f2542b4140ebe94619a8b21bd3ef42e89f717 +oid sha256:c166234dd4dd174d53664c6ce941f4cdcf5f68e6c109344dc476b8d1cc27fd9f size 14992 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a index 6d8c80f3056..f30d96dd56d 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efd04b930907605a7477b4dfd90ff8cc5049c5974877695e655781ca96e573c0 +oid sha256:948e392076fb1190397acc811a84e88a284e673afcbd6d75397e3889b36166f0 size 15884 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/mfglib-library.a index d1275328396..1c0348db5ce 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08d9e9b7e5b557b8008d341f5c360695f9139f4bf5de3c082a8c685084a96e1c +oid sha256:e58c3ca0264fdc4420035b99209bd0f54222b3c2c5955e2eac283e53f126da5c size 15578 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-stack_protection/mfglib-library.a index 2c026b0a0da..32827ebefbd 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8549cfbf3e478a92009bfee21f51606d559b7a7e682e47803fd90db779828310 +oid sha256:da8b7ed0ee60008f9a80d20d7558b05c9d3010686b09a4ba83ed60b2689bcdfd size 15910 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail/mfglib-library.a index 8e82196f0f1..c3d42ba5f1c 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg13p-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b513c86281d40899e5e88dc0dec153e9695bdf27a4888dc4c308982e9f025d5 +oid sha256:7ec836344cc497055bdf412608bd4971c7e408c46e99f7d540d2385a629b769d size 15604 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a index 34e1a898bb9..995f9a48c9a 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c37754935c04498bc78b7b3332d2d73cd4c2a02dfebb861332c7ca1b1bc6d87 -size 15886 +oid sha256:ffd5f3362d4f58793be1115f9874fc2b26f62c7fab60ab6fab12b24249ec1c65 +size 15882 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/mfglib-library.a index 7c1f1231c39..b2262db5d4a 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16348754c4874d8430248373497fcbead176dac8c86f89c73cdbbc1b4d00039e -size 15580 +oid sha256:c59e95121a4e4d065ea9451211ec4243f60718b591a207c751bd1263a01f1dbf +size 15576 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-stack_protection/mfglib-library.a index 2dcf2391ce1..1884b57d526 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e1cf1554a9a98e2f5a85af6ce87be4baa43ebbfda05984287c4353f48c8c17a -size 15912 +oid sha256:0afbb0b39bb04532b9a3289eba7d1ec80a159e9759d3fde0b7fc8cb6319dc585 +size 15908 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail/mfglib-library.a index 77a36f976e2..9b5f1f912a2 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg21-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e2b0af1c06851ff9db79ea6c7e1a04904fac21240c5af801985d4f6a8de8632 -size 15606 +oid sha256:0e38fdc473999addaf246a7a3da749bffd9ec845a9be0721a87db73304efea01 +size 15602 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a index b7f9ba3fbaf..770e8cf545c 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55a505b2ab369620269e477639c3bd6a438280b5efafec270e127b03ea9c1cd2 +oid sha256:03c69fe365c89a2f4a8eaeaa7c786a1a060e15334573aae1a90241fe57dd28b0 size 16090 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/mfglib-library.a index a87baca2196..9266cf089d8 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ba646eca4af5360502040e4affb4c1fffced4c190c27fc92628408a49718cab +oid sha256:b67e52f3d7c3ec030275883de9e1e0d13ea03304febfe27d944cbae0ce6004fe size 15784 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-stack_protection/mfglib-library.a index 877cdbda91f..77cdc671383 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a94685b55e4b8bcd38bb1d00bd49f2697000ec0f333bb2bb8afc915d2d4e90d7 +oid sha256:a8fb87193a58eacb3c8345ac12c61273a0ba902fc22f617f4c51b9b9bf865b89 size 16116 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail/mfglib-library.a index 6cd6ece4e0a..d2df4138fed 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg22-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e482a0d88417c279d00614ebf2ad176a93c66b3bdd7dc4d087867a28fa3b8592 +oid sha256:116a3a8ab4c95c2fb2636bde5c29a3df6aab8fd887af089f6f1c9f66a47be530 size 15810 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/mfglib-library.a index 74efaddc898..469319ef2e2 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f7571170c00fc18f6aad25723b08fadae8fa4cc2c3a6cbba8ded6387ec66f72 +oid sha256:7cde1935d000ddf6d71fd3f2e962d58f121eaff23a1c137c1c73c1d2a95864b5 size 23158 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/mfglib-library.a index 09ea4587bd9..f229ec6879e 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:65715ac99f2b64bfd5473033400163518efa78fa8a5e391a06c2cf642e457814 +oid sha256:cd22a9e32aa8f5656cf6cf1343d2ada0e6da7d9e35f642b69f907fa034881015 size 22852 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/mfglib-library.a index b018d5e8f95..0f6dd6ede52 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b86d9d3e30a79cd5578db6d31fde9ae4d0a1e9b08da77ee240ab9537f8f3cbf7 +oid sha256:f5accb2ea34fbff1c3c5609258c9976aefc03cd580fc776faa98efd780a192ce size 23204 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail/mfglib-library.a index a3f1f8c7cda..53f8f9f47f3 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-dualrail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b58028212b4489fda88846cf8c68cc9e6093c4b384b551094c1a2181213604f8 +oid sha256:be40ba13b0f28892dcb61b8417f130cc31a1e5cb0f977268c3e98ef7856b9178 size 22896 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a index 28d34e74a22..14ce6cc86a8 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd1ef485747c37161abf51e0f19f42ac62c74b8e9fff26d3c315af0a7a73d333 +oid sha256:c269e2a245b020b941095e710e65713553c5181bfb887da442bf541ff636615c size 16090 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/mfglib-library.a index c6e6a2d7b5c..21a3e3af831 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0b2a0841cf1a1beed972b3ead714ea99496f4de2335b430c9359d69b4abb37b6 +oid sha256:4114aef5adcf37a7dfa887cc2bd7a7b7d0cc103521c444b087af1cba8ca9c17f size 15784 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-stack_protection/mfglib-library.a index 54267951289..bcf21d97313 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79caceab3def537d52ed926af8fbac3e50a778797a96c09ceee631527d6b9a67 +oid sha256:c6defaa7479fd84447b853786f7c394809d780cfb2bc27c808f033951812e4a4 size 16118 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail/mfglib-library.a index d848bb7de0e..9b40ce6437f 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg24-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e0251636e22e8e1a2b7654489dba986ca23a047db415060f417c5dbf17d1c96 +oid sha256:5852331eb74f62dda9fe03519c78c86c64d048ce263e0c09d3dc693c6231c2a0 size 15812 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a index cf05db0936d..b31f751402d 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2cc96708540cf2c07034dd47710c1a3cad2374558c1c97a0594a378759318b1a +oid sha256:10df4ba4c1e63b9e9d8c60033524fdbc40c5cb7336187bc24ee37a212071e4e2 size 16090 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/mfglib-library.a index 83f33f19107..2f864c68c27 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:064df3e5ebf155b99cb9e17e06801a847eb6ddf809505b81a50aed77920c5a9f +oid sha256:59794b72ecd5a3998c220fa48fee4d87e48bfca5e61cedc941c3a096cb6ecd53 size 15784 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-stack_protection/mfglib-library.a index 8120e23aa2a..905523dc09e 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:102be30fdbbcde425354fd809ec96e8e8ca92557f9a0c82fbcf9058714334d2b +oid sha256:5e2d82b7132e3d1358614e4990aefdf30fd044c1c29a70c32ad3ac0ede23379d size 16116 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail/mfglib-library.a index a74a0dd870d..0cba0e9cfe8 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-efr32mg27-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cd30ce35fec2fcaaa2d705557aa6b2856e4ada297f3496adc54d919043e29d7 +oid sha256:f147d086abc0b967e53db8f98c6ef58d29f5b494be24c8875fcf2781c179e3a3 size 15810 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a index e6c4da03ce7..a85b3b20ddf 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54082501dc7acb9702ca8f86feeb7e7d0ff98696aad50226dcb48192bb8d0805 +oid sha256:60d4a512bb717c48d1becbb4ea4552f2ed64823fd870df0ffd93108262c1549e size 15848 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/mfglib-library.a index 90776672483..c6540b39693 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1cda1caa622db0b6593516422c2cce08dac30d20086852e643b8722c1346dd03 +oid sha256:7f6a987ab124db85440fec52c5dfc0d3e5766183dcea236e860743b3cd26b74e size 15542 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-stack_protection/mfglib-library.a index 9fbea9cd39e..277812834d2 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bcfb160a83fd31b84f75848ebc34f59771211e2e1505097fce9696430da58f09 +oid sha256:049735690a287e3fa8f69baf822e450c90856a263b703d2ea0727986a2272885 size 15874 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail/mfglib-library.a index 0e65cb3a4b3..313304c8597 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm12-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7cf04f2fffd72fd7c47e754c4423f4a9dd3453d6689009d0daac994f2ace0852 +oid sha256:d1ced3fd0921e0ac8541c36c5950f30aa0241c3468df1c260a91a0c6ae156864 size 15568 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a index de2248a2fe1..bf0798dc427 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9b0853c40800d92ce09d6830f20468a19f1bc583099eb68749708a0badfc401 +oid sha256:233305b091f13f6891c5f5f846af5a91ee213ce22b99006d341432337497ebc2 size 15846 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/mfglib-library.a index 0edd76c1113..977aad05f5c 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fbe9dfb312093c45298fc8c7685ffd0def0ec7e2798ff0fe676785fb7531db6e +oid sha256:a28ece67980d22e7ce80e64cb952a1449ab3c9776b707ac4425529fa5926898b size 15540 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-stack_protection/mfglib-library.a index 95662661407..c293d369211 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04d84e20068db8ae12d4bc07c2fc937c606fee184f986841daa3c8beec2e7983 +oid sha256:63bb5268b1a2c90815877652416164b866565de566751a3a95d3828bf03e7a7e size 15874 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail/mfglib-library.a index a2982912491..51c45750542 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm13-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e3f42df137074144f53473aa491a05a0444e254f088159aef3d5477761fad77 +oid sha256:aae67028ce50a7ddedfb2cff2cdbe9a98418b2e8f076de71e2e296ebbace6ff9 size 15568 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a index c63eac9c341..a5b8c01075a 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9abf539bcdd1c4865dd497270ba708ac31c0f2b22f50dad10979275182dbbbdf +oid sha256:f6ac7473adcb3bf51e63d8fc3f5c8c8d3d27f79e63d1daf41dd1dae6bff3cc32 size 15854 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/mfglib-library.a index e624a17be6f..22a95f7f7c1 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:656f75eaec0f6a483f51f823744355e26fcb3ee7a6a10bc757e900355e5a42da +oid sha256:41b83dfe6ed7673e5ac22f705d884d93a176ba0bd30f73876a21368ffb16618d size 15548 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-stack_protection/mfglib-library.a index 7268ee39d8d..34cb6c5f22b 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e751985245d987f628a427609a3b496cba2f3007bfc52b1c5fc58b2a0bfa9486 +oid sha256:feec8f54a67332e55b2f122b084ea25514e3227898515a7686dc5c2396499b68 size 15880 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail/mfglib-library.a index 2fdf0ed4405..914b662fcbb 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm21-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9484624679d35afdb4119e4bda9c6d7218fbcd36c7b8fdafc8d4656f6c816250 +oid sha256:c30581c2bee4f1e9af230778370813248c72cecb5e4168ab721ce3f61df03b08 size 15574 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a index e4baa0521f0..26c022f2fd3 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ef1ea46cf6cd22b48096683a9904cdb0ea9ea6579c791306a6b50e9b160e94b +oid sha256:8106a28e97bb51ac82841bbce7e924a31ab445e82884b5cb03bfaae65c055708 size 16058 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/mfglib-library.a index d48d61b2784..6028ea09d71 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6f969e9d15235df0e212f858e638773787429194d6a77c64f255a391924b8cf4 +oid sha256:fbb2af854f56921d5a59090f207c95c03a189d427ee51ba82d1dd810894d7a7d size 15752 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-stack_protection/mfglib-library.a index bea67de335e..da7eee1e21e 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4b72971bc30e052fb31871e487cc3125dbc03357da6f8fbedae5644bb334764 +oid sha256:f3338d1be8f7dc9d2f427dec4ea0a2ff8861ed74e820ebd7602d67192920828d size 16084 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail/mfglib-library.a index 40525ae6a29..999532949f0 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm22-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77aed431b5e472c3776a194c12948d36f79e4e36640c65afafe41cc80e35e330 +oid sha256:f6ec8eb3022eaed26d9a5bb1c8e907fcf11c9eef86de891de18a030ea4880000 size 15778 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a index 8144341c6f2..3531b4be624 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:40696d81f2735d46cc146e9e870b055543d88dec6e66546850dbf04b13e790cf +oid sha256:09320ffce2aa00a484751afaede36a5354bfce858c29f156536704f8d7e74c98 size 16058 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/mfglib-library.a index ade66d6dfa2..9bf04a5ed3d 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc42957a72981554b8feb3e2ca84a992fbde4f496d0dc6fdba9bdbe8a61686cc +oid sha256:b838266226ea4ed98b0d47141b4f9b86b97674063b3e5002f848270456d0449d size 15752 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-stack_protection/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-stack_protection/mfglib-library.a index f74c9b57e12..7e8b1093930 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-stack_protection/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail-stack_protection/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:289fc38b5e01c76e28e5ff6b956a2e3c1ee068d7a71220734af219de2fa9faad +oid sha256:48def5b601df79963071fd9beaa710bb4f18227d72f420244426c8cd0412a1c2 size 16084 diff --git a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail/mfglib-library.a b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail/mfglib-library.a index ed41e921077..b6581aca79b 100644 --- a/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail/mfglib-library.a +++ b/protocol/zigbee/build/mfglib-library-cortexm3-iar-mgm24-rail/mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4f34128243ac820bfd6e9d61bfbdaef82c5a38abaf2b675652415b1d2988e4e +oid sha256:dce9a1d7bcecf8124c8e751f8fa3b613b524bda7af4469e8bf5b57e8e3339365 size 15778 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg12p-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg12p-rail/multi-network-library.a index 2e39ea8bf16..5bd96d99670 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg12p-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg12p-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6b92de19b8c8980aff5f38d3d88562c8c3ab433daff772c3305f2224a64a186 +oid sha256:22d061a23b409d893f06a95cda36fa54975c4f1788b57c1d1331bf7e6aeea49e size 14492 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg13p-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg13p-rail/multi-network-library.a index bb134e31ff7..20eb1178e55 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg13p-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg13p-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:657bbcd947d88826d1194b9b781c004260806ecc04cda931f997dbd3a608f88a +oid sha256:378ea7e0d17ef4c1006bcd8363eab53b1ef3cd167b1ccf2bb81ca48b3a6bf637 size 14492 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg21-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg21-rail/multi-network-library.a index 2091115237e..646e3350707 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg21-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg21-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bfcf56a5ed511940c6c6a14e4a3f5784ee56bf70c004ea9867a30ee2fb22eb89 +oid sha256:b95e28f5d78461e095f9097e15a61ebf31229f7db78db7723cb1b4e83a737203 size 14484 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg22-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg22-rail/multi-network-library.a index 89030d71eb2..4b6c719d1c3 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg22-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg22-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43ef99cacafdea2b28b6c5316f2422b5bca99c8e5176649da1b86a5083ebe552 +oid sha256:82cb37b736ea55ad7781b5ab92d9eb61bc3f5ccf24fab6877ab5cf2666724617 size 14484 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg24-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg24-rail/multi-network-library.a index 89030d71eb2..646e3350707 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg24-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg24-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43ef99cacafdea2b28b6c5316f2422b5bca99c8e5176649da1b86a5083ebe552 +oid sha256:b95e28f5d78461e095f9097e15a61ebf31229f7db78db7723cb1b4e83a737203 size 14484 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg27-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg27-rail/multi-network-library.a index 89030d71eb2..9cfe286bf15 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg27-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-efr32mg27-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:43ef99cacafdea2b28b6c5316f2422b5bca99c8e5176649da1b86a5083ebe552 +oid sha256:6c6aa3585a9511bc14df2c740886f22260ae9497a0dab8e8f2c3532dee6faa62 size 14484 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm12-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm12-rail/multi-network-library.a index 3dd99552397..b1343bb6fec 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm12-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm12-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:46d963f6a055c950655bdafc8930cfc05e21d91515948ddb8a53e6deaa56459b +oid sha256:49dcac4b9e59a69c0743e0deda51cd4fc38d519d8aa596ae8166d5057f1a2f5e size 14492 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm13-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm13-rail/multi-network-library.a index c2cf18c9c27..313e69d07e7 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm13-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm13-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86ff89939a33fa63ad570d7163b3486792f0597ef0bf232cbb69924281ebe7e8 +oid sha256:bcceab812acc34961b97126296b40950dab0769b59a1f46cdc4c45df2cf84c46 size 14492 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm21-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm21-rail/multi-network-library.a index 2da6e0816a2..29755cc2f7d 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm21-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm21-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fddc462ef8d5caf383a82f8656bc8a469f2bc9c27b8d87e620253c1586130722 +oid sha256:3de48df410dd334b4b955cb883a7e6e81907d4394f637215deb08a275db0a279 size 14484 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm22-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm22-rail/multi-network-library.a index 91cb6a343b0..0d7752f6f30 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm22-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm22-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd01102912ea8216bcd1f4dc3ae5da183d26ea2099500ac0512647858fc68554 +oid sha256:689fd75a31cec66f06bea9a7b70c765c5314eb28dded89d013141e30f4b11033 size 14484 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm24-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm24-rail/multi-network-library.a index 98282ed083e..0393ec99919 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm24-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-gcc-mgm24-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af460887cd23b7525b34789c6ee57efd23dc93d78605bffa394a80de18ffd716 +oid sha256:051a93e0d9f20a376c2876c0b43889af53db38682de1f4c030cbea7b2cedfa3c size 14484 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg12p-rail-stack_protection/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg12p-rail-stack_protection/multi-network-library.a index bb42507061d..7a518db34af 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg12p-rail-stack_protection/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg12p-rail-stack_protection/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:046846c30484235faa77c27887c14cedcee24880fab4e75996a12089186618b9 +oid sha256:aa80c1c81a62762e20e759582f77ed98cdc0d191247f1c6c8bfa3d3ce11b057c size 30050 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg12p-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg12p-rail/multi-network-library.a index 2367992d0f0..3acf52c9028 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg12p-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg12p-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:32b3bde8ac7c677d993722009829f300bded970887d17182c693e4c6f104e03b +oid sha256:984bb4f5f4896be4316faecf81c64b1ae8a617ce72ebbeb08d372b9e05810f5f size 29376 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg13p-rail-stack_protection/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg13p-rail-stack_protection/multi-network-library.a index 701d9257a66..9349087ff83 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg13p-rail-stack_protection/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg13p-rail-stack_protection/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4783251cd6705beb493d1fedb142220ad897999d7e6e905a6d8ee9db15741e6d +oid sha256:ecfcfd735d0b98610f44ad1c40179de378ede5c62772a1257c221790ce5086f1 size 30048 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg13p-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg13p-rail/multi-network-library.a index 9a99f66686c..992c4fcccc2 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg13p-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg13p-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:40769c9fa565f37e1c6db92bc56ab337024a0eaa3bf902d216fcec93239af83d +oid sha256:e612416a8984d58172c3de730d6a8c12e9f2a5c58b7a3f2bee2c638fe3d3f8e8 size 29374 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg21-rail-stack_protection/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg21-rail-stack_protection/multi-network-library.a index ceb4d10bbd0..256a33e0baa 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg21-rail-stack_protection/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg21-rail-stack_protection/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0bbd9e1bc9aca59cb29ee017fcec1b4a07ce02e8bb01aef710cbd8e8a3e40cb3 -size 30050 +oid sha256:19af0727f615b30fe67d479f25572e7b83e66162488d4aa6fafec1028e725cac +size 30046 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg21-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg21-rail/multi-network-library.a index d407922e28a..80fad870450 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg21-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg21-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0df203a2bd53abbfe3ab3464bc6a039722355e761b44c6d946f023b0a493a263 -size 29376 +oid sha256:4b9ade7ad8aa61c7eec6445bbe5b1666d36f7472863be6903e39a61849ab350c +size 29372 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg22-rail-stack_protection/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg22-rail-stack_protection/multi-network-library.a index 59420c195b8..b5b2ed2b6b5 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg22-rail-stack_protection/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg22-rail-stack_protection/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57d643773a8e43ef4996a8d0c22efff2400185753d11ccc653a82ee2f2ab5d52 +oid sha256:2702c2a200859089ddffd47eadc6f4c6a869cd7ecb8bf1c218032f6f637c225f size 30050 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg22-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg22-rail/multi-network-library.a index 9e063c5aac7..8705e98b02d 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg22-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg22-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3b72f7c37a0f517a8a3449cfc9a14e21b8315e9529ba07119ed14d2c101b49f3 +oid sha256:7b6b2ec893b72318f81134d24585b4d2ca9256e30a2ea3d70439ae6a1debd9b9 size 29376 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg24-rail-stack_protection/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg24-rail-stack_protection/multi-network-library.a index a4825fac365..d8d8089739e 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg24-rail-stack_protection/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg24-rail-stack_protection/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4915a3866331f6f301b959c71a63d2743992ab0534119cbe8682480a010e485f +oid sha256:a2d354e06cd859056497736a8c24e3a051ba5e73a4cef3eef81a74a0ef2726ae size 30052 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg24-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg24-rail/multi-network-library.a index 0fc6c9edb17..bb6f8edac22 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg24-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg24-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06ef4cbc004d836b6e227636b2b6580ca9e0b627ce3d798f4fd5e2d75b2e3183 +oid sha256:7acfe2ac1291edfa18b1d3bf847dd8db0cdb2893ca6bdaf239e94333919dc5aa size 29378 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg27-rail-stack_protection/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg27-rail-stack_protection/multi-network-library.a index da0a2dfeae5..fa54fe5e285 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg27-rail-stack_protection/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg27-rail-stack_protection/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cc5691b09bbc305602c298709a486709e65562a8d3a873acc55bb1cc7f4360b3 +oid sha256:91e29dc441590c53603dc51f1021b546815c8519a13c9cdced8b5531fa8605c1 size 30050 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg27-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg27-rail/multi-network-library.a index 4f6d9a63042..377bb26d396 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg27-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-efr32mg27-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0bf2529c0f89b62f826946104015d797ea46d55932744059a090d64e251e8f37 +oid sha256:19f42e3dccb1f275b1cfd2ac6007088d991c26bb537572ec43332ee774cbfa81 size 29376 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm12-rail-stack_protection/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm12-rail-stack_protection/multi-network-library.a index a59d5019a37..0d96638de0c 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm12-rail-stack_protection/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm12-rail-stack_protection/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5527a3dc8c9b034b268df80a31f5ab0c18090ce943afee0d7a9dcee4ecd83a6 +oid sha256:02f1923ab3a07fb971c98c47690529776bd1ebe5b73f7c9b20ab85ab7ae70db9 size 30012 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm12-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm12-rail/multi-network-library.a index 9a6f7c724bd..811250cc6be 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm12-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm12-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84fac1ef20323d1581ca85f389cefbaf1c6aad7ca5aa753dc44dce9f114469cc +oid sha256:1c491a8fc610c512aa0500886ea16efca6f8b7b18cbb653c024746574e9d9e15 size 29338 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm13-rail-stack_protection/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm13-rail-stack_protection/multi-network-library.a index 29d838e7ec3..871ff33ba20 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm13-rail-stack_protection/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm13-rail-stack_protection/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e48a9f73800562365190abfb038631fd4e5fbc1d1eb1ac017c59b9005e8595e0 +oid sha256:7c28a37b50727b81f4f221dd120fc5b9e0e7baf5e182428f9753ac6c92b46b76 size 30012 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm13-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm13-rail/multi-network-library.a index 9bf2b06dd87..99eb03c6446 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm13-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm13-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6ded6b8bc29808d08edc04c057cf60b5a8f66c7d53f90461427e819267c4dd3 +oid sha256:26f423efcd7282260cd4ee51d3ac9067a1343a8929d4e15e48339acb5c9a6ee9 size 29338 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm21-rail-stack_protection/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm21-rail-stack_protection/multi-network-library.a index 3052865ad90..3f58f58c440 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm21-rail-stack_protection/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm21-rail-stack_protection/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3bd552453c83dace5482a64402e4f8bffd648e369f332f74295f6b4dfb36cece +oid sha256:60822dae2c9d6d0a488550dcfeeb7d544fa6f5972197537b112519c4d1e43d69 size 30018 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm21-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm21-rail/multi-network-library.a index 252ea12b73a..aee5b5bb856 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm21-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm21-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1de2a7a73a6f070ed8fd72a783340eff906ca781d6c6ac8e79a24e706e72b66e +oid sha256:7690ad6c5e9a600277debb8123a1fbada479bf8f06772854d9ae810e21c88d28 size 29344 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm22-rail-stack_protection/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm22-rail-stack_protection/multi-network-library.a index 759912be314..cd1bd45fd75 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm22-rail-stack_protection/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm22-rail-stack_protection/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5fa9a909a3680111665c5d1f2375f7cf630cc4211aa1a8488793998fc9d99772 +oid sha256:3c7cd7623b17c7abca46b3e47eacf6259a8822674a244333e7d21763ea3e3506 size 30018 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm22-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm22-rail/multi-network-library.a index 5e3d61c5e29..e2cdbc71792 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm22-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm22-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c8c3a171efc8d3ddfa42025e1a6f8b86389c1d88f31152de4ab701295d73d19 +oid sha256:c1e15fe753321be5c2a760d4460a192baf369765f5faebdae52ac75904724c8f size 29344 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm24-rail-stack_protection/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm24-rail-stack_protection/multi-network-library.a index 6d7f9d670fa..219b110115d 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm24-rail-stack_protection/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm24-rail-stack_protection/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c73011309cc8997bd354038238f9daca8c5a7cfbcb27eae38e7143c5cf1a9b2b +oid sha256:688e3d06f15b024421718dd2b1779a629f8b3e2077118381b9a6c9dcee6d9d2d size 30018 diff --git a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm24-rail/multi-network-library.a b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm24-rail/multi-network-library.a index b94ead2aa19..72b7f1c8ffe 100644 --- a/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm24-rail/multi-network-library.a +++ b/protocol/zigbee/build/multi-network-library-cortexm3-iar-mgm24-rail/multi-network-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7fc538cf0972a9f624356d8573545f89fc46a92145c93fe27c26be7699cd151 +oid sha256:724dd6772a5f9f82ca7900d1f9fa9bccc8c03e4d2bb29138d5333590ecad5fd4 size 29344 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg12p-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg12p-rail/multi-pan-library.a index 0f0aa959593..17fc4677375 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg12p-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg12p-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d643d5694f6c0f07fdfcb2603fd8fa33cb641adf6e9a9a6cc1f398ce00d898d2 +oid sha256:80cad553567219a440cb483b8f520676a77250acefef488c0f9b353f71ee4e6e size 5024 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg13p-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg13p-rail/multi-pan-library.a index 0e793d2f993..66b8e5c19d4 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg13p-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg13p-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:703314c0e78ad61805a4620e16b2a3e3fa868db78c1ff945ae1d53c4be4160da +oid sha256:8a6b88b6a3cd27f92908a98a0b76e258a0befc72ef8773d6c28db044407cfd45 size 5024 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg21-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg21-rail/multi-pan-library.a index f7df0544408..26503aa6106 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg21-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg21-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77c5fbcb419d0bb4ddc44d31afb8ddd89314ebc58b79da5ad6873545ff137752 +oid sha256:fdd787f7266ebc8321fab3347b899004fc7270037aa6c3ace9185a055c50b087 size 5016 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg22-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg22-rail/multi-pan-library.a index af07cea172f..d068873da54 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg22-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg22-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3063fb94bc79fa2cc969b545faee7255edb657354e3550e8810613df7db5e361 +oid sha256:ca1bd8f5b9628674a11757b413e83c1a3f147ad24b7e8d70d1b1e51ee5ec6fd4 size 5016 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg24-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg24-rail/multi-pan-library.a index af07cea172f..26503aa6106 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg24-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg24-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3063fb94bc79fa2cc969b545faee7255edb657354e3550e8810613df7db5e361 +oid sha256:fdd787f7266ebc8321fab3347b899004fc7270037aa6c3ace9185a055c50b087 size 5016 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg27-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg27-rail/multi-pan-library.a index af07cea172f..9ffc9be0275 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg27-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-efr32mg27-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3063fb94bc79fa2cc969b545faee7255edb657354e3550e8810613df7db5e361 +oid sha256:c008f515dfa1191d19926f1fcd54ec536ce6cbab6ff83e26736e9a8cbc0b231c size 5016 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm12-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm12-rail/multi-pan-library.a index 81d4b4650f5..033a5661efe 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm12-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm12-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34f8666d3e5f5b1d96a3979e658e913d716c02ba5c711d2a8bb0d31a1589e279 +oid sha256:c04651e20cbbf2d6a6a0f76e3fbe9a8201218fbdb6da1558b0d98b8b317ad400 size 5024 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm13-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm13-rail/multi-pan-library.a index 4163e287beb..78cc4c8ef60 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm13-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm13-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a2f197cc3ca65c636adec02cdfe6f71a85b0c1ef59e98a2adaa670372b9cd31 +oid sha256:713ce1f455e96086b226fdf864d1bdd3c7659fcf194640524a2f91e5f3ac5cbe size 5024 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm21-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm21-rail/multi-pan-library.a index adeccd5a6e6..0822d5958e5 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm21-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm21-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97efc8cfe50013862a0984af5cb5d6a510732836ed8a4d9576c9480c7721ea29 +oid sha256:fee9a81d8a20c6e351b1f9a35a63c469ab05515b8822c19afbaec6f0a913b20b size 5016 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm22-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm22-rail/multi-pan-library.a index 670c38b1098..4a4b6d16f43 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm22-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm22-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e613709acee25c6d866d5da56d7ec3853d1144840e69592a425d9a4616acf72 +oid sha256:34c26573223451b0a14a2c279f72cc55b3ffd8d142eb9e206f3c1fd49b2e858b size 5016 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm24-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm24-rail/multi-pan-library.a index 45d0adfe0fd..139f314098f 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm24-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-gcc-mgm24-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8990c0a0c926fdfd8052f8aa16aeccae481807c59bbbed89f7fac087a87447a +oid sha256:856408c1df19a73ce5672493bbfd5b6f84b659525db063e1f354f3c8dde56026 size 5016 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg12p-rail-stack_protection/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg12p-rail-stack_protection/multi-pan-library.a index 502bbcab123..85582b749a1 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg12p-rail-stack_protection/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg12p-rail-stack_protection/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a425f8e5172fe75567549f0c3c38fd7a185a82c3a8463a17093f0fde678af7b0 +oid sha256:a76171884484255c77316262b26468db133a5caffd2509d143e197415362f684 size 12678 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg12p-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg12p-rail/multi-pan-library.a index 2e43c529b7a..49db0fde1f6 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg12p-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg12p-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2adf3b05b937a81e17235f025d9a01e60f492fb22e7a4420a0ced6045c2f74bc +oid sha256:4cc472446be7a07126b7f47d54e1d6a8dbd015ad00fa4d2cf23084fa727e892b size 12336 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg13p-rail-stack_protection/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg13p-rail-stack_protection/multi-pan-library.a index a8e88715951..3a6bd7def53 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg13p-rail-stack_protection/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg13p-rail-stack_protection/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b578af4576551bdf6ebe0e71fc8d0edf9c24d17b1227855dd4c31394d8742337 +oid sha256:64541d18a739f62bc3612e63ea3d56ecf30fa1cee0c2218027c6eb1e415384d0 size 12676 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg13p-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg13p-rail/multi-pan-library.a index 9314fe2d042..5dac1c26a0f 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg13p-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg13p-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f5e33a72c5ed610dc38ff2db22cf3638d22051131d98ebe246f7caffa000e242 +oid sha256:4439b1cafeb24f5e9e3c3a411a9b6911197072436c41727e9778a9c8fc9e4b64 size 12336 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg21-rail-stack_protection/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg21-rail-stack_protection/multi-pan-library.a index d43146bae8e..e7993d64f38 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg21-rail-stack_protection/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg21-rail-stack_protection/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7864b0712ec5e87dbb972d06f6ec7b80995ada45d94d4109c54a618c9d5c462 -size 12680 +oid sha256:9d090ef2939023f72e5f88f84de017026f267a87746b5a22a4aa869b72267614 +size 12674 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg21-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg21-rail/multi-pan-library.a index ab23b4a796d..b7d98bf554c 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg21-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg21-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:386e58ef1351b7462d44e2aa07b89d3442c71094f62edcaa5571e7024c0fbb54 -size 12338 +oid sha256:07648c4295fc9769551405e582b6b7e4ae4b1d52926dd2c3941e95ebdadbf1ba +size 12334 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg22-rail-stack_protection/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg22-rail-stack_protection/multi-pan-library.a index 19697ab71fe..58fd539a7f2 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg22-rail-stack_protection/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg22-rail-stack_protection/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:713ebc63ddaa9c0b3a4e0def943eca9c5f8313cda801da876d9c7fbdb3c9615d +oid sha256:1e16164c00816d085fb27b1f2de4c6e657e6ebdb201ba817ad70213ae8477650 size 12678 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg22-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg22-rail/multi-pan-library.a index 3eaee29f951..52ce4d8dcee 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg22-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg22-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c05722f52b57e1458563afe83102d3e651036a64ba0239dc481de883266f9d28 +oid sha256:1bce98df4056dd72e7ab60058828c69ece0709875fada6d66bcff960b0c80bad size 12338 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg24-rail-stack_protection/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg24-rail-stack_protection/multi-pan-library.a index b15b32dc84e..8aefa79bff5 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg24-rail-stack_protection/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg24-rail-stack_protection/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dd366d2a0a3534591a361930a0a43727e52a9e0979b49d829ab9fb47bc7372e6 +oid sha256:713e995f34877ea3f7296d88c6492d177eea6d5d9da4aa8a879ae90a6c9992b8 size 12680 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg24-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg24-rail/multi-pan-library.a index 8e314c50363..5e817c0ccd3 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg24-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg24-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2957f3bcd962d7a0f1166e4387c64d1190c1cd7d2dc8f63515c565294691d37 +oid sha256:ddaf01e560a7df678a8a7c1a32802cf2aaa46c4f7cc91c84f961313aeab1121d size 12338 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg27-rail-stack_protection/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg27-rail-stack_protection/multi-pan-library.a index 7d8eaab91f5..de5eec90277 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg27-rail-stack_protection/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg27-rail-stack_protection/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d5707d125581bd932987e7c4b053bf7abc324095bb28f2b5fb86e3622f175ef +oid sha256:67269ffb28e0e25ca596a91460eccad4ff5516f7105e1e2a994c6893249515a8 size 12678 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg27-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg27-rail/multi-pan-library.a index 77a4aa8d364..e17b31c058e 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg27-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-efr32mg27-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c6f19df46e75a896cfa42e76c6b374f21b4984f82a801ef40478c67abb31acf +oid sha256:b1bce81f71833fa67ea8f1c618e1fe75737472310211ea5e5287d11504db7025 size 12338 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm12-rail-stack_protection/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm12-rail-stack_protection/multi-pan-library.a index 3f03a1b3ade..d590d12e664 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm12-rail-stack_protection/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm12-rail-stack_protection/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37d336b587b5e6fdf621faf0c28df67d3003f3aab5a791a87d550d2b54308b7e +oid sha256:ab9614ac3d7dcf8db1b8ab4ca16a1b020bd531997cd92e35f68b7686da807cc4 size 12640 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm12-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm12-rail/multi-pan-library.a index c789e503149..4c79f5f48af 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm12-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm12-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab4c0b2646fa0014187d7965eed6122f43774fc2dc1b616c8ca337b40aa15ab2 +oid sha256:52965a7d2e8d41f0165e10373517aa3a7a4e977af8b10b484b470c85273460e9 size 12300 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm13-rail-stack_protection/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm13-rail-stack_protection/multi-pan-library.a index 0b18b348034..19d7148d807 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm13-rail-stack_protection/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm13-rail-stack_protection/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e276f58dbf8769cace260492382d05d4ecbcd838ddc2f9d61d5b098b5ab4b97 +oid sha256:d539c2f9ec6bd3deb5fb09c263cbc6c18e37828c5b273dfa7e68827bc348ab0d size 12640 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm13-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm13-rail/multi-pan-library.a index c29916db1d1..dc343c6da90 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm13-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm13-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d01d463b946b2eed9c32bc09d8d692fd893a92bc4cc364e125b3d9168fcb945b +oid sha256:465c612fe3f82726cdf90a450a3382957a97fca2072dcc5fe76a656b7ab885eb size 12298 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm21-rail-stack_protection/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm21-rail-stack_protection/multi-pan-library.a index b4139962fc3..4986aa84122 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm21-rail-stack_protection/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm21-rail-stack_protection/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cde892ec1dfde2b24a3297b169fd6b2c56e35244b47b7f681342586a3f66f642 +oid sha256:62b0f4076213c0ae64adc4f26db0f353351fe06bedc47aaa3cfaead503bee46a size 12646 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm21-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm21-rail/multi-pan-library.a index eef29c64426..ef5208a9df3 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm21-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm21-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0cb56a8b4aa66aa9b92dee174f6baf6e9727e45e124ff025a68a541dbeb86e2 +oid sha256:459fe0f5774634cb542bc166a0c70709e86fa43c8d5a26de8b7a8e8b16bdcfea size 12306 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm22-rail-stack_protection/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm22-rail-stack_protection/multi-pan-library.a index 028e3e25a26..a5fd96807c7 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm22-rail-stack_protection/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm22-rail-stack_protection/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f8ac52009ba07ec11f32a80c110422977609402499547daab892e4b864a86e3 +oid sha256:30baf82c5a9237059c8c3bd71d93ba8b923314e3bac87dd4ff3112ece2359316 size 12646 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm22-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm22-rail/multi-pan-library.a index ab67490d05b..e6a31c6b73a 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm22-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm22-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:65d9bcea5aceab6756cebba30824da4d9bd8011cc1cd572364e2ba4c94b8a017 +oid sha256:cc4675b9919dd05df6b6f54d5b14b935f7d43f47fc25449fef05164e3cfad853 size 12306 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm24-rail-stack_protection/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm24-rail-stack_protection/multi-pan-library.a index 739ef0df95d..507b86ad718 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm24-rail-stack_protection/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm24-rail-stack_protection/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df2d715a6a077fb57f6e7fb4cc7a13c535e26b9d2c105b33f634a12a251f92d1 +oid sha256:675248ceae2265e18269c1a136b712b2cfe75fe6debfaaa915338608ea0479da size 12646 diff --git a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm24-rail/multi-pan-library.a b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm24-rail/multi-pan-library.a index cdf1ad09766..306ee2a690a 100644 --- a/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm24-rail/multi-pan-library.a +++ b/protocol/zigbee/build/multi-pan-library-cortexm3-iar-mgm24-rail/multi-pan-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14b09a981c60b91e50865e31ccbff9c2ccb2fb49f005cf9a3af9764390fc18e6 +oid sha256:5df80af7ad7320d91f0e89b0858e762f3e94ca0636efe61854ab5d9ae47b32fa size 12306 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-binding-library.a index 76fa85d618a..5cdcc5c8fc0 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74e1c109657626fbdc1c5df20de7951caf694acfe54fa1eb37d7b69bc423db1a +oid sha256:e718e15d8eef437ddf1005476a161ecf12727e55e8cc5c4edec7a02c1e9836b9 size 5828 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-rail/ncp-binding-library.a index 638d86968a8..892607db4f3 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d3b171ebdc7eb6c9bcb08ba8a553bb8708799aef34784bf1c2333ac0c37a92a +oid sha256:1206333a0075d513ed97e4f37ef0bcde914bab3c213a7a3ff0bbb8ac4bdea686 size 6008 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-binding-library.a index 2740e1770dd..5310cdd56e5 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64a8893117ebc7e0cc304719b8c619b6dd9345649e31809144d69c657131ecec +oid sha256:ddf968de13ca4bc1d7d551c518c1a4304067657bc12d7a5de63e1a72a5c60529 size 5828 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-railgb/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-railgb/ncp-binding-library.a index c6737425fde..6f08351a156 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-railgb/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg12p-railgb/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5ad8c2bc5f8290f4c066b586b04cd17c8e3f706050f7925512f7ad3cb7c66de5 +oid sha256:0ccb2debf81dd9251f784644e35e4caf02d778551049dc90632ca0458495b1bd size 6008 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-binding-library.a index 6a2c1773f19..1e9f579a44b 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:823483e26bd6cdea174074bf6bd33fd219e37ff46812508c7cc66906a3deb16e +oid sha256:697cac11b88ebbf125b1aadf10407633a624d01e9f081838c81c28bdd6608915 size 5828 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg13p-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg13p-rail/ncp-binding-library.a index 995b80c87a0..b397fd0c187 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg13p-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg13p-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:69666559c22e8eb119a05c398c3d5ae1e3d52f25b167841a38b781f6d8b38ef9 +oid sha256:8d642a6c92ce9c2cbe4dfe0917586c2e0760f9f97442ed851a7f51377922bb03 size 6008 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-binding-library.a index c38065777aa..a6457bebca6 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7845f157c4a0150b89c3a7c3193cd3b0ed5bc7b2a5d88014268e33abea798c99 +oid sha256:e387033232b74cb75106e0a5a3e960c44c90c21a6b0e09e017640ee203c25c12 size 5832 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg21-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg21-rail/ncp-binding-library.a index e0da5123b87..a16c12b180d 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg21-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg21-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd3542f09f981404d8cbd5577a4485ff50bc0afb0c0a35b234ea3a116de725df +oid sha256:e828b655585fcce9484aac5308e3beaf955245f49041a5e0334f94e27701f196 size 6012 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-binding-library.a index 74475fb6526..1a35b18aaec 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f826233ab7f3680b8304a3df9440432b5e62ebd51edb8711d46cead99296f74d +oid sha256:a036ccaad6ed5d3b61ef9ffc363367e4e84fca982500bfbce4907e2ffe9265bb size 5832 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg22-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg22-rail/ncp-binding-library.a index fc0e5ce58c3..3ce1d1813f6 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg22-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg22-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c6c73af256a709a5e88adb479ca7921cfecdea7b40e9b0dc3beaa882cec837f8 +oid sha256:b4f4137e69a3ed2386d44612e0fa51d423f6505eba10642f472b34926a782132 size 6012 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-binding-library.a index 74475fb6526..423faa7e896 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f826233ab7f3680b8304a3df9440432b5e62ebd51edb8711d46cead99296f74d +oid sha256:5c35d3b6baff5263c771ef51952d9aad74091edbb299e378372a6ed3e343e9cd size 5832 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-dualrail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-dualrail/ncp-binding-library.a index 1abdd55e664..a16c12b180d 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-dualrail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-dualrail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f05e0d48bc682af192cdf8eeedf5fa943a86d4dc08534e4582bea0dbc281a82 +oid sha256:e828b655585fcce9484aac5308e3beaf955245f49041a5e0334f94e27701f196 size 6012 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-binding-library.a index 6b188d6c30b..c7cfd5d9bd1 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00d5d73a4a92aeae576ac23675806819510184203cfa49bf3a6b65f6c5f456bc +oid sha256:90408e77ca51cafe669d3aac8a25e364244579651c1a0cb280ec56b1e90941ef size 5832 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-rail/ncp-binding-library.a index f76a1c98fa3..104471dd002 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg24-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cea9ca40da3ee07c0954f85889e60be6e155504d099402bad3128c6d2db16f14 +oid sha256:2924cfab3256f250faa99476212f6bd41f11a96ccf472fc25bf017c5ea014339 size 6012 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-binding-library.a index 74475fb6526..74b50c6d653 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f826233ab7f3680b8304a3df9440432b5e62ebd51edb8711d46cead99296f74d +oid sha256:13a14883f03e7b5e4d4c20397054fe887a42e4029c8046e38584fe2438d440e0 size 5832 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg27-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg27-rail/ncp-binding-library.a index 1abdd55e664..1ce0b12618d 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg27-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-efr32mg27-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f05e0d48bc682af192cdf8eeedf5fa943a86d4dc08534e4582bea0dbc281a82 +oid sha256:19b89158a2cf5a63558ac5d0e98fe7348ca49fbc99a4fd5318dcc3d06c9d7299 size 6012 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-binding-library.a index e74c25f64d6..654890e6ea9 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa66f752ff52d14f5d9db0e8efca4b36ae810662ec347d4b5f7522d265349a5e +oid sha256:1388fa1abdea8c7561e9010364eb33dd0074e2176110715af33c4393022d9473 size 5828 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm12-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm12-rail/ncp-binding-library.a index c616c86a337..aa3c79133be 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm12-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm12-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b066d243c0f9c58e9d1407b996bc5476673d4509169163dbaf62fd069131d52b +oid sha256:f0ceffda120372421d623a3e13668e8c920776c2d9912f132720bce167caa1ae size 6008 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-binding-library.a index cabb0b5ac67..01d2eafa062 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f9564a65df36b27c5ac27507d695c943b02393a824b7d100ea93534d1fb7574 +oid sha256:3d50432da29882c8c9fd433003be3cf9cee66628e9b2d3a52d93d79e2429e0ad size 5828 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm13-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm13-rail/ncp-binding-library.a index 163ceea8460..416bbdb3d26 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm13-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm13-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42b8a248b8fa99fb3cbcfe54617b4a8c80dd50362ab757f34a609ff368f41e08 +oid sha256:491a374d0ea8dd9ae665a18a36059513bdfe571536c1d0ad2a9deaaf5330be04 size 6008 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-binding-library.a index 74475fb6526..be23e2899f4 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f826233ab7f3680b8304a3df9440432b5e62ebd51edb8711d46cead99296f74d +oid sha256:db74453fe1dbc7fdfe5fd270567f1dc77c5b915fd7347f741ac7e1384e893053 size 5832 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm21-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm21-rail/ncp-binding-library.a index fca0d02e9fb..9252e0df0ab 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm21-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm21-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:687247ae545fcfaa751b25c9b09f9637cf245a9a1570a66b458089f1d677b6d8 +oid sha256:6d07f836802fb0cc958b8c834e73d005e37135b7b0e89e9af80dce33bc331eed size 6012 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-binding-library.a index 5f58123f512..3d762bbc5ec 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:25a3dca6b49e2bef14b556d1f1ab1377ec338c353f40913a3aad94a1d0b2db4b +oid sha256:764cc4915fdcea1115d48558c10e71c79daa9c53c1c1be0f7c912dcc82c6ce50 size 5832 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm22-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm22-rail/ncp-binding-library.a index 08d50188aee..eb8fe5acf50 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm22-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm22-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:041fcba41954f5c96231c54a1993beff7d6c8503ef84cb3e13c92a8c00fe005c +oid sha256:94cc49b34353c8a781492304b231c44e6262ec409583352453126255c292e4d1 size 6012 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-binding-library.a index 783e1326584..4bda0713979 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a9b32fc841ed7d26b733d4ebef9c7fab920dd65c4d0746bde155eea90c49b6b +oid sha256:7611b4383c19f5dbd9b9a332a3ef9e28b0c5faabfc004d8020637c210fbe3bea size 5832 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm24-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm24-rail/ncp-binding-library.a index 3fb368d9260..6741fd1e190 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm24-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-gcc-mgm24-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0be8c2277e23b37558a19245d2cd028db0380acc08b07d3b03bd189b3598855e +oid sha256:db3285b29753841d8b9adc0d772b82e0ec54e7f4477198f2d7b0f61f1d522511 size 6012 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index 25b969675ce..0a70f6b9a84 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20f257538fc12b8c9ecf3c8425ea2560335cf5e5d213b8c5fb32c13cd4f1060d +oid sha256:fb90f79dc6a4bb28395cdbfd6ca160b6d443b14211656701ef787b2c67b5c482 size 16044 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-binding-library.a index 52c94767183..e0958e77418 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e4517a8c69fae50eb020e8e77216e03d8e11aae84ad5a17b22293a8a58a596a +oid sha256:5add2aeb1c46a046eb31dd8b4f779f01e14490b4054757d6d5501303fe20a2ac size 15608 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-binding-library.a index 6a1cd0248e2..afaa402b8d0 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ef51b5c204c1d099f8d68b816b44c04f7e245ff8c08db6a0256bc556c5a4c7e +oid sha256:3c19292d16729d3ce6a5c3e75afaa4e352801cf5a4ed4e7eec92ceed22f378fb size 16158 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail/ncp-binding-library.a index 127b75895e0..44966e1d5cc 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a432e205c436a8cd9cc0e176901155f594fb656d44e9cda6f8fc9984392ef277 +oid sha256:312634f72f45ae1cef4f7eec4c3bb9310ed25d6b7662dd6068d8fafb0ca844c8 size 15724 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index 611cb11a437..4fcf029db31 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6ce02657ec9aad98e4c08e32e1a94adda991b7238a5730326a7e675fcbc95fb +oid sha256:eb65a80d51da7fc01c9322abbd6d06cb79b7a940e370daf85bd8f1900ba5a107 size 15652 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-binding-library.a index 7ec21b82c20..37993643e88 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9b2b19e5ac0ae36de3ae2c7bd55000440cc2be3359480da339528186f9c8db2e +oid sha256:35219e081384186685abb727bc20bcb7b3431409c8d00095193712393431768f size 15218 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-binding-library.a index 1e5a4da79ad..c30910c5c15 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:122c334fcc3cd0ff17c2bacc36820148e6f4e3966df50e68bfdeb4505ce752c2 +oid sha256:449fabaf5fd3119516ced8454bff0a38194573f8d22664c945ce2f5704663467 size 15768 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb/ncp-binding-library.a index d1148019ca7..26a21f77db0 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg12p-railgb/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a02eba2115897a93bac1e764475a21efb4a7829020d88907ad306fc9902c4d58 +oid sha256:230dbfad7ca44687c8704085b1e17f1ab5bd6fcc0a2b7b6389d7a6f6d1998d9e size 15332 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index ce9310db9d1..b24301b73e2 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cefeaf65a4f1bb80e60f2b600a035b356e4b9336e210bf8e15344dd2d899afbb +oid sha256:28230e607bcac7d2c60b996cfe9a95e58cd5e20ea29baca4b1e3bad96ed3f08f size 16042 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-binding-library.a index b334d94b0a2..fa12b952ab3 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1cec3791181189f3f5ada38f889f72efedad51653c2da4810d057d7bf23d4c09 +oid sha256:3bbf17887a66b7a16226f6bd101c47a6e88d868316d02d61ea05f2975b2d3426 size 15608 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-binding-library.a index 62d2a25e72b..1f874e9fc1e 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e047fae750ef7a3e304d0a9a77eb00fe762426cb219dde6cc189d3287678f58 +oid sha256:3f239e40c452ec2dd8e99398fdcbd9b8051997c0c8fa3ac5d042af5e748b6238 size 16158 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail/ncp-binding-library.a index d4194840ae9..c9ab1af7f42 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg13p-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:48ce045b64b70ec825087c66004a0afc20a64b4f8b73e0a4ea0b95797be962b5 +oid sha256:26539afd068960939a2d2bd2405f9d1db20bc16dfdb71b3aff1016537bb05360 size 15722 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index 88de2bcb9ad..92ca365e901 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a70b1dc100533c8d7dcfce3c9b8a609babc04670599258d5417a8083e0c1570b -size 15190 +oid sha256:45b009a827e380b1730419e5c170c0ca09ca5603e3d18c8404bdee98d038d6b6 +size 15184 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-binding-library.a index 99e918b18b3..f854a9d1831 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:56ef3b1ce61431cbbfad2b8aa1316664f8f3818bd32891e62d974c13bc52e43e -size 14754 +oid sha256:43e6ce3618f3ca2e05ef92312cc7065592d2fba1397fe322d78c5e529709043c +size 14750 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-binding-library.a index f439ae77022..ba3094f64b5 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:429fca43e67bb7612615e1dc28d7668a02ac70217db848fa3576f514baacd85f -size 15304 +oid sha256:db2089b3567abf72c73ed49e20b9122af47f425f899aa2197c601fb83d316d06 +size 15300 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail/ncp-binding-library.a index c72620ab397..ea7a658a5b9 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg21-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5ad60e7dd2c10608a5c947b12391115577fa69cb5fde8808e844a49c1d0a439 -size 14870 +oid sha256:4bde50cab5b58eaa15011f23201a2b97a0a9485135b4d0b0bb9f0c25d56ba63a +size 14864 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index 72901bda613..f8e41e746ad 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14af468ab1003e38365a729c8b77b8c2dc49a35ec3171ba324e723e4c1c649ff +oid sha256:675a3cb5ea6c7a0acf4a8780c4d5f9c39e0b663da44aae661a8aec8b3fcfa2fe size 15188 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-binding-library.a index 6d314047076..763c09580a5 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:937a9cc58994541a2d5741b9115a7a32df5648039f3b963e29f51c1d6c6d83ed +oid sha256:713079b3896915e75a261aef574b3c662b826091998d48a5cab1f8cebb5450e7 size 14754 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-binding-library.a index 3526d56445a..621de894afd 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81ec3920b1dae490e6296b7590687dba3f9c5a84e7e011f27f53cdfebd5820e7 +oid sha256:48cef9eb2bf9ce3653e590607ef338b86a1b09d7e5570f74b8edda8f9161af65 size 15304 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail/ncp-binding-library.a index e7b71ba43f2..68001a1e3c4 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg22-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f32d0b37f506022aade19d2de4a4c5fa5fd84a4c9ec18ca4fc77549e3f0975f +oid sha256:558556192b4fea049686c9cd7bf487d3525a544db733b69ed2b0b74ab4b3e4c3 size 14868 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index 332d8ed093c..0c530266c3e 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c33ffaffe49b273b635e0a605d50880a721b1762e6b533dc4d6895ab59f7695 +oid sha256:066f932ba3df540f29f86d3d8d50e865898c0c499e7d526f00a5da63176f3a8c size 14804 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-binding-library.a index 4e18bc55a66..d7c7f1cab7f 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aff434c022625b5b9b964ca1ff6be569d22e9b656b477240bbc1ed3ee7c665de +oid sha256:2760cf7a06c4c18ab929293ebb2a6dea053117b7670f7a08890b7b491b1e626a size 14368 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-binding-library.a index 35ac4f4bb81..9a2dedce144 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49ea82b38f9bac5b77718695b82dc1eb7e8705e057d9280d4e2d876a84c4aa4e +oid sha256:3d79d405c35ca952bfeb5226ab6088057310371c7c6353be3bd7d8752a9308c5 size 14918 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail/ncp-binding-library.a index a66a62b440f..dbee77304aa 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-dualrail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3637731e30a2f9a598ab8f2ed45b36876434f6dcdb02a7f9f0ac2eb1be0cf31f +oid sha256:8ae4d8182b02b8f019cf71779c7ff949c273d272464acf67802a8ed7a9f5ab54 size 14484 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index 6f10bf99b4a..75f04136f2f 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77bd8fb4982ef0579916a1672cea8ec8208456374d7593c8b7f2da119b0a6cae +oid sha256:131317267d219f8f7bdc7a3afc3ece0b1323ef5b2c2164b4efac7f5b2dbb1c2c size 15190 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-binding-library.a index 0e863aa7395..39385f3b449 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2a5810348de658d48ac007e5e388f6315f612d0af18380356113e1278cd349d +oid sha256:d4896ca72fd981ff20e8badbc979d46b2618c43ffd79790fd55c5db4d6e1db7d size 14754 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-binding-library.a index bf0f51984ac..745a6e9d595 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d87a644ff5cd215e1d7682d16d9b7d5f712a537e7245ae776cd8295d56dd6e98 +oid sha256:3ef77395644cda78dc98c520d2acd478eb0e0c648ab206e7695ee39b4bdf04ba size 15304 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail/ncp-binding-library.a index dc5c2c13d88..022edddaf7a 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg24-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61d84fda98097b9bab4f7412a6fc9d916494f4a181a206f3cf6c1d1d273cbb99 +oid sha256:48603b9ee9b950d1e17387a00f78551e4a06e49cf8afbb1009a0c177a3950840 size 14870 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index e758dba202d..b09c2279685 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:319c8767742bf8dd2aa6b38ac8351dc361592ce2f68d81528f7255d981ca6e75 +oid sha256:3492ac91f6f8e9955246fae1db2a6cdb30e4062e1b3ba4d43be2611695075c1c size 15188 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-binding-library.a index 21c7ea97038..c00c4b2eb6e 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:135948e57432b9d8004e170d63f5921e3ec5020067a7797f6809fb88a853a968 +oid sha256:74a87423d82dc08de70f80e6f455169b0fda553c59f8d7b85515eb23fb403edb size 14754 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-binding-library.a index a0446e8e3de..6f7eeaf104d 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:30711a8c51a8fba93d90d46f19f9ef4b674da84f79edf18cb823016e95232cf6 +oid sha256:ddbf75ad537e5d518da85dca6ecbb1c8cbd7458af17e4f9d709c6b43ab2010e1 size 15304 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail/ncp-binding-library.a index 014f3d30c77..ccfd0e85543 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-efr32mg27-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d1df33feac1d062e968a76fb656967dcf7cc3ae1d0352ec23a812c8b703a7a16 +oid sha256:39eb164cd1800ad449bbee17cc23d4ec7174132ea97e50727de4c64960544608 size 14868 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index 7b3315e7e29..b583bc846ec 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed6caba3df16fb9f2e1bdbe08f1bdfe9e6e0bb408c514bf4766364fcfdf4c18c +oid sha256:266ae3eae47ed2e2ad355447fb23df0f9e8f777384e9421d1cdd34436b835523 size 16006 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-binding-library.a index e49e99d43fb..502519d75b2 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0136938d75f2eb5103777199d4a57821ce6ffefcdd708417d89bda5e00efdadf +oid sha256:5a562a245bb4524c0b840fa1cf19df8f418b961ed9a4e0c2689dc19039e53194 size 15572 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-binding-library.a index 91f0d5f0c60..fccbbcddeca 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3522effe36acd934f1f736d249e688f53f38e1f52ecc5d75e7219fc64d82cac +oid sha256:78f5e82a0ff0327334f24f58a4c5498e06a0f2ecbd385ae8a137f16524d5d507 size 16122 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail/ncp-binding-library.a index 230997bdb9c..245714eee4d 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm12-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f3e2baa68aacb4c18ba4c892423f53081110c9cbab5b5b4da4d4cd18dccc80e0 +oid sha256:114e008d419ce3131b7324d4728fa13931a49b9b30b24e78c3c93de45b896e51 size 15686 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index 4df7571f18e..d6c9a652e3a 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0f30e660f49f2acd22203155db957ae31f515c4e35fcac70680c5a6db057d0e +oid sha256:9f0e16d00636c1de06dbbc52651b7d3053b864bbcd6c463be21975a17b97f184 size 16006 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-binding-library.a index cd63465c483..351c86f716b 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:96c48838271c585b541854ceef4538c752b394832225f35ffbc72dbec830348f +oid sha256:dc3d3eeb64ac83ce011f7e9a982ce64db92daf1b75aecb93a0962781d20d4f81 size 15570 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-binding-library.a index 301a4b1fb73..e7def2a8313 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6453aa5385bfcc1c69918cb914f672e3c388ece0e800c7fe0acec14dbd75e187 +oid sha256:911edf3383559b49b88e0568014176934b37b2d6aa5cc7fe8e4da7763d9cd7dc size 16120 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail/ncp-binding-library.a index 6224196fb71..e7ec32a6ed4 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm13-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:795afb13e1e2d6d11f070f684ee9932421edcb91298329bb243a11f2fa5659b6 +oid sha256:5aab98fe8494fe8708e1a44580028ecbe2b41aef4422f029fc5c5cc40ccf3f97 size 15686 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index 022dbc7b667..984b4fc35e7 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:927f4ef6bfb8247c605369a7c1bcf8c15ca19392b36a8349e4da9153d697d3a8 +oid sha256:c83bf64f7b6daa45cf4ec1c21c3ffc96baf7e03ace42919f36c9662de65738ae size 15156 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-binding-library.a index e6eb83faf45..75e5c13d925 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:771a61850e4ba4b115b149d193a3cc86d06eaa27a86d1cbed2f40b18fc940487 +oid sha256:0ed14c855ad792f41bc4674546979dfca9b4f2dea65d361d82df6c8658d55199 size 14722 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-binding-library.a index c85bed8aeba..2abd3498e13 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fa146385376abc0aba16b84de72bafaed4f31d01739c3a92ac762beeea6bf39 +oid sha256:611cdc66c8a15bbfa1c1aa9ee8cc126c8b1eb96b311e195dc12d75d88865f5b0 size 15272 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail/ncp-binding-library.a index 2107205f3e3..029092dee97 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm21-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f10c3a8fa93db873e0dbf822e9f982e49ba867610133ef1a7d5cd72194e05e41 +oid sha256:6a4c4311ac8546dab897c9d18dac784683579b56365a3822d8a14f925b9d47b6 size 14836 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index 1316cadcf9a..e929a615203 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:17c27a06bc71d456d62f560a84387b9105a5fda971c72c4187e2812393f36287 +oid sha256:b1c6d40a7a768e4f4f1a02ff677e4c974de63287f8cb667f8605eb81281d289f size 15156 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-binding-library.a index b70013969aa..4310800cd06 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c83750d98d7e3a0033ee001eacd04820274826deb33367a383fd3ef7bf9f608 +oid sha256:7dc370137cb3c1c9b241e9a2fdaa5cc9eac0b8e09fb97e395921b0df72336a36 size 14722 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-binding-library.a index 0cea775ae6a..3a2db23f92b 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f80f70bdc0d91c532dc6b0acec67df209868545e3ef7d09148b9c2e6f9d07253 +oid sha256:301a50901f97367710ea2f0dc72c99a2a14976caf11067b0b9e861fdea4f3d59 size 15272 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail/ncp-binding-library.a index ff263742c67..878469fa85a 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm22-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d8a9a00f99e00d5cc7f4a409c45eb47328fa9044fc7088f9ee0456dbcfda8b0f +oid sha256:2282e58329322009dbd4df340b2f50b6eacd4f3a30f0ad872b18578d58ee8c97 size 14836 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a index 095a6204bed..eb5fdb9eefd 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bddc502704b965946d5098c3b8c653dd140a987e32b0abde54914575a4fc104b +oid sha256:42b9307a284b218bbb4e21c3b7a3aa584bb20a3717eb38698df8ecbec2c90953 size 15156 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-binding-library.a index 9057ea85d94..d330c8fbd35 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:be5a04d97f8c9ebdc61ecdab3758317ccf143cbbb943e34f4aabc2d1ed3e6fe5 +oid sha256:bf43d4a5aab009e405328817f5ee80a648573f5d74a851c77aa88b2a5004dcd5 size 14722 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-binding-library.a index ed99741daf4..e2d33565407 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c18a3191a575cc2e11a0cb12ccc01faee5f51db812690224ad68d2e14f9bc32 +oid sha256:b3d12e4c5414e4836b4771cd2811ec4c676ac35ed8e8de1b44cff6e793dcb2e5 size 15272 diff --git a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail/ncp-binding-library.a b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail/ncp-binding-library.a index 8437ad7e7a3..eaa1456d986 100644 --- a/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail/ncp-binding-library.a +++ b/protocol/zigbee/build/ncp-binding-library-cortexm3-iar-mgm24-rail/ncp-binding-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b7d358a8c4385dbef453d668013fe7a0a88b66a39c573e559053b4e6eafbfcc +oid sha256:26359f9de0c0bfd41dbcd1a9eb3babae6929f515fc7ffbe15f95d5792fbdee7d size 14836 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg12p-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg12p-rail/ncp-cbke-library.a index ec18779bd51..2242114087e 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg12p-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg12p-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6e2c60b43e398ed90349de8c05f866863f65bebbe046cdebd8061a4a97b785a +oid sha256:9db3924490f23d06e6c19fec32a158cbf600aefe295fbbda066d0e5bf2b148e2 size 5834 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg12p-railgb/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg12p-railgb/ncp-cbke-library.a index 2e441ac3b6b..ac732f9f709 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg12p-railgb/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg12p-railgb/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f3cee748ec35bfee2515d010a54a6f9b3f0b969e3f62e01beb7f42e5f1c892a0 +oid sha256:d81e3c03067ad705f30dfa162ae539e353fbce6f3791c2ab24dbb27e304f8983 size 5834 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg13p-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg13p-rail/ncp-cbke-library.a index ee4236580a4..d47f3705384 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg13p-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg13p-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f6871fa46e0b5d1e749c2dbb8cee665db32ca5d9b22e5a100d3fcf7ced7e1de +oid sha256:cb79675f0b1dba285c633c222818300fd5dfe3879c8800597a71e85cb30dcf7f size 5834 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg21-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg21-rail/ncp-cbke-library.a index a8bf6f9de08..fd3bbbf5117 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg21-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg21-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e37e5eb701a46f05abf54fc71782dc9c95489b21d18f8ae1138613043a4bb9c +oid sha256:a05428e6a325c906c44e17016f4465cf053fba2f2ee29646bf12fa4f19b1485f size 5842 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg22-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg22-rail/ncp-cbke-library.a index 64f3d06697a..1fd3798840c 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg22-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg22-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b01407ff3f5dc539e54dff1c995f45f82d5dc2924b97e829400cad339c6ef19 +oid sha256:7b95f045dd9ef2c165ba0ad06bf378ea04a32d2c762dd4c6bcd1a5be0541a303 size 5842 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg24-dualrail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg24-dualrail/ncp-cbke-library.a index b9c5fda601b..fd3bbbf5117 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg24-dualrail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg24-dualrail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c703979d6b03f6f4db63793da75ddf54c4dff7132c23cba94a463c71432e05b +oid sha256:a05428e6a325c906c44e17016f4465cf053fba2f2ee29646bf12fa4f19b1485f size 5842 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg24-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg24-rail/ncp-cbke-library.a index a21ad3d2947..515a1c2afe9 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg24-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg24-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e707034778fcfaa5ef15014a9ae3debfc82f0980b26b1dd8312b801e05216188 +oid sha256:45d9f0a9fac7fc2254d5813364a5dfc6306e517f27f3d52acf4bfa65f134bfe3 size 5842 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg27-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg27-rail/ncp-cbke-library.a index b9c5fda601b..d344c98d1eb 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg27-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-efr32mg27-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c703979d6b03f6f4db63793da75ddf54c4dff7132c23cba94a463c71432e05b +oid sha256:3c3a701b13f9434d94ebe6881a7098a86510f2d2721f9241303d09b1cc25daea size 5842 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm12-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm12-rail/ncp-cbke-library.a index babb0e3d73d..6172fcaec6d 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm12-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm12-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95e06a8b192ea3dfd9351bf8c52b5bcf6ba75591412e78f8ac55a6c2704f5cde +oid sha256:c7dc64bd8c39aad8acd76a4481e4e4f86044aebb268c0e204ff3f63f6c0804a2 size 5834 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm13-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm13-rail/ncp-cbke-library.a index 8eeca8e7999..a929683ebd4 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm13-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm13-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a25f9377d64e0f66b8257c862f81837dc2c9d5dcc12733afe99cd5b22fa831f2 +oid sha256:79f471509931c8b0c1f60607613ece4554ab1c4fcae326c0a273064f7b68f15f size 5834 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm21-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm21-rail/ncp-cbke-library.a index aa46e043a63..fc7393f281a 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm21-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm21-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ea10d661cb45a6c2a1b86ad2cc2d3ecb62653889fbb117051806aaa197b2e65 +oid sha256:9114ab606d356cb7ddf4559594ca8cd53d59a782f73c8ee5845536e60af12fc1 size 5842 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm22-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm22-rail/ncp-cbke-library.a index 34a3d4f6d50..202b82f01f0 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm22-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm22-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df3233d942cdaba7fed17e6c6d7b47e4efa94da9c6ed3d482ea395d369151c54 +oid sha256:eafaa2c4bafab5a3ec25beef3fd555a9d209bad6c21b8d566d2f75f13330b82b size 5842 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm24-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm24-rail/ncp-cbke-library.a index 5286ce6008d..03638d03d0e 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm24-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-gcc-mgm24-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb3d83a99a73328eedac002e4e394eacfb053b3b6f22247672a66065c8d94a4f +oid sha256:572383dc15a3598113992ec67230ef69f9f9c962ef9c133d802b8185b6155718 size 5842 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-cbke-library.a index 843a4bb618d..2ac4119b73e 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b22527f98c907439f85930fae85ea019511229e5131b82f30f838d14a258072d +oid sha256:9fc315d7d56d69366637d659092498b906f3276065d8fa408ff311a5bdcaea5b size 18250 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-rail/ncp-cbke-library.a index 9f1108f7164..61f669a43c0 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f001d81d8ba22a910f4d220d4b18d1aaa4571de4254a6bd10b023de0d3d15a40 +oid sha256:efc74a7704a60a1a9ebb690db0c93b99df0c5274d405092751a3ecd5cd57cd94 size 16470 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-cbke-library.a index ce561c0b57a..3489d6a9020 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0005b1a3e6dfd3168bcfa3e0ad25a73252308126de5ff554b25d13e53d31b9e +oid sha256:2e1afd7254170d2b43af5d037f1ece4cecda984382345245ab14cd0c4c056308 size 17864 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-railgb/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-railgb/ncp-cbke-library.a index ee12c1e2cdf..d760e9fa4d1 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-railgb/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg12p-railgb/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fd8430a920c1c7b402719ce5b161527f70f3d97392c8856b8363d61f0334229 +oid sha256:ea6eaf087f25c8567fe57b13183c0cec0135bc9c6e996e45a985e3c4e7065b84 size 16084 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-cbke-library.a index a4af3d790b1..57dd9b1cff8 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:861f5eb7b261bab232cf3fe4f24e3fe4db72d99dedd0473252184178a02a59f1 +oid sha256:36d824c16c4ed44a7f1cc5e3ee791b39ef1a67fbed249139bbb38a3072668f37 size 18248 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg13p-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg13p-rail/ncp-cbke-library.a index 6872c8a85ba..073496c7176 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg13p-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg13p-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:50365d11b1c9417a52a9e1c40b1da5ab12dfc12d24b6b7218c46c32317cf8e4f +oid sha256:d0d0ac555cbde908f7ebe9d7f56d07857d682bb2c900f58fda34446d5d96ca09 size 16468 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-cbke-library.a index 1c98290b8ad..57b42a2f644 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c628ef93725f795c32990cfea0b322f7de7ace971734d6fbe1c061ff66f10e5c -size 18252 +oid sha256:ba900c4b5cabfe4c9953731eb90a58b8c1ed2b5b8bd7ea772206970347929cb5 +size 18246 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg21-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg21-rail/ncp-cbke-library.a index 612f4499b6b..fdcf25f2e72 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg21-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg21-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44775b05fea7c1c0ccfb501fe3485312aed89da39f9999cb02de8c1eb652be7a -size 16472 +oid sha256:ad7445ed5b9a5a75eed7c4e5b200febab29f634eb367d263d7e9605e8d52c02e +size 16466 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-cbke-library.a index 9f771391055..adc8ec0230b 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b282cb34689657f1de08924f1e9f31e6495d3a404c20961b22677a953d0d64c2 +oid sha256:aee4de4d1905cf684621585ba3d876cdd343a1dbd3d333de3674bd30af3ed2cd size 18250 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg22-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg22-rail/ncp-cbke-library.a index b3f89dbeff2..bda1e9e430d 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg22-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg22-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e64338816d098e58460571497c1f77f4d9bc0092ed24c0785678920c233c5dd6 +oid sha256:b2e1a9cab77db9277cf49b98621c68a19e21352b4d93d8571713c5477a4a6b9c size 16470 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-cbke-library.a index 77a9d08766f..519f8b08825 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04f5c657ea2b492c44ba04653397118b1b67e9124eeb2bb56459b240ca04e6c2 +oid sha256:57dcc0e6c146c3c2c59768d50cf39fc8999031d0a1acf4768b81cf7ebd581b3b size 17870 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-dualrail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-dualrail/ncp-cbke-library.a index 0055d5e631f..29900384798 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-dualrail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-dualrail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:437f1ebf6119ace31434c7a1902436d89e29d4db99bf3950cb7052c86c38fef7 +oid sha256:0cad361b3428f4878a866cfdfe7de73a7b8b1755b13abb31f6c72a058f9ad954 size 16090 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-cbke-library.a index afd9704a4ed..e07801c82be 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d165144de0182552195d88ad994f6aaa533990c64a30efc22aa7eb9b5b82ca4 +oid sha256:4900c7e0b6bc5477b99412286553960e4ababa9214732a59edf0ba41ad148605 size 18252 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-rail/ncp-cbke-library.a index 40f136dcfb3..8c93915e05b 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg24-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae92b51c5c598ae6e27ff84bdb707048a5d47049f7cb88fa43358dc46f099b1c +oid sha256:3b52de8b74d9bbdb2bf59213adddf518668f074d9dfa13a2670aa79501fb47c2 size 16472 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-cbke-library.a index f06a3c51bee..808521ce7ad 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a00011eb47d5866fad9d29bb3f8b329fbfaa3c179eb341553395b63bf2520cb +oid sha256:021a844f58791b3523e31696786b20867456e9003dca230e97cfe731b2087b9e size 18250 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg27-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg27-rail/ncp-cbke-library.a index f86d555f8c9..bc77b951ac3 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg27-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-efr32mg27-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff270ff1cf51bbaec4f01c2f4a968d7865457665ce6b6c9422e82e7be2d73279 +oid sha256:c8ea734d72f4b0be298215243ddff44b8547bb35b4c94e2ac4819a94b76e7dbf size 16470 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-cbke-library.a index 660068a4515..6df1e34412a 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff4bcf52ac4c194a89533db78d76adcd32104fa0dfc5b29e02efe16834e4e5e5 +oid sha256:7ed97cadad2f053b2376d9c3b2ee6e915dfa295e417a2ceb3ee9ba6e63584a1e size 18212 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm12-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm12-rail/ncp-cbke-library.a index 943ae8460cc..9276265d3dd 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm12-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm12-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f643e2b2507ffefda561b48441c5f9c11eff62b42d4d307e560482721f910ac +oid sha256:436d7e8a0ed53cba5195300e367002baa24d55c427e7c9cf74650c0760178a91 size 16432 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-cbke-library.a index 1d3d4e0409b..fea8af90408 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9601e10ff1e6f911cca0ef0a63da48a47134d9aa618be62060eb248a7d8f1e1 +oid sha256:edb184134a8917b1970afe98b3148269fcf7c4dc997b3d18bfcfd67355b87921 size 18212 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm13-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm13-rail/ncp-cbke-library.a index 135506ea4b3..22eb7401456 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm13-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm13-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9a6e1d0de034642d397f982ce4f267b34fee768e4b582d5974dcc66dd61c783 +oid sha256:926988666d2ad3b27622d38950e06599db24ebd45832ec0aa77492767b3c7558 size 16432 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-cbke-library.a index 6a9ab8447ba..84e3d656704 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59644c70aa7cb5e6182675a6712fa4f39f013031209ee884ca3c011664324865 +oid sha256:ca0ed06236457feb139c428f46cf3ad94d24d2ac80231d9c7fedb2aa3b210926 size 18218 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm21-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm21-rail/ncp-cbke-library.a index f71d01f7498..ea428743877 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm21-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm21-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83eaeda73b605b9f3325ef9c80a40a8cccf25d4b7d6b990ac54538f9238d3c2f +oid sha256:2a874d8a8b17c86d0614659f89c66e884628a337640b9f7b5021607badb0daaa size 16438 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-cbke-library.a index dec567c77ce..83c1f280c49 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f651a2b096cfd38ffc3a37160d7af37f1726e3d382598689a9759d73e5d3022 +oid sha256:1a74db7c841d6fcc14dea9705efbba11fe2de5af4efa48f8fe17b0a5b4bc3d40 size 18218 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm22-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm22-rail/ncp-cbke-library.a index bd9521c45aa..67fff1f773f 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm22-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm22-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b885c7e14be3e0726d1ff8d7f882200cc1750261599bd7f5ee68f44d58c14ed7 +oid sha256:9eda50bea61ac3af3c7413b83ce06924562cc4d3c9dbad9ceb42adbcc338d5bf size 16438 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-cbke-library.a index fb5d37f4ea2..8fdb27f9c2e 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5be46bab4cbb48d7720e6f75ebcd268b8ad835387fbbdf0c015160c865206aaf +oid sha256:7a16479e4b9ea75eeb04ec21540d438cf9a219c2ee4df7fea928fc962e4325bf size 18218 diff --git a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm24-rail/ncp-cbke-library.a b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm24-rail/ncp-cbke-library.a index a7e3788a008..b687291d4aa 100644 --- a/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm24-rail/ncp-cbke-library.a +++ b/protocol/zigbee/build/ncp-cbke-library-cortexm3-iar-mgm24-rail/ncp-cbke-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d885131a39b65283f94d4dbc5b0a8389c6dbc6c15d9ff8dc097c49cfc8528961 +oid sha256:e43a5dff2321c4aa7aab2536e525418de0afd4a8e581ad30f8f3a71134dc27c5 size 16438 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg12p-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg12p-rail/ncp-gp-library.a index 5fb09e588f9..5e5706ef6a4 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg12p-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg12p-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c8a627e76d75c46561de5899808b3860e42b923e632763db7fab5770d83347a +oid sha256:18e76b9af27c6bdc177a0f36d30414aa23bf11af25d68c4d73aa26b0633f7b44 size 2036 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg12p-railgb/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg12p-railgb/ncp-gp-library.a index 459f5ae8355..17f8370c441 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg12p-railgb/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg12p-railgb/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b65efef41e86b808cd557eafe5226f4763fbd312525eddbe5e45f7077503fe74 +oid sha256:d69da091d609caa06f89d46922ac27ca9aa9ec0cc833cb6df984fdd0eb9755b8 size 2036 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg13p-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg13p-rail/ncp-gp-library.a index a4f390dc8c9..20b87ed16f4 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg13p-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg13p-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff4a2d5017ed4d8e660ff7e3474f5870cbcba11453acb094bbd971aea581d528 +oid sha256:b0c04631924218d1a361d10f3380e5fae9b916ef93678b4c4c6dd11fdf282ee4 size 2036 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg21-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg21-rail/ncp-gp-library.a index 5a9391a1c56..60ad445eea4 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg21-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg21-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5f4c593aa80a17262db1106d0fdd1b7cb3ef61d58adc2a6d0369f2a256e82e1 +oid sha256:2857885e6d0d4991d4c3592cdb0e83ae3e383653ac952bd40d4f17e89d7b1536 size 2040 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg22-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg22-rail/ncp-gp-library.a index 6b7ec03aea4..697dcfebe94 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg22-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg22-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12b62cbbb2dd03fdd16096629ca9b202a850d3eccd864333e1db71b251a46f4d +oid sha256:469dc7996d123e6caca0526ce5b1ba6aa6dbab26c0e4317b9f2cdbdcdc42f9c9 size 2040 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg24-dualrail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg24-dualrail/ncp-gp-library.a index f03a078b1fd..f31299a9d23 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg24-dualrail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg24-dualrail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3776c66465c51de4f3b1819cb1571a66f30d253a5c79a1c28869e3ea1f925ea1 +oid sha256:76f2435e8bb32fb2ae8921a051515f66229790d1002e30ae61957fddfd661391 size 2040 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg24-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg24-rail/ncp-gp-library.a index 006f24028f4..6835f026301 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg24-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg24-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0137599f69cd447c407f720bb72a25da9905aebcdae08ed16fff5e069c7e4c59 +oid sha256:7db6b7771842b42c13cda29bb0dee7ec132ca299407d8546589fd878452a1b6b size 2040 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg27-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg27-rail/ncp-gp-library.a index 6b7ec03aea4..cffabf03491 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg27-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-efr32mg27-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12b62cbbb2dd03fdd16096629ca9b202a850d3eccd864333e1db71b251a46f4d +oid sha256:d5460572417099587da22a2929a9ca3c8904859a38c37faad95f91c2b581d205 size 2040 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm12-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm12-rail/ncp-gp-library.a index 3bbbb823c79..6a8517569e7 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm12-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm12-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d268a7bce3eb23730b486012f19ba42c7cf06b46b19902bd2bba2a60a5c91638 +oid sha256:ca5a047164228128d6181a017d6409417665132d38d786df6b5e1b03d897ea32 size 2036 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm13-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm13-rail/ncp-gp-library.a index 3bbbb823c79..abdd4823271 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm13-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm13-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d268a7bce3eb23730b486012f19ba42c7cf06b46b19902bd2bba2a60a5c91638 +oid sha256:649f49fb9380b6e640ad0540322a4f29e6fe21f9486cec48c185eab7a6343c93 size 2036 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm21-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm21-rail/ncp-gp-library.a index 5a9391a1c56..dcc8467a109 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm21-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm21-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5f4c593aa80a17262db1106d0fdd1b7cb3ef61d58adc2a6d0369f2a256e82e1 +oid sha256:b306dfff691e8536d372b9905fccc4c5ed3ff190b855d8e4ea93dbcbeef1aed9 size 2040 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm22-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm22-rail/ncp-gp-library.a index 0576b3b8c0a..145ec55bbfa 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm22-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm22-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:010c9b1dfa454bf1d275d3216ae105066893eae1ea0824a713d0c908292a9454 +oid sha256:8171025bf03f1096fa8c87a8a89f620c969b43c2d538457769de48b6904207aa size 2040 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm24-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm24-rail/ncp-gp-library.a index 9618bcf1bd4..1adb2e2c7bd 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm24-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-gcc-mgm24-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0dccf66f3135fd3adeca672a49b1512faa4b2ee28d56b96ebd02beb63d2aa782 +oid sha256:4880122fe3938b9f98d4f079efde6900f1d6aa68adbc749e55aee99303d1538e size 2040 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-gp-library.a index a3f48ec9227..9c7efeda32d 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a709d0be0704dd33c8c9b847dc2c6db8c6d62576250b712121fba2fa13ac5ffc +oid sha256:e1896f291124a727b3349a1fcf7dfdf4a5df566f02f4c7d769aee87f310dd1ad size 8142 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-rail/ncp-gp-library.a index 29e38d0448a..eda074ca780 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7162239be1319664a0290ed82ea9ec86975c313043db0fea866e61cd6c7e690f +oid sha256:30a73083bb442fbff87b0dd408298436e51ab136b85711ee60f1b51083587f36 size 7720 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-gp-library.a index 226232f1c33..68b472b099e 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4d67a7bf69fb1cd935eeebabe9f7c739ea458749aa37f06ed67cfa50264ca90 +oid sha256:7e9a8ce3908878377d4efc64fdeaa4c302a2b0d7cc986bf00e254df009a3c38d size 7752 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-railgb/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-railgb/ncp-gp-library.a index 05b9fed0e5e..29e5d51494e 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-railgb/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg12p-railgb/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f402af3110ca9f864717877f5477a37bd9e10765e0894143e299acb4167fb40 +oid sha256:da17011bb4887b83ceb9f8d75082fa9bc6b917d5dc729b00bf2b535facc5bb62 size 7330 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-gp-library.a index 4a60df47eb7..a5d64f11dc1 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f15f46cfb04d846bf8911c803dc6391671ace720e4bd7c544de3fd001dc75b8 +oid sha256:5266541b54e7b45838fcc7728ce65dd864ea9396d0c11401ba83e37e7e68f6f0 size 8140 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg13p-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg13p-rail/ncp-gp-library.a index f915c7d0bd0..fabb9a2ce01 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg13p-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg13p-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c95faa7c479d67f3c0cedbc66f9d3b2b1f6e0bb2c992ecb19fff52a7a5c9f8e5 +oid sha256:2ea6563ada1516a75ce246986da5b9532779a4bc2ea4c1a4a7350b0c775ef1a1 size 7718 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-gp-library.a index f428c5d1d57..5cf738c6843 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cec0076cc4bb7356ca1c2aff9f032a34bba38f844fdc3ff3aa2802713256048b -size 8142 +oid sha256:7618576f09ef5f0623434033763f41ea7adfa3e252f78db85a3b437bb0e076e0 +size 8138 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg21-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg21-rail/ncp-gp-library.a index abfd6fe8197..0adbbd8ca89 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg21-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg21-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:085237bd09020a1663ca59673e81a1cea9c64d357f3fddbb7be07bcd732bb163 -size 7722 +oid sha256:71960387324e5932dd8646c3cb4436170985185979a44e5afdfe8329c663ca48 +size 7716 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-gp-library.a index 74d6a7c9962..75b1b203381 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d89ad1acb275c3029eb25e888b937c2fef8570ad74a1acc17ccf5fec9f5fc5b2 +oid sha256:4b3c0c35833cf0e97d01174fdbd1e24d7cb8fe6cf0c07eea6c1a3738e48d469d size 8142 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg22-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg22-rail/ncp-gp-library.a index ddff8ce0b7b..ebe5f44ab1e 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg22-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg22-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0b4f3ffa91027feede2b27972c8e2f8c7d8936cfba16c39b0c847dc0dad918c8 +oid sha256:0dcab6d5153f95d6dc25a889e57d94edc6fc67b64e2a94d8703cb4c2be23f876 size 7720 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-gp-library.a index bde55e8491c..bba66ee6c8c 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a201318b600817c2ded37e6e119accf205f26bf5febfbae77ac59e12fb7166f7 +oid sha256:694fd8b38c5d9f1c713815142e2502f7e3e3b1d1907252867d28e7365b84bb95 size 7758 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-dualrail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-dualrail/ncp-gp-library.a index 93bb81daf7c..f0973398b3c 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-dualrail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-dualrail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70e8e5d9a99beffd7a2205ec4c845d8c7ba240ee56afce7bfb4e73345f8f1a02 +oid sha256:4e735bbee138369a30c27cc74330d41c46e20989abd0df1a4b8a714f6ae6b06d size 7338 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-gp-library.a index cc8e18c586f..1ec56c15e4c 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c35850bcfa7706ce4b2e17e35824d2d2be4b980377ea2c3efc4ea73c253057ee +oid sha256:54b784f9c2fad2f77ef3e77d6008a60132e4171c2f42937ffcc75b167c2779bf size 8142 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-rail/ncp-gp-library.a index 168bdbba203..b0dd601ef69 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg24-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37847e48e264c524c6c0c4922d82fbf84e8a02681bb046f67febd81e145d5253 +oid sha256:b2c7cb184c82f45d33b95a5f00600dfb6e43232210291498fc49d2de8dccb391 size 7722 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-gp-library.a index 2dd81c9bed4..259c9039f22 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f54698dc8e920baa581a6f5f122bd9efa8b6cb94ae2423db8fd5f1afc208b4ef +oid sha256:918244e376c0e92f06137f4f548fbfab07187c4386f555afff12f8058c3dc2de size 8142 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg27-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg27-rail/ncp-gp-library.a index b69bf28271a..80f7a12f830 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg27-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-efr32mg27-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c31b2839f0d4d4e77e0629d3cfe5ab40cbfaa23a19763d0920071a072f20c41 +oid sha256:165745aac1238dac2be8b54e9f4f20e587c06914ba895fd86598fd0f545e4094 size 7720 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-gp-library.a index 4c02ee5c027..c73292c380b 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e27a1bc953c1fd84c29f39803beb1a202cbf7fdd6fdd4b8feb51e17f225a41b +oid sha256:9333d6eaf3cff94179ae60636d7d6df4adc325d2b069fbc41f6856d82f7de6bc size 8104 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm12-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm12-rail/ncp-gp-library.a index 6d90a62c67a..112e56a19d2 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm12-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm12-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:016d8d7eea9b0e724a14cd5ad007755004b694180e89b6f09654bc69c56232f3 +oid sha256:bed728e4339c1770df2ce62ff7b013be3be3280fd88e25ab7699fd535e6de68e size 7682 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-gp-library.a index 4489fb0b0fb..b9d426ea67c 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1da86b22df0e69c55486715f24ac852b04ce38b9f4507339d214d13c5a0cb8c +oid sha256:981495039d619f5d281b3807d97f42ed6dba942acf5fcb643690ff32a741bb1f size 8102 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm13-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm13-rail/ncp-gp-library.a index 7bf254a933b..692672d828d 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm13-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm13-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a5d99b84fe0f6d58a2c6530bfba4f51bdf23c175e3b9e562d49a970d7c840df7 +oid sha256:281da34ad12bf054d4a7f8593d45043c4404e81a25f2725d4cae57d49b1af374 size 7682 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-gp-library.a index aba0a27757f..b08b3bdaca3 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b2beb5ff49bc4ecadc0635dfc4338878fa8838540c9fa5813833d13bad0f0c20 +oid sha256:0f9da89fb90cefaf66810341eeac2d7643ff5f0cfc63ae9997d7a9fc34c7bfb8 size 8110 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm21-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm21-rail/ncp-gp-library.a index a53c71ed1cc..d945257d47a 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm21-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm21-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:79239d3aeb705479c3419f87dc9e8decedcd26ce16d3287ddbc23467549f8ef5 +oid sha256:1efb4125330ced4498a6df56a912a2a48b0cb0760c4fed431e22e3711b08e765 size 7688 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-gp-library.a index a2f8860ac9a..00c1bcab59d 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b4bb48760df501a8357c26d96fe4722b38ac17b4869f87e3f347c383e44a093 +oid sha256:837d5a8cf34b6eabe75f75ab8353021efab2cbd76dc3ceb5775136b0ddeb43ea size 8110 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm22-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm22-rail/ncp-gp-library.a index bcef330f254..ef62b7ba589 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm22-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm22-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00eb525daeeec1a4b86f3ae9ba76039e97ed8b1183255a9109aabaa57b1d2dd3 +oid sha256:2abbbf4482be3782d456322d91a3e53fa9bcc88fe51dc3584410df50b69bbd0b size 7688 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-gp-library.a index 70e6d35352d..3b0fc8670e5 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f28e2d496b9a79e99519edc08d56e523b267d99ff27c78b0010d291c85bfba9 +oid sha256:8cc32bb34afb9efcce75ea0987b18bccb2189be97b633951690269ba9c989467 size 8110 diff --git a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm24-rail/ncp-gp-library.a b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm24-rail/ncp-gp-library.a index e3d7e20f5ce..f21435a5a76 100644 --- a/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm24-rail/ncp-gp-library.a +++ b/protocol/zigbee/build/ncp-gp-library-cortexm3-iar-mgm24-rail/ncp-gp-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2350b6e0b7dee7d954dda09d098601a937bb970c43812ceaf68601465d7407ac +oid sha256:e0ca9a82af821321e6ca251abb979745f78e2bc72c28055e997bf158305c60e1 size 7688 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 4d3fed04749..541d7e52109 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ffd41be51f9b1fc15255fa4fdf736c8943411e68edeb673734d2968711bf9b21 +oid sha256:0790bee2ec210352a2de50ce3dd743db373dc7b5fc86ebaa1d0da3a403ed13a9 size 2872 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-rail/ncp-mfglib-library.a index 8e3d1dfb1a1..c29cd268fa0 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84d438a4dab564fa50097610213bb7e3739ecaefc514cca7e0153073fbaf914e +oid sha256:299bca439a9353c75f8a0e8590635dbce7cd57c7e6a232f591c00a7bc53bfd0c size 2872 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-mfglib-library.a index 9d5382ac051..dc08743e4b9 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a106bc09be95f93049f12bc0b39320b186877e71bb1a1a40a4bedeef0138517 +oid sha256:cf4e37c4f3e27d90e175370091c00b501161c2bdf4c9f0b37ae62ab3c9dc4c1d size 2872 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-railgb/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-railgb/ncp-mfglib-library.a index c2c8f5e3544..c4b162d7be2 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-railgb/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg12p-railgb/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37f714b2930a4951a05fd9a5ff4040f760a5d7cc69cc8921b40df77b0381f76e +oid sha256:c8ca7b34a230c63271d5454f206f96a786a5afe000395c5a56767c3d3fa25049 size 2872 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 42573269e50..4bf7954310c 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:142bcd0cf6ada49707cf9cf4483cea91a1679510e4e6a8f7dcb5c30e3d9d8a59 +oid sha256:e7b0003532afcac7eece62c1d02ea553d270f1d9da6c850a09687c488ea7f368 size 2872 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg13p-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg13p-rail/ncp-mfglib-library.a index 0f2fbbe3173..992d0f1adf1 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg13p-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg13p-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:053316dca35714785c736b6e718bb7c164adbe467cd54c83cadf9a7666754072 +oid sha256:2ab738ff7d68b4c2f0ea61b71380db27cafc3ac32db946886cec92b2884a7c9a size 2872 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 388576598ab..793eef2f94f 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:feb6bb9e5e750407068c2a65cdf4891fbae7afb215b53e06dfe8b176cc6b3f46 +oid sha256:bfdd9b72f04d58ee8b86ab6aeeee884bcd406cf43b05c606e647a58d3bf2e257 size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg21-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg21-rail/ncp-mfglib-library.a index cc848c2789e..5aca56b045d 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg21-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg21-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:139b294513cf8fe7c15bdbcceaeb6bd3a71752e4c3fbeeed79950eb2988d0108 +oid sha256:d7910122a08b2eef616ae9510b72d2cbd655d18c0d4eacfc7044643fa51451c3 size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 7f4c5df9e3f..adefa232c79 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dac6e76a14b7b06fb31c3ea11273e7529a27e7dabbbbd3af310a0a396fb5a034 +oid sha256:4cf366cfd018dcc2bb1eebdde3c720457ece1a4e87861d6894eaae33f87b32ad size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg22-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg22-rail/ncp-mfglib-library.a index 5fdcf35f919..3542d7a55be 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg22-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg22-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d594acfb6da4bb5be424465d58089ae20d35430ed3f4bccde0f16b823a871f6 +oid sha256:245f645da786e51728fd39d98b59652e547fa42d78337158eeab6efd1fc4a325 size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-mfglib-library.a index 5fdcf35f919..793eef2f94f 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d594acfb6da4bb5be424465d58089ae20d35430ed3f4bccde0f16b823a871f6 +oid sha256:bfdd9b72f04d58ee8b86ab6aeeee884bcd406cf43b05c606e647a58d3bf2e257 size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-dualrail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-dualrail/ncp-mfglib-library.a index 80c7bf4d742..5aca56b045d 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-dualrail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-dualrail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16b0c4bf7181d573e68fba60510f72c91a88c93515d2c431cff1e0e01f7652dc +oid sha256:d7910122a08b2eef616ae9510b72d2cbd655d18c0d4eacfc7044643fa51451c3 size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 964da990965..2d284824a78 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb7a53e8e121978eed5df8a425a134e3d04275c4a6296f0574ad2d190f40d249 +oid sha256:be70695321e80277a56fc5ffab39accd1395a6cf03e5c82dd8c0b9dc71081cc6 size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-rail/ncp-mfglib-library.a index e5740c7088d..999858c0555 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg24-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59ccd407cd1237367486ca2d2710a949693650cb4882bee6c7c931070b467e0b +oid sha256:9c6c45687049a1d9c0b4b56fbb7779f3977bf0a83537251fc5ac7eb82e12f4ae size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 1b5bad4112f..223a78bd4fd 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3c3f9a86f45bc5ac07cc03deeaef9883461458b4af1293c7737156574c9515c +oid sha256:1e2172f29688f394cef0f6509f5943a210c34ffa8d3b2811d77f15a8e74ddd0a size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg27-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg27-rail/ncp-mfglib-library.a index 7f4c5df9e3f..b05700f9011 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg27-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-efr32mg27-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dac6e76a14b7b06fb31c3ea11273e7529a27e7dabbbbd3af310a0a396fb5a034 +oid sha256:f1f3c26e4eff33daf2dc4beb5da214e89acfabc92981faff22ea9525b42bb492 size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-mfglib-library.a index b6c94325777..aa3fea2dc36 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ae44560aad5a4c9993844bc60dc8aca045e4c77bff4ad6f102b9f3abfd445a5 +oid sha256:c4be69f4be1197dc1195265cffbf65827b06bc3f980077d3afb23119697e9933 size 2872 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm12-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm12-rail/ncp-mfglib-library.a index 42573269e50..1ef6b8fac23 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm12-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm12-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:142bcd0cf6ada49707cf9cf4483cea91a1679510e4e6a8f7dcb5c30e3d9d8a59 +oid sha256:51877b8a69b6fcd896515f86d2dc1e08a092d5e1a22f8ef09435d1a3459d7917 size 2872 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 5ef859be46e..2c0065e04bb 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5a6b8b1bade7b17e7c3ddf35a71c0a7f344a1a9c80b8dce601b663fe5cea7e11 +oid sha256:e2d656ffb31f8b8f0bd64335881172aebb49194e48762436362a9bf7c66a401a size 2872 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm13-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm13-rail/ncp-mfglib-library.a index 9a64f2c5637..f460ab76919 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm13-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm13-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a00b2860334ea0eb01df038cfa6b97c232b8db29cdbcab192175115415320c91 +oid sha256:f062577de5359ce8dd1c4d3bbd28e46cd9b7a171030b0a0745dc4f4fcbaf05f8 size 2872 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-mfglib-library.a index b1e4454cf4e..a6f4e7598fe 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2d47448db375e6ab34f7bd40b8e22fa471a5c9b3036b21ab15d229c72dfa4b4 +oid sha256:904150814d1d4829de30eb47f636b3d7c56782f029dd80adb619dd15f32caf6d size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm21-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm21-rail/ncp-mfglib-library.a index 33f9eb70e8f..6434296c410 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm21-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm21-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb82670489e8f9886f5cc59c137fb899aef805d2f42cd45fd03a4b45d96ebbb0 +oid sha256:70ef039dee90281cf8a128c3fb5fe4140c4a110c455b2f513521cfa125b4a597 size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 593f22d2c76..8fb41610a0e 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0d77b090d5b20a16cb948e38547dd53b2bf39c5af2b0004a73f0517ca8b2782 +oid sha256:a7562da5eb0a234bdf8a7cf75d73b2a4388230fd9f1cca5240d51b05ef91f1c0 size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm22-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm22-rail/ncp-mfglib-library.a index b7437abf1a7..c991c9dfb91 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm22-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm22-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1df574858f2c675097f624cf7790632095e09ca17de45ad80bdc707ea544412 +oid sha256:e1d7c03436b55eaf0116fe5ecba7ed3ad76cd07f46c27d188489b1bc54293d6f size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-mfglib-library.a index bfe91a00ad8..81d9ef9c016 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3828e983d6aba254a479c6c8a15cbc4df49eac0a2f882769f40c106c8fd17cd1 +oid sha256:63a52d73224c7621784692c484506773a9642210b78b616103b63d9bc268e05b size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm24-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm24-rail/ncp-mfglib-library.a index 09fec866acd..9ab4696bde8 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm24-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-gcc-mgm24-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c097505ecd46bce776d433c1c1b1db498d0985d5045d1ff44d99638bdfbdf32 +oid sha256:688ad926bfc111c5ba5bdd17d9b2d09617a8beb59a5420266417f273ed5b56c7 size 2876 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index 999211bbacf..8f9b4d5c05d 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:984451c6427b777178645ee604a5226d9942b364e62b489c2071e68e1846d323 +oid sha256:59511e854c3b6bcc42f2abcfa3ece87b5055032614e1f7f46144c1e50736c9ba size 7864 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-mfglib-library.a index ce39897e19c..c2faf1981eb 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45ab8e81411325857b93100746815f0715e19e842876b536798609dc537da424 +oid sha256:b04dbd6f51e95e1245a9660bbcf125c7602925c757993b7b3db1535830a67c1e size 7410 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-mfglib-library.a index 88b7841dec6..db457e8099e 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03f9418bfbf86b4b8a8ab7560211843dfd5fab07fec05ee20687a1ab5aa9763e -size 7746 +oid sha256:b4f942bed56ebe0160afced33d58a4f08c7b2361bf3fc4ad1b75271038bbb809 +size 7748 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail/ncp-mfglib-library.a index 70ec573fbbf..755b64b6373 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:647db7a5e431d59b05e69ce14230ed77316e272061e05ca98c1510159f70d53c +oid sha256:fb5ad34a9ce859e034eac2aec6e0c5254fe34b01ac7d734cce8ec06935f7a533 size 7292 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index ba06f78e665..dc39a037ca3 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de83cfcc2674516e3806e4e7285de97dc2ff1270d98cee0c97953f25734a760b +oid sha256:e7421c38a3b1746adc51d786b4c92dae67b64cac4a49f50f78a0ff3650b372a2 size 7476 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-mfglib-library.a index aa219261d82..7c268d5afd4 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:444aaabe72cc35075f19fab840374a20331c6a473b9cef2c1cdff022c25fbd45 +oid sha256:c3230efa57fc6c00a933f9aa88595b16b08ca6f4f671e87c872543e22520ef85 size 7020 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-mfglib-library.a index a4058b692dc..6480faa52d8 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8698fc8b3cdc1d3a305429c3fe0abd76c70c1e955957d645bab3adc1c3b37ca2 +oid sha256:1e4c156ac4d7c17593b4567b2da7f3e73dd047a304f30bb2fcdf01d723b4bff6 size 7358 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb/ncp-mfglib-library.a index 959fbf1c24a..0ca2949f392 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg12p-railgb/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1900328926aef44c21d8053c9556bbe9c683c82662e865d0fd60d56d80fd9b1a +oid sha256:7595a580aaa6e1ef446a11eedb1db66ba8a532a8757529323213a5bbb0e1d54e size 6902 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index 907d5729a9f..a47fdd1c6cf 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97eee268c853e5d8ea5e95a88595e66e5af8578a8612c1bff2ab24e469ce320a +oid sha256:2906e94ca67eaba4351fc77e998b938b246d0d9a45fbc19036225827c44a5797 size 7864 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 4cb4dd8b770..da6aee363c5 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e94a36a744c867305b1258c2b64e8c62a296c2a0adf7b826a2a70dcbf9729e21 +oid sha256:64cc17489253fd1225efc2b299b70a927e19cbfa4a54f1b9b0768b105df1b3ee size 7408 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-mfglib-library.a index 6ae5b532aeb..09a1b3bb822 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14733eb7f48a5605ebb3e8ceba48570821056ec43962bf5e69a92049fcf738af +oid sha256:b4792b2cb00560231b84074070f898be717a810934edbaa152a4061d422e8f04 size 7746 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail/ncp-mfglib-library.a index a074329cfb9..07930eda419 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg13p-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c891844ba92292f1ea1fdba69d350eda6c77707eab732e5ae2248cdb95e7061 +oid sha256:2572b8b7fd9311a2261a26b3cc538d40a22333aaf7cd8c15288ad7acc96f8d9b size 7290 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index ad07235a5d7..32aff3f8a8f 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:caaf2ef015739967eb999c8218055af7ba4e50717afe94a4d3c136881851afea -size 7866 +oid sha256:a453d15cf0b8b9b8e247e3c9254272c2c096ed6b88c142fe3463fe9c296931b5 +size 7862 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 0565ed75382..4595cce9ec6 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0469d398cae01b145ecc963638345d793390cfea320fbf54eccbba2c1e74168d -size 7412 +oid sha256:2dfbac46d735d4898c62152249bd1ec00e66b9a10980a717223a83325927809f +size 7406 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-mfglib-library.a index 78a97575c53..3d9d7477154 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:954b8bb1cca48e223052eb57646cec461916818f7bb8626697408f9d7b0fb4f5 -size 7748 +oid sha256:35431fe0d1df7ecb18965fb92f4a6853e729bc9a0a9d1104b2666bd3dd8007b4 +size 7744 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail/ncp-mfglib-library.a index 71444861b78..8d869c47f5f 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg21-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b07380426a1da042952452ca77b3fe95af28944d33d331f98fd9f8eebe1d1b17 -size 7294 +oid sha256:755bafa6c6f3e46c0c1aae4d73305a0c7e19d764d5957f4a8de7303b01225940 +size 7288 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index 0d16f70ab5f..2195b14da8e 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95f9e3ea9d17ec56097cb09d58d8f1d6cd783b50bf22e149aa9347b9cc47125a +oid sha256:fe678663a2b2dd8b4638209bcd9fdd3f0b447fb26a1c5b9771c5442945bf57a0 size 7866 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 3d2138cab05..f7aa2531bfd 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f3c2b1470792c4a55abf91ee2947cbd2adb1a36f588ac49a703b9f7e4700cbb +oid sha256:d1c79d2628831131d77bcf050ead5f858f40bb8d924903ccd57c43e20f727548 size 7410 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-mfglib-library.a index 7d9aecd04d9..e34b2c1a32e 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:184cb662c7b2bdff1f6eea51b45e7209d6a5198a469e9a593b7271981522b0ba +oid sha256:e88983cd15ed7747d091d6e9d5662eb4e4dccab5e9db2d823d0ff19505d54ca0 size 7748 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail/ncp-mfglib-library.a index 48d575f0e3c..824880c1846 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg22-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1432d309b667b4917cdd5c4fdf832872f8299b25dff7fb821920bf3bb863a00a +oid sha256:2b67785057e82baf2c26e283bf0401b547137c07ee4afd227461dabfde48c4f5 size 7292 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index 199537cb51b..f8d6cc20ee2 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:42c0e3a760fbeee695acc981db33d16e78b334dabbcc02bc11084e71af85cbc2 +oid sha256:bb5443cfb617a10a588cbbc1f0787f96271bc98fa2b3cec7fbb300d54eb74a43 size 7482 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-mfglib-library.a index dcd8c84e117..71d40353644 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:12b05af48572600afd567f48e9b1fe44a45613483f47e357ba5e2fd5df1af6e7 +oid sha256:516df80e7bfd1286fecfaf87a8a6e114314d745e2b16b55b737d3f7544fc86b4 size 7026 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-mfglib-library.a index fe12b8a04d6..56622c9f1ba 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e30a4e95bc1e494c0d7b7d3d01da87831766b050d4877cda073ab06c6d9b131 +oid sha256:6dd5ec1cb0ad857a74403aadff26897545d7ae41ada20a80ab008e2450eeadc5 size 7364 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail/ncp-mfglib-library.a index 5dde3707760..9676d7f2463 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-dualrail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d6f393642164a6380c93dfe5d0ef0c6ea46d334905938022c75bf2d2a250837 +oid sha256:1840593c3211ff1c78e7556994fc8474582c7ed4ed548b15947da7911dff17c7 size 6908 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index c4b62a1135d..c40b35468f9 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9248b3728d782cc30d3221e502129cd2d7ab9c6aa0b71f5c79c73a8b79688434 +oid sha256:e9f70cc042c9d0ab1a7abc48aaba659db60737f47a036d57ccb895d18515a50d size 7866 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-mfglib-library.a index ff50fe0bc0b..40d8b91354c 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac3fddcc7aa6d0a73d79cda658351c8d2bb43e3e5b218a122428f6904cf9b0b9 +oid sha256:f8bb4790d5e09331b315f7d0b6a55395a87bb7517ecd2f819f0901829b453ad5 size 7412 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-mfglib-library.a index 6cf7ddefc64..0d96481a839 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e7c28d5c1b8a4b292eed73478ab311bf3d940ddbae2654c52b8edb55428c989 +oid sha256:9e79c6754e9d74169e61e0da893f99cbafb35d2df4805ce1aeec0b3ec1644e52 size 7748 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail/ncp-mfglib-library.a index a169c3d9f69..cb8e217d178 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg24-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:01fa5173d4b9df536d4a43b46ec6d2684bfe476d73057ebc612258015980a67c +oid sha256:05f0034be0869652f52a9235133167de263e016060d47446d4b6256029de0dbc size 7294 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index 8e919df5dfc..8fdbf4bc20b 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16684178837e9c2ea180f3e0466596eb5a77af01a8d0c18d0ddd5cda530d28c9 +oid sha256:5e60958a26c285ac02c4c6c7e2e467c9ab7a8038981fd8d85f8e70c2471daa28 size 7866 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 2ba14ff30f1..c8d76b768c0 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8109ba0f7299a035e4978a7ff1e1113411d02744f3a9e200c6d2fe17673658d +oid sha256:72235cec7d8f7c4aaba853432529928e8d65baec4bf16573fe071d562411f317 size 7410 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-mfglib-library.a index 261f0292736..1d6c9fb64d0 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0241cb0aba73f2e750878f807e578b61c8bd5b62ecc42a590a78fdcede56d567 +oid sha256:2152731624fd71da9f8aa8adad53202044a8da65bdd6d19c569c35e00399755b size 7748 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail/ncp-mfglib-library.a index d093282c8cb..403f306b893 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-efr32mg27-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:76f2407465d7f85cb557b002ee5ae827112bf52f920f129b04ce29940f12c5ac +oid sha256:c9b15b130eee7bc510ee5ca4202f49a66520b8f2d8c96202215a90312e537500 size 7292 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index 25fe1161324..47622b6a87a 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4eabca5e1d4ed15d88cff697f909fe65301ff1455d9f73b9395ae3bc176f461f +oid sha256:50771962f26a2050129d1578241be00a07483a01190d4c540719db11c4340c69 size 7828 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 4a1c14bb57b..6ca52cabe6f 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9ac9c8721c798a28efcc844eaeadc9cea0f653975a823e632f30e64e690a928 +oid sha256:9be2d77e531ac742a4ae2ee179b4b8542c866f4ada24b77a172b12378643cd5d size 7372 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-mfglib-library.a index 5631e732c1f..f7259b2e463 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8849cd9b0df063c288614eb991704fbacc7c23ef082803f9ca2fbae3ffc4d61d +oid sha256:7b354c28048c7ba26fc87b99e24c25e012f2f631119293f662cfcbe18c6591ac size 7710 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail/ncp-mfglib-library.a index aa6159e52c5..c173a29ab17 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm12-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:76280b4726f3b8daca15b70e829dacf3644a4435a2ddfccd606eb49e159ca7f0 +oid sha256:b74f3d53b452c83613f5dc052fb3250e1f11f6619eda6d528dd4d5e0228a74da size 7254 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index 0ed1128157f..730793b17fa 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:acc02166b773397dacf28fd0bbd0998b1f87f8be0702c2e9d0a0480daf78fc59 +oid sha256:68bc6d9999f2e18592b707f31ecce65c701f23ef4fac92dbf40027e5b6aebe51 size 7826 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 4d407027a81..3394f03862f 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ab06741e05273d5e43937e27149aecf59d641801b35eddb024698441d32f09d +oid sha256:dab843f000032024a83d0dbe3c0125235bbe502cf8f2a0781af91ff71aaa4c09 size 7372 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-mfglib-library.a index a75dcb3073f..9e07c123a4b 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b30828ecaa2d82d8790b0024757b7bfaafd509a3782a4226db33137465154097 +oid sha256:8b2f2ac92e14ac4096771c159c1e3e963a402f3203d2b54e1e90b374991c863c size 7708 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail/ncp-mfglib-library.a index ca4b4cb5dc5..ce4dde45a7d 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm13-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9cbe70d884714da686459bc2a0bca8a5804247a9c93b46f5031c2fac54779db4 +oid sha256:84cb1f0ac0629e2a57a568423db022ccb16cac2280da8f5dec3eaa67a08844b8 size 7254 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index b011644c59c..9eff5515b94 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fda88abe74bd211ff2604dc5d62853deb90d3d26d1a91212202818782e21fa81 +oid sha256:f5e2808eadfd0ebcdc5b5300ebc2bf3745b7fb1f6212db557ffcf0789715e2a7 size 7834 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-mfglib-library.a index a44e6b00055..e3ed54b07c2 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4bf52c2ba209e67723cf8f6a5db56de01642d7a4e97f49ebcc232fad6712faf +oid sha256:64cd497ce174fffae806f5513adcbc3b2460f72c45e31cf41264676c931fe9a7 size 7378 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-mfglib-library.a index 30a5cef814e..fc5e0404a81 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:266ac2093840091a9832fd4e50d855c85f3bc79ef6242eb72494f69c5ebce67a +oid sha256:f21444810216101ce08212813fd98d5b771291db74b9b0b2dfdda790e171b20d size 7716 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail/ncp-mfglib-library.a index 6af29bd2002..6c7ffdd3ffd 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm21-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4ecf3e600cd432481968fdfd86b49c9b5400542c8cd7fd809d318248426bde11 +oid sha256:f5f25b4b2bf95e709247940692d14775f25ef6ceee5e89dd4948c2157a8bb400 size 7260 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index d83ed3b5b5b..9c27f112ea6 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ada04d1ff7a5b1d37747ff22045eeb8dffab99a13ef87c7db784372539421141 +oid sha256:8b72b62d6022acb25e8b3dc1b23859d2071c6ccb2d4ffce946f078dffc9bf989 size 7834 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-mfglib-library.a index 70b4497a445..a479e296720 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7097074b5a7a752cf982323d1f235fc6af9061d44f8c472cfdea25a834faaad +oid sha256:d18d79d31a6d3033cfbb1125ed471c5d5b1509527c48da9e87c855fdbc66455f size 7378 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-mfglib-library.a index 847141eb16f..fd103db1016 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:adde134e6ce37072493fe4da143a8260f78ff09f4cc94724dd4edf51348bff41 +oid sha256:a8b64cd0ef9b999950aa35e6a0542dac2061cd7901b55c4d24b2840f581372ed size 7716 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail/ncp-mfglib-library.a index 7dddffce086..fe78431db5a 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm22-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60c0ff10505d347788ec75a549cac0ef82e20292138acc682154dcbac93de2a8 +oid sha256:28739fcd1b0323c4f449112cf4dfe6b03eb7d08f7e35d3f84f191a6ff93d1cdb size 7260 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a index 7da9cb96568..2d80fe2e8bf 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af7af2619466a7e01f1b565ec4f24ceec5ef3d367dd7973e9a75852434788720 +oid sha256:8ed6f9dea060a9c07f7ff58491c8028958a5d8414125b2577a69bfeadda42c63 size 7834 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-mfglib-library.a index db568190961..4c764ee1924 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a667955cc8d3ba8b324839a343d6e661fba5e72347a5d08dd24d58b2da8390b +oid sha256:57ebccbaeb7f2f960afe3c5f01add8dbb4302b94ada9f3c90816f69f7e8a1c98 size 7378 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-mfglib-library.a index fd40496f816..af65fdab28a 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3678489ddd0402b4c1c8cae0c2faac0bceef81090859a52359fb44f630780056 +oid sha256:1ffd2ceac9d59569d00f29bb7f997b29840d64aaccadd9e9112f6092d8a8ebc0 size 7716 diff --git a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail/ncp-mfglib-library.a b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail/ncp-mfglib-library.a index 7e20d34e67a..3db91683ff2 100644 --- a/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail/ncp-mfglib-library.a +++ b/protocol/zigbee/build/ncp-mfglib-library-cortexm3-iar-mgm24-rail/ncp-mfglib-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5ae64d748cfe98d7b96d2f4abe6c27df582028d67396651733d56378c36cda9e +oid sha256:fe4d24f2db25e348c5e1e4d74892ffd9a23bf357557f0d5bf12835cbf1993a54 size 7260 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-pro-library.a index 77d27061dc4..da86483517e 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d0d818725294469ab06366ebb0286c58735bf32f4c06855bd69ca90adf50254 -size 44472 +oid sha256:c094de94a8f3dc74fd0c605af20da79f2275b372bc8c4d4bcd25d4ccc4dddbc0 +size 44476 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-rail/ncp-pro-library.a index c3d6a828d5c..9f1bdcaeca5 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab3d02fe68e7ad841b2d8d41ee45c788db4fe795750570d90579ff2e52c6dcea -size 45320 +oid sha256:33f8791c695286f88eac93a16f8da487f147e8ece29d9cc1c706229367eb81a6 +size 45324 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-pro-library.a index 9c560d930cd..754ed35dc57 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:115578958be5df2e0df0ed7e04c1392c5af365859be29c63eaaf82e2282612fd -size 44472 +oid sha256:4fc5676fae192de64fc35d9b428c88f5be15ecd3c892552ba0c3c41b1d92c65e +size 44476 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-railgb/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-railgb/ncp-pro-library.a index 8411e1e5d5e..9e5620dea4b 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-railgb/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg12p-railgb/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8cbf2d714226b442c9e0964a7b81cf74eb758e0afeb972ae7e1cd0006c5d6d77 -size 45320 +oid sha256:d08522ade78f6e21e71123971755cc5fc4ad9d50b5f4d81cf35f785dce858493 +size 45324 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-pro-library.a index 680383699c2..86b814f92c3 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:664cee2be3fd3b839a2a42c2bff8347f06a2d70f668f2181a275bc16e6e0eedb -size 44472 +oid sha256:75f94c9f7f6e9390da676bbc2eac8d6ecdce2f13167eb1f4cdc35f138736274c +size 44476 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg13p-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg13p-rail/ncp-pro-library.a index ae1f9188053..0a8865fe9dd 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg13p-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg13p-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a36d6f44b404502290eb253bf51acb64d4aa7756b51a031f6a64558277d0850 -size 45320 +oid sha256:5cc33f3685a8050c12a731192606b34c5e3a099d7fbdc1b41cee158163f4e579 +size 45324 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-pro-library.a index 8ee0ee1fcc8..57c53ac1556 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38916abdae953ee469a58ee7e5be02a7967a9770e255aa216a7e66d3130f0883 -size 44484 +oid sha256:e1c298ca79b285e5534bcbdce696b217dc59ca737d66b52b39e2ec7309078d8c +size 44488 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg21-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg21-rail/ncp-pro-library.a index d0982adaef1..dc1b79db955 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg21-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg21-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5bea1c30f25414de5cbc27599549ef255fccbe818b7f9e2d8da665347e3f2047 -size 45324 +oid sha256:51890e4a6b075e63bdb8fa4f463afdda119e234e42ff9d10651665c11b04c03f +size 45328 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-pro-library.a index 66852859635..1b19d6a57e9 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ab55d2606992e2f0e8ac2b66588168330faba4d15f0b0d0f3ec2cc583f89b8e -size 44484 +oid sha256:ec44045c826edfb27435e526f520e5ca63eb69e88fcbc1484d48c242625fdd8b +size 44488 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg22-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg22-rail/ncp-pro-library.a index ab5a23adf9f..037edf54381 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg22-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg22-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0303bfe884c47402bc6e6ba3275c1bcb03f75a97a017b3f1ca176247a3d43188 -size 45324 +oid sha256:13fb529aebf6276767c115853dec56213d8e354df94ab32dc6cb08fedc5b3e48 +size 45328 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-pro-library.a index 4cb12cbde4f..02f8a447bfd 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:556d225892af5fee29d1563471da3eeb440ad3fe14222957420ea937c10195bc -size 44484 +oid sha256:3aeb038f86214f4a02d909b3b9363d5858cf2beedf930c7175c97b5f3f2ab8c4 +size 44488 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-dualrail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-dualrail/ncp-pro-library.a index df76909321f..3f944558677 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-dualrail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-dualrail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d32a8c96bc817913b1fa08994e6c6b7576ec7ba7b34b8a4c8e533dfdec8cc699 -size 45324 +oid sha256:a9750e33e2cf86012ccaaeb0bd12df7a5ad59e886f9df6053ade6a5beedfed52 +size 45328 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-pro-library.a index f1cd44f8635..385553fef75 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3b9a07fe7a1a0c3ab92c2cdb872fe59b105ac1c2fe9874dfa945541b41481f24 -size 44484 +oid sha256:2acb5666bb29e23335f55c437aa293166860d876597a79342ca727508503268e +size 44488 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-rail/ncp-pro-library.a index 773091fe71c..9611b0711e6 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg24-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:737e8e2c3a655c03ebb1227d7a6eb1244cf1453caea1e5e6d4337a10bd910c47 -size 45324 +oid sha256:c18a0ceef414a3438a0d579d8a2d517ea05b9a2f34debe3285394807db8279c1 +size 45328 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-pro-library.a index f7cda7a0d9f..4e14125b185 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:443b064a09abb7bc782721bfae0c65c69c5dfdc0bdf7a0669c8029df08ffd6c1 -size 44484 +oid sha256:e6c9c22cc2ef5c391dbebd895ec11ef154722253da272808c3968dba2545656c +size 44488 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg27-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg27-rail/ncp-pro-library.a index a1be51237c9..0b636343e2c 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg27-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-efr32mg27-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5570d9f1d7c2c269181bb19aefb4b9808c2186dbd6f6ace5e7a0d6179ad946af -size 45324 +oid sha256:bdc1c1a36927e25a8dd110ca702c1a4a7decc4f85fc3cae57d5be0d62e3b4e63 +size 45328 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-pro-library.a index a7fb999f566..9428301eaba 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:55b49c3fd0e0f4d4146554c1843fe7d41e5956de1534b1e323fc703510b1a938 -size 44472 +oid sha256:37ab5cde6ea011c29d5c731e8d110b7a57f4ca5794ecc8ee51cdb92e80d4d452 +size 44476 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm12-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm12-rail/ncp-pro-library.a index a6f5bca24f6..8f6bc06ee78 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm12-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm12-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed27b628b4b556edceb080f72f8fdea05c0c6d7d823cb2fd2503205b2317c0f6 -size 45320 +oid sha256:4bedcfef76d43c47d2b79382022ed57c5dc682670b6a1e32b73ce30a293add47 +size 45324 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-pro-library.a index 35c6ccedb7c..1d3597cf078 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:601edad39397edb9b24424e1485a1c0168d9caf867e145e835e7adec90aa2d40 -size 44472 +oid sha256:c91687b24238a4cb223d3f02e98d5f268e93f7979d5ce8a9376bda446500f355 +size 44476 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm13-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm13-rail/ncp-pro-library.a index 2363aff8fa5..25501b940bd 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm13-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm13-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47642d3ca3b708900cde1f42c699fbbae39145241f46f4a84b5bab9545686ac6 -size 45320 +oid sha256:a12f4ac3e2a4250e7efdb1f5d5089607a177e4fc4efd23b1cbb8228a45385c8c +size 45324 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-pro-library.a index a2837714256..c44098f379d 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bfe436fe3147f96867d0216e1ee86bca748a540704e0166c3b461e99f5d6100b -size 44484 +oid sha256:babdff3090c51d96c293b97f5245a09c9e3cba7ab6d636dc091066a7dc6a4a33 +size 44488 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm21-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm21-rail/ncp-pro-library.a index 14eea0b35a1..f5ef98d336c 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm21-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm21-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed7e66598bdef85b495be5602b92f4532dcba880b7e4852810ef3e6fa47a2040 -size 45324 +oid sha256:6e41da109708e47193e2efa262faba13346fc8f54f5e874b0b84d9a3d9e65a48 +size 45328 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-pro-library.a index e48c8e00f67..71deb4e6115 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4c8442019e1588fec30eb3b8377eda5dae870f4188bf737074ad258a4483a2eb -size 44484 +oid sha256:a44852631c222b7dd4f74f0de5e8380bbf0c68ceea446eb0706823ca9dca3aa3 +size 44488 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm22-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm22-rail/ncp-pro-library.a index f87800b9f95..ad6ce190827 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm22-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm22-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:669aa3953543bab8aa3d9b1dd157ab0b2146f96a6ab86ffe48f3ed766c6acffb -size 45324 +oid sha256:7923465a24b21cbfc54d1860580496267cfb4db94cd1e9ba2e64b9ef931a7220 +size 45328 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-pro-library.a index 0f669651e3c..5fcc001e56f 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e5e8ab3229c77f203d7d5b1630d689fb6cd1e13eac0acbec1a062c418b0dfdb -size 44484 +oid sha256:e97b9f59889017b85e937b6dda7a6aa17a3e30cb5a5253c614f310a610362710 +size 44488 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm24-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm24-rail/ncp-pro-library.a index 53ba0ef3917..9ba48b2230a 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm24-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-gcc-mgm24-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:29df0f41a7e6eaa58cfa888e3b5c5fd369459c7df79ce5833378e1a55e601566 -size 45324 +oid sha256:d6526672f4edeb813761bfb3f7ff1a30e8e87d770282e5096cf8938fea4532c9 +size 45328 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index e56d827b782..fc297798671 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7abe546812889379818a2ca0d4d867d366dc97fdec25100e1be1376b24a2c4c -size 102770 +oid sha256:774f52bda05bfe82de40fc5c85136f6f06e9696919837048dacf74a233a46dd0 +size 102776 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-pro-library.a index 298b7c78647..434e7e1e548 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dfa8583ac4bd24a713079a1384936ae29e4af701f828f0a6b21f3ef92d88d8e9 -size 97078 +oid sha256:9d7efe98eb86698548657187cde4c473b026a23d8596d321c7a906af30236e54 +size 97084 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-pro-library.a index 357b28c5c8c..f604f37fea0 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d755f2b7e613d3924a19629b41513f7e14463f918c64d85a95632a4d621f073 -size 103084 +oid sha256:5e32b793be3bc04f5b16b2cfdb13ab4b1fa190aacc19cb9e03a459ba132a3ace +size 103096 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail/ncp-pro-library.a index 1d22f675cb5..172e6dcae9f 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb307a6ae28c9e3c1d257d4b64cb44063827df68cde034f82dd25d09c165f299 -size 97386 +oid sha256:10b4771ebaec5c1ca42aafe1a5cfc399684aa2c122d71c15d9ec72e5c7c39278 +size 97392 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index 22ed928b38d..0506704a5a7 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd72271bd91a91f2dad6be3e881c97bc81e8e5b529d54aff0cf88baf27ec7d3c -size 100828 +oid sha256:144d4cf2dbd5ba2978958daf9b0055bc55e5765066582c17f3dc62eeb21be394 +size 100838 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-pro-library.a index 56cc55322df..89a562a8913 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e462e74e3aa286419e10f2517a84196a5d84f8eee9b78b226a0eb1d7e3295f28 -size 95136 +oid sha256:4b77ddff63c53b1f88b6e4e34948fd5e1870ad2495e8cb38ad69ab8993bfee19 +size 95142 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-pro-library.a index cee8491f451..2e90ebb07da 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eed1a25cac4ac741690c87d1bf44c58ba2644fcb563c0c81dfcbdb8ba736f5e4 -size 101148 +oid sha256:21208d1df2af8c6b3f24dd732015308ed691d659ec9fa87719bb3a11b3b16575 +size 101154 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb/ncp-pro-library.a index 199590a8085..12caa76d6c9 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg12p-railgb/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f5146d22c59b57a8c0277a05a74034922600f3b557da57a0561b95578058798 -size 95444 +oid sha256:95c7c574a19d561a43c5810a2a18a6924702318b78c8208f5064e2953599e6ea +size 95450 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index 234a2108405..48bd8574767 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f60016c2cb485fb84eb20c7e0b18e72915d3c2e2c5cdb3ea6e85a72808cef892 -size 102764 +oid sha256:bb230d94fcba7bb794173c4bce4c5dc21fbd23c69938561a11b41ac90b2138f7 +size 102770 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-pro-library.a index 22b5acb62fa..e1e567d981c 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ffd0dd90df8e5c13d6e11985d9a4d6f61f437e2c8b286630e3cab7b6b9ac922d -size 97068 +oid sha256:97942762f341d7a363090cf252af1b8acd8e1bb3290b39c410676998f3f29a9e +size 97074 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-pro-library.a index 6f8d8ec80ab..3315b805695 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2aff68a473eecabedc85ae8b12e3b821d40f93e2cabf3f836b5d385aca7bcda0 -size 103080 +oid sha256:a74cfabfedd78081bab365b67b95f0446a8a30352cddcc630796f107e9e7fa52 +size 103086 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail/ncp-pro-library.a index 586a4719d16..d5c54c2fd9d 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg13p-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:161ec5ec96cf67c57d1a18069fbee63b17645d8613f67d8619d69df6de7295c4 -size 97376 +oid sha256:87399cac25c6b6076100d0054e1991fac7497f56dcd193bd6c21fdd1c8d82de9 +size 97382 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index 0ce2efe4f6e..cbb1a84eca5 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41ea3eb44394f77199463672c7497a24a0a932bbbbbfd82f32635b5447b7bf2e -size 103938 +oid sha256:49d8e6c26e835989298d3336dcd2ad16ef6f61a9bb3f97bbc2388f08ef2ee427 +size 103918 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-pro-library.a index 26ce4a6fe3a..9172526d886 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54ebdef387956b4975ad4e50fea559f2e3994f5b910873d8ecbae5839bb899e8 -size 95830 +oid sha256:c45ab8258d7b37dbf7f6037ac6306fc383b5827a307b606d98e32cb0bde3c188 +size 95808 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-pro-library.a index 6e72c9d2380..62feba8985f 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fae263d2f29e1047a98ae35023bc557703ed2eb2581d7f1d1f7be8b290d725fd -size 104478 +oid sha256:03ac845b57c8d5dbbc755815fbf664de4a0e7b9148dd05a55818d52307f53a4f +size 104462 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail/ncp-pro-library.a index 3c0b7efa8d3..30e7c94b5c7 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg21-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb8c1bf08481a52ba8959c66d25f4c2348cdaba5b35f4eee3c6a6813fb0425c3 -size 96360 +oid sha256:e2461da6e31e86492ac439c69424e77997f0363828251662052d80c67563f891 +size 96342 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index 311b5577c99..7ab8b7531e8 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf7306e1f0b1d73835ea06dc680b110360c5d8878ad2f6e5c9e869b838f45846 -size 103932 +oid sha256:114a148127f0d6dcf6018acb77ce5a7257627cb22c61510e16440b74972c5a1f +size 103938 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-pro-library.a index 27baeae2008..d6dfaf7876e 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d87c4839b7c23921040031a588fd7ab0e3ee1ee01d485fb0c389c5fbb85d8f8a -size 95822 +oid sha256:cee3d1553e612ff5acb1a37f8960f51f27e28955cde04e02be375dd8cb44b435 +size 95828 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-pro-library.a index 555d49ceb85..39189f33ee2 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd554fd924e7efe47e658af931e69820f291c90dca8327b609c65dedda63793a -size 104476 +oid sha256:8cb86aabb416b6adf7dd362882f368278541265465304b2816f7f2392f1faf62 +size 104482 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail/ncp-pro-library.a index 7d580eb970a..a826f4b963c 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg22-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c22e205bc8e9ede2dd7590db33c19719c0a827b0ec6680b1b946c2836320c6d -size 96356 +oid sha256:aeceb417a9b326191912db6ca78142e3feba34f65f431a9516fee74088a5a6d1 +size 96362 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index 1bc47543304..48156d07a3e 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:102a9d1ae45c2774f244ea75beaf912eef163d8f79124f833396948fb7700afd -size 102020 +oid sha256:0492e90d569c758a7d6ed68ca30c1cbe736ce609866939cb826a4c6fac3812e9 +size 102026 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-pro-library.a index 6eb2a07146c..bd1979037d6 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7918c343b4a4b2fc8c3f7abacb2b83662331ff2ce0f3faad9d63f0180ba87346 -size 93910 +oid sha256:6259f9d6fe474ddf51d01a3056cbccce78ae2dfa577049e38676e232d1a8895d +size 93916 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-pro-library.a index d3b45d47330..137e8e00475 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fe2aa9c07890fb20770f59ddb8900bf05bdcdfc44dd4bcfba728f52c7be0f08 -size 102564 +oid sha256:0ccce275345ef0522e5f3fc70c9c788f8131284cdb6b21189e7e4abe65503797 +size 102570 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail/ncp-pro-library.a index 8d7f7a2e0ac..6ae20abf8d4 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-dualrail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c9ace2ca53541e9d401f48d26b088a17acbaaae3c84c7de18aac1d931d5fe341 -size 94444 +oid sha256:4b29bfeac72bbcc31c5949663fca21bfdf45cef70bab1305d3caadb2bb6675aa +size 94450 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index b664edfb5f3..9f86a0b1479 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b576c636c27a1b223cbb00eaf3467e1fe02a55abc73a92478f7015bb70e1f3fb -size 103938 +oid sha256:9230c37cf0f42f8028b9b3d863a63071b0d7fb846bdc6ab065b4aef14b7d9a08 +size 103944 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-pro-library.a index 199bbfae177..f0a1d664025 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:096a891686d410c46da122543a3c60ae806c9cc614248c39ea4ba092358bc304 -size 95830 +oid sha256:40898c2b0dd2f813c25922fb37724299c2d9946e6b97f89b4253937b4ae1c26f +size 95836 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-pro-library.a index b6759065114..160dc7c8a71 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aef0143f82916f14eaba3fd000394e18634560c071c2f1fbff60747297a1626d -size 104478 +oid sha256:8d06d97638c6c2067c6d7f0ba71cfe4ceedce740cc74f6487f26b7d327ec3fbf +size 104484 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail/ncp-pro-library.a index f54b8565ba0..ab755b2cb62 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg24-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11264cfcd87388fbb671adf992f8a1c5901b25d198838847a279c4e609bbef9d -size 96360 +oid sha256:3d6b5160f5c7ec211da8442100aa2a1645e3b5f0481d14140cedf520a7c812ca +size 96366 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index 05d6436e1e3..fb08b57b7ae 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a14530683e93478d4d2662c75e5e7c374afd86366b740178ee6ee911decd6bdb -size 103932 +oid sha256:6501266ed0d0192a60d7803e21487de5b281e405346ca20e43f390dc59af6440 +size 103938 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-pro-library.a index b2bf0b329ec..594fa9e7e45 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6aeecfb1a66af5ee447b2af852eec744481c59f0529abe8b768be98d46d38204 -size 95822 +oid sha256:699a9fcba6758023c306143703f5ea33ab4e52e057a2d97999b4f4216f5f5ddc +size 95828 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-pro-library.a index fbf7d02eb4a..20ef3379b7d 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70cf8c438cd06ec7fab8ca993df8852bbf40321af90610c7904f047d381a182e -size 104476 +oid sha256:b796f71c2620ff239b839171a2a04e449aef9058b1f42119166320282aa322f7 +size 104482 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail/ncp-pro-library.a index 08a3862e5c6..2ece9ab7016 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-efr32mg27-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8269ddbfcf81e3f1da03549e94e4751feec61695f835735923c6aadf1133b44d -size 96356 +oid sha256:dd73ef3eb45decf3e57f7c958390a6de7c9857528b5081e67a7036403382de23 +size 96362 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index 17ec1550a4a..6925cc3c36e 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db328758bb67cd9c43affb60502181ea301419bd1857bdf6f50adbbbbf0f488f -size 102584 +oid sha256:077d7f0ab612ac996515056f2c472b00d7d05a8d61609b4a5bdc83712260d96f +size 102590 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-pro-library.a index 179279d570a..2ca9bd360fa 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:478fc76e61b0782443c51812201972ae1b6a75921f2089bd57ed535ef90841bb -size 96888 +oid sha256:86b3ef74be53230a77a72bad5b1b00ac24edc7e349c94681c02ad8bb9c52eb4a +size 96894 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-pro-library.a index ad78acb8f12..f6618524e3b 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8afe50ed22605d48788968c9fbe22b935f8db5e6da1b8aad24cd52c666db455e -size 102900 +oid sha256:34ccc6f658d258b7eaaf350bbec92fde9460a8f8880230e485688a8f351028c2 +size 102906 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail/ncp-pro-library.a index 00780d8f8df..edc42cce359 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm12-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4b3a40d3526cfaf1c307db7e73c38bb16db165592d946137c839adb7ff63622d -size 97196 +oid sha256:4bdd5e33d91f50b8a268bef2aa1601923f454f86054dddfc1175e4a4ef4dde59 +size 97202 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index d6be87b47be..09d29905c28 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3be58c41b87265887aa1dc9f93e6a8a0ca8ecddfb8e1299331109595199798cf -size 102580 +oid sha256:fc14379cbd8aecebf7aebb8633f38f69bc1d6f28c92858e089223d2bc425a740 +size 102586 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-pro-library.a index 87c7d1b14f4..39f545fb95d 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:747d8341d90ef7c858f43b089e4073737fa3f296f63c65eb7d337e2348e2e2b3 -size 96888 +oid sha256:a2e4a36cf21fa2bdff941353d9f8940174aa113cc54e5a74082c02ccbf8f4e4b +size 96894 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-pro-library.a index 09140d571d2..c468b609fd7 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ce5b69138dea2150bde9b127ba57834b4864e456dad2dda8f8c1f87fc192260 -size 102894 +oid sha256:d038a165ec293f71c9cf16a4c3f3b5f8ca87507b524b9f5505144f35782a7fcb +size 102900 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail/ncp-pro-library.a index 286b435592d..70cb589fbdd 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm13-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8a04c7afdc236cd90d8d165000743f651bf3e71edbe8b7342449437c259a39cd -size 97192 +oid sha256:f8ee1cc63c4e69965715dd421745dd27f287dd6d61f02c41bd94c4c81874a6d7 +size 97198 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index 50006d1b8ef..0401572206e 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:152b3ec4cb22a3bf4f3420bcc6cb84c564caa5686c7bc26c4f76cb86a2a0e94d -size 103772 +oid sha256:16bfe30e2be98436417a0358d53916425168f4a3b116bc1a5a01906278eda3b4 +size 103778 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-pro-library.a index a6aacf0a7b2..9195ca90ba2 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49e1e3ccf365a2cd6bb9bd36f1a03f6882b0271e50ae85e42835f56bb162cfb6 -size 95662 +oid sha256:b76f56ae2f5b008c7d32f4eb22f71a0b4b618f49227490c6b1399b5322482cb7 +size 95668 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-pro-library.a index 41f475d4f2d..b98cb52cb85 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa0e9c70a56631d737e56de0a4cb52c8668369da27bf06ef968e2bf0be4d54c1 -size 104316 +oid sha256:8af9817a2cd4acbc5c12faf45afd14482bdb52e1726512776bd461b1fa87dbf8 +size 104322 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail/ncp-pro-library.a index 92c20f64ff8..43abfbd0317 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm21-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37c4a7467c68cd1f949dc8d9266f413115106d73fc434e970cdf01abfb7c7c63 -size 96196 +oid sha256:5213e9debca6012843837812ee6ae5602b54581b70a2c9b84813fb43184b7467 +size 96202 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index 24d95f41db1..2e084d0efba 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:93797513b88690a1826173117f83f6a50bdf067202b5a02cbb027f45eb7a2344 -size 103772 +oid sha256:a8b4f86ac40cef4f39aa0130ce13c71ca75f079907fd8a1911096d320ba4febe +size 103778 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-pro-library.a index 6a221f0817d..c3144c515f6 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:63ded4a6125f29f5cd69371ea91c0e34bccae131727d5b24115cb82db2dce247 -size 95662 +oid sha256:486f5d8a1cb5ad63ff2145acc17c9e340779b270fd0ca63d654ba546b98d73c3 +size 95668 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-pro-library.a index 21b4f19b0fd..3b99b24f0e2 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c27a3bb386a2235976786033ac934b9796c49ee7f80e3db199900bdf435c19b2 -size 104316 +oid sha256:65d08b1c1ef3738b771a84959cc949379def8dbd1a391344187e333587048fd7 +size 104322 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail/ncp-pro-library.a index 2917ed2f7c9..3ec1f3199c5 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm22-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec2f1c9431411a65bfa9c7aa0fd8eb872ecc578f6a6b00bc9fbd74ea09887f91 -size 96196 +oid sha256:61f1d6d89163071c6e2685594bc32855cc33e68b76b3f356898f4c492ce7913f +size 96202 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a index d4517e3f8cc..8940415188b 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fabfc4ac5af07db874e1b44a6e4738c03eefecb38dbcdfeb28aa5bacabcfced2 -size 103772 +oid sha256:a27e74219453e87999411638e6d02935f185107109a50d393ce9fad61e8072c1 +size 103778 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-pro-library.a index 2747ccc1019..49c48686fb8 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6aee2cf6042819cd02c8830f4cd48a70bd019f4689572be63dd3ffef37a89572 -size 95662 +oid sha256:b7c0cb6784363d0ea299e47d5f5bfd02af7ba5e1dc98199e988bebce2971247b +size 95668 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-pro-library.a index 7df00aadaab..47e9ba1773a 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8b9902d0e12774d310cb96a5ea5b7801685b256b0d52b229b52a955aba6abff -size 104316 +oid sha256:373b685e77802cb958d954297038107fadbca23c9842abe60f91466872751d50 +size 104322 diff --git a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail/ncp-pro-library.a index f4d95dca5bf..3dbb3da5872 100644 --- a/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-cortexm3-iar-mgm24-rail/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5bffa9176be553e4dc77a3062c211a1b4b3220998f05144eb5c73dd3240d5a19 -size 96196 +oid sha256:8103aa32c4da9f739e14992354de8abca37e103f8de8af01c223e7ec5384d5e8 +size 96202 diff --git a/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/ncp-pro-library.a index c673f57741f..ef2114f8f26 100644 --- a/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19769b0574a8c5e9e73af55537e478f7f2817e6ba77f3e2fb37a4971947d7053 -size 251572 +oid sha256:379c1ba40447bc16be497fec44dae8b246f2ccecbfc8e6b84de16239a014bc12 +size 251580 diff --git a/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/ncp-pro-library.a index fd174639f60..eb3621bc98c 100644 --- a/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4f5c1f3893328037de58b27694808397711ec7249cc615189a56d2c46764941 -size 270408 +oid sha256:ec4bafc256fbefd02f4ee92c8a7185f6df6ef5e8d64d534a39a4fd3d3d788a34 +size 270416 diff --git a/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/ncp-pro-library.a index fc14d2401ea..10800652edb 100644 --- a/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:308cc9d4d7059d6071d7d3c0e3b81dfed2f31e0c631a720599956593cd45c4e8 -size 194788 +oid sha256:0c3e2ddc0a0de28c58db2109cf5d77ae7325b2e963124bc0763e2b89bdd09d80 +size 194800 diff --git a/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/ncp-pro-library.a b/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/ncp-pro-library.a index b83da0fb286..1248106b97a 100644 --- a/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/ncp-pro-library.a +++ b/protocol/zigbee/build/ncp-pro-library-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/ncp-pro-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e58fdf7dca0091628a1eaa55f9f681c4a63bf1a4f41f4f1b7907515e987f44d -size 274192 +oid sha256:cac66a43bcc3e879c507f26832f4872be17313fafea31e634f2395fead7272c6 +size 274208 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg12p-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg12p-rail/ncp-source-route-library.a index abea4f53e57..b1fc2db4d24 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg12p-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg12p-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:036824de625604ff2c7be08d6eab8e39a38924d5e7c97e1c6a358deeff9e23e1 +oid sha256:ee69bfcd1bafe4bd01eef0a69c5c25d34e1c9dbe22ccfcc93be87cf1646d1f4e size 3888 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg12p-railgb/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg12p-railgb/ncp-source-route-library.a index a49b4802033..3107b87fa57 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg12p-railgb/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg12p-railgb/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fe58b0ed1ca88abb8aa7d03ff44f8916a31ed2773af5eb69a138b43ef28e0ec8 +oid sha256:b9680103311b07c3442d907bad2cc3b481bdf682ef341f5bcf6036da8a2022ba size 3888 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg13p-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg13p-rail/ncp-source-route-library.a index 410b6e37035..3e2e69d25cf 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg13p-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg13p-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ae1f98ba2017282b1718ba7833eb8e9e3faaf888823e94e9e80a9c2661b27d1 +oid sha256:05a2b6b89289065f7b178101286da62fd25724620173f9190572167b28369ee3 size 3888 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg21-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg21-rail/ncp-source-route-library.a index eb76f8142aa..f2f073d8e66 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg21-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg21-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7582e05aeea7d6d8e432eaf0d45ec929853a342d6b81a9e7373c3226da9e44b9 +oid sha256:2f027d51a9183abc53b238b3accf530fdc3a73c6c42758385be607940a65fafe size 3892 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg22-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg22-rail/ncp-source-route-library.a index dafd4129395..671dd025c44 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg22-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg22-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:738689a159fc81fc3eb54a1a2bf6e3abb191977b7c8f3b945dae5847071dc982 +oid sha256:ed0e4337a5e442f686b76cefa87f76c8d3bab0b630616f40bc65c2e19e1b90c7 size 3892 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg24-dualrail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg24-dualrail/ncp-source-route-library.a index f7ab8abaee0..f2f073d8e66 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg24-dualrail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg24-dualrail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3781f7e4db416338f735f5ba0bc61e33715f252d629a95747ba73a6d0c778725 +oid sha256:2f027d51a9183abc53b238b3accf530fdc3a73c6c42758385be607940a65fafe size 3892 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg24-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg24-rail/ncp-source-route-library.a index 36ea8156b9b..2a7ba1e3d15 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg24-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg24-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a543ec2856334ba71bdc96e572c444cc6d1ebca0cb9cd561501d12a7cf80c2e8 +oid sha256:3f1cdcfd0d91b97775bf1aed1cf18b6aed5e06e16ac169fc3fa740fadb2ced01 size 3892 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg27-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg27-rail/ncp-source-route-library.a index f7ab8abaee0..2b65d981653 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg27-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-efr32mg27-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3781f7e4db416338f735f5ba0bc61e33715f252d629a95747ba73a6d0c778725 +oid sha256:76e59dd3af516f41fd3c4212c262e835c3f8eb025064e1217b654f43a9862db0 size 3892 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm12-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm12-rail/ncp-source-route-library.a index 84bd7a948e0..770c0355a24 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm12-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm12-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:805acfbe468a86db3f0560cd25bf95bba39c36676434c5f18c72c20497b3f4c8 +oid sha256:99c7db8ebf823367112e53584f6392158f13f5ebbc1f46a2254d351d013eed0b size 3888 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm13-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm13-rail/ncp-source-route-library.a index 205cba7d158..7d3ae49ce7b 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm13-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm13-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27ff342bc840a8c9b286fc5011f36a81714c6fb661024c91888217c4db11f9eb +oid sha256:10432ce36d2cc06df7f0e90f5aedbbd632d8edab9cf6c40159b57eacc5fc95fd size 3888 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm21-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm21-rail/ncp-source-route-library.a index 2988257b621..4015e3fe6a8 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm21-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm21-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f102534f4f7ae1390e1e5422365ea23aa73b798f903ba3601a41c9b01acbc55d +oid sha256:d83572e64cd3124427bca2812a69b672af30b7a4a771abc8c7343f9e22bc8061 size 3892 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm22-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm22-rail/ncp-source-route-library.a index 0d4a8cd82b4..e3ed8e36a2d 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm22-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm22-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5a656360abb158c911d9b86937f85872f5683036fb1de0aed2a042fd2e2f145 +oid sha256:105ea6552ce88dc01f9d5c9d3c85c7917221127e56d8e854810922573f8d10a0 size 3892 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm24-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm24-rail/ncp-source-route-library.a index 09e8078f2fd..bcb3ab3b584 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm24-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-gcc-mgm24-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5ad90b2194ceeab7a42aa9c6dde3a166d71de5728369a43943aac3121ff865a +oid sha256:dad3319f3316c16cde84e0e20ad65aa16ebf7a595bf4fcdc10d9f561afe54fd5 size 3892 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-source-route-library.a index 729ea57d560..5a442a2a333 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c5c1f293db4889ac082afc7981995632f59653fb772c087765b85dec30fe74b +oid sha256:c6622b776d09720835ed7fa5af59698f41ab0a6603b6a6000119e5a3b05508ef size 8650 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-rail/ncp-source-route-library.a index b096cb14aed..9b4bcb38479 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f421cbbfeee855965db26230c036c00b98ba503f7c4391741d38898f0fc457a1 +oid sha256:220ec6015a50999e50b5b6dd635806f8a6bb689e97ffd94b319b62ac7f5a8ab6 size 8324 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-source-route-library.a index 00a73ded243..58ce8d5fc3c 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dedf3482dc6eabd073f24e452ffd2cbe26a5bd90d3072a7c2e4bd09c38ae20d1 +oid sha256:e203e903086ff7576243572de6a06feb7d03f7fb358bfd4ad1afacbedbe32253 size 8262 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-railgb/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-railgb/ncp-source-route-library.a index a3d8ad6dcaa..4a25a482d84 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-railgb/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg12p-railgb/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d793f569ac7075d733ce232985e54f1bb66a48767c5c28604d1898c77a1c0929 -size 7934 +oid sha256:9041f90be7a3ef2d0ef866bebabf8954a3865ef166a3f228de8023255e263569 +size 7936 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-source-route-library.a index dbe045c1744..7992caf1d9a 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2c464b75c529a23fa58b29b1317a229530aaebeb663791dd20bb4def2e6cd82 +oid sha256:077cbf815526c428267da58b9aaf0b40823b14d87b1f99d09ac0092d286575e1 size 8650 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg13p-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg13p-rail/ncp-source-route-library.a index 4b34f68af11..af09e5a1860 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg13p-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg13p-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6b8732fd96fa418c5dca2e252911353f785641d15047d19169b7a9805cedaab +oid sha256:83d61825cec614b0e8c4d7bc2a8513afc7c9ef625281d0149671ed2e3d8d63fe size 8324 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-source-route-library.a index e4f9a07f949..71e422e3c38 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf3fdcbb475a47c53af2704245809698a75df32768ddea02218b69b182bfc8c5 -size 8652 +oid sha256:6f6e20cef2768e6cb9ca166781889c54638e9600c481c95c831c60d90dcbc577 +size 8648 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg21-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg21-rail/ncp-source-route-library.a index eee8c0af1d1..9588da044fc 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg21-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg21-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8f1ca17dbca081d15f5c356935c527204265d2c80a1e279917ef4b491226dc6 -size 8326 +oid sha256:3411324fff3d3a90988952f74c973447931e979fc2a8db992baf37bd3884b63b +size 8322 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-source-route-library.a index 6177ae8a213..0315ce8a205 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49f1cb4c2d045aac17b06e14399a4fd503cf395b83b61ef14963595be94a9f55 +oid sha256:6f3684009fc5de778fc848c56b64dcd563446d72e36a9cddaaad6794771c3c4a size 8652 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg22-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg22-rail/ncp-source-route-library.a index 06a834aef91..a0e41f97b86 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg22-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg22-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3e2da9db37e6d2fec16316665ecb5bda546253954f026f28659a8de01c03c8f9 +oid sha256:6d789a3ce6723ebdb08d632e4134b10f510bb0067a8a69cf70aac0796be025ad size 8326 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-source-route-library.a index b5068eb64df..ab6157e7808 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:881c76ee1b31e36dfc01b9aa713498c598201f0775913956b7497bd8435df4c4 +oid sha256:99af9d0acdf4c5dbb49d28e657c031d6fe59ac5f6444c42a2be92b26bfea747e size 8268 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-dualrail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-dualrail/ncp-source-route-library.a index 1645bfee880..41f9abbf513 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-dualrail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-dualrail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ade8732106375e8f32e9c9ed92fdfc97e02c3a7cb9b4f4f655fcabf43c9e63ba +oid sha256:06522ad12eee585968c198600e1e17f523718f8e922ed1a458288c1b0c9a00eb size 7942 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-source-route-library.a index 9b126100650..86e9e3da52c 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2251f688a8cbd4b9826117dc706e8d2e83eae09dd88050090c70f4f5ebcb5814 +oid sha256:9778b4f2e779be6366d71b0d3270165687fd5e6b2231df36e860a3afd82f73d2 size 8652 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-rail/ncp-source-route-library.a index b8d46b51d51..15e5d8fa23a 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg24-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3556c8df34e02b16fc3e63ba420c1968698ac4692c6077cd7e14961abb3ece2 +oid sha256:26e2c63494fed7d6181f42ee6e6af5db5a421db8931c8b30443d1bec73a3339d size 8326 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-source-route-library.a index 84f68da9762..9f79aeeedbf 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a66cf40c47f7e70fbda44b4f04349cb892a7ca6a299024fc346ba5a6baf71527 +oid sha256:68fd1ebb463d00bb0fd6e95cb14d0924aed5aa46de63cfea0ee97ebc9a3b6b46 size 8652 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg27-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg27-rail/ncp-source-route-library.a index 0a46aa463d2..3bbbf312e9b 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg27-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-efr32mg27-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81755700c96a45cb7f0e130bcd300c56604b13c09217201d5f4fb4b56d233324 +oid sha256:72cbae16b7b9283fa09af07a0d185cdd4710144d28d399e91ee86f0bf933ffaa size 8326 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-source-route-library.a index 245b0da7ba5..1a3239fb7e9 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:467f40c46d1a37d4b216b08a5d5d258c3593c8a092031c350b899a022d6c2fa9 +oid sha256:fce296882ca0bef2dbc51015fbeb570fb1829a9008b204e4528da1808cac51c6 size 8614 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm12-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm12-rail/ncp-source-route-library.a index 8c246db894d..3894308bfbc 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm12-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm12-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8351fce137f2d8268f053f2d71d31b929213bd3f8bc296df1ee3c4385bcdf8b2 +oid sha256:4c9797eac569960793cd07bf34f4d022038de8dbc9e6e5f693b8098576e97a30 size 8288 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-source-route-library.a index 8723dec8ad4..fac97a87ae7 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5defd102869494bb0c12925fb27f5b048e671737bc53f8b20e610c87b6bef037 +oid sha256:c67588102c81d7d222eae08804bcfe7a1f0ef1bf36d274eb8f2e696a7ca6f5a5 size 8612 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm13-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm13-rail/ncp-source-route-library.a index a7d2bb91bdc..ba9290ca885 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm13-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm13-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d8fe7b6a8909f2aba2c719a584c1f8160c9db84daacf4397c61cee2544e4942 +oid sha256:2cb9229f94f048ce93b6142677db63abdebdbb7383e8a0bf7acbb5349e414c17 size 8286 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-source-route-library.a index 306b7e3d05d..e92944b0052 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e41486bf03dfce3228e36c8274c6dace39bf4335148d914270781453cce5bb4e +oid sha256:4a6846378184da65432af39968bbe3f2e336b6e8d47d58d8c279630ee5834e3b size 8620 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm21-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm21-rail/ncp-source-route-library.a index 5067b44cc14..ea96e61742f 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm21-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm21-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c6980904511acb111056966b3ecfbf035c5d2d91dcce735c1e15b70c5f8e694 +oid sha256:023bfc7b4f260b4c3327a38623982949176a52641086405b66e79f435de873d5 size 8294 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-source-route-library.a index 0b61d935471..5aa3546872a 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:162df0aa02a845caca808271308b7982ca02dada4a34d47939d981e513957f43 +oid sha256:96a8c6ebf8144db76d83a76fbb9b870ba0ab5a5dd0b31e88be2245a85dfc41bc size 8620 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm22-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm22-rail/ncp-source-route-library.a index 0558a5fe599..ae8d6c56755 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm22-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm22-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9c71a06b70280f06e713e3120880d80d75524e086b938e0a5893e99f6f1fb66 +oid sha256:e613e71eaa198c724497ac0286bf8447afd7d808c0d2411966ac779fb8fc51d7 size 8294 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-source-route-library.a index 9f71ad4a05f..1982b7e480a 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c3b8b49757bebbcec4bbe9304d9066b79c6e5ff07fa10c0473cf0ba91d086b7 +oid sha256:4a5a43a2481402b2364d01af5fbf85e24907cc6107aaf12f9749c632649a5fbe size 8620 diff --git a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm24-rail/ncp-source-route-library.a b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm24-rail/ncp-source-route-library.a index 2fc2075b40a..e6be7608c2d 100644 --- a/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm24-rail/ncp-source-route-library.a +++ b/protocol/zigbee/build/ncp-source-route-library-cortexm3-iar-mgm24-rail/ncp-source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ffff2269a9c9607a43ce43c5934e054f9bc707bec7fd13d37f1c9292cd169980 +oid sha256:f3b9556cf88d36877f6c3c38fafe0baf6024694e963484b1290134a085d9e7e8 size 8294 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg12p-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg12p-rail/ncp-zll-library.a index d3467ce6209..575c615f1bf 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg12p-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg12p-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eade62561d7c6701727f6469c918671df5eff3fbd0ccc20175a0cc04ae0d8c92 +oid sha256:44ffb012d2b3985f0acb6ad7ca0325be893dc066fc294c43bf45baff87c7b6bb size 4682 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg13p-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg13p-rail/ncp-zll-library.a index ef14667871f..f76a467f9c7 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg13p-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg13p-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee9a4117b6d666837c473ed48063d72a938ab72a23636eb6e9003cfd3ef840ca +oid sha256:c767aa71536da3cf663eecb9c8d27dde49cb5607911dea99db1500acb4c31c73 size 4682 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg21-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg21-rail/ncp-zll-library.a index bb9b2a9db8a..8bd615e875f 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg21-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg21-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f3b0bd24e9ef2100472f9e3ded23d9b5d4cb5f88ab4e0f669f14473f2a30d81 +oid sha256:2caeef9bbda56a537168291578c35a84b0624c354f596ab2ee010e3c42737562 size 4690 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg22-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg22-rail/ncp-zll-library.a index 1e5e83a854c..ad36cd426e1 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg22-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg22-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e63c3feccf934442d0abec7e01d724cf1231932b5dcc1a3ca807c35348772f3 +oid sha256:33a7e8985bd033ec131f4b8287beaa9dbce2f7ee31d12b8ace122778bb352771 size 4690 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg24-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg24-rail/ncp-zll-library.a index fd0bc031a9e..8bd615e875f 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg24-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg24-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d235bfd91e77714444f4b25880da7ebbe18cbb6719e821a1fe84ef612f5b19e8 +oid sha256:2caeef9bbda56a537168291578c35a84b0624c354f596ab2ee010e3c42737562 size 4690 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg27-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg27-rail/ncp-zll-library.a index fd0bc031a9e..dd342d249bb 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg27-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-efr32mg27-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d235bfd91e77714444f4b25880da7ebbe18cbb6719e821a1fe84ef612f5b19e8 +oid sha256:2a973412f84c2207781d828637c4b243e29da0a8d2219df7f4fbbd4f98adfd8e size 4690 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm12-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm12-rail/ncp-zll-library.a index 04b31fd7bea..ae9bb7601ce 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm12-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm12-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59d36f698c7260bc4bcce117e48ae9a1081b17effd2ad688da48c38117c620b0 +oid sha256:f457e7f00ab93d5a4a5f6315ad688f257886fe471e266f910cc16c25c149b337 size 4682 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm13-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm13-rail/ncp-zll-library.a index 11f50a30380..2728a00d642 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm13-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm13-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66efad00e4bfd6866b89e1d9c25458d54545393921d5e4bfae9fa86a016c26ba +oid sha256:497a04573264e9168d50c2caafdb059a728e8c259d7c38c19dee0e55e50f54f5 size 4682 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm21-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm21-rail/ncp-zll-library.a index 078c28a90e8..c4e7809e637 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm21-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm21-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:398da477a3cc2fbb3130ad7c11754a0abbe41961c5fb2760e76400b09de0d2f0 +oid sha256:75c2507844813e5153c670991e52f073a6a4f683f8c0fe7633a561fdc0f77f07 size 4690 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm22-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm22-rail/ncp-zll-library.a index 27b26b81ab8..44a2f5444c4 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm22-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm22-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b755bc487fc130290f41464416cea8218d73527acc173723a3a8972c047fe0b6 +oid sha256:733eb919404b7136726232aeba35d67aabb9ccc9657ddea6f4b94c9c0053b2ee size 4690 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm24-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm24-rail/ncp-zll-library.a index 199599610b6..bc184381f0b 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm24-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-gcc-mgm24-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2da53527a73d9751ff917a50e1f6714e99ceb8b9f5949160353da708531bac8 +oid sha256:24a97544e44647069adfed5f28dd637f7ef593363ddefb578740ce90db2f7996 size 4690 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-zll-library.a index 9492722c8de..376dfccc1ac 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg12p-rail-stack_protection/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:05118ee5e8bb6bf8394e7f3d095eae33b55aab49f575696e5238ddfa818bd82a +oid sha256:d1b0915279030e29c5538d02098aea237d32ad9afb20d3c6b9869b5e893accfe size 13152 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg12p-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg12p-rail/ncp-zll-library.a index e22028829ef..f2e5ade6b5d 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg12p-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg12p-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03f43ff74d101966c5ae5f9e99a8b59d80a305ea636191e0fa60b5bec1e194cc +oid sha256:9f81bbc44532bd4ec7f5edea99dc08b374e72bdcba0c30add43723042b2f45f7 size 12532 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-zll-library.a index 81031a22137..c78b6cddde8 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg13p-rail-stack_protection/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5c1ee54afe36057cfe012a911e0f5da3ea9b01edeff7680083d58ac7aaa25a40 +oid sha256:9ecfa8450945f9012fdc63f9140c434eb9b4d32c43a29196b8109532403669ce size 13152 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg13p-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg13p-rail/ncp-zll-library.a index 1902be28eae..a086a7e9332 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg13p-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg13p-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c02251f827703d2d32e42bbcd08de234951b3614491f281ebc785e42eb146607 +oid sha256:5500613512b7ee9eaa1260d944e5331d3f9c780a1d88ae892f9a023c32d50eab size 12530 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-zll-library.a index 5aff316c473..e3505792cbe 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg21-rail-stack_protection/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:46fa6af095fb78da44cf1942fedccc0567fede9c929a0361cfc0ebeab3819827 -size 13154 +oid sha256:6e89f2ef90fb25389be2c4e8ed0459aebaf54325d4e04a336282e98576298a5a +size 13150 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg21-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg21-rail/ncp-zll-library.a index 250383856cb..b7332cec8c6 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg21-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg21-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d64724223a98ac6a34984cf3a64c0e7c2de298a4ac60d1fd5cd40d6001e66718 -size 12534 +oid sha256:ce27c41f3e57ff4382a4df88219fdbda118093b2fe978817e03ced9d8a01360c +size 12528 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-zll-library.a index 1a5c5e2eef5..9ccc5b58010 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg22-rail-stack_protection/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c382ab0f11a5d30b58168813d86c246e4d0dbf83a68c0a18cdbb8a3e880bc5e2 +oid sha256:860399a4573484868c9c81738116c36bd87cbcc97c77bc3fb9911d000afc2105 size 13154 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg22-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg22-rail/ncp-zll-library.a index 1648fc7653f..bc87dcb008a 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg22-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg22-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c792e2eca868eecb0b762b471c9149dc0d51e65606a63e9081f4b1e526d2c7d2 +oid sha256:8e54c4a991607588d4ea06da76f2d9599eb1b2c3288ba4ef8dd23f148a3f68c7 size 12532 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-zll-library.a index f4b12085074..86fef1b9607 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg24-rail-stack_protection/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:783429a0c358b964656a12c3a2546fd0a68231f6cb595ccbcee46e755035f7ca +oid sha256:31470f1f83a892cc2e129a5a6c20b337fe59baae795676045f71ea4a08703c54 size 13154 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg24-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg24-rail/ncp-zll-library.a index a7779c93849..3d0683a5183 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg24-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg24-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fbe7d18f4e328113fad9a5b6aceffc6bb7fd4778c92c3e34f0f47389fcc70eda +oid sha256:f8888ba19e90fc8aa8f04eaaf942745966c47d358d61d7397866b6256a7ab116 size 12534 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-zll-library.a index 055714fbb6f..68f87b548c3 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg27-rail-stack_protection/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1cfaf8e0582060f307a94068d154d245ac3d89bb4f1ec020e0e6688af21a2d8a +oid sha256:b944a59375c4011cb0d301b01638e695ee889e4de003c64782ecbe0132be9399 size 13154 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg27-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg27-rail/ncp-zll-library.a index fe7af51b9b1..6a66b56359f 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg27-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-efr32mg27-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7cab76e820c34a8dc00623db4ae5dd3db5ab2aaf96b66c4d0bcac744dc711065 +oid sha256:16e2646394618d7e75303781a4b3a580d7f88cb635b7350cf43c4aeb5327ca93 size 12532 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-zll-library.a index 274e125812e..820e565e0fd 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm12-rail-stack_protection/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a1dd8cd6c49492fbc957c3d63f48b20e3d112adcc926c23ee5ed13cfe254039 +oid sha256:86d234a26382ca467d955bdf9d0668e47b51212aac82e57c5df8afd0affc95d3 size 13116 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm12-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm12-rail/ncp-zll-library.a index 1a80e68caa9..e42e8c1dfd3 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm12-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm12-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebbb8a36f49734a5be5d2ae4c2142a1a0ecfd57d35980cf2646ad76cfc490272 +oid sha256:4801c1caf53bef44bde94063bed01537110e58fbaf9c0723ea0244890052fce7 size 12494 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-zll-library.a index c44371e800c..d0dc5147da3 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm13-rail-stack_protection/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6ca685a74941d2385c709ecd9feefaa98a0cfbe2280c04d230825985e8d3534 +oid sha256:9a75500a92ceb774f2e8ff1ec30af2183b033d3911204bd9bcfebd4a58b561ba size 13114 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm13-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm13-rail/ncp-zll-library.a index 34bbb682949..74b60446891 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm13-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm13-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8c3cef904fe9358544a2a2e6893efbbaee586d1d6701cd977df32c2c1fa09b6b +oid sha256:c378a0faedba56ed7daf71722df7a369c1dbebb0d49814b6be87c085d7378888 size 12494 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-zll-library.a index 6f8141971e9..7e91baf4582 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm21-rail-stack_protection/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cea06ccd4834191c91166157558071c1bcbb5de24bbe0e914aafaaa2e9ed38be +oid sha256:897789ed2d08762b4a4c3af6fb453243011b91bd4050a2e00461c0037ab6b2c9 size 13122 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm21-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm21-rail/ncp-zll-library.a index e6912758a10..246b7795d6f 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm21-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm21-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4899815e9cf4b8bb558dbfca655a74adba50f9c76f1e7a73b942f23c06f1229e +oid sha256:6fbfc0564e51ac43d8faca8b630bd7721ef56c18522ddaea90607617a6f7af70 size 12500 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-zll-library.a index 2115d72291e..bdcbd974609 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm22-rail-stack_protection/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35279bb0ca0966acd3d168a906d496c41694baae4fede934aa29a390afa16fd7 +oid sha256:49e2168764ceaa3e85d17aef7f1907ad300b1dfce018088e5f889a16bd116432 size 13122 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm22-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm22-rail/ncp-zll-library.a index 8665c2cffb3..8f6b7ae0562 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm22-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm22-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86a601454cca08c8f2f0ae3cdc6d57612155a22aa40d1c61013342026482b96f +oid sha256:f8992e3592f89e0fb6eabaaca1e4683fa9f1cc1ba92d9982e3506c9555a8170b size 12500 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-zll-library.a index d9c404bb789..9ab984ce4eb 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm24-rail-stack_protection/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb37e2532b03ff82974ef3930aaff5bcad613256931b519dad2ad9ff0f77762a +oid sha256:8b87fae9d1e341f04b6fa397b6d63b1a298e48bc9b9fa2577ca6732a4984e0ad size 13122 diff --git a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm24-rail/ncp-zll-library.a b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm24-rail/ncp-zll-library.a index ecd909a7c49..89717d53887 100644 --- a/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm24-rail/ncp-zll-library.a +++ b/protocol/zigbee/build/ncp-zll-library-cortexm3-iar-mgm24-rail/ncp-zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:16979518937352f7896170a38b9af135a0743807e305043013a01d3bca5a0712 +oid sha256:08eac63e3d611f597b6ca4069b70bd5ce651da59bb91eabfef26b9452766d496 size 12500 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg12p-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg12p-rail/packet-validate-library.a index f87a65944d1..d0e3c560869 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg12p-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg12p-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20df9e797534bfaa3cdfc05605be4d9b21d275c1d20dc536eb0d832af9ecdf10 +oid sha256:a917b4003a61539d2f5f47e40cf37047964f0c192adf26bc4903ab0f3b2c80b5 size 5238 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg12p-railgb/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg12p-railgb/packet-validate-library.a index 94cb2a2eda0..ab437140cc1 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg12p-railgb/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg12p-railgb/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:329235c5d27577dcef7ab2b2ea0967719d83a3a5d295fccda5274ad1861b8dee +oid sha256:c94cd6641feee77196431046f05d14935e03bdbc813967eb567c603301ee3aa1 size 5238 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg13p-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg13p-rail/packet-validate-library.a index 9c63dfc8137..b5b94a40ac0 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg13p-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg13p-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:318db5711f8711abd0ef6107403ecd60accbda8c77462f7f546646615dde7076 +oid sha256:2c63febe19f2a92104fc6a5a53c26b203c34c7a53f1e9ae84868749650e3429b size 5238 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg21-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg21-rail/packet-validate-library.a index 998af6a5b7b..9fcd30acee3 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg21-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg21-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0999a7ff87b3bdea6a6130e9899e0143a897e0948f3903ea34d817b9904f3062 +oid sha256:9d9321ad5e2b21e4d55150866fe1fa7737e2ecdd877d19d9e6261aadae6b831a size 5242 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg22-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg22-rail/packet-validate-library.a index 15b1e109fe8..ba05ef36a9b 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg22-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg22-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:00a3580abb22865cc80c0bc7293037e44f93ac3a29fbddd2f9b26660aa8c03ce +oid sha256:01e69d60d3f0fb59b495e0653a024a76a1b06925f85b2ecc1dd14f98b1ee5845 size 5242 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg24-dualrail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg24-dualrail/packet-validate-library.a index 7e06379e893..9fcd30acee3 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg24-dualrail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg24-dualrail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e6604850f76245c49348521d6de2dc0cfbbd6e032d172a77cfcea88e661ea44 +oid sha256:9d9321ad5e2b21e4d55150866fe1fa7737e2ecdd877d19d9e6261aadae6b831a size 5242 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg24-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg24-rail/packet-validate-library.a index 25786c67c0f..f601d43a824 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg24-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg24-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ffda999a238d64d1b2faa83287f70d9b5866b4ad108af7eca5abaee8f868cfe9 +oid sha256:aed02204e2c5470cd8a6ed868212fcf8f36d34646e909fb80f87e89e015c97da size 5242 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg27-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg27-rail/packet-validate-library.a index 7e06379e893..30e04b5f3df 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg27-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-efr32mg27-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e6604850f76245c49348521d6de2dc0cfbbd6e032d172a77cfcea88e661ea44 +oid sha256:01d103e64e3a2f5f1602d88f8eadda0c12d7899f49ee6401b8d65b4334376cf1 size 5242 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm12-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm12-rail/packet-validate-library.a index dcde327d130..b6cdd2cbb94 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm12-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm12-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf80fcd9e60b382ff019aa4e389802823f47eb8123410d7051efbaa47d9a6a00 +oid sha256:3b31d757682021c0cf89d6d8fd7259eed468f6e2ab4969b1c3dbac7681ef011d size 5238 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm13-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm13-rail/packet-validate-library.a index 71e607393a5..9764ba69601 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm13-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm13-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09b3bcfad51a683bf8a3a93c284ae9d104105d714bb6b0dec61549058f487bd5 +oid sha256:7b18a4bbbd54e18a118cdf704fb5dd7438d96f8af519eadf75356baa495126cd size 5238 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm21-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm21-rail/packet-validate-library.a index a5cfb69e6a5..4b4f56248c2 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm21-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm21-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c62077ffa427c5e4320c17fa708e1d5398cca721c88fb442b45b34f731504c6 +oid sha256:55bda447da747d2205ff3f11ac6ac263eef099af7a30593690ebb49d8c62cf13 size 5242 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm22-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm22-rail/packet-validate-library.a index 693880c8bf6..b9301348ca2 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm22-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm22-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:859ba1f7d82d71e5b4c7703dd193d3b70153d27c8d555bb31da28e6a1514d692 +oid sha256:d6536a598c55955060f3ea728a1643e3a3f1391a57f1cae25054e17dd5fa59c1 size 5242 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm24-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm24-rail/packet-validate-library.a index dabb0fddd82..01e90c7d4f8 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm24-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-gcc-mgm24-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:231e0fad5896114f8f016694b3803daacd75c232429b8c9f95fe68a6100347dd +oid sha256:35ba35c4ca1240a0aac477bd9a73212fcd86b6232dcffd12d8be6601e3470957 size 5242 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-rail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-rail-stack_protection/packet-validate-library.a index 767dd7402c6..4c428faab3d 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-rail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-rail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7729f1b9a5e64bdff251fb0bb1c8f24029157dd5cd5fd9f4a8476b50e6e3a3c +oid sha256:eba2787f8f3cf26ee8a6e0e89bc0ce49d00cfbb3f4dee678e689cdf995f4683f size 14144 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-rail/packet-validate-library.a index f375ea7c2d0..c06d6799545 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d63f2bdd0735ef2d167d6363f82434d601ca523494e3b8b3c092c79c2b1e70a +oid sha256:e0957e54ff2ac7996af6107f3e8645b068f0c81a6a3327b329101f9fe247459a size 14056 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/packet-validate-library.a index 01b26b50f6b..e0cd1fbd9e4 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6072057770e5218fb4e666396dd67d909b486efce95e75e1442643e7b8edaf13 +oid sha256:3192f5b9d78e71777082ad943a8ff704b1278c359de9bf2f7e994775f29f4231 size 13752 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-railgb/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-railgb/packet-validate-library.a index ba80d7706ed..cba2873349f 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-railgb/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg12p-railgb/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e802fbc0cceca186d65e82140a895abb37d72fd4b8074afe9835b3774c8e9154 +oid sha256:4b44c3c54451262936a5917eecbf833d73269297f8dca1482d482527143f031e size 13664 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg13p-rail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg13p-rail-stack_protection/packet-validate-library.a index 9ced4d434bd..5ea75077ee9 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg13p-rail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg13p-rail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c1708524ae2ae8f812b351df86ca769baaa2e978f742634aec03f8d06d10b9b5 +oid sha256:f9aae0e836b2a860b1951b86cb38bd20053531656ce88b30144eb81f03aff714 size 14144 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg13p-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg13p-rail/packet-validate-library.a index 352ce424b16..bc57808dbdb 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg13p-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg13p-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd30bad03b4576a81e9ffcaaad8aac9449049eaa339bded5765c086030154433 +oid sha256:545e0da639c19adf0eba47c34a562248fce1af2cc8ee1d60dae10ff97ad5e2a4 size 14054 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg21-rail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg21-rail-stack_protection/packet-validate-library.a index 234acfcd23a..3a3bd23bc2a 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg21-rail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg21-rail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e266040cb0183929bac7e46b5292d52c0b32cb0fc06cf42da9eae925d55da9f2 -size 13934 +oid sha256:222f42e311679b649a929d933f2d58e9c01ffb665c1b397cac6c0f83074ed206 +size 13930 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg21-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg21-rail/packet-validate-library.a index 13787ac6a7f..952b58a4561 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg21-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg21-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:37155d2b1842e43057e3e32e3b70238a59fbb685947b5520fa655e0264486bcd -size 13844 +oid sha256:578d8549ce6a0b10d03473f3a553069fdfc0d02091590923843a37a12d4327b6 +size 13840 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg22-rail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg22-rail-stack_protection/packet-validate-library.a index 93eeec25025..346ba5c180e 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg22-rail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg22-rail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb674995152b24017fdd9fe01fe0350a4c9b1f908838c165d9f2322eaa10b1e7 +oid sha256:41e4141b452f0dfc7362be13bb67439cd40099b8207bfa06f28cc17a2d63eaca size 13934 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg22-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg22-rail/packet-validate-library.a index 563570f2077..708dcad174d 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg22-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg22-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2db08f06b42f21ca606f586ad6f26b83da0512178fc294e3c724298f6e8b827b +oid sha256:c30bd95d3cedc1dc18e1f80910e41155b1dfb5dfe664309db9778409843f2528 size 13844 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/packet-validate-library.a index 9b86d7164f3..421662b0e0e 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3d16053431826561503fe12f3d666e9055863f39ee440cfd48ad45ba0c6655a +oid sha256:21a185569037afcf3dc0e8c873586cc34e193a7e46376fdbf1500c6fc834f2df size 13548 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-dualrail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-dualrail/packet-validate-library.a index 44e34cc1399..3e0fdd3840b 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-dualrail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-dualrail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5846f10c45f7230386962adea5ba3cc4fcf5e42364e6f0064065df507a5a9d1c +oid sha256:183f97c4380cb1cbd2590d35483369e3c431cb55ef77087fc77a462e639fbcf8 size 13458 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-rail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-rail-stack_protection/packet-validate-library.a index 7852b78a981..cb157222f4e 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-rail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-rail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:673e75718dcd86424b73d615614cd369cceed950c0513e38296a9d705cae20aa +oid sha256:a317457a31d71ce9d7a7c83e5c7fbf7b318e1ac8e60c01b4b4a9679da1848dd4 size 13934 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-rail/packet-validate-library.a index d2393e15c09..878ea5b2839 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg24-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4dae45f0e173b2cc7e2b4f2ef6326b1630b15b5730a336fde567e8568458f248 +oid sha256:5bdd85429f36298eef83d6f19218451855470e7e9a62c240369a2ece1bb97066 size 13846 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg27-rail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg27-rail-stack_protection/packet-validate-library.a index 3ef4e1800d6..3b380924fff 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg27-rail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg27-rail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0cdf84bae5ae5c5de4518bbaad7cec4043ce494aaae1a85448c1d1cf6b3ff4c6 +oid sha256:bc2c9ccaded95d8dd6ad99761637ab6c366676f5b59837c13aae193d7e88f9fb size 13934 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg27-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg27-rail/packet-validate-library.a index d8895384263..55afb5c779e 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg27-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-efr32mg27-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13c3432f6a5c6692475753af857429cbca7fe5b9762a70cc9a022632cfb04c85 +oid sha256:7aa61136691fa77e5c79733991dd984178382a8e5977e3b01a5fa8ecdf0a8369 size 13844 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm12-rail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm12-rail-stack_protection/packet-validate-library.a index 0278b178944..59a4c2350fa 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm12-rail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm12-rail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d17f46e3171db4e936dede65123c80fca12fbd9f66e30efe4f31142a2143b44 +oid sha256:dc7e9088958506682d865ee0c1ddd365901a56c4c814718c16ef47a0aefe31ac size 14108 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm12-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm12-rail/packet-validate-library.a index d43536689e5..a51580b699b 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm12-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm12-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95d914acd04b82aa34e07a28c3817b49184c830c7aa5b81a799dc6a5df46f73d +oid sha256:9152c1de7782bcb2e224b3acc2525c5f09af7f1c108636a669b2cdaf32d4003a size 14018 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm13-rail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm13-rail-stack_protection/packet-validate-library.a index 4297575998b..bd60790452b 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm13-rail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm13-rail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:195cc69b53a7560cf54ab5e59387ad71bbbfaec92b095914f8764c724e8bf055 +oid sha256:43b44836e74a4cffa579139815efb4b2365cc17277a6da6fd9e40f7e99e2983f size 14106 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm13-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm13-rail/packet-validate-library.a index 17b9fb0fe09..a833c5213c0 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm13-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm13-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90d47b0c54f40d8a11a7c8d392146d153ea09a3c7cdd382be338912a760d302e +oid sha256:e97cd4207dbfcd363ebb7664aaa6dbe3faa36a602b8f87267e9ec4e6831c6538 size 14018 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm21-rail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm21-rail-stack_protection/packet-validate-library.a index b4eef75c14d..4776ded855c 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm21-rail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm21-rail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:45ae590c5ec1e2617884839d163a0e75fc4f344367fdff1ce0033e9c6f0b4a49 +oid sha256:57cea47a8bb1a1ebd001abe52c37cd74d6727292ecb9993a65e26e4d577d578e size 13902 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm21-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm21-rail/packet-validate-library.a index 589e31c789a..62046aa1dcf 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm21-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm21-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc52f24b230583fbb7449e33189a3ede5fd51f19974f3e0b700feabb3f5674e1 +oid sha256:f0c38a56f305fd1c1fa3e4cdbd01f18ae6d32c41cbe9e551af59a962130c1006 size 13812 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm22-rail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm22-rail-stack_protection/packet-validate-library.a index d97f4f001f4..22a3587368d 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm22-rail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm22-rail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cf3f5eb100d34298b203d18e1da727a5254bcadded7e8f0abbf3e1383a37be83 +oid sha256:caec578b6ae08e9d269aad0e4d878cb5f7070b9710b75e1d23459ead3fd023b4 size 13902 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm22-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm22-rail/packet-validate-library.a index 5f68223e64b..ee19b36a2eb 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm22-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm22-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a978afa9247c42b9f2ef57618cbb509c5b78c40464314f0c47c23efc32d184f2 +oid sha256:e2b2cfc36933c1bd54cf16c71bbdfd385e167268626caed31243c4105b951576 size 13812 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm24-rail-stack_protection/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm24-rail-stack_protection/packet-validate-library.a index 201c65ddabe..1f16e6ae7bd 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm24-rail-stack_protection/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm24-rail-stack_protection/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3a779864d9a174e145eacb6e9dbcabd227930be1d186fec6d17822c5526ad14 +oid sha256:b028dfe85760eeb2738f87890463a6c74305c306c4990765b93b6cee5acd618e size 13902 diff --git a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm24-rail/packet-validate-library.a b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm24-rail/packet-validate-library.a index 7ded8814f65..b6c835d0e21 100644 --- a/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm24-rail/packet-validate-library.a +++ b/protocol/zigbee/build/packet-validate-library-cortexm3-iar-mgm24-rail/packet-validate-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb7bff37cfb866bebf2df61bade6e47c4573ba9fada75bdc8d33c3ca4b65dd37 +oid sha256:656ee81e922470306f7e4e00c43a65785f20b66dd037d118505bd11cfdc9811b size 13812 diff --git a/protocol/zigbee/build/phy-native-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/phy-native-library.a b/protocol/zigbee/build/phy-native-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/phy-native-library.a index 2b6200e7186..865b1054ce2 100644 --- a/protocol/zigbee/build/phy-native-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/phy-native-library.a +++ b/protocol/zigbee/build/phy-native-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/phy-native-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06d55e124c6f893b1b6082e58ee12cdc6ea8814e4d50e33176ca274e9eba4130 +oid sha256:c26fb6b52daba67cb8100914705bf187b3e7752f81bd77cdfce6400837817f06 size 59620 diff --git a/protocol/zigbee/build/phy-native-library-cortexm3-gcc-efr32mg24-dualrail/phy-native-library.a b/protocol/zigbee/build/phy-native-library-cortexm3-gcc-efr32mg24-dualrail/phy-native-library.a index c2c0f916019..fcb1a2864ea 100644 --- a/protocol/zigbee/build/phy-native-library-cortexm3-gcc-efr32mg24-dualrail/phy-native-library.a +++ b/protocol/zigbee/build/phy-native-library-cortexm3-gcc-efr32mg24-dualrail/phy-native-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e0d8c800636fa210faefeb6f9770bedc986354164ecc92f1ae95c1d44984e2ed +oid sha256:43465f4c0b417baccd24a50aef1ddf0a4dfee46c44283bae77597bc785758ee3 size 59620 diff --git a/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/phy-native-library.a b/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/phy-native-library.a index 9fd7e20f754..e682fcff47d 100644 --- a/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/phy-native-library.a +++ b/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/phy-native-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95abf9ea0a6a14e12c2968cef79234b27f83748064b359888643e967c83e2f2a +oid sha256:19dc538c9f67d44964f566923a1163e0c68280e451e73fe3fc4d14883de5a62e size 119392 diff --git a/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/phy-native-library.a b/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/phy-native-library.a index 6b9c781ebaf..77f21542aa1 100644 --- a/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/phy-native-library.a +++ b/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/phy-native-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac12fa3131c2eee5b95a67db4eb509f2eae867afd0973e23ccc8ba38d2c9980b +oid sha256:aa30d06bdae10bbbff5ad89401e3f652552029c9d2f73357fdb9450432423696 size 112000 diff --git a/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/phy-native-library.a b/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/phy-native-library.a index d8374f066bc..4798dba9922 100644 --- a/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/phy-native-library.a +++ b/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/phy-native-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b25f099bb325c3ae38cb8e32afa9760cb546cf8aa4a0bd4787df7f50a9c593e9 +oid sha256:802bc936ddde40fe70fd7607cdd72366cd05e12815788d0432d67c0fc072b85c size 118684 diff --git a/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail/phy-native-library.a b/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail/phy-native-library.a index 57d80f67be5..dfb58b1558e 100644 --- a/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail/phy-native-library.a +++ b/protocol/zigbee/build/phy-native-library-cortexm3-iar-efr32mg24-dualrail/phy-native-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8cd6c413db02e66379bb376bbb8a3e9f6d0242e40606df7792796521bb226a6 +oid sha256:96d130acc8d13f8b607805f8cd7a85c0a8e4fdfca4e34f512f2bbc847c9c563a size 111292 diff --git a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/phy-pro2plus-library.a b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/phy-pro2plus-library.a index a69183a83aa..a50321e64c3 100644 --- a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/phy-pro2plus-library.a +++ b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/phy-pro2plus-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:61ffd40c527d40b280b58215671f206b063cad00cc1a662cd06a04e4cd325ebe +oid sha256:a95adecad23348ea5a7f43ab13609b69354bde82361730f9dfef2909c3c2e272 size 90506 diff --git a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-gcc-efr32mg24-dualrail/phy-pro2plus-library.a b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-gcc-efr32mg24-dualrail/phy-pro2plus-library.a index a7ebaf9e1ce..d1d8e8f53c7 100644 --- a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-gcc-efr32mg24-dualrail/phy-pro2plus-library.a +++ b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-gcc-efr32mg24-dualrail/phy-pro2plus-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:427b515d548bb7860b28c71bbac3697dd40597a1fc83001787ba26475e4c4c1a +oid sha256:bbfd0b5b9a48272869e1fbfa2866de111bad555281ab4d4948516e859cf823b1 size 90506 diff --git a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/phy-pro2plus-library.a b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/phy-pro2plus-library.a index 446e279d843..f93c04edeb3 100644 --- a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/phy-pro2plus-library.a +++ b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/phy-pro2plus-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51e606c068fd6c917a9247b9393804d81791ead331095d105a26de017d668203 +oid sha256:9d2f586cb216ca04440e7c3aa1cfd4d41edf013a2bca7fb6dfd1a902ca4c37f9 size 193290 diff --git a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/phy-pro2plus-library.a b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/phy-pro2plus-library.a index d32cc25052a..597bed83494 100644 --- a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/phy-pro2plus-library.a +++ b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/phy-pro2plus-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09b67cb0ffec1d12f9a403ac47046b48c146c0bec314aa1858e04ac2fe177181 +oid sha256:4894201a0809f7494cd29bf247447462dbd715f2f1c0da77d6bc1d0f7aa84ac8 size 179042 diff --git a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/phy-pro2plus-library.a b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/phy-pro2plus-library.a index 3b694ebab93..25da03bd8c2 100644 --- a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/phy-pro2plus-library.a +++ b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/phy-pro2plus-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1c6b2d319674bad9bb3976ad3e2309edb83dcca0859897288c2044647d246b7f +oid sha256:e68944334d81c1265a336bb908770520f041dc5ddc84a47eb7a700802f1bd2b6 size 192582 diff --git a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail/phy-pro2plus-library.a b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail/phy-pro2plus-library.a index 2df9d1867ef..e67b8bf1af7 100644 --- a/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail/phy-pro2plus-library.a +++ b/protocol/zigbee/build/phy-pro2plus-library-cortexm3-iar-efr32mg24-dualrail/phy-pro2plus-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87bec6ef7940ecec98a245e0dda8ddb47b7bd93a4e7ffd061b598d25165174a2 +oid sha256:c76cd4eb66256afe65a3ce7c6360d6abc7c25c9c41c06106facfde5cb13b4222 size 178334 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/source-route-library.a index 2e6bddf420e..a2b5178a516 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:595f56c3ca02b3d7389590f991c6dd1e321290984b2cbb30e0105ad13437afc6 +oid sha256:b8b84307a31ad96e07fccfd710575277e7d266a450ace621a6c32911a636e2f4 size 12116 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-rail/source-route-library.a index 174e289d4e4..82f9b1e20da 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee66d8119ecb4f18cba1a207f4d57dc220eb98dd2eb65db639b21b4b33f42aeb +oid sha256:10989bea59a26f07b8648693639aba56290ffaeda6f194d6a67fd48f235dc627 size 14472 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/source-route-library.a index 5ff9ed8c719..3ee525fd2f4 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd7d2e1cb70877480f6cf0bbfc42d691950183c0ba5bdc3091d05fe1e033a733 +oid sha256:182198572fe0b82e772dfaa4ab4b03bb439df73a588579fa53c6df0291741deb size 12116 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-railgb/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-railgb/source-route-library.a index 94fbb4065d0..d4ef3dbc90f 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-railgb/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg12p-railgb/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1ef225d2a39c2bd951063d856ae6e2cdda3d04e5f8939fb16f9d108729d4dc62 +oid sha256:0f59f7c628d19080da68045ddba002cb9f51225a3fef89bf675fd3e2926d0997 size 14472 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/source-route-library.a index 63ee6fada88..fed60bd8f91 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13aa292cfe66ae6b746c5bd5f89a5d6a5503a6b8e9a137e041937c37d884b6e3 +oid sha256:b782a3ede4582c6e0b8ad3e8be6201289e58b4ad2127a67b1637c61938a3e087 size 12116 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg13p-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg13p-rail/source-route-library.a index 5bd19015a41..4775b25d9c2 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg13p-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg13p-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:82ea14d7a6a085c6805674d35d183be0100de73ef2e5036f57c607956022bded +oid sha256:e52f313a1eac4f13b67581b052681d2446feb5398fdfbc3d6cd973a5cc7a5f13 size 14472 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/source-route-library.a index 6bedda4305b..191cb99d5a2 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72f97acee78946f45f5af1f687100a1bac1b81ec56dd2630e1440134ed11d8e7 +oid sha256:8d4dc8252c328c661e1fc3206bcbda5fd26c493d5514655c1cadb07516ea0e3d size 12108 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg21-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg21-rail/source-route-library.a index b65636587f8..b112a896fe6 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg21-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg21-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ea2b7ad4e969292bf74492728a7b0c055ce6104eeac6af1d4b05dd580e10b95 +oid sha256:86bb8c06d7a4b3a423fca6647ffdb8a41fcd85349043a34387c3f5452274a8f3 size 14372 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/source-route-library.a index 6bedda4305b..e3d25339f91 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72f97acee78946f45f5af1f687100a1bac1b81ec56dd2630e1440134ed11d8e7 +oid sha256:91efb1ee023dc4e187681e550bf9cd6d8ff5b702045d837a2d44eebb3d76bb79 size 12108 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg22-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg22-rail/source-route-library.a index 834b8fd331f..fdfa8617510 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg22-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg22-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a6f9308a43591fab8c3d36a69ae4ea9b25d68e3e20f29437141ee09369719d2 +oid sha256:512f8c271852807e9e5c38e20ad2d8d4fc067c7745a33821b8f13db7bdb44f54 size 14372 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/source-route-library.a index f942931335c..191cb99d5a2 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4abdb69dfae8b7c353731d94cf159d107c1b0b45e18a427207e109359a26ca00 +oid sha256:8d4dc8252c328c661e1fc3206bcbda5fd26c493d5514655c1cadb07516ea0e3d size 12108 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-dualrail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-dualrail/source-route-library.a index 02c7e5d1358..b112a896fe6 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-dualrail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-dualrail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9e2c8d13f4382b3e089949659cefc1d4afee573aaf7e8936dc90dc3f7e2af1f +oid sha256:86bb8c06d7a4b3a423fca6647ffdb8a41fcd85349043a34387c3f5452274a8f3 size 14372 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/source-route-library.a index 8bc1d8c2167..13bb0fd9db1 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d5d1bc6e4d60d70cc99785c56bafa3d1df9f6b94f56e0a45765499fa88a1e5f +oid sha256:48bb917c8c9ab16e655248fcd01e11a56896671f5e67587933342ef6c13c6e8a size 12108 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-rail/source-route-library.a index f022fadb8d6..a5cdfa80637 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg24-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e7e2c93ebb82e9ba598df5eb68070afd2ab33b9ef74f67ddc0e8102d93b05be +oid sha256:ff6114aea0bf22efa110754f34e7bf48c6bdc6a7f33974329521182447d05cae size 14372 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/source-route-library.a index 6bedda4305b..3c27224415d 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72f97acee78946f45f5af1f687100a1bac1b81ec56dd2630e1440134ed11d8e7 +oid sha256:5c47e4e0a24850ac2c8d2a387b370f4e7533f545cb3129cb6d643e8fb7fe8b15 size 12108 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg27-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg27-rail/source-route-library.a index 02c7e5d1358..fdfa8617510 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg27-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-efr32mg27-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9e2c8d13f4382b3e089949659cefc1d4afee573aaf7e8936dc90dc3f7e2af1f +oid sha256:512f8c271852807e9e5c38e20ad2d8d4fc067c7745a33821b8f13db7bdb44f54 size 14372 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/source-route-library.a index b27d2b06a77..c1c59b38a57 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8fc2390fad8f2f2e638f73ddd71134bac2be4dbadab84be2a175b2bc62343aa +oid sha256:54a004808242ef64715b19e30217d4d6e481025099ea4cdbca453b15a399702f size 12116 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm12-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm12-rail/source-route-library.a index 914d37b9847..f1558fe17db 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm12-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm12-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24598d6626c3e27c2b493049bd5fbcbe7fd878dafca7e079c6af57dd17f0b744 +oid sha256:cabab9df567195277d9a6133217efba767fa90820413df8bd5284b8ab58b1560 size 14472 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/source-route-library.a index 410f1367f8a..120af2e1b10 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d4374d65a016081d7173de2fba70ed94896b89c3a3784f4f070965f82d989aa4 +oid sha256:68c7ef5993a101d7636437864aac08d69f7d073df93b6218285d1193f35aef82 size 12116 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm13-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm13-rail/source-route-library.a index 79543ed2027..00ceb7b6a38 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm13-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm13-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2167a1d207146a61d6d088af8e12e17a73d6c30bd6fbb9f78a125f779ece032a +oid sha256:a89b0a852b4ab19d922983af759a254e88059124576613991107887855ecb7d3 size 14472 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/source-route-library.a index 6bedda4305b..0a874b0f240 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72f97acee78946f45f5af1f687100a1bac1b81ec56dd2630e1440134ed11d8e7 +oid sha256:c7c8403a9c1a24dc4a7c9cd517af1d06fa346965480168fa1343f7be2d7bf94a size 12108 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm21-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm21-rail/source-route-library.a index 8511be5ffbd..f91d12de98f 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm21-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm21-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a020d849cb3aac4dc9441805296f1b5f5db0799d8ccaf8bb2fab8e9610624a6 +oid sha256:16ad01300d11df5f52b2e45edf4b23218df33f9d1709ea7921b1948694fd30fa size 14372 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/source-route-library.a index 5bf38486a85..0a874b0f240 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c9a42cacff5a07c880fdb19b01005b0b75dc301be8ec44184bcbc320bcfcd09b +oid sha256:c7c8403a9c1a24dc4a7c9cd517af1d06fa346965480168fa1343f7be2d7bf94a size 12108 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm22-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm22-rail/source-route-library.a index 275c22ceb05..580734bb81b 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm22-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm22-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4a148061dc1efe9898cbc84efa4e4d73b02c713a6d44d768904450f2a238ee24 +oid sha256:a07dc0b7a7a975f231b2b29e240d55df58cdae4021452e5aedbc96d7e4917e12 size 14372 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/source-route-library.a index 5123f1e66f8..5b54e1d9a45 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a15fa77bac8076a236dc7185a34098f177d67a55fd985ed1f738acf0bb564303 +oid sha256:ad26985f437be13f0859cc3fa59ee4017a6d52dd35ed34d64818729f8dbc636b size 12108 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm24-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm24-rail/source-route-library.a index 411b9ad18fa..95aacc309d1 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm24-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-gcc-mgm24-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35fc4b9e77434838f34b6c51d53f468a5985540be2af7d9d44fe8ba5fd474957 +oid sha256:db556069fb1618f49b0595529014f466897d342cfdf56597666d5999d062615c size 14372 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/source-route-library.a index ba6879d8d18..a28342a2d4c 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e3d4a8c2a8573ed885c2148a0cad22d6cd07cba4270e4a4f27e459b4234b3c73 -size 25284 +oid sha256:d4b9f87f4c86be784f4033da9ce118acdafdd444386a75a7cdfaea5e44e5f274 +size 25282 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/source-route-library.a index dad659f4776..897da7e028d 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:424d5c39c71bf359cae82f453e611addd7a0c4c2858f2d62f5fb58041945b53f -size 24658 +oid sha256:0790ee67c6175cc185bb95164de2dacac5dc5f6c739f50be2e22c988bff28a4b +size 24660 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-stack_protection/source-route-library.a index 40371822a5b..7f9bb9745ee 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:059bb7278be1870db983e755b17109bdf62717a65212327e7f376f9594f751dc +oid sha256:d3dfd29d8ffc530d5c4d2c71a308cf76003020d45340a22ecdb90d3539b4fdea size 40220 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail/source-route-library.a index 97fb72bd314..e1c4edf35c1 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:36a2ac7e9f82d6a8c0576ea7bb14a90d4c3c8dfde224467e65340d54adcc8e88 +oid sha256:630611b900d9b2693abb8f5547e52c79c44fc50a500039bc446662327161c61b size 40290 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/source-route-library.a index 44b3bd4b9f2..9c83bd4bf41 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e59f89d0485c8acee380a1577b1f91301d2a138e84be56b906b515e42e62aab +oid sha256:94f26491fa0a9750ca3390efdef6223304fb689abe8d57b41b07a7390a08d773 size 24504 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/source-route-library.a index ae8b64e46c9..98e0a900f87 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7edd2dc513899ed699885180229339565a84c095e57314fba8c046817fa23bdb +oid sha256:663d58bfcb67ca49a5e81b15cfc53518f4fa7ac58fbca0616b0abbaa3b1d2213 size 23878 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/source-route-library.a index 155e284b3b8..b0b3b4ba680 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7ec9aa1b78f85db2be32a4400898a8f8ab426d7a8169fb81882b1825c85b743 +oid sha256:daee2bec564d09786d40ae7618aa1d6340ba317cd24df9e20d3438fe080c2602 size 39442 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb/source-route-library.a index 4e2947af9e5..ea034c7c1f9 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg12p-railgb/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a78331c188c1276853946b3f0d7a7ec6948a1030c0c5307e71149cf54fe09987 +oid sha256:67bb4800574318922ef60f3bbfce0eeab8632ac52ce57e369f7af5ad568486eb size 39510 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/source-route-library.a index 171c4286860..0ddab94357a 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57ba7108e653eed6ece10dd77cb8df4cb9642c4c60ff5c804a92c457a1a508c1 +oid sha256:bba5142a8dc9df4367a9e2d034f7fffd2403fcbf8cbe2a3b1af72265766ded2f size 25280 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/source-route-library.a index de7f5b6aa9d..5c350c3a5d1 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2fada7b1613a3b1359af874b22039d635618b256432be1edfa359489aa9c0980 +oid sha256:00bcfe340577dc2abb8fc714c909c8e5c14bb72a629cc80efaee270e7d046835 size 24656 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-stack_protection/source-route-library.a index a46ec9a6d3f..727511097a0 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9829eee02fcfff5ac68653446510d8d0131056cbe9bf0576302034537f19ae71 +oid sha256:45af0f5bf53bc989137671f7e4337d62e93dac5a61191e1a437d4d70b544edae size 40218 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail/source-route-library.a index a92ae2f315c..6987c9f92c8 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg13p-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e6c4a2800dc9658a0e324949813b652c8abd52227955224c966cfd8fb938b04e +oid sha256:297dbdfc3ff0e16e1f134f18626e9c6b36ba4a3ccb9d57f99586445e4faad907 size 40286 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/source-route-library.a index 09136817960..9165b979921 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2562c99f3faec975542e10899cc5fbe797a0543f62e9e921d83b6ae0c9247a65 -size 25286 +oid sha256:2276696be61f5fa9f67a8c95fa48e2c391ce99043d182460c0264e2fec897a1a +size 25276 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/source-route-library.a index b0da10998ce..ce7d6710687 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dfa62739fead113eb22a99048a62b4853adfd1c2916dc7bd3a3995304ecfa7bc -size 24660 +oid sha256:0cbfcd25f80ae896b6891f3ae55a0f9756dcedbd49ab774c1ac5415cb9dc438a +size 24652 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-stack_protection/source-route-library.a index ff05bb4ac2c..7fb3780ba40 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3aa21dc19b6661c761a7e3aa18534b146a50f7e618ee25d9f144513c19f975ee -size 39404 +oid sha256:4b8c4dae4c1e4463a00fba7f5f0fb00874a3b50847801537205694fd617094d4 +size 39396 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail/source-route-library.a index cf9d6ef8fd9..a66e53175f5 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg21-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:442110c63b8e643d0304395fffd07007b24d363c0a37cb135b855a5f587e6f84 -size 39762 +oid sha256:e18bfae35b2ca22469695d44f954d967dd5393192a891bafcdd13fc04a29e52d +size 39752 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/source-route-library.a index 5eece5e3c0b..5754c2fdfbf 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4737e5f3f347cf1c0b5eb59917948777fa6ec88432065bca7fad76ca7eb4c778 +oid sha256:8362c1eff048996eb18fe86c14f76712f8eec5b60737fe12a286984c1bfdd15f size 25284 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/source-route-library.a index c9c81132cae..e452706f87e 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f88d539a125045638d23f83c49ba7a024e0cbeb960a6502cf05f5c269a32c5c +oid sha256:256bf299a95c172f80c720b161abcfd99e49fa8561c263318c8a0a3c49fc97cd size 24660 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-stack_protection/source-route-library.a index fe0961c21ac..9661751762e 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0120dfddf70ab138844bf7e86e4aabfcabc82c3f2426edffcc214138f8b6611 +oid sha256:92ad305d98f1b4bdf3f73ec27ee14c2d99e7b821e6526c525a1df879bdca0dfd size 39404 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail/source-route-library.a index 022a88aa694..845d34063bc 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg22-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39d29d02fae2835bc469b9ef6930c17b24cf133f32b4c81d7bef71c3c4e2fef6 +oid sha256:1df995fc53ab1cb944ba72cff210d6e2a9bba846fbeaf6dfc80adbf174eb5c7a size 39760 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/source-route-library.a index cebbab52f3b..6367b3805dc 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7d2ff64b35dfdab3fe5e070c2fc2d21f52e04e8925571418996ea0fb7fc18d3 +oid sha256:c70d4f7e2c7dcafb2c697fafe78008a998ffa6a6be1219eea15f1d76688db257 size 24516 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/source-route-library.a index aa3658bdbd2..25c1005fe77 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:da987741600ba3d13fa1c91b2711885e6284d0844c907eb89fe29a5db2f209f9 +oid sha256:2feff91d269c38a18c2f5536bd8c249ef753aacec985c69645e883bd6672fec9 size 23892 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/source-route-library.a index a6950e211f4..1440ebe34b9 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f587504cae7169c92d762d7d6446a1e8e632351ff43a94f4afdf201d2475adb6 +oid sha256:fe33fa0f04bf96fd1f33a186fc4ae304edb7806fb0187541be0f2cb471e8a5b4 size 38636 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail/source-route-library.a index 4e8948c01da..df209b7f9f2 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-dualrail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4eab1da39d1880bcb3bb8e5c2786e386a3b7d6583d9ca7d24075299cafe59792 +oid sha256:cf9f78a723062339046145cc543285f08aec00f3e454696ed1952c0ee6226dd4 size 38992 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/source-route-library.a index deb407e698d..2f8b0080a2c 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed9926609ef01852eb00cbdf6aecb7503a6d338a0c7e61ebdbb634aa2f3f9c86 +oid sha256:dfe8c85d342af958ebc34694813b49044c8a59a3cbf9df7bc90a22c0cfb5d630 size 25286 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/source-route-library.a index 63aa58b1484..e4946ea7f13 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d96f9b90fbdbd4dcd209ce7ea377dd986da416a7d04af1f1639e1b39c87f15a2 +oid sha256:7b89f553b9da46a74c257262b9bc2b082ff0fa6c80ba0da34158df92c2931bcc size 24662 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-stack_protection/source-route-library.a index e7b32ca077e..8c5e248fecb 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e278268e393e8ffee1f4b49c7530df2cd01247f79e092b68eb8d30334f9b4430 +oid sha256:d3ad239b96648f0867c6b8f14899b35fb2d82fb84a7c218206da100a57f2a6d1 size 39404 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail/source-route-library.a index aff81e8bbb3..78d8810055a 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg24-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df4e1b6da74dcde5ba5e7812ea2eb3828ad4ae2cdd9f3757fca0ce95eda44fe5 +oid sha256:7f571fd7e8a7914b6cdad0f4d108bfd42983ec064d0396912831e6ee704fc483 size 39762 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/source-route-library.a index 6e24f8e976c..3321cee9a79 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5de36df2e66b2faf312b23fe6c2e12ec95e957a86c9710472e94ce94b0576d5 +oid sha256:2c1a0156ed46a79a769676d67ee9722e4a5e5a2563e768890cfbf4b1efc39179 size 25284 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/source-route-library.a index c7bba84af31..3b02612732b 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2769b2587666438d01110b9820a1c8da40f8350ab5225930e490864e29a82d30 +oid sha256:8e9f0a71947334d84296e6edbb9e1615de39ce355647b28f991f08f1e80d706c size 24660 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-stack_protection/source-route-library.a index 3a0084fce01..ce35ee8697d 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1469bad3d59dc993640e37370fa50ebb4284c6450e27b4c315fd6c4a8c35421 +oid sha256:6d7d304ea78d5b7bbf79057c3d7b3fa25ec6340268cc6ad679f721653f205e51 size 39404 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail/source-route-library.a index 53e23521727..be45fad1079 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-efr32mg27-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df97858d74ce5f7fb6aa21f8d8ca57e4a006bf80ce9f56fd0ebfd844a5e4504b +oid sha256:bbea4b6efcf56288af45c5859a0ed774fb75e2a2fbbb28e1be97c4a38bd1e61f size 39760 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/source-route-library.a index 0578a5a4b5f..8b43863ff61 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7dd7b510a185237bee81cc291441871d6ab221907fa36265c3a1a250b73a14ee +oid sha256:382ecec2c09012011f6b5f601e5bf1963236ec3088042e747438dc4a5f6e44b0 size 25208 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/source-route-library.a index 6bfada9e7ee..25f4506ba15 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8ee97b5666b4aa16ef709d742af4081e3068582a3efb6f41b37f43bd80b3483 +oid sha256:96d8b989a8cd500bb61234d4c6335ad58d9a1b0ba08e7b11ac2b89b158134d86 size 24584 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-stack_protection/source-route-library.a index 6a9830ea02e..ab0e4effded 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f042d18716d9e1bdf716d7865e2df34f544d48b4655770f5d7d7d744779ca67c +oid sha256:14a02ae4d11bd23cf6333e83c378ec6be0dd36a77b2fa1ee373dddee1c3e6496 size 40146 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail/source-route-library.a index 50e32ae399e..fcc4e1349d6 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm12-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cbede7c1aee059138c9139ee8bc88ec2ffe99bac927a40887e963b3c02977178 +oid sha256:a2c4df857cb51d16a66b5b3301a7e9331851bfc0b79a5df3611751ab792b16a6 size 40214 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/source-route-library.a index 53c79e3af19..8f19cbd0c12 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:088de9311863b0fdb9d41b7fe2a905d763637d70df02c0b5da170f5c91e1bc7c +oid sha256:3d61748911b57cf99e4c9a4373b49be4108481ce4bddc4e22699a9f7a5de29d1 size 25206 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/source-route-library.a index 2d8d758b254..27b74b74c41 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad4e4cfbbfa0f7aeb454422dae6b4ee7d13722bc3dbe09f9d8aad83412ebf9eb +oid sha256:ca8d0d7c2470fa04b021ca8e1a759fab44c1cf991c78207602ce91fe07a8484c size 24582 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-stack_protection/source-route-library.a index ba1af433a55..3aa911b4eed 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d3c32ffa8ed4d265c6e4bf8fd9023293575f99d49216f725c7b5bb8da7ae107 +oid sha256:2716444e5e6dcd54ae37fb30a028a5f7b98b7b59cb6938563167923283a708c4 size 40144 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail/source-route-library.a index aabf8ca2478..0dee3aba4e1 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm13-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bccdb2110241282eef35980970531593cc4f3dbb0897be626cf76d3069439234 +oid sha256:abb000c6abed4e51246d31041c34df7edf35f4fa78139301118ebc4137129ab8 size 40214 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/source-route-library.a index 0049045e6eb..8088d4afc4d 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:649f517afc9e2eb1eb88808039af4ace19f7029249066bc6c7d885d4e3426a22 +oid sha256:fe4e7e7319c4b918cd7d8c7a6b103c1450489a18c193e11783ce01b60b7e3a95 size 25220 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/source-route-library.a index 1ba647a3327..d72e5d6bf88 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a6fcbe560601c85471aa51057fd4a6c5de3aa87b45a6c69ac46feb2cae68712 +oid sha256:342a1dd44b5ab29beb57ba49dbeaa1bb5a8bfa70abc7eca191aa70695207a0e8 size 24596 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-stack_protection/source-route-library.a index 4e51285d76a..317de678236 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bdcd1e4a58b2368d490521437b241faee54845dba393791104a4ade420f8fd49 +oid sha256:574d57a70ee1a85d99e0dce692cd96c3b094010900f48c4a852134a483a25ce4 size 39340 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail/source-route-library.a index 615b75f404c..81bdcdb1bd5 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm21-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04d997ca9c300257721d618946307a3655f9f5efe1487c7f86ac45faa070d94b +oid sha256:105ac4b6a419d8c0907037930a8378d5563524abfd7434634ee2d2026f6d275d size 39696 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/source-route-library.a index b29021666ea..97532d862c8 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:34ea3f7f16ef41c719232128e404fbac6ba2c818d81968cea11ff1653269920b +oid sha256:ddff117ac9a47a61b41e05938d43026e7b6d6cbb9849746c265c45bf3a898dc3 size 25220 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/source-route-library.a index dd6720a9b51..206109b0210 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c23289c676ecdda0befe2133ddd4c90a34b07e9aa683fd65e28d7d9b9f7afac +oid sha256:46e16b6e189c2764a372e063c9b00c842ce82387f657ba6ebdfb0db97d890fb7 size 24596 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-stack_protection/source-route-library.a index dd272c9c8f4..4f123c05a7a 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ccd1f799f61e0270f2335dced4c1632e7846bf5403be8c863758a21922639d00 +oid sha256:55873b580011ea41fd6a805192f81e05540ec90acef32971764597f7cbf665ee size 39340 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail/source-route-library.a index e922bc9a686..5d0fb4dcc9e 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm22-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:436d45feef6dec517b8ae96cdac414e84b2b8042b2be40f6c3ee0a1ec224f2e4 +oid sha256:a768d60b42feb6f7dc37cb19ef8b5e702e7e323e65e2d3b26c0a247fb4a2aad2 size 39696 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/source-route-library.a index afca20bbcfc..624e4c81255 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4f0da4594592d45bd0749ff28b89942761f1f9607e695b2368a04204dee369c +oid sha256:7ed34385c2ce4744de4cdd1e8df9cd82e91d587b9a0bc37f2df71e1cb3089e7a size 25220 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/source-route-library.a index ed2f2fa8de8..bc482139647 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f2a3da0c187a7b0208d61bc034dbea6f1a9842ba7e4e26bd37ea868b2b87bee0 +oid sha256:e2899431c7c895626f4e055764860dfe3d54521d398ec73853321d5adc80ac79 size 24596 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-stack_protection/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-stack_protection/source-route-library.a index 5bfe46d86b8..df8fb386a3d 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-stack_protection/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail-stack_protection/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:62e30446300548cdd4e20991be2b6374ed35278ceb45fd96b87867918df1915f +oid sha256:4afa763067d10c09f7710ffa828c39f20dfe9be1977371af44b82af3d2f04eba size 39340 diff --git a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail/source-route-library.a b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail/source-route-library.a index 5c2f1c6ecc3..f30cf997be1 100644 --- a/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail/source-route-library.a +++ b/protocol/zigbee/build/source-route-library-cortexm3-iar-mgm24-rail/source-route-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e23c5a7dd88f271010e3733c97a828ca88ada35b77ee867275aa5bfec47e5666 +oid sha256:c81287602e102ef220f546b09ab16569da200fd3053edc2f5a69a36dc56e52bd size 39696 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 4fbd40ac410..e3b3a5374a3 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:df9e5b5636658e3e13c9c6a320f8507a460e2af816ab07ec1c9136bfb96d6ddd -size 536192 +oid sha256:5e74e6e60c00afaa3e743c3bf751eb32a693c64c4ae89fd5b5a493c372bca647 +size 536500 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-leaf-stack.a index b434980dc85..aaa43d97913 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a11ba80d661ed04d8c2eaa10fe732965aef853c3253e701214190f24059be5f -size 557890 +oid sha256:b549540904f8eb1361777b9461bf9389bcb079fcb0d0652a931f73eda64bcea7 +size 558202 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index a88d557da18..f5a6d8a6995 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:320983c3f8c56dbaf3922cb68669cd9100e196c4be5df69e7e20717fb464e562 -size 588722 +oid sha256:296ef4d2bc3d35883a20a7c93dfeec5d7d5844051b86dbd67d623bf34763ac8a +size 589070 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-leaf-stack.a index cb01b170a2e..399d92b96b2 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c364714dbdd65bc851d0150325879433c0353ddcc680032b7b746b9828489a9 -size 609664 +oid sha256:f673f06ee63ec408afbd31094400ec592ef69641ead0002bc8860874ed36c97d +size 610024 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 223b750c176..4da78fc2b17 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:859c4662557413127fdf4476cbe44f6e64c73ce623f033b5023473d2cb302031 -size 536192 +oid sha256:52feab28b5061853ebc4c8953d381258fcb82c5cc5acdca31e19a2ecb4c0b95a +size 536500 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-leaf-stack.a index 60e5d3ccf21..ded7a0837ee 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:54ebc6bf150a0d47a768d971c6f1bc6feeecefb2eba0cf749c18c37734d680e5 -size 557890 +oid sha256:ba367e0311fe1ef57480ed04df0c79995620e932f6e44c2ef07add0590450698 +size 558202 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 446f4b5515e..02fdf88d057 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:71290e9d4cfd0df44fcb1a0db0f9171a6f0cbf831473c0b080d878ff398bf8cd -size 524918 +oid sha256:995f69759b37e49ea900234ff4bcd6cc4930be49ccc5be5f0178eb70349094c5 +size 524758 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-leaf-stack.a index 24295c97f70..4e22c95adb6 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db64096bb19e7aa2db744a778f6760563bf308e777d90c126981921cb651ea94 -size 546520 +oid sha256:8a6704cfec1491e6b5f3ee868c05d2a6f9deb0e3c40179486d1204ce8567854d +size 546364 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index efa6bb08f56..0a7025fb1f6 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83e0389a975a472934284ff128e0b5a95b091d6b4071ca4d0e5553ea45f8ad69 -size 524918 +oid sha256:9288d9e6ca03b5f8886c6cbd6050a987674441166f392cd6a693d650351e7706 +size 524758 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-leaf-stack.a index c2c219a82d3..92277b4b217 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d887e362e2978540eb0660db0cbc63f67c77bbff0efdd00dbb77d4e1af31a7f -size 546520 +oid sha256:5d374d5a5ceedf3f0a33bec1d835c03c6cc09010369458fa017a3d9801635b27 +size 546364 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index c8a68d2c2c0..f387b981a98 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a388726b5414cc36ed78504f9f1f67cc8a29516f6210c3eacbcd53c51e4c0741 -size 524918 +oid sha256:bb97fccf9ab9108e5f1b828a766ac1a5ffe27a2631a607af73c6a5e42d402525 +size 524758 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-leaf-stack.a index b198e69bfd9..8dc466c1fd1 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc380d1bfc434cc93d1fcff34a1a78bf6e0ae84d254353cd4197bc931576ae1c -size 546520 +oid sha256:b0e311528ca85472f9af6afcbc24ea1a4c1a79ee9312395166e9ef6615ba0b35 +size 546364 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index f18938a255b..62295b04638 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ccc6f6502a9ea23b679ed60964e7bd057311f6ab649e84065d1881e3fbc584bf -size 524918 +oid sha256:74c28f4dfffc196ec8fd0997459005badd7aafed75edc3d7f95ac9fdfa79902b +size 524758 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-leaf-stack.a index 246adefab6d..465dcfb192c 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:349ce2bd99b987dc69c522ad170133fbc5d6a276e5cd592c11dafe6d777f2928 -size 546520 +oid sha256:fdba45a56c17216919f8af68b998243312e0eb14c8ebc0f75988cb0eea08285d +size 546364 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 47f5390f196..78f738cc1d6 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d4229faa38b4160ab0f7fc8166eeed662af2f0707cf5f2cdc6d10b49f2806c0 -size 536192 +oid sha256:5a48f8f39d2fbfcaff49e901bd8e9a412950d4997cd66ac670e87976b1e3b5a1 +size 536500 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-leaf-stack.a index b8ac920eb92..137dc9eb0ca 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f232f0e8b3b62f5327557860aa7e9181a1494e786c8dcb59458c7bd64e40d1d -size 557890 +oid sha256:38ab6328424f86f91fbeb473e9df2c19293c0e06e6996e8c589d3599fb540ea3 +size 558202 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 72538a9df9d..fb39fbdb24e 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2fde29fd44cca434803e50ad23d51ec2b33dfedf4718a5e922a70887189b5e77 -size 536192 +oid sha256:fd6229b99b440f4c2cdfe1e00e4a091b2e9a885ebfecb6ec29ac9b1d66169f51 +size 536500 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-leaf-stack.a index 1f37357a06a..024cd89d7eb 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e4a6d0f4c95d6690bb350a16e5f43d7f153d46c77500bcb37e4f60d93831569 -size 557890 +oid sha256:cc3b1ddff8e7986b592fb5dee8df7d4c477c9580b022b72b8fbd99dccaa3b846 +size 558202 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index f30aed32e2f..adb9101a1d5 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3816f9c0fc5dd5518a91a92881f631474f6ef50076160957cf64ae46ecb99a40 -size 524918 +oid sha256:1aeba38576b2b4099d1b837e0f33db21da5bdaff0f7cc7333c7f56ceab350c00 +size 524758 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-leaf-stack.a index af1117d5aff..64fcef5a36e 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7ae64df130e244ca9b9de8c5b85ce3efaf91baba9d2bde267bcfbd2bbe7c3504 -size 546520 +oid sha256:3038a357998cc5f8aeadd8f9811ee40c6ac6ee4e9ac2564a7acbd31068eec000 +size 546364 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index cb2be132432..defaa2df983 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d13568939fe8dc2358be64f6cf5e28ce879917d743b50d41c2485ea2da1d828d -size 524918 +oid sha256:9f74ec4161c338f5ee59c3cfd28568bd0770b43f22ded0c729da3f0309005c6c +size 524758 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-leaf-stack.a index a13bbe4c27f..bcf3fef5ae3 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:48ee12bc5028fb5e5938837acd7a1f78b40cf625aa8a6d97a794d59a06afa9d7 -size 546520 +oid sha256:2383b0d94976c228151794c5072fb2d9758ed74c1e322691814f9aeeb76d4be7 +size 546364 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index e0a88f0011f..056ee33c3ea 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7972aaa94c6b5096421496e22a23a3a70ad96075a311c877818a995813f8738 -size 524918 +oid sha256:2cd5a1a9c6faf0e502156059122f9f384247713e25bc98053d22254d63781f01 +size 524758 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-leaf-stack.a index 01df3701e8a..6037fa22a7c 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1643afdb908b6681c6289845cf2d9a4a59db597e2005611520ce66516945bf7 -size 546520 +oid sha256:266e2a768cd857ec1ee334fbfdb45ed92a570c1599fff87b4ac4b57f3b61ff0e +size 546364 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index 1077e82cdaf..973b64678f1 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0083067380aee51ad6be296996e5b5290887ee3f61b757e00a0cb852e2c73a1 -size 1268046 +oid sha256:1402163f51a6607c6091a25fec2e1aad7339a937e243499b3adaf5369d9346a8 +size 1268632 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index de80af977f4..3fa23c69552 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:104410db4f08ed849c09391fe614355b79a183e0d52e566f89dd804d8849bb04 -size 1224348 +oid sha256:a051c1e86f8ebe5df61b5fbdc73a14f1603a47ed4d8325ae5585aa0823be68b8 +size 1225628 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-leaf-stack.a index 6f75c502797..3a4d86bbdfc 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c5b38b7296f5894350a21444b57a17f01d3a267c07457ff52dd6523187fc77c -size 1328914 +oid sha256:78e82a982bc66238c0d08999085a616f7005f0905996f4fd2ec143014fc7d62e +size 1329500 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-leaf-stack.a index 59802c8c875..c52e1d3763d 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4839ca48a597a08882cbe45771149bbf6db4679e5957f878ac12c9079b96ddef -size 1283256 +oid sha256:08e3587a730441f209d974e753a88ee5995ca244039e63cb0c9974b937c1a81e +size 1284536 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index b51c43e1f04..aa17f4d56f0 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51e80f9d8a2b7e240703821d3d186159e5dc0bd245968684032255144534d7a8 -size 1336430 +oid sha256:f1f8516c7fe61221c5f3a0de9c393e24b90759ce6ee988b4b7c1d0afc8a11ac0 +size 1337048 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 282ffe813a5..5c4ef4fd722 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc7997e32a13e8cb8d078ef7492f4bf5ad9dd5c149f9897be7505e1573489883 -size 1292064 +oid sha256:c5788eda4ffbb2a01737f15d20a315d08044fbb51d7fce18119b7455b97a098e +size 1293526 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-leaf-stack.a index 6bbc5e49aca..f98e31a842e 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:efac98e683f73014ab736945a2d4043ba95e7982e9e532b37cfc4c5a8304ec6f -size 1395514 +oid sha256:c428176e275a7ce2e7f1f400cb976022dfdd4aee1167d489abdfc17b7313f179 +size 1396136 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-leaf-stack.a index c0c4e50ccdc..da81b3588ab 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d526d1b957896ab8706a635ca740774886993b79a6fa2dcabd4f3a736a6487f6 -size 1349372 +oid sha256:88094165d8ace27ae21ecfcf3fdd8ed95f5f2025effce45103a5779a7840bf8c +size 1350688 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index 76881eab925..7af3a80acaf 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8fa13de1ab3e6948611d3552f9d1a277732b8875571482b4e10c5a336c3d8e5e -size 1267908 +oid sha256:425efb06f868fed323c8cc8e64f41e8ab035c53fdabc5162434d23f6f6361cfb +size 1268494 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 7edfb79ac60..7cba39f2bc0 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74fdf5aa205701f1f7032a175c11465745dd9b58ffe0e5eee621b1a4e1e1fed4 -size 1224292 +oid sha256:f5e9a64f0678dd359b90c670c3fd618b79b37561c87f5f98478ba95ca32b16bd +size 1225570 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-leaf-stack.a index 91b9814619b..68735dbd703 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebeb5168de03530bdbe5c049ccae512b74ecd2a58d28e0f147e76e86db9fa6d2 -size 1328840 +oid sha256:d26606de560885a5c5150039f4f56afac6f35644725894f1b710f191e5655a97 +size 1329426 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-leaf-stack.a index 495188f2476..bdc74f28e43 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec6e77882c5cec4446564a1e8984a1165b4a85be50abb07877bafec9622d8b70 -size 1283256 +oid sha256:d3805c5ca66427e788c457829d6fdd420e4533d4c7765daee8a58ac2a15e09aa +size 1284536 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index 6a50f9d6915..6779eda0da5 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a0c2272976803cd6a8985ce2ed406aef6b439d1e062cc08f91bf1cfe172da07c -size 1227826 +oid sha256:31d9c7fbcf33008604cf5d053df0fa8240df6a1c94d4d22e010920aa69a8da0d +size 1227328 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 1ff53778ac2..a5a90164a32 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:27109a9434ec9d4e772823bab00e2714d592d01b14bebd1b963a82cb26ab37f3 -size 1177504 +oid sha256:2b1b6e17fca5ae7f95be5654545bc5fbc732b510d8a9f94c0e8236f1e46b3e3d +size 1177030 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-leaf-stack.a index 2bab35c3ea4..0e5dd3b2959 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:844520c3448e0e34497ca3afaf0d5ca0054912ea2ca12c1ff84ae21bf0a2a137 -size 1282022 +oid sha256:cd410402f125a32a69b18e2954c428886ed8e08197057f8cb1cc02d09d2aba1e +size 1281596 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-leaf-stack.a index 2be70fa589b..cb7c4ff4217 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:173e984ba1b52120a0f372349639eea5a4ac32236e351b94bb273132b4a12ac9 -size 1232214 +oid sha256:3040341c93cc72bc5e96581954d9b688b22c72eaa490110db5e55827703e88cf +size 1231684 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index 5160348f99a..bccfb915856 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0514e1499e12391f463fee68866c6a4f330ccd27c08dd09446e49235515ed428 -size 1227754 +oid sha256:5df6e41dcf21ad50c75d41e1525e02696092b4b61aa05f566f6752e93a98c98d +size 1227604 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 451f756f033..d81f99cbcb8 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:577e5fcc8a6da3e94ea563d43642e12eb218dce5afa9bcca817cc2a6579352e0 -size 1177504 +oid sha256:729e9aa5c3ff3051b3bc440afc899344c14f13be951bda80e4665229db14c55e +size 1177306 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-leaf-stack.a index cb7237ebc0c..11d873c143d 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e085e0db9087a05e2fba714e3f4d56d92b33874b7ddd0f77f2131fb5f7f28afe -size 1282022 +oid sha256:c3d4ef2e08866ee871b70023e231824601eee2d5536befbd229d370be740bb7b +size 1281872 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-leaf-stack.a index 0ae4ffae623..f3228026d1d 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9590ae429f67154137c875e1317fe4347f862987ddc16dfb1630cd3f850fb53a -size 1232156 +oid sha256:70c601e4a7dba3e63c03f6cc90cb1390f5a85bed337b50c0531668e65ad67806 +size 1231960 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index eed1e32f2c3..b528952b469 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60f4fb6a24c85f139eb1796d1d14e589e30ee218023a9b63d1b5579a44f536c2 -size 1227826 +oid sha256:9fba00913e9d74e5d0fe55198153c0295bedb8ca23d11a8857db6500eb8de4e8 +size 1227676 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 318e9d87651..70525b9f659 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b980d5ba761b7f2a37d401a476459cce1e0564d34bf1777d83aee745621eff33 -size 1177560 +oid sha256:958086c523a19799724d981c1e8b8cf549d8517c81938044facc08177902c479 +size 1177364 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-leaf-stack.a index 5b52fd6b0e6..8a43ce3b0a4 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fd3ce6328d367763419a222ce50f49a02c52dc3ea3931a001e95b9ebbacf90cf -size 1282098 +oid sha256:ee8070a9c3e2284ba2a2f03d36ac1a5035aadf02df8625eac26108097679ea74 +size 1281948 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-leaf-stack.a index f53b3e16aa6..64cdb3fd744 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ad6f3f41c185137d18ffb5ca0693965ff13efe6c699009ace3ab88dd1e22c70 -size 1232214 +oid sha256:238c0a1bad88e9cd6b0de06f39e874a71f47cd0374931d4f2c2b06db683fed89 +size 1232016 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index 2ffcd868965..8d31c6db13d 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b49238d0726884f2de2fdd69ae7c281a6928ca073f270b17db2f9339f022ea26 -size 1227754 +oid sha256:82ed65185897f0400a21422bb875825cb6484cdac2a954b9abcb4925a1b50832 +size 1227604 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index d85e0fe0f2c..0f302693bd7 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:71d17fc91d93b6a439c2b9f33e4084c6588af87cfc7ad43dacbfc642536d4de0 -size 1177504 +oid sha256:3b6a21ee588035cbd5d26273a35f4b787f1248f8df7f2105fe5129770d6dbb12 +size 1177306 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-leaf-stack.a index 2553b4e056e..2ca3c764805 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4aec249656f673e67a6c179595531c120f086bb10aaef7d2ddd3b736cf44f92d -size 1282022 +oid sha256:06f3681fa2352111aac0b8a4b82d48c95ac5bd41e3842c89dbe1abbbe043dcdc +size 1281872 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-leaf-stack.a index e5e944b43f2..3098b921038 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49f6553fb4f0441b3a760aa0de2860a79006e9676a6510f7bc1d40d8e4c7c3d4 -size 1232156 +oid sha256:b985e32ea761e360924536371974ae60f43561ccae7233b29674eb7f90f95284 +size 1231960 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index 32f059343d2..dab0d3b2be5 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1c3e659a26644853abcfed6e4dcd7a83686f19aef1b5d86c554336f0a8ea11c -size 1265424 +oid sha256:4f8b06b2c2da79673d75ab2b969e9528f157e4eff006215462aa2799667e0813 +size 1266010 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index da50b73b2e4..c755e517484 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b2582147ebb6b7eaed41548b1506bee6d4734c6a326a1db98188b78edcf6108a -size 1221808 +oid sha256:c93679a7ba486a8cd30322e952a6e1ec87d0b12d439aad3f09d5bd205c847451 +size 1223086 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-leaf-stack.a index 63cf7bb94d4..42bd5e2620b 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e9df507b81c30c3ffa13adffa93c2ed276b603f35c9c9add73f527cb1453df7 -size 1326356 +oid sha256:4b81e0fe6b39ae96cb279fe3bb32acbd4328f389d002a97b5b9586f382c0ed83 +size 1326942 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail/zigbee-pro-leaf-stack.a index 895276fe615..8fcd5fb5b46 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm12-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:761d04a562b104ab4452be1069033e14d4e0e24d7e85804b9de0eb3d87144b37 -size 1280772 +oid sha256:d5789bd9e16bcf0b30da6f13b9a7a5f3f0161d07e7a46ab4f49741a1f5e6dd7a +size 1282052 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index a90cfeab725..137cd246a05 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b5e97fd5ac5169641c5b9ccd16530701d73e9f78d59e3ada12c7f9963fda1ec -size 1265362 +oid sha256:a5893480ee373d6c9184259fe3945a8df96367692416c62ef33016ee1148ffe8 +size 1265948 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 0cae1f9420b..a4bf59996f6 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e545fa44f21ae440d625704e29302719f72f5347b5c2098bcf17ae86fe4430f -size 1221726 +oid sha256:07ce2e3d0f6bd996c85cbd7f51b2e03ef66b8e01b5ad4968e46756a901f40260 +size 1223006 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-leaf-stack.a index b1fb2da83bb..11b47cd044c 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:96d3b7fc2b23360f1b1f48a43c3752680dc2bb5a3879f6f9b4339d5dd75bfd02 -size 1326292 +oid sha256:59b85bff5bc475b3c465e2b536d4392680b4d0e6cd038bdfe207845ef86e4842 +size 1326878 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail/zigbee-pro-leaf-stack.a index f4cac9ad2f9..a491b38f080 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm13-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:367b6235bb479c95ad0b9a5a945537af33b591c0e1e6bcd0c03ebd3b5640401b -size 1280688 +oid sha256:b212c3f3555e8170a655bdfc2e8f253d2aea18fc7ac543619cab4da55039c4d5 +size 1281966 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index 92778c81b5d..47787310b2e 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eb0e17164a994f8698c869bedefc17887c8e26714fa80e121777287da346b2d9 -size 1225546 +oid sha256:ceb62627ea9f5dcf5d847d4377d01f7968a139b099b6146fb84d5c9179fba1ae +size 1225396 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 754d81bb265..a5bfa8d26e0 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ead6ea907da7d538929461694c5e2b747cac6bd1f17d95cff657dd337f5d6ee -size 1175296 +oid sha256:2042590647709bfc0008fcd66bfa58bd8c79fdca09ffc1f030cfea237ab6f67e +size 1175098 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-leaf-stack.a index 541890548f7..7ca942a77e9 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41a197ecc485c16745ed52704c7148ea6c4d13ca660d8672c99e4267f56cb613 -size 1279814 +oid sha256:177b1e69f671dd47d0bda1575af6d1728769b610fa0cfacb7669c722b0f58963 +size 1279664 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail/zigbee-pro-leaf-stack.a index f124bb287c8..8ec7274e366 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm21-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60c5bf835735cc185fde0ca3be8616de7174990f3d1cbed78f6661f2faf99adb -size 1229948 +oid sha256:08bf89ef93bc13d06ff99724cb6148549cc7fca9e3e777f33edf784e646a43e7 +size 1229752 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index 396fd6fada9..555c6fdba25 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f1af306fe9387358b16e831352f151945fd0813839ca7e8b9aa90b1432187e0 -size 1225546 +oid sha256:222304094195083af9e2e6f436740368374947f3d4c3ef5ca9428664bcdf91af +size 1225396 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index dde5223154f..86c66447fbb 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4841db135d6f9ce50b39153719ae8b2f9a797d322d4f8e85997136204306e97 -size 1175296 +oid sha256:a98d3642712caac0fa34c4ca07ba1bcf26503161781c2605f33a402e7d06d6c2 +size 1175098 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-leaf-stack.a index d5757b46a0c..815f2c3e0b8 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e69bea12568d414121bc87864ad22ae28ff0d1c9de42b68207885019a2030e66 -size 1279814 +oid sha256:4c833a71ea4cc6ebe64b7b9da40462e066294fc4b300807e261ebbde2e5ada33 +size 1279664 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail/zigbee-pro-leaf-stack.a index ee9e0908141..2a38074b83d 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm22-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:796a0fbc9827119d755ee476f9e3dcd80d33d2330a1034769249c881734763af -size 1229948 +oid sha256:cf810a4e17d1c2488fafd3ff592b1f1737d4b2dff91def8d3ad9a985e395587b +size 1229752 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a index bfdbd1979f3..6fddf666c11 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c0e2204f8269bca3023c00d883a16d6535c21dcb120e81add95a167f3f74f447 -size 1225546 +oid sha256:2d529f99dac875739973afa9f79951ea3bb2f02b788f84eaed7385c11c4e702d +size 1225396 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a index 5bf56d86639..28677f0747d 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3548bc27cce1b463084677f6dd82184cb03e71843c71c9ce1b15821f816369c0 -size 1175296 +oid sha256:a8f44e16e2376bf62e5da13dc5906421e6096c4dd449da9349dcc1b5bc66ca7e +size 1175098 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-leaf-stack.a index 753758b2971..7560c0ad662 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb0747baf341eee041d3c28a44a739cac650fe8bb17f282ddcf9605412fd1df8 -size 1279814 +oid sha256:9c37b59c6e21411d162363faaf2b9f90108f91daf4efd8148b21a6d6a438c12d +size 1279664 diff --git a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail/zigbee-pro-leaf-stack.a b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail/zigbee-pro-leaf-stack.a index 3ab73640d6f..91516d954be 100644 --- a/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail/zigbee-pro-leaf-stack.a +++ b/protocol/zigbee/build/zigbee-pro-leaf-stack-cortexm3-iar-mgm24-rail/zigbee-pro-leaf-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ca9bb50f749d3ca16c61490bf162d5c25e7c24b9f45e14c148771f053e27774 -size 1229948 +oid sha256:ec9e80b6ef2d7d8a891c10131933e17a3faa06b50a3e929fd3badca3b1280f61 +size 1229752 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 36c4a962613..0a61fc63042 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:35e625ccced97a730e21df8e25015395ce053cda1be2f187a0beeda0a1cc1009 -size 581008 +oid sha256:fc9c56c5113d0dc1faf9f8825e8940ce3c0e1ca45f4b45d606b7ed2a51e113ef +size 581324 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-router-stack.a index 4d420409534..94a9d70c41e 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3168d6545871b4f8e59db18c233cc2545519bbd2ca3e7d04da272378efd93368 -size 606000 +oid sha256:375c3582be6334b984107b1724104d9802b894051bb348851ae43c3f0467f1e1 +size 606300 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-router-stack.a index 065d89993a9..4615deb674c 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4c7ac08df11ee8e639d4776b035f9bc936b333c54721355c8a87a81bb1d0e10 -size 634604 +oid sha256:8574066ef201845126e7410b8eebf21a016da2a47d1a1c089686746a080437c1 +size 634952 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-router-stack.a index 5ccf2333cec..3ba009a70e8 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9c2de27f9a9eb56b21641f17e48e600e2dc40dc52d3ed0b944db0401255b60f5 -size 658764 +oid sha256:216a83397d75cdb66ca9e0fbc309078e0f2eb80e3d91d48062e3e9757fe7482c +size 659108 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 30772c58581..6c4f384c3ee 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2484e54de3f649a7a88e54412a94d542641d7cdb2a019bd90ad03203ec4b92ea -size 581008 +oid sha256:e52469f9292966c6bf8a719b151cebea2abb10672480f155b403563334f8b54f +size 581324 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-router-stack.a index 02e0ccd9596..7d5563579e6 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8cdf1206d45e7c66d5ba9adaa67be6328536f5329c62dc1a23216b4258bda2e4 -size 606000 +oid sha256:545e0229d02b837a71c3a575cd3085a6bd9167ae37b44096ff310773ce88ae91 +size 606300 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index d2eecb97797..1e3a10b6ebe 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2ecdda139ce1dd92e8f3c6ccd929f5ba44668296fa59d6cb9c3091e5f5ad1563 -size 569710 +oid sha256:53d58fbd89ccac9e9111c4d1e90b4b6b84a70c4d239a020cca84e7acec7d10f6 +size 569566 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-router-stack.a index 1069e649172..56b7262704c 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ab3ac7a85c7cd5529d4744f3decad2ca060ec6faf2ee4650745e29613cf43fe -size 594570 +oid sha256:ba9be4ebcd86bcabcd2a88c5e3482b17c1dfd8e7676c59f46d859da7756883b1 +size 594402 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 8a2495695f4..6a0a74351a0 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:30c5452183c3f1ccae12ab9088e03062e65861df8550944d3791f2856532fda0 -size 569710 +oid sha256:83f3b1cf9e5199c19f3dc8f8a092662436d21761d74d02e3eba47b2713943be7 +size 569566 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-router-stack.a index 82a0d35cb41..fcc1109eef5 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f241984bc58b8437d70d24a75ee46ee61fa36bf1c0aea5519bfbc36bedb8e620 -size 594570 +oid sha256:59650ddea575cb3785e5b3bd7e69cd9fe6eb7dfb5a705b46f8a0ba7ced664f85 +size 594402 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 8d5c7cccb57..81e86dc8889 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce623a359ca46fd5ae40355e8883872677bba2cf29454e400b46e773228b11da -size 569710 +oid sha256:7aee4b7f360faaea228cc15517b40542c8f72f4af6c0fea861eb82846b745ab6 +size 569566 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-router-stack.a index 88ed58b26d0..10713c49720 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c5048f68a3060e079cdc0b35bffd61fd127b43061bc77f198c54e0d94b04b29 -size 594570 +oid sha256:092bdc0470bb2982a45dded381ce9acaa12d869a7bd175b90fd759ddc79c6aba +size 594402 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 2a8f81ed3d6..0d17adecc42 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e40ad0dab753616648daba0ec96bc4a8a2063c84896f4b732b3ad7c48d47a02e -size 569710 +oid sha256:b896cef8b39a27c977467fedb5ab0dde76498cff88ef1845d106d4462045771a +size 569566 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-router-stack.a index 5d34ad938f8..b605ea78c8f 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e4f4431e4b338d2557b03061426914c733ed2c8cb672b36f70289b016dce7fd -size 594570 +oid sha256:99ffe822c459edc2b3d5c40e3d29b205579a023f326abee8eb3a04379f2fe92d +size 594402 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 085905fd8a8..e412df50f33 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c51c1b70b31b2733e2cfe4175e11f49b6a576f24eda5f308109d954c6ef5216 -size 581008 +oid sha256:358884b8228404f36087ed84c7ac30aa80ba80c5222063b621178d44cdda1f87 +size 581324 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-router-stack.a index e1d6e6ef0ce..ba817d8fe88 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e55668b2005e0b2f514fd40f5bf8d01b00c2ff7e3a5369c7c0527812626af1e -size 606000 +oid sha256:a25af5b8e55374cdaaa58d70705b9c060229f295635f644733f9d55ba2418cc8 +size 606300 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 5a4f67c6288..11da95094d4 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a90470c38f2aee96ce4e2de94f9d3f35a5a5791bce760fb9a2df03388aa6bb00 -size 581008 +oid sha256:ddefdfd4284985f37e67d23fd0b15accffcd605661de5e16a719e76fc1fa9bc1 +size 581324 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-router-stack.a index e42d344bd0e..d8fb01e2e07 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e8c048e30622ec033ab40c7fd0ca9a5fb0baa518049b21cafa0d920315de0e8 -size 606000 +oid sha256:f6b72b884a3a8cb49f497c843028e2b008918584d1e1bad93276ab88ff5a14e1 +size 606300 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 4733de3dce0..30b6abdf3a2 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a7bd5800d00d1513f6ee8b65c6ef2c45db6f403a578a206570eb18e47a866bf1 -size 569710 +oid sha256:805030a9392c9a45979c73f7fbe51cd2ed9d5b0d36a6cfb6c3e31ac5def1f643 +size 569566 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-router-stack.a index 599f38d0c52..91373927e76 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08c9f815b13cde81ccd9914573280d3dae9d4e265d51ab718df352f1f78269ed -size 594570 +oid sha256:7acbd5a72e8278850da48eba3fd815f89668c61713dbbe8bbe0624c9a5ca5894 +size 594402 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index dee69e7f370..b4c799d76ba 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f5e69fe7b491c6415008ec00a2dee7ad7a53639114453f198e5e7158473f8d5 -size 569710 +oid sha256:0000d4aee4d7504f6dab8fbd08c3c31be829eb59cf7b63506b865ae0f16bb168 +size 569566 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-router-stack.a index f15a7e6bd79..c18710b2539 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:516f6348fc7f66c9e014fb9fcaa92e05f93c21aac489702f2f7276c985378e5b -size 594570 +oid sha256:dff8e3effca0287ed24e36e713499962911d7c7bf27a1bc3863c4622c1d426d8 +size 594402 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 3054473bdbf..3a39155d80a 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1446c51eba2f2edfced284e4cdd6a93ef8cf7b28e94a812b9398160d64ee163 -size 569710 +oid sha256:4d7cd2bc01ac0147ca3357a12d51d1c662fa634cb4a485dc7be85b4269fda72d +size 569566 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-router-stack.a index 73b1fa25e83..189920e7d31 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a39ac2d8735c623c7750ad8462934cc4b7ba7e22b7cd6af3c8b3372faa28f906 -size 594570 +oid sha256:341c7b205d5868c5e3bdd6aa3a6ece47a440d5c853f7efe4a1f62e768774149e +size 594402 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index 330933ea444..98b7569d2da 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72ef88439fab0fbb875d04968886ff22641c18855c6d08512e15537eb604e070 -size 1378780 +oid sha256:d9fdf8789b23e894663176c6c94223167b0ed8eed403d3e2bb5d0c80c535e01d +size 1377462 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 524a1426b0a..1b7fbce1777 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:754d81a395453cb8f50440758e7f2f97dcef1f58a608ee219167fbddde669f7e -size 1326422 +oid sha256:bb2c59a3b5a91daa2ea2e562921b57d494e2a55ffb7c7d53402ce8c2c4fe28e0 +size 1329268 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-router-stack.a index 08a6b7e34c4..232b99e0544 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f73e4d53b4701d7c50d60decbaa21c4a1ed2cbe52842fcdf9fda045b05e7445 -size 1441854 +oid sha256:496de7ee211ffe57f41f21a019e00e0d56a14e4ce20acac6d7cd7559789ddab4 +size 1441686 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-router-stack.a index fc2aab0f518..186a5119230 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bda12bbbfdaa956ffaaede5151d28a99925aa539e1527bac11b0a20e33a99737 -size 1393410 +oid sha256:97e08833b04c0348e234dd5940865209bd1adf8d1f6f10af2f833c96d3fd2fd2 +size 1397340 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index 282dc6f7b65..cc8ad731e67 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ef43b72a03e2db01106f29103c258dc71a8523f7c48c9ce094bcc03611c6b93 -size 1449426 +oid sha256:73043e0b1ff5f06698c7c6d6084957752aa1cb9ef4ddddcbf357dcfaa9c6e395 +size 1448194 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-router-stack.a index 90c38c17ba9..11dafa9d589 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0fcead70e995c98c9a97add93f6b8b88b97a23428199ca39511d412eb0a1e43 -size 1396646 +oid sha256:058047ddaf7d7fa0068d9f9f0525c04d177a0bbf05dfb438c06ca301d2e3510c +size 1399516 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-router-stack.a index 91417178460..fd4bdb7702f 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5adcf434d723336db4b13877925e8a58b5afef801822239ed1ad49321b2aae51 -size 1509206 +oid sha256:cde4c3ce63df01e7edbfc4247f5beff09db235f6c55e4e0d8e4880bc79d8cfb8 +size 1507834 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-router-stack.a index 0847264a2a0..d10eda4d197 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f23beb69b2da068dd933dd297e5f495f1d488e7e656bc3a775e50be648ea7e51 -size 1460234 +oid sha256:e5922a7159cde97c1fc06bbf05df3ce9afdb6e463d7770e2fb7b60bc5ddc8a34 +size 1463540 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index 01c82544b27..69e155b5564 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7312d52971463bb8fd3351e9cb8ecfa7efa40aab63c884a2de8c644472ed39f7 -size 1378638 +oid sha256:36b9ba097af54d59fbd905053ff22548bbf413e8bc27f8c29ed1c8730fb5dcbe +size 1377382 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index feeb97742ee..0f323cb7604 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dce65b678e8408d0c2dbc78dc36f7228c0ccf5b1d07454adeccbd80e5c649d77 -size 1326364 +oid sha256:2007d58b071fedea136ef44f3d4156a56b9c4e80234930583ac62b64014a5982 +size 1329206 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-router-stack.a index 1309ec23ada..8ff6d02c12d 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:94b210588f30b4a660e91e7a898fc40eb0a61795e4bec4c37a3166a864209504 -size 1441712 +oid sha256:c6e1cdab28c8b314c5b785004728174d14f23ead75ab2e196c8e03f68e61569e +size 1441544 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-router-stack.a index 6350dd1a0bb..a602967acba 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db17cfb00b874b3fce244fecc6f50d9467cf6920f1a1231ddc936f2e08299038 -size 1393354 +oid sha256:bbb0d9e8e481399e203ebab177fff9f7997d477a2d704e4511305941e0f62230 +size 1397288 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index a062808dfcb..1cf59a14fdc 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0f06cee4764eb5e1cf242201b5eeafce68dec90a7eaba1618d0b8db1e6ba4a85 -size 1337190 +oid sha256:9d4cf82ac44651a4bb221088cc94031c3d7e04eb83888b5799294a1196e2b615 +size 1334332 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 4057d1668a0..4725a4e3456 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:004a6c2f011907737966774b772b7f6d494cc1d7da8a418957dfeadd3fff9d20 -size 1279246 +oid sha256:2103b0b3edfb0265998da4c72717a3871d217dff00f6923cc90490ce4cf5dc99 +size 1280910 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-router-stack.a index 7d6bb55fde1..8b6b75f68d0 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7749dccec1a5f4e7a1ee4a9029bd579554165e3ad4e20c2b2d5cedd4111f1163 -size 1391596 +oid sha256:5f76f0d5c6de91df66c956314ac259e190ed649cb6fd7eb21dfe58f22d5cc5ef +size 1390348 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-router-stack.a index 4fd5b4766ce..b93554f5d01 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9572be008b23655f7f5e44297da487dffdf2644bd133ac750d7d4e47da8110e7 -size 1339820 +oid sha256:da517a0add503ddc8acbb330a9ed1ef7f219cfd9db8fef95aa617fc30152189f +size 1342044 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index dc400e93929..753b072e3da 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:243ab984d8b80841edc1b40b3bbfd6988e1a680fcef913990fd10820ad4f8178 -size 1337190 +oid sha256:d0328e0deb556c545f0e5f9c77e5047248ddb8a604d2f26ce353267ab517c4e7 +size 1334616 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 75c37166d39..077fc2456fa 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:641f5e6e999d3743966d33cf1f92cef7612f13b6a515133f094ec707bfb91d93 -size 1279246 +oid sha256:d8c89fb3f7b59280155977dff6d12bbbdb3cb9da928c3e1acbcc42fae7495f30 +size 1281194 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-router-stack.a index 2815910b229..ac460daa1c6 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:805e5d605bfa4daab6786619c14fd5ee0636e6fc46b2061efa5c1c56c90f6ad2 -size 1391534 +oid sha256:b6750a0d7f71d9a2460151d2ca2a52f68aa659328c13427ecd7f2e8fae33394e +size 1390632 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-router-stack.a index 5e8b44423a6..e0258e91fde 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22c4b7639648ef2744dd684a9cb640c9b415b645634f08843642de785486daf4 -size 1339820 +oid sha256:c6d6874202c5586c794b420aba19d668af38e44cba40c234a46fec2dd41ae378 +size 1342328 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index 480dbc25640..bc921879dc2 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c364d5cd7f698caae901e5f4853f7261d645cc006cf239da8c6406ca5a176db8 -size 1337260 +oid sha256:681d60ffeb800d6b2a41afd5da7e1aeaa04314417cdd7469de4f8f8e11b997f2 +size 1334684 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index b8e6ba49087..12ebf8e6e23 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:983b1f39d2fe255284c121ec5d97e7884b5bd8948a3b79d255519d4350aca04f -size 1279308 +oid sha256:1690a905169f3d91546197a0a06f230172c8e0ebe9e94b84dffe7a418e0616b2 +size 1281260 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-router-stack.a index edb26895004..02cb43cd1e6 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b19a92dab36b5a0a00cf58946cd9c3db3590e1feaa156f030603cedb4f1d6ce9 -size 1391596 +oid sha256:fd9e40b5291ee3615ed2fae722ed81b8ca37554474994939740c19ec1fb346a2 +size 1390692 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-router-stack.a index 9b31971e80c..68df8d770bc 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb7c56e12eb90943629ee67488415a111db30878e426f8a7e50337019ce39ad3 -size 1339880 +oid sha256:45d70cbc11ce4de34585201d829dfcdae38f194b310a2a351b187e43b4f7406e +size 1342384 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index dfb1b535d5e..d4e30db663c 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a91c5f691a8b7efcab80c2add59233df9487e233802b0ef886b081401224d837 -size 1337190 +oid sha256:a97530b8092744c8042bf7feacd6ca0e384baa9407420a8e52fcc1c22aac45b9 +size 1334616 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index f4457f1e823..e9e6e18f176 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95f976f4f73abd49c7434972b0b79635b98ef4a64e6ab39e9c81b59d0b5a0223 -size 1279246 +oid sha256:fe79b04d4c127184992b9145cd786b3afa55cad29895de172c8410efd46bac96 +size 1281194 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-router-stack.a index aec5fea537b..c730068d32a 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60f9fcefaed323bb0fec8f936c39dd39cd5998720e7a843693bc1f229e929d95 -size 1391534 +oid sha256:9de0eb1bba612d5cae4f2e25b5af0f26ecd6b420a99b854dec7146f9fca118aa +size 1390632 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-router-stack.a index 7e8fb4f8162..83395ae223a 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e8cc6db02f3b6e081f4b260c6e77df59288c26653162386179321e0279ba966 -size 1339820 +oid sha256:5b2a32a44ffa8eff2a39349898bf9bcb88e72047b548858c02a152afa9954914 +size 1342328 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index 4a63ba19152..6f088d7d48c 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c849716c39d814c5bc14365607cab20f5be684ccb0844dcdf3ee43fb5eb70d5 -size 1376082 +oid sha256:abb944597e241040ac81187162a3d7ed9b9ff2e7fba318fa84b777eb34669dc5 +size 1374826 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index b346128c88f..8287c09fc6d 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:51f8f4ece229b7d131179f9f2642116aba8e18a0d3838d40066b7cdb9f45970d -size 1323808 +oid sha256:342c1030b01504dc0e46902c1a4a8ca8b94c52ccc5cc8477f3de250cf63d967c +size 1326650 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-router-stack.a index d7661da769b..a06103a180d 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa40f357c5133a48541d77e39813ef69d4f13730e091abc20c6996e6d8db2389 -size 1439156 +oid sha256:55dd48af00fe00cb8295a4cb3b03a00f233ddf12399d23e5f4d1d45cb77497f5 +size 1438988 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail/zigbee-pro-router-stack.a index f7d3d8b46f1..9e6d1dc5932 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm12-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31a26e7c6d9cb6babf1973236b989065cf08f4c8ddc5584707975c3938197b99 -size 1390798 +oid sha256:fdab70804b5af9864875e69fb97c73acb4d4c95b35faa7fe486470f63126b778 +size 1394732 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index bf32ac307e6..f16b9a4244b 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1e3e40efd90c481c7ef233ee7ec1e8b7528174a5fc5fd36f5faf8be3ea704349 -size 1376022 +oid sha256:3ee4520164c01aa7d9e61e50d2d06084be604c2f02efd71b0710a2da05b1dadc +size 1374764 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 4c7f5326eab..952d135233a 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:da5d038a2fd91b5b4bed3a6da6bc6446d92240bfdc5e735a10347a755cc1ab0c -size 1323724 +oid sha256:845e43f0623dacca274257a0c5619925bd73be27093ebe2015d842e6b4915c59 +size 1326570 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-router-stack.a index f87a2ccb55d..6af5a8b22cb 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6904e566bd454fe2087eb5f4408f7925d09d4b3a1b2c2e030c36d4fbddd2e2e5 -size 1439092 +oid sha256:05fe8fdb44a7a833359b9fad8362a9a9605e203878ab2daf4b4b3000ca7da4cc +size 1438926 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail/zigbee-pro-router-stack.a index e897b288950..d3b8e0262fb 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm13-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44cd1e2a81a321299b5bb67cd2eaff365d8fe28fedfc48c267a9f3e7107629b5 -size 1390712 +oid sha256:9f506100948079786ae7fdc294099cca295e55e25c4275d6bfe4fbec5eff86cb +size 1394642 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index 5504d11ac6b..c6550574334 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a6591c1777e0689a0e7fb752fca7cc347db564513023df090168f5854c4b8f1 -size 1334918 +oid sha256:61d40149d52e3f5ba0b82d9da0cb216fdaa8e49c5e4b29f1209fbea198a526f0 +size 1332344 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index da9565f52d4..eb90e771de4 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ccab4b79f074df5f683c52684c64b56ffcd438e023cd96a159f8f9152f476c38 -size 1276974 +oid sha256:6c299c8ad3c53a125799dc83a20f8b028d8048cc31c47de76b1cc3583a8a4ad5 +size 1278922 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-router-stack.a index fd16eeb1d2a..1feaecc7a0d 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0617b3bf99011d97b20a0c40ebf15a2e9943a5c49ee64c19ecc583a33a740fff -size 1389262 +oid sha256:6523591e46c9d7686575cdccc1cf2b580326cc0a2401cd501724aecd6ba7425d +size 1388360 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail/zigbee-pro-router-stack.a index ac51b32e73c..41daed5855b 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm21-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:da39b40eb83bcb81a799ab467a99899a6c9c8c18b13daf0a5beab2aecad76296 -size 1337548 +oid sha256:123e4eac5d8606def75dc87933400621c996619685537c3a6515fb8715eb822b +size 1340056 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index c721ce1fef8..7c5023fd0e6 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39fc018296198b3f0922f1cfc889b4c542fd6c14005b5bcb9da447b8085f4d72 -size 1334918 +oid sha256:d3b21c7adb8b754facc58b9767a58ac91d3f5687b14aeb35e58d8468f2b83d99 +size 1332344 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index 55ad4fce27e..37fde089cfb 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d2ab7cd63c3de939dbac3a7f52932dd7cca47c5b0773a61812f65622461f55c -size 1276974 +oid sha256:9c5944978035f3c49bbb4efed9012aef8d5d5db26ab06730aa0417ac87d74ebf +size 1278922 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-router-stack.a index fc6b06c6ea7..9a7b9abcd59 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:da2c3a76ec11fca1b0adc4bab719dbd83f4717a46051e811a7329e485fbcee9e -size 1389262 +oid sha256:e80e65c83d48393bb8b5b698f59567ad8cbae9b506bd5224311b655bcac3dd73 +size 1388360 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail/zigbee-pro-router-stack.a index 097d73e0dd0..0d2cd76a8fe 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm22-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9bc2ee36170a2411306814bcba88fe1ef1137747487e89ca8e775ee70a5494fa -size 1337548 +oid sha256:6f6cda3a7c420e2ddec7dc15eedfa037375c7b1bfd37708109c0d06fb0e09c73 +size 1340056 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a index 161b2a94d0e..e48da61eddb 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f131986821f9c3290f35daad972c86dc5dfb85cf845e0c890f4dbefb08f53949 -size 1334918 +oid sha256:8978e2a33804a36a657034a32fe0fe014eca4891318d670d7ae47ee46cc2dcb5 +size 1332344 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a index f45a5ead515..d57bd8e796e 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ab2710db863d345f268c373d20ba380619a588678debe3c0e2e9c2c23272e616 -size 1276974 +oid sha256:adfa4d71047ea33980c15e35b02cf026d20e9a5671ab8ab5045bf5e3819bd211 +size 1278922 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-router-stack.a index b2912975338..0db140f2606 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7bce91c94f024022ccd97cb28aeae90709f39c69931155c163ff7889aa591380 -size 1389262 +oid sha256:48f879a5baf59c60d6b5d321eb64d09a0d92f3beb704958ba72e6317b6885391 +size 1388360 diff --git a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail/zigbee-pro-router-stack.a b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail/zigbee-pro-router-stack.a index 8ec4db81a5e..e71a672cddd 100644 --- a/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail/zigbee-pro-router-stack.a +++ b/protocol/zigbee/build/zigbee-pro-router-stack-cortexm3-iar-mgm24-rail/zigbee-pro-router-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:10d91e4dcddb6331c092b954a2ba94e0acbd3c94f8df64c427d1d8f86b95cc75 -size 1337548 +oid sha256:fea33f59200382d991bf122aa74dceeabe5016e10ec4c78000c4943ad3982f18 +size 1340056 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 01f4b43834f..2b8b91a3002 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d64749041014305528ad8a7fd6f64cb25ec87984892fbcf980dac1318ecbc414 -size 602406 +oid sha256:b68bdad1bfaa71f87f68c623adb9c3b1a307660e414af9b07d049ae5207785a8 +size 602734 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-stack-alt-mac.a index c124c3bc25d..68ef684e25e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3b9b0c58b5f079e6ec75058979c09fbdbcaa3fcaf4923e516bd0828661778713 -size 628346 +oid sha256:37051c3b6d9117c8b7a257fa7bb9e60adba4adcc15a340dde3fe80f8dc5f84dd +size 628646 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 414fe39f040..dc1b7a11220 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ecae892a2edbbf204d8254fc1ebddb36247fcda9234926c6683a03be1feda9fc -size 602406 +oid sha256:7cbc2685a8215aaa1944c06c012a6b097ce1d0e92a21feabd024aed0580117d5 +size 602734 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-stack-alt-mac.a index 0048d930360..b48a74f7f72 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7669464b4a98ffb642d458e56949bf1adeda69bc7ecf1a120d9f7ba4d662dcf0 -size 628346 +oid sha256:1c07a6071b56da35b264a3f5c7ee1c63b38d6a466fd1d2b352da1194a61ce032 +size 628646 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 10ecb170f30..5410c1437a6 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:515c5f92d95375bcd731c97cff1011b2915f29b4e541650b2a1f20c7e779b0cb -size 591088 +oid sha256:578356f32e845d68fec02ff255692161cf6b1ca5ae32b4f65be2b3c35e7ffbd3 +size 590940 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg21-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg21-rail/zigbee-pro-stack-alt-mac.a index 4c0def5f8cd..cfc378458d5 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg21-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg21-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0e12cd8042e8e81d1f518dab7edc13286d1e63c265c5f98ea7a3d709ef1803e -size 616868 +oid sha256:f69a72c727cc9e1c24db579073e9d5bb62b7b741b17940701c5293bbaf071702 +size 616700 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index e98d304abf9..c915057b58e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64724f56246ebce0b83c4404766934611b231dcfb63bf796e3ad9fe2a7c5073c -size 591088 +oid sha256:2653e21654468ece17cdca5b26f663d177fa8a9f6dd23d6b915eb5a13369e7df +size 590940 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg22-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg22-rail/zigbee-pro-stack-alt-mac.a index 501bf69f19c..4c6278ee3f4 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg22-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg22-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f61a7e0b6d66c2bafccf822875016a063396d947f39894b7ca15e2858e53dab7 -size 616868 +oid sha256:b671767d878de2b3a4c3a6ef74bb6985da80cefd5d0b71d0846487b025979bee +size 616700 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 6c64c4f0bce..9fe75265549 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9720c166e7a59177312d0122aa12957fb964c8c0285387b02465396a73ac409c -size 591088 +oid sha256:83c5554ac609039467e1af6a587b95088dab63f7b3d346102fee10ea5a390efd +size 590940 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg24-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg24-rail/zigbee-pro-stack-alt-mac.a index 7101cb2432b..15f26f102b6 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg24-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg24-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ba430274f3f9bf297da6473867034966d9189c706528abfba9e37f70bd1cdd7 -size 616868 +oid sha256:0b042dd3a26f119d0ebf8a439466f4296b24a8a43b9f461f95f5902771d991b0 +size 616700 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 66da48ec3c8..9f0838fe0fa 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:98d50dff47a4d7e355892299e3c35551bbfa0846a5d0af388f287c475d1bd933 -size 591088 +oid sha256:f1c53134b2ec741a63b0d81c54ffdabb4a30488d809523021c6acfbb16ac9f56 +size 590940 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg27-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg27-rail/zigbee-pro-stack-alt-mac.a index 20b463d1f30..b8307fc90e3 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg27-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-efr32mg27-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:07618bcd14762e25422d1a8e86f1141bf5a86e988a741c909db741e8e2c60422 -size 616868 +oid sha256:c206651340d24afe8aa5ee15563305a890d4cacc3de4b3a18a2f96995c21d99d +size 616700 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 0b9ae22e6d6..3a63d51cfbb 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:dc42c46027cfbd122ad3d784bc9191227b57aa33bc15158848aa8825044538a7 -size 602406 +oid sha256:1f7ce8d99539c309c7d30e0d1613851787df67b839006fa0b03c5889a59ad224 +size 602734 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm12-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm12-rail/zigbee-pro-stack-alt-mac.a index fc70f44f575..fb16b114145 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm12-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm12-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:28225a23f911922b5c5804016fc7ff32866170a643499b890487e6154fc5fb91 -size 628346 +oid sha256:cd0689bc4b59834a1eca20a76cf79d24c9d840b8a3c7eb72cce8ec18577ca902 +size 628646 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 2730e54e7e4..f1e3efa1e09 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc828645aa82322ee56e90e26b6550559f6968c05947aec738764aca90662731 -size 602406 +oid sha256:d70bde78aa51eeb7df6deabad7a3f17ac83026f10b38b5f533576bd5682491d3 +size 602734 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm13-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm13-rail/zigbee-pro-stack-alt-mac.a index 07dbdf5e789..5d267c7b2a3 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm13-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm13-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:295b4be636a453f09f7f6991440ad117abcff989db01b55abe7b8df49789d646 -size 628346 +oid sha256:2f00569c3d2be41ba785d4f307a500b6ac181a54520849b9b655a1e3acef8e78 +size 628646 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index d29fdcf5372..cbf829eb4b3 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:daac59a7516b11fb224b707817c493b9d69d07d3eef4fc56f453f8467b7deb05 -size 591088 +oid sha256:354c006a0ee9e43eae41886e1c4e6212630731451dcfbd29e8ecc30dffb4b362 +size 590940 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm21-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm21-rail/zigbee-pro-stack-alt-mac.a index 6eeb4b01402..b08d0568f84 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm21-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm21-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7db834e5e33201019adc220d176ecef7858e0494d8fb633cdbd13556a81b4618 -size 616868 +oid sha256:c70ef4e9c325a9c9382e55c66be7e812a510cc3bf2f5916100d5676a1a5ae0a8 +size 616700 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 942e22db5ac..250f2a52f3e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:222681c3a13665c636cf4ab668a70cc5dcb7c052157a360ec13c68e4e5b192dc -size 591088 +oid sha256:119d5552e795c959c4bcb811d666ed38b16cf7f0bd7758ae071846bb73d11065 +size 590940 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm22-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm22-rail/zigbee-pro-stack-alt-mac.a index 69bd05df126..15ee78a529a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm22-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm22-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e92c84f12fbf9fe1b973029b0b054da1e33f7b456a7d52e4c3a57d84094922b3 -size 616868 +oid sha256:4264df6c384c5be3949dab7eb63d2f27941c9308cda66a79a0a9891c95755a6d +size 616700 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 7dab72faa77..d837ab51fc4 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:59e35055f1a7a3fcdbcad914963914a161184c1f0db34ec429899d3d3c792663 -size 591088 +oid sha256:edd8221995a6c65020d11103876caeb8be483558746f4c98e7c6e1e16634ebdf +size 590940 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm24-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm24-rail/zigbee-pro-stack-alt-mac.a index 97efdd5ceb0..feef1526e68 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm24-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-gcc-mgm24-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a0831189ef32cbcc8f75cd5aa8909de2f170cb466f5f5f897b57f1cfc86bbfa -size 616868 +oid sha256:692b568009d716d0438a2dc0e78bef924733b0699d09646dd13593aa87e7f06d +size 616700 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a index 7b14c91b46b..9e1961eff1b 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:199ae376621aec5e5403891813c46091e4f9ad025e9cce10d4debc2db0b3c5fc -size 1431014 +oid sha256:7f6938ef0782ba92cf59d93ac6f56d95ce52da5c0f3f28d3a79cd5ffb32e8c4e +size 1429988 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 6cf02f326d6..d7f7d5cbf17 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa156efcca6237c7c69322196e2d177c02616edb201c103545691b3971d2681a -size 1378984 +oid sha256:2e87e1cae42213b456177f26642778911e619173a68840d152b6ad0b2a925f32 +size 1382986 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-stack-alt-mac.a index 1d697a7cfd5..d013810c5ec 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b2c3964bd3b5f4758ea30d6fae7fa6ec59b948e02869e3ee6033e7ee9a6d936 -size 1490314 +oid sha256:a49d17d6b80537b5f7793a6c5a072bb75f653d6c6c77d681d364818d2a3e10eb +size 1490008 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail/zigbee-pro-stack-alt-mac.a index ceefa10a7c7..b346b1e742b 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg12p-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81ba3c83485d9ce92c478c8318bbf1f9de21550b5689967d6f6fbd72af8ecc92 -size 1440324 +oid sha256:a98124ea22f31f31da83818618d5ac08a6d79ffc51ee7b00274460df75b2ef6b +size 1444188 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a index 695e15e0a40..0dbbbbcce97 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70c37b019beb6e92a9da0f7b2760848a22b37d9233f8774ec7044fa4e2d23466 -size 1430944 +oid sha256:31125227e4d2a50bdd7f37b47d57be8b7f3116b332474109342aca24852c7eb7 +size 1429916 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 08a0a3d3117..a9210abd72a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d702dd908cd0cf26dda1ab2fe851aa91cdc3505d2610ded22dabf9c55f38daaa -size 1378984 +oid sha256:775f662c8e8e56fd1f96329fe6cfb22c758607ef985d3feb918e63fa0b993978 +size 1382926 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-stack-alt-mac.a index 79884b720d2..4b42e802f40 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bcb41d87838a8995d9be3c9fbc188c9240ab0976795b31e23db554a14879a792 -size 1490170 +oid sha256:86577e81f386c812779b2aed71270427031bfafe871e268ab34102857a51d226 +size 1490008 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail/zigbee-pro-stack-alt-mac.a index 5f1815fe594..4c78ab23249 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg13p-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0eb73ded13c4b390faae97260a66cf091f6bf22ee0cf7c838f8aae152ec927f5 -size 1440180 +oid sha256:4b68657eb7f2317031b587adeb76de11f44d7d9daea44b3b950eba3f0452e289 +size 1444044 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a index cea5b1c7a3e..93adcf976d6 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a260a830c3b251ea51657ac01986b3013249ebb5207d7a17c9e3650737862d60 -size 1395106 +oid sha256:f3c3cfb6cc027454a1f402c328f7bbe1be56714560496b9e66bb6d111e155351 +size 1392478 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 4711148627e..9081ff3cb5a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:508acbdf57f3ee1bdfe3a8977332a6076d8c989261ec93bf153d57aa03a1cc54 -size 1331450 +oid sha256:da4e33d2eb50935e3a5a12507e810c6fb3dd5e8b1523fc23b41c76bab34b0e7c +size 1334206 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-stack-alt-mac.a index de9b6e4cc27..55108d039dc 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2425799a78bb09cad2879f6f925bdf889187348c05d5692db5ad9d7d17c28d6 -size 1448830 +oid sha256:cacd0ffe0e1eb23cc60dd0170159b4237c6eeb33423dc4394a83679490be526c +size 1447642 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail/zigbee-pro-stack-alt-mac.a index e1fb6237765..59985455176 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg21-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a1c3d5ca79b13c99c842e94614db99130c593feac6abd23c77d636c15c50472 -size 1391522 +oid sha256:6825d9e60ab4a1200cc1222c99b40185f5b99092a14407ae1e1d3bc4faa26544 +size 1393568 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a index deb71063498..33937f42f50 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e249baaa5ac70f53099f979900fa22df6b4e106f0bfcbeece72ff0b1c8d2fe4 -size 1395106 +oid sha256:9d01e4f09e5dd3dd4973675cd2cef33b90c13153f5b920e82bdda61db399d230 +size 1392766 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 201c6ae183d..da96b482c2b 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca8af919c6e7a3c3f98c937bde8301a6ac1688526282478b35fc8ce106cfdf48 -size 1331450 +oid sha256:32f7ffe5b6e17e8b5fb4b02d1d2e7edf9b6e5abd8abc1f4507e901682307fc7e +size 1334494 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-stack-alt-mac.a index f6c206427d1..cff9a70ab70 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5783263aee4f39a8d5d8a16ae3ce83ca7d0b9eebcf28594cbd081e475e4f30d9 -size 1448830 +oid sha256:29c64995ba87fdcd5b68739f31156b685f95768f557c53705958a0df0dd1907f +size 1447930 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail/zigbee-pro-stack-alt-mac.a index 20de9ed6a40..44fcba444c3 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg22-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:015ff0ac67adeacdb3850522a5e561abb14f11178dace18c0375b87eaba421ad -size 1391466 +oid sha256:a59d625c35f416bc0e1f95a917a51a4898a806f99e10dc20158ad20c05bf4da2 +size 1393856 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a index 2f199e0c4f5..2870896999d 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6bb9920a138a65f634569f36f637aafc5cb0a63927252e972b31418ea69194c -size 1395182 +oid sha256:351a0bb3ea1797004e28fd1ded2362c1c5a944bc43ad714b1788ef0db02cf569 +size 1392840 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 55e482250af..617e6f57566 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4b2372846b74ed32101dccaed345c633dbcc3ecd1195af7eb3612b4a1aaf9c1 -size 1331508 +oid sha256:32bb5a65d088f622cc464c13c75b996663503ff4821fd555d8c8078667b85acb +size 1334558 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-stack-alt-mac.a index c8bd1425ff6..e78a123855d 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f56b7265442395e606740e442d0d449070c7b8eaee458625154f40ad33bd6d7 -size 1448896 +oid sha256:875f171a735f17d8b578e5c1b71ea5312c84d535bdfcc07f6a0fc137766673a5 +size 1447998 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail/zigbee-pro-stack-alt-mac.a index f28009beb1b..a7e5fee97f1 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg24-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5a52d5743f24f79aba22d52ebe87564b99fb378c9308dd7f50cd95be0bf3cfe -size 1391522 +oid sha256:94e7ebb3c84fa6d40433eb47323133ff45719fd13822502007be605d766a6632 +size 1393908 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a index d04fc8e53c1..693ce1960db 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d17feaf6e641381fd16cc7b2c637b91ca905aa73b1fa7dc5680d54a248f9f0c2 -size 1395106 +oid sha256:350ff09e7cbfaac825359726fce12d8d7d6a0ebaf686eb6cc4c42fcad646162c +size 1392766 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 28a7c2d4e0a..232a82145c7 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f6be4b1a379fde44fdab15819f7e9a6392836ba395a5c8d4f61dcb701a5be91 -size 1331450 +oid sha256:f55e9ad5935c9f2183fc83bf4ec03eaf1b9ff197e24fa486a56db3f30d914617 +size 1334494 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-stack-alt-mac.a index 679e899c422..92cb9b842cc 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4b3224f3f0af7ab3c71fffe2e2d262b870d3de0211aba7a0393026071ad8a83 -size 1448830 +oid sha256:f6ef8a7612017a1a1a2ab4e7d73ce764d1217b46469ca6b24911ef2984119101 +size 1447930 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail/zigbee-pro-stack-alt-mac.a index 8f5c4c5588c..e0881aecaf9 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-efr32mg27-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22d37cafa15736a4a64cfaaaf4f9b5e84742e021fcfa5fd21a378e2dfcc98271 -size 1391466 +oid sha256:e64653f9711b889a27ffe38e2de6752b3125db6ae97ad76de6dd0d8c210fb5b5 +size 1393856 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a index 9f8487add7f..f68a79c4254 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c775ff2c9c2bab62fc4d0f76f828a50df5cfcb5c67e52642f5b731dc37259e64 -size 1428352 +oid sha256:c3810a0119ca5f4bc019c01eadfbfd5f5dd9517e7263f1cbc171c07164d84bf9 +size 1427324 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 7e41818fe3c..4bb9651e16f 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:149dad45712275da220447a754975a050e59b01a219f1c356367cd27a8a201fd -size 1376392 +oid sha256:26bb20ed1268c16259d90a72a348940fbb04f9800ad6fd97611d935f57ac0708 +size 1380334 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-stack-alt-mac.a index 3fab6e7ac4f..70761f03985 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2f9c283ca246b53a3532e321a52bb479a7467fb6fd3227fc51fde927a29cfd05 -size 1487578 +oid sha256:ea557cafcc55b8f6c251433f67dbfbd0fca5018578145d2f2d33a2a7e575a45d +size 1487416 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail/zigbee-pro-stack-alt-mac.a index c8b4099bfdb..2150603228a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm12-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f7353f62b88e6b691866aa2e680d062e970e3c3732af95527964e84d77d94579 -size 1437588 +oid sha256:d7a460dc9f33bedbe14714dbc5fd6e74ddee716c6ddc01c46efc3ed27cfff08d +size 1441452 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a index a507b42b0d7..7f4485f036c 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a83cf207e538a2e3ea8ad08725524849ba23b426c5f0e2a47c148f5a2df2425 -size 1428278 +oid sha256:7af32cf5bb94f7fa95fae0fe0e66c6c1b58f190f6402a277cb3063afb7dd27ef +size 1427252 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 0dd7c268eec..f0bf42f9f6d 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87d4a90561bd4fbe5ab8f5c02fdc666d3f19d98f7076207914f30a4917013d67 -size 1376304 +oid sha256:2af1a980f772e5d8a55585bd14a3bcdf2d6924fd380e210ee37e73c525d1a46c +size 1380250 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-stack-alt-mac.a index d0e513e67dc..a8d3a04d447 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9a5d2ff820cdfddb80d3ff5a446319bccf4b52e195de97046ce518f065a64f3 -size 1487504 +oid sha256:fffa951d98b9273f25496cc87be59ed09c73d65aa28d5a43918e9771ae9b0be0 +size 1487340 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail/zigbee-pro-stack-alt-mac.a index e6db9cf884b..e639c217c5e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm13-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c188cae0e3d11759a5813e0136c48b187a0f15de50c2cb65afc7f3e0b255925e -size 1437500 +oid sha256:6c4db9d06b572eb6e9c2ac6d9fd39c948895a90072492cae2bdf679b8a1e3960 +size 1441364 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a index df5216bb3f2..781ebbe3497 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad1a29914ecac59f21f74c1412d4e144818c54dc21ebe79ca1b0669cffe4c6f5 -size 1392802 +oid sha256:6a877a1ab56480d900c5fb41407e4b746b7d4b1239c5dec34468cc0b371d2568 +size 1390462 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 9c6ed02c149..6994abab23a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:19b079a191faf53ddb53f59ff68467bf59e797de334cb1b519519284c5247b50 -size 1329146 +oid sha256:a168c90bd652dbe84d6fb5382f4b977191069c6b1887591a11106a2cb8617494 +size 1332190 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-stack-alt-mac.a index d9ae1085498..07b7a281db4 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a2be4f6ce0d24e7c3cf641c4ae971cee33d1a723a806f0c579a34c9309717db -size 1446526 +oid sha256:bc250dee6fab58cc098c827c2918c7aae2cb54e09157d88d41c822f7b011bc59 +size 1445626 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail/zigbee-pro-stack-alt-mac.a index 7e4cdd9ae81..f664b51e6d5 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm21-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d575c2a96cbaf359e344d898c415c7bd0b05cb04083d3c611540bc536741eca8 -size 1389162 +oid sha256:b5bbcfe93bcd75c09af43571a3aa018fb15f43f9d26e62d1bf77f0b11d5fdd3d +size 1391552 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a index 0d38501cfd6..53499514d60 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e69fa99d95d6759d37f8b463411f49fbdc2e29a81d05bf617b99e60cfdb1146b -size 1392802 +oid sha256:f18793e05b5616b89f399b2ac1183f6f2be47cebb1c266ef6b5c0420f5b87747 +size 1390462 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index 3972d61e259..c61712eeafb 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1ac34b646c4d1827890f4001f0dde3ac98754e305b0b42484823706ba954914 -size 1329146 +oid sha256:959da23474cf193cbd18c9dda6f86393d4fc43f5cd7cf6b9c135ea8694cd427b +size 1332190 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-stack-alt-mac.a index 2d89047c5af..59af62056de 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2ddf3b601e85bf8e59d77e75ee518da116f5fffec1e20aac6f6359c538eda96 -size 1446526 +oid sha256:3cc2e4f71530c2c763929566ca5bfcc64a9953313c6c096401194f01edbd70f9 +size 1445626 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail/zigbee-pro-stack-alt-mac.a index 25508910208..cedd0ceac91 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm22-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f985e6982e68d76223e4b0f389c58cf7ba8a01f2a110447d02b336a616c39c9a -size 1389162 +oid sha256:63db2806703a569c65e5147a1f9f422b7ac3e13418471b15e6e5804861053d9b +size 1391552 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a index ae5e8641c9d..721311e02a8 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6ef783a5a598c8c1ba57573fca173e138316d60e801260bc49eb230fe9d0b85a -size 1392802 +oid sha256:78557cc959d5e6aac0536b47d9bd666d3a74a59b1a7397151bb85d5de1aee82e +size 1390462 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a index aa0b85c81a5..bfadd74ff86 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f35ddb14e407e2d988bb0ed6dcc33959c7ba37cb9cf4a8b25ae90416a3623e1c -size 1329146 +oid sha256:9cd9aba22d0df4e4cd5aa2662b250145544c0c4f300fcff8a0a7c8782b47d202 +size 1332190 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-stack-alt-mac.a index 365d6eda321..a8c4520ed34 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fc6e27c969ac7646f6b51608b322cc0f2fcec55b2ca980404a9e11dfe22ebefb -size 1446526 +oid sha256:09dd40c7112435950d08f9fc1cd4667c3adcac1012c563fda0f18865870647e1 +size 1445626 diff --git a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail/zigbee-pro-stack-alt-mac.a b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail/zigbee-pro-stack-alt-mac.a index 7259f68d58d..43731040832 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail/zigbee-pro-stack-alt-mac.a +++ b/protocol/zigbee/build/zigbee-pro-stack-alt-mac-cortexm3-iar-mgm24-rail/zigbee-pro-stack-alt-mac.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:82c91a1b5418b6fc360d8be412f3ccae59eead1f160c562a3d10ad9e66738b2c -size 1389162 +oid sha256:0fd0b1986cc23482a839043edcd7bd589f4b7af7a9e5fd5be5ca6fbb0a9eb3f9 +size 1391552 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 1bd65ccabc6..fcc9b4818e0 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20ed97495ee370b02fed53c54a65fe87c024214b3dd0e0011ed675f8251a57ff -size 593724 +oid sha256:3991d2ae12dcdf760d5c27e239fc14a6e06d077fbf23e8a45c0d32932885baa2 +size 594044 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 1a05a32cdc8..3c327ec3e2e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed9ff40c645d5f4a14a9b9073eb9798db63d9cbbd1665acaeb0e59248fb488e3 -size 592366 +oid sha256:3f122a6ed127c28a075e305d4a9721e8fd10519eab12a2d181edf9f7b562e3f0 +size 592686 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-rail_mux/zigbee-pro-stack.a index 6738e5d531f..da827ed698a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89e3a8073b00aa1920b66f6a0d189a1b8ad27e319bce442e530293ca04e199b3 -size 619592 +oid sha256:850a46cb2bfbfec3149bd43d0e33c34a3b588755925e3d6b91130d2b7eb46929 +size 619892 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-stack.a index 379518991ce..a79e8f14f42 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ac6c294bac4811556d9432db6a179d79ebd9efce4ce6609938d65efa43d2c53 -size 618226 +oid sha256:db656a84a6c254a7a9564748b0f1632298f46816a0ee95b676986fc8cc957311 +size 618526 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index f32a8ad5f6f..77d8683107d 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8c25ccd0339f9bd45f8e81904c6c49e16d5ce163b2e593dc18f8b7dc6c9c93b -size 646384 +oid sha256:215a7124f6da24dcf77df370ef7050ff57a5bda8e59732ba0c07592a84bd0dd2 +size 646740 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-stack.a index 0ed668bb0e1..04966452457 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae9e6a41b819bb7961361c3fe5a05c8cc8c4d82731c8b6afc7003396cb8e3268 -size 646112 +oid sha256:573d7ecc4a850c578396e73c2a0ca29b19f042a2f56b971c4b725172e2f37345 +size 646468 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-rail_mux/zigbee-pro-stack.a index 0c1cd117822..520c0af3818 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6a5ee200e68437c8d3317002f342ba72597fbe1bd89de3f304682c75d3544b94 -size 671564 +oid sha256:53930dcdd01995fdb4129f57f89c293a8b258dadec1013d64f7f36a274ee1b4f +size 671912 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-stack.a index f80e2a1ebc0..660666c39a7 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg12p-railgb/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:489d71ca663cc155b1b44cda64d55b7fcb5c1374d7f10463e948bc3b3e199838 -size 671292 +oid sha256:968944673cce64dc8fd9e48ac914ef188751e73bbd1f4fad662c97d6d3c0c222 +size 671640 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 00ea1afea96..670f955bd20 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72a1d88e2922c4ac311d88976eb39773a161970dc6ef22a5effd85b0c8f7c82e -size 593724 +oid sha256:077401ec34df9c1c9c25b39ae15c9654c149e1bdba92b2519b673e0d3f0ba031 +size 594044 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 9e262fcc506..a1594f5ff73 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8978a5340a1df141ef363b6eb130975572be40e1cfae9b114d0f1ed34aaf9f0f -size 592366 +oid sha256:08382f061e407453e4d13388be383f4cbbfe9e0f495ec06b78e39b728f368a51 +size 592686 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-rail_mux/zigbee-pro-stack.a index 996ceeaa9df..028aef7848e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e260ed1f3c49efbdb940bcfc50b8c578964617d899cad94af12f3f423d9cc31 -size 619592 +oid sha256:eeb6206aaf165938ba0acdfd5463e57d83beefc5cbca55ef4ce763046a4c7c71 +size 619892 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-stack.a index 4f527943dcc..e252f31d8fe 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg13p-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5976346aeccf07bf76d29d87bcd1484dfc84b93ca98e5f13545ee8068dbafd41 -size 618226 +oid sha256:d265d8ee42c3e58458d92bd26675a17b8d0fb6b1855b1fdf79b008f99aa8e945 +size 618526 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 010707e131b..a8c029b2128 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:57627afc27b3bccf8e25f92fc2838a16f779d449c12d925d859b3b05a0d51c68 -size 582394 +oid sha256:c20aa2a05247713e5d29517320f4043e6f4227629293acb934edfbec7842db98 +size 582254 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 5a550e95f73..6d8cc904d24 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d15ac4bd8935145da871c50982c4e3cb5f94aff62a14e2016c9ba51e78398b2 -size 581036 +oid sha256:dada24b5e14650dd291623784881bdae039cbeabc8adb774fac4eb884763e2f0 +size 580896 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-rail_mux/zigbee-pro-stack.a index f6bfdc65d4f..8aef1177ada 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7f9be07a65e616c8b5100b55bcf35f9a9aa012499be9021358d7d6387a689e55 -size 608126 +oid sha256:46b81619b02741488af5c0866dd4235a9ebdeb62095789eceaa1b1b6f232403a +size 607958 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-stack.a index 1a980b0a552..e82960f9305 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg21-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2af183705a0cc4fa91c74015b449e5fc1afa504a6c346d73dd9c418195bdf28e -size 606760 +oid sha256:97c8b04a74081116694416f458b142c3c71746991f435d2fc2e8227f44e3730c +size 606592 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 8b402c42e68..71c2c92c502 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4f19ea94fa09d712ee2dbb07373a4e4b69d4a0b4adcfc3216dd12488fcd8529d -size 582394 +oid sha256:6d28fc39c694c420f4e79b0b184305d6914c89a4f1aa24f43c4d67d569280b87 +size 582254 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack.a index a16549b672c..9f1548f8757 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09bd7232fccf2dc0c65f1283f910203384b40c32d090791bf2085172ad356648 -size 581036 +oid sha256:a1d319a84d8e3a6dd5a76b6b8953067b23c4367a009bc5a1d1aafc2ccffaebda +size 580896 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-rail_mux/zigbee-pro-stack.a index 4bba64a00e3..13b67d64434 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b85a69fa9d202660b2f77cdbeb17536ab78e47a11b5a7f609e50ccee2eec2cfe -size 608126 +oid sha256:1f6a47cbdfe371eb10b6edc0d49ca08dc81440acb124237acd9e8b1a1367f5e9 +size 607958 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-stack.a index 5a73ee59f8b..8a7f48f8e5e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg22-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2c1dcde31eb57cc78d178c34506639ce93eba5781a0d810776a2b062ce110353 -size 606760 +oid sha256:884ae37cb23c7b85a4c627e5c69ef55ebc824a3bce46fa89fa97b77a973056d9 +size 606592 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 55a3f7f185b..8a49fce5811 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:446bbd14d37f92f9c33cf1532214c551c72cc1b4d13046e2b27d4ede4b273dd6 -size 609822 +oid sha256:da8b238909b00bb6773a0196b8a6d62bd91778e24bd4aca8a753a263c498357c +size 609782 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-pro-stack.a index 7de16b802ed..80c08a6de6d 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3ac87f6a826adc5db795152badfce4805117c993cfa3525f6a345fe9499b21c4 -size 609546 +oid sha256:5040d88b4e5330b162d6a9250e596876878f004c617408b7ff85e996b7f39ea3 +size 609506 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-rail_mux/zigbee-pro-stack.a index 06227a0fb96..af0dff3e9f2 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9fee380b2fd6b2f62842f2521f4e0d63ab1eacc9eecf5ecddc8b47c8733fafaa -size 634834 +oid sha256:a3476794bdf70e7b300ef55f33ddaa1347048b594f4f7b5f438845e33dd58da3 +size 634766 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail/zigbee-pro-stack.a index 680e0baf237..64bd07ba90a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-dualrail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a45af70c2b5d195eb77074f920214c219307f1df1bced53f506fae4eba15139 -size 634558 +oid sha256:8d7d73835ff0c00e5456de62fef99fcd65006c6439bbfede6fc564d0b8e939da +size 634490 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 0caafae3b71..5661df58fab 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b51211534892fcb0bebf476b9d1fbf422ec3a8f711242c0e50ad44b3ec59dde -size 582394 +oid sha256:45f8c24a75e521e679fc2e7032702dda456f80ae6e125aa586714cc0aed0b8a5 +size 582254 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 305a6c93a6e..199001d1b2a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5201d6c6b742a10aed6262d2889b1fed6dc2176cae6aa755223c6a95c87981e2 -size 581036 +oid sha256:1f185a725c904f72c1385fa879513ed896090a5c02a3e428cc11c4f8602387d8 +size 580896 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-rail_mux/zigbee-pro-stack.a index b6dec18a627..48af4f75b08 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ae309a8a6135ba248b7ec6367600e3052a33e89966ab0ce7d9828c1ec0ebd7df -size 608126 +oid sha256:5d47e8ca52b942a80bed4ad35b05f2806156326dc1db7bebd94b7aa1d5f0eaf2 +size 607958 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-stack.a index 4f372d85826..3b8cd73e913 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg24-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5385789b25ff82ea4dc316f3d613eee4ecfb04cd811deed144395e404b5ce455 -size 606760 +oid sha256:d31845baa6acd8ec78a734945eafa77fc506d24e46686b41043bc3db28e4ee54 +size 606592 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 2d91ecbeb5a..24972748d94 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f37d29948be46a928e9d257e10304194479d2896bfc0710eb7274fdec8ff146d -size 582394 +oid sha256:c09eba42397962c346b63708a38cda5ce174039325939349ec1c3c91942351a7 +size 582254 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack.a index a11e5897d25..5c7b7fc473a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4788504a17c791d8f367ed5e7ef239311c59cac933072c72ae99a4515847598b -size 581036 +oid sha256:8bce99c897126c8adc4e24f89419d0cc655b72f704f2c54f1e7a93d9d5fd5d5f +size 580896 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-rail_mux/zigbee-pro-stack.a index bf00e588d9c..119c66247fd 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5804fd0785827a2846c0f3008521e35d765446aba7bc6bc40a889207d394cd3a -size 608126 +oid sha256:8d888c979fbe523b3342aef7275a00a01e36b27a656eee226fd0a54356ccaf48 +size 607958 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-stack.a index 5ead5f9d82e..b59b90a379c 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-efr32mg27-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a3795e79a642efa2f2cab9a564c148e4c203f7f6bf853b42f0048e387b634aa -size 606760 +oid sha256:31f8adb8ebdb62ef6a5a9dfbfe6be15802f27ff2106741c9dc170df68c1dabaf +size 606592 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index bcbaf0068c5..58156ff0f6e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:76ac6224238ceda81a1e16faccfa84d9e5833c95068d1e1159d2bb49cac0bbf0 -size 593724 +oid sha256:854bcb8359e1a4c9a4552986117faab4d1088c3cec1fd211bc05d132833c5349 +size 594044 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 2a4fc5a1e41..606a8d3441f 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d7921dea34c9d715f71a623cb4c6e8c039bfd4b53976eb1a82e96d5f7769533 -size 592366 +oid sha256:8a97b13ef3e4034e6277e9a21c8eda185c580888c5771229c2638ff824b325ca +size 592686 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-rail_mux/zigbee-pro-stack.a index 352cc1c4c1f..eacc68f397b 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:accc8bd54b2411d84d5121a0a74892174f1f887fdbee026f42c239a9760766b9 -size 619592 +oid sha256:7457eb7627e956acc56d34e5c5d6e37efd3ee7b7375aaeb75fcc547cbe57f28f +size 619892 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-stack.a index f1b51300e89..14ad9688c7f 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm12-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8a55eed88b62aec3779d05741d67c92fa66eb3f7ef5b0b62e8f8d04c6a913dc -size 618226 +oid sha256:1c3591948ef5af6898a0a4c55d69b3776df6644ad7cb32f167076fa748186c51 +size 618526 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index f6ddcf85a51..ae5c82b758d 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64386accf7b12518a428533613290d906899a7b037dea0331911478e2c3e8769 -size 593724 +oid sha256:da226bdd1d5d4779ffee75ef19c4d1198d49a304aa92666c47016c778faa0ad4 +size 594044 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 8329409d8f2..61d19597476 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:feede0eb78a9a804b1dadb6962e361fa1a90e8af03e4677f16d0d36be732b146 -size 592366 +oid sha256:9c4b59e054e46de8ccecf06e817ea5cef725f7cffde57ee529d14b4ac4e7c39c +size 592686 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-rail_mux/zigbee-pro-stack.a index c18573c0cd4..ca27515667d 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce8fc5976c0eb088dc7560e30d0df1e24fe36504a495dbeac2025bc53c01f13b -size 619592 +oid sha256:f2e70eaec260d411193ea6491636e58bf5ea779e47dd7a8ddefc2898c948cee0 +size 619892 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-stack.a index c3f2488fa61..797de0cf82a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm13-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ff36ed9498ef80e6c00c70f1a6a7d44b74130e2107327fc2d96d95d06b84b5eb -size 618226 +oid sha256:d3852bcdfbb0136de4c7198f243cfdebdaafb406512e79c03c5b40d406af569c +size 618526 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index b4a47292ae7..8e8e39a677f 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:86b50446b66de6f40d59c46d97f7495b723e7394f5062d7fa7f62d7588349809 -size 582394 +oid sha256:877aa4e659df8ed7501fd851680d75a63885de1bddcfb8f827bc125728a290ff +size 582254 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 0416b2e9751..27f9dacf597 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72293ad2bf19d54b458ca95cec36d0ea1093976f08d80a0e2bd7a769ac25192f -size 581036 +oid sha256:e5a416b15bf971e093d8fabae242bd5d5b953980412f63a9603a72596f6cdf96 +size 580896 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-rail_mux/zigbee-pro-stack.a index 7b9b57e6a8b..b674a89bc10 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9fc0df840d42b325a98fce1d5c383cea584ddb0d24668835f791699cdbd3b51a -size 608126 +oid sha256:f9b01500fccd46c9cbafdc2f05bc81c889213e5936f75d708d160a53cc90f385 +size 607958 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-stack.a index 003f24f8111..25dcd239feb 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm21-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee70f1fc9cf446c1d513de8c0023f2ef2139a6b22aa36e3eb52780616425ef9b -size 606760 +oid sha256:1fc0c215cb9389db976432d5a72a1ccd65b7c6bf196caac0a8db72a820ba24f1 +size 606592 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 5724e425329..b4a36c1a863 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b3d4de0041b1f172570df821caeb770e3ff4ae499959ddc7d51ba27ae68ffef0 -size 582394 +oid sha256:c59d04c95a6cc13aa1ad41356d0b163e6cfd877c9d67784938ba3b3f4eb93126 +size 582254 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack.a index d35f6a333d0..f8d667b41b0 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b3f5e176f19b2a4acd97425b932ceaa24ca70d3419a31e6da2f3792bb6fc666 -size 581036 +oid sha256:79c7f63112aa6e41a2254fabc1a27976873d45ec6530e4da2186a9161b40638b +size 580896 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-rail_mux/zigbee-pro-stack.a index b7751e86f81..49219c23cfd 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c60b044b12cba969ecf8607883265650de7aaaee32629c98ac80dcf3162b2e0e -size 608126 +oid sha256:db15fe0ceb2799fd39bff242e96b59cbd76943c0ca76bce77d0f91ee3653d59d +size 607958 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-stack.a index de69111124a..faa4357bd4e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm22-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e811e89d023dc85727a72d18b1b735b6e09f6b3c27e9d2cc493e3738c902e776 -size 606760 +oid sha256:f5d9dd120b96a52a71384e3e1d2a5cbfe285ecfaf490dd6e44d925201cd72fa6 +size 606592 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 583df4b1a5a..a84169456d0 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e1839a7c5b12e81f747a6949b36cb9f9247eebb383a24e2058f32b7d5fd06ee0 -size 582394 +oid sha256:7508d63114d3c1a97af7eec2156783e58d0688ddb3b81d84c2953c48dd026549 +size 582254 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 3a096f9b83b..06081c862a1 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ccab920341e6df7668914986ec7663944bb7029ed1e9a4716b15af9cd261c381 -size 581036 +oid sha256:12f7d0797392e2679e6679ea1f5db3453da1582a958a8df661e0e458c727d88a +size 580896 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-rail_mux/zigbee-pro-stack.a index ed025fef1e6..d3a47c856d0 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1b56bfa9a928593e6a1577d82757f8cf7841c6fae5d3bebf7b06c95e31ef40e8 -size 608126 +oid sha256:162097a170c7c63f65e0a27cf919f95ddd8dc22a36c5dadea80a454c28cee453 +size 607958 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-stack.a index 6ab97982559..6e220711892 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-gcc-mgm24-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cdf9a5ae85800cde982246b2f0a48e0c5de11bb5e1359cbe2da0f03ec5f6cae8 -size 606760 +oid sha256:0635ff92aa66692ef9328fb5a646e79b7dda8aa1549a082b4839ec89cca00093 +size 606592 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 774b25c81e3..6a338ee6faf 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:41394b829f81f2168d7b76eb2d5c13a23e864c360698e50841d347da0940a55e -size 1357534 +oid sha256:b1e52967942cf5c0a79825580f81ece8e934cc372c58befae9a4f5f2714c0b29 +size 1360372 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index d497aebf540..c5c063ab4af 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6cdbd3ccb2ef5ddb0465b0e88ada8115f3171a3f73e51cff86b8dc6276a7b30c -size 1407134 +oid sha256:45dd1d2fcd98df08e837470ee0d1a8d6489d41fbeb1e5d7b27950b74a160423e +size 1405864 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack.a index a65091cd773..f8fc6d5257f 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81a7740e3139a91078608aea662782047fcf1ae520b7dac2b34dd882e63a5a94 -size 1352950 +oid sha256:410f84c949b6488ffcd8120334e3b65f8e16c59023ca0ca0f28032408c6b3b38 +size 1355788 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-rail_mux-stack_protection/zigbee-pro-stack.a index 9bd4e74f39d..9dc6dc8ce84 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f9ccf83d14a6889d6b5a833aaa16ba0b787ed1dc23648213f84e4bde238f56b3 -size 1471856 +oid sha256:af80a6db639e7f989be17b0187d964b6b9b4227d77ceaf998aff9f37267d4cde +size 1471692 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-rail_mux/zigbee-pro-stack.a index 118aa315580..3f3f03b987a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5e015a1e4ba5ff18150e6792c6d79cdd48dc2407b5e6f0cdbb664fc09c70e95 -size 1421474 +oid sha256:f206db47b052022ad99e5f4dbef3555df2785405e7df7c069d48fed384f70dda +size 1425400 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-stack.a index d7c149f5ebf..9eef920dd85 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14bfea719a54bd62f6f5f9234570203d2d5424f07e5a6e791cff9db45f421fbc -size 1467862 +oid sha256:62310e240bf6ca7a98db797ea239ca9bfb891c66e2d2f7ac39967b0a09354058 +size 1467698 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-stack.a index 80c3472ed6a..535a5de77b8 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4df64374c650adf48a42a6ac7130a7a25d6193ddbab7358d17cd56296b72f72a -size 1416668 +oid sha256:7eac50c4eca3af1d5675ce88f8d92fec84bf8b85cc51f66c3c5eb882ba4bce38 +size 1420670 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 25f70032fee..531c5044001 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d30e0989bac58745425d7b7cfc8d6792a2c1b6a10f75e5d4234d8bd28c33e4e -size 1426384 +oid sha256:43717c6e0aa43c6a81ac92352ffa692ea81c5fd63b2c53d003d51ea0ac8ff0c2 +size 1429250 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index f228d6ea40f..7885dee2b07 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58c8259b47d83a815952f501cbb7ab477964b107264f8b6f890520d159f5d409 -size 1477850 +oid sha256:afd6ac356d038ce77e6943d524105e27e02ad1ccbf538713c9b3aef29833c5e2 +size 1476612 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-stack.a index 126e98b0c00..cd7713d024d 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7fde03a45534909db04f751b9c49604cf5be62f29733330fbdd81faaa431c019 -size 1423218 +oid sha256:5733c4628b730f11dc8d6200111f72a8ba7acc52d30bb49e1eb135790b073256 +size 1426080 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-rail_mux-stack_protection/zigbee-pro-stack.a index a5e48859e19..2ebfbc5be58 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13d26a962f7c3fbd3d68b4568be09053326afec764343cdc8eb86277bf7db4ea -size 1540052 +oid sha256:76498fa06294e20b891833c94a8a213c46465f08627c8ad42dc9043196b6acab +size 1539926 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-rail_mux/zigbee-pro-stack.a index 65747446ed5..fe8bff501e6 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6990218454b9e3ffb2867e21dd123cb5298823bdbb77b0ba96b80496ce49207d -size 1488460 +oid sha256:59de47ba02757222176a59882d8615d4a683a73703f399aa593e1e541aed866c +size 1492420 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-stack.a index 0533fdf2d37..851f5604b0e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5286f6a9f60c51ae2b25fbdea758438cd4b82531c6f23caf4ecd0ff594a896d1 -size 1536878 +oid sha256:acab2a8eb6657641ee388c330bf6f7cb3060b115eb9f061f10596af212fd00ba +size 1536752 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-stack.a index 5ee9e754b4b..2ea00dc9a77 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg12p-railgb/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d61727a3b405c396d0c560d951b27edfc5ec9c704119a322ca29fbf04aba828 -size 1485210 +oid sha256:e3424d9340fe35dcc238f11fa825c1ae8bdba4ef53cb5c50120fca1ade3480dc +size 1489170 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 1c586d03224..b6ce2f377b2 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:03286442271a286a3b2d6e1330a56589d0d56bebcf20fc5f33b0bdbccb6f17ef -size 1357392 +oid sha256:2ea2e5cc77ff509170f9876dfac4ee0c6d8c63c471d4ad0fbad8c5b662910087 +size 1360230 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index a253f99e705..b7bb0c97426 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d15e310222bfc5a78807e49ebc9490e00abd750ecff27f672acd8519da941f60 -size 1407058 +oid sha256:80e74c8a6bc2f4bff54a6d418bf9ae4bb4bf2ea979dd7d9db55b9bbd932733b0 +size 1405788 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 0e57c366a8c..c45bfae804b 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3835ebebf4c6b3f9310832cfd056a53517f971fee4e14ba449b73e7f3dea1ee5 -size 1352950 +oid sha256:db090769ba9c26f5e270a7f2dbe0e91780e1f59fb2d4742b3d90f9acca876640 +size 1355788 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-rail_mux-stack_protection/zigbee-pro-stack.a index 21936123a3f..cfae4ff85ff 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6e06f3af05aa19f9cf3fc21b8239aa5f600cbcec7bc559aeb8710471d02511c1 -size 1471778 +oid sha256:1c301ee420045ff135c4f995e9f4147a4d74d572487840346b8a3870efee784b +size 1471616 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-rail_mux/zigbee-pro-stack.a index 4d1a0cf7bda..2d301eb404d 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66bc61e6118e85f45768c09a6378a8c162507d54056aaac978c95c91e7af4e50 -size 1421412 +oid sha256:adad6a47853af5278bce228d3d29caaa9ba7930b3ed59e98e9f0e60cc3440c14 +size 1425336 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-stack.a index df589440b86..c4adcce8206 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5658104e5bfb3dc3196bea21b1ce486687e5e7e9030a4d1e2f0e1b207fcc4f31 -size 1467786 +oid sha256:d699728cf3b755e1fa21d09caeea286c795c74f62706df618d99008613008ef4 +size 1467624 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-stack.a index ae1367f6bb3..1d6e2379c05 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg13p-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7d36bf522666bd6c624d30c09b208b39060c20ca0fa2f5c6c4cb6a00ead29ff -size 1416604 +oid sha256:00e297d95e422a739d4cffb5cf1b231a8c3de448c6974d5cc5bd4afa0f32af6e +size 1420528 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 9dc3194d27b..3696fdb158d 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed181bf8101014eaa3535ffeff3bc06f91025b80fc51cb6f9bfac2bb0a24e3eb -size 1311852 +oid sha256:fd6310510a1444086ee9fa6d98355d5be03353c558f4818471446c7a678fd143 +size 1313512 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index e353440a491..081d1a6ab2e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ce606a88ed0ee898b2dd156bb29dc2d0b7af5ae01cc4f877dac374b6456afda5 -size 1369938 +oid sha256:62f78cde3064773ee53804b44da2fa6f3f2bd9e9c96b0a34d0e7c5b49dd65eb2 +size 1367068 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 22fdcbd0f41..6b7073fc7ae 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c29dc6739badf97ff3e4ad0e982799a0413a69c44ba80f403d8e67b630ddaeee -size 1307322 +oid sha256:1b06e8267365de046d3ec1ec5d6eb28be7a1461b9484cc3bea57687852aef752 +size 1308982 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-rail_mux-stack_protection/zigbee-pro-stack.a index a7ddbfa0f17..765ed667181 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8c73c3b2a9e18d48ec8b84e1dce40a545e58a70477c091dd8a2bdfe1c51766b -size 1423652 +oid sha256:1e20e7282b13809d9d40e3da43f91740e8d336e93c0a820333bb251e13e46445 +size 1422402 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-rail_mux/zigbee-pro-stack.a index c4e726f5943..1f113806805 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7596e2b2aa50073cf253788fa457a5ddf9bdc12805ce9e5914b6d25a2a7a35af -size 1369914 +oid sha256:a8f333b83e5dddce2f56d196a3072af9ae6d2b3cfca501eec1826f3dff233d0a +size 1372014 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-stack.a index 88185c47332..af11e0da5a9 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f12379049165661e7c4f77f08949618bd62ee88e2d801d9f6b0051a1e670b5b -size 1419652 +oid sha256:3216ed6818025d87e9ffd929abf3836180e4e752c74c5a35dcf55e40286fcde9 +size 1418404 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-stack.a index edc0e112474..d02e982f326 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg21-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:01cb1b1fa3b847f04c9e9d4ee05b4c9d454e5867075c2b9ff0101dcd4c5d7015 -size 1365096 +oid sha256:f7da5f21af976f84806a9b964ee87a2e5365e44a40ee7cf21e219468ffb0f7c4 +size 1367198 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index fb47b213fcf..25e693e226a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7e51658776e04a8a0246631fb409a0c55f9248befe8122bd0cfee15c20af8165 -size 1311852 +oid sha256:7edaa63d7893697e357eff96f8eede583d36d8c64aa3b580a741e732b7474ed7 +size 1313796 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index f8658bbc413..f310b64b0af 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:80df4dbf3aebdab0aaa0b8300f6fde532439f733a3191f79014feaa5142622fb -size 1369938 +oid sha256:694c6876391270b8ace018ef87be9e6fd1c35f6ac82f1715670c5f47c9b316b8 +size 1367352 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 7ed8b7b2010..066a34d5647 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2581800caedd44081a00a7a5f0b39f9aae226ff72ffeb8d252fa22be50fb4d8e -size 1307322 +oid sha256:cab76355673e7c8bc4bb3272f3cfdef1563f29aadfdc517303042831b3eb40e7 +size 1309266 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-rail_mux-stack_protection/zigbee-pro-stack.a index a8eff796ea8..bbc85dbefd3 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:741d7e9653b96411d01cbb7e5553b85503f56167336e4bd2dc60549476e86108 -size 1423586 +oid sha256:d23bd9a185638c7ba142d4c81c467f077ba0144d48b5ca802466a21dddc62c78 +size 1422686 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-rail_mux/zigbee-pro-stack.a index 5069df18166..2e29283a0ca 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b8f7b8468c26662b72bb3015641a74ede7f0d4f73b52b471f2059a21fc500df -size 1369848 +oid sha256:20aad84e27af23a4181c41d910740c025809f5b926e48eaef615db869920af4b +size 1372298 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-stack.a index 9682b7337b0..04307efa245 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:100989e71bce075dffb8ca096ee5511f96f957cf06aad5d5b711ba651fe07ddf -size 1419588 +oid sha256:6ce1868d59ecc3fc38dbc436662c3ee4ff30f6e295b1d6d72a6d2eedc68d04df +size 1418688 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-stack.a index fe730465c6a..211c27073c1 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg22-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed56a5b76b94f0573d896cca87334df4f925cc01c2c3ca8df906cbdf9f9178ea -size 1365032 +oid sha256:44af629b88e4787d322b777266eed7abbeb705f41625769e63e640e79b9e5c28 +size 1367482 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index f45486fee12..6d0d07aa023 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee61843af65ac41ac95e595c35da82eb4165099e2c35d71b6939801be3cbe75c -size 1307062 +oid sha256:f3904da49902c26e091c52d4e9d3d95deb91ea802ff2619c1b3bd61925957b9b +size 1311588 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index 4f058be5cce..70253f9b161 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:624fe783c9aedffa0efe659156d86fc66d24c629aa210d817b8828ced825989b -size 1360866 +oid sha256:47bf22061eb52f639d8ee18d637df6bd4fb9c1afc608f5f61154845111ecfcf4 +size 1359996 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-pro-stack.a index 5829d1e215e..83dc37decdc 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ec29acc7e2f24eb55bddd84837494bac4a3b9de145d7c95be48d0f3b1c9a59c -size 1303998 +oid sha256:cbb8b0afb097c5cb027d1bcdc5914e8ecce15713f51f8bf4b1da94ecfd7003bc +size 1308524 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-rail_mux-stack_protection/zigbee-pro-stack.a index d3be57ca7ec..42eead318d1 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b022ff375b060ba5c2dc829421d1d8f948cf820a56be718332c97105ff559717 -size 1414646 +oid sha256:75ba1e707262fc465745f20be2f877abbef3da9884b356176041fa2f1571b96a +size 1415210 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-rail_mux/zigbee-pro-stack.a index 5874f542c33..27983a235d2 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aadcdee61fae61b6c052c0f4d38d1562a89f6924bf108787207f2c4d0174d7a5 -size 1365100 +oid sha256:cdd0ebe093541ff73d7d75022cb0b82538ec48cd35eef48b5f252cac47c52a2c +size 1368948 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-stack_protection/zigbee-pro-stack.a index a3be80c962a..0dbfc5f1343 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31f36f3a5c5afe596351b085ecf132c0bab6f6984667c6b8d03ad580ea42128a -size 1411584 +oid sha256:24bd7ded09505926853a7bb55fe597e1be8f9ac23c59be4a7ec25f6e8cd70dbd +size 1412148 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail/zigbee-pro-stack.a index fac2ea9698d..c02e2951594 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-dualrail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d79ddebf7918f1a4349ada9dd8251d1a671d02a25996a52f828a4053687cbe39 -size 1362036 +oid sha256:a84c2551592d1d3d8525f48d07417f998778c200119666adf22df58c4158ccd9 +size 1365884 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 393bff01f97..9293e44f5ef 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fd3dd6eb4cc2f5a291b1f4cd10777adb133d9062f1b1f5c95aa3b381dad28da -size 1311902 +oid sha256:b62be263cc462336f2d9985f6484e862e5aaa99a4d6e0bae45ff7fbbd39966c3 +size 1313850 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index 5f6992b5aec..b04f202b650 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0d14d3b38ee38c2ceaab886cf0972d30bed7c77839fc68ee4630a2593e178a16 -size 1370006 +oid sha256:31123dd15e779d583cf6580426837e199bf39fb9d4cb2641267a5bdcf06fc03a +size 1367416 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 4384dda8492..bb76bd18b09 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:81673f5a195a2d35e04ba27f36b47cf33ddef5d14dfaa610649328c65ddca7de -size 1307374 +oid sha256:a5ae9827ff38aaa6620c3a4c513590adb01f5399e2f950ceb8f1344839c55f7b +size 1309322 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-rail_mux-stack_protection/zigbee-pro-stack.a index 52c4fdbea7c..0670e5bf77e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c3ad6c60c0d5c066f79d81c9684bb2ba00e6c0a7ec17947793c9d3f9383849aa -size 1423652 +oid sha256:d003a2cd075e66a6a4897ec4f221579a6432cf6c504c7f78264106b8907bcad8 +size 1422754 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-rail_mux/zigbee-pro-stack.a index e82b2800fc5..c0220e5c82c 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fdc21ca40bcc239360de29adc9752ad7a6e215e0fe2d3632bcd6c16776c63253 -size 1369914 +oid sha256:d73b9d048dcd003bd32ac6f69c20c1cb85756de327fde3a85b5519ce1621611b +size 1372362 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-stack.a index 8d33f0a9d3c..ce9adff91c2 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4edcde73362851888e7916c5953f4e9b3fb09fe3ba20f4002ce538830d5d1b5 -size 1419652 +oid sha256:1ad3cb982105b38a6df39b5d34d71d5be718c8d090fdd2fd0400cee437c72cb5 +size 1418754 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-stack.a index fc382f4fb9f..13f1523fd80 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg24-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:952bbf885c1e939b7d8a6b2e7f8959879353f2a8c537300e1d746246f2e2d2cd -size 1365096 +oid sha256:344e0eefcf4d51c74a7fa03819b68551caf066c1926d71649ff1e873163422d8 +size 1367544 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 57f7ea883ce..9913bf9b410 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:920537eb3ad38922e9b8a84234ee38068d684d2d9c9790f4a6b69d469fbdc50a -size 1311852 +oid sha256:879e6397a5b0fc252111b482c5dc834f34631b979cc718b75ef9094324f7f2b5 +size 1313796 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index 91815fa361b..310feaafcb0 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a51332d4fd9cc9eb9daea0f1b9a1c7a27e522b33bf26812f91a461472709fc2f -size 1369938 +oid sha256:4309efb690f0a3eef441cb14f85a0af77a3cab9364a2d220e237346077b7fe2e +size 1367352 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack.a index ecff9ef03e0..54ba24fb739 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3f637f075f49d020409a40276e35ee15534950b519140f4be23434cb1ce1ffd4 -size 1307322 +oid sha256:3a42f7dc75b9fd3d2b4f983e4c5ed725fbfcb472e5e1abfdc3e9026b3a76289f +size 1309266 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-rail_mux-stack_protection/zigbee-pro-stack.a index b70f09db7e3..741e4c74b44 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e2ea904a10461aeecfb5aa85ba25be6f056b927e38bbe28be2cb082e6c3adc4b -size 1423586 +oid sha256:be604f13fbc1c75bf2f683ac885e768b21de65acc5408d688059a0932e277f7a +size 1422686 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-rail_mux/zigbee-pro-stack.a index 3a6afbe5658..5dceea4b9d7 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b6ea0a9462dd24272299a0ba055a98036e0841426782a9ab008b60d5a956e0c3 -size 1369848 +oid sha256:87716aef6ae7a1cb58097957d399fc1400b68fd8b29795a89df0186ef1450828 +size 1372298 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-stack.a index 0947f5b4451..920362a47cc 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:883728026dc44a5f0242d364a98c5c6b25798ac67e537158c2483a84ff9a1ec9 -size 1419588 +oid sha256:6dc6ae49fd12cdc622a3a4d1dd307391d0f2bd99dc417b9398228bfff2ef20d2 +size 1418688 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-stack.a index 554ca62b385..1c797276274 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-efr32mg27-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f1409735f10bed7352ed16baed64895fe7c49b991d209c27a62ab6cfe0a313a4 -size 1365032 +oid sha256:f0009a84b0ccfee25499352b0f22da96247cd53a0df01a9a5be351465f8ab7da +size 1367482 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 45b7ab2bcf0..d9342317cca 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5175297d0b8a9f99971fdf4853d28f404d9b59bc5eb3f271011df0bb8fc14f0c -size 1354836 +oid sha256:bd99f2c6bf9707d65568e592b9d8a21bf09349b0e115ad02b2426b69a76889a3 +size 1357674 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index b1171e803d2..d63dff2699a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3781af6cd36cb56428df1a3c12a0d5459372a47927e55f96086cced1686bfb43 -size 1404502 +oid sha256:70c0a121cf84b4c67354cf55c95e271e453cd9e214279f1fe67c38a66f001706 +size 1403232 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 227e3069bd6..d559dab5d93 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fe6acecc259f8162d1712dba2127090a20e9a0b14cf89dd8c38aab76e1f4379 -size 1350394 +oid sha256:1109a1dbad390010e6117545b98828c4f1ef0494d2ab2ad50f0ac463bc5a6ace +size 1353232 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-rail_mux-stack_protection/zigbee-pro-stack.a index f345476ebb0..d65aa874f7c 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:97261d34c7568ef99aaa11b9ca8e7c6c9ba5a3a25d4c5b93cc6724fcb40f750a -size 1469222 +oid sha256:88bec66059e96c9ee9b0bfba49611d7dd921365bddb4554187745e42533615ed +size 1469060 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-rail_mux/zigbee-pro-stack.a index 46124cea719..f32bb53f257 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:66ab8adaabacc888d84be676eda73661400cf1b4065b1a422f74978b9fadd0a2 -size 1418856 +oid sha256:c69ddfad91de2f876854a23845a8ebea4312ece6134229f8747b9540f05247bd +size 1422780 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-stack.a index d2d3255693e..6871f80d404 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:72d2cd635bacbeb780f5cf1b9a64f5378e58c1ec48593a8bd2d7c01b0b75735f -size 1465230 +oid sha256:8ca22f06cb3f7c0c73587937768a88952457303d6217df5357124a872af8c16b +size 1465068 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail/zigbee-pro-stack.a index 5597e9d5826..04e6e40ed47 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm12-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:01712e4c21741e90c2f9b4cbdebacc53eac6a3fa1d47dc8fd3c62934815804f3 -size 1414048 +oid sha256:2998468ad30911bbdeac526bd29b635dab2e20ff1e95824b3be58af1da9e05dc +size 1417972 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 390951d2e54..e72b60a15da 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5145be967db7509086cf0e9e5d76d2428a401e348a272883b4a909a09fcdf6b -size 1354746 +oid sha256:2bf0a4100e96c500d5d6b33c6893899588feaf9be6d34f745f9ad80f6757edd2 +size 1357588 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index d37dc4f599b..bbb98cdb311 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7a320cfe00534924b5acdc3441149ad804b19a3408ef6aebbd83a2965a566d9b -size 1404436 +oid sha256:210e1c30810154380d03d4f4011c920b7280123627f8f4b80f7b7f900bf8a4af +size 1403166 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack.a index f885ddad2b9..e9a769986ae 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd3714e54adbd4725c9a332e8947c405320cb85993a6a0d3b3d9ec81f6c9878f -size 1350302 +oid sha256:5afc1fb610eae0a6b4654af5a7f478a4708a8038989972703a82696b838f8309 +size 1353144 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-rail_mux-stack_protection/zigbee-pro-stack.a index 5f340bdb3d0..93a9784a75e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4287385f4639c3fd707096dd1b698fedafecdab6185d22aa244503edad7e455a -size 1469158 +oid sha256:01b0f5cbe1ace90d083635bc712dfe436ac2ada6ce547d12f3ea5314214f7925 +size 1468994 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-rail_mux/zigbee-pro-stack.a index fa723e6bf98..2c63e6facbd 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a38f31a9f96b1c7d27608a35ce6c8c3260a35b4c233d36d8a3f8aea6f0ac0f4b -size 1418776 +oid sha256:0780251ca27aea5f0670b28078054748350de09bfe99e2d349c7dd9897dcf1c8 +size 1422702 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-stack.a index 790f6b3bb2d..3486dc11a92 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b41dae48d69b4d7fa786298bcb685a3665dac81bce2f0fc041bbf9b6cdb4367 -size 1465164 +oid sha256:935fb33f7de5dae747dc8d11922456cdc4febed404d78a279abbcb2e83358c81 +size 1465000 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail/zigbee-pro-stack.a index fbaccf735ce..7fd682f1bf5 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm13-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2d1cdeaab8cc66314283ce12277957941f8e7c5b3402de63f9abef5fe2be50ea -size 1413970 +oid sha256:ef9626eeb33e0d8527cb696cc318b06864a7bff416f5c1df627ff596617d44db +size 1417896 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 37643f5a9a8..1d442455bd9 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4fb52f2bfe17b3aa104972dac5e98595aa91d5437a4f6aca29a7aed40bf6fbc2 -size 1309580 +oid sha256:0ab451de2ee5f189b55d46cd3b1165108c4d50826ee662bcbecc02f84a538ee4 +size 1311524 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index 8c25c153227..89bf0ceef33 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89fd0e030577c9414cb46e17a831cbdba811b6977e2acba6dbf6a018619c2cac -size 1367666 +oid sha256:e84b384d7cdfb4f413ddf93fa0c24d5b15da02cea2da3c385cc89ae31214c4f3 +size 1365080 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack.a index a102b923ff0..a3668e41f58 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c3bc615557cc905cb3204ac42bb2073394d8e7955537a271a5e8f08cfada083 -size 1305050 +oid sha256:1d2cd75988c8dc8f5d1834ddd6bfa6b8e1669fc497e0a8b00bba37303dc28f18 +size 1306994 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-rail_mux-stack_protection/zigbee-pro-stack.a index 810811e28ac..00ba37ecc3f 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ef90a2c9ef3df35ec0903e7db4f633d6df6c99604bed1367bb276fa3cd92505 -size 1421314 +oid sha256:36b2917bc91ba405350b470e28b0ce3e9a010fa1262fc069a7d1334812fcd905 +size 1420414 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-rail_mux/zigbee-pro-stack.a index eb46a5f27fc..abcc3add70f 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d8a19b46670c31211ef03dde28ac5677b16978c9b87f21858b74a89ada032b96 -size 1367576 +oid sha256:90abe87f2978ffea7ddfee7c340dbe6025a2a52c92f9e9143f84752b5a57bb02 +size 1370026 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-stack.a index df13f97293b..160ac03ccbc 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6aa68fa08a13b70ca606b22839acbb925a5bad1b367982ecaf2b689bcfc460c3 -size 1417316 +oid sha256:f68cffd1986656fe11c80bccf958d0e87bd1330b5ceb8341211fd8008ab857c9 +size 1416416 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail/zigbee-pro-stack.a index 5351e27647f..41057ad6637 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm21-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5f7b0195a329c9efef1d1e7300df70edb4d672bd554d6ec299aa2fe1e988d3f0 -size 1362760 +oid sha256:1a5009dfd8f26113e27c7522ad0d76c7830f6ee29aae524553760cee440f15d2 +size 1365210 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 375b907e062..8b148af4ad3 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9551bb5b2cb92c940155c445c35b6b51ffcbc7a1ef0dee715f26cff2957e3255 -size 1309580 +oid sha256:c685f8b16b35d68cb91dbf231898670e54f9dc886135f7faf3b8960065a34594 +size 1311524 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index 94db15e4d9a..6fb4b973505 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bf7fa5366992bf02f59b19f88946aa9cb786f5295fc440f17ec439efd5133e51 -size 1367666 +oid sha256:e8947e44eaa54f4973e307aaf345ac30a74ccca23efb13bd67b617251d830c43 +size 1365080 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 6f0a0912843..2abf2174982 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f6cac4cb336ea78ae2fbe136ed9159e4ad7b1c0d697fd9330993b2ffd0110dfd -size 1305050 +oid sha256:df352e22d0c6919652415df346881c97e7bbb473b284d623108cb841aa2af802 +size 1306994 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-rail_mux-stack_protection/zigbee-pro-stack.a index 048b8f5ac1e..bd4babbfc4c 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3de3e2bf5591081520bcbc47f665ebb4fd6a3c4e913896f8521526b3ea16d73f -size 1421314 +oid sha256:e7631a593be98dfd66fbce2587dfd22fe9fe9ec25a63bed375460726d1589b6a +size 1420414 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-rail_mux/zigbee-pro-stack.a index 0454df422e5..620e2cf6845 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af5998b7e038d91e166d4d2fdac9d336d3a2a3b3df5d90d180850b8183677cb7 -size 1367576 +oid sha256:cecfacab3c6f0ebdcd46fd6adc0f68a5baad59178d4e698dc205ff61bc5238d5 +size 1370026 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-stack.a index 1d29cd656c5..3ccd27bc025 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5774ec87b2a2cd69c7453d04c9a80e60c93790d97563faf9345f071fb595c20d -size 1417316 +oid sha256:6feb62b559270ae6a80510c34788ef326ff445e3bc50f2bf71f2a81868777002 +size 1416416 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail/zigbee-pro-stack.a index 6b0007cb99f..0d4dce5abe2 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm22-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c49b3bba154f0ec3bac4d12f7d7c4c8b87e56643615d9bbbf9b3065f9c659716 -size 1362760 +oid sha256:078daa7ca7030848dbf78f2547bc832d79a58a8bcd315c3ebb28fec1e74c4ea9 +size 1365210 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a index 62387837e92..4e5f84b4ca5 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95abc5a75b197c105343f96cc02a7f5a42f8100ec452b2ffe564c794de01308d -size 1309580 +oid sha256:91fdaf982c71293eea27fd516262257f7f2322d9d4ce981831f5e11407cec4ff +size 1311524 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a index 4749a8ebfa6..994c44e9a43 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5b183386a868a044418697d065888a18ccc27eaabe4341b27c5d9c1c1c2bdb3b -size 1367666 +oid sha256:991b084637359172c2a579bc240363ac220e35b8bb6812316c081e2443430e40 +size 1365080 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack.a index 767255e1ae5..0c2afe2a9fe 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8fca9a125cfd9705c6610e7ba65edc18e7c674d0184901689541ad1aa755d8cd -size 1305050 +oid sha256:763eade399f31879e2b0c41dbf75f7e857a0e12d99a23a430844da5e2c1a5923 +size 1306994 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-rail_mux-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-rail_mux-stack_protection/zigbee-pro-stack.a index 0e9a2086b59..235b115310e 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-rail_mux-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-rail_mux-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c616f610e7d3e5ba0dbb1b799c48615290565d3c672b2d48e00330db62b5a952 -size 1421314 +oid sha256:d4cb3480742a107066936c9ca3146f0e4641caf21c85e8bd0a1ce478adb51cd6 +size 1420414 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-rail_mux/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-rail_mux/zigbee-pro-stack.a index 682319b496e..4c4fabf1025 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-rail_mux/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-rail_mux/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb8b10ec67b1666015185c8047b52be90878fe41e06bee73d7a8a34c987f949d -size 1367576 +oid sha256:a097cad2fd5f93874898c69bf8ee43989b69ab95360c237257daf74d1b0cba41 +size 1370026 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-stack.a index abe2626b81d..84d0b185fec 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail-stack_protection/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cba7fc694e94cc8cdd9924bc4010c9a677841d1ce1cf789c16c2482400deb094 -size 1417316 +oid sha256:e859d924fec162f58bb8ad71d47e624eaaa47e1f388c6c5f81987d1593b9b495 +size 1416416 diff --git a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail/zigbee-pro-stack.a index d537514ad82..6f9d2851d33 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-cortexm3-iar-mgm24-rail/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c519f3a0ea8ceb4046a3c1d796f065068b2075819bc42fad6bd3f0f3ee702ef7 -size 1362760 +oid sha256:9579390ac4344d84d444f280f3f84065d0bdc9e49a1e76c0818a933165a6667e +size 1365210 diff --git a/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/zigbee-pro-stack.a index 44b48705781..aefb68bc34d 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arch_i386-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d9bca1d1969754db2962a546dc188b916855da576f6a8f447d95b67f09a7489f -size 5883552 +oid sha256:82eb5f8b723d85bfbb732cba8b2e950cbf8252d04542824c68f1331de875972a +size 5883696 diff --git a/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/zigbee-pro-stack.a index 39c36d7c330..88af96d0c1a 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arch_x86_64-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:267935cf2f49221134542cc751e87132207b6f224b76e93712a3628b0e5f14c9 -size 7130556 +oid sha256:f288b1fb2abcce1eb0cc6e131192b6b2c839d3c4b58deb2ef6e63fd99d761e3e +size 7130516 diff --git a/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/zigbee-pro-stack.a index 2f9852978dc..a940d9b59d0 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arm32v7-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d6d45685d55427ee6ea0d962e7901ea64f27f6547dbe6858dee62c2b87a5de86 -size 5381088 +oid sha256:80fcd052c0141bd2f5a152d2cabad62307fac7aad3c14ff67aee782015ee7235 +size 5381012 diff --git a/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/zigbee-pro-stack.a b/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/zigbee-pro-stack.a index 488fb9b2931..4a1218e0da6 100644 --- a/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/zigbee-pro-stack.a +++ b/protocol/zigbee/build/zigbee-pro-stack-unix-gcc-simulation-null-arm64v8-ember_multi_network_stripped/zigbee-pro-stack.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9025dc08d193ccb228140fb93b91229a6a7f0ce813659a5c448e54995ff0c16 -size 7327164 +oid sha256:809d2453e6e641a1d8ff9c0cd62cbd00c9aae30068de6c1d05dddfac901733f4 +size 7327188 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 655808532f1..9f32bcc30a4 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca9ffc70d64801b0ad5239aeba2351dde606312ef05fb1db66abdcdea31e56dd +oid sha256:6d2d6a4ef10d61f6e7237f8a124649a69366129f2d3c3134ac985b7855504e31 size 17680 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-rail/zigbee-r22-support-library.a index aea2d95053a..87ebdbe737d 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8bf024b2f739fa6b7ad955d3739060e405d6f3dc956ded8bd5cbf64ad91fc1e0 +oid sha256:3c5f0ca0ba35eeefeb3f4fa3862ed2228b6127c6abd9ea33518724e865505491 size 17976 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-r22-support-library.a index 1019b402b9a..297966ad04a 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:01ddfb3c5733fb2afe00c6d66afdc0c398ef3980460708c8a5ef3823c652f1f0 +oid sha256:e42b1760305b36d33cb056ddc6b2997e00644102054886c17d6f54a6b5061624 size 18080 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-railgb/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-railgb/zigbee-r22-support-library.a index b1bb9ac08ae..1e8df8b2588 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-railgb/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg12p-railgb/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d73cb0581e46b95794171ed80b0535abd703d4991ba40459396b86ee4c580245 +oid sha256:2e55859e25007d6c560c396cec3aefb86ab088203e2289722c9fdeece4cf65fd size 18372 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index cecb21a9b08..b9c80135973 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4788ed137f71c4044e09ba4be3bba6b3a27d725cd9f657533b766550ada64d10 +oid sha256:e95f09a0a598ac01b0dbe303c405996e02b2a8fa7ac4ced237b6090332942278 size 17680 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg13p-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg13p-rail/zigbee-r22-support-library.a index caa9f40392b..dcc783403a1 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg13p-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg13p-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9927e67a971fd292dfb0cef5617bc392590fcaf3e8b724bb8b4b1c707729365 +oid sha256:1207f83d67c5c4ae943c63efaf564ef7ad69f7ed109fb7951e9c8641336a4c2a size 17976 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index d6ce7faf25c..d77e49fd9ee 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cb5dfdfc90ab421575cf527613060f97b1cb3b01a27264058840d32da38721fd +oid sha256:21b3c8b1d28d4c0d45bb90a8a136b590b9b61ec6b047cee14fc0627e9d542b3e size 17692 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg21-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg21-rail/zigbee-r22-support-library.a index 8939ef6f5a3..86d7c437c0f 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg21-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg21-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:886f8369c599580ff552287ff06906607b28691c2bfa970dcb45d8fbe5c742f7 +oid sha256:e13bb00f804257c7cebc872bdbd9de22fa5be93f33a6f54284fab1fcf6d14b4a size 17996 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index a8ad1744f0e..d9b1ca56230 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:418c096fa2b6daf56417a1e97ad8beec57fd46e0df6e719ce16a047bedf185b7 +oid sha256:ba85f9440416700782c7bfb66776bc34182ce666ac8f3fdb75c3644cd853a13d size 17692 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg22-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg22-rail/zigbee-r22-support-library.a index f8e1f10fad6..89bd9447e38 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg22-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg22-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5446b3a4a45980580dab9dfdaa75630b5cae92d32d483c043e957a58dde237bd +oid sha256:ef20df1311fed194053ad9cc374757c4c5758a13d897f0047d17daaf54bf3acb size 17996 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-r22-support-library.a index eee1d147968..fb7e0de5542 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06205c0dcccd9bfcae1b8bbb54289aafa2b6f5f71c3579fdb2f67a93850ac53e +oid sha256:e56689269f8fc56a75339b2bad8beae853adf9bc35ccffccce9cd9c444a72434 size 17824 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-dualrail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-dualrail/zigbee-r22-support-library.a index 30224f2c5c4..2a2893d6e17 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-dualrail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-dualrail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa89b2ce7eb2a5f4214885a2b18a509b05017288bb63bf1bd90245af84b2a6b5 +oid sha256:9f6ff7eddb81eab76831164618569dba43af2dbc1b7fc96af04033c6d65e6711 size 17988 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 42440c96045..0b5ca9ee554 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ad80ae056aadeb94b0ac9f2dda3ec9b441a30ba47779f39fd35a7da7bd38ce5e +oid sha256:ffd152729e5f815a55d914aec7d56d0160b053098d67356eb8122f1376673fa8 size 17692 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-rail/zigbee-r22-support-library.a index eb32ad493d2..8931610e5e6 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg24-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:901182e6ba54eace4734e3912188c83e99021347e962e0744c9ef13070b24cc1 +oid sha256:34d5c4bfb77d79874f2384188373b7a848e588d8af3948edb2595f9589fecca2 size 17996 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 43cdabbb70d..4e9c7e58044 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:26ef9948526174c1e85e7fda6b51c490500302f4f3c61e6bfd0c2473830fa038 +oid sha256:e5332f396771f704d4c61a5d1cd18ad95f236234ae60e7d111f84230877d540a size 17692 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg27-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg27-rail/zigbee-r22-support-library.a index f8e1f10fad6..6e860c37206 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg27-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-efr32mg27-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5446b3a4a45980580dab9dfdaa75630b5cae92d32d483c043e957a58dde237bd +oid sha256:917d74721835e685603ead758db9c030ac8f046b8f82c90758d0126d0224028f size 17996 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 5b364804c0d..d88ea64ec4e 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:840a329677772a8a2c9cd3959e341a2b91b3d1921f913ca85fb12009959c5e76 +oid sha256:754b9f57a4bbd3ad73eb2b190a53509b19ff052b1fa6d9258aed4c4024e017a8 size 17680 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm12-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm12-rail/zigbee-r22-support-library.a index c21813d466e..97bcae4f73e 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm12-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm12-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9c1c61c67e7609b580dc5b0f9315917619d216f9972c819154176b2adcffc34 +oid sha256:292fb0f960564d42f1e9ae79a7af1fb0b4be472a42d24cf20b06c1f3bd11d695 size 17976 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index cd9c6fd6d97..606fa050da8 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a3a52cdb9eb47a582d48af382bad864561f762c1502abf597ae68cb721db404e +oid sha256:e7f519b7c5fa9cb775a5945c70158e40342065c90e694e953350d9a179c6aa69 size 17680 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm13-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm13-rail/zigbee-r22-support-library.a index 45cddb1e0c0..7f0c4e2a947 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm13-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm13-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bcca582faac08c9509aba92906ea41b4b5bf1fcbc81dc734cbd5765bc328f2db +oid sha256:ed5cca2a137c8448686cac5772c5f1e00e9ddd0560b44925d4641ddb367f5500 size 17976 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 2aa3b9e5aee..e67c6b1a07e 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:512afc5373e44e727e31d4e86fdff4354afe052520f65c2655b2963a23ec0f81 +oid sha256:4d1358523d50ca45283f8412b1dfc0faf82c30bd7f7f4a22b530d23750253770 size 17692 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm21-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm21-rail/zigbee-r22-support-library.a index 294c6b52720..927001018ab 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm21-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm21-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:39483c403966643638d7ab525ee36ff77c71ac01e58497ef91a098d7b92e8b4e +oid sha256:01247c7dfade21fc63e4da950ba95e1f610c56fde5804c772e15026db9181ea3 size 17996 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index b5430a7d8af..3e471032760 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e90bd5368c0090099af6c1a66f3ed9351ac0232b4d2daa1dd4002b80a6e99a68 +oid sha256:1debdb5c1817e08cef15a29795cfac6a924ced0812ac61a147821188ca0d51e4 size 17692 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm22-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm22-rail/zigbee-r22-support-library.a index ce1940df6d7..1e1045745ee 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm22-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm22-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:451cf38c98074e3aaa5e4e0c0f361bd7dfce863f4075cb8e405b8f8213a7a505 +oid sha256:96eb3c6d4621b6c3d3d0776aa94e8d9a8705b8522f024e4ecc1d005b1513c392 size 17996 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index ff3576c76e5..003b349c26c 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91780dfed1e9e32bd0f7e11fa3ad6d9cbe500564811d4b500cba1354ffb5c449 +oid sha256:02e0a0da3167b1a668037859188b7adb1898dc330d2235ee192cdcc8f84a87e1 size 17692 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm24-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm24-rail/zigbee-r22-support-library.a index 0552d6d66a8..250cef93d00 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm24-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-gcc-mgm24-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:262d27f63b14c9a9bf06f894d234db0d771e5002491c428631b62dc6b86a1d4b +oid sha256:fb735e18fa939458162857295b38f236b6317611cd2a28272050878fa3e8ae91 size 17996 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index ce698183957..226f14a39ec 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c12d3fad5325459557fe230c145b811e48d6239f7bb30a13bc0b6e12973724cf +oid sha256:6ac3913bd9c4006ef4dc66d0caa2656be726934c5b2c683d77be9e4cf39fcc2b size 47076 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index b8cc8f023a2..7fa7ca2695e 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7ace486f7b8d3bbce496b4f9c211d13291cfe63d8262673eac3300a91c9f69b -size 45312 +oid sha256:4050a156b18716a64645af03782f60689dfbe2c9ebae3dea46f70daf953d4952 +size 45320 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-r22-support-library.a index 9566f4d7cbf..c470c0f6e1d 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2b08513a7c5b1a06609123f4c7fca6126bdb0498981a80381dfb13fe120d9a1 +oid sha256:16d1af3a8a6f00b7e1fb3dc88614dce0895dbbfed66ac844dec93d9b1a2c998a size 48276 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail/zigbee-r22-support-library.a index 2df6e1c1b71..02cf47c58d4 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:38e509bbbd7cb045ec1a5391e61c71ab072d7fca852b7f0435d45a634b5e7eeb +oid sha256:99f887916f59fe708eb6d63b0ff2c7be0f6dfe10cf2c5ff66d9070232b3571f2 size 46578 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index 85577114f91..c913fa48621 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a313ce47fc735cc70b469df31c6ad694350294211dd6b6bb84b0faccdcbf755d +oid sha256:d3c15b6098e846cf2ef740ff1a741d4531b91adae42987f28828fde66abf9816 size 46190 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-r22-support-library.a index d8d13a37c16..ae99dadc264 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44cdb41a51d347adb562c8095c4c656399b0a3a5dcc03015665a1f517e83278e +oid sha256:49438bd97e983c3cc1998d45dc712981c6e79e3ffcfeec2b2213662218f5c0d8 size 44440 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-r22-support-library.a index e6d639b4b81..ec48721603c 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:89944f1dac84c10474a51f8f0fcc3e1dd5524c8f9f3cfc94ec1a25af3901dad0 +oid sha256:4b177a34b86aecae53cfc4a57825729059eed9febc6ca8b6d1cb50639bc613f0 size 47392 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb/zigbee-r22-support-library.a index e011f62efa1..fa8789d7d1a 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg12p-railgb/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6187d97b3c9d1b46ff1383ee06118601b06bfe2e4cc5abf3726c7168e4f8d092 +oid sha256:8d4d4c86f31c6e843a9cc7981c310bdd5afd58f1047c7077f8b66d203f7061fc size 45692 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index 1c92db06bc3..1a1e18f37b2 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:462147150033bf92380d016f839336c7b0732cb5c8de5de07f7157f3b93e7c6e +oid sha256:bd35e20ea75bd57565fb53c46ab949ec90e889ae52a0dfa1b86fe83ddcdef64d size 47068 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 15508ac5347..c4280a04a2e 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb5896665b3e51ab021607243494842ce0c10971214c79ac5aff28e6439eb6ad +oid sha256:5cc8ca5dcebaabffb23ef1021a2cababc8415a321a1684faa98cf4c22c36b1c4 size 45312 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-r22-support-library.a index 6befc80e1c4..406c8005bc9 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c9b70a3e868213ec5ba7ec4c88e5d19c868ce65b9c0f3cf5baf214a1a6b30e2 +oid sha256:5d115625cc9d0eb00fd919c5307da817e5f1b5430daf6abf3fb5e90c2e83bbf8 size 48274 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail/zigbee-r22-support-library.a index f2ad171047c..8fa09e31324 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg13p-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0f17d896b6a44c05c32d92ec8f8f8037c30db68dd6bbded8cf2bb8daa3bc4af +oid sha256:4eb45b084ad3a08f6cc8856da4d2c43f7c0560ad4d1ab115b76a6eb48be33440 size 46570 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index da58d9adf7f..82551fc72ce 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:de81404d5183e056b7be4474fb59984224d1d9847549644a4c617644c7e8f642 -size 46238 +oid sha256:15dbdc2597df4c267d43b65b4bb869789bc6f0fcf2a7d0130aef9f8c7bef6e81 +size 46218 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index acaecbc66dc..25c7b80b3a0 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3babf55116146d0050a8818fef1473673db07d52662a3ec4c4ff82663349a1e0 -size 44478 +oid sha256:cadba62c8001ed7255b4e9845191e76fb67b77b0d64ddf101927fb4078c71974 +size 44462 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-r22-support-library.a index c47795748cc..32ed1da8283 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:36a9b0ae03c0f965336c602e499a08f825561aa6ee477ff82e294a1ad788aa73 -size 46756 +oid sha256:5005ec3de0918a16c216b966a152454681748c605cd928fe19a8c388ef506ff6 +size 46740 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail/zigbee-r22-support-library.a index 00d730d4a98..236509fa057 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg21-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4e41794b9f21858bfbc3019bb7eb5f0e829155c4b85c48948a05161c56adff3f -size 45042 +oid sha256:879006a180fc3c49673a39e1ff95f78ebc607ee82a9fcbffc7087675fd869c89 +size 45026 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index 1ea2b69af77..228dfdd8cf8 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:68dd9707919ba77b1304943080394c3cf63e1b1d22d433aceb72b3514bea94e7 +oid sha256:6c2bf257cff3b2b4db4f9c8d9e7c89d279b4262a4c18eed4a652574e5d42ab9e size 46234 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index c28f980faf0..c65bf51de15 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:343cc8e11e1aa2eeea0a2b058801a998811c33bbeeda3003ab261b279d1197fa +oid sha256:650daf2261fdbc46053e7e0821061b9a47a60be49f450e61098f69b54f52cb88 size 44478 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-r22-support-library.a index ac8b446b975..1b5b3319bcf 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2dfb1c7c9669a65b6412aa549b66319903cf50e70bb8b3c038bd0d9769ad0460 +oid sha256:ca495a69ea86c271a37962bd62f773a874e78b95b4f37ebcd4b31730ec0866c2 size 46756 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail/zigbee-r22-support-library.a index 461dbd992f3..ae83621bda4 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg22-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4eaec50ee9749a1f67d12d2a51d726f476a2b56a2ceca3ab2e18123bb01a1df0 +oid sha256:69d81ee30e9eb37997952f4a2b5dc0a845dbc092c61b765dd58baed19381f454 size 45042 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index e8917acd022..fc86d6f8cd0 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:46844fe060258576b751c47d6308e2f41fd7dfb0f9d2d35f60803e4184a2e09c +oid sha256:fcf76374b879e4fb2bf1f382905b2306152ec59c3870f27cf5b0eae1eeba69b6 size 44956 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-r22-support-library.a index 3b332bd8175..4a9c909fe53 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0df4e37674d956224e89a084a64f4dbb115d733145baaf1e844a6197e35a9794 +oid sha256:f54ed0c4cdc6e3f23c1c607ed573eb9c1e2ad7870410a4820c76738c04861ac1 size 43198 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/zigbee-r22-support-library.a index 53ea0bf9bd3..5d94ab67cc7 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f99fd4b3df80cb3ab283dd89ea253f8402c28e866220580293b273eb859ba918 +oid sha256:e65dad0a46de78bfc3cd1c9d1c948fc10187089707414056379cda5407eba347 size 43262 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail/zigbee-r22-support-library.a index 66521cc0f63..57ef71df911 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-dualrail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:330ed6f709ee4962eb07483c88c87db68a1084cbd48b0de60cbec26c77289104 +oid sha256:02426ccc90614cb766b456f4c91f155af27540afc5517faf5439097bff6462b0 size 41512 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index 3e6cbd2a485..44eb0453d30 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c331de3ecf0da8bd8424ba7b0f48088f289bea6d65c6d2df6765821f0d420a10 +oid sha256:cdc0c8dc8324fbf966044d0f2b55fdb769fa1fb28808aca62c0a51bf4c2fa583 size 46238 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 5ece996191d..98fa698d8db 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:272001fb7c972833e5be193ee94df131730daf73718a140914c6892f964b4d65 +oid sha256:d595894fb1e93bc4ed01d7af053f2fdc6ddbc2df3d127a5ede0ec609d2667843 size 44486 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-r22-support-library.a index fd70dfee196..50f868a2987 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11a2ae4d49847a3c5da081cf943413074ff4debe94a661bb2aebf3e0eb2e75ff +oid sha256:77f5c9d56649d744a355fe193d28eb05f8ec64ece5e6c7bab86c648e623248f4 size 46756 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail/zigbee-r22-support-library.a index 5288a813ebe..ff8e1c157c3 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg24-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3be9fa49f0cd69fd5ed3e801c0e89c49fa8a39cb711d00ba8b36e18191cde15f +oid sha256:90767503b3eadbef8a971339ba54aa7f6457407c81b3061a6e04aea9d41129ef size 45048 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index 22c627ee01a..da40b03df24 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d817b8d1aa2acd81329e8a41e45d295b6038893f30271908000829fc37b718d +oid sha256:0332a3a5a4f3e881eee1321f08d2fbb309761967d8b6cf4ed2d9a80eae152b41 size 46234 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 095ed1ae247..0c78162d65a 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f99659a5d214ce8ac24fa7d4b544a066d252c35704d4df3ebfdf4d8550454814 +oid sha256:17d5be96fda54fcbd207ab96f79445246dec61d796623c060ebd5624486465b7 size 44478 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-r22-support-library.a index b8b372b021e..b06877b7510 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:24b053c17cd356fb497bca6d4d017bc7fae5e35b07bc0784f6f3aaf79e86ab67 +oid sha256:ae030a2ed35c1c35e1bdc81aacecf43a7f17d9b4d7d0652441b64927072945ee size 46756 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail/zigbee-r22-support-library.a index b4a4fe92d97..ec38b5fdff5 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-efr32mg27-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a302d836174889a1a787446270d063b9ce85b6ec6a4def972d3a3bb80c69122 +oid sha256:5ef92efc43ac415ddc8a78b2ee2911fbb101d0691e43d42b1c667501b21a2525 size 45042 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index 205abe43048..72055983a75 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e5311566ea735a33d1a4faca38936f4b131a82c89353dc9256a4b63b5cb56c83 +oid sha256:72ba2267ba6d01e4465a6cdf3d7c14afff9f370a7a7c7d66220562b16fda62e1 size 46924 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 19f14792afd..97868eefc6d 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d8067ed3a7ad181a0a2a0f7375b45080d3119a20dee9aef3f0324877f6bb256 +oid sha256:0a21633f88897ab922b5f69c4ea65ebc542e1f7d967b23798060d2cbd4aec809 size 45168 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-stack_protection/zigbee-r22-support-library.a index 00e7e55486a..a74902c18f9 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aef503a529296bcb360e0a2280c14a6d244fea1c12af2191242e06f33a841f59 +oid sha256:7df96eb18e38cc52b4ca845889ff2f3336d06e6d79ad3c456ed6762224912c01 size 48130 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail/zigbee-r22-support-library.a index 08db4f2ee8f..0642eec95a6 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm12-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9adacfe7ee6a82a20721889dc0b4808b1f27f364112c729f66ec5fec626951ad +oid sha256:42bc50499e143bbf8de86348ef3bc5cca64b600e018e02bcb7415e2dbb802169 size 46426 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index a40403d6500..6edfa60a77b 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c5ab9a0478555b56ca6578a9ee2438cc4ad1c97ee51d1e466f462127543e088c +oid sha256:f0a5da6f036356d5268a947c787f61b87e7cf26d9abaddc69434631d9dd08e30 size 46918 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 18c0bd601ff..19ed7ff4ad8 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:259732d90b92cf71b4f2f15ca171cc0b036175e8c6fba8217ef3822dea4bfa0c +oid sha256:a16b708b2d5d6a8cd15bcd4e2617b668610a363351f698614eb6aaa9d12f40fe size 45166 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-stack_protection/zigbee-r22-support-library.a index 2a792fd8484..0e7f5ff59c5 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11878848d5c17fcff5f1787ce643bcd72c437066a3c4fa9eba8ea664db430331 +oid sha256:ed330e2dd75ad748a48cb7841afdef0a6f10dd9e4d2a7fbdbec9c8f1ace4c287 size 48124 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail/zigbee-r22-support-library.a index d92ad001be7..b58478dfe71 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm13-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1ea2150da25b9fcbae29a41b386b705a751f5ea1f3632de52c9e03e1ccce9c4 +oid sha256:360838a078f65ce2f5b1d705403a737a8b33ac80982befda8fb43846f06b09c4 size 46422 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index d4cc36971c8..b064380ec03 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83cf88465790df3bc1272a62ae7b83910265519053293da759a8bca0bf559807 +oid sha256:7abdb5a1c148b0360aa0cb02f2fe79edc87cb1966b53099bb72afeb085f26e27 size 46106 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 1c695f0dacd..d06f2b4f63e 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c8f759745cd9a4a81fe85f79ac84b0a8d3feca8f5043213ea48ec5bbc1450f18 +oid sha256:d88fed0c4b73b6c4ac8166d4ecf7168ef461351bbbe7c3493e201ec9846459d9 size 44350 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-stack_protection/zigbee-r22-support-library.a index 815c4f2fe72..40e6e1a1101 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:67adb495e76ef35e988b6814f6e3de891df8bed0d1c11befc875a1401eab0ff8 +oid sha256:22ca8c71794f4710ea79a0b5455c98870125b25bd93eda8afcf4c74da945fe7f size 46628 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail/zigbee-r22-support-library.a index d5435dd155a..eb2bafa4b20 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm21-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca1021a8d340d536bb9f85333fde424015d697409f55d5b39f56e0176b2f7c6d +oid sha256:9d352461274fa87f7ecfc0fbb009e04e5d74e5799d795822dfb24dc4af74bc4e size 44914 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index fb494e92dd0..c814134a933 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd228f24b2dc30f283cef7282f47ff4dcb86f39a6303867fe80599fb796453c1 +oid sha256:80160a320650425af1b0fc3be9be9c7cb579c4ec23fd5533590b3c24aa671c0a size 46106 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 7ad45d3b664..91ce6253033 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d36b29a4dd0e271d3f6ad7b49c7e29ffb182e9f213c1bd091d4a83360f9a64c +oid sha256:70fcc08e66d5fabd744ebfd544eb53bc10823a26c8462e92e98894257e88597b size 44350 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-stack_protection/zigbee-r22-support-library.a index 44271fa434c..cf4fc6d1da9 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2033e0c1bd7385f97295636eacb2ba4d72ea57fde17a88341c11ca97c722eb72 +oid sha256:951112b511dab6d70dca6667e5944e78cd85fc62ba613aacc69981c98d05da50 size 46628 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail/zigbee-r22-support-library.a index 7c3fb033e6d..6f9541c4fba 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm22-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b7fe85378bbd2bd5a0dd50be287d1646760e4ac67fd79b7c59665337bead3e28 +oid sha256:8bbada9820b3cc96ffceb0ba6cf9d2fbafa0a6cbd819d0850af1bacc5bb74c8e size 44914 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a index 634f069a2f6..b69f9b645ea 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:09974afd8b9ec348ebc9736e88ae7a6962eaab4f15d4a180acdd96d5aa180675 +oid sha256:81b9ce62bd57c5add48c0dafbab8754165efa1b043eb79ff21ba49af80a9b7dd size 46106 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a index 95298aadef5..7157689d2db 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d026b75e45d0c7808a07f265a52a897c49b29e0806c66b5fcc4add835a2e8da0 +oid sha256:ffd83cf4c0f209983bf2edc29e194b673df8c42800727a09d49fb0092ba20535 size 44350 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-stack_protection/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-stack_protection/zigbee-r22-support-library.a index c5a72bd4c51..28eb518077c 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-stack_protection/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail-stack_protection/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c25888790d8dd680dfaffd4f768af1127475b1110221b337f56cb00db0290673 +oid sha256:1820e73aca12ca7c1b7f73fecc5b360ccc126d1ab93fa17ad9a71d7d5e7c9bc1 size 46628 diff --git a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail/zigbee-r22-support-library.a b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail/zigbee-r22-support-library.a index 5d7e231ff7a..06e18e2f8aa 100644 --- a/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail/zigbee-r22-support-library.a +++ b/protocol/zigbee/build/zigbee-r22-support-library-cortexm3-iar-mgm24-rail/zigbee-r22-support-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6b95fcd42cca50a0060fae15ae49ab4016db94a5d645d94a82297d3fe219a40f +oid sha256:1dde2cab37eb76bc0da79b22b55eb512997bfbe2ae31674042618aab4c15c8c9 size 44914 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zll-library.a index 1f83197d7df..247802d4f4e 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg12p-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d31182a9ac391e6182ea2396d8e59cca919d35c9b6926fc8b51873a2d7d4fb0f +oid sha256:4fbd6b9fbb73af6ce9aa27777db250c1c518b047e4934164ab214d15ecdc6d02 size 53366 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg12p-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg12p-rail/zll-library.a index f01f1ebde22..4c6557c1828 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg12p-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg12p-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cea638787eeb9b576c8daa7084f63969304c0b29b08bdd622d3ea5eb50b8ad33 +oid sha256:ba46f433ac5cd59c2a71b64dd4052233e83229219ebfa56f05d16598ea46c52a size 53998 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zll-library.a index 4804b663290..1e3a94e30ee 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg13p-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7c678e4ac373e297a698a97394c554ce7cfdd1c67a3a025888cdf1fbe1531c61 +oid sha256:5a06b57ed233f2bf99974aceb33a5fe77a2eaf574da3008f81a7c6d98326868a size 53366 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg13p-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg13p-rail/zll-library.a index bf727c90931..4ebb0038eec 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg13p-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg13p-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:680adf98f5d12408e4f6a6a977046b28effe274563e648d8e026593a2313923e +oid sha256:db14494b577b86a3c309854d8e22b95925c2688d3881f8f1027fd9e8c79da19f size 53998 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zll-library.a index 83a761254d5..5d8c165dcb3 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg21-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:497e8d6ae286b03689fafb810911ad8be2f7e9d952ced9153c0ed23e7c6be7ee +oid sha256:2ef725d898cf38df5dd1b1cde01b6321a9ee71fca2d290f8330f05c81953628a size 53418 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg21-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg21-rail/zll-library.a index c16c4adb4e5..7137612eb22 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg21-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg21-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1108b049bb54607d4ebcf0a949a6f879a1e14d3ec9e4caad5a66f77e1eef27f4 +oid sha256:52b7136790d074ddf0031219c0493b0c5b63b76294b3499efba23b685ce71f16 size 54054 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zll-library.a index 8c4567990af..ccd0827093a 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg22-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1d0392069c0d01986d7bf4e686928e9b315fca71e2dd2302c62af3dcb0043a18 +oid sha256:a2d526cf060a26bb35f4690a2d43fc06e0862adc84168ab44bc2b6392f8e8a9c size 53418 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg22-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg22-rail/zll-library.a index 7a23e08bf5e..f1d800df2be 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg22-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg22-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bed235abc23cd27d6401cb2f6939ec262618d286df40fe86b04a01b20333fba5 +oid sha256:bc62b8c1832c5d438fbc40b6f80bc885e46bdf1c4cd8f66f1c98124f3c730c0e size 54054 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zll-library.a index f668ae79104..5d8c165dcb3 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg24-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2a8d1c22236508ef51542d75fb3b4855daf1e9f43e8c09463333bb21cf56384f +oid sha256:2ef725d898cf38df5dd1b1cde01b6321a9ee71fca2d290f8330f05c81953628a size 53418 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg24-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg24-rail/zll-library.a index dbb4294864a..304fc6d4da3 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg24-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg24-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22404926b26f9244f380314746f55c87a0367a7ec8e858e3eac055740b638764 +oid sha256:2ec9ef6452e079da24504b35f1c08a83c55bdf3bea6224f61ce4ef41b51aad91 size 54054 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zll-library.a index 9b840007667..25059defa3b 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg27-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:aa5da6498bcde73b23b791a7a15cae28fce3cee7bd4a66d28f883919134c0477 +oid sha256:a29cce4d84b9c57682b0438c1d789cfb5f1d9fac3df56a2f585e9cf1a7bc01b9 size 53418 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg27-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg27-rail/zll-library.a index 40161a2e11b..8c81b430325 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg27-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-efr32mg27-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ccc6c3e55e8c555547a8a3d9dd3dc8a444fb043fdb67996116d0d9a7b16412c1 +oid sha256:6893a0c6119e83b67e1cc1ede5dd083193898692d773d5786a46ac892c1985d5 size 54054 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zll-library.a index 018ac5c5096..dec7f957d3d 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm12-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ea1055ac82a96b98b7bad42d91d20e641c84445e957f2b26dea0ab0f7ce3d0c +oid sha256:dbe56c4edacb84d2809e6699b9647ddb6afe15f351888eddb467bcfb6a270b65 size 53366 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm12-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm12-rail/zll-library.a index d0c4e2ab107..d1fa21c0e04 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm12-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm12-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:759908adabb2496d66860ee617f3e5a22273c6f62fd4a0034d5319cfeda01873 +oid sha256:617de3444709f7c4c19433064b4adb06c264402a0edd4ca5afd58afb62184a88 size 53998 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zll-library.a index 17f0d0e3ac6..67b8377d32d 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm13-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e6218f591dd1b47ce7003b4a24940c868f6a07eb4b53e62bd91d024eca03bfd +oid sha256:5b4c377f4445e4ffe043f52c6b90c894c3d1395a82b5c0e476824b3313a786a4 size 53366 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm13-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm13-rail/zll-library.a index 1c409104ad2..41991b7ea7d 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm13-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm13-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d0373394919731c7e99d76551e0650cdd0a103098cd4504ddb01b5d83950711 +oid sha256:b96e82ea40715a0495c709e5ce118abe322f0459905f0c3c924ef6eac60a7941 size 53998 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zll-library.a index 2af509d4a49..e31858d148b 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm21-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90e6a591ab426528fee202c9c5d85016d433cdc9e1d6764abf2254f571eadc3d +oid sha256:b98ff2b7556ed3d0478abcc7767a1af9c673cbe8e07f4cd7b9fa2fe6c2e312b6 size 53418 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm21-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm21-rail/zll-library.a index c39af1fbaa3..2b1d9f3089e 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm21-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm21-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:956ef4082a2507b64468147be16a1d16381e3f7236686de70ac0068196622d71 +oid sha256:71c9e41b0222f80d195b77db7ee2d7fac56b654cf96c56819cd6d707202ec6f2 size 54054 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zll-library.a index 00a0cbd05a1..9146cf30100 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm22-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:421c1181867062d666e387c4ce50e2f662bcf7987b5039e153b26f406cbd6c5c +oid sha256:2f5bcab381ff10cc30eede7a799927b84ed0361b46b524dc9c77cf009837f9da size 53418 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm22-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm22-rail/zll-library.a index bafd12ba51f..bdffb33e1d9 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm22-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm22-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:888e0ad6e9b6baef52ed679675c7f7743a18da5734162cb76425f8f563075848 +oid sha256:17287fa6b1b5d9a8ffaa3e9ab7dab0546157f236b2f2a410838b6f12bbd81304 size 54054 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zll-library.a index 94cc1f9a315..f3160c4560d 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm24-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3a5158308e4a7afae5202a6339e32586f313814b93c5d81f73dc0dadf1d31d57 +oid sha256:d5e5cdd1a23d057d39fdefdf124cefa0011cb21717cb279a5fed8502058a74b9 size 53418 diff --git a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm24-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm24-rail/zll-library.a index 0dca992a906..fecc96271f7 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm24-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-gcc-mgm24-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5df872fc3a724119cbd5a77affca7646835957f1eb45ffae431445a83c2c445d +oid sha256:8a3b8da2ff5bd9b3d5208e30fee69eee00f3780f0a9ccaccaad705ed8ad20f11 size 54054 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zll-library.a index 6ac1e376e1c..90dd55b18b0 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0fd71ca14bcdb09a77ad1d195f18fc10b0e423d8846c02c4064d2bbad1d44796 +oid sha256:1c68673fd766c8af5f171517fe42153114dd0adf4660607bf34a5e2391b95f42 size 179376 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zll-library.a index f33accecedc..16fb8f2129e 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ebe6968ec5e9c87fd2d7f1644b07a7ab9f5a28824ded99f2566d9cdea0c445a8 -size 176758 +oid sha256:7d6a67bcd918ea49faeb3593f232096e929f5f532cae02e2fb72a5efc6b5a82e +size 176754 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-stack_protection/zll-library.a index 395b49233c1..5dfc8f61383 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:872f788698475914a945c71c98b8472c205aa068291c5ea7c68551a44e37dc17 +oid sha256:2b3a34345fdac4e925e177cbf40472c7fb646334ba4cc92c8d8af87859dc9bcb size 178024 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail/zll-library.a index f06f0b42ce9..60667e22a23 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg12p-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7bf5a23827b9f36676e287ce9aad1fe665f3ab54090f0817b6dfaee2c5d0588 +oid sha256:1d596e73a3ae244dbd8cc6182a23256d02e4d3896469dbad6d912c9cd07eb8f6 size 175432 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zll-library.a index 925d390d902..05b6f76896c 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7ac1d45c9ef9751dd29b94685a11a0cb9f8d356cbbaa48ce0e254d4bf3c5123 +oid sha256:c87b31c3ca943c05bf085ce0417fb4d976e10d3be023c48e897f218642c3c0a7 size 179372 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zll-library.a index b6aac6a5f19..b6b981db26d 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bd461bfec08fe6055030184684ca4c52cf2c5ca8dc119dbaf60f23ed80d1a105 +oid sha256:b9c977472f6389b53c8f123aa79fd954308ba29c61bf5c2ce1a86e4e6603aa31 size 176746 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-stack_protection/zll-library.a index 4eae8daea9e..93f797cdc0b 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e4d06e68359c633242a0a7fb59ed26635adbb8942747c084f7a1746935d39a3e +oid sha256:18abe08677212fe34ba5c3012bf8581440d62e1d391eb9d92bdc5287e63bbf1c size 178020 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail/zll-library.a index fc27cfb96c7..cef21359820 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg13p-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:af636e5cdbbb5bf8016876a069a45f2dd4985499d8086b5f73a62e8481e1eb30 +oid sha256:3d809e2ec1cdd11c53f74ac098969438f56ec3ab29aff9d663ffc18719cfd908 size 175420 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zll-library.a index 0a404fc122a..4d60d47b558 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:04ab4d679247a1ed9bedf130d136af1720a2e0248a4ed759af44f71b318a5b5e -size 182746 +oid sha256:44ddb822c31cd2ccbef9dfe1f1c75153c92f8a74feed45fc33cafc5f2efe89c0 +size 182722 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zll-library.a index 87fe4d25a6a..cb56c895049 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c40c9faf76ae5cdca96e1390f61c892692730d6a95da039bfbaf99d120acbcd6 -size 176026 +oid sha256:4edbfe365c3b6e40b75bc3c8d3815b59fafdc00f8caceb6fd5a606bcf91616ce +size 176002 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-stack_protection/zll-library.a index 76d88a7ce5d..bcea9eed700 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c7eaa8cd80770faa25f9290600a4c4ed1f64bd39dea180b8d30c00ffcb8d337a -size 181554 +oid sha256:3b055f3140a1e385e7e24ae48efe417321a5adb5653c1a90da4ff807c1e9bc45 +size 181530 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail/zll-library.a index 18cb693797d..76802744dc6 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg21-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:49889dc74a5a6faa5dcadb224ca1ea59b36db9c841ce8738e7cd5c7fb22fc39d -size 176080 +oid sha256:959abd2e43944a89b65466f7831be756086d64f1e4222e06a9eaa397c4c1f789 +size 176046 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zll-library.a index 1c56e25be3b..1bca06279c0 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5088bb01b22d103ada786a15838122beb3a638dd09f57d83ba395a1a773ca941 +oid sha256:6a5f027966b01e6b743abe05ed053dda8bf614ebf16bb364b45e4214ec890958 size 182746 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zll-library.a index aaf28882306..a001e84cb72 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c1db838e9f1d5971b3e45de97ffd4bb91e25db271ba8f8190c47ccba4e276aa +oid sha256:ffbb11227e9a42b0e6852d2ac3afe19212d8a3c12bd9d2f18c4973556906f41e size 176026 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-stack_protection/zll-library.a index e2188e747f3..be9ebdb6507 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac93ab0508300bd4f9f2bc0377ae0f153f573aa610d78134af0ee4be2a5b3264 +oid sha256:6c5eceb8fb6351bd161827ec6447658d191f72ebb800e8a64bef157fd400aed2 size 181554 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail/zll-library.a index 5123876874c..f7f5147595b 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg22-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:31abc692148f1ce80dff938eac970620f5a109fa998df9e054f2b94d150661df +oid sha256:9f078b14ba1cb2d726c34f33d6c9b75e0ef054c540a4d1bab5d1a20073201e07 size 176070 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zll-library.a index 823fa913a25..59667186022 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ec938287f62b69c5d704b9caaddf12b8b9a4065e76c624807636562a351d842 +oid sha256:f6ea2bac264b4e6612c3a70ce499ef5e29f435dad93b39399560f3bb4c146843 size 182750 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zll-library.a index eccca13bbd6..e994baf6186 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85b4d3f2e55a1adc04bf1dec69c36e467b0009897e768c6e95fa610680109d22 +oid sha256:52b5427023a01a5651401adda396e83a4e152f41fa960305f3ead49df70f91d3 size 176034 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-stack_protection/zll-library.a index 770b10a1ebe..8d56dcc9fc5 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a108ac657ff4b84019214e3a4d7a16607c8b1807cfb4bb7a16ecb83f20f8d4b5 +oid sha256:194c71ee3ac2fd4eebc6f1abf5dffdb8d4beef7cd75f742eaa582d8f5cd446a1 size 181556 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail/zll-library.a index 6fac028a37a..4bf199445ed 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg24-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:85895508af18737aa1fdc275d081873929d1b5179fde81e6348fe317ae0d4b3a +oid sha256:f210f727808526591d1a5fa039964a066967023a134111d61c218e0fb50ed9ef size 176080 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zll-library.a index bea67a74bfa..33fdfaa515e 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:92514deac3f4502f663a4712c6f0ab45dbd2c87e0f5bf1fa5acbcf93f6785ec7 +oid sha256:8b9621f3f2f3af7878209f31ea65729901d2462cd9881a4c2a83ae73b38bf2b7 size 182746 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zll-library.a index e9253369573..aff34052472 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0eb6fe9efffbaeb287e9309c0e8f0f989de365b9795eb5a915a0cf0c755cc706 +oid sha256:2e8bf978ee3a815edfb817ea6f3c746594235e6cc3242c78ae46c606a38bb83e size 176026 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-stack_protection/zll-library.a index b5939d9f835..5097c799b3e 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5e9cbecf104aaea94e0242633188d4e98e8177fc9f5087f38462204b127470ee +oid sha256:d4776ac54027b7dace8d1d7a7361127ac6065e08316bdb146d1e88d3386261bc size 181554 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail/zll-library.a index 67b69a7f8ca..6e43f286e53 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-efr32mg27-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2595afcc9453926f9fd19b4b766f83358ab424b7ca71bab54e6c62694269630c +oid sha256:595cb9a8fc4584daf306133cae17d787abf128df7bd1562788321fd7f9e79ee6 size 176070 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zll-library.a index 24b3e2b74d2..e725fd4513a 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b309fb669c6df55045c3c431d7d4010747d47ef1891adbd4f94ce5ff931352d +oid sha256:2778793280f3fdbab051f028d202986ecf3037851006a699b93bff0f09e3c23a size 179156 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zll-library.a index 29bc7f6d784..65cafb7b9c8 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d952c0788242befe922dfcaac6da0b5d97192d34d5b352307f7cd683c65c6949 +oid sha256:89d1ce292bc6eec44da41c3b7e63eea319322c4490dae337dc735e3fd6452e6b size 176530 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-stack_protection/zll-library.a index 457728747d7..d59f824bd6d 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2466491065bb497fdc09857236b6900168c66505f158d329495b896796d0e15a +oid sha256:4cd3db477992b84a64ca6b3edd76eebc4a0f42fce22be97538b73a49e550d4d2 size 177804 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail/zll-library.a index 4ec731ec044..29b5533d5c7 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm12-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8ce2710b97caa346d7bc9d0fb4efce77067d7bae6fd6c886d4a8f01c27ae8304 +oid sha256:1004080d3cb19bef8639b4c31c4c5200069632bc70e9bd719f7b567ed5fadfc0 size 175204 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zll-library.a index 6ce8798c619..c9a75f37729 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9ee0522864836c5076e1519d45b143bf547d2d2264a4d7035811354b32ba1d33 +oid sha256:77479e2b0ca7495102535b1f0810ef565f1962ab3ae57073e85b44de59b5af53 size 179148 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zll-library.a index 0abbc2b154b..76bb298781e 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:121cff8246f082f516cd592e34ac664c2fd7d01fd9f3f77fda730d81696cd99d +oid sha256:dfbad9dd16d8e529c242f650e3a4afd61a800eae46435c6b825caf91f30c3208 size 176526 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-stack_protection/zll-library.a index 0884d7a49cf..31bd0f937eb 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e103b67d6e08b1fff536275c80ab18bc098383bbd0789db82ec005dc54b11b8d +oid sha256:9039c2ce136fcfe2025df8459fb9d01d188bb42a0de09b466e177db7fdd8d34a size 177796 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail/zll-library.a index 27da9b84df4..c3ba2229223 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm13-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:793f29ca6e1026a4fdbc77e1f095d83b19a7793e9573f1d3e6e0bdc38df6d75e +oid sha256:5fe7c68623679d11424fcc816c5cbf573960ec7553a3a3342232260dff06935d size 175200 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zll-library.a index 3306f04473c..55349a855e9 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e379cdfca29720c628f13b20c90bdf545751ca6b6ddad33b05bddf35ed0077df +oid sha256:fc93aeacdbb97c10a8fbd32525a72924cd7f28fd2a6eebd45ec75bd1bd466ce4 size 182554 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zll-library.a index 0adac12b4c9..7d706de626c 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7384669508356e9939eeb680755ca08981c1e91381debbe15c8754a08a25727a +oid sha256:76c57725acbee4e12f5eaa11c4e91a85b97b673687401d33871505043cb207fc size 175834 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-stack_protection/zll-library.a index 4e38ec971df..38cf811831f 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d0cda7328653adf93f076a223ac90fb7cd6019c90c752c2c4b2e6cad3de8f44 +oid sha256:f2ba0e68d9a4d8a7e0fc7bfe991defa673a508f3626b1f8b93de7ca69acf76e2 size 181362 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail/zll-library.a index 1de290e8229..d3cbebf411e 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm21-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9380be8580c9da7ae29509f740f3bcb6c48edad0d3046a889e991c5ef35b2e98 +oid sha256:dfc18139e867e3e6e5a58c1d1f3fb360f3f12a415f55baabb0a2963bd9e36d07 size 175878 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zll-library.a index b9357d48110..177cf425469 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84c96cccf2550b2052e9eb4741ce01ba01c0d5d67d15e2d58e4a1dfb5de23c78 +oid sha256:bb83b66d1f51199ab4396f7d71c25b2ca4b2346319099907469cfa1cc01def83 size 182554 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zll-library.a index 15115e48c02..0be8e2045da 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a1f80adfb90394b77a327ad45cbf9904404695b1aa7e9a0aaf02f8eb88724368 +oid sha256:79acc5893d443ba1cd856d7b9f38f86dc06a5e7fbf9c824effc188f5745ab293 size 175834 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-stack_protection/zll-library.a index 79c61d496af..53122b9ddd8 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:26949ec573e1bcbfd792faa0bc72fdd6256795318d6976548eef47629949a802 +oid sha256:f027ab3b65570ae67aebe88296dce2649cd0254a25bfd2e3ba4463078ccceba0 size 181362 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail/zll-library.a index 4ebc3b776b1..067df073284 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm22-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:005a8eb8c516920a004c1ea82f97e78c065d1dcdd861438c67b2efc804a08414 +oid sha256:2d36ed4da92ffaaf96a6e0c0b9c2708114d42ce16b0d090e67684f5fc57828a3 size 175878 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zll-library.a index ec3eab15f0b..ae175747472 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b1a7fdff2e2f034f921b9c478085c029d1a79a84c5364f5f64865e90c1414057 +oid sha256:229011ae5fa8891bba84e9b765a6c70e289f958bef84327720cba7b44a196db3 size 182554 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zll-library.a index 2bb21780c49..5da04ce5dd4 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-ember_multi_network_stripped/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ec1135525b3366c8da2e661674ebef737f29c25cf5160363e6180010e9260855 +oid sha256:21f0e2439f87a272ee71ff5b1d16329414c25191d20650c878c216fc0bf0d1df size 175834 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-stack_protection/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-stack_protection/zll-library.a index af4acdd4385..aa2a6c4b91f 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-stack_protection/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail-stack_protection/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:158c7f56d364d8534993160e65fa5e21410f0e907a5a681626fc37f360a8004c +oid sha256:9d8b2eebaf458c8d85710207fe521104d686c1187f383dc1c4fcb48fd73ddb5a size 181362 diff --git a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail/zll-library.a b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail/zll-library.a index 748c6b6922c..c6e43a30d09 100644 --- a/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail/zll-library.a +++ b/protocol/zigbee/build/zll-library-cortexm3-iar-mgm24-rail/zll-library.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3785a193605209bb162b83af8466655e3cc5fe1dd4e2f08ba5756421f316aa1 +oid sha256:55c618004e96cdba6b01f101f05c32022a3aeb198bfa78d0d7fc19305322a420 size 175878 diff --git a/protocol/zigbee/component/scripts/upgrade_zigbee_rtos_stack_size.lua b/protocol/zigbee/component/scripts/upgrade_zigbee_rtos_stack_size.lua new file mode 100644 index 00000000000..6e908da8355 --- /dev/null +++ b/protocol/zigbee/component/scripts/upgrade_zigbee_rtos_stack_size.lua @@ -0,0 +1,19 @@ +local changeset = {} + +local old_config = slc.config('SL_ZIGBEE_OS_STACK_TASK_SIZE') + +if (old_config ~= nil) then + -- The project had a configuration option for ZIGBEE RTOS TASK SIZE + -- Remove prior setting for ZIGBEE RTOS TASK SIZE (was in words) + table.insert(changeset, { + ['option'] = 'SL_ZIGBEE_OS_STACK_TASK_SIZE', + ['action'] = 'remove' + }) + -- Re-add setting for ZIGBEE RTOS TASK SIZE (in bytes) + table.insert(changeset, { + ['option'] = 'SL_ZIGBEE_OS_STACK_TASK_SIZE', + ['value'] = tostring(tonumber(old_config.value) * 4) + }) +end + +return changeset \ No newline at end of file diff --git a/protocol/zigbee/component/zigbee_mfglib.slcc b/protocol/zigbee/component/zigbee_mfglib.slcc index 7ea8a31c9e6..edf578a8c90 100644 --- a/protocol/zigbee/component/zigbee_mfglib.slcc +++ b/protocol/zigbee/component/zigbee_mfglib.slcc @@ -32,6 +32,14 @@ source: template_contribution: - name: component_catalog value: zigbee_mfglib + - name: zigbee_ncp_callback + value: + callback_type: set_value + function_name: emberAfPluginEzspMfglibSetValueCommandCallback + - name: zigbee_ncp_callback + value: + callback_type: get_value + function_name: emberAfPluginEzspMfglibGetValueCommandCallback documentation: docset: zigbee diff --git a/protocol/zigbee/component/zigbee_pro_stack_alt_mac.slcc b/protocol/zigbee/component/zigbee_pro_stack_alt_mac.slcc index 54e9110761e..b911b404fed 100644 --- a/protocol/zigbee/component/zigbee_pro_stack_alt_mac.slcc +++ b/protocol/zigbee/component/zigbee_pro_stack_alt_mac.slcc @@ -40,7 +40,6 @@ template_contribution: - name: component_catalog value: zigbee_pro_stack_alt_mac - documentation: docset: zigbee document: zigbee-af-api/pro-stack-alt-mac diff --git a/protocol/zigbee/docs/release-highlights.txt b/protocol/zigbee/docs/release-highlights.txt index fac1680b108..bf6711198fc 100644 --- a/protocol/zigbee/docs/release-highlights.txt +++ b/protocol/zigbee/docs/release-highlights.txt @@ -1,3 +1,2 @@ -Zigbee EmberZNet SDK 7.2.1.0 -- Multiprotocol: Zigbeed now supports coex EZSP commands -- Other targeted quality improvements and bug fixes \ No newline at end of file +Zigbee EmberZNet SDK 7.2.2.0 +- Targeted quality improvements and bug fixes \ No newline at end of file diff --git a/protocol/zigbee/documentation/slEmberZNet_docContent.xml b/protocol/zigbee/documentation/slEmberZNet_docContent.xml index b8336b197c9..bf4f98bb45d 100644 --- a/protocol/zigbee/documentation/slEmberZNet_docContent.xml +++ b/protocol/zigbee/documentation/slEmberZNet_docContent.xml @@ -1,6 +1,6 @@ - + Describes the impact of Wi-Fi on Zigbee and Thread, and methods to improve coexistence. First, methods to improve coexistence without direct interaction between Zigbee/Thread and Wi-Fi radios are described. Second, Silicon Labs's Packet Traffic Arbitration (PTA) support to coordinate 2.5 GHz RF traffic for co-located Zigbee/Thread and Wi-Fi radios is described (for the EFR32MG only). @@ -8,42 +8,42 @@ - + Includes detailed information on using the Silicon Labs Gecko Bootloader with EmberZNet. It supplements the general Gecko Bootloader implementation information provided in UG489: Silicon Labs Gecko Bootloader User's Guide for GSDK 4.0 and Higher. - + Explains how to use Simplicity Commander to check, write, verify, and erase installation codes on Silicon Labs Wireless Gecko (EFR32) devices. - + Includes guidelines for certifying Zigbee 3.0 devices, instructions on setting up and using the Zigbee test harness and Zigbee test tool, and troubleshooting tips. - + Contains three complete PICS documents for Z3ColorControlLight, Z3Gateway and Z3SmartOutlet reference designs, along with XML files for Z3ColorControlLight clusters. - + Describes the Secure EZSP protocol and how to configure the hardware and required software to construct a secure EZSP Host-to-NCP interface. - + Explains how NVM3 can be used as non-volatile data storage in various protocol implementations. @@ -51,14 +51,14 @@ - + Details methods for testing Zigbee 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. @@ -66,7 +66,7 @@ - + Describes tokens and shows how to use them for non-volatile data storage in EmberZNet PRO and Silicon Labs Flex applications. @@ -74,14 +74,14 @@ - + Describes how to use the manufacturing library and its associated plugins in Simplicity Studio to perform RF tests during the manufacturing phase. - + 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. @@ -89,7 +89,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 for GSDK 4.0 and Higher. @@ -97,7 +97,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. @@ -105,14 +105,14 @@ - + Introduces some basic security concepts, including network layer security, trust centers, and application support layer security features. It then discusses the types of standard security protocols available in EmberZNet PRO. Coding requirements for implementing security are reviewed in summary. Finally, information on implementing Zigbee Smart Energy security is provided. - + How to program, provision, and configure the anti-tamper module on EFR32 Series 2 devices with Secure Vault. @@ -120,7 +120,7 @@ - + How to authenticate an EFR32 Series 2 device with Secure Vault, using secure device certificates and signatures. @@ -128,7 +128,7 @@ - + How to securely "wrap" keys in EFR32 Series 2 devices with Secure Vault, so they can be stored in non-volatile storage. @@ -136,7 +136,7 @@ - + Summarizes the differences between Zigbee EmberZNet 7.x in GSDK 4.x and earlier AppBuilder-based versions. @@ -144,7 +144,7 @@ - + Describes how to provision and configure Series 2 devices through the DCI and SWD. @@ -152,7 +152,7 @@ - + Describes how to integrate crypto functionality into applications using PSA Crypto compared to Mbed TLS. @@ -160,35 +160,35 @@ - + Provides instructions for configuring various aspects of a component-based NCP application using Zigbee EmberZNet SDK 7.0 and higher with the tools included in Simplicity Studio 5. - + Describes how to configure peripherals running firmware produced with Zigbee 7.0 and higher using Simplicity Studio's Pin Tool and Project Configurator. - + Provides details on developing Dynamic Multiprotocol applications using Bluetooth and Zigbee EmberZNet SDK 7.0 and higher. - + Describes how to use Project Configurator to configure both receive and transmit Antenna Diversity in Zigbee EmberZNet applications. - + Describes how to use the Zigbee Cluster Configurator, an advanced configuration tool within Simplicity Studio that allows developers to manage the Zigbee endpoints, clusters and commands implemented by their device. @@ -196,7 +196,7 @@ - + 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. @@ -204,14 +204,14 @@ - + Describes how to perform a Zigbee over-the-air (OTA) bootloading session between a ZCL OTA Upgrade cluster client device and server device. The instructions are for EFR32MG12 development kits. Users can also refer to this procedure when setting up or testing Zigbee OTA bootload cluster download in their own development environments with their own hardware. - + Summarizes the results of simultaneous Thread and Zigbee throughput performance testing for the concurrent multiprotocol / multi-PAN RCP, running both OpenThread and Zigbee on the host processor. @@ -219,21 +219,21 @@ - + Describes how to use the backup and restore feature in a Z3GatewayGPCombo scenario application. - + Zigbee EmberZNet 7.0 and higher no longer supports compiling host applications in MinGW for Windows. This document offers an alternative solution by using a Docker container to run the NCP Host Application. - + Details the different options for integrating RF testing and characterization into standard test flows for the EFR32. @@ -241,42 +241,42 @@ - + Describes procedures for initial tests of a host connected to a Zigbee processor using EZSP-UART. It assumes that you have already read UG101, the UART Gateway Protocol Reference Guide. You should have a basic understanding of the UART Gateway protocol, as well as the signals needed by the UART interface. - + Provides an overview of the use of install codes and certificates in a Smart Energy network. Describes the components of a Smart Energy certificate and the differences between test certificates and production certificates. Explains how to use Silicon Labs utilities to program, verify and erase install codes and certificates. - + Details the EZSP-SPI Protocol used by a host microcontroller to communicate with an Ember network co-processor (NCP) running the EmberZNet PRO stack. It includes recommended procedures for developing and testing a driver for the EZSP-SPI Protocol on a new host microcontroller. - + Describes how to set up a device with the security resources required to support Smart Energy (SE) security, which is based on certificate-based key establishment (CBKE) using Elliptic-Curve Cryptography (ECC). You should be familiar the Zigbee Smart Energy Profile specification. - + Provides instructions for creating Zigbee Over-the-air (OTA) bootloader files with Image Builder, which takes an existing file (or multiple files) and wraps them in the file format as declared in the Zigbee specification. - + Provides a high-level description of the different options for integrating RF testing and characterization into your standard test flows. It is intended for customers who are moving from the early prototype development stage to the manufacturing production environment and need assistance with manufacturing test. @@ -284,14 +284,14 @@ - + Describes the multi-network stack feature that allows a single-radio chip to be concurrently part of more than one distinct network. Some limitations and restrictions are enforced by the multi-network stack and should be taken into account during the design of a multi-network application. These limitations are mostly related to the role the node assumes on the networks and are discussed here in detail. - + 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. @@ -299,49 +299,49 @@ - + Provides an overview and hyperlinks to all packaged documentation. - + Provides basic information on configuring, building, and installing applications for the EFR32MG family of SoCs using the Zigbee EmberZNet Software Development Kit (SDK) v7.0 and higher with Simplicity Studio 5. - + Lists SoC Platform APIs used to interface to the EmberZNet PRO stack, HAL, and status of the application-controlled network. These APIs concern network management, device and stack management, messaging, fragmentation, serial communication, token access, peripheral access, bootload utilities, and others. They are independent of the Application Framework and therefore can be used to develop applications that do not rely on the Zigbee Cluster Library. - + Describes Zigbee Application Framework APIs, the CLI interface, and callbacks. - + A companion to the EmberZNet API references, for developers whose applications require functionality not available through Project Configurator and the application framework, or who prefer working with an API. Includes an introduction to the stack API, a discussion of advanced design issues to consider when developing an application using the API, and provides an example application. - + The Zigbee Application Framework is a body of embedded C code that can be configured by project configuration tools to implement any Zigbee Cluster Library (ZCL) application. This guide covers the structure and usage of the Zigbee Application Framework in SDK 7.0 and higher. - + 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. @@ -349,7 +349,7 @@ - + A detailed overview of all the changes, additions, and fixes in the Gecko Platform components. The Gecko Platform consists of: EMLIB, EMDRV, RAIL Library, NVM3, and the mbedTLS Plugin. @@ -357,28 +357,28 @@ - + Lists compatibility requirements and sources for all software components in the development environment. Discusses the latest changes to the Zigbee 7.x stack (and associated utilities) including added/deleted/deprecated features/API, and lists bugs that have been fixed since the last release and any pending ones. - + Describes the EmberZNet Serial Protocol (EZSP), used by a host application processor to interact with the EmberZNet PRO stack running on an NCP over either a SPI or a UART interface. Describes the frame formats for different EZSP-bound stack activities such as network management, messaging, bootloading, and token access. - + Describes the protocol used by EZSP-UART to reliably carry commands and responses between a host processor and a network co-processor. The topics discussed include a brief overview of Ember-designed ASH (Asynchronus Serial Host) protocol, general ASH frame format, different ASH frames, and their operation. - + Introduces some fundamental concepts of wireless networking. These concepts are referred to in other Fundamentals documents. If you are new to wireless networking, read this document first. @@ -386,21 +386,21 @@ - + Describes the key features and characteristics of a Zigbee solution. It also includes a section on Zigbee 3.0. - + Discusses the major decisions that must be made about which wireless protocol you should use, as well as additional decisions to be made if you are designing a Zigbee solution. - + 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. @@ -408,7 +408,7 @@ - + Introduces bootloading for Silicon Labs networking devices. Discusses the Gecko Bootloader and describes the file formats used by each. @@ -416,7 +416,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. @@ -424,21 +424,21 @@ - + Compares the ZLL stack and network with the EmberZNet PRO stack and network, with notes about considerations when implementing a ZLL solution. Includes a basic description of ZLL configuration and commissioning, and notes about the interoperability of ZLL and non-ZLL devices. - + Describes the main features and functions of Zigbee Green Power (ZGP) and a basic ZGP network, including its device types and commissioning process, and how EmberZNet supports the ZGP device types. - + 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. @@ -446,7 +446,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 @@ -454,14 +454,14 @@ - + Describes strategies for testing and debugging applications, including: hardware and application considerations, initial development testing, and lab testing. For additional information about later stages of programming and testing see application notes AN700.1: Manufacturing Test Guidelines and AN718: Manufacturing Test Overview. - + Describes how and when to use Simplicity Commander's Command-Line Interface with EFR32 parts. @@ -469,7 +469,7 @@ - + Describes how to implement a dynamic multiprotocol solution. @@ -477,14 +477,14 @@ - + Introduces Silicon Labs Green Power components within the EmberZNet PRO stack and explains how to enable your network for Green Power. - + 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/protocol/zigbee/esf.properties b/protocol/zigbee/esf.properties index 98da49bd267..702efdcb377 100644 --- a/protocol/zigbee/esf.properties +++ b/protocol/zigbee/esf.properties @@ -3,16 +3,16 @@ # # This files lists Studio SDK properties pertaining to the ZigBee stack. # -# The version=7.2.1.0 +# The version=7.2.2.0 # release branch, or it should be set to 0.0.0 otherwise. This is the # version that Studio displays for the loaded stack. # id=com.silabs.sdk.stack.znet -version=7.2.1.0 +version=7.2.2.0 label=EmberZNet SDK description=Silicon Labs EmberZNet SDK -prop.subLabel=EmberZNet\\ 7.2.1.0 +prop.subLabel=EmberZNet\\ 7.2.2.0 prop.partCompatibility=.*host.* .*efr32mg(12|13)p.* .*efr32mg2[1247].* .*mgm(12|13|21|22|24).* .*rm21.* diff --git a/protocol/zigbee/stack/config/config.h b/protocol/zigbee/stack/config/config.h index d0fcaae3ef9..3be98d87529 100644 --- a/protocol/zigbee/stack/config/config.h +++ b/protocol/zigbee/stack/config/config.h @@ -33,7 +33,7 @@ // The 4 digit version: A.B.C.D #define EMBER_MAJOR_VERSION 7 #define EMBER_MINOR_VERSION 2 -#define EMBER_PATCH_VERSION 1 +#define EMBER_PATCH_VERSION 2 #define EMBER_SPECIAL_VERSION 0 // 2 bytes diff --git a/protocol/zigbee/stack/gp/gp-stub.c b/protocol/zigbee/stack/gp/gp-stub.c index 9ec6cf56cc2..059ec4568c6 100644 --- a/protocol/zigbee/stack/gp/gp-stub.c +++ b/protocol/zigbee/stack/gp/gp-stub.c @@ -191,6 +191,12 @@ bool emIsGpIdConflict(EmberNodeId shortId) return false; } +void emDetectGpIdConflictAndResolve(EmberNodeId shortId, + uint8_t *longId) +{ + (void)shortId; + (void)longId; +} void emUpdateGpProxyTable(uint8_t *longId, EmberNodeId shortId) { (void)longId; diff --git a/protocol/zigbee/stack/include/gp-types.h b/protocol/zigbee/stack/include/gp-types.h index 54c05206896..a8b470c86db 100644 --- a/protocol/zigbee/stack/include/gp-types.h +++ b/protocol/zigbee/stack/include/gp-types.h @@ -539,6 +539,9 @@ typedef struct { //@} \\END GP Types +#define GP_GPD_SRC_ID_FOR_CAHNNEL_CONFIG 0x00000000 +#define GP_GPD_SRC_ID_WILDCARD 0xFFFFFFFF + // GPD SrcID reserved values #define GP_GPD_SRC_ID_RESERVED_0 0x00000000 #define GP_GPD_SRC_ID_RESERVED_FFFFFF9 0xFFFFFFF9 diff --git a/protocol/zigbee/stack/include/zigbee-security-manager.h b/protocol/zigbee/stack/include/zigbee-security-manager.h index b54c4a2ab19..edd0c113ed8 100644 --- a/protocol/zigbee/stack/include/zigbee-security-manager.h +++ b/protocol/zigbee/stack/include/zigbee-security-manager.h @@ -489,12 +489,10 @@ sl_status_t sl_zb_sec_man_load_key_context(sl_zb_sec_man_context_t* context); * * @param output [OUT] Hashed data. * - * @return sl_status_t SL_STATUS_OK. - * */ -sl_status_t sl_zb_sec_man_hmac_aes_mmo(const uint8_t* input, - const uint8_t data_length, - uint8_t* output); +void sl_zb_sec_man_hmac_aes_mmo(const uint8_t* input, + const uint8_t data_length, + uint8_t* output); /** * @brief Encrypt the specified data using AES-CCM with AES-128 and a 32-bit MIC. diff --git a/protocol/zigbee/stack/security/zigbee-security-manager-no-vault.c b/protocol/zigbee/stack/security/zigbee-security-manager-no-vault.c index 5468e5cf9af..1e94afdbefd 100644 --- a/protocol/zigbee/stack/security/zigbee-security-manager-no-vault.c +++ b/protocol/zigbee/stack/security/zigbee-security-manager-no-vault.c @@ -396,11 +396,10 @@ static void xorKeyWithByte(const uint8_t key[ENCRYPTION_BLOCK_SIZE], //Code ported over from emberHmacAesHash; has Zigbee security manager //handle key loading instead of taking in key data as an argument. -sl_status_t sl_zb_sec_man_hmac_aes_mmo(const uint8_t* input, - const uint8_t data_length, - uint8_t* output) +void sl_zb_sec_man_hmac_aes_mmo(const uint8_t* input, + const uint8_t data_length, + uint8_t* output) { - sl_status_t status; //load key from other function calls first emGetKeyFromCore((uint8_t*) &zb_sec_man_context_key); @@ -426,9 +425,6 @@ sl_status_t sl_zb_sec_man_hmac_aes_mmo(const uint8_t* input, : output)); MEMMOVE(output, context.result, ENCRYPTION_BLOCK_SIZE); } - - status = SL_STATUS_OK; - return status; } #if defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_AES) && defined(MBEDTLS_PSA_ACCEL_ALG_CCM) && defined(PSA_WANT_ALG_CCM) && defined(MBEDTLS_PSA_CRYPTO_DRIVERS) diff --git a/protocol/zigbee/stack/security/zigbee-security-manager-vault-support.c b/protocol/zigbee/stack/security/zigbee-security-manager-vault-support.c index 2ea436f483e..261b85954ab 100644 --- a/protocol/zigbee/stack/security/zigbee-security-manager-vault-support.c +++ b/protocol/zigbee/stack/security/zigbee-security-manager-vault-support.c @@ -828,11 +828,10 @@ static void xorKeyWithByte(const uint8_t key[ENCRYPTION_BLOCK_SIZE], //This is still handled through software on Vault-supported parts, //as the AES-MMO algorithm used for hashing is not supported by //the Vault hardware needed for internal crypto operations. -sl_status_t sl_zb_sec_man_hmac_aes_mmo(const uint8_t* input, - const uint8_t data_length, - uint8_t* output) +void sl_zb_sec_man_hmac_aes_mmo(const uint8_t* input, + const uint8_t data_length, + uint8_t* output) { - sl_status_t status; //export referenced key from Vault; store it locally so it isn't //kept around for longer than necessary uint8_t zb_sec_man_hmac_key[EMBER_ENCRYPTION_KEY_SIZE]; @@ -866,9 +865,6 @@ sl_status_t sl_zb_sec_man_hmac_aes_mmo(const uint8_t* input, : output)); MEMMOVE(output, context.result, ENCRYPTION_BLOCK_SIZE); } - - status = SL_STATUS_OK; - return status; } sl_status_t sl_zb_sec_man_aes_ccm(uint8_t* nonce, diff --git a/protocol/zigbee/stack/security/zigbee-security-manager.c b/protocol/zigbee/stack/security/zigbee-security-manager.c index 65fdcd8503a..0d21d6246bd 100644 --- a/protocol/zigbee/stack/security/zigbee-security-manager.c +++ b/protocol/zigbee/stack/security/zigbee-security-manager.c @@ -411,3 +411,18 @@ sl_status_t zb_sec_man_fetch_link_key_table_key_info(sl_zb_sec_man_context_t* co return SL_STATUS_OK; } + +//Defined here to support code that still calls this; sl_zb_sec_man_hmac_aes_mmo +//is designed to replace it. +void emberHmacAesHash(const uint8_t *key, + const uint8_t *data, + uint8_t dataLength, + uint8_t *result) +{ + sl_zb_sec_man_context_t context; + sl_zb_sec_man_init_context(&context); + context.core_key_type = SL_ZB_SEC_MAN_KEY_TYPE_INTERNAL; + (void) sl_zb_sec_man_import_key(&context, (sl_zb_sec_man_key_t *)key); + (void) sl_zb_sec_man_load_key_context(&context); + sl_zb_sec_man_hmac_aes_mmo(data, dataLength, result); +} diff --git a/protocol/zigbee/tool/image-builder/image-builder-linux b/protocol/zigbee/tool/image-builder/image-builder-linux index b39ce5e62d4..f7668ec8c88 100644 Binary files a/protocol/zigbee/tool/image-builder/image-builder-linux and b/protocol/zigbee/tool/image-builder/image-builder-linux differ diff --git a/protocol/zigbee/tool/image-builder/image-builder-windows.exe b/protocol/zigbee/tool/image-builder/image-builder-windows.exe index af1df00b40c..a819a4ab745 100644 --- a/protocol/zigbee/tool/image-builder/image-builder-windows.exe +++ b/protocol/zigbee/tool/image-builder/image-builder-windows.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0da69ab465a665d1d3933522bcb07a1925f3d8df6b3aeb8d5c04e8df70c40aad +oid sha256:d470c819f424762770db1a367f9a0c7320d31f04ad17ac0f874fbad43822edce size 3024294 diff --git a/protocol/zigbee/zigbee_production_demos.xml b/protocol/zigbee/zigbee_production_demos.xml index 15901d0da3e..a82b93e53e3 100644 --- a/protocol/zigbee/zigbee_production_demos.xml +++ b/protocol/zigbee/zigbee_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 @@ - + @@ -84,7 +84,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -96,7 +96,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -108,7 +108,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -120,7 +120,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -132,7 +132,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -144,7 +144,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -156,7 +156,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -167,7 +167,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -178,7 +178,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -189,7 +189,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -200,7 +200,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -211,7 +211,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -222,7 +222,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -233,7 +233,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -244,7 +244,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -255,7 +255,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -266,7 +266,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + @@ -277,7 +277,7 @@ Steps to create a ECC enabled application for Smart Energy Profile application: - + diff --git a/protocol/zigbee/zigbee_production_templates.xml b/protocol/zigbee/zigbee_production_templates.xml index d37985c274d..f33d67e03f5 100644 --- a/protocol/zigbee/zigbee_production_templates.xml +++ b/protocol/zigbee/zigbee_production_templates.xml @@ -23,7 +23,7 @@ - + @@ -38,7 +38,7 @@ - + @@ -53,7 +53,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -128,7 +128,7 @@ - + @@ -143,7 +143,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -188,7 +188,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -233,7 +233,7 @@ - + @@ -248,7 +248,7 @@ - + @@ -263,7 +263,7 @@ - + @@ -278,7 +278,7 @@ - + @@ -293,7 +293,7 @@ - + @@ -308,7 +308,7 @@ - + @@ -353,7 +353,7 @@ - + @@ -368,7 +368,7 @@ - + @@ -383,7 +383,7 @@ - + @@ -398,7 +398,7 @@ - + diff --git a/util/silicon_labs/aox/lib/gcc/release/libaox_static_darwin_x86_64.a b/util/silicon_labs/aox/lib/gcc/release/libaox_static_darwin_x86_64.a index 58e3a2de1b1..64bd936b777 100644 --- a/util/silicon_labs/aox/lib/gcc/release/libaox_static_darwin_x86_64.a +++ b/util/silicon_labs/aox/lib/gcc/release/libaox_static_darwin_x86_64.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0a60e6374e3012f94f538a6a52d37b383afe36f031b2fe98d9d90c4d9918509c +oid sha256:7f163ffd632a5b3bac1762f21a68bda02c0675be7b4b029be68edc64278aa9ef size 1672696 diff --git a/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_aarch64.a b/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_aarch64.a index bf0b1d68dc6..a882b521a2d 100644 --- a/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_aarch64.a +++ b/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_aarch64.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c55bda8a2bcf62e334c2f920d1121272b44289965a8904f39e2429a7de6c1e92 +oid sha256:f65f1ae4674370251760a69d1b0f8b0f525a05618fa56693a4acdbb92dfa0279 size 1830782 diff --git a/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_armv7l.a b/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_armv7l.a index c445e37cd14..e9a339e4bea 100644 --- a/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_armv7l.a +++ b/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_armv7l.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:110ad3223a3718eb71b40bce5ca2a57ad52277eff0559c746575cbab3a2779ca +oid sha256:27c38869cf3d9cba0dda6e5989c51d31af0f2e51ce9339ac243c0d4dcf65395f size 1772028 diff --git a/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_x86_64.a b/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_x86_64.a index 014b63c4280..1a5e888ebdd 100644 --- a/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_x86_64.a +++ b/util/silicon_labs/aox/lib/gcc/release/libaox_static_linux_x86_64.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:823942d824f9c42004f4d2b1404956f4a1bfee6672f42c1e0d96cb694980beba +oid sha256:0a279d953d29b2f675ca4dba571f7afbf2c34e744426b724f54cb8e41d06b3ab size 1746844 diff --git a/util/silicon_labs/aox/lib/gcc/release/libaox_static_windows_x86_64.a b/util/silicon_labs/aox/lib/gcc/release/libaox_static_windows_x86_64.a index 635787d1c58..16995fe9db7 100644 --- a/util/silicon_labs/aox/lib/gcc/release/libaox_static_windows_x86_64.a +++ b/util/silicon_labs/aox/lib/gcc/release/libaox_static_windows_x86_64.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44c4dc4d589250499e03c4dab60efa9ba3c7b4de39fa9da08edb45e59419330f +oid sha256:a974c0bd6861057ca4aa132b8f17db22714a7012cbeb25cf1fa3799892e542b5 size 1718912 diff --git a/util/third_party/openthread/src/core/mac/sub_mac.hpp b/util/third_party/openthread/src/core/mac/sub_mac.hpp index 8cf8c1d9340..3199dae45c1 100644 --- a/util/third_party/openthread/src/core/mac/sub_mac.hpp +++ b/util/third_party/openthread/src/core/mac/sub_mac.hpp @@ -322,8 +322,11 @@ class SubMac : public InstanceLocator, private NonCopyable */ bool IsTransmittingOrScanning(void) const { - return ((mState == kStateTransmit) || (mState == kStateEnergyScan) || (mState == kStateCsmaBackoff) || - (mState == kStateDelayBeforeRetx)); + return ((mState == kStateTransmit) || (mState == kStateEnergyScan) || (mState == kStateCsmaBackoff) +#if OPENTHREAD_CONFIG_MAC_ADD_DELAY_ON_NO_ACK_ERROR_BEFORE_RETRY + || (mState == kStateDelayBeforeRetx) +#endif + ); } /** diff --git a/util/third_party/openthread/src/posix/platform/cpc_interface.cpp b/util/third_party/openthread/src/posix/platform/cpc_interface.cpp index 54c76520393..4e0027ec717 100644 --- a/util/third_party/openthread/src/posix/platform/cpc_interface.cpp +++ b/util/third_party/openthread/src/posix/platform/cpc_interface.cpp @@ -59,7 +59,7 @@ using ot::Spinel::SpinelInterface; namespace ot { namespace Posix { -bool CpcInterface::sCpcResetReq = false; +volatile sig_atomic_t CpcInterface::sCpcResetReq = false; CpcInterface::CpcInterface(SpinelInterface::ReceiveFrameCallback aCallback, void * aCallbackContext, @@ -123,10 +123,11 @@ CpcInterface::~CpcInterface(void) void CpcInterface::Deinit(void) { - VerifyOrExit(mEndpoint.ptr != nullptr); - VerifyOrExit(0 == cpc_close_endpoint(&mEndpoint), perror("close cpc endpoint")); + // Invalidate file descriptor + mSockFd = -1; + exit: return; } @@ -261,11 +262,27 @@ void CpcInterface::Process(const RadioProcessContext &aContext) void CpcInterface::CheckAndReInitCpc(void) { int result; - int attempts = 0; + int attempts; // Check if CPC needs to be restarted VerifyOrExit(sCpcResetReq); + // Clear the flag + SetCpcResetReq(false); + + // Check if the endpoint was previously opened + if (mSockFd > 0) + { + // Close endpoint + result = cpc_close_endpoint(&mEndpoint); + // If the close failed, exit + VerifyOrDie(result == 0, OT_EXIT_ERROR_ERRNO); + // Invalidate file descriptor + mSockFd = -1; + } + + // Restart communication with cpcd + attempts = 0; do { // Add some delay before attempting to restart @@ -278,20 +295,28 @@ void CpcInterface::CheckAndReInitCpc(void) // have exhausted the retries or restart was successful } while ((result != 0) && (attempts < kMaxRestartAttempts)); - // If the restart failed, exit. + // If the restart failed, exit VerifyOrDie(result == 0, OT_EXIT_ERROR_ERRNO); - // Reopen the endpoint for communication - mSockFd = cpc_open_endpoint(mHandle, &mEndpoint, mId, 1); + // Reopen the endpoint + attempts = 0; + do + { + // Add some delay before attempting to open the endpoint + usleep(kMaxSleepDuration); + // Try to open the endpoint + mSockFd = cpc_open_endpoint(mHandle, &mEndpoint, mId, 1); + // Mark how many times the open was attempted + attempts++; + // Continue to try and open the endpoint until we + // have exhausted the retries or open was successful + } while ((mSockFd <= 0) && (attempts < kMaxRestartAttempts)); - // If the restart failed, exit. - VerifyOrDie(mSockFd >= 0, OT_EXIT_ERROR_ERRNO); + // If the open failed, exit + VerifyOrDie(mSockFd > 0, OT_EXIT_ERROR_ERRNO); otLogCritPlat("Restarted CPC successfully"); - // Clear the flag - SetCpcResetReq(false); - exit: return; } diff --git a/util/third_party/openthread/src/posix/platform/cpc_interface.hpp b/util/third_party/openthread/src/posix/platform/cpc_interface.hpp index 401f40418e6..b0068e85d0c 100644 --- a/util/third_party/openthread/src/posix/platform/cpc_interface.hpp +++ b/util/third_party/openthread/src/posix/platform/cpc_interface.hpp @@ -34,6 +34,8 @@ #ifndef POSIX_APP_CPC_INTERFACE_HPP_ #define POSIX_APP_CPC_INTERFACE_HPP_ +#include + #include "openthread-posix-config.h" #include "platform-posix.h" #include "sl_cpc.h" @@ -210,7 +212,7 @@ class CpcInterface { kMaxFrameSize = SL_CPC_READ_MINIMUM_SIZE, kMaxWaitTime = 2000, ///< Maximum wait time in Milliseconds for socket to become writable (see `SendFrame`). - kMaxSleepDuration = 100000, ///< Sleep duration in micro seconds before restarting cpc connection. + kMaxSleepDuration = 100000, ///< Sleep duration in micro seconds before restarting cpc connection/endpoint. kMaxRestartAttempts = 300, kResetCMDSize = 4, kCpcBusSpeed = 115200, @@ -232,9 +234,9 @@ class CpcInterface // 0x72 -> STATUS_RESET_SOFTWARE uint8_t mResetResponse[kResetCMDSize] = {0x80, 0x06, 0x00, 0x72}; - const uint8_t mId = SL_CPC_ENDPOINT_15_4; - typedef uint8_t cpcError; - static bool sCpcResetReq; + const uint8_t mId = SL_CPC_ENDPOINT_15_4; + typedef uint8_t cpcError; + static volatile sig_atomic_t sCpcResetReq; otRcpInterfaceMetrics mInterfaceMetrics; diff --git a/util/third_party/trusted-firmware-m/component/sl_fault_injection_hardening.slcc b/util/third_party/trusted-firmware-m/component/sl_fault_injection_hardening.slcc new file mode 100644 index 00000000000..c6cfaf2ccc5 --- /dev/null +++ b/util/third_party/trusted-firmware-m/component/sl_fault_injection_hardening.slcc @@ -0,0 +1,57 @@ +id: sl_fault_injection_hardening +label: Fault Injection Hardening +package: platform +description: > + Fault injection hardening library provides support for different measures, which can either be enabled/disabled by selecting one of the TFM_FIH_PROFILEs +category: Platform|Security +quality: production +component_root_path: util/third_party/trusted-firmware-m +source: + - path: lib/fih/src/fih.c + - path: platform/ext/target/siliconlabs/vse/sli_cryptoacc.c + condition: + - device_has_cryptoacc + unless: + - trustzone_nonsecure + - path: platform/ext/target/siliconlabs/hse/sli_se.c + condition: + - device_has_semailbox + unless: + - trustzone_nonsecure + +include: + - path: lib/fih/inc + file_list: + - path: fih.h + - path: platform/include + file_list: + - path: tfm_hal_defs.h + - path: tfm_hal_platform.h + +requires: + - name: device_series_2 + - name: se_manager + condition: [trustzone_secure] + - name: cryptoacc_library + condition: [device_has_cryptoacc,trustzone_secure] + - name: psa_driver + condition: [device_has_cryptoacc] + - name: mbedtls_config + condition: [device_has_cryptoacc] + - name: mbedtls_slcrypto_driver + condition: [device_has_cryptoacc] + +config_file: + - path: config/sl_fault_injection_hardening_cfg.h + file_id: sl_fault_injection_hardening_cfg + +toolchain_settings: + - option: gcc_compiler_option + value: -Wno-ignored-qualifiers + - option: gcc_compiler_option + value: -Wno-sign-compare +# Suppress IAR warning for ignored qualifiers: + - option: iar_compiler_option + value: --diag_suppress Pa082 +provides: + - name: sl_fault_injection_hardening diff --git a/util/third_party/trusted-firmware-m/config/sl_fault_injection_hardening_cfg.h b/util/third_party/trusted-firmware-m/config/sl_fault_injection_hardening_cfg.h new file mode 100644 index 00000000000..313bb512495 --- /dev/null +++ b/util/third_party/trusted-firmware-m/config/sl_fault_injection_hardening_cfg.h @@ -0,0 +1,107 @@ +/***************************************************************************//** + * @file + * @brief Configuration header of Fault Injection Hardening Library + ******************************************************************************* + * # License + * Copyright 2023 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 FAULT_INJECTION_HARDENING_CFG_H +#define FAULT_INJECTION_HARDENING_CFG_H + +// <<< Use Configuration Wizard in Context Menu >>> +// Fault Injection Profile Configuration + +// Enable TFM Fault Injection Hardening Profile +// Default: 0 +// Enforce TFM Fault Injection Hardening Profile ON in the firmware +// TZ bootloader applies the FI hardening to critical bootloader functions. +// TZ Secure Key Library initialisation applies FI hardening to secure that the TZ configuration is securely setup before jumping to the NonSecure application +#define SL_TFM_FIH_PROFILE_ON 0 + +#if defined(SL_TFM_FIH_PROFILE_ON) && (SL_TFM_FIH_PROFILE_ON == 1) +#define TFM_FIH_PROFILE_ON +#endif + +// TFM Fault Injection Hardening Profile as Low. +// Default: 0 +// enabled. Configures the TFM Fault Injection Hardening profile as low. +// Includes FIH_ENABLE_GLOBAL_FAIL (hardens the mitigations against the loop) +// Includes FIH_ENABLE_CFI (Control Flow Integrity) creates a global counter that is +// incremented before every FIH_CALL of vulnerable functions. On the function +// return the counter is decremented, and after the return it is verified that +// the counter has the same value as before this process. +#define SL_TFM_FIH_PROFILE_LOW 0 + +#if defined(SL_TFM_FIH_PROFILE_LOW) && (SL_TFM_FIH_PROFILE_LOW == 1) +#define TFM_FIH_PROFILE_LOW +#endif + +// TFM Fault Injection Hardening Profile as Medium. +// Default: 0 +// enabled. Configures the TFM Fault Injection Hardening profile as medium. +// Includes FIH_ENABLE_DOUBLE_VARS makes critical variables into a tuple (x, x ^ msk). +// Then the correctness of x can be checked by XORing the two tuple values together. +// This also means that comparisons between fih_ints can be verified +// by doing x == y && x_msk == y_msk. +// Includes FIH_ENABLE_GLOBAL_FAIL (hardens the mitigations against the loop) +// Includes FIH_ENABLE_CFI (Control Flow Integrity) creates a global counter that is +// incremented before every FIH_CALL of vulnerable functions. On the function +// return the counter is decremented, and after the return it is verified that +// the counter has the same value as before this process. +#define SL_TFM_FIH_PROFILE_MEDIUM 0 + +#if defined(SL_TFM_FIH_PROFILE_MEDIUM) && (SL_TFM_FIH_PROFILE_MEDIUM == 1) +#define TFM_FIH_PROFILE_MEDIUM +#endif + +// TFM Fault Injection Hardening Profile as High. +// Default: 0 +// enabled. Configures the TFM Fault Injection Hardening profile as high. +// Includes FIH_ENABLE_DELAY causes random delays. This makes it hard to cause faults precisely +// Includes FIH_ENABLE_DOUBLE_VARS makes critical variables into a tuple (x, x ^ msk). +// Then the correctness of x can be checked by XORing the two tuple values together. +// This also means that comparisons between fih_ints can be verified +// by doing x == y && x_msk == y_msk. +// Includes FIH_ENABLE_GLOBAL_FAIL (hardens the mitigations against the loop) +// Includes FIH_ENABLE_CFI (Control Flow Integrity) creates a global counter that is +// incremented before every FIH_CALL of vulnerable functions. On the function +// return the counter is decremented, and after the return it is verified that +// the counter has the same value as before this process. +#define SL_TFM_FIH_PROFILE_HIGH 0 + +#if defined(SL_TFM_FIH_PROFILE_HIGH) && (SL_TFM_FIH_PROFILE_HIGH == 1) +#define TFM_FIH_PROFILE_HIGH +#endif + +// + +// + +// <<< end of configuration section >>> +#if defined(TFM_FIH_PROFILE_ON) + #if (defined(TFM_FIH_PROFILE_LOW) && defined(TFM_FIH_PROFILE_MEDIUM) && defined(TFM_FIH_PROFILE_HIGH)) + #error "Choose either TFM fault injection hardening profile as LOW or Medium or High" + #endif // TFM_FIH_PROFILE_LOW && TFM_FIH_PROFILE_MEDIUM && TFM_FIH_PROFILE_HIGH + + #if (defined(TFM_FIH_PROFILE_LOW) && !defined(TFM_FIH_PROFILE_MEDIUM) && defined(TFM_FIH_PROFILE_HIGH)) + #error "Choose either TFM fault injection hardening profile as LOW or Medium or High" + #endif // TFM_FIH_PROFILE_LOW && !TFM_FIH_PROFILE_MEDIUM && TFM_FIH_PROFILE_HIGH + + #if (defined(TFM_FIH_PROFILE_LOW) && defined(TFM_FIH_PROFILE_MEDIUM) && !defined(TFM_FIH_PROFILE_HIGH)) + #error "Choose either TFM fault injection hardening profile as LOW or Medium or High" + #endif // TFM_FIH_PROFILE_LOW && TFM_FIH_PROFILE_MEDIUM && !TFM_FIH_PROFILE_HIGH + + #if (!defined(TFM_FIH_PROFILE_LOW) && defined(TFM_FIH_PROFILE_MEDIUM) && defined(TFM_FIH_PROFILE_HIGH)) + #error "Choose either TFM fault injection hardening profile as LOW or Medium or High" + #endif // !TFM_FIH_PROFILE_LOW && TFM_FIH_PROFILE_MEDIUM && TFM_FIH_PROFILE_HIGH +#endif // TFM_FIH_PROFILE_ON +#endif // FAULT_INJECTION_HARDENING_CFG_H diff --git a/util/third_party/trusted-firmware-m/interface/src/tfm_nvm3_func_api.c b/util/third_party/trusted-firmware-m/interface/src/tfm_nvm3_func_api.c index 0ef402300bc..72cb6343b47 100644 --- a/util/third_party/trusted-firmware-m/interface/src/tfm_nvm3_func_api.c +++ b/util/third_party/trusted-firmware-m/interface/src/tfm_nvm3_func_api.c @@ -57,14 +57,14 @@ #endif // defined(TFM_CONFIG_SL_SECURE_LIBRARY) -// The default handles are located in S together with the rest of the NVM3 code. However, the -// NVM3 api requires the handle pointer to be sent in explicitly, which NS does not know. We -// therefore use NULL as a special value, which makes the NVM3 service in TFM use its internal -// default handles. -// -// TODO: Use a non-NULL macro instead? - -nvm3_Handle_t placeholder_default_handle = { NULL }; +// The default handles are located in S together with the rest of the NVM3 code. +// However, the NVM3 API requires the handle pointer to be sent in explicitly, +// which NS does not know. We therefore use a magic value in the nvmAdr member, +// which makes the NVM3 service in the secure library use its internal default +// handle. +nvm3_Handle_t placeholder_default_handle = { + .nvmAdr = (nvm3_HalPtr_t)SLI_TZ_SERVICE_NVM3_DEFAULT_HANDLE_MAGIC +}; nvm3_Handle_t *nvm3_defaultHandle = &placeholder_default_handle; #if defined(NVM3_BASE) @@ -80,19 +80,18 @@ __attribute__((used)) uint8_t nvm3_default_storage[NVM3_DEFAULT_NVM_SIZE] __attr #error "Unsupported toolchain" #endif -static nvm3_CacheEntry_t defaultCache[NVM3_DEFAULT_CACHE_SIZE]; - nvm3_Init_t nvm3_defaultInitData = { .nvmAdr = (nvm3_HalPtr_t)NVM3_BASE, .nvmSize = NVM3_DEFAULT_NVM_SIZE, - .cachePtr = defaultCache, + // The secure library owns the NVM3 cache. Setting the cache pointer to NULL + // here indicates that the cache on the secure side should be used. + .cachePtr = NULL, .cacheEntryCount = NVM3_DEFAULT_CACHE_SIZE, .maxObjectSize = NVM3_DEFAULT_MAX_OBJECT_SIZE, .repackHeadroom = NVM3_DEFAULT_REPACK_HEADROOM, - // In TrustZone Secure Key Library solutions, the Secure Library owns the flash handle. - // Setting the flash handle to NULL here indicates that the flash handle on the secure - // side should be used. + // The secure library owns the flash handle. Setting the flash handle to NULL + // here indicates that the flash handle on the secure side should be used. .halHandle = NULL, }; diff --git a/util/third_party/trusted-firmware-m/lib/fih/inc/fih.h b/util/third_party/trusted-firmware-m/lib/fih/inc/fih.h new file mode 100644 index 00000000000..92e276c19d7 --- /dev/null +++ b/util/third_party/trusted-firmware-m/lib/fih/inc/fih.h @@ -0,0 +1,529 @@ +/* + * Copyright (c) 2020-2021, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#ifndef __FAULT_INJECTION_HARDENING_H__ +#define __FAULT_INJECTION_HARDENING_H__ + +#include +#include +#include "sl_fault_injection_hardening_cfg.h" +/* + * Fault injection mitigation library. + * + * Has support for different measures, which can either be enabled/disabled + * separately or by defining one of the TFM_FIH_PROFILEs. + * + * NOTE: It is not guaranteed that these constructs against fault injection + * attacks can be preserved in all compilers. + * + * FIH_ENABLE_DOUBLE_VARS makes critical variables into a tuple (x, x ^ msk). + * Then the correctness of x can be checked by XORing the two tuple values + * together. This also means that comparisons between fih_ints can be verified + * by doing x == y && x_msk == y_msk. + * + * FIH_ENABLE_GLOBAL_FAIL makes all while(1) failure loops redirect to a global + * failure loop. This loop has mitigations against loop escapes / unlooping. + * This also means that any unlooping won't immediately continue executing the + * function that was executing before the failure. + * + * FIH_ENABLE_CFI (Control Flow Integrity) creates a global counter that is + * incremented before every FIH_CALL of vulnerable functions. On the function + * return the counter is decremented, and after the return it is verified that + * the counter has the same value as before this process. This can be used to + * verify that the function has actually been called. This protection is + * intended to discover that important functions are called in an expected + * sequence and none of them is missed due to an instruction skip which could + * be a result of glitching attack. It does not provide protection against ROP + * or JOP attacks. + * + * FIH_ENABLE_DELAY causes random delays. This makes it hard to cause faults + * precisely. It requires an RNG. An mbedtls integration is provided in + * fault_injection_hardening_delay_mbedtls.h, but any RNG that has an entropy + * source can be used by implementing the fih_delay_random_uchar function. + * + * The basic call pattern is: + * + * fih_int fih_rc = FIH_FAILURE; + * FIH_CALL(vulnerable_function, fih_rc, arg1, arg2); + * if (fih_not_eq(fih_rc, FIH_SUCCESS)) { + * error_handling(); + * } + * + * If a fault injection is detected, call FIH_PANIC to trap the execution. + * + * Note that any function called by FIH_CALL must only return using FIH_RET, + * as otherwise the CFI counter will not be decremented and the CFI check will + * fail causing a panic. + */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#undef FIH_ENABLE_GLOBAL_FAIL +#undef FIH_ENABLE_CFI +#undef FIH_ENABLE_DOUBLE_VARS +#undef FIH_ENABLE_DELAY + +#ifdef TFM_FIH_PROFILE_ON +#if defined(TFM_FIH_PROFILE_LOW) +#define FIH_ENABLE_GLOBAL_FAIL +#define FIH_ENABLE_CFI + +#elif defined(TFM_FIH_PROFILE_MEDIUM) +#define FIH_ENABLE_DOUBLE_VARS +#define FIH_ENABLE_GLOBAL_FAIL +#define FIH_ENABLE_CFI + +#elif defined(TFM_FIH_PROFILE_HIGH) +#define FIH_ENABLE_DELAY /* Requires an hardware entropy source */ +#define FIH_ENABLE_DOUBLE_VARS +#define FIH_ENABLE_GLOBAL_FAIL +#define FIH_ENABLE_CFI + +#else +#error "Invalid FIH Profile configuration" +#endif /* TFM_FIH_PROFILE */ + +#define FIH_TRUE 0xC35A +#define FIH_FALSE 0x0 + +#ifdef FIH_ENABLE_DOUBLE_VARS +#define FIH_POSITIVE_VALUE 0x5555AAAA +#define FIH_NEGATIVE_VALUE 0xAAAA5555 + +/* + * A volatile mask is used to prevent compiler optimization - the mask is xored + * with the variable to create the backup and the integrity can be checked with + * another xor. The mask value doesn't _really_ matter that much, as long as + * it has reasonably high hamming weight. + */ +#define _FIH_MASK_VALUE 0xA5C35A3C + +/* + * All ints are replaced with two int - the normal one and a backup which is + * XORed with the mask. + */ +typedef volatile struct { + volatile int32_t val; + volatile int32_t msk; +} fih_int; + +#define FIH_INT_INIT(x) {(x), (x) ^ _FIH_MASK_VALUE} +#else /* FIH_ENABLE_DOUBLE_VARS */ +#define FIH_POSITIVE_VALUE 0x0 +#define FIH_NEGATIVE_VALUE 0xAAAA5555 + +typedef volatile int32_t fih_int; + +#define FIH_INT_INIT(x) (x) +#endif /* FIH_ENABLE_DOUBLE_VARS */ + +extern fih_int FIH_SUCCESS; +extern fih_int FIH_FAILURE; + +#ifdef FIH_ENABLE_GLOBAL_FAIL +/* + * Global failure handler - more resistant to unlooping. noinline and used are + * used to prevent optimization. + * + * NOTE + * This failure handler shall be used as FIH specific error handling to capture + * FI attacks. Error handling in SPM and SP should be enhanced respectively. + */ +__attribute__((noinline)) __attribute__((used)) void fih_panic_loop(void); +#define FIH_PANIC fih_panic_loop() +#else /* FIH_ENABLE_GLOBAL_FAIL */ +#define FIH_PANIC \ + do { \ + FIH_LABEL("FAILURE_LOOP"); \ + while (1) {} \ + } while (0) +#endif /* FIH_ENABLE_GLOBAL_FAIL */ + +/* + * NOTE + * For functions to be inlined outside their compilation unit they have to + * have the body in the header file. This is required as function calls are easy + * to skip. + */ +#ifdef FIH_ENABLE_DELAY +/** + * @brief Set up the RNG for use with random delays. Called once at startup. + */ +void fih_delay_init(void); + +/** + * Get a random uint8_t value from an RNG seeded with an entropy source. + * + * NOTE + * Do not directly call this function. + */ +uint8_t fih_delay_random(void); + +/* Delaying logic, with randomness from a CSPRNG */ +__attribute__((always_inline)) inline +void fih_delay(void) +{ + uint32_t i = 0; + volatile uint32_t delay = FIH_NEGATIVE_VALUE; + volatile uint32_t counter = 0; + + delay = fih_delay_random(); + + if (delay == FIH_NEGATIVE_VALUE) { + FIH_PANIC; + } + + delay &= 0xFF; + + for (i = 0; i < delay; i++) { + counter++; + } + + if (counter != delay) { + FIH_PANIC; + } +} +#else /* FIH_ENABLE_DELAY */ +#define fih_delay_init() + +#define fih_delay() +#endif /* FIH_ENABLE_DELAY */ + +#ifdef FIH_ENABLE_DOUBLE_VARS +__attribute__((always_inline)) inline +void fih_int_validate(fih_int x) +{ + if (x.val != (x.msk ^ _FIH_MASK_VALUE)) { + FIH_PANIC; + } +} + +/* Convert a fih_int to an int. Validate for tampering. */ +__attribute__((always_inline)) inline +int32_t fih_int_decode(fih_int x) +{ + fih_int_validate(x); + return x.val; +} + +/* Convert an int to a fih_int, can be used to encode specific error codes. */ +__attribute__((always_inline)) inline +fih_int fih_int_encode(int32_t x) +{ + fih_int ret = {x, x ^ _FIH_MASK_VALUE}; + return ret; +} + +/* Standard equality. If A == B then 1, else 0 */ +__attribute__((always_inline)) inline +int32_t fih_eq(fih_int x, fih_int y) +{ + volatile int32_t rc1 = FIH_FALSE; + volatile int32_t rc2 = FIH_FALSE; + + fih_int_validate(x); + fih_int_validate(y); + + if (x.val == y.val) { + rc1 = FIH_TRUE; + } + + fih_delay(); + + if (x.msk == y.msk) { + rc2 = FIH_TRUE; + } + + fih_delay(); + + if (rc1 != rc2) { + FIH_PANIC; + } + + return rc1; +} + +__attribute__((always_inline)) inline +int32_t fih_not_eq(fih_int x, fih_int y) +{ + volatile int32_t rc1 = FIH_FALSE; + volatile int32_t rc2 = FIH_FALSE; + + fih_int_validate(x); + fih_int_validate(y); + + if (x.val != y.val) { + rc1 = FIH_TRUE; + } + + fih_delay(); + + if (x.msk != y.msk) { + rc2 = FIH_TRUE; + } + + fih_delay(); + + if (rc1 != rc2) { + FIH_PANIC; + } + + return rc1; +} +#else /* FIH_ENABLE_DOUBLE_VARS */ +/* NOOP */ +#define fih_int_validate(x) + +/* NOOP */ +#define fih_int_decode(x) (x) + +/* NOOP */ +#define fih_int_encode(x) (x) + +__attribute__((always_inline)) inline +int32_t fih_eq(fih_int x, fih_int y) +{ + volatile int32_t rc = FIH_FALSE; + + if (x == y) { + rc = FIH_TRUE; + } + + fih_delay(); + + if (x != y) { + rc = FIH_FALSE; + } + + return rc; +} + +__attribute__((always_inline)) inline +int32_t fih_not_eq(fih_int x, fih_int y) +{ + volatile int32_t rc = FIH_FALSE; + + if (x != y) { + rc = FIH_TRUE; + } + + fih_delay(); + + if (x == y) { + rc = FIH_FALSE; + } + + return rc; +} +#endif /* FIH_ENABLE_DOUBLE_VARS */ + +/* + * C has a common return pattern where 0 is a correct value and all others are + * errors. This function converts 0 to FIH_SUCCESS and any other number to a + * value that is not FIH_SUCCESS + */ +__attribute__((always_inline)) inline +fih_int fih_int_encode_zero_equality(int32_t x) +{ + if (x) { + return FIH_FAILURE; + } else { + return FIH_SUCCESS; + } +} + +#ifdef FIH_ENABLE_CFI +/* Global Control Flow Integrity counter */ +extern fih_int _fih_cfi_ctr; + +/* + * Increment the CFI counter by input counter and return the value before the + * increment. + * + * NOTE + * This function shall not be called directly. + */ +fih_int fih_cfi_get_and_increment(uint8_t cnt); + +/* + * Validate that the saved precall value is the same as the value of the global + * counter. For this to be the case, a fih_ret must have been called between + * these functions being executed. If the values aren't the same then panic. + * + * NOTE + * This function shall not be called directly. + */ +void fih_cfi_validate(fih_int saved); + +/* + * Decrement the global CFI counter by one, so that it has the same value as + * before the cfi_precall. + * + * NOTE + * This function shall not be called directly. + */ +void fih_cfi_decrement(void); + +/* + * Macro wrappers for functions - Even when the functions have zero body this + * saves a few bytes on noop functions as it doesn't generate the call/ret + * + * CFI precall function saves the CFI counter and then increments it - the + * postcall then checks if the counter is equal to the saved value. In order for + * this to be the case a FIH_RET must have been performed inside the called + * function in order to decrement the counter, so the function must have been + * called. + */ +#define FIH_CFI_PRECALL_BLOCK \ + fih_int _fih_cfi_precall_saved_value = fih_cfi_get_and_increment(1) + +#define FIH_CFI_POSTCALL_BLOCK \ + fih_cfi_validate(_fih_cfi_precall_saved_value) + +#define FIH_CFI_PRERET \ + fih_cfi_decrement() + +/* + * Marcos to support protect the control flow integrity inside a function. + * + * The FIH_CFI_PRECALL_BLOCK/FIH_CFI_POSTCALL_BLOCK pair mainly protect function + * calls from fault injection. Fault injection may attack a function to skip its + * critical steps which are not function calls. It is difficult for the caller + * to dectect the injection as long as the function successfully returns. + * + * The following macros can be called in a function to track the critical steps, + * especially those which are not function calls. + */ +/* + * FIH_CFI_STEP_INIT() saves the CFI counter and increase the CFI counter by the + * number of the critical steps. It should be called before execution starts. + */ +#define FIH_CFI_STEP_INIT(x) \ + fih_int _fih_cfi_step_saved_value = fih_cfi_get_and_increment(x) + +/* + * FIH_CFI_STEP_DECREMENT() decrease the CFI counter by one. It can be called + * after each critical step execution completes. + */ +#define FIH_CFI_STEP_DECREMENT() \ + fih_cfi_decrement() + +/* + * FIH_CFI_STEP_ERR_RESET() resets the CFI counter to the previous value saved + * by FIH_CFI_STEP_INIT(). It shall be called only when a functionality error + * occurs and forces the function to exit. It can enable the caller to capture + * the functionality error other than being trapped in fault injection error + * handling. + */ +#define FIH_CFI_STEP_ERR_RESET() \ + do { \ + _fih_cfi_ctr = _fih_cfi_step_saved_value; \ + fih_int_validate(_fih_cfi_ctr); \ + } while(0) + +#else /* FIH_ENABLE_CFI */ +#define FIH_CFI_PRECALL_BLOCK +#define FIH_CFI_POSTCALL_BLOCK +#define FIH_CFI_PRERET + +#define FIH_CFI_STEP_INIT(x) +#define FIH_CFI_STEP_DECREMENT() +#define FIH_CFI_STEP_ERR_RESET() +#endif /* FIH_ENABLE_CFI */ + +/* + * Label for interacting with FIH testing tool. Can be parsed from the elf file + * after compilation. Does not require debug symbols. + */ +#define FIH_LABEL(str) __asm volatile ("FIH_LABEL_" str "_0_%=:" ::) +#define FIH_LABEL_CRITICAL_POINT() FIH_LABEL("FIH_CRITICAL_POINT") + +/* + * Main FIH calling macro. return variable is second argument. Does some setup + * before and validation afterwards. Inserts labels for use with testing script. + * + * First perform the precall step - this gets the current value of the CFI + * counter and saves it to a local variable, and then increments the counter. + * + * Then set the return variable to FIH_FAILURE as a base case. + * + * Then perform the function call. As part of the function FIH_RET must be + * called which will decrement the counter. + * + * The postcall step gets the value of the counter and compares it to the + * previously saved value. If this is equal then the function call and all child + * function calls were performed. + */ +#define FIH_CALL(f, ret, ...) \ + do { \ + FIH_LABEL("FIH_CALL_START_" # f); \ + FIH_CFI_PRECALL_BLOCK; \ + ret = FIH_FAILURE; \ + fih_delay(); \ + ret = f(__VA_ARGS__); \ + FIH_CFI_POSTCALL_BLOCK; \ + fih_int_validate(ret); \ + FIH_LABEL("FIH_CALL_END"); \ + } while (0) + +/* + * FIH return changes the state of the internal state machine. If you do a + * FIH_CALL then you need to do a FIH_RET else the state machine will detect + * tampering and panic. + */ +#define FIH_RET(ret) \ + do { \ + FIH_CFI_PRERET; \ + return ret; \ + } while (0) + +#else /* TFM_FIH_PROFILE_ON */ +typedef int32_t fih_int; + +#define FIH_INT_INIT(x) (x) + +#define FIH_SUCCESS 0 +#define FIH_FAILURE -1 + +#define fih_int_validate(x) + +#define fih_int_decode(x) (x) + +#define fih_int_encode(x) (x) + +#define fih_eq(x, y) ((x) == (y)) + +#define fih_not_eq(x, y) ((x) != (y)) + +#define fih_delay_init() +#define fih_delay() + +#define FIH_CALL(f, ret, ...) \ + do { \ + ret = f(__VA_ARGS__); \ + } while (0) + +#define FIH_RET(ret) \ + do { \ + return ret; \ + } while (0) + +#define FIH_CFI_STEP_INIT(x) +#define FIH_CFI_STEP_DECREMENT() +#define FIH_CFI_STEP_ERR_RESET() + +#define FIH_LABEL_CRITICAL_POINT() + +#endif /* TFM_FIH_PROFILE_ON */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __FAULT_INJECTION_HARDENING_H__ */ \ No newline at end of file diff --git a/util/third_party/trusted-firmware-m/lib/fih/src/fih.c b/util/third_party/trusted-firmware-m/lib/fih/src/fih.c new file mode 100644 index 00000000000..87e5406f0ca --- /dev/null +++ b/util/third_party/trusted-firmware-m/lib/fih/src/fih.c @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2020-2021, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#include "fih.h" +#include "tfm_hal_defs.h" +#include "tfm_hal_platform.h" + +#ifdef TFM_FIH_PROFILE_ON +fih_int FIH_SUCCESS = FIH_INT_INIT(FIH_POSITIVE_VALUE); +fih_int FIH_FAILURE = FIH_INT_INIT(FIH_NEGATIVE_VALUE); +#endif + +#ifdef FIH_ENABLE_CFI +fih_int _fih_cfi_ctr = FIH_INT_INIT(0); + +fih_int fih_cfi_get_and_increment(uint8_t cnt) +{ + fih_int saved_ctr = _fih_cfi_ctr; + + if (fih_int_decode(_fih_cfi_ctr) < 0) { + FIH_PANIC; + } + + /* Overflow */ + if (fih_int_decode(_fih_cfi_ctr) > (fih_int_decode(_fih_cfi_ctr) + cnt)) { + FIH_PANIC; + } + + _fih_cfi_ctr = fih_int_encode(fih_int_decode(_fih_cfi_ctr) + cnt); + + fih_int_validate(_fih_cfi_ctr); + fih_int_validate(saved_ctr); + + return saved_ctr; +} + +void fih_cfi_validate(fih_int saved) +{ + volatile int32_t rc = FIH_FALSE; + + rc = fih_eq(saved, _fih_cfi_ctr); + if (rc != FIH_TRUE) { + FIH_PANIC; + } +} + +void fih_cfi_decrement(void) +{ + if (fih_int_decode(_fih_cfi_ctr) < 1) { + FIH_PANIC; + } + + _fih_cfi_ctr = fih_int_encode(fih_int_decode(_fih_cfi_ctr) - 1); + + fih_int_validate(_fih_cfi_ctr); +} +#endif /* FIH_ENABLE_CFI */ + +#ifdef FIH_ENABLE_GLOBAL_FAIL +/* Global failure loop for bootloader code. Uses attribute used to prevent + * compiler removing due to non-standard calling procedure. Multiple loop jumps + * used to make unlooping difficult. + */ +__attribute__((used)) +__attribute__((noinline)) +void fih_panic_loop(void) +{ + FIH_LABEL("FAILURE_LOOP"); + __asm volatile ("b fih_panic_loop"); + __asm volatile ("b fih_panic_loop"); + __asm volatile ("b fih_panic_loop"); + __asm volatile ("b fih_panic_loop"); + __asm volatile ("b fih_panic_loop"); + __asm volatile ("b fih_panic_loop"); + __asm volatile ("b fih_panic_loop"); + __asm volatile ("b fih_panic_loop"); + __asm volatile ("b fih_panic_loop"); +} +#endif /* FIH_ENABLE_GLOBAL_FAIL */ + +#ifdef FIH_ENABLE_DELAY +void fih_delay_init(void) +{ + volatile int32_t ret = TFM_HAL_ERROR_GENERIC; + + ret = tfm_hal_random_init(); + if (ret != TFM_HAL_SUCCESS) { + FIH_PANIC; + } +} + +uint8_t fih_delay_random(void) +{ + volatile int32_t ret = TFM_HAL_ERROR_GENERIC; + uint8_t rand_value = 0xFF; + + ret = tfm_hal_random_generate(&rand_value, sizeof(rand_value)); + if (ret != TFM_HAL_SUCCESS) { + FIH_PANIC; + } + + return rand_value; +} +#endif /* FIH_ENABLE_DELAY */ diff --git a/util/third_party/trusted-firmware-m/platform/ext/target/siliconlabs/hse/sli_se.c b/util/third_party/trusted-firmware-m/platform/ext/target/siliconlabs/hse/sli_se.c new file mode 100644 index 00000000000..bd25f2267e6 --- /dev/null +++ b/util/third_party/trusted-firmware-m/platform/ext/target/siliconlabs/hse/sli_se.c @@ -0,0 +1,61 @@ +/***************************************************************************//** + * @file + * @brief Silicon Labs Random Number Generator Implementation. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "sl_se_manager.h" +#include "sl_se_manager_entropy.h" +#include "tfm_hal_defs.h" +#include "tfm_hal_platform.h" + +int32_t tfm_hal_random_generate(uint8_t *rand, size_t size) +{ + sl_status_t ret; + sl_se_command_context_t cmd_ctx; + + // Initialize the SE manager. + ret = sl_se_init(); + if (ret != SL_STATUS_OK) { + return TFM_HAL_ERROR_GENERIC; + } + + // Initialize command context + ret = sl_se_init_command_context(&cmd_ctx); + if (ret != SL_STATUS_OK) { + return TFM_HAL_ERROR_GENERIC; + } + + // Get entropy + ret = sl_se_get_random(&cmd_ctx, rand, size); + + if (ret == SL_STATUS_OK) { + return TFM_HAL_SUCCESS; + } + + return TFM_HAL_ERROR_GENERIC; +} diff --git a/util/third_party/trusted-firmware-m/platform/ext/target/siliconlabs/vse/sli_cryptoacc.c b/util/third_party/trusted-firmware-m/platform/ext/target/siliconlabs/vse/sli_cryptoacc.c new file mode 100644 index 00000000000..f7ac25297c2 --- /dev/null +++ b/util/third_party/trusted-firmware-m/platform/ext/target/siliconlabs/vse/sli_cryptoacc.c @@ -0,0 +1,68 @@ +/***************************************************************************//** + * @file + * @brief Silicon Labs Random Number Generator Implementation. + ******************************************************************************* + * # 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. + * + ******************************************************************************/ + +#include "em_device.h" +#include "sx_trng.h" +#include "sx_primitives.h" +#include "sx_errors.h" +#include "cryptolib_types.h" + +#include "tfm_hal_platform.h" +#include "tfm_hal_defs.h" + +#include "cryptoacc_management.h" + +int32_t tfm_hal_random_init(void) +{ + psa_status_t status; + int32_t ret = TFM_HAL_ERROR_GENERIC; + status = cryptoacc_trng_initialize(); + if (status == PSA_SUCCESS) { + ret = TFM_HAL_SUCCESS; + } + return ret; +} + +int32_t tfm_hal_random_generate(uint8_t *rand, size_t size) +{ + // Enable cryptoacc accelerator + CMU->CLKEN1 |= CMU_CLKEN1_CRYPTOACC; + CMU->CRYPTOACCCLKCTRL |= CMU_CRYPTOACCCLKCTRL_PKEN; + CMU->CRYPTOACCCLKCTRL |= CMU_CRYPTOACCCLKCTRL_AESEN; + + sx_trng_get_rand_blk(block_t_convert(rand, size)); + + // Disable cryptoacc accelerator + CMU->CLKEN1 = (CMU->CLKEN1 & ~CMU_CLKEN1_CRYPTOACC); + CMU->CRYPTOACCCLKCTRL = (CMU->CRYPTOACCCLKCTRL & ~CMU_CRYPTOACCCLKCTRL_PKEN); + CMU->CRYPTOACCCLKCTRL = (CMU->CRYPTOACCCLKCTRL & ~CMU_CRYPTOACCCLKCTRL_AESEN); + + return TFM_HAL_SUCCESS; +} diff --git a/util/third_party/trusted-firmware-m/platform/include/tfm_hal_defs.h b/util/third_party/trusted-firmware-m/platform/include/tfm_hal_defs.h new file mode 100644 index 00000000000..c5e836bcfaf --- /dev/null +++ b/util/third_party/trusted-firmware-m/platform/include/tfm_hal_defs.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020-2021, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#ifndef __TFM_HAL_DEFS_H__ +#define __TFM_HAL_DEFS_H__ + +#include +#include + +enum tfm_hal_status_t { + TFM_HAL_ERROR_MEM_FAULT = SCHAR_MIN, + TFM_HAL_ERROR_MAX_VALUE = SCHAR_MIN + 0x3A5C, + TFM_HAL_ERROR_BAD_STATE = SCHAR_MIN + 0x55A3, + TFM_HAL_ERROR_NOT_SUPPORTED = SCHAR_MIN + 0xA3C5, + TFM_HAL_ERROR_INVALID_INPUT = SCHAR_MIN + 0xC35A, + TFM_HAL_ERROR_NOT_INIT = SCHAR_MIN + 0x33CA5, + TFM_HAL_ERROR_GENERIC = SCHAR_MIN + 0x3C5A, + TFM_HAL_SUCCESS = 0 +}; + +#endif /* __TFM_HAL_DEFS_H__ */ diff --git a/util/third_party/trusted-firmware-m/platform/include/tfm_hal_platform.h b/util/third_party/trusted-firmware-m/platform/include/tfm_hal_platform.h new file mode 100644 index 00000000000..d049d6042f3 --- /dev/null +++ b/util/third_party/trusted-firmware-m/platform/include/tfm_hal_platform.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2020-2021, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + * + */ + +#ifndef __TFM_HAL_PLATFORM_H__ +#define __TFM_HAL_PLATFORM_H__ + +#include +#include + +#ifdef TFM_FIH_PROFILE_ON +#include "fih.h" +#else +#include "tfm_hal_defs.h" +#endif + +#ifdef TFM_FIH_PROFILE_ON + +/** + * \brief This function performs the platform-specific initialization. + * + * This function is called after architecture and platform common initialization + * has finished during system early startup. + * + * \retval Returns values as specified by FIH specific platform error code. + */ +fih_int tfm_hal_platform_init(void); +#else +/** + * \brief This function performs the platform-specific initialization. + * + * This function is called after architecture and platform common initialization + * has finished during system early startup. + * + * \retval TFM_HAL_SUCCESS Init success. + * \retval TFM_HAL_ERROR_GENERIC Generic errors. + */ +enum tfm_hal_status_t tfm_hal_platform_init(void); +#endif + +/** + * \brief System reset + */ +void tfm_hal_system_reset(void); + +/** + * \brief Set up the RNG for use with random delays. + * + * \retval TFM_HAL_SUCCESS Platform specific random number generation + * initialization succeeded. + * \retval Other code Initialization failed. + */ +int32_t tfm_hal_random_init(void); + +/** + * \brief Get a random number from an RNG seeded with an entropy source. + * + * \param[out] rand Buffer to hold the random value + * \param[in] size The size of the buffer + * + * \retval TFM_HAL_SUCCESS Platform specific random number generation + * succeed. + * \retval Other code generation failed. + */ +int32_t tfm_hal_random_generate(uint8_t *rand, size_t size); + +#endif /* __TFM_HAL_PLATFORM_H__ */